{let t=e?.renderBefore??n,i=t._$litPart$;if(i===void 0){let r=e?.renderBefore??null;t._$litPart$=i=new H(n.insertBefore(z(),r),r,void 0,e??{})}return i._$AI(a),i};var ue=globalThis,x=class extends y{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let n=super.createRenderRoot();return this.renderOptions.renderBefore??=n.firstChild,n}update(n){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(n),this._$Do=Ne(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return T}};x._$litElement$=!0,x.finalized=!0,ue.litElementHydrateSupport?.({LitElement:x});var vt=ue.litElementPolyfillSupport;vt?.({LitElement:x});(ue.litElementVersions??=[]).push("4.2.2");var je=a=>(n,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(a,n)}):customElements.define(a,n)};var _t={attribute:!0,type:String,converter:P,reflect:!1,hasChanged:q},yt=(a=_t,n,e)=>{let{kind:t,metadata:i}=e,r=globalThis.litPropertyMetadata.get(i);if(r===void 0&&globalThis.litPropertyMetadata.set(i,r=new Map),t==="setter"&&((a=Object.create(a)).wrapped=!0),r.set(e.name,a),t==="accessor"){let{name:s}=e;return{set(u){let l=n.get.call(this);n.set.call(this,u),this.requestUpdate(s,l,a,!0,u)},init(u){return u!==void 0&&this.C(s,void 0,a,u),u}}}if(t==="setter"){let{name:s}=e;return function(u){let l=this[s];n.call(this,u),this.requestUpdate(s,l,a,!0,u)}}throw Error("Unsupported decorator location: "+t)};function N(a){return(n,e)=>typeof e=="object"?yt(a,n,e):((t,i,r)=>{let s=i.hasOwnProperty(r);return i.constructor.createProperty(r,t),s?Object.getOwnPropertyDescriptor(i,r):void 0})(a,n,e)}function g(a){return N({...a,state:!0,attribute:!1})}function pe(a,n){return o`${a.map(e=>$t(e,n))}`}function $t(a,n){switch(a.k){case"newline":return o` `;case"indent":return o`${a.t} `;case"keyword":return o`${a.t} `;case"operator":return o`${a.t} `;case"value":return o`${a.t} `;case"ref":{let e=n&&a.ek&&typeof a.ei=="number"?()=>n(a.ek,a.ei):void 0;return o`
${a.t}
${a.s?o`${a.s} `:""}
`}default:return o`${a.t} `}}var K=[{value:0,label:"Turn OFF unit",ref_kind:"unit"},{value:1,label:"Turn ON unit",ref_kind:"unit"},{value:2,label:"All OFF",ref_kind:null},{value:3,label:"All ON",ref_kind:null},{value:4,label:"Bypass zone",ref_kind:"zone"},{value:5,label:"Restore zone",ref_kind:"zone"},{value:7,label:"Execute button",ref_kind:"button"},{value:9,label:"Set unit level %",ref_kind:"unit"},{value:48,label:"Disarm area",ref_kind:"area"},{value:49,label:"Arm area Day",ref_kind:"area"},{value:50,label:"Arm area Night",ref_kind:"area"},{value:51,label:"Arm area Away",ref_kind:"area"},{value:52,label:"Arm area Vacation",ref_kind:"area"}];function j(a){return K.find(n=>n.value===a)}var he=[{bit:2,label:"Mon"},{bit:4,label:"Tue"},{bit:8,label:"Wed"},{bit:16,label:"Thu"},{bit:32,label:"Fri"},{bit:64,label:"Sat"},{bit:128,label:"Sun"}],me=1,ge=2,be=3;var J=[{id:768,label:"Phone line dead"},{id:769,label:"Phone ringing"},{id:770,label:"Phone off hook"},{id:771,label:"Phone on hook"},{id:772,label:"AC power lost"},{id:773,label:"AC power restored"}];function C(a){if(J.some(n=>n.id===a))return{category:"fixed",fixedId:a};if(!(a&65280))return{category:"button",button:a&255};if((a&64512)===1024){let n=a&1023;return{category:"zone",zone:Math.floor(n/4)+1,zoneState:n%4}}if((a&64512)===2048){let n=a&1023;return{category:"unit",unit:Math.floor(n/2)+1,unitOn:(n&1)===1}}return{category:"raw",raw:a}}function fe(a){switch(a.category){case"button":return(a.button??1)&255;case"zone":{let n=(a.zone??1)-1,e=(a.zoneState??0)&3;return 1024|n*4+e&1023}case"unit":{let n=(a.unit??1)-1,e=a.unitOn?1:0;return 2048|n*2+e&1023}case"fixed":return a.fixedId??768;case"raw":default:return a.raw??0}}function R(a){return(a.month??0)<<8|(a.day??0)}function Ye(a,n){return{...a,month:n>>8&255,day:n&255}}var Be=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ve=[{value:0,label:"always"},{value:1,label:"never"},{value:2,label:"it is light outside"},{value:3,label:"it is dark outside"},{value:4,label:"phone line is dead"},{value:5,label:"phone is ringing"},{value:6,label:"phone is off hook"},{value:7,label:"phone is on hook"},{value:8,label:"AC power is off"},{value:9,label:"AC power is on"},{value:10,label:"battery is low"},{value:11,label:"battery is OK"},{value:12,label:"energy cost is low"},{value:13,label:"energy cost is mid"},{value:14,label:"energy cost is high"},{value:15,label:"energy cost is critical"}],_e=[{value:0,label:"Off (disarmed)"},{value:1,label:"Day"},{value:2,label:"Night"},{value:3,label:"Away"},{value:4,label:"Vacation"},{value:5,label:"Day Instant"},{value:6,label:"Night Delayed"}];function We(a){if(a===0)return{family:"none"};let n=a>>8&252,e=(a&512)!==0;return n===0?{family:"misc",misc:a&15}:n===4?{family:"zone",index:a&255,active:e}:n===8?{family:"unit",index:a&511,active:e}:n===12?{family:"time",index:a&255,active:e}:{family:"sec",index:a>>8&15,mode:a>>12&7}}function _(a){switch(a.family){case"none":return 0;case"misc":return(a.misc??0)&15;case"zone":{let n=(a.index??0)&255;return 1024|(a.active?512:0)|n}case"unit":{let n=(a.index??0)&511;return 2048|(a.active?512:0)|n}case"time":{let n=(a.index??0)&255;return 3072|(a.active?512:0)|n}case"sec":{let n=(a.index??1)&15;return((a.mode??0)&7)<<12|n<<8}}}var Ve=5,qe=6,Ge=7,xt=8,ye=9,Et=10;function Ze(a){let n=(a.cond??0)&255,e=(a.cond2??0)>>8&255,t=n&252,i=(n&2)!==0;return n===0&&e===0?{family:"none"}:t===0?{family:"misc",misc:n&15}:t===4?{family:"zone",index:e,active:i}:t===8?{family:"unit",index:e,active:i}:t===12?{family:"time",index:e,active:i}:{family:"sec",index:n&15,mode:n>>4&7}}function $e(a){switch(a.family){case"none":return{cond:0,cond2:0};case"misc":return{cond:(a.misc??0)&15,cond2:0};case"zone":return{cond:4|(a.active?2:0),cond2:((a.index??0)&255)<<8};case"unit":return{cond:8|(a.active?2:0),cond2:((a.index??0)&255)<<8};case"time":return{cond:12|(a.active?2:0),cond2:((a.index??0)&255)<<8};case"sec":{let n=(a.index??1)&15;return{cond:((a.mode??0)&7)<<4|n,cond2:0}}}}function Ke(a){return((a.cond??0)>>8&255)!==0}function xe(){return{prog_type:xt,cond:1,cond2:0,cmd:0,par:0,pr2:0,month:0,day:0,days:0,hour:0,minute:0}}function Je(){return{...xe(),prog_type:ye}}function Xe(a=1){return{prog_type:Et,cmd:0,par:0,pr2:a,cond:0,cond2:0,month:0,day:0,days:0,hour:0,minute:0}}var Qe=[{value:1,label:"=="},{value:2,label:"!="},{value:3,label:"<"},{value:4,label:">"},{value:5,label:"is odd"},{value:6,label:"is even"},{value:7,label:"is multiple of"},{value:8,label:"in (bitmask)"},{value:9,label:"not in (bitmask)"}];function Ee(a){return a===5||a===6}var X=[{value:0,label:"Constant",kind:null},{value:2,label:"Zone",kind:"zone"},{value:3,label:"Unit",kind:"unit"},{value:4,label:"Thermostat",kind:"thermostat"},{value:6,label:"Area",kind:"area"},{value:7,label:"Time / Date",kind:null}];function Ue(a){return[2,3,4,6,7].includes(a)}function U(a){let n=X.find(e=>e.value===a);return n?n.kind:null}var Y={2:[{value:1,label:"Loop reading"},{value:2,label:"Current state"},{value:3,label:"Arming state"},{value:4,label:"Alarm state"}],3:[{value:1,label:"Current state"},{value:2,label:"Previous state"},{value:3,label:"Timer"},{value:4,label:"Level"}],4:[{value:1,label:"Current temperature"},{value:2,label:"Heat setpoint"},{value:3,label:"Cool setpoint"},{value:4,label:"System mode"},{value:5,label:"Fan mode"},{value:6,label:"Hold mode"},{value:7,label:"Freeze alarm"},{value:8,label:"Comm error"},{value:9,label:"Humidity"},{value:10,label:"Humidify setpoint"},{value:11,label:"Dehumidify setpoint"},{value:12,label:"Outdoor temperature"},{value:13,label:"System status"}],6:[{value:1,label:"Security mode"}],7:[{value:2,label:"Year"},{value:3,label:"Month"},{value:4,label:"Day"},{value:5,label:"Day of week (1=Mon..7=Sun)"},{value:6,label:"Time (minutes since midnight)"},{value:8,label:"Hour"},{value:9,label:"Minute"}]};function et(a){return{op:(a.cond??0)>>8&255,arg1Type:(a.cond??0)&255,arg1Ix:a.cond2??0,arg1Field:a.cmd??0,arg2Type:a.par??0,arg2Ix:a.pr2??0,arg2Field:a.month??0,compConst:(a.day??0)<<8|(a.days??0)}}function tt(a){return{cond:(a.op&255)<<8|a.arg1Type&255,cond2:a.arg1Ix&65535,cmd:a.arg1Field&255,par:a.arg2Type&255,pr2:a.arg2Ix&65535,month:a.arg2Field&255,day:a.compConst>>8&255,days:a.compConst&255}}function nt(a){return!(!Ue(a.arg1Type)||!Ee(a.op)&&a.arg2Type!==0&&!Ue(a.arg2Type)||a.compConst!==0)}var it=new Set(["TIMED","EVENT","YEARLY"]),kt=["TIMED","EVENT","YEARLY","WHEN","AT","EVERY","REMARK"],St=5e3,h=class extends x{constructor(){super(...arguments);this.narrow=!1;this._entryId=null;this._rows=[];this._total=0;this._filteredTotal=0;this._loading=!1;this._error=null;this._activeTriggerTypes=new Set;this._referenceFilter=null;this._searchTerm="";this._selectedSlot=null;this._detail=null;this._detailLoading=!1;this._fireFeedback=null;this._writeFeedback=null;this._cloneTargetSlot="";this._showCloneInput=!1;this._confirmingClear=!1;this._editingDraft=null;this._objects=null;this._chainDraft=null;this._refreshTimer=null}connectedCallback(){super.connectedCallback(),this._discoverEntry(),this._entryId&&(this._loadList(),this._startRefreshTimer())}disconnectedCallback(){super.disconnectedCallback(),this._stopRefreshTimer()}updated(e){e.has("hass")&&this._entryId===null&&(this._discoverEntry(),this._entryId&&(this._loadList(),this._startRefreshTimer()))}_discoverEntry(){this.hass?.connection&&this._discoverViaList()}async _discoverViaList(){try{let t=(await this.hass.connection.sendMessagePromise({type:"config_entries/get"})).filter(r=>r.domain==="omni_pca");if(t.length===0){this._error="No Omni panel configured. Add one via Settings \u2192 Devices & Services.";return}let i=t.find(r=>r.state==="loaded");this._entryId=(i??t[0]).entry_id,this._error=null,this._loadList(),this._startRefreshTimer()}catch(e){this._error=`Could not discover panels: ${e instanceof Error?e.message:String(e)}`}}async _loadList(){if(this._entryId){this._loading=!0,this._error=null;try{let e={type:"omni_pca/programs/list",entry_id:this._entryId};this._activeTriggerTypes.size>0&&(e.trigger_types=[...this._activeTriggerTypes]),this._referenceFilter&&(e.references_entity=this._referenceFilter),this._searchTerm&&(e.search=this._searchTerm);let t=await this.hass.connection.sendMessagePromise(e);this._rows=t.programs,this._total=t.total,this._filteredTotal=t.filtered_total}catch(e){this._error=e instanceof Error?e.message:String(e)}finally{this._loading=!1}}}async _loadDetail(e){if(this._entryId){this._detailLoading=!0,this._detail=null;try{this._detail=await this.hass.connection.sendMessagePromise({type:"omni_pca/programs/get",entry_id:this._entryId,slot:e})}catch(t){this._error=t instanceof Error?t.message:String(t)}finally{this._detailLoading=!1}}}async _fireProgram(e){if(this._entryId){this._fireFeedback="firing\u2026";try{await this.hass.connection.sendMessagePromise({type:"omni_pca/programs/fire",entry_id:this._entryId,slot:e}),this._fireFeedback=`fired slot ${e}`}catch(t){this._fireFeedback=`error: ${t instanceof Error?t.message:t}`}setTimeout(()=>{this._fireFeedback=null},4e3)}}async _clearProgram(e){if(this._entryId){this._writeFeedback="clearing\u2026";try{await this.hass.connection.sendMessagePromise({type:"omni_pca/programs/clear",entry_id:this._entryId,slot:e}),this._writeFeedback=`cleared slot ${e}`,this._confirmingClear=!1,this._selectedSlot=null,this._detail=null,await this._loadList()}catch(t){let i=t instanceof Error?t.message:String(t);this._writeFeedback=`error: ${i}`}setTimeout(()=>{this._writeFeedback=null},4e3)}}async _cloneProgram(e){if(!this._entryId)return;let t=this._cloneTargetSlot.trim(),i=parseInt(t,10);if(!Number.isFinite(i)||i<1||i>1500){this._writeFeedback="target slot must be 1..1500",setTimeout(()=>{this._writeFeedback=null},4e3);return}if(i===e){this._writeFeedback="target must differ from source",setTimeout(()=>{this._writeFeedback=null},4e3);return}this._writeFeedback="cloning\u2026";try{await this.hass.connection.sendMessagePromise({type:"omni_pca/programs/clone",entry_id:this._entryId,source_slot:e,target_slot:i}),this._writeFeedback=`cloned to slot ${i}`,this._showCloneInput=!1,this._cloneTargetSlot="",this._selectedSlot=i,await this._loadList(),await this._loadDetail(i)}catch(r){let s=r instanceof Error?r.message:String(r);this._writeFeedback=`error: ${s}`}setTimeout(()=>{this._writeFeedback=null},4e3)}_onCloneTargetInput(e){this._cloneTargetSlot=e.target.value}async _ensureObjectsLoaded(){if(!(this._objects!==null||!this._entryId))try{this._objects=await this.hass.connection.sendMessagePromise({type:"omni_pca/objects/list",entry_id:this._entryId})}catch(e){let t=e instanceof Error?e.message:String(e);console.warn("omni_pca: objects/list failed",t)}}async _beginEdit(){if(!this._detail||(await this._ensureObjectsLoaded(),!this._entryId))return;if(this._detail.kind==="chain"){this._beginChainEdit();return}if(!it.has(this._detail.trigger_type))return;let e=this._detail.fields??this._defaultFieldsForType(this._detail.trigger_type);e!==null&&(this._editingDraft={...e},this._stopRefreshTimer())}_beginChainEdit(){if(!this._detail||!this._detail.chain_members)return;let e=this._detail.chain_members,t=e.find(i=>i.role==="head");t&&(this._chainDraft={headSlot:t.slot,head:{...t.fields},conditions:e.filter(i=>i.role==="condition").map(i=>({...i.fields})),actions:e.filter(i=>i.role==="action").map(i=>({...i.fields}))},this._stopRefreshTimer())}_cancelChainEdit(){this._chainDraft=null,this._startRefreshTimer()}async _saveChainDraft(){if(!(!this._chainDraft||!this._entryId)){this._writeFeedback="saving chain\u2026";try{await this.hass.connection.sendMessagePromise({type:"omni_pca/programs/chain/write",entry_id:this._entryId,head_slot:this._chainDraft.headSlot,head:this._chainDraft.head,conditions:this._chainDraft.conditions,actions:this._chainDraft.actions}),this._writeFeedback=`saved chain @ slot ${this._chainDraft.headSlot}`;let e=this._chainDraft.headSlot;this._chainDraft=null,this._startRefreshTimer(),await this._loadList(),await this._loadDetail(e)}catch(e){let t=e instanceof Error?e.message:String(e);this._writeFeedback=`error: ${t}`}setTimeout(()=>{this._writeFeedback=null},4e3)}}_patchChainHead(e){this._chainDraft&&(this._chainDraft={...this._chainDraft,head:{...this._chainDraft.head,...e}})}_patchChainCondition(e,t){if(!this._chainDraft)return;let i=[...this._chainDraft.conditions];i[e]={...i[e],...t},this._chainDraft={...this._chainDraft,conditions:i}}_addChainCondition(e=!1){if(!this._chainDraft)return;let t=e?Je():xe();this._chainDraft={...this._chainDraft,conditions:[...this._chainDraft.conditions,t]}}_removeChainCondition(e){if(!this._chainDraft)return;let t=this._chainDraft.conditions.filter((i,r)=>r!==e);this._chainDraft={...this._chainDraft,conditions:t}}_patchChainAction(e,t){if(!this._chainDraft)return;let i=[...this._chainDraft.actions];i[e]={...i[e],...t},this._chainDraft={...this._chainDraft,actions:i}}_addChainAction(){if(!this._chainDraft)return;let e=this._objects?.units?.[0]?.index??1;this._chainDraft={...this._chainDraft,actions:[...this._chainDraft.actions,Xe(e)]}}_removeChainAction(e){if(!this._chainDraft||this._chainDraft.actions.length<=1)return;let t=this._chainDraft.actions.filter((i,r)=>r!==e);this._chainDraft={...this._chainDraft,actions:t}}_defaultFieldsForType(e){let t=this._objects?.units?.[0]?.index??1;if(e==="TIMED")return{prog_type:me,cmd:1,par:0,pr2:t,hour:6,minute:0,days:62,cond:0,cond2:0,month:0,day:0};if(e==="EVENT"){let i=this._objects?.buttons?.[0]?.index??1;return{prog_type:ge,cmd:1,par:0,pr2:t,month:0,day:i&255,hour:0,minute:0,days:0,cond:0,cond2:0}}return e==="YEARLY"?{prog_type:be,cmd:1,par:0,pr2:t,month:1,day:1,hour:0,minute:0,days:0,cond:0,cond2:0}:null}async _saveDraft(){if(!(!this._editingDraft||!this._detail||!this._entryId)){this._writeFeedback="saving\u2026";try{await this.hass.connection.sendMessagePromise({type:"omni_pca/programs/write",entry_id:this._entryId,slot:this._detail.slot,program:this._editingDraft}),this._writeFeedback=`saved slot ${this._detail.slot}`,this._editingDraft=null,this._startRefreshTimer(),await this._loadList(),await this._loadDetail(this._detail.slot)}catch(e){let t=e instanceof Error?e.message:String(e);this._writeFeedback=`error: ${t}`}setTimeout(()=>{this._writeFeedback=null},4e3)}}_cancelEdit(){this._editingDraft=null,this._startRefreshTimer()}_patchDraft(e){this._editingDraft&&(this._editingDraft={...this._editingDraft,...e})}_toggleDayBit(e){if(!this._editingDraft)return;let i=(this._editingDraft.days??0)^e;this._patchDraft({days:i})}_onCommandChange(e){let t=parseInt(e.target.value,10);if(!Number.isFinite(t))return;let i=j(t),r=this._editingDraft?.pr2??0;if(i?.ref_kind&&this._objects){let s=this._pickBucket(i.ref_kind);s&&s.length>0&&!s.some(u=>u.index===r)&&(r=s[0].index)}else i?.ref_kind||(r=0);this._patchDraft({cmd:t,pr2:r})}_pickBucket(e){if(!this._objects)return null;switch(e){case"zone":return this._objects.zones;case"unit":return this._objects.units;case"area":return this._objects.areas;case"button":return this._objects.buttons;case"thermostat":return this._objects.thermostats;default:return null}}_bucketWithPreserve(e,t,i){let r=e??[];return i===0||r.some(s=>s.index===i)?r:[{index:i,name:`(undiscovered ${t} ${i} \u2014 preserve original)`},...r]}_onObjectChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&this._patchDraft({pr2:t})}_onHourChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&t>=0&&t<=23&&this._patchDraft({hour:t})}_onMinuteChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&t>=0&&t<=59&&this._patchDraft({minute:t})}_onParChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&t>=0&&t<=255&&this._patchDraft({par:t})}_onMonthChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&t>=1&&t<=12&&this._patchDraft({month:t})}_onDayChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&t>=1&&t<=31&&this._patchDraft({day:t})}_patchEvent(e){if(!this._editingDraft)return;let t=fe(e);this._editingDraft=Ye(this._editingDraft,t)}_onEventCategoryChange(e){let t=e.target.value;if(t==="button"){let i=this._objects?.buttons?.[0]?.index??1;this._patchEvent({category:"button",button:i})}else if(t==="zone"){let i=this._objects?.zones?.[0]?.index??1;this._patchEvent({category:"zone",zone:i,zoneState:1})}else if(t==="unit"){let i=this._objects?.units?.[0]?.index??1;this._patchEvent({category:"unit",unit:i,unitOn:!0})}else t==="fixed"&&this._patchEvent({category:"fixed",fixedId:772})}_onEventButtonChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&this._patchEvent({category:"button",button:t})}_onEventZoneChange(e){if(!this._editingDraft)return;let t=parseInt(e.target.value,10);if(!Number.isFinite(t))return;let i=C(R(this._editingDraft));this._patchEvent({category:"zone",zone:t,zoneState:i.zoneState??1})}_onEventZoneStateChange(e){if(!this._editingDraft)return;let t=parseInt(e.target.value,10);if(!Number.isFinite(t))return;let i=C(R(this._editingDraft));this._patchEvent({category:"zone",zone:i.zone??1,zoneState:t})}_onEventUnitChange(e){if(!this._editingDraft)return;let t=parseInt(e.target.value,10);if(!Number.isFinite(t))return;let i=C(R(this._editingDraft));this._patchEvent({category:"unit",unit:t,unitOn:i.unitOn??!0})}_onEventUnitOnChange(e){if(!this._editingDraft)return;let t=e.target.value==="1",i=C(R(this._editingDraft));this._patchEvent({category:"unit",unit:i.unit??1,unitOn:t})}_onEventFixedChange(e){let t=parseInt(e.target.value,10);Number.isFinite(t)&&this._patchEvent({category:"fixed",fixedId:t})}_startRefreshTimer(){this._refreshTimer===null&&(this._refreshTimer=window.setInterval(()=>{this._loadList(),this._selectedSlot!==null&&this._loadDetail(this._selectedSlot)},St))}_stopRefreshTimer(){this._refreshTimer!==null&&(window.clearInterval(this._refreshTimer),this._refreshTimer=null)}_toggleTriggerFilter(e){let t=new Set(this._activeTriggerTypes);t.has(e)?t.delete(e):t.add(e),this._activeTriggerTypes=t,this._loadList()}_onSearchInput(e){this._searchTerm=e.target.value,this._loadList()}_clearReferenceFilter(){this._referenceFilter=null,this._loadList()}_onRowClick(e){this._selectedSlot=e,this._loadDetail(e)}_onRefClick(e,t){this._referenceFilter=`${e}:${t}`,this._selectedSlot=null,this._detail=null,this._loadList()}_closeDetail(){this._selectedSlot=null,this._detail=null}render(){return o`
${this._error?o`
${this._error}
`:""}
${this._renderFilters()}
${this._renderList()}
${this._selectedSlot!==null?this._renderDetail():""}
`}_renderFilters(){return o`
${kt.map(e=>o`
this._toggleTriggerFilter(e)}
>${e}
`)}
${this._referenceFilter?o`
filtering on ${this._referenceFilter}
clear
`:""}
`}_renderList(){return this._loading&&this._rows.length===0?o`loading…
`:this._rows.length===0?o`No programs match the current filters.
`:o`
${this._rows.map(e=>o`
this._onRowClick(e.slot)}
>
#${e.slot}
${pe(e.summary,(t,i)=>this._onRefClick(t,i))}
${e.trigger_type}
${e.condition_count>0?o`
${e.condition_count} cond `:""}
${e.action_count>1?o`
${e.action_count} actions `:""}
`)}
`}_renderDetail(){if(this._detailLoading)return o``;if(this._detail===null)return o``;let e=this._detail;return this._editingDraft!==null?this._renderEditor(e):this._chainDraft!==null?this._renderChainEditor(e):o`
${pe(e.tokens,(t,i)=>this._onRefClick(t,i))}
this._fireProgram(e.slot)}
>▶ Fire now
${e.kind==="compact"&&it.has(e.trigger_type)||e.kind==="chain"?o`
Edit `:""}
{this._showCloneInput=!this._showCloneInput,this._confirmingClear=!1}}
>Clone…
{this._confirmingClear=!this._confirmingClear,this._showCloneInput=!1}}
>Clear
${this._fireFeedback?o`
${this._fireFeedback} `:""}
${this._writeFeedback?o`
${this._writeFeedback} `:""}
${this._showCloneInput?o`
Clone slot ${e.slot} → target slot:
{t.key==="Enter"&&this._cloneProgram(e.slot)}}
/>
this._cloneProgram(e.slot)}
>Clone
{this._showCloneInput=!1}}
>Cancel
`:""}
${this._confirmingClear?o`
Clear slot ${e.slot}?
This deletes the program from the panel.
this._clearProgram(e.slot)}
>Yes, clear
{this._confirmingClear=!1}}
>Cancel
`:""}
${e.chain_slots&&e.chain_slots.length>1?o`
spans slots
${e.chain_slots.map((t,i)=>o`
${i>0?"\u2192":""}#${t}`)}
`:""}
`}_renderEditor(e){let t=this._editingDraft,i=e.trigger_type;return o`
${this._renderTriggerSection(t)}
${this._renderActionSection(t)}
${this._renderConditionsSection(t)}
Save
Cancel
${this._writeFeedback?o`
${this._writeFeedback} `:""}
`}_renderTriggerSection(e){switch(e.prog_type){case me:return this._renderTimedTrigger(e);case ge:return this._renderEventTrigger(e);case be:return this._renderYearlyTrigger(e);default:return o`
Editing program type ${e.prog_type} is not supported.
`}}_renderTimedTrigger(e){return o`
Time
Hour
:
Minute
Days
${he.map(t=>{let i=((e.days??0)&t.bit)!==0;return o`
this._toggleDayBit(t.bit)}
>${t.label}
`})}
`}_renderEventTrigger(e){let t=R(e),i=C(t);return o`
Trigger event
Category
Button press
Zone state change
Unit state change
Fixed event (phone / AC)
${i.category==="raw"?o`
Raw 0x${t.toString(16).padStart(4,"0")}
`:""}
${this._renderEventCategoryFields(i)}
`}_renderEventCategoryFields(e){if(e.category==="button"){let t=this._bucketWithPreserve(this._objects?.buttons??null,"button",e.button??0);return o`
Button
${t.map(i=>o`
#${i.index} ${i.name}
`)}
`}if(e.category==="zone"){let t=this._bucketWithPreserve(this._objects?.zones??null,"zone",e.zone??0);return o`
Zone
${t.map(i=>o`
#${i.index} ${i.name}
`)}
Becomes
secure
not ready
trouble
tamper
`}if(e.category==="unit"){let t=this._bucketWithPreserve(this._objects?.units??null,"unit",e.unit??0);return o`
Unit
${t.map(i=>o`
#${i.index} ${i.name}
`)}
Turns
ON
OFF
`}return e.category==="fixed"?o`
Event
${J.map(t=>o`
${t.label}
`)}
`:o`
Unrecognised event ID. Switch category above to redefine.
`}_renderYearlyTrigger(e){return o`
Date
Month
${Be.map((t,i)=>o`
${t} (${i+1})
`)}
Day
Time of day
Hour
:
Minute
`}_renderActionSection(e){let t=j(e.cmd??0),i=t?.ref_kind?this._bucketWithPreserve(this._pickBucket(t.ref_kind),t.ref_kind,e.pr2??0):null,r=e.cmd===9;return o`
Action
Command
${K.map(s=>o`
${s.label}
`)}
${t?.ref_kind?o`
${t.ref_kind[0].toUpperCase()+t.ref_kind.slice(1)}
${(i??[]).map(s=>o`
#${s.index} ${s.name}
`)}
`:""}
${r?o`
Level (0..100)
`:""}
`}_renderConditionsSection(e){return o`
Inline AND-IF conditions
${this._renderConditionSlot("First condition",e.cond??0,t=>this._patchDraft({cond:t}))}
${this._renderConditionSlot("Second condition",e.cond2??0,t=>this._patchDraft({cond2:t}))}
`}_renderConditionSlot(e,t,i){let r=We(t),s=u=>{let l=this._objects?.zones?.[0]?.index??1,p=this._objects?.units?.[0]?.index??1,c=this._objects?.areas?.[0]?.index??1,d;switch(u){case"none":d={family:"none"};break;case"misc":d={family:"misc",misc:1};break;case"zone":d={family:"zone",index:l,active:!1};break;case"unit":d={family:"unit",index:p,active:!0};break;case"time":d={family:"time",index:1,active:!0};break;case"sec":d={family:"sec",index:c,mode:0};break}i(_(d))};return o`
${e}
s(u.target.value)}>
(none)
Zone state
Unit state
Area in security mode
Time clock
Misc (light, AC power, …)
${this._renderConditionSubfields(r,i)}
`}_renderConditionSubfields(e,t){if(e.family==="none")return o``;if(e.family==="zone"){let i=this._bucketWithPreserve(this._objects?.zones??null,"zone",e.index??0);return o`
Zone
{let s=parseInt(r.target.value,10);t(_({...e,index:s}))}}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Is
{let s=r.target.value==="1";t(_({...e,active:s}))}}>
secure
not ready
`}if(e.family==="unit"){let i=this._bucketWithPreserve(this._objects?.units??null,"unit",e.index??0);return o`
Unit
{let s=parseInt(r.target.value,10);t(_({...e,index:s}))}}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Is
{let s=r.target.value==="1";t(_({...e,active:s}))}}>
ON
OFF
`}if(e.family==="sec"){let i=this._bucketWithPreserve(this._objects?.areas??null,"area",e.index??0);return o`
Area
{let s=parseInt(r.target.value,10);t(_({...e,index:s}))}}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Mode
{let s=parseInt(r.target.value,10);t(_({...e,mode:s}))}}>
${_e.map(r=>o`
${r.label}
`)}
`}return e.family==="time"?o`
Time clock # (1..3)
{let r=parseInt(i.target.value,10);Number.isFinite(r)&&t(_({...e,index:r}))}}
/>
Is
{let r=i.target.value==="1";t(_({...e,active:r}))}}>
enabled
disabled
`:o`
Condition
{let r=parseInt(i.target.value,10);t(_({family:"misc",misc:r}))}}>
${ve.map(i=>o`
${i.label}
`)}
`}_renderChainEditor(e){let t=this._chainDraft;return o`
${this._renderChainHeadSection(t.head)}
${this._renderChainConditionsSection(t.conditions)}
${this._renderChainActionsSection(t.actions)}
Chain will occupy ${1+t.conditions.length+t.actions.length}
consecutive slots starting at #${t.headSlot}.
Save chain
Cancel
${this._writeFeedback?o`
${this._writeFeedback} `:""}
`}_renderChainHeadSection(e){return e.prog_type===Ve?this._renderEventTriggerChain(e):e.prog_type===qe?this._renderTimedTriggerChain(e):e.prog_type===Ge?this._renderEveryTriggerChain(e):o`
Editing trigger type ${e.prog_type} (chain head) is not supported.
`}_renderTimedTriggerChain(e){return o`
AT (trigger)
Hour
this._patchChainHead({hour:parseInt(t.target.value,10)||0})}
/>
:
Minute
this._patchChainHead({minute:parseInt(t.target.value,10)||0})}
/>
${he.map(t=>{let i=((e.days??0)&t.bit)!==0;return o`
this._patchChainHead({days:(e.days??0)^t.bit})}
>${t.label} `})}
`}_renderEventTriggerChain(e){let t=(e.month??0)<<8|(e.day??0),i=C(t),r=s=>{let u=fe(s);this._patchChainHead({month:u>>8&255,day:u&255})};return o`
WHEN (trigger event)
Category
{let u=s.target.value;if(u==="button"){let l=this._objects?.buttons?.[0]?.index??1;r({category:"button",button:l})}else if(u==="zone"){let l=this._objects?.zones?.[0]?.index??1;r({category:"zone",zone:l,zoneState:1})}else if(u==="unit"){let l=this._objects?.units?.[0]?.index??1;r({category:"unit",unit:l,unitOn:!0})}else u==="fixed"&&r({category:"fixed",fixedId:772})}}>
Button press
Zone state change
Unit state change
Fixed (phone / AC)
${i.category==="raw"?o`
Raw 0x${t.toString(16).padStart(4,"0")} `:""}
${this._renderChainEventSubfields(i,r)}
`}_renderChainEventSubfields(e,t){if(e.category==="button"){let i=this._bucketWithPreserve(this._objects?.buttons??null,"button",e.button??0);return o`
Button
t({category:"button",button:parseInt(r.target.value,10)})}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
`}if(e.category==="zone"){let i=this._bucketWithPreserve(this._objects?.zones??null,"zone",e.zone??0);return o`
Zone
t({...e,category:"zone",zone:parseInt(r.target.value,10),zoneState:e.zoneState??1})}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Becomes
t({...e,category:"zone",zone:e.zone??1,zoneState:parseInt(r.target.value,10)})}>
secure
not ready
trouble
tamper
`}if(e.category==="unit"){let i=this._bucketWithPreserve(this._objects?.units??null,"unit",e.unit??0);return o`
Unit
t({...e,category:"unit",unit:parseInt(r.target.value,10),unitOn:e.unitOn??!0})}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Turns
t({...e,category:"unit",unit:e.unit??1,unitOn:r.target.value==="1"})}>
ON
OFF
`}return e.category==="fixed"?o`
Event
t({category:"fixed",fixedId:parseInt(i.target.value,10)})}>
${J.map(i=>o`
${i.label}
`)}
`:o`Unrecognised event ID. Pick a category to redefine.
`}_renderEveryTriggerChain(e){let t=((e.cond??0)&255)<<8|(e.cond2??0)>>8&255;return o`
EVERY (interval, seconds)
Seconds between fires
{let r=parseInt(i.target.value,10);!Number.isFinite(r)||r<1||this._patchChainHead({cond:r>>8&255,cond2:(r&255)<<8})}}
/>
`}_renderChainConditionsSection(e){return o`
Conditions (${e.length})
this._addChainCondition(!1)}>
+ AND IF
this._addChainCondition(!0)}>
+ OR IF
${e.length===0?o`
No conditions — chain fires unconditionally when triggered.
`:""}
${e.map((t,i)=>this._renderChainConditionRow(t,i))}
`}_renderChainConditionRow(e,t){let i=e.prog_type===ye;if(Ke(e))return this._renderStructuredChainConditionRow(e,t,i);let r=Ze(e);return o`
${this._renderChainCondFamily(r,t)}
`}_renderStructuredChainConditionRow(e,t,i){let r=et(e);return nt(r)?o`
${this._renderStructuredAndForm(r,t)}
`:o`
Structured comparison with a shape the editor can't drive
yet (Arg1 or Arg2 is an unsupported type, or a CompConst
value is present). Preserved on save.
`}_renderStructuredAndForm(e,t){let i=c=>{let d={...e,...c};this._patchChainCondition(t,tt(d))},r=Y[e.arg1Type]??[],s=U(e.arg1Type),u=Y[e.arg2Type]??[],l=U(e.arg2Type),p=!Ee(e.op);return o`
Arg1 type
{let d=parseInt(c.target.value,10);i({arg1Type:d,arg1Ix:this._defaultIxForKind(U(d)),arg1Field:(Y[d]??[{value:0}])[0].value})}}>
${X.filter(c=>c.value!==0).map(c=>o`
${c.label}
`)}
${s?this._renderStructuredObjectPicker(s,e.arg1Ix,c=>i({arg1Ix:c}),"Arg1"):""}
${r.length>0?o`
Field
i({arg1Field:parseInt(c.target.value,10)})}>
${r.map(c=>o`
${c.label}
`)}
`:""}
Operator
i({op:parseInt(c.target.value,10)})}>
${Qe.map(c=>o`
${c.label}
`)}
${p?o`
Arg2 type
{let d=parseInt(c.target.value,10),f=U(d),v=d===0?e.arg2Ix:this._defaultIxForKind(f),F=d===0?0:(Y[d]??[{value:0}])[0].value;i({arg2Type:d,arg2Ix:v,arg2Field:F})}}>
${X.map(c=>o`
${c.label}
`)}
${e.arg2Type===0?o`
Constant
{let d=parseInt(c.target.value,10);Number.isFinite(d)&&d>=0&&d<=65535&&i({arg2Ix:d})}}
/>
`:""}
${l?this._renderStructuredObjectPicker(l,e.arg2Ix,c=>i({arg2Ix:c}),"Arg2"):""}
${e.arg2Type!==0&&u.length>0?o`
Arg2 field
i({arg2Field:parseInt(c.target.value,10)})}>
${u.map(c=>o`
${c.label}
`)}
`:""}
`:""}
`}_defaultIxForKind(e){switch(e){case"zone":return this._objects?.zones?.[0]?.index??1;case"unit":return this._objects?.units?.[0]?.index??1;case"thermostat":return this._objects?.thermostats?.[0]?.index??1;case"area":return this._objects?.areas?.[0]?.index??1;default:return 0}}_renderStructuredObjectPicker(e,t,i,r){let s=this._bucketWithPreserve(this._pickBucket(e),e,t),u=e[0].toUpperCase()+e.slice(1);return o`
${r} ${u}
i(parseInt(l.target.value,10))}>
${s.map(l=>o`
#${l.index} ${l.name}
`)}
`}_renderChainCondFamily(e,t){let i=s=>{let u=this._objects?.zones?.[0]?.index??1,l=this._objects?.units?.[0]?.index??1,p=this._objects?.areas?.[0]?.index??1,c;switch(s){case"none":c={family:"none"};break;case"misc":c={family:"misc",misc:1};break;case"zone":c={family:"zone",index:u,active:!1};break;case"unit":c={family:"unit",index:l,active:!0};break;case"time":c={family:"time",index:1,active:!0};break;case"sec":c={family:"sec",index:p,mode:0};break}let d=$e(c);this._patchChainCondition(t,d)},r=s=>{this._patchChainCondition(t,$e(s))};return o`
Family
i(s.target.value)}>
Zone state
Unit state
Area in security mode
Time clock
Misc
${this._renderChainCondSubfields(e,r)}
`}_renderChainCondSubfields(e,t){if(e.family==="zone"){let i=this._bucketWithPreserve(this._objects?.zones??null,"zone",e.index??0);return o`
Zone
t({...e,index:parseInt(r.target.value,10)})}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Is
t({...e,active:r.target.value==="1"})}>
secure
not ready
`}if(e.family==="unit"){let i=this._bucketWithPreserve(this._objects?.units??null,"unit",e.index??0);return o`
Unit
t({...e,index:parseInt(r.target.value,10)})}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Is
t({...e,active:r.target.value==="1"})}>
ON
OFF
`}if(e.family==="sec"){let i=this._bucketWithPreserve(this._objects?.areas??null,"area",e.index??0);return o`
Area
t({...e,index:parseInt(r.target.value,10)})}>
${i.map(r=>o`
#${r.index} ${r.name}
`)}
Mode
t({...e,mode:parseInt(r.target.value,10)})}>
${_e.map(r=>o`
${r.label}
`)}
`}return e.family==="time"?o`
Time clock # (1..3)
{let r=parseInt(i.target.value,10);Number.isFinite(r)&&t({...e,index:r})}}
/>
Is
t({...e,active:i.target.value==="1"})}>
enabled
disabled
`:o`
Condition
t({family:"misc",misc:parseInt(i.target.value,10)})}>
${ve.map(i=>o`
${i.label}
`)}
`}_renderChainActionsSection(e){return o`
Actions (${e.length})
this._addChainAction()}>+ THEN
${e.map((t,i)=>this._renderChainActionRow(t,i,e.length))}
`}_renderChainActionRow(e,t,i){let r=j(e.cmd??0),s=r?.ref_kind?this._bucketWithPreserve(this._pickBucket(r.ref_kind),r.ref_kind,e.pr2??0):null,u=e.cmd===9;return o`
Command
{let p=parseInt(l.target.value,10),c=j(p),d=e.pr2??0;if(c?.ref_kind&&this._objects){let f=this._pickBucket(c.ref_kind);f&&f.length>0&&!f.some(v=>v.index===d)&&(d=f[0].index)}else c?.ref_kind||(d=0);this._patchChainAction(t,{cmd:p,pr2:d})}}>
${K.map(l=>o`
${l.label}
`)}
${r?.ref_kind?o`
${r.ref_kind[0].toUpperCase()+r.ref_kind.slice(1)}
{let p=parseInt(l.target.value,10);Number.isFinite(p)&&this._patchChainAction(t,{pr2:p})}}>
${(s??[]).map(l=>o`
#${l.index} ${l.name}
`)}
`:""}
${u?o`
Level (0..100)
{let p=parseInt(l.target.value,10);Number.isFinite(p)&&p>=0&&p<=100&&this._patchChainAction(t,{par:p})}}
/>
`:""}
`}};h.styles=ee`
:host {
display: block;
min-height: 100vh;
background: var(--primary-background-color, #fafafa);
color: var(--primary-text-color, #000);
font-family: var(--paper-font-body1_-_font-family, sans-serif);
}
.header {
display: flex; align-items: center;
padding: 16px 20px;
background: var(--primary-color, #03a9f4);
color: var(--text-primary-color, #fff);
}
.header .title { display: flex; align-items: center; gap: 10px; font-size: 1.2rem; }
.header .count {
margin-left: 12px;
font-size: 0.85rem; opacity: 0.85; font-weight: normal;
}
.error {
margin: 12px 16px;
padding: 10px 14px;
background: var(--error-color, #db4437);
color: white;
border-radius: 4px;
}
.filters {
padding: 12px 16px 8px;
border-bottom: 1px solid var(--divider-color, #ddd);
}
.search {
width: 100%;
padding: 8px 10px;
font-size: 0.95rem;
border: 1px solid var(--divider-color, #ccc);
border-radius: 4px;
background: var(--card-background-color, #fff);
color: inherit;
box-sizing: border-box;
}
.chips {
display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px;
}
.chip {
border: 1px solid var(--divider-color, #ccc);
background: var(--card-background-color, #fff);
color: var(--secondary-text-color, #555);
padding: 4px 10px;
border-radius: 12px;
font-size: 0.78rem;
cursor: pointer;
font-family: inherit;
}
.chip:hover { background: var(--secondary-background-color, #eee); }
.chip.active {
background: var(--primary-color, #03a9f4);
color: var(--text-primary-color, #fff);
border-color: transparent;
}
.ref-filter {
margin-top: 8px;
font-size: 0.85rem;
color: var(--secondary-text-color, #555);
display: flex; align-items: center; gap: 8px;
}
.ref-filter button {
border: 1px solid var(--divider-color, #ccc);
background: transparent; color: inherit;
padding: 2px 8px; border-radius: 8px;
font-size: 0.75rem; cursor: pointer;
}
.body {
display: grid;
grid-template-columns: 1fr;
gap: 0;
}
.body[data-narrow="false"] { grid-template-columns: 1fr 380px; }
.list {
max-height: calc(100vh - 200px);
overflow-y: auto;
}
.row {
display: grid;
grid-template-columns: 60px 1fr auto;
align-items: start;
gap: 12px;
padding: 10px 16px;
border-bottom: 1px solid var(--divider-color, #eee);
cursor: pointer;
}
.row:hover { background: var(--secondary-background-color, #f5f5f5); }
.row.selected { background: var(--state-active-color, #e3f2fd); }
.row-slot {
font-family: var(--code-font-family, monospace);
font-size: 0.78rem;
color: var(--secondary-text-color, #888);
padding-top: 2px;
}
.row-summary {
font-size: 0.92rem;
line-height: 1.45;
}
.row-meta {
display: flex; flex-direction: column; align-items: flex-end; gap: 4px;
}
/* trigger-type badges */
.trigger-badge {
font-size: 0.7rem;
font-weight: 600;
letter-spacing: 0.5px;
padding: 2px 6px;
border-radius: 3px;
text-transform: uppercase;
}
.trigger-timed { background: #e3f2fd; color: #1565c0; }
.trigger-event { background: #fff3e0; color: #e65100; }
.trigger-yearly { background: #f3e5f5; color: #6a1b9a; }
.trigger-when { background: #e8f5e9; color: #2e7d32; }
.trigger-at { background: #e3f2fd; color: #1565c0; }
.trigger-every { background: #fce4ec; color: #ad1457; }
.trigger-remark { background: #f5f5f5; color: #616161; }
.meta-pill {
font-size: 0.7rem;
color: var(--secondary-text-color, #888);
background: var(--secondary-background-color, #eee);
padding: 1px 6px;
border-radius: 8px;
}
/* token-renderer styles */
.row-summary, .detail-body {
font-family: var(--paper-font-body1_-_font-family, system-ui, sans-serif);
}
.keyword { font-weight: 600; color: var(--primary-color, #1565c0); }
.operator { color: var(--secondary-text-color, #666); font-style: italic; }
.value { font-family: var(--code-font-family, monospace); color: var(--accent-color, #ff6f00); }
.ref {
display: inline-flex; align-items: baseline; gap: 4px;
border: none; background: transparent; padding: 0 2px;
cursor: pointer; font: inherit; color: inherit;
border-bottom: 1px dotted var(--secondary-text-color, #999);
}
.ref:hover { background: var(--secondary-background-color, #eee); }
.ref-name { font-weight: 500; }
.ref-state {
font-size: 0.72rem;
padding: 1px 5px;
border-radius: 3px;
background: var(--secondary-background-color, #eee);
color: var(--secondary-text-color, #666);
vertical-align: 1px;
}
.ref-zone .ref-name { color: var(--info-color, #0288d1); }
.ref-unit .ref-name { color: var(--warning-color, #f57c00); }
.ref-area .ref-name { color: var(--success-color, #388e3c); }
.ref-thermostat .ref-name { color: var(--accent-color, #c2185b); }
.ref-button .ref-name { color: var(--state-light-color, #7e57c2); }
.indent { display: inline-block; width: 1.5em; }
/* detail panel */
.detail {
border-left: 1px solid var(--divider-color, #ddd);
padding: 16px;
max-height: calc(100vh - 200px);
overflow-y: auto;
box-sizing: border-box;
}
.body[data-narrow="true"] .detail {
border-left: none;
border-top: 1px solid var(--divider-color, #ddd);
}
.detail header {
display: flex; justify-content: space-between; align-items: center;
margin-bottom: 12px;
}
.detail header .slot {
margin-left: 8px;
font-family: var(--code-font-family, monospace);
font-size: 0.85rem;
color: var(--secondary-text-color, #888);
}
.detail .close {
background: transparent; border: none;
font-size: 1.4rem; cursor: pointer;
color: var(--secondary-text-color, #888);
}
.detail-body {
font-size: 0.95rem;
line-height: 1.6;
white-space: pre-wrap;
word-wrap: break-word;
background: var(--card-background-color, #fff);
padding: 12px;
border-radius: 4px;
border: 1px solid var(--divider-color, #eee);
margin: 0;
}
.detail footer {
display: flex; align-items: center; gap: 12px; margin-top: 14px;
}
.fire, .primary, .secondary, .danger {
border: none;
padding: 8px 16px;
font-size: 0.92rem;
border-radius: 4px;
cursor: pointer;
font-family: inherit;
}
.fire, .primary {
background: var(--primary-color, #03a9f4);
color: var(--text-primary-color, #fff);
}
.secondary {
background: var(--secondary-background-color, #eee);
color: var(--primary-text-color, #000);
}
.danger {
background: transparent;
color: var(--error-color, #db4437);
border: 1px solid var(--error-color, #db4437);
}
.fire:hover, .primary:hover, .secondary:hover, .danger:hover {
filter: brightness(0.9);
}
.action-row {
display: flex;
align-items: center;
gap: 8px;
margin-top: 12px;
padding: 10px;
background: var(--secondary-background-color, #f5f5f5);
border-radius: 4px;
font-size: 0.88rem;
}
.action-row.danger-row {
background: var(--error-color, #db4437);
color: white;
}
.action-row input[type="number"] {
width: 70px;
padding: 4px 6px;
font-size: 0.9rem;
border: 1px solid var(--divider-color, #ccc);
border-radius: 3px;
margin-left: 6px;
}
.action-row button {
padding: 4px 12px;
font-size: 0.85rem;
}
.fire-feedback {
font-size: 0.85rem; color: var(--secondary-text-color, #666);
}
.chain-info {
margin-top: 12px;
font-size: 0.8rem;
color: var(--secondary-text-color, #888);
}
.loading, .empty {
padding: 40px 20px;
text-align: center;
color: var(--secondary-text-color, #888);
}
/* editor */
.editor-body { display: flex; flex-direction: column; gap: 12px; }
.editor fieldset {
border: 1px solid var(--divider-color, #ddd);
border-radius: 4px;
padding: 10px 12px;
margin: 0;
}
.editor legend {
padding: 0 6px;
font-size: 0.78rem;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--secondary-text-color, #777);
}
.editor .row {
display: flex; align-items: center; gap: 8px;
}
.editor label.block {
display: flex; flex-direction: column;
gap: 4px;
font-size: 0.85rem;
color: var(--secondary-text-color, #555);
margin-bottom: 8px;
}
.editor label.block:last-child { margin-bottom: 0; }
.editor input[type="number"], .editor select {
padding: 6px 8px;
font-size: 0.95rem;
border: 1px solid var(--divider-color, #ccc);
border-radius: 3px;
background: var(--card-background-color, #fff);
color: inherit;
}
.editor .time-colon {
font-weight: 600; font-size: 1.4rem;
margin: 0 2px;
}
.days-row { display: flex; flex-wrap: wrap; gap: 4px; }
.day-toggle {
padding: 6px 10px;
border: 1px solid var(--divider-color, #ccc);
background: var(--card-background-color, #fff);
color: var(--secondary-text-color, #555);
border-radius: 3px;
cursor: pointer;
font-family: inherit;
font-size: 0.82rem;
}
.day-toggle.active {
background: var(--primary-color, #03a9f4);
color: var(--text-primary-color, #fff);
border-color: transparent;
}
.conditions-readonly {
padding: 10px 12px;
background: var(--secondary-background-color, #f5f5f5);
border-radius: 4px;
font-size: 0.82rem;
color: var(--secondary-text-color, #666);
}
.cond-slot {
padding: 8px 10px;
margin-top: 6px;
background: var(--secondary-background-color, #f5f5f5);
border-radius: 4px;
}
.cond-slot:first-of-type { margin-top: 0; }
.cond-family-label {
font-weight: 600;
color: var(--primary-text-color, #000);
}
.cond-row-header {
display: flex; justify-content: space-between; align-items: center;
margin-bottom: 4px;
}
.mini-btn {
border: 1px solid var(--divider-color, #ccc);
background: var(--card-background-color, #fff);
color: inherit;
padding: 2px 8px;
border-radius: 3px;
font-size: 0.78rem;
cursor: pointer;
font-family: inherit;
margin-left: 6px;
}
.mini-btn:hover { background: var(--secondary-background-color, #eee); }
.mini-btn.danger {
color: var(--error-color, #db4437);
border-color: var(--error-color, #db4437);
}
.structured-cond {
background: rgba(255, 152, 0, 0.08); /* subtle structured tint */
}
.structured-row {
display: grid;
grid-template-columns: 1fr;
gap: 6px;
}
.structured-tag, .readonly-tag {
display: inline-block;
margin-left: 6px;
padding: 1px 6px;
font-size: 0.7rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
border-radius: 3px;
}
.structured-tag {
background: rgba(255, 152, 0, 0.18);
color: #b35a00;
}
.readonly-tag {
background: var(--secondary-background-color, #eee);
color: var(--secondary-text-color, #888);
}
.chain-meta {
margin-top: 8px;
padding: 8px 10px;
font-size: 0.82rem;
color: var(--secondary-text-color, #666);
background: var(--secondary-background-color, #f5f5f5);
border-radius: 4px;
}
`,m([N({attribute:!1})],h.prototype,"hass",2),m([N({attribute:!1})],h.prototype,"narrow",2),m([g()],h.prototype,"_entryId",2),m([g()],h.prototype,"_rows",2),m([g()],h.prototype,"_total",2),m([g()],h.prototype,"_filteredTotal",2),m([g()],h.prototype,"_loading",2),m([g()],h.prototype,"_error",2),m([g()],h.prototype,"_activeTriggerTypes",2),m([g()],h.prototype,"_referenceFilter",2),m([g()],h.prototype,"_searchTerm",2),m([g()],h.prototype,"_selectedSlot",2),m([g()],h.prototype,"_detail",2),m([g()],h.prototype,"_detailLoading",2),m([g()],h.prototype,"_fireFeedback",2),m([g()],h.prototype,"_writeFeedback",2),m([g()],h.prototype,"_cloneTargetSlot",2),m([g()],h.prototype,"_showCloneInput",2),m([g()],h.prototype,"_confirmingClear",2),m([g()],h.prototype,"_editingDraft",2),m([g()],h.prototype,"_objects",2),m([g()],h.prototype,"_chainDraft",2),h=m([je("omni-panel-programs")],h);export{h as OmniPanelPrograms};
/*! Bundled license information:
@lit/reactive-element/css-tag.js:
(**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/reactive-element.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
lit-html/lit-html.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
lit-element/lit-element.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
lit-html/is-server.js:
(**
* @license
* Copyright 2022 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/custom-element.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/property.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/state.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/event-options.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/base.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/query.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/query-all.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/query-async.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/query-assigned-elements.js:
(**
* @license
* Copyright 2021 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
@lit/reactive-element/decorators/query-assigned-nodes.js:
(**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*)
*/