@camstack/addon-admin-ui 1.2.484 → 1.2.486

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/assets/{AddonAssetIcon-3vq-0y-v.js → AddonAssetIcon-m0NNmyUn.js} +1 -1
  2. package/dist/assets/{Addons-Bk1BZHnK.js → Addons-7WgdBSgo.js} +2 -2
  3. package/dist/assets/{AdminPage-QmLz5qjj.js → AdminPage-B4oSYZ0g.js} +1 -1
  4. package/dist/assets/{AdminSectionedPage-DYCbg6TR.js → AdminSectionedPage-DPAJKtca.js} +1 -1
  5. package/dist/assets/{AiProfiles-ZWSpLyRc.js → AiProfiles-BjN1tM5x.js} +1 -1
  6. package/dist/assets/{BrokerForm-C0PFW-8b.js → BrokerForm-DdX1uhQY.js} +1 -1
  7. package/dist/assets/{Build-Dnm_I3D9.js → Build-D0GulkUf.js} +7 -7
  8. package/dist/assets/{Calendars-DvjofwPU.js → Calendars-BVzAt7n2.js} +1 -1
  9. package/dist/assets/{Cluster-CrfYNPnJ.js → Cluster-CeB3rqq5.js} +1 -1
  10. package/dist/assets/{CompositionBlockEditor-BcDYEyOm.js → CompositionBlockEditor-djPlv-fR.js} +1 -1
  11. package/dist/assets/{CompositionEditorPage-DpKcmhYi.js → CompositionEditorPage-D_HviEft.js} +1 -1
  12. package/dist/assets/{Data-BqyCS1VW.js → Data-CiqiBwno.js} +1 -1
  13. package/dist/assets/{DeviceDetail-DfLnQGqY.js → DeviceDetail-jiR1i6pR.js} +2 -2
  14. package/dist/assets/{DeviceDoActionFields-CJj4-67I.js → DeviceDoActionFields-C7AR_uSl.js} +1 -1
  15. package/dist/assets/{Devices-DQnrgH0r.js → Devices-CcSrdYU4.js} +1 -1
  16. package/dist/assets/{EmbedPlayerPage-D6aNp4TG.js → EmbedPlayerPage-hTIE4Eit.js} +1 -1
  17. package/dist/assets/HelperWizard-DK1ybgYQ.js +2 -0
  18. package/dist/assets/{History-DZ_p9s8N.js → History-BTIhciXp.js} +1 -1
  19. package/dist/assets/{Identity-B-pYFi7F.js → Identity-CxJviVb1.js} +1 -1
  20. package/dist/assets/{IntegrationDetail-CvtkeTns.js → IntegrationDetail-D-bPsCMC.js} +1 -1
  21. package/dist/assets/{IntegrationHub-Crv-Ut8D.js → IntegrationHub-CupxQ79f.js} +1 -1
  22. package/dist/assets/Integrations-BvVYmXyZ.js +1 -0
  23. package/dist/assets/{Integrations-BpVqgjFG.js → Integrations-vD0nMp42.js} +1 -1
  24. package/dist/assets/{Library-BFFl1PFs.js → Library-DSfmvzTT.js} +1 -1
  25. package/dist/assets/{Locations-sD9PMtF8.js → Locations-ClEqm56h.js} +1 -1
  26. package/dist/assets/{Logs-ByKgDjzR.js → Logs-B5KmSzBM.js} +1 -1
  27. package/dist/assets/{MaskShapeCanvas-CzHUGkc7.js → MaskShapeCanvas-C4d-NKff.js} +1 -1
  28. package/dist/assets/{MotionZonesSettings-sCDWBSMu.js → MotionZonesSettings-dUNCzVp0.js} +1 -1
  29. package/dist/assets/{MyAccess-_FlzEnLb.js → MyAccess-C-q4Sd6S.js} +1 -1
  30. package/dist/assets/Network-DBBkEL72.js +1 -0
  31. package/dist/assets/{NodeAddonsSettingsPanel-DOuw1uWS.js → NodeAddonsSettingsPanel-C3dKdKw3.js} +1 -1
  32. package/dist/assets/Notifications-DcYqE0RB.js +1 -0
  33. package/dist/assets/{Pipeline-CMwJb0kX.js → Pipeline-Ck7WIwEg.js} +1 -1
  34. package/dist/assets/{PrivacyMaskSettings-DH3PZaEy.js → PrivacyMaskSettings-B7H4E39e.js} +1 -1
  35. package/dist/assets/{Recordings-BJVAQK7Q.js → Recordings-CdeXjGkO.js} +1 -1
  36. package/dist/assets/{ScanNetworkModal-qjbQd1Q4.js → ScanNetworkModal-DmoC2vFv.js} +1 -1
  37. package/dist/assets/{SceneMonitorEditor-CLWf6Z9-.js → SceneMonitorEditor-D10vUYBN.js} +1 -1
  38. package/dist/assets/{SessionsList-DSaSTSfg.js → SessionsList-DFLBgUL8.js} +2 -2
  39. package/dist/assets/{Showroom-yf_2TnT8.js → Showroom-Mg0T7kiO.js} +1 -1
  40. package/dist/assets/{System-BKoiOnT6.js → System-BKwM9EOI.js} +1 -1
  41. package/dist/assets/{Terminal-CGMRAh-D.js → Terminal-CR49jUSx.js} +1 -1
  42. package/dist/assets/{Viewer-CTvuCeo6.js → Viewer-DTS73PG4.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DAW63rZZ.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C9Ul7ikd.js} +1 -1
  44. package/dist/assets/{addon-icons-context-Bzdujcmt.js → addon-icons-context-DExFimUo.js} +1 -1
  45. package/dist/assets/{archive-dvL2Bchb.js → archive-A7fEIb1q.js} +1 -1
  46. package/dist/assets/{assignment-candidates-Zc8Nwi6m.js → assignment-candidates-CmSrYKig.js} +1 -1
  47. package/dist/assets/{authed-media-B6hJJcft.js → authed-media-D501OkLb.js} +1 -1
  48. package/dist/assets/{bell-off-C3flB_OF.js → bell-off-DRhRTrjj.js} +1 -1
  49. package/dist/assets/{board-model-h3RS4HY8.js → board-model-Dgsb_T8y.js} +1 -1
  50. package/dist/assets/{boxes-BiMbpzNh.js → boxes-DworaLtS.js} +1 -1
  51. package/dist/assets/{chart-column-BMpUb2lF.js → chart-column-Cu9k1-_L.js} +1 -1
  52. package/dist/assets/circle-slash-C3iHwCAG.js +1 -0
  53. package/dist/assets/{client-Ct1F5MoE.js → client-Bu7S-lNI.js} +1 -1
  54. package/dist/assets/{cloud-upload-CAJgV_u1.js → cloud-upload-DiNWp9rb.js} +1 -1
  55. package/dist/assets/crop-0w6npjI-.js +1 -0
  56. package/dist/assets/{device-integration-icon-DukkUZAm.js → device-integration-icon-JvZciNX3.js} +1 -1
  57. package/dist/assets/device-picker-model-CwVdTRpM.js +1 -0
  58. package/dist/assets/{dist-B89wGMMB.js → dist-CQST_CR6.js} +1 -1
  59. package/dist/assets/{dist-CPp8d_RN.js → dist-CU7lsl3c.js} +1 -1
  60. package/dist/assets/{eraser-BL6nSeLQ.js → eraser-BIx6oWwv.js} +1 -1
  61. package/dist/assets/{format-ChtZgmyh.js → format-CxsQImeC.js} +1 -1
  62. package/dist/assets/{hard-drive-download-ysGKYLwW.js → hard-drive-download-C2whZnE1.js} +1 -1
  63. package/dist/assets/{hostInit-CDPK_pyj.js → hostInit-C1vihvmQ.js} +1 -1
  64. package/dist/assets/i18n-L4Vcqmkj.js +1 -0
  65. package/dist/assets/{icons-B7uNvSe0.js → icons-D7LkYyOa.js} +1 -1
  66. package/dist/assets/index-DVjkG4wf.js +4 -0
  67. package/dist/assets/{key-xS-HUgNI.js → key-CnqY_S5Z.js} +1 -1
  68. package/dist/assets/{key-round-BDT5O9Ed.js → key-round-Bg4FlRj5.js} +1 -1
  69. package/dist/assets/{layers-BeRWYCde.js → layers-CO89kjrf.js} +1 -1
  70. package/dist/assets/{linked-devices-model-DOZONZiM.js → linked-devices-model-xJ9JuUve.js} +1 -1
  71. package/dist/assets/{list-ordered-DKzGLPr6.js → list-ordered-B4zrpAg_.js} +1 -1
  72. package/dist/assets/{location-owned-usage-BxmUSyXj.js → location-owned-usage-B8qso0fm.js} +1 -1
  73. package/dist/assets/{log-in-53JDrQ-P.js → log-in-JK1rD34v.js} +1 -1
  74. package/dist/assets/{memory-stick-B9PVELyF.js → memory-stick-CrYYrfr-.js} +1 -1
  75. package/dist/assets/{message-square-plus-B32IU45x.js → message-square-plus-dJX9lmBW.js} +1 -1
  76. package/dist/assets/{mf-entry-bootstrap-0-65d35510.js → mf-entry-bootstrap-0-33640dea.js} +2 -2
  77. package/dist/assets/{mic-off-B0w-1GrV.js → mic-off-CNugTHww.js} +1 -1
  78. package/dist/assets/{monitor-off-Cz2SxBVE.js → monitor-off-BGk9t8dE.js} +1 -1
  79. package/dist/assets/{monitor-smartphone-Cqk6Z8Hg.js → monitor-smartphone-G-egoX2s.js} +1 -1
  80. package/dist/assets/mount-CwVdTRpM.js +1 -0
  81. package/dist/assets/{player-overlays-Cs6l33cj.js → player-overlays-wVkuXGEl.js} +1 -1
  82. package/dist/assets/{recycle-DpB4QxbX.js → recycle-DYW-upWu.js} +1 -1
  83. package/dist/assets/remoteEntry-COE7Dbun.js +1 -0
  84. package/dist/assets/{scan-eye-DcYrgFOu.js → scan-eye-Lmh5eEiU.js} +1 -1
  85. package/dist/assets/{scissors-_j_D3ONm.js → scissors-BnF_HknP.js} +1 -1
  86. package/dist/assets/{search-x-9dPd-b95.js → search-x-x52QirSH.js} +1 -1
  87. package/dist/assets/{send-D42ODbS7.js → send-CxXNctx1.js} +1 -1
  88. package/dist/assets/{settings-2-zgGmo4c8.js → settings-2-Bq552rRI.js} +1 -1
  89. package/dist/assets/{speaker-DIPHxIQ6.js → speaker-DwX7P_b6.js} +1 -1
  90. package/dist/assets/{src-DFzrn-CX.js → src-DeCfVTRV.js} +3 -3
  91. package/dist/assets/{step-inspector-model-CS79liRv.js → step-inspector-model-BpauAVB0.js} +1 -1
  92. package/dist/assets/{table-2-lftK0wHb.js → table-2-Ds01pXFk.js} +1 -1
  93. package/dist/assets/{timer-reset-catAE_r9.js → timer-reset-Cqh0KdZ_.js} +1 -1
  94. package/dist/assets/{ungroup-BKImeHER.js → ungroup-CJk4-x9j.js} +1 -1
  95. package/dist/assets/{unlink-Behl018w.js → unlink-XCUPeovX.js} +1 -1
  96. package/dist/assets/{usb-D5kzB8kq.js → usb-DxOVSFBX.js} +1 -1
  97. package/dist/assets/{use-scenes-feed-CGDnep25.js → use-scenes-feed-DMb2SZfo.js} +1 -1
  98. package/dist/assets/{use-stationary-objects-D_R5OahX.js → use-stationary-objects-B2khEus9.js} +1 -1
  99. package/dist/assets/useEventInvalidation-CwVdTRpM.js +1 -0
  100. package/dist/assets/{useNodeUrlSelection-PBAYjRo5.js → useNodeUrlSelection-CAax4VC2.js} +1 -1
  101. package/dist/assets/user-round-BnXncTsD.js +1 -0
  102. package/dist/assets/{user-x-COQ6vhb4.js → user-x-B7qGqREw.js} +1 -1
  103. package/dist/assets/{video-Byw3ItoR.js → video-BqrORDyM.js} +1 -1
  104. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CsFmgfi4.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DaCd0waG.js} +2 -2
  105. package/dist/index.html +9 -9
  106. package/dist/server/addon.js +15 -2
  107. package/package.json +1 -1
  108. package/dist/assets/HelperWizard-BM-npSft.js +0 -2
  109. package/dist/assets/Integrations-tTRZOlex.js +0 -1
  110. package/dist/assets/Network-U-uppn3V.js +0 -1
  111. package/dist/assets/Notifications-AkbB0Ya7.js +0 -1
  112. package/dist/assets/circle-slash-B8Tjloe5.js +0 -1
  113. package/dist/assets/crop-CS-td_0y.js +0 -1
  114. package/dist/assets/device-picker-model-P-UzQOB7.js +0 -1
  115. package/dist/assets/i18n-DJ4egBMY.js +0 -1
  116. package/dist/assets/index-hKEeWkm1.js +0 -4
  117. package/dist/assets/mount-P-UzQOB7.js +0 -1
  118. package/dist/assets/remoteEntry-BGbchE1L.js +0 -1
  119. package/dist/assets/useEventInvalidation-P-UzQOB7.js +0 -1
  120. package/dist/assets/user-round-BJVl6LX9.js +0 -1
@@ -1,2 +0,0 @@
1
- import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,et as s,x as c}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Hi as l,Si as u,T as d,dt as f,na as p,ot as m,ut as h,zn as g}from"./player-overlays-Cs6l33cj.js";import{$n as _,Ai as v,An as y,Bn as b,Ci as x,Cn as S,Di as C,Dn as w,Ei as T,En as E,Fn as D,Gi as O,Gn as k,Hi as A,In as j,Kn as ee,Ln as M,Mi as N,Ni as P,Oi as F,On as te,Pi as I,Qt as ne,Rn as re,Si as ie,Sn as ae,Ti as L,Tn as oe,Ui as se,Vi as ce,Wi as le,Wt as ue,Yi as de,Zn as fe,Zt as pe,ai as me,bi as he,di as ge,en as _e,fi as ve,hi as ye,ji as be,jn as xe,ki as Se,kn as Ce,li as we,mi as Te,ni as Ee,oi as De,pi as R,pn as Oe,si as ke,ui as Ae,vi as je,wi as Me,wn as Ne,xi as Pe,zn as Fe}from"./client-Ct1F5MoE.js";import{t as Ie}from"./boxes-BiMbpzNh.js";import{t as Le}from"./chart-column-BMpUb2lF.js";import{Ad as Re,Ar as ze,Cd as Be,Er as z,Fn as Ve,Fr as He,In as Ue,Ir as We,Ln as Ge,Mr as Ke,Mt as qe,Nr as Je,Pr as Ye,Qo as Xe,Qr as Ze,R as Qe,So as $e,Vr as et,Wn as tt,Zo as nt,_r as rt,bs as it,di as at,ei as B,fi as ot,fr as st,gr as ct,id as V,jr as lt,ld as H,mi as ut,mr as dt,pi as ft,pr as pt,s as mt,si as ht,ud as gt,vr as _t,xd as vt,xn as yt,xo as bt,xt,zr as St}from"./src-DFzrn-CX.js";import{t as U}from"./i18n-DJ4egBMY.js";import{t as W}from"./useTranslation-BJr-n0es.js";import{h as Ct,lr as wt,ur as Tt}from"./index-hKEeWkm1.js";import{n as Et}from"./assignment-candidates-Zc8Nwi6m.js";s();function Dt({id:e,...t}){return i(yt,{headingId:`customize-${e}`,...t})}function Ot(e,t){if(e.status===`error`)return{kind:`unknown`,reason:e.error?.message??U.t(`helpers.customize.requestFailed`)};let n=e.data;return e.status===`pending`||n===void 0?{kind:`pending`}:{kind:`known`,value:t(n)}}function kt(e,t){let n=Re.useQueries(n=>e.map(e=>n.deviceManager.listDeviceIdsByCaps({capNames:[e]},{enabled:t})));return Et(e.map((e,t)=>{let r=n[t];return{cap:e,query:r===void 0?{status:`pending`}:{status:r.status,data:r.data,error:r.error===null?null:{message:r.error.message}}}}))}function At(e,t){let n=qe(e,t);return n.kind===`resolved`?n.integration.name:null}function jt(e){let t=$e({projection:`slim`},{enabled:e}),{data:r}=it(void 0,{enabled:e}),i=t.error===null||t.error===void 0?null:t.error.message;return n(()=>Ot({status:t.status,data:t.data,error:i===null?null:{message:i}},e=>e.map(e=>({id:e.id,name:e.name,addonId:e.addonId,stableId:e.stableId,type:e.type,location:e.location,isCamera:e.isCamera,integration:At(e,r),parentDeviceId:e.parentDeviceId,primaryChildEntityId:e.primaryChildEntityId??null,role:e.role??null}))),[t.status,t.data,i,r])}function Mt(e){let t=e?.trim()??``;return t.length>0?t:U.t(`helpers.customize.requestFailed`)}function Nt(e){let t=e.data;if(t!==void 0){if(t.state===`not-loaded`)return{kind:`not-loaded`,reason:t.reason};if(t.view===null)return{kind:`none`};let e=Ee(t.view.block);return e===null?{kind:`unknown`,reason:U.t(`helpers.customizationRead.notAComposition`,{id:t.view.block.id})}:{kind:`present`,view:t.view,composition:e}}return e.status===`pending`?{kind:`pending`}:e.status===`error`?{kind:`unknown`,reason:Mt(e.error?.message)}:{kind:`pending`}}function G(e){return e.kind===`present`?e.composition:null}var Pt={lastChangedAt:{en:`Last change`,it:`Ultima variazione`},lastFetchedAt:{en:`Last update`,it:`Ultimo aggiornamento`},lastDetectedAt:{en:`Last detection`,it:`Ultimo rilevamento`},lastPressedAt:{en:`Last press`,it:`Ultima pressione`},pressCountSinceStart:{en:`Press count`,it:`Conteggio pressioni`},since:{en:`Since`,it:`Da`}};function Ft(e,t){return t.startsWith(`it`)?e.it:e.en}function It(e){if(!(`unit`in e))return;let t=e.unit;return typeof t==`string`&&t.length>0?t:void 0}function Lt(e,t){let n=Oe[e]?.noun;return n===void 0?e.split(`-`).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):Ft(n,t)}function K(e,t,n){let r=Oe[e]?.state?.find(e=>e.field===t);if(r!==void 0){let e=Ft(r.label,n),t=It(r);return t===void 0?e:`${e} (${t})`}let i=Pt[t];return i===void 0?t:Ft(i,n)}function Rt(e){return _e.find(t=>t.name===e)}function zt(e){return e===`lastFetchedAt`||e.endsWith(`At`)}function Bt(e){let t=S(e.role);if(t===null||Rt(t)?.status===void 0)return null;let n={};return{target:{kind:`new`,type:e.type,...e.role===null?{}:{role:e.role}},features:[{kind:`fields`,cap:t,fields:n}]}}function Vt(e){return e===null?`incomplete`:ae(De(e,{lookupCap:me(_e),sources:new Map,self:null,blockId:null,target:null,peers:[]}).problems)}function Ht(e,t){let n=Rt(e);return n?.status===void 0?[]:ye(n.status.schema).filter(e=>!zt(e)&&!t.has(e))}function q(e,t,n){let r=e?.features??[],i=r.findIndex(e=>e.cap===n.cap);return{target:e?.target??{kind:`existing`,device:t},features:i===-1?[...r,n]:r.map((e,t)=>t===i?n:e)}}function Ut(e,t){let n=e.features.filter(e=>e.cap!==t);return n.length===0?null:{target:e.target,features:n}}function J(e,t){let n=e?.features.find(e=>e.cap===t);return n!==void 0&&n.kind===`fields`?n:null}function Wt(e){return Array.isArray(e)?e.map(Wt):typeof e!=`object`||!e?e:Object.fromEntries(Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,Wt(t)]))}function Gt(e){return JSON.stringify(Wt(e))}function Kt(e,t){switch(e.kind){case`pending`:return{kind:`refused`,reason:U.t(`helpers.customizationSave.notReadYet`)};case`unknown`:return{kind:`refused`,reason:`the customization could not be read: ${e.reason}`};case`not-loaded`:return{kind:`refused`,reason:`the customizations are not loaded yet: ${e.reason}`};case`none`:return t===null?{kind:`noop`}:{kind:`create`,input:{enabled:!0,composition:t}};case`present`:{let n=e.view.block.id;return t===null?{kind:`delete`,blockId:n}:Gt(t)===Gt(e.composition)?{kind:`noop`}:{kind:`update`,blockId:n,expectedUpdatedAt:e.view.block.updatedAt,composition:t}}}}function qt(){let{t:e}=W(),t=Ze();return(n,r)=>t({title:e(`customize.assign.removeConfirm.title`),message:r?`${e(`customize.assign.removeConfirm.message`,{what:n})} ${e(`customize.assign.removeConfirm.last`)}`:e(`customize.assign.removeConfirm.message`,{what:n}),confirmLabel:e(`customize.assign.removeConfirm.confirm`),variant:`danger`})}function Jt(e,t){let n=e===`enum`?`string`:e,r=t.kind===`enum`?`string`:t.kind,i={source:t.source,cap:t.cap,fieldPath:t.fieldPath};return r===n?{kind:`from`,...i}:n===`number`&&r===`string`?{kind:`expression`,expr:`number(x)`,bindings:{x:{kind:`from`,...i}}}:null}function Yt(e){return e.map(e=>({id:e.id,name:e.name,addonId:e.addonId,stableId:e.stableId,location:e.location,type:e.type,parentDeviceId:e.parentDeviceId}))}function Y(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n||Array.isArray(n))return;n=Object.getOwnPropertyDescriptor(n,e)?.value}return n}function Xt(e,t,n,r){return r===null?{kind:`from`,source:e,cap:t,fieldPath:n.path}:Jt(r,{source:e,cap:t,fieldPath:n.path,kind:n.kind})}function Zt(e,t,n,r){let i={addonId:e.addonId,stableId:e.stableId};return t.caps.flatMap(e=>e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,value:n===null?void 0:Y(n[e.cap],t.path),source:Xt(i,e.cap,t,r)})))}function Qt(e,t){return t?e===void 0?`—`:e===null?`null`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e):`…`}function $t(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function en(e,t){let n=Y(e,t);return n===void 0?{kind:`absent`}:t===`percentage`&&e.binary===!0?{kind:`value`,value:n,binary:!0}:{kind:`value`,value:n}}function tn(e,t,n){return $t(t)?en(t,n):e.status===`error`?{kind:`unknown`,reason:e.error?.message??U.t(`helpers.liveValue.unreadable`)}:e.status===`pending`||e.data===void 0?{kind:`pending`}:e.data===null?{kind:`absent`}:en(e.data,n)}function nn(e,t,n){if(t.binary===!0&&n.cap===`battery`&&n.path===`percentage`){let t=Ge(e);return{text:U.t(t?Ve:Ue),tone:t?`warning`:`normal`}}return{text:n.path===`percentage`?`${Math.round(e)} %`:String(e),tone:`normal`}}function rn(e,t,n){let r=e?`active`:`muted`;return t.cap===`contact`&&t.path===`entryOpen`?{text:e?n.open:n.closed,tone:r}:le[t.cap]===t.path?{text:e?n.active:n.inactive,tone:r}:{text:String(e),tone:`normal`}}function an(e,t,n){switch(e.kind){case`pending`:return{text:`…`,tone:`muted`};case`unknown`:return{text:`?`,title:e.reason,tone:`warning`};case`absent`:return{text:`—`,tone:`muted`};case`value`:{let r=e.value;return r===null?{text:`—`,tone:`muted`}:typeof r==`boolean`?rn(r,t,n):typeof r==`number`?nn(r,e,t):typeof r==`string`?{text:r,tone:`normal`}:{text:JSON.stringify(r),tone:`normal`}}}}var on=0;function sn(e){let t=m(),n=nt({deviceId:e?.deviceId??on,capName:e?.cap??``},{enabled:e!==null}),r=mt(t.trpcClient,e?.deviceId??null,e?.cap??``);return e===null?{kind:`absent`}:tn({status:n.status,data:n.data,error:n.error===null||n.error===void 0?null:{message:n.error.message}},r,e.path)}var cn={muted:`text-foreground-subtle`,active:`text-success`,normal:`text-foreground`,warning:`text-warning`};function ln({target:e}){let{t}=W(),n=sn(e);return e===null?null:i(un,{display:an(n,e,{active:t(`customize.assign.value.active`),inactive:t(`customize.assign.value.inactive`),open:t(`customize.assign.value.open`),closed:t(`customize.assign.value.closed`)})})}function un({display:e}){return i(`span`,{className:`text-xs ${cn[e.tone]}`,title:e.title,children:e.text})}function dn(e){return e===`avg-round-1`?`customize.fieldsCard.aggregate.avg`:`customize.fieldsCard.aggregate.latest`}function fn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function pn(e,t,n){let r=RegExp(`(?<![A-Za-z0-9_])${fn(t)}(?![A-Za-z0-9_])`,`g`);return e.replace(r,()=>n)}function mn(e,t,n,r,i){let a=Object.keys(t).toSorted((e,t)=>t.length-e.length),o=e;for(let e of a){let a=t[e];if(a===void 0||a.kind!==`from`)continue;let s=n.get(x(a.source))??i,c=K(a.cap,a.fieldPath,r);o=pn(o,e,`${s} · ${c}`)}return wn(o)}var hn=1e3,gn=60*hn,_n=60*gn,vn={within:[1],dwell:[1,2],rose:[2]};function yn(e){if(!Number.isInteger(e)||e<hn)return null;if(e%_n===0){let t=e/_n;return t===1?`1 h`:`${t} h`}if(e%gn===0){let t=e/gn;return t===1?`1 min`:`${t} min`}if(e%hn===0){let t=e/hn;return t===1?`1 s`:`${t} s`}return null}function bn(e){return/^\d+$/.test(e.trim())?yn(Number(e.trim())):null}function xn(e,t){let n=1,r=t+1,i=null,a=[];for(let o=t+1;o<e.length;o+=1){let t=e[o]??``;if(i!==null){if(t===`\\`){o+=1;continue}t===i&&(i=null);continue}if(t===`"`||t===`'`){i=t;continue}if(t===`(`){n+=1;continue}if(t===`)`){if(--n,n===0){let t=e.slice(r,o);return a.length===0&&t.trim()===``||a.push({text:t}),{args:a,close:o}}continue}t===`,`&&n===1&&(a.push({text:e.slice(r,o)}),r=o+1)}return null}function Sn(e,t){let n=e[t-1];if(n!==void 0&&/[A-Za-z0-9_]/.test(n))return null;for(let n of Object.keys(vn)){if(!e.startsWith(n,t))continue;let r=t+n.length,i=e[r];if(i!==void 0&&/[A-Za-z0-9_]/.test(i))continue;let a=r;for(;e[a]===` `||e[a]===`
2
- `;)a+=1;if(e[a]!==`(`)continue;let o=xn(e,a);return o===null?null:{name:n,close:o.close,args:o.args}}return null}function Cn(e){let t=e.args.map(e=>wn(e.text)),n=vn[e.name]??[];if(e.name===`within`){let e=t[1],n=e===void 0?null:bn(e);if(n!==null)return`within ${n}`}let r=t.map((e,t)=>n.includes(t)?bn(e)??e.trim():e.trim());return`${e.name}(${r.join(`, `)})`}function wn(e){let t=``,n=0;for(;n<e.length;){let r=Sn(e,n);if(r===null){t+=e[n]??``,n+=1;continue}t+=Cn(r),n=r.close+1}return t}function Tn(e){for(let t=1;;t++){let n=`s${t}`;if(!e.includes(n))return n}}var En={min:`min(a, b, …)`,max:`max(a, b, …)`,abs:`abs(x)`,floor:`floor(x)`,ceil:`ceil(x)`,sqrt:`sqrt(x)`,round:`round(x, digits?)`,pow:`pow(x, y)`,clamp:`clamp(x, lo, hi)`,avg:`avg(a, b, …)`,sum:`sum(a, b, …)`,coalesce:`coalesce(a, b, …)`,age:`age(now, ts)`,convert:`convert(x, "from", "to")`,any:`any(a, b, …)`,all:`all(a, b, …)`,within:`within(ts, ms)`,number:`number(x)`,latest:`latest(ts, …)`,rose:`rose(level, changedAt, debounceMs?)`,count:`count(x)`,dwell:`dwell(active, onForMs, offForMs)`,latchedAt:`latchedAt(value)`},Dn=/[A-Za-z_][A-Za-z0-9_]*$/;function On(e,t,n){let r=Dn.exec(e.slice(0,t))?.[0]??``;if(r===``)return[];let i=n.filter(e=>e.startsWith(r)).toSorted().map(e=>({kind:`binding`,label:e,insert:e,hintKey:null})),a=`now`.startsWith(r)?[{kind:`now`,label:`now`,insert:`now`,hintKey:`compositionEditor.now`}]:[],o=[...se].filter(e=>e.startsWith(r)).toSorted().map(e=>({kind:`builtin`,label:En[e]??e,insert:`${e}(`,hintKey:`compositionEditor.builtins.${e}`}));return[...i,...a,...o].slice(0,8)}function kn(e,t,n){let r=t-(Dn.exec(e.slice(0,t))?.[0]??``).length;return{text:`${e.slice(0,r)}${n.insert}${e.slice(t)}`,cursor:r+n.insert.length}}s();function An({label:n,value:r,bindings:a,onChange:s}){let{t:c}=W(),l=t(null),[u,d]=o(r.length),f=On(r,u,a);return e(`div`,{className:`flex flex-col gap-1`,children:[e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[n,i(`input`,{ref:l,className:`font-mono px-1.5 py-0.5 text-[11px] bg-background border border-border rounded`,value:r,onChange:e=>{s(e.target.value),d(e.target.selectionStart??e.target.value.length)},onSelect:e=>d(e.currentTarget.selectionStart??r.length)})]}),f.length>0&&i(`ul`,{role:`listbox`,"aria-label":c(`compositionEditor.suggestions`),className:`rounded border border-border bg-surface text-[11px]`,children:f.map(t=>e(`li`,{role:`option`,"aria-selected":!1,tabIndex:0,className:`flex justify-between gap-2 px-1 cursor-pointer hover:bg-surface-hover`,onClick:()=>{let e=kn(r,u,t);s(e.text),d(e.cursor),l.current?.focus()},children:[i(`span`,{className:`font-mono`,children:t.label}),t.hintKey!==null&&i(`span`,{className:`text-foreground-subtle`,children:c(t.hintKey)})]},`${t.kind}:${t.label}`))})]})}function jn(e){return{addonId:e.addonId,stableId:e.stableId}}function Mn(e){return new Map(e.map(e=>[x(jn(e)),e]))}function Nn(e,t,n){if(e.kind===`code`)return{kind:`unavailable`,reason:U.t(`helpers.fieldPreview.codeFields`)};if(e.kind===`series`||e.kind===`expression`&&(Te(e.expr,`rose`)||Te(e.expr,`count`)))return{kind:`runtime-only`};let r=Me(e).filter(e=>t.get(ie(e.source,e.cap))?.kind!==`value`).map(Pe);if(r.length>0)return{kind:`waiting`,missing:r};let i=b({source:e,now:n,read:e=>{let n=t.get(ie(e.source,e.cap)),r=n?.kind===`value`?Y(n.slice,e.fieldPath):void 0,i=r===void 0?void 0:A(r);return i===void 0?{state:`unavailable`,reason:U.t(`helpers.fieldPreview.notReported`,{path:`${e.cap}.${e.fieldPath}`}),fatal:!1}:{state:`fresh`,value:i}}});return i.state===`unavailable`?{kind:`unavailable`,reason:i.reason}:{kind:`value`,value:i.value,stale:i.reason}}s();function Pn({sliceKey:e,deviceId:t,capName:n,onReading:r}){let i=mt(m().trpcClient,t,n);return a(()=>{r(e,i===void 0?{kind:`pending`}:{kind:`value`,slice:i})},[e,i,r]),null}function Fn(e,t){return[...new Map(Me(e).map(e=>[ie(e.source,e.cap),e]))].map(([e,n])=>({key:e,read:n,device:t.get(x(n.source))}))}function In({source:t}){let{t:n}=W(),a=$e({projection:`slim`}),[s,c]=o(new Map),l=r((e,t)=>{c(n=>new Map([...n,[e,t]]))},[]),u=Fn(t,Mn(a.status===`success`?Yt(a.data):[])),d=a.status===`success`?u.filter(e=>e.device===void 0).map(e=>x(e.read.source)):[];return e(`div`,{className:`flex flex-wrap items-center gap-2 text-[11px]`,children:[u.map(e=>e.device===void 0?null:i(Pn,{sliceKey:e.key,deviceId:e.device.id,capName:e.read.cap,onReading:l},e.key)),i(`span`,{className:`text-foreground-subtle`,children:n(`compositionEditor.preview.label`)}),a.status===`error`?i(`span`,{className:`text-warning`,children:n(`compositionEditor.preview.devicesFailed`,{reason:a.error?.message??``})}):d.length>0?i(`span`,{className:`text-warning`,children:n(`compositionEditor.preview.unknownDevice`,{sources:d.join(`, `)})}):i(Ln,{preview:Nn(t,s,Date.now())})]})}function Ln({preview:t}){let{t:n}=W();switch(t.kind){case`value`:return e(`strong`,{children:[`→ `,Qt(t.value,!0),t.stale===null?``:` (${t.stale})`]});case`unavailable`:return i(`span`,{className:`text-warning`,children:t.reason});case`waiting`:return i(`span`,{className:`text-foreground-subtle`,children:n(`compositionEditor.preview.waiting`,{sources:t.missing.join(`, `)})});case`runtime-only`:return i(`span`,{className:`text-foreground-subtle`,children:n(`compositionEditor.preview.runtimeOnly`)})}}function Rn(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function zn(e){return Object.hasOwn(D,e)}function Bn(e){return zn(e)?D[e].targets:[]}function Vn(e,t){let n=Bn(e).find(e=>e.id===t);return n?.cardinality===`keyedArray`?n.fields??[]:[]}function Hn(e,t){return Bn(e).find(e=>e.id===t)?.traits??[]}function Un(e,t){return e.caps.flatMap(e=>{let n=Wn(t,e.cap);return e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:n,enumValues:t.enumValues??[]}))})}function Wn(e,t){if(e===null)return null;let n=Y(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function Gn(e,t){return t.kind===`number`?e.find(e=>e.kind===`numeric`)??null:t.kind===`enum`||t.kind===`string`?e.find(e=>e.kind===`enum`)??null:null}function Kn(e,t,n,r){let i=Vn(e,t).find(e=>e.path===n);if(i===void 0)return{ok:!1,reason:`kind`};let a=Gn(i.sources,r);if(a===null)return{ok:!1,reason:`kind`};if(a.requiredUnit!==void 0&&r.unit===null)return{ok:!1,reason:`unit-unknown`};if(a.requiredUnit!==void 0&&r.unit!==a.requiredUnit)return{ok:!1,reason:`unit`};if(a.transformKinds.includes(`enum-map`))return{ok:!0,mode:`enum`};let o=a.transformKinds.filter(Rn);return o.length===0||r.kind!==`number`?{ok:!1,reason:`kind`}:{ok:!0,mode:`scalar`,fit:{ok:!0,valueKind:`number`,sourceUnit:a.requiredUnit??null,transforms:o,declared:a.transforms}}}function qn(e,t,n){return Vn(e,t).find(e=>e.path===n)?.enumValues??[]}function Jn(e){return e.length===1&&e[0]===`threshold`?`threshold`:e.length===1&&e[0]===`invert`||e.includes(`invert`)&&e.every(e=>e===`identity`||e===`invert`)?`invert`:e.length>1?`choice`:`none`}function Yn(e){if(e.transforms.includes(`identity`))return{kind:`identity`};if(e.transforms.includes(`threshold`)){let t=Zn(e.declared,`threshold`);if(t!==null)return Xn(t)}if(e.transforms.includes(`linear`)){let t=Zn(e.declared,`linear`);if(t!==null)return Xn(t)}return{kind:`invert`}}function Xn(e){switch(e.kind){case`identity`:return{kind:`identity`};case`invert`:return{kind:`invert`};case`threshold`:return{kind:`threshold`,comparison:e.comparison,threshold:e.defaultThreshold,startDwellMs:e.defaultStartDwellMs,stopDwellMs:e.defaultStopDwellMs};case`linear`:return Qn(e);case`enum-map`:return{kind:`identity`}}}function Zn(e,t){return e.find(e=>e.kind===t)??null}function Qn(e){return{kind:`linear`,scale:e.defaultScale,offset:e.defaultOffset,...e.clampMin!==void 0&&e.clampMax!==void 0?{clampMin:e.clampMin,clampMax:e.clampMax}:{}}}function $n(e){let t=xe({draft:{kind:`scalar`,cap:e.cap,targetId:e.targetId,source:{addonId:e.source.addonId,stableId:e.source.stableId,cap:e.source.cap,fieldPath:e.source.fieldPath},transform:e.transform},device:e.device,apply:e.apply,sourceValueKind:e.source.valueKind,changedAtField:e.source.changedAtField,sourceUnit:e.source.sourceUnit});return t.ok?t.value:null}function er({control:t,transforms:n,declared:r,unit:a,value:o,onChange:s}){let{t:c}=W();return t===`none`?null:e(`div`,{className:`flex flex-col gap-2`,children:[i(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:c(`customize.scalar.stepTransform`)}),t===`choice`&&i(V,{"aria-label":c(`customize.scalar.stepTransform`),value:o.kind,options:n.map(e=>({value:e,label:c(`customize.scalar.transform.${e}`)})),onChange:e=>s(tr(e.target.value,r))}),o.kind===`invert`||t===`invert`&&o.kind!==`threshold`?e(`label`,{className:`flex items-center gap-2 text-[11px] text-foreground`,children:[i(tt,{checked:o.kind===`invert`,onChange:e=>s(e.target.checked?{kind:`invert`}:{kind:`identity`})}),c(`customize.scalar.invert`)]}):null,o.kind===`threshold`&&i(rr,{declared:r,unit:a,value:o,onChange:s}),o.kind===`linear`&&i(ar,{declared:r,value:o,onChange:s})]})}function tr(e,t){let n=Zn(t,nr(e));return n===null?e===`invert`?{kind:`invert`}:{kind:`identity`}:Xn(n)}function nr(e){return e===`invert`||e===`threshold`||e===`linear`||e===`enum-map`?e:`identity`}function rr({declared:t,unit:n,value:r,onChange:a}){let{t:o}=W(),s=n??``,c=Zn(t,`threshold`),l=c?.kind===`threshold`?c.comparisons:[];return e(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[l.length>0&&e(`label`,{className:`flex flex-col gap-1`,children:[o(`customize.scalar.comparison`),i(V,{"aria-label":o(`customize.scalar.comparison`),value:r.comparison,options:l.map(e=>({value:e,label:o(`customize.scalar.comparisonValue.${e}`)})),onChange:e=>{let t=l.find(t=>t===e.target.value);t!==void 0&&a({...r,comparison:t})}})]}),i(X,{label:o(`customize.scalar.threshold`,{unit:s}),value:r.threshold,onChange:e=>a({...r,threshold:e})}),i(X,{label:o(`customize.scalar.startDwell`),value:r.startDwellMs/1e3,onChange:e=>a({...r,startDwellMs:e*1e3})}),i(X,{label:o(`customize.scalar.stopDwell`),value:r.stopDwellMs/1e3,onChange:e=>a({...r,stopDwellMs:e*1e3})})]})}function ir(e){return e===null||e.kind!==`linear`||e.clampMin===void 0||e.clampMax===void 0?null:{min:e.clampMin,max:e.clampMax}}function ar({declared:t,value:n,onChange:r}){let{t:a}=W(),o=ir(Zn(t,`linear`));return e(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[i(X,{label:a(`customize.scalar.scale`),value:n.scale,onChange:e=>r({...n,scale:e})}),i(X,{label:a(`customize.scalar.offset`),value:n.offset,onChange:e=>r({...n,offset:e})}),o!==null&&i(X,{label:a(`customize.scalar.clampMin`),value:n.clampMin??o.min,onChange:e=>r({...n,clampMin:e,clampMax:n.clampMax??o.max})}),o!==null&&i(X,{label:a(`customize.scalar.clampMax`),value:n.clampMax??o.max,onChange:e=>r({...n,clampMin:n.clampMin??o.min,clampMax:e})})]})}function X({label:t,value:n,onChange:r}){return e(`label`,{className:`flex flex-col gap-1`,children:[t,i(H,{type:`number`,value:Number.isFinite(n)?n:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&r(t)}})]})}var or=`kind`,sr=`unit`,cr=`unit-unknown`,lr=`compile`,ur=`dwell`,dr=`no-value`,fr=`empty`;function pr(e){return`customize.scalar.previewFailure.${e}`}function mr(e){return e===`compile`||e===`dwell`||e===`no-value`||e===`empty`}function hr(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function gr(e,t){let n=Object.entries(D).find(([t])=>t===e)?.[1];return n===void 0?null:n.targets.find(e=>e.id===t)??null}function _r(e,t){return gr(e,t)?.path??null}function vr(e,t){return e.caps.flatMap(e=>{let n=yr(t,e.cap);return e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:n}))})}function yr(e,t){if(e===null)return null;let n=Y(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function br(e,t){if(t.kind===`boolean`){let n=le[t.cap];return n===void 0||n!==t.path?null:t.cap===`switch`?e.find(e=>e.kind===`switch`)??e.find(e=>e.kind===`binary`)??null:e.find(e=>e.kind===`binary`)??e.find(e=>e.kind===`field`&&e.valueKinds?.includes(`boolean`))??null}return t.kind===`number`?e.find(e=>e.kind===`numeric`)??e.find(e=>e.kind===`field`&&e.valueKinds?.includes(`number`))??null:t.kind===`string`?e.find(e=>e.kind===`field`&&e.valueKinds?.includes(`string`))??null:null}function xr(e,t,n){let r=gr(e,t);if(r===null||r.cardinality!==`scalar`||n.kind===`enum`)return{ok:!1,reason:or};let i=br(r.sources,n);if(i===null)return{ok:!1,reason:or};if(i.requiredUnit!==void 0&&n.unit===null)return{ok:!1,reason:cr};if(i.requiredUnit!==void 0&&n.unit!==i.requiredUnit)return{ok:!1,reason:sr};let a=i.transformKinds.filter(hr);return a.length===0?{ok:!1,reason:or}:{ok:!0,valueKind:n.kind,sourceUnit:i.requiredUnit??null,transforms:a,declared:i.transforms}}function Sr(e,t){return t.find(t=>t===e)??null}function Cr({mode:t,modes:n,name:r,onChange:a}){let{t:o}=W();return n.length===0?null:e(`div`,{className:`flex flex-col gap-1`,children:[i(V,{"aria-label":o(`customize.motion.modeFor`,{name:r}),value:t,options:n.map(e=>({value:e,label:o(`customize.motion.mode.${e}`)})),onChange:e=>{let t=Sr(e.target.value,n);t!==null&&a(t)}}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:o(`customize.motion.modeLine.${t}`)})]})}function wr(e){return[...new Set(e.accept.map(e=>e.cap))]}function Tr(e,t){let n=new Set(wr(t)),r=new Set(t.exclude.map(e=>`${e.addonId}/${e.stableId}`)),i=[],a=[];for(let o of e)r.has(`${o.addonId}/${o.stableId}`)||(Fr(o.type,t.deviceTypes)&&o.caps.some(e=>n.has(e))?i.push(o):a.push(o));return{compatible:i,incompatible:a}}function Er(e,t){return e.filter(e=>jr(t,e)&&Mr(t,e))}function Dr(e,t){return t.history.required?e.filter(e=>jr(t,e)&&!Nr(e)):[]}function Or(e,t){return e.flatMap(e=>{let n=t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId);return n===void 0?[]:[n.id]})}function kr(e){if(e.selectedIds.length>e.request.max)return{members:e.previous.map(Lr),refused:`max`,needsField:[]};let t=[];return{members:e.selectedIds.flatMap(n=>{let r=e.devices.find(e=>e.id===n);if(r===void 0)return[];let i=Ar(r,e);return i===null?(t.push(n),[]):[Ir(r,i.cap,i.fieldPath)]}),refused:null,needsField:t}}function Ar(e,t){if(t.choiceDeviceId===e.id&&t.choice!==null&&Pr(t.request,t.choice))return t.choice;let n=t.previous.find(t=>t.source.addonId===e.addonId&&t.source.stableId===e.stableId);if(n!==void 0&&Pr(t.request,n))return n;let r=t.request.accept.length===1?t.request.accept[0]:void 0;return r===void 0?null:{cap:r.cap,fieldPath:r.fieldPath}}function jr(e,t){return e.accept.some(e=>e.cap===t.cap&&e.fieldPath===t.fieldPath&&e.valueKind===t.kind)}function Mr(e,t){return!e.history.required||Nr(t)}function Nr(e){return we(e.cap)[e.fieldPath]!==void 0}function Pr(e,t){return e.accept.some(e=>e.cap===t.cap&&e.fieldPath===t.fieldPath)}function Fr(e,t){return t.length===0?!0:t.some(t=>t===e)}function Ir(e,t,n){return{source:{addonId:e.addonId,stableId:e.stableId},cap:t,fieldPath:n}}function Lr(e){return{source:{addonId:e.source.addonId,stableId:e.source.stableId},cap:e.cap,fieldPath:e.fieldPath}}function Rr(e){return{id:e.id,name:e.name,type:e.type,stableId:e.stableId,parentDeviceId:e.parentDeviceId??null,...e.location!==void 0&&e.location!==null?{location:e.location}:{},...e.role!==void 0&&e.role!==null?{role:e.role}:{},...e.primaryChildEntityId!==void 0&&e.primaryChildEntityId!==null?{primaryChildEntityId:e.primaryChildEntityId}:{}}}function zr(e,t,n=St(`en`)){return He(e,`compact`,et(t),n)}function Br(e){return e.map(e=>({id:e.id,name:e.name,type:e.type,parentDeviceId:e.parentDeviceId,...e.location===null?{}:{location:e.location}}))}s();function Vr(e,t){return e===`pending`||t.kind===`pending`?`pending`:e===`error`||t.kind===`unknown`?`failed`:`answered`}function Hr(e,t){return e.map(e=>({id:e.id,name:e.name,type:e.type,location:e.location,parentDeviceId:e.parentDeviceId,addonId:e.addonId,stableId:e.stableId,caps:t.get(e.id)??[]}))}function Ur(e){return e.caps.flatMap(e=>e.fields.flatMap(t=>t.item===!0?[]:[{cap:e.cap,fieldPath:t.path,kind:t.kind}]))}function Wr(e,t,n){return t?e==null?n:Qt(e,!0):`…`}function Gr({request:t,enabled:r,members:a,onMembersChange:s,onRefuse:l}){let{t:d,i18n:f}=W(),[p,m]=o(null),[h,g]=o(!1),_=$e({projection:`slim`}),v=n(()=>_.status===`success`?Yt(_.data):[],[_.status,_.data]),y=kt(n(()=>wr(t),[t]),r),b=n(()=>y.kind===`known`?Tr(Hr(v,y.value),t):{compatible:[],incompatible:[]},[y,v,t]),x=Vr(_.status,y),S=Or(a,b.compatible),C=b.compatible.find(e=>e.id===p)??null,w=bt({deviceId:C?.id??0},{enabled:C!==null}),T=Xe({deviceId:C?.id??0},{enabled:C!==null}),E=w.status===`success`?w.data:{caps:[]},D=Er(Ur(E),t),O=Dr(Ur(E),t),k=n(()=>Br(b.compatible.map(Kr)),[b.compatible]),A=(e,n,r)=>{if(y.kind!==`known`)return;let i=kr({request:t,devices:b.compatible,selectedIds:e,previous:a,choiceDeviceId:n,choice:r});if(i.refused===`max`){l({code:`max`,max:t.max});return}l(null),s(i.members)};return e(`div`,{"data-testid":`source-selector`,className:`flex flex-col gap-3 sm:grid sm:grid-cols-2 sm:gap-4`,children:[e(`div`,{className:`flex max-h-72 min-h-0 flex-col gap-2 overflow-y-auto sm:max-h-[min(24rem,60vh)]`,children:[i(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:d(`helper.pickMembers`)}),_.status===`error`?i(z,{title:d(`customize.picker.devicesFailed`),message:_.error?.message??``}):y.kind===`unknown`?i(z,{title:d(`customize.picker.devicesFailed`),message:y.reason}):i(Qe,{devices:k,listState:x,value:S,selection:`multiple`,groupBy:`location`,onChange:e=>{m(e.find(e=>!S.includes(e))??e.at(-1)??null),A(e,null,null)},noun:`device`,showAll:!0,testId:`helper-member-picker`}),b.incompatible.length>0&&e(`div`,{"data-testid":`helper-incompatible-devices`,children:[e(B,{variant:`ghost`,size:`sm`,className:`h-auto w-full justify-start gap-1 px-0 text-[11px] text-foreground-muted`,onClick:()=>g(e=>!e),children:[i(u,{className:`size-3 transition-transform ${h?`rotate-180`:``}`}),d(`customize.sourceSelector.notCompatibleDevices`,{count:b.incompatible.length})]}),h&&i(`ul`,{className:`mt-1 flex flex-col gap-0.5 pl-4 text-[11px] text-foreground-subtle`,children:b.incompatible.map(e=>i(`li`,{children:e.name},e.id))})]})]}),i(`div`,{className:`flex min-h-0 flex-col gap-2`,children:C===null?i(`p`,{className:`text-[11px] text-foreground-subtle`,children:d(`helper.pickMembersHint`)}):e(c,{children:[i(`h3`,{className:`text-[11px] font-medium text-foreground`,children:C.name}),w.status===`pending`||T.status===`pending`?i(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:d(`customize.picker.loadingFields`)}):w.status===`error`?i(z,{title:d(`customize.picker.fieldsFailed`),message:w.error?.message??``}):D.length===0?i(`p`,{className:`text-[11px] text-foreground-muted`,children:d(`helper.noUsableValue`)}):i(`ul`,{className:`flex flex-col gap-1`,children:D.map(t=>{let n=a.some(e=>e.source.addonId===C.addonId&&e.source.stableId===C.stableId&&e.cap===t.cap&&e.fieldPath===t.fieldPath),r=T.status===`success`?Y(T.data[t.cap],t.fieldPath):void 0;return i(`li`,{children:e(`label`,{className:`flex flex-wrap items-center gap-2 text-[11px] text-foreground`,children:[i(`input`,{type:`radio`,name:`helper-member-value`,checked:n,"data-testid":`helper-value-${t.cap}.${t.fieldPath}`,onChange:()=>A(qr(S,C.id),C.id,t)}),i(`span`,{children:K(t.cap,t.fieldPath,f.language)}),i(`span`,{className:`text-foreground-muted`,children:Wr(r,T.status===`success`,d(`helper.valueUnknown`))})]})},`${t.cap}.${t.fieldPath}`)})}),O.length>0&&i(`p`,{className:`text-[11px] text-foreground-muted`,"data-testid":`helper-no-history`,children:d(`helper.noHistory`)})]})})]})}function Kr(e){return{id:e.id,name:e.name,type:e.type,location:e.location,parentDeviceId:e.parentDeviceId,addonId:e.addonId,stableId:e.stableId,caps:e.caps}}function qr(e,t){return e.includes(t)?e:[...e,t]}function Jr(e,t){let n=O[t]??null;if(n===null)return null;let r=e.caps.find(e=>e.cap===t);return r===void 0?null:r.fields.some(e=>e.path===n)?n:null}function Yr(e,t,n){let r=le[t];if(r===void 0||r!==n)return!1;let i=e.caps.find(e=>e.cap===t);return i===void 0||!i.fields.some(e=>e.path===n)?!1:Jr(e,t)!==null}function Xr(e,t){return t===void 0?null:e.find(e=>e.addonId===t.addonId&&e.stableId===t.stableId)??null}function Zr(e,t,n,r,i){let a=e.find(e=>e.addonId===t.addonId&&e.stableId===t.stableId),o=r===`pulse`?O[n.cap]:void 0;if(a!==void 0&&a.deviceId===t.id&&a.cap===n.cap&&a.fieldPath===n.path&&(r!==`pulse`||a.changedAtField===o))return null;let s=e.filter(e=>!(e.addonId===t.addonId&&e.stableId===t.stableId)),c={deviceId:t.id,addonId:t.addonId,stableId:t.stableId,cap:n.cap,fieldPath:n.path,deviceName:t.name,mode:a?.mode??i,...o===void 0?{}:{changedAtField:o}};return[...s,c]}function Qr(e){return`${e.addonId}/${e.stableId}/${e.cap}.${e.fieldPath}`}function $r(e,t){let n=Qr(t);return e.filter(e=>Qr(e)!==n)}function ei(e,t,n){let r=Qr(t);return e.map(e=>Qr(e)===r?{...e,mode:n}:e)}function ti({edges:t,edge:n,onChange:r}){let{t:a}=W();return t.length===0?null:e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[a(`customize.event.edge`),i(V,{"aria-label":a(`customize.event.edge`),value:n,options:t.map(e=>({value:e,label:a(`customize.event.edgeValue.${e}`)})),onChange:e=>{let n=t.find(t=>t===e.target.value);n!==void 0&&r(n)}})]})}function ni({label:t,value:n,onChange:r}){return e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[t,i(H,{type:`number`,"aria-label":t,value:Number.isFinite(n)?n:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&t>=0&&r(t)}})]})}function ri(e){return Object.hasOwn(D,e)}function ii(e,t){return ri(e)?D[e].targets.find(e=>e.id===t)??null:null}function ai(e){let t=ii(e.cap,e.targetId);if(t===null)return[];if(t.cardinality===`keyedArray`){let t=e.fieldPath;return t===void 0?[]:Vn(e.cap,e.targetId).find(e=>e.path===t)?.sources??[]}return t.sources}function oi(e){return{cap:e.cap,path:e.path,kind:e.kind,unit:e.unit}}function si(e,t){return t.kind===`number`?e.find(e=>e.kind===`numeric`)??null:t.kind===`enum`||t.kind===`string`?e.find(e=>e.kind===`enum`)??null:null}function ci(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function li(e,t){if(e.requiredUnit!==void 0&&t.unit===null)return{kind:`incompatible`,reason:`unit-unknown`};if(e.requiredUnit!==void 0&&t.unit!==e.requiredUnit)return{kind:`incompatible`,reason:`unit`};if(e.transformKinds.includes(`enum-map`))return{kind:`conversion`,name:`enum-map`};let n=e.transformKinds.filter(ci);return n.length===0?{kind:`incompatible`,reason:`kind`}:n.includes(`identity`)?{kind:`direct`}:n.includes(`threshold`)?{kind:`conversion`,name:`threshold`}:n.includes(`linear`)?{kind:`conversion`,name:`scale`}:n.includes(`invert`)?{kind:`conversion`,name:`invert`}:{kind:`incompatible`,reason:`kind`}}function ui(e,t){if(e.pickerTargetKind!==void 0){let n=e.pickerTargetKind,r={addonId:`x`,stableId:`y`};return(n===null?{kind:`from`,source:r,cap:t.cap,fieldPath:t.path}:Jt(n,{source:r,cap:t.cap,fieldPath:t.path,kind:t.kind}))===null?{kind:`incompatible`,reason:`kind`}:{kind:`direct`}}if(e.acceptAnyField===!0)return t.kind===`enum`?{kind:`incompatible`,reason:`kind`}:{kind:`direct`};let n=ii(e.cap,e.targetId);if(n?.cardinality===`event`&&t.kind===`boolean`&&br(ai(e),oi(t))!==null)return{kind:`direct`};let r=ai(e);if(r.length===0)return{kind:`incompatible`,reason:`kind`};let i=n?.cardinality===`keyedArray`&&e.fieldPath!==void 0;if(t.kind===`enum`&&!i)return{kind:`incompatible`,reason:`kind`};let a=i?si(r,t):br(r,oi(t));return a===null?{kind:`incompatible`,reason:`kind`}:li(a,t)}function di(e,t){let n=j[e];return n===void 0?!1:Object.values(n).includes(t)}function Z(){return Object.keys(j)}function fi(e,t){if(t.kind===`binary`)return e.some(e=>Object.hasOwn(le,e));if(t.kind===`switch`)return e.includes(`switch`);if(t.kind===`numeric`){let n=t.requiredUnit;return n===void 0?e.some(e=>Z().includes(e)||e===`numeric-sensor`):n===`W`?e.some(e=>e===`numeric-sensor`||e===`power-meter`||di(e,n)):e.some(e=>di(e,n))}return t.kind===`field`?e.some(e=>Z().includes(e)||e===`numeric-sensor`||e===`battery`):t.kind===`enum`?e.includes(`consumables`)||e.some(e=>Z().includes(e)):!1}function pi(e,t){if(t.pickerTargetKind!==void 0||t.acceptAnyField===!0)return!0;let n=ai(t);return n.length===0?!1:n.some(t=>fi(e.caps,t))}function mi(e,t,n){let r=[],i=[];for(let a of e)a.id!==n&&(pi(a,t)?r.push(a):i.push(a));return{compatible:r,incompatible:i}}function hi(e,t,n){let r=new Map,i=[];for(let a of e){let e=ui(t,a),o=K(a.cap,a.path,n),s={cap:a.cap,path:a.path,label:o,currentText:a.currentText,compatibility:e};if(e.kind===`incompatible`){i.push(s);continue}let c=r.get(a.cap)??[];c.push(s),r.set(a.cap,c)}return{groups:[...r.entries()].toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({cap:e,title:Lt(e,n),rows:t.toSorted((e,t)=>e.label.localeCompare(t.label))})),incompatible:i}}function gi(e){return ii(e.cap,e.targetId)?.cardinality===`keyedArray`&&e.fieldPath!==void 0}function _i(e){if(e.pickerTargetKind!==void 0)return[];if(e.acceptAnyField===!0)return Z();let t=ai(e),n=new Set;for(let e of t)if(e.kind===`binary`)for(let e of Object.keys(le))n.add(e);else if(e.kind===`switch`)n.add(`switch`);else if(e.kind===`numeric`){n.add(`numeric-sensor`),n.add(`power-meter`);for(let t of Z())(e.requiredUnit===void 0||di(t,e.requiredUnit))&&n.add(t)}else if(e.kind===`field`){n.add(`battery`),n.add(`numeric-sensor`);for(let e of Z())n.add(e)}else if(e.kind===`enum`){n.add(`consumables`);for(let e of Z())n.add(e)}return[...n]}function vi(e,t,n,r,i){let a=ai(e);if(a.length===0)return[];let o=vr(t,i).filter(e=>e.kind===`boolean`),s=[];for(let e of o){if(br(a,e)===null||n===`pulse`&&!Yr(t,e.cap,e.path))continue;let o=i===null?void 0:Y(i[e.cap],e.path);s.push({cap:e.cap,path:e.path,kind:`boolean`,unit:null,currentText:Qt(o,r)})}return s}function yi(e,t,n,r,i,a=null){return a===null?e.pickerTargetKind!==void 0&&i!==null?Zt(i,t,r,e.pickerTargetKind).map(e=>({cap:e.cap,path:e.path,kind:e.kind,unit:null,currentText:Qt(e.value,n)})):(gi(e)?Un(t,r):vr(t,r)).map(e=>{let t=r===null?void 0:Y(r[e.cap],e.path);return{cap:e.cap,path:e.path,kind:e.kind,unit:e.unit,currentText:Qt(t,n)}}):vi(e,t,a,n,r)}s();function bi(e,t){return e===`pending`||t.kind===`pending`?`pending`:e===`error`?`failed`:`answered`}function xi(e,t){return e.map(e=>({id:e.id,name:e.name,type:e.type,location:e.location,parentDeviceId:e.parentDeviceId,addonId:e.addonId,stableId:e.stableId,caps:t.get(e.id)??[]}))}function Si(e,t){return e.kind===`direct`?t(`customize.sourceSelector.direct`):e.kind===`conversion`?t(`customize.sourceSelector.withConversion`,{name:t(`customize.scalar.transform.${Ci(e.name)}`)}):``}function Ci(e){return e===`scale`?`linear`:e===`enum-map`?`enumMap`:e}function wi(e){return e.kind===`members`?i(Gr,{...e}):i(Ti,{...e})}function Ti(t){let{t:r,i18n:s}=W(),[l,d]=o(`device`),[f,p]=o(!1),[m,h]=o(!1),g=$e({projection:`slim`}),_=n(()=>g.status===`success`?Yt(g.data):[],[g.status,g.data]),v=kt(n(()=>_i(t.destination),[t.destination]),t.enabled),{compatible:y,incompatible:b}=n(()=>v.kind===`known`?mi(xi(_,v.value),t.destination,t.hostId):{compatible:[],incompatible:[]},[v,_,t.destination,t.hostId]),x=bi(g.status,v),S=t.device?.id??0,C=bt({deviceId:S}),w=Xe({deviceId:t.device===null?0:S}),T=C.status===`success`?C.data:{caps:[]},E=t.kind===`event`?t.shape:null,D=yi(t.destination,T,w.status===`success`,w.status===`success`?w.data:null,t.device,E),O=t.kind===`event`?t.devicePickerTestId:`source-selector-device-picker`,{groups:k,incompatible:A}=hi(D,t.destination,s.language),j=Di(t,T,w.status===`success`?w.data:null),ee=e=>{let n=e[0];if(n===void 0){t.onDeviceChange(null),t.kind!==`event`&&t.onFieldChange(null);return}if(t.device?.id===n)return;let r=_.find(e=>e.id===n)??null;t.onDeviceChange(r),t.kind!==`event`&&t.onFieldChange(null),d(`value`)},M=t.kind===`event`?D[0]??null:null,N=t.kind===`event`?t:null;a(()=>{if(N===null||N.device===null||M===null)return;let e=Zr(N.picked,N.device,{cap:M.cap,path:M.path},N.shape,N.sourceModes[0]??`in-addition`);e!==null&&N.onPickedChange(e)},[N,M]);let P=n(()=>Br(y),[y]),F=e(`div`,{className:`flex max-h-72 min-h-0 flex-col gap-2 overflow-y-auto sm:max-h-[min(24rem,60vh)]`,children:[i(`h3`,{className:`text-[11px] font-medium text-foreground-muted`,children:r(`customize.sourceSelector.pickDevice`,{title:t.destination.title})}),g.status===`error`?i(z,{title:r(`customize.picker.devicesFailed`),message:g.error?.message??``}):i(Qe,{devices:P,listState:x,value:t.device===null?[]:[t.device.id],selection:`single`,groupBy:`location`,onChange:ee,noun:`device`,showAll:!0,testId:O}),b.length>0&&e(`div`,{"data-testid":`source-incompatible-devices`,children:[e(B,{variant:`ghost`,size:`sm`,className:`h-auto w-full justify-start gap-1 px-0 text-[11px] text-foreground-muted`,onClick:()=>p(e=>!e),children:[i(u,{className:`size-3 transition-transform ${f?`rotate-180`:``}`}),r(`customize.sourceSelector.notCompatibleDevices`,{count:b.length})]}),f&&i(`ul`,{className:`mt-1 flex flex-col gap-0.5 pl-4 text-[11px] text-foreground-subtle`,children:b.map(e=>i(`li`,{children:e.name},e.id))})]})]}),te=t.kind===`event`&&t.picked.length>0?i(`ul`,{"data-testid":`source-picked-list`,className:`flex flex-col gap-2`,children:t.picked.map(n=>e(`li`,{className:`flex flex-col gap-1 text-xs`,children:[e(`span`,{className:`text-foreground`,children:[n.deviceName,` · `,K(n.cap,n.fieldPath,s.language)]}),t.shape===`span`&&n.mode!==void 0&&i(Cr,{mode:n.mode,modes:t.sourceModes,name:n.stableId,onChange:e=>t.onPickedChange(ei(t.picked,n,e))}),i(B,{variant:`ghost`,size:`sm`,onClick:()=>t.onPickedChange($r(t.picked,n)),children:r(`customize.event.clear`)})]},`${n.addonId}/${n.stableId}/${n.cap}.${n.fieldPath}`))}):null,I=t.kind===`event`?e(`div`,{className:`flex flex-col gap-2`,children:[t.shape===`pulse`&&e(c,{children:[i(ti,{edges:t.edges,edge:t.edge,onChange:t.onEdgeChange}),e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[r(`customize.event.debounce`),i(H,{type:`number`,"aria-label":r(`customize.event.debounce`),value:Number.isFinite(t.debounceSec)?t.debounceSec:0,onChange:e=>{let n=Number(e.target.value);Number.isFinite(n)&&n>=0&&t.onDebounceSecChange(n)}})]})]}),t.shape===`span`&&e(c,{children:[i(ni,{label:r(`customize.event.timeout`),value:t.timeoutSec,onChange:t.onTimeoutSecChange}),t.cooldownSec!==null&&i(ni,{label:r(`customize.event.cooldown`),value:t.cooldownSec,onChange:t.onCooldownSecChange})]})]}):null,ne=e(`div`,{className:`flex min-h-0 flex-col gap-2`,children:[te,t.device!==null&&i(Ye,{device:t.device,form:`full`,className:`text-[11px] font-medium text-foreground`}),t.device===null?i(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`customize.sourceSelector.noDevice`)}):C.status===`pending`?i(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:r(`customize.picker.loadingFields`)}):C.status===`error`?i(z,{title:r(`customize.picker.fieldsFailed`),message:C.error?.message??``}):e(`div`,{className:`flex flex-col gap-3`,children:[t.kind===`event`?i(ki,{fields:M===null?[]:[M],language:s.language,emptyLabel:r(`customize.sourceSelector.noStateField`)}):null,t.kind!==`event`&&k.map(n=>e(`section`,{"aria-label":n.title,children:[i(`h4`,{className:`text-[10px] font-medium uppercase tracking-wide text-foreground-muted`,children:n.title}),i(`ul`,{className:`mt-1 flex flex-col gap-1`,children:n.rows.map(n=>i(`li`,{children:e(`label`,{className:`flex flex-wrap items-center gap-2 text-[11px] text-foreground`,children:[i(`input`,{type:`radio`,name:`source-value`,checked:t.field?.cap===n.cap&&t.field.path===n.path,"data-testid":`source-value-${n.cap}.${n.path}`,onChange:()=>{if(t.onFieldChange({cap:n.cap,path:n.path}),t.kind===`formula`)return;let e=Ei(t,T,w.status===`success`?w.data:null,n.cap,n.path);e!==null&&e.ok&&t.onTransformChange(Yn(e))}}),i(`span`,{children:n.label}),i(`span`,{className:`text-foreground-muted`,children:n.currentText}),i(`span`,{className:`text-foreground-subtle`,children:Si(n.compatibility,r)})]})},`${n.cap}.${n.path}`))})]},n.cap)),t.kind!==`event`&&A.length>0&&e(`div`,{"data-testid":`source-incompatible-values`,children:[e(B,{variant:`ghost`,size:`sm`,className:`h-auto w-full justify-start gap-1 px-0 text-[11px] text-foreground-muted`,onClick:()=>h(e=>!e),children:[i(u,{className:`size-3 transition-transform ${m?`rotate-180`:``}`}),r(`customize.sourceSelector.otherValues`)]}),m&&i(`ul`,{className:`mt-1 flex flex-col gap-1 pl-4 text-[11px] text-foreground-subtle`,children:A.map(t=>e(`li`,{children:[t.label,` · `,t.currentText]},`${t.cap}.${t.path}`))})]})]}),t.kind===`scalar`&&j!==null&&j.ok&&i(er,{control:Jn(j.transforms),transforms:j.transforms,declared:j.declared,unit:j.sourceUnit,value:t.transform,onChange:t.onTransformChange}),t.kind===`keyed`&&j!==null&&j.ok&&t.field!==null&&i(er,{control:Jn(j.transforms),transforms:j.transforms,declared:j.declared,unit:j.sourceUnit,value:t.transform,onChange:t.onTransformChange}),I]});return e(`div`,{"data-testid":`source-selector`,className:`flex flex-col gap-3 sm:grid sm:grid-cols-2 sm:gap-4`,children:[i(`div`,{className:l===`value`?`hidden sm:block`:void 0,children:F}),e(`div`,{className:l===`device`?`hidden sm:block`:void 0,children:[l===`value`&&i(B,{variant:`ghost`,size:`sm`,className:`mb-2 sm:hidden`,onClick:()=>d(`device`),children:r(`customize.sourceSelector.backToDevices`)}),ne]})]})}function Ei(e,t,n,r,i){if(e.kind===`keyed`){let a=t.caps.flatMap(e=>e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:Oi(n,e.cap),enumValues:t.enumValues??[]}))).find(e=>e.cap===r&&e.path===i);if(a===void 0)return null;let o=Kn(e.destination.cap,e.destination.targetId,e.fieldPath,a);return!o.ok||o.mode!==`scalar`?null:o.fit}let a=t.caps.flatMap(e=>e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:Oi(n,e.cap)}))).find(e=>e.cap===r&&e.path===i&&(e.kind===`boolean`||e.kind===`number`||e.kind===`string`));if(a===void 0)return null;let o=xr(e.destination.cap,e.destination.targetId,a);return o.ok?o:null}function Di(e,t,n){return e.kind===`formula`||e.kind===`event`||e.device===null||e.field===null?null:Ei(e,t,n,e.field.cap,e.field.path)}function Oi(e,t){if(e===null)return null;let n=e[t]?.unit;return typeof n==`string`&&n.length>0?n:null}function ki({fields:t,language:n,emptyLabel:r}){return t.length===0?i(`p`,{className:`text-[11px] text-foreground-subtle`,children:r}):i(`ul`,{className:`flex flex-col gap-1`,children:t.map(t=>e(`li`,{"data-testid":`source-declared-field`,className:`text-[11px] text-foreground`,children:[i(`span`,{className:`font-medium`,children:Lt(t.cap,n)}),` · `,K(t.cap,t.path,n),` `,i(`span`,{className:`text-foreground-muted`,children:t.currentText})]},`${t.cap}.${t.path}`))})}function Ai(e,t,n,r,i,a){let o=Zt(e,r,i,a).find(e=>e.cap===t&&e.path===n);return o===void 0||o.source===null?null:{device:e,ref:{addonId:e.addonId,stableId:e.stableId},cap:o.cap,path:o.path,kind:o.kind,source:o.source,value:o.value}}s();var ji=new Map;function Mi(e,t,n,r){return e.kind===`from`?`${t.get(x(e.source))??r} · ${K(e.cap,e.fieldPath,n)}`:``}function Ni({open:t,title:n,fieldPath:r,fieldLabel:a,sourceNames:s=ji,initial:c,selfNative:l=null,onClose:u,onSave:d}){let{t:f,i18n:p}=W(),[m,h]=o(c.kind===`expression`?c:{kind:`expression`,expr:`null`,bindings:{}}),[g,_]=o(`idle`),[v,y]=o(null),[b,x]=o(null),S=bt({deviceId:v?.id??0}),C=Xe({deviceId:v?.id??0}),w=S.status===`success`?S.data:{caps:[]},T=Ne(m.expr,m.bindings),E=Object.keys(m.bindings);return i(st,{open:t,onOpenChange:e=>{e||u()},children:e(dt,{width:`lg`,scroll:`body`,placement:`sheet-on-mobile`,"data-testid":`formula-dialog`,children:[i(rt,{children:i(_t,{children:n})}),e(pt,{className:`flex flex-col gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:a??K(``,r,p.language)}),i(An,{label:f(`compositionEditor.formulaFor`,{path:a??r}),value:m.expr,bindings:E,onChange:e=>h({...m,expr:e})}),i(`ul`,{className:`flex flex-col gap-0.5 text-[11px]`,children:Object.entries(m.bindings).map(([t,n])=>e(`li`,{className:`flex flex-wrap items-center gap-2`,children:[i(`span`,{className:`font-mono`,children:t}),i(`span`,{children:n.kind===`from`?Mi(n,s,p.language,f(`customize.fieldsCard.unknownDevice`)):JSON.stringify(n.value)}),i(B,{size:`sm`,variant:`ghost`,"aria-label":f(`compositionEditor.removeBinding`,{name:t}),onClick:()=>{let{[t]:e,...n}=m.bindings;h({...m,bindings:n})},children:`×`})]},t))}),e(`div`,{className:`flex flex-wrap gap-2`,children:[l!==null&&i(B,{size:`sm`,variant:`outline`,"data-testid":`formula-self-native`,onClick:()=>{let e=Object.keys(m.bindings),t=m.bindings.v===void 0?`v`:Tn(e);h({...m,bindings:{...m.bindings,[t]:{kind:`from`,source:l.source,cap:l.cap,fieldPath:l.fieldPath}}})},children:f(`customize.override.selfNative`)}),i(B,{size:`sm`,variant:`outline`,onClick:()=>_(`add-binding`),children:f(`compositionEditor.addSource`)})]}),T!==null&&i(`p`,{role:`alert`,className:`text-xs text-danger`,children:T}),i(In,{source:m}),g===`add-binding`&&e(`div`,{className:`flex flex-col gap-2 border border-border rounded-md p-2`,children:[i(wi,{kind:`formula`,enabled:t,hostId:-1,destination:{cap:`formula`,targetId:`binding`,title:f(`compositionEditor.addSource`),acceptAnyField:!0},device:v,field:b,onDeviceChange:y,onFieldChange:x}),e(`div`,{className:`flex flex-wrap gap-2`,children:[i(B,{variant:`ghost`,size:`sm`,onClick:()=>_(`idle`),children:f(`customize.picker.cancel`)}),i(B,{size:`sm`,disabled:v===null||b===null,onClick:()=>{if(v===null||b===null)return;let e=Ai(v,b.cap,b.path,w,C.status===`success`?C.data:null,null);if(e===null)return;let t=Tn(E);h({...m,bindings:{...m.bindings,[t]:{kind:`from`,source:e.ref,cap:e.cap,fieldPath:e.path}}}),y(null),x(null),_(`idle`)},children:f(`compositionEditor.addSource`)})]})]})]}),e(ct,{children:[i(B,{variant:`ghost`,onClick:u,children:f(`compositionEditor.cancel`)}),i(B,{"data-testid":`formula-dialog-save`,disabled:T!==null,onClick:()=>{d(m),u()},children:f(`compositionEditor.save`)})]})]})})}s();function Pi({open:t,from:n,initialTo:r,onClose:a,onSave:s}){let{t:c}=W(),l=M(n),[u,d]=o(r??l[0]??``),f=l.includes(u)?u:l[0]??``;return i(st,{open:t,onOpenChange:e=>{e||a()},children:e(dt,{width:`sm`,scroll:`body`,placement:`sheet-on-mobile`,"data-testid":`convert-unit-dialog`,children:[i(rt,{children:i(_t,{children:c(`customize.override.convertTitle`)})}),e(pt,{className:`flex flex-col gap-2`,children:[i(`p`,{className:`text-xs text-foreground`,children:c(`customize.override.convertSummary`,{from:n,to:f})}),l.length>1&&i(V,{"aria-label":c(`customize.override.targetUnit`),value:f,onChange:e=>d(e.target.value),options:l.map(e=>({value:e,label:e}))})]}),e(ct,{children:[i(B,{variant:`ghost`,onClick:a,children:c(`compositionEditor.cancel`)}),i(B,{"data-testid":`convert-unit-publish`,disabled:f===``||f===n,onClick:()=>{s(f),a()},children:c(`customize.override.publish`)})]})]})})}function Fi(e,t,n,r,i){return{kind:`expression`,expr:`convert(v, ${JSON.stringify(e)}, ${JSON.stringify(t)})`,bindings:{v:{kind:`from`,source:n,cap:r,fieldPath:i}}}}function Ii(e){return{kind:`expression`,expr:JSON.stringify(e),bindings:{}}}function Li(e,t,n,r,i,a){let o=J(e,n)??{kind:`fields`,cap:n,fields:{}},s={...o.fields,[r]:i},c=Object.fromEntries(Object.entries(s).filter(([e])=>!a.includes(e)));return q(e,t,{...o,fields:c})}function Ri(e,t,n,r){let i=Fe(t,n);if(i===null||e===null)return[];let a=e.fields[i];return a?.kind===`expression`&&a.expr===JSON.stringify(r)&&i!==n?[i]:[]}function zi(e,t,n,r){let i=J(e,n);if(i===null)return e;let a=new Set(r),o=Object.fromEntries(Object.entries(i.fields).filter(([e])=>!a.has(e)));return Object.keys(o).length===0?Ut(e,n):q(e,t,{...i,fields:o})}s();function Bi({deviceId:t,self:n,selfName:r,cap:a,fieldPath:s,label:l,unit:u,valueKind:d=null,handle:f,names:p,toFill:m=!1}){let{t:h,i18n:g}=W(),_=qt(),[v,y]=o(`closed`),b=G(f.state),S=J(b,a),C=S?.fields[s]??null,w=C===null?null:re(C),T=u===void 0?[]:M(u),E=new Map(p);E.set(x(n),r);let D=()=>y(`closed`),O=(e,t)=>{f.save(Li(b,n,a,s,e,t))},k=()=>w?.kind===`convert-unit`?Ri(S,a,s,w.to):[];return e(`div`,{className:`flex flex-col gap-1 border-t border-border pt-2 first:border-t-0 first:pt-0`,"data-testid":`override-row-${a}-${s}`,children:[e(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:l}),m&&C===null&&i(ht,{variant:`warning`,children:h(`compositionEditor.toFill`)})]}),e(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:h(`customize.scalar.effective`)}),i(ln,{target:{deviceId:t,cap:a,path:s}})]}),w===null?i(`p`,{className:`text-xs text-foreground-subtle`,children:h(`customize.override.none`)}):i(Ui,{entry:w,names:E,language:g.language,unknownDevice:h(`customize.fieldsCard.unknownDevice`)}),i(`div`,{className:`flex flex-wrap gap-2`,children:w===null?i(Hi,{cap:a,fieldPath:s,saving:f.saving,convert:T.length>0,onFrom:()=>y(`from`),onFormula:()=>y(`formula`),onConvert:()=>y(`convert`)}):e(c,{children:[i(B,{variant:`outline`,size:`sm`,disabled:f.saving,onClick:()=>y(Vi(w)),children:h(`customize.scalar.change`)}),i(B,{variant:`ghost`,size:`sm`,disabled:f.saving,onClick:()=>{if(b===null)return;let e=zi(b,n,a,[s,...k()]);_(h(`customize.fieldsCard.removeField`,{field:l}),e===null).then(t=>{t&&f.save(e)})},children:h(`customize.scalar.remove`)})]})}),i(st,{open:v===`from`,onOpenChange:e=>{e||D()},children:e(dt,{width:`lg`,scroll:`body`,placement:`sheet-on-mobile`,children:[i(rt,{children:i(_t,{children:l})}),i(pt,{children:v===`from`&&i(Wi,{title:h(`customize.override.fromDevice`),hostId:t,valueKind:d??(u===void 0?null:`number`),onCancel:D,onConfirm:e=>{O(e.source,k()),D()}})})]})}),v===`formula`&&i(Ni,{open:!0,title:h(`compositionEditor.formulaFor`,{path:l}),fieldPath:s,fieldLabel:l,sourceNames:E,initial:C?.kind===`expression`?C:{kind:`expression`,expr:`v`,bindings:{}},selfNative:{source:n,cap:a,fieldPath:s},onClose:D,onSave:e=>{O(e,k()),D()}}),v===`convert`&&u!==void 0&&i(Pi,{open:!0,from:u,initialTo:w?.kind===`convert-unit`?w.to:null,onClose:D,onSave:e=>{let t=Fe(a,s),r=Li(b,n,a,s,Fi(u,e,n,a,s),[]),i=t===null?r:Li(r,n,a,t,Ii(e),[]);f.save(i),D()}})]})}function Vi(e){return e.kind===`convert-unit`?`convert`:e.kind===`from`?`from`:`formula`}function Hi({cap:t,fieldPath:n,saving:r,convert:a,onFrom:o,onFormula:s,onConvert:c}){let{t:l}=W();return e(at,{children:[i(ut,{className:`h-7 px-2.5 text-xs rounded-md border border-border bg-surface text-foreground`,disabled:r,"data-testid":`override-add-${t}-${n}`,children:l(`customize.override.add`)}),e(ot,{children:[i(ft,{onClick:o,children:l(`customize.override.fromDevice`)}),i(ft,{onClick:s,children:l(`customize.override.formula`)}),a&&i(ft,{onClick:c,children:l(`customize.override.convertUnit`)})]})]})}function Ui({entry:t,names:n,language:r,unknownDevice:a}){let{t:o}=W();return t.kind===`companion`?i(`span`,{className:`text-xs text-foreground`,children:o(`customize.fieldsCard.now`)}):t.kind===`convert-unit`?e(`p`,{className:`flex flex-wrap items-center gap-1 text-xs text-foreground`,children:[i(`span`,{children:o(`customize.override.convertSummary`,{from:t.from,to:t.to})}),i(ht,{children:o(`customize.override.convertUnit`)})]}):t.kind===`formula`?e(`p`,{className:`flex flex-wrap items-center gap-1 text-xs text-foreground`,children:[i(`span`,{className:`break-words`,children:mn(t.expr,t.bindings,n,r,a)}),i(ht,{children:o(`compositionEditor.formula`)})]}):e(`div`,{className:`flex flex-col gap-0.5`,children:[t.sources.map(e=>{let t=x(e.source);return i(`span`,{className:`text-xs text-foreground`,children:o(`customize.fieldsCard.from`,{name:n.get(t)??a,field:K(e.cap,e.fieldPath,r)})},`${t}:${e.cap}:${e.fieldPath}`)}),t.aggregate!==null&&i(`span`,{className:`text-xs text-foreground-muted`,children:o(dn(t.aggregate))})]})}function Wi({title:t,hostId:n,valueKind:r,onCancel:a,onConfirm:s}){let{t:c}=W(),[l,u]=o(null),[d,f]=o(null),p=bt({deviceId:l?.id??0}),m=Xe({deviceId:l?.id??0}),h=p.status===`success`?p.data:{caps:[]};return e(`div`,{className:`flex flex-col gap-2`,children:[i(wi,{kind:`formula`,enabled:!0,hostId:n,destination:{cap:`override`,targetId:`field`,title:t,pickerTargetKind:r},device:l,field:d,onDeviceChange:u,onFieldChange:f}),e(`div`,{className:`flex flex-wrap gap-2`,children:[i(B,{variant:`ghost`,onClick:a,children:c(`customize.picker.cancel`)}),i(B,{disabled:l===null||d===null,onClick:()=>{if(l===null||d===null)return;let e=Ai(l,d.cap,d.path,h,m.status===`success`?m.data:null,r);e!==null&&s(e)},children:c(`customize.override.save`)})]})]})}function Gi(e,t){return ne(e,t)}function Ki({deviceId:t,selfName:n,card:r,handle:a,names:o}){let{t:s,i18n:c}=W(),l=qt(),u=G(a.state),d=c.language,f=Lt(r.cap,d),p=new Set(Object.keys(r.entries)),m=Ht(r.cap,p),h=()=>{if(u===null)return;let e=Ut(u,r.cap);l(s(`customize.fieldsCard.removeWhat`,{cap:f}),e===null).then(t=>{t&&a.save(e)})},g=(e,s)=>i(Bi,{deviceId:t,self:a.target,selfName:n,cap:r.cap,fieldPath:e,label:K(r.cap,e,d),unit:Gi(r.cap,e),handle:a,names:o,toFill:s},e);return e(`div`,{className:`flex flex-col gap-3 px-3 py-2 sm:px-4`,children:[m.map(e=>g(e,!0)),Object.keys(r.entries).filter(e=>!m.includes(e)).map(e=>g(e,!1)),i(`div`,{className:`flex flex-wrap gap-2`,children:i(B,{variant:`ghost`,size:`sm`,disabled:a.saving,onClick:h,children:s(`customize.fieldsCard.removeFeature`,{cap:f})})})]})}s();function qi({device:e,handle:t,skipCaps:r}){let{i18n:a}=W(),o=We(e,`compact`),s=G(t.state),l=jt(s!==null),u=n(()=>l.kind===`known`?new Map(l.value.map(e=>[x({addonId:e.addonId,stableId:e.stableId}),e.name])):new Map,[l]);if(s===null)return null;let{model:d}=oe(s),f=d.cards.filter(e=>e.card.cardKind===`fields`&&!r.has(e.card.cap));return f.length===0?null:i(c,{children:f.map(n=>{if(n.card.cardKind!==`fields`)return null;let r=n.card,s=Lt(r.cap,a.language);return i(Dt,{id:r.cap,icon:Ie,title:s,testId:`fields-card-${r.cap}`,children:i(Ki,{deviceId:e.id,selfName:o,card:r,handle:t,names:u})},r.cap)})})}function Ji(){return Object.entries(D).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`event`).map(t=>({cap:e,pulse:Yi(t),span:Xi(t)})).filter(e=>e.pulse!==null||e.span!==null))}function Yi(e){return e.shape===`pulse`?e.timestampPath===void 0||e.counterPath===void 0||e.debounceMs===void 0||e.edges===void 0||e.defaultEdge===void 0||!e.edges.includes(e.defaultEdge)?null:{id:e.id,timestampPath:e.timestampPath,counterPath:e.counterPath,debounceMs:e.debounceMs,edges:e.edges,defaultEdge:e.defaultEdge,apply:`add`,deviceTypes:e.deviceTypes}:null}function Xi(e){return e.shape!==`span`||e.timeoutMs===void 0||e.applyAuthority?.kind!==`camera-sensors`?null:{id:e.id,timeoutMs:e.timeoutMs,cooldownMs:e.cooldownMs??null,sourceModes:e.sourceModes??[`in-addition`],deviceTypes:e.deviceTypes}}function Zi(e,t){return e===`Native`||e.startsWith(`Native`)?`customize.assign.native`:e===`pending`?`customize.event.checking`:e===`unknown`||e===`unreadable`?`customize.event.badge.unavailable`:`customize.event.badge.${t}`}function Qi(e){return new Set(e.filter(e=>{let t=e.nativeAddonId?.trim()??``;return t!==``&&t!==`composer`}).map(e=>e.capName))}function $i(e,t){return{cap:e,apply:t.apply,authority:t.applyAuthority?.kind??`composition-claim`,nativeItemsReadOnly:t.nativeItems===`read-only`}}function ea(e){return e.kind===`known`?null:e}function ta(e,t){return e.composable.kind===`known`?e.composable.value.has(t)?{kind:`present`,mode:`add`}:{kind:`absent`}:e.composable}function na(e){if(e.deviceType!==de.Camera)return{kind:`absent`};switch(e.cameraSensors){case`pending`:return{kind:`pending`};case`unknown`:return{kind:`unknown`,reason:U.t(`helpers.assignmentAvailability.sensorsUnchecked`)};case`absent`:return{kind:`absent`};case`present`:return{kind:`present`,mode:`add`}}}function ra(e,t){if(e.authority===`camera-sensors`)return na(t);let n=ea(t.nativeCaps);if(n!==null)return n;let r=t.nativeCaps.kind===`known`?t.nativeCaps.value:new Set;return e.nativeItemsReadOnly?ta(t,e.cap):r.has(e.cap)?{kind:`absent`}:ta(t,e.cap)}s();var ia=new Map;function aa({handle:t,cap:n,fieldPath:r,itemKey:a,label:s,testId:l,sourceNames:u=ia}){let{t:d,i18n:f}=W(),p=K(n,r,f.language),[m,h]=o(!1),g=G(t.state),_=J(g,n),v=a===void 0?_?.fields[r]:_?.items?.[a]?.fields[r];if(v===void 0)return null;let y=async e=>{if(_===null)return;let n;if(a===void 0)n={..._,fields:{..._.fields,[r]:e}};else{let t=_.items?.[a];if(t===void 0)return;n={..._,items:{..._.items,[a]:{...t,fields:{...t.fields,[r]:e}}}}}await t.save(q(g,t.target,n))};return e(c,{children:[i(B,{variant:`ghost`,size:`sm`,"data-testid":l??`formula-entry-${n}-${r}`,onClick:()=>h(!0),children:s??d(`compositionEditor.formula`)}),i(Ni,{open:m,title:d(`compositionEditor.formulaFor`,{path:p}),fieldPath:r,fieldLabel:p,sourceNames:u,initial:v,onClose:()=>h(!1),onSave:e=>void y(e)})]})}function oa({name:t,detail:n,meta:r,value:a,shown:o,readout:s,problem:c,onRemove:l,removeLabel:u,busy:p=!1}){return e(`li`,{className:`${d} grid grid-cols-[minmax(0,1fr)_auto] items-center gap-x-3 gap-y-1 sm:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_minmax(0,1fr)_1.75rem]`,children:[e(`div`,{className:`min-w-0`,children:[i(`div`,{className:`text-xs text-foreground break-words`,children:t}),n!==null&&i(`div`,{className:`text-[11px] text-foreground-subtle break-words`,children:n}),c!==void 0&&i(`div`,{role:`alert`,className:`text-[11px] text-warning break-words`,children:c})]}),i(`div`,{className:`row-start-2 col-start-1 text-[11px] text-foreground-subtle empty:hidden sm:row-start-auto sm:col-start-auto sm:empty:block`,children:r}),i(`div`,{className:`row-start-3 col-start-1 empty:hidden sm:row-start-auto sm:col-start-auto sm:empty:block`,children:s===void 0?o===void 0?i(ln,{target:a}):o!==null&&i(un,{display:o}):s}),i(`div`,{className:`row-start-1 col-start-2 flex justify-end sm:row-start-auto sm:col-start-auto`,children:l!==void 0&&i(gt,{icon:f,variant:`ghost`,size:`sm`,"aria-label":u,disabled:p,onClick:l})})]})}function sa(e){return e.toLowerCase().normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)}function ca({preview:t}){let{t:n}=W();return e(`p`,{className:`text-[11px] text-foreground`,"data-testid":`scalar-preview`,children:[e(`span`,{className:`text-foreground-muted`,children:[n(`customize.scalar.preview`),` `]}),t.kind===`pending`&&i(`span`,{children:`…`}),t.kind===`value`&&i(`span`,{children:t.text}),t.kind===`dwell`&&i(`span`,{children:n(`customize.scalar.previewDwell`,{value:t.sourceText,level:t.active?n(`customize.scalar.thresholdActive`):n(`customize.scalar.thresholdClear`),countdown:n(t.active?`customize.scalar.runningIn`:`customize.scalar.stopsAfter`,{seconds:Math.round(t.countdownMs/1e3)})})}),t.kind===`failed`&&i(`span`,{title:mr(t.reason)?n(pr(t.reason)):t.reason,className:`text-warning`,children:`?`})]})}function la(e){return!e.ok||e.mode===`enum`?{kind:`identity`}:Yn(e.fit)}function ua(e,t){return Object.fromEntries(e.map(e=>[e,t.includes(e)?e:null]))}function da(e){let t={draft:{kind:`keyedArray`,cap:e.cap,targetId:e.targetId,key:e.key,label:e.label.trim(),fieldPath:e.fieldPath,source:{addonId:e.source.addonId,stableId:e.source.stableId,cap:e.source.cap,fieldPath:e.source.fieldPath},transform:e.transform},sourceValueKind:e.source.valueKind,sourceUnit:null,literals:e.literals},n=w({cap:e.cap,targetId:e.targetId,device:e.device,apply:e.apply,items:[t]});return n.ok?n.value:null}function fa(e,t,n){return(Vn(e,t).find(e=>e.path===n)?.literals??[]).map(e=>e.path)}function pa(e,t,n,r){return Vn(e,t).find(e=>e.path===n)?.literals?.find(e=>e.path===r)?.values??[]}function ma(e,t,n){return qn(e,t,n)}s();var ha={level:`customize.keyed.field.level`,"remaining.value":`customize.keyed.field.remaining`,status:`customize.keyed.field.status`};function ga(t){let{t:n}=W(),r=t.mode===`change`?n(`customize.keyed.changeTitle`):n(`customize.keyed.addTitle`);return i(st,{open:t.open,onOpenChange:e=>e?void 0:t.onClose(),children:e(dt,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":r,children:[i(rt,{children:i(_t,{children:r})}),t.open&&i(_a,{...t,heading:r})]})})}function _a(t){let{t:r,i18n:a}=W(),s=Hn(t.cap,t.targetId),l=Vn(t.cap,t.targetId),[u,d]=o(t.seed?.label??``),[f,p]=o(t.seed?.key??``),[m,h]=o(t.mode===`change`),[g,_]=o(t.seed?.fieldPath??l[0]?.path??``),[v,y]=o(()=>Object.fromEntries(s.map(e=>[e.path,t.seed?.literals.find(t=>t.path===e.path)?.value??e.defaultValue]))),[b,x]=o(t.seed?.literals.find(e=>e.path===`remaining.kind`)?.value??pa(t.cap,t.targetId,`remaining.value`,`remaining.kind`)[0]??``),S=$e({projection:`slim`}),C=n(()=>S.status===`success`?Yt(S.data):[],[S.status,S.data]),w=Ta(t.seed,C),[T,E]=o(null),[D,O]=o(!1);!D&&w!==null&&(E(w),O(!0));let k=bt({deviceId:T?.id??0}),A=Xe({deviceId:T?.id??0}),j=Un(k.status===`success`?k.data:{caps:[]},A.status===`success`?A.data:null),[ee,M]=o(t.seed===null?null:`${t.seed.source.cap}.${t.seed.source.fieldPath}`),[N,P]=o(t.seed?.transform??{kind:`identity`}),[F,te]=o(()=>t.seed?.transform.kind===`enum-map`?t.seed.transform.mapping:{}),I=j.find(e=>`${e.cap}.${e.path}`===ee)??null,ne=I===null?null:Kn(t.cap,t.targetId,g,I),re=m?f:sa(u),ie=ya(t.cap,t.targetId,g,v,b),ae=ba(T,I,ne,F,N),L=ae===null?null:da({cap:t.cap,targetId:t.targetId,device:t.target,apply:t.apply,key:re,label:u,fieldPath:g,source:ae,transform:ae.transform,literals:ie}),oe=xa(L,re,g,I,A.status===`success`?A.data:null),se=e=>{if(e===null){M(null);return}let n=j.find(t=>t.cap===e.cap&&t.path===e.path);n!==void 0&&le(n,Kn(t.cap,t.targetId,g,n))},ce=e=>{d(e),m||p(sa(e))};return e(c,{children:[e(pt,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.name`),i(H,{value:u,onChange:e=>ce(e.target.value)})]}),e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.key`),i(H,{value:re,disabled:t.mode===`change`,onChange:e=>{h(!0),p(e.target.value)}})]}),e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.assignField`),i(V,{value:g,options:l.map(e=>({value:e.path,label:r(ha[e.path]??e.path)})),onChange:e=>{_(e.target.value),E(null),M(null),P({kind:`identity`})}})]}),s.map(t=>e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.trait.${t.path}`),i(V,{value:v[t.path]??t.defaultValue,options:t.values.map(e=>({value:e,label:r(`customize.keyed.value.${e}`)})),onChange:e=>y(n=>({...n,[t.path]:e.target.value}))})]},t.path)),fa(t.cap,t.targetId,g).map(n=>e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.unit`),i(V,{value:b,options:pa(t.cap,t.targetId,g,n).map(e=>({value:e,label:r(`customize.keyed.value.${e}`)})),onChange:e=>x(e.target.value)})]},n)),i(wi,{kind:`keyed`,enabled:t.open,hostId:t.host.id,fieldPath:g,destination:{cap:t.cap,targetId:t.targetId,fieldPath:g,title:r(ha[g]??g)},device:T,field:wa(ee),transform:N,onDeviceChange:e=>{E(e),M(null),P({kind:`identity`})},onFieldChange:se,onTransformChange:P}),ne?.ok===!0&&ne.mode===`enum`&&I!==null&&i(va,{values:I.enumValues,outputs:ma(t.cap,t.targetId,g),mapping:F,onChange:te}),oe!==null&&i(ca,{preview:oe})]}),e(ct,{className:`flex flex-wrap gap-2`,children:[i(B,{variant:`ghost`,onClick:t.onClose,children:r(`customize.scalar.cancel`)}),i(B,{"data-testid":`keyed-save-item`,disabled:!t.canSave||L===null||re===``,onClick:()=>{L!==null&&t.onSave(L,re)},children:r(`customize.keyed.save`)})]})]});function le(e,n){if(n.ok){if(M(`${e.cap}.${e.path}`),n.mode===`enum`){let n=ua(e.enumValues,ma(t.cap,t.targetId,g));te(n),P({kind:`enum-map`,mapping:{...n}});return}P(la(n))}}}function va(t){let{t:n}=W();return i(`div`,{className:`flex flex-col gap-1`,children:t.values.map(r=>e(`label`,{className:`flex flex-wrap items-center gap-2 text-xs text-foreground`,children:[r,i(V,{value:t.mapping[r]??``,options:[{value:``,label:n(`customize.keyed.unmapped`)},...t.outputs.map(e=>({value:e,label:n(`customize.keyed.value.${e}`)}))],onChange:e=>t.onChange({...t.mapping,[r]:e.target.value===``?null:e.target.value})})]},r))})}function ya(e,t,n,r,i){let a=Object.entries(r).map(([e,t])=>({path:e,value:t})),o=fa(e,t,n).flatMap(e=>i===``?[]:[{path:e,value:i}]);return[...a,...o]}function ba(e,t,n,r,i){return e===null||t===null||n===null||!n.ok?null:n.mode===`enum`?Object.keys(r).length===0?null:{addonId:e.addonId,stableId:e.stableId,cap:t.cap,fieldPath:t.path,valueKind:`enum`,transform:{kind:`enum-map`,mapping:{...r}}}:{addonId:e.addonId,stableId:e.stableId,cap:t.cap,fieldPath:t.path,valueKind:`number`,transform:i}}function xa(e,t,n,r,i){if(e===null||r===null)return null;let a=e.items?.[t]?.fields[n];if(a===void 0)return{kind:`failed`,reason:`compile`};if(i===null)return{kind:`pending`};let o=Y(i[r.cap],r.path);if(a.kind===`from`)return Sa(o);if(a.kind!==`expression`)return{kind:`failed`,reason:`compile`};let s=Ca(o);if(s===void 0)return{kind:`failed`,reason:`no-value`};let c=ce(a.expr,{x:s},Date.now());return c.ok?Sa(c.value):{kind:`failed`,reason:c.error}}function Sa(e){return typeof e==`number`&&Number.isFinite(e)?{kind:`value`,text:String(e)}:typeof e==`string`&&e.length>0?{kind:`value`,text:e}:{kind:`failed`,reason:`empty`}}function Ca(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function wa(e){if(e===null)return null;let t=e.indexOf(`.`);return t<=0?null:{cap:e.slice(0,t),path:e.slice(t+1)}}function Ta(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}var Ea=`consumables`,Da=`items`,Oa=_.shape.items;function ka(e){let t=e.split(`.`).pop()??e,n=t.replace(/Level$/,``);return n===``?t:n}function Aa(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function ja(e,t){return e.caps.filter(e=>t.has(e.cap)&&e.cap!==`consumables`).flatMap(e=>e.fields.filter(e=>e.item!==!0&&Ke(e)).map(t=>({kind:`field`,key:ka(t.path),cap:e.cap,path:t.path})))}function Ma(e){switch(e.kind){case`pending`:return{kind:`pending`};case`unknown`:return{kind:`unknown`,reason:e.reason};case`absent`:return{kind:`known`,value:[]};case`value`:{if(e.value===null)return{kind:`known`,value:[]};let t=Oa.safeParse(e.value);return t.success?{kind:`known`,value:t.data.map(e=>({kind:`item`,key:e.key,item:e}))}:{kind:`unknown`,reason:t.error.message}}}}function Na(e,t,n){if(e.kind!==`known`)return e;if(t.kind!==`known`)return t;let r=ja(t.value,e.value);if(!e.value.has(`consumables`)||n===null)return{kind:`known`,value:r};let i=Ma(n);return i.kind===`known`?{kind:`known`,value:[...r,...i.value]}:i}function Pa(e){return e.defaults.map(t=>t.kind===`field`?i(Fa,{deviceId:e.deviceId,entry:t},`field:${t.cap}.${t.path}`):i(La,{entry:t},`item:${t.key}`))}function Fa(e){let{t}=W(),n=sn({deviceId:e.deviceId,cap:e.entry.cap,path:e.entry.path});return i(oa,{name:t(`customize.consumables.fields.${e.entry.key}`,{defaultValue:Aa(e.entry.key)}),detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:i(Ia,{value:n}),removeLabel:``})}function Ia(e){switch(e.value.kind){case`pending`:return i(un,{display:{text:`…`,tone:`muted`}});case`unknown`:return i(un,{display:{text:`?`,title:e.value.reason,tone:`warning`}});case`absent`:return i(ze,{level:null,size:`sm`});case`value`:return i(ze,{level:Je(e.value.value),size:`sm`})}}function La(e){let{t}=W(),{item:n}=e.entry,r=n.level===null?n.status===`replace`?t(`uiLibrary.consumablesPanel.replace`):void 0:`${Math.round(n.level)} %`;return i(oa,{name:n.label,detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:i(ze,{level:lt(n),label:r,size:`sm`}),removeLabel:``})}s();var Ra={consumables:g};function za(){return Object.entries(D).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`keyedArray`).map(t=>({cap:e,target:t})))}function Ba(t){let{t:n,i18n:r}=W(),a=qt(),[s,l]=o(null),[u,d]=o(null),f=G(t.handle.state),p=J(f,t.cap),m=Ua(t.handle,p),h=m.kind===`known`&&m.value!==null?E(m.value,t.cap,t.target.id):null,g=jt(h!==null),_=Wa(h,g),v=ue({cap:t.cap,targetId:t.target.id,device:t.handle.target,stored:m,sourcePresence:_,sourceUnknownReason:g.kind===`unknown`?g.reason:null});if(!Ha(t,p))return null;let y=t.handle.state.kind===`none`||t.handle.state.kind===`present`,b=t.availability.kind===`present`&&y,x=n(`customize.keyed.title.${t.cap}`),S=qa(n,v.text,v.assignedCount),C=async e=>{let n=await t.handle.save(e);d(n.kind===`refused`?n.reason:null)},w=async e=>{if(f===null||p===null)return;let r=Ce(p,e.key),i=r===null?Ut(f,t.cap):q(f,t.handle.target,r);await a(n(`customize.consumables.removeWhat`,{name:e.label}),i===null)&&await C(i)},T=s!==null&&s!==`add`?Ka(h,s):null;return e(c,{children:[i(Dt,{id:t.cap,icon:Ra[t.cap],title:x,testId:`keyed-card-${t.cap}`,actions:i(ht,{children:S}),children:e(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[t.defaults.kind===`known`&&i(Pa,{deviceId:t.device.id,defaults:t.defaults.value}),t.defaults.kind===`unknown`&&i(z,{title:n(`customize.consumables.builtIn`),message:n(`customize.consumables.builtInUnreadable`,{reason:t.defaults.reason})}),h?.items.map(e=>i(Va,{deviceId:t.device.id,cap:t.cap,item:e,language:r.language,sourceName:Ga(e,g),saving:t.handle.saving,onChange:()=>l(e.key),onRemove:()=>void w(e),handle:t.handle},e.key)),u!==null&&i(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:u}),b&&i(B,{variant:`outline`,size:`sm`,"data-testid":`keyed-add-${t.cap}`,disabled:t.handle.saving,onClick:()=>l(`add`),children:n(`customize.keyed.add`)})]})}),i(ga,{open:s!==null,mode:s===`add`?`add`:`change`,cap:t.cap,targetId:t.target.id,host:t.device,target:t.handle.target,apply:`add`,seed:T,canSave:y&&!t.handle.saving,onClose:()=>l(null),onSave:(e,r)=>{if(s===`add`&&p?.items!==void 0&&p.items[r]!==void 0){d(n(`customize.keyed.duplicateKey`,{key:r}));return}let i=te(p,e,r);l(null),i!==null&&(d(null),C(q(f,t.handle.target,i)))}})]})}function Va(t){let{t:n}=W(),r=t.item.compile,a=t.item.recognized&&r!==null,o=r===null?``:K(r.draft.source.cap,r.draft.source.fieldPath,t.language),s=a?[t.sourceName??``,o].filter(e=>e.length>0).join(` · `):n(`customize.consumables.otherFormula`),c=r===null?null:he(je,t.item.key,r.draft.fieldPath);return e(`div`,{className:`flex flex-col gap-1`,"data-testid":`keyed-row-${t.item.key}`,children:[i(oa,{name:t.item.label,detail:s,meta:a?n(`customize.keyed.assigned`):null,value:c===null?null:{deviceId:t.deviceId,cap:t.cap,path:c},readout:c===null?null:i(ln,{target:{deviceId:t.deviceId,cap:t.cap,path:c}}),removeLabel:``}),e(`div`,{className:`flex flex-wrap gap-2`,children:[a&&i(B,{variant:`outline`,size:`sm`,disabled:t.saving,onClick:t.onChange,children:n(`customize.keyed.change`)}),a&&i(B,{variant:`ghost`,size:`sm`,disabled:t.saving,onClick:t.onRemove,children:n(`customize.keyed.remove`)}),!a&&i(aa,{handle:t.handle,cap:t.cap,itemKey:t.item.key,fieldPath:`status`})]})]})}function Ha(e,t){return e.target.deviceTypes.includes(e.device.type)?e.availability.kind!==`absent`||e.defaults.kind!==`known`||e.defaults.value.length>0?!0:t!==null:!1}function Ua(e,t){return e.state.kind===`pending`?{kind:`pending`}:e.state.kind===`unknown`||e.state.kind===`not-loaded`?{kind:`unknown`,reason:e.state.reason}:{kind:`known`,value:t}}function Wa(e,t){let n=(e?.items??[]).filter(e=>e.recognized&&e.compile!==null);return n.length===0?`present`:t.kind===`pending`?`pending`:t.kind===`unknown`?`unknown`:n.every(e=>{let n=e.compile?.draft.source;if(n===void 0)return!1;let r=x(n);return t.value.some(e=>x({addonId:e.addonId,stableId:e.stableId})===r)})?`present`:`absent`}function Ga(e,t){let n=e.compile?.draft.source;if(n===void 0||t.kind!==`known`)return null;let r=x(n);return t.value.find(e=>x({addonId:e.addonId,stableId:e.stableId})===r)?.name??null}function Ka(e,t){let n=e?.items.find(e=>e.key===t),r=n?.compile;return n===void 0||r==null?null:{key:n.key,label:n.label,fieldPath:r.draft.fieldPath,literals:r.literals,source:{addonId:r.draft.source.addonId,stableId:r.draft.source.stableId,cap:r.draft.source.cap,fieldPath:r.draft.source.fieldPath,valueKind:r.sourceValueKind},transform:r.draft.transform}}function qa(e,t,n){return t===`Native`?e(`customize.keyed.badge.native`):t===`pending`?e(`customize.keyed.badge.pending`):t===`unknown`?e(`customize.keyed.badge.unknown`):t.endsWith(`assigned`)?e(`customize.keyed.badge.assigned`,{count:n}):t}function Ja(e){return i(c,{children:za().map(t=>t.target.deviceTypes.includes(e.device.type)?i(Ba,{device:e.device,handle:e.handle,availability:ra($i(t.cap,t.target),e.facts),cap:t.cap,target:t.target,defaults:e.defaults},t.cap):null)})}function Ya(e){let t=$n(e);if(t===null)return{kind:`failed`,reason:lr};if(e.transform.kind===`threshold`)return Xa(e.transform,e);let n=_r(e.cap,e.targetId),r=n===null?void 0:t.fields[n];if(r===void 0)return{kind:`failed`,reason:lr};if(r.kind===`from`)return Qa(e.sourceValue);if(r.kind!==`expression`)return{kind:`failed`,reason:lr};if(r.expr.startsWith(`dwell(`))return{kind:`failed`,reason:ur};let i=Za(e.sourceValue);if(i===void 0)return{kind:`failed`,reason:dr};let a=ce(r.expr,{x:i},e.nowMs);return a.ok?Qa(a.value):{kind:`failed`,reason:a.error}}function Xa(e,t){if(typeof t.sourceValue!=`number`||!Number.isFinite(t.sourceValue))return{kind:`failed`,reason:dr};let n=e.comparison===`gte`?t.sourceValue>=e.threshold:t.sourceValue<=e.threshold,r=t.source.sourceUnit;return{kind:`dwell`,sourceText:r===null?String(t.sourceValue):`${t.sourceValue} ${r}`,active:n,countdownMs:n?e.startDwellMs:e.stopDwellMs}}function Za(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function Qa(e){return e==null||typeof e==`number`&&!Number.isFinite(e)?{kind:`failed`,reason:fr}:typeof e==`number`||typeof e==`string`||typeof e==`boolean`?{kind:`value`,text:String(e)}:{kind:`failed`,reason:fr}}s();function $a(t){let{t:n}=W(),r=t.mode===`change`?n(`customize.scalar.changeTitle`,{title:t.title}):n(`customize.scalar.addTitle`,{title:t.title});return i(st,{open:t.open,onOpenChange:e=>e?void 0:t.onClose(),children:e(dt,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":r,children:[i(rt,{children:i(_t,{children:r})}),t.open&&i(eo,{...t,heading:r})]})})}function eo(t){let{t:r}=W(),a=$e({projection:`slim`}),s=n(()=>a.status===`success`?Yt(a.data):[],[a.status,a.data]),l=ro(t.seed,s),[u,d]=o(null),[f,p]=o(!1);!f&&l!==null&&(d(l),p(!0));let m=bt({deviceId:u?.id??0}),h=Xe({deviceId:u?.id??0}),g=m.status===`success`?m.data:{caps:[]},_=vr(g,h.status===`success`?h.data:null),[v,y]=o(io(t.seed)),[b,x]=o(t.seed?.transform??{kind:`identity`}),S=v===null?null:(()=>{let[e,t]=v.split(`.`);return e===void 0||t===void 0?null:{cap:e,path:t}})(),C=_.find(e=>to(e)===v)??null,w=C===null?null:xr(t.cap,t.targetId,C),T=C===null||w===null||!w.ok?null:no(u,C,w,g),E=T===null?null:$n({cap:t.cap,targetId:t.targetId,device:t.target,apply:t.apply,source:T,transform:b}),D=C===null||h.status!==`success`||u===null?void 0:Y(h.data[C.cap],C.path),O=T===null?null:h.status===`pending`?{kind:`pending`}:Ya({cap:t.cap,targetId:t.targetId,device:t.target,apply:t.apply,source:T,transform:b,sourceValue:D,nowMs:Date.now()});return e(c,{children:[e(pt,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[i(wi,{kind:`scalar`,enabled:t.open,hostId:t.host.id,destination:{cap:t.cap,targetId:t.targetId,title:t.title},device:u,field:S,transform:b,onDeviceChange:e=>{d(e),y(null),x({kind:`identity`})},onFieldChange:e=>{if(e===null){y(null);return}y(`${e.cap}.${e.path}`)},onTransformChange:x}),O!==null&&i(ca,{preview:O})]}),e(ct,{className:`flex flex-wrap gap-2`,children:[i(B,{variant:`ghost`,onClick:t.onClose,children:r(`customize.scalar.cancel`)}),i(B,{"data-testid":`scalar-save-override`,disabled:!t.canSave||E===null,onClick:()=>{E!==null&&t.onSave(E)},children:r(`customize.scalar.save`)})]})]})}function to(e){return`${e.cap}.${e.path}`}function no(e,t,n,r){if(e===null||t.kind!==`boolean`&&t.kind!==`number`&&t.kind!==`string`)return null;let i=r.caps.find(e=>e.cap===t.cap),a=t.kind===`boolean`&&i?.fields.some(e=>e.path===`lastChangedAt`)?`lastChangedAt`:null;return{addonId:e.addonId,stableId:e.stableId,cap:t.cap,fieldPath:t.path,valueKind:t.kind,sourceUnit:n.sourceUnit,changedAtField:a}}function ro(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}function io(e){return e===null?null:`${e.source.cap}.${e.source.fieldPath}`}var ao=`Assigned · `;function oo(e,t){if(e===`Native`)return{kind:`native`};if(e===`Native · source missing`)return{kind:`released`};if(e===`pending`)return{kind:`pending`};if(e===`unknown`)return{kind:`unknown`};if(e.startsWith(ao)){let n=e.slice(11);return{kind:`assigned`,source:t??n}}return{kind:`unknown`}}s();var so={id:0,name:``,type:`unknown`,stableId:``,parentDeviceId:null},co={battery:l,"running-state":p};function lo(){return Object.entries(D).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`scalar`).map(t=>({cap:e,target:t})))}function uo({device:t,handle:n,availability:r,cap:a,target:s}){let{t:l,i18n:u}=W(),d=qt(),[f,p]=o(!1),[m,h]=o(null),g=l(`customize.scalar.caps.${a}`),_=s.path??s.id,v=G(n.state),b=po(n,J(v,a)),S=b.kind===`known`&&b.value!==null?y({feature:b.value,device:n.target,cap:a,targetId:s.id}):null,C=S!==null,w=jt(C),T=S===null||w.kind!==`known`?null:w.value.find(e=>x({addonId:e.addonId,stableId:e.stableId})===x(S.draft.source))??null,E=We(T===null?so:Rr(T),`compact`),D=T===null?null:E,O=We(t,`full`),k=mo(C,w.kind,T!==null),A=pe({cap:a,targetId:s.id,device:n.target,stored:b,sourcePresence:k,sourceUnknownReason:w.kind===`unknown`?w.reason:null}),j=oo(A.text,D),ee=n.state.kind===`none`||n.state.kind===`present`,M=r.kind===`present`?r.mode:null;if(r.kind===`absent`||!s.deviceTypes.includes(t.type))return null;let N=async e=>{let t=await n.save(e);h(t.kind===`refused`?t.reason:null)},P=async()=>{if(v===null)return;let e=Ut(v,a);await d(l(`customize.scalar.removeWhat`,{name:D??(S===null?O:x(S.draft.source))}),e===null)&&await N(e)},F=S===null?null:{source:{addonId:S.draft.source.addonId,stableId:S.draft.source.stableId,cap:S.draft.source.cap,fieldPath:S.draft.source.fieldPath,valueKind:S.sourceValueKind,sourceUnit:S.sourceUnit,changedAtField:S.changedAtField},transform:S.draft.transform},te=j.kind===`assigned`?l(`customize.scalar.badge.assigned`,{source:j.source}):l(`customize.scalar.badge.${j.kind}`);return e(c,{children:[i(Dt,{id:a,icon:co[a],title:g,testId:`scalar-card-${a}`,actions:i(ht,{children:te}),children:i(fo,{availability:r,answered:ee,deviceId:t.id,cap:a,path:_,recognized:C,stored:b,presence:k,released:A.status.state===`released`,sourceName:D,sourceCap:S?.draft.source.cap??``,sourceField:S===null?``:K(S.draft.source.cap,S.draft.source.fieldPath,u.language),sourcePath:S?.draft.source.fieldPath??``,sourceDeviceId:T?.id??null,error:m,saving:n.saving,mode:M,onOpen:()=>p(!0),onRemove:()=>void P(),handle:n})}),M!==null&&i($a,{open:f,mode:F===null?`add`:`change`,title:g,cap:a,targetId:s.id,host:t,target:n.target,apply:M,seed:F,canSave:ee&&!n.saving,onClose:()=>p(!1),onSave:e=>{p(!1),N(q(v,n.target,e))}})]})}function fo(t){let{t:n}=W();if(t.availability.kind===`pending`||t.availability.kind===`present`&&!t.answered)return i(`p`,{role:`status`,className:`px-3 py-2 text-xs text-foreground-subtle sm:px-4`,children:n(`customize.scalar.checking`)});if(t.availability.kind===`unknown`)return i(`div`,{className:`px-3 py-2 sm:px-4`,children:i(z,{title:n(`customize.scalar.unreadable`),message:t.availability.reason})});let r=t.stored.kind===`known`&&t.stored.value===null,a=!t.recognized&&t.stored.kind===`known`&&t.stored.value!==null;return e(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[e(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:n(`customize.scalar.effective`)}),i(ln,{target:{deviceId:t.deviceId,cap:t.cap,path:t.path}})]}),t.released&&i(`p`,{className:`text-xs text-foreground`,children:n(`customize.scalar.released`)}),t.presence===`unknown`&&t.recognized&&i(z,{title:n(`customize.scalar.sourceUnreadable`),message:n(`customize.scalar.sourceHeld`,{name:t.sourceName??t.sourceCap})}),t.recognized&&!t.released&&e(`div`,{className:`flex flex-wrap items-baseline justify-between gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:n(`customize.scalar.override`,{name:t.sourceName??`…`,field:t.sourceField})}),t.sourceDeviceId!==null&&i(ln,{target:{deviceId:t.sourceDeviceId,cap:t.sourceCap,path:t.sourcePath}})]}),a&&e(`p`,{className:`text-xs text-foreground flex flex-wrap items-center gap-1`,children:[n(`customize.scalar.otherFormula`),i(aa,{handle:t.handle,cap:t.cap,fieldPath:t.path})]}),r&&i(`p`,{className:`text-xs text-foreground-subtle`,children:n(`customize.scalar.noOverride`)}),t.error!==null&&i(`p`,{role:`alert`,className:`text-xs text-danger break-words`,children:t.error}),e(`div`,{className:`flex flex-wrap gap-2`,children:[t.recognized&&i(B,{variant:`outline`,size:`sm`,"data-testid":`scalar-change-${t.cap}`,onClick:t.onOpen,disabled:t.saving,children:t.released?n(`customize.scalar.chooseAnother`):n(`customize.scalar.change`)}),t.recognized&&i(B,{variant:`ghost`,size:`sm`,onClick:t.onRemove,disabled:t.saving,children:n(`customize.scalar.remove`)}),r&&i(B,{variant:`outline`,size:`sm`,"data-testid":`scalar-add-${t.cap}`,disabled:t.saving||t.mode===null,onClick:t.onOpen,children:n(`customize.scalar.add`)})]})]})}function po(e,t){return e.state.kind===`pending`?{kind:`pending`}:e.state.kind===`unknown`||e.state.kind===`not-loaded`?{kind:`unknown`,reason:e.state.reason}:{kind:`known`,value:t}}function mo(e,t,n){return e?t===`pending`?`pending`:t===`unknown`?`unknown`:n?`present`:`absent`:`present`}function ho({device:e,handle:t,facts:n}){return i(c,{children:lo().map(r=>r.target.deviceTypes.includes(e.type)?i(uo,{device:e,handle:t,availability:ra($i(r.cap,r.target),n),cap:r.cap,target:r.target},r.cap):null)})}var go=[`temperature`,`humidity`,`pressure`,`illuminance`,`power`,`energy`,`battery`,`numeric`],_o=[`motion`,`contact`,`leak`,`smoke`,`occupancy`,`binary`],vo=[`switch`,`light`],yo=[P],bo=`was refused — `,xo=/^(.+?) \[([a-z0-9-]+)\]: (.+)$/;function So(){return[{id:`readings`,templateIds:go},{id:`binary`,templateIds:_o},{id:`actuators`,templateIds:vo},{id:`appliances`,templateIds:yo}]}var Co={appliance:null,thresholdWatts:0,startDwellMs:0,stopDwellMs:0};function wo(e){if(e===`appliance`){let t=be.washer;return{kind:`group`,templateId:e,aggregate:`any`,active:null,appliance:`washer`,thresholdWatts:t.thresholdWatts,startDwellMs:t.startDwellMs,stopDwellMs:t.stopDwellMs,name:``,room:``,members:[]}}let t=R(e);return t===null?null:{kind:`group`,templateId:e,aggregate:t.defaultAggregate,active:t.family===`actuator`?`at-least-one`:null,...Co,name:``,room:``,members:[]}}function To(e){return e.kind===`group`?wo(e.templateId):e.kind===`appliance`?wo(P):e.kind===`statistic`?{kind:`statistic`,stat:`mean`,window:{kind:`rolling`,span:`24h`},name:``,room:``,source:null}:{kind:`integral`,reset:`daily`,name:``,room:``,source:null}}function Eo(e,t,n){if(e.kind===`appliance`)return{kind:`group`,templateId:P,aggregate:`any`,active:null,appliance:e.appliance,thresholdWatts:e.thresholdWatts,startDwellMs:e.startDwellMs,stopDwellMs:e.stopDwellMs,name:t,room:n,members:[Q(e.member)]};if(e.kind===`statistic`)return{kind:`statistic`,stat:e.stat,window:e.window,name:t,room:n,source:Q(e.source)};if(e.kind===`integral`)return{kind:`integral`,reset:e.reset,name:t,room:n,source:Q(e.source)};let r=R(e.templateId);return r===null||!r.aggregates.includes(e.aggregate)||r.family===`actuator`&&e.active===void 0||r.family!==`actuator`&&e.active!==void 0?null:{kind:`group`,templateId:e.templateId,aggregate:e.aggregate,active:e.active??null,...Co,name:t,room:n,members:e.members.map(Q)}}function Do(e){return e.helper!==void 0}function Oo(e,t){if(e.templateId===`appliance`)return e;let n=R(e.templateId);return n===null||!n.aggregates.includes(t)?e:{...e,aggregate:t}}function ko(e,t){if(e.templateId===`appliance`)return e;let n=R(e.templateId);return n===null||n.family!==`actuator`?e:{...e,active:t,aggregate:Ae(t)}}function Ao(e,t){return{...e,name:t}}function jo(e,t){return t===e.templateId?e:wo(t)??e}function Mo(e,t){if(e.templateId!==`appliance`)return e;let n=be[t];return{...e,appliance:t,thresholdWatts:n.thresholdWatts,startDwellMs:n.startDwellMs,stopDwellMs:n.stopDwellMs}}function No(e){if(e.kind===`statistic`||e.kind===`integral`)return k(e.kind);if(e.templateId===`appliance`)return I();let t=R(e.templateId);return t===null?null:ee(t)}function Po(e){return e.kind===`statistic`?$o(e):e.kind===`integral`?es(e):e.templateId===`appliance`?Fo(e):Io(e)}function Fo(e){let t=e.members[0];return t===void 0||e.appliance===null?null:{kind:`appliance`,templateId:P,appliance:e.appliance,thresholdWatts:e.thresholdWatts,startDwellMs:e.startDwellMs,stopDwellMs:e.stopDwellMs,member:Q(t)}}function Io(e){if(e.templateId===`appliance`)return null;let t=R(e.templateId)?.family===`actuator`&&e.active!==null;return{kind:`group`,templateId:e.templateId,aggregate:t&&e.active!==null?Ae(e.active):e.aggregate,...t&&e.active!==null?{active:e.active}:{},members:e.members.map(Q)}}var Lo={code:`member-constraint`,path:`helper.member`,message:`an appliance helper needs one power reading`},Ro={code:`member-constraint`,path:`helper.source`,message:`pick one reading that declares history`};function zo(e){let t=Po(e);return t===null?{ok:!1,problems:[e.kind===`group`&&e.templateId===`appliance`?Lo:Ro]}:ke(t)}async function Bo(e,t){let n=zo(e);if(!n.ok)return Ho(n.problems);try{return await t(n.composition,e.name.trim()),[]}catch(e){return Uo(e instanceof Error?e.message:String(e))}}function Vo(e){return e.kind===`statistic`||e.kind===`integral`?e.source!==null:e.templateId===`appliance`?e.members.length===1:e.members.length>=1&&e.members.length<=64}function Ho(e){return e.map(e=>({path:e.path,code:e.code,message:e.message}))}function Uo(e){let t=e.indexOf(bo),n=(t===-1?e:e.slice(t+14)).split(/; (?=[^;]*\[[a-z0-9-]+\]:)/).flatMap(rs);return n.length>0?n:[{path:``,code:`refused`,message:e}]}function Wo(e,t){if(e.kind===`pending`)return{kind:`pending`};if(e.kind===`error`)return{kind:`unavailable`,message:e.message};let n=e.caps[t.outputCap];if(n===void 0)return{kind:`empty`};let r=n[t.outputField];return typeof r==`number`&&Number.isFinite(r)?{kind:`number`,value:r,unit:t.baseUnit}:typeof r==`boolean`?{kind:`boolean`,value:r}:{kind:`empty`}}function Go(e){if(e.kind===`pending`)return{kind:`pending`};if(e.kind===`error`)return{kind:`unavailable`,message:e.message};let t=e.caps[`group-status`];if(t===void 0)return{kind:`absent`};let n=ns(t.included),r=ns(t.excluded),i=ns(t.total);return n===null||r===null||i===null?{kind:`absent`}:{kind:`ready`,included:n,excluded:r,total:i}}function Ko(e){if(e.length===0||e.some(e=>e.kind===`pending`))return{kind:`pending`};if(e.some(e=>e.kind===`error`))return{kind:`unavailable`};let t=e.flatMap(e=>e.kind===`ready`?[e]:[]),n=ve(t.map(e=>e.caps)),r=n.includes(`color`)?ge(t.map(e=>e.features)):[];return{kind:`ready`,caps:[...n],modes:[...r]}}function qo(e){if(e.kind===`pending`)return{kind:`pending`};if(e.kind===`error`)return{kind:`unavailable`,message:e.message};let t=e.caps[`group-commands`];if(t===void 0)return{kind:`none`};let n=fe.safeParse(t);return n.success?n.data.results.length===0?{kind:`none`}:{kind:`rows`,rows:n.data.results.map(e=>({deviceId:e.deviceId,cap:e.cap,method:e.method,ok:e.ok,error:e.error??null,at:e.at}))}:{kind:`unavailable`,message:`group-commands`}}function Jo(e,t,n,r){if(e===`pending`)return`pending`;if(e===`error`)return`error`;let i=t?.[n];if(i===void 0)return`missing`;let a=i[r];return typeof a==`number`&&Number.isFinite(a)||typeof a==`boolean`?`value`:a===void 0?`missing`:`empty`}function Yo(e){return e.fleet===`answered`?e.deviceOnline===null||e.deviceOnline===!1?`excluded`:e.field===`pending`||e.field===`error`?`unknown`:e.field===`value`?`reporting`:`excluded`:`unknown`}function Xo(e){return e.some(e=>e.presence===`unknown`)?{kind:`pending`}:{kind:`named`,names:e.flatMap(e=>e.presence===`excluded`?[e.name]:[])}}function Zo(e){if(!Qo(e))return{};let t={};for(let[n,r]of Object.entries(e))Qo(r)&&(t[n]=r);return t}function Qo(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function $o(e){return e.source===null?null:{kind:`statistic`,stat:e.stat,window:ts(e.window),source:Q(e.source)}}function es(e){if(e.source===null)return null;let t=e.source.cap===`power-meter`&&e.source.fieldPath===`watts`;return{kind:`integral`,reset:e.reset,output:t?`energy`:`meter`,source:Q(e.source)}}function ts(e){return e.kind===`calendar`?{kind:`calendar`,period:e.period}:e.customMinutes===void 0?{kind:`rolling`,span:e.span}:{kind:`rolling`,span:e.span,customMinutes:e.customMinutes}}function Q(e){return{source:{addonId:e.source.addonId,stableId:e.source.stableId},cap:e.cap,fieldPath:e.fieldPath}}function ns(e){return typeof e!=`number`||!Number.isInteger(e)||e<0?null:e}function rs(e){let t=xo.exec(e.trim());if(t===null)return[];let n=t[1],r=t[2],i=t[3];return n===void 0||r===void 0||i===void 0?[]:[{path:n,code:r,message:i}]}function is({onPick:e}){let{t}=W();return i(`div`,{"data-testid":`helper-template-picker`,children:i(xt,{emptyMessage:t(`helper.noTemplates`),onPick:t=>{if(t===`statistic`||t===`integral`){e({kind:t});return}if(t===`appliance`){e({kind:`appliance`});return}ss(t)&&e({kind:`group`,templateId:t})},groups:[...cs(t),{id:`history`,label:t(`helper.group.history`),tiles:[as(`statistic`,Le,t),as(`integral`,h,t)]}]})})}function as(e,t,n){let r=n(`helper.template.${e}`);return{key:e,label:r,testId:`helper-template-${e}`,icon:i(t,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:n(`helper.detailsOf`,{name:r}),detail:i(os,{id:e})}}function os({id:t}){let{t:n}=W();return e(`div`,{className:`max-w-xs space-y-1 text-xs`,children:[i(`p`,{className:`text-foreground-muted`,children:n(`helper.detail.${t}`)}),i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.history`)})]})}function ss(e){return T.some(t=>t===e)}function cs(e){return So().map(t=>({id:t.id,label:e(`helper.group.${t.id}`),tiles:ls(t.templateIds,e)}))}function ls(e,t){let n=[];for(let r of e){let e=us(r,t);e!==null&&n.push(e)}return n}function us(e,t){if(e===`appliance`)return ds(t);if(!ss(e))return null;let n=R(e);if(n===null)return null;let r=t(`helper.template.${e}`),a=n.role===void 0?Be(n.deviceType).icon:vt(n.role).icon;return{key:e,label:r,testId:`helper-template-${e}`,icon:i(a,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:t(`helper.detailsOf`,{name:r}),detail:i(ps,{templateId:e})}}function ds(e){let t=e(`helper.template.appliance`),n=Be(de.Washer).icon;return{key:P,label:t,testId:`helper-template-appliance`,icon:i(n,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:e(`helper.detailsOf`,{name:t}),detail:i(fs,{})}}function fs(){let{t:e}=W();return i(`div`,{className:`max-w-xs text-xs`,children:i(`p`,{className:`text-foreground-muted`,children:e(`helper.template.applianceSummary`)})})}function ps({templateId:t}){let{t:n}=W(),r=R(t);if(r===null)return null;let a=r.family===`actuator`?L.map(e=>n(`helper.active.${e}`)):r.aggregates.map(e=>n(`helper.aggregate.${e}`)),o=r.commandCaps.filter(e=>e!==`switch`);return e(`div`,{className:`max-w-xs space-y-1 text-xs`,children:[i(`p`,{className:`font-medium text-foreground`,children:n(`helper.supportedOperations`)}),i(`p`,{className:`text-foreground-muted`,children:a.join(`, `)}),o.length>0&&e(c,{children:[i(`p`,{className:`font-medium text-foreground`,children:n(`helper.sharedCaps`)}),i(`p`,{className:`text-foreground-muted`,children:o.map(e=>n(`helper.cap.${e}`)).join(`, `)})]}),i(`p`,{className:`text-foreground-subtle`,children:n(`helper.offlineCounted`)})]})}s();function ms({initial:t,start:n,purpose:r,saving:s,onSave:l,onDraftChange:u}){let{t:d}=W(),[f,p]=o(t===null?`template`:n),[m,h]=o(t),[g,_]=o([]),[v,y]=o(null);a(()=>{u?.(m)},[m,u]);let b=e=>{h(t=>e.kind===`group`&&t?.kind===`group`&&t.templateId!==`appliance`?jo(t,e.templateId):To(e)),_([]),y(null),p(`parameters`)},x=e=>{if(m===null)return;let t=m;(async()=>{let n=await l(t,e);if(n.kind===`refused`){_(n.lines);return}e===`again`&&(y({deviceId:n.deviceId,name:t.name.trim()}),h(null),p(`template`),_([]))})()},S=m===null?null:No(m),C=m!==null&&m.kind===`group`&&m.templateId!==`appliance`?R(m.templateId):null,w=m===null?[]:m.kind===`group`?m.members:m.source===null?[]:[m.source];return e(`div`,{className:`flex flex-col gap-3`,"data-testid":`helper-wizard`,children:[v!==null&&i(`p`,{role:`status`,className:`text-xs text-foreground`,"data-testid":`helper-created`,children:i(wt,{i18nKey:`helper.created`,values:{name:v.name===``?d(`helper.newHelper`):v.name},components:{device:i(Tt,{to:Ct(v.deviceId),className:`text-primary hover:underline`})}})}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:d(Ts(f,m))}),f===`template`&&i(is,{onPick:b}),f===`parameters`&&m?.kind===`group`&&m.templateId===`appliance`&&i(gs,{draft:m,onDraft:e=>h(e)}),f===`parameters`&&m?.kind===`group`&&C!==null&&e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[C.family===`actuator`&&m.active!==null?e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[d(`helper.criterion`),i(V,{"aria-label":d(`helper.criterion`),"data-testid":`helper-criterion`,value:m.active,onChange:e=>{let t=L.find(t=>t===e.target.value);t!==void 0&&h(ko(m,t))},options:L.map(e=>({value:e,label:d(`helper.active.${e}`)}))})]}):e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[d(`helper.reducer`),i(V,{"aria-label":d(`helper.reducer`),"data-testid":`helper-reducer`,value:m.aggregate,onChange:e=>{let t=C.aggregates.find(t=>t===e.target.value);t!==void 0&&h(Oo(m,t))},options:C.aggregates.map(e=>({value:e,label:d(`helper.aggregate.${e}`)}))})]}),e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[d(`helper.name`),i(H,{"aria-label":d(`helper.name`),"data-testid":`helper-name`,value:m.name,onChange:e=>h(Ao(m,e.target.value))})]})]}),f===`parameters`&&m?.kind===`statistic`&&i(xs,{draft:m,onChange:h}),f===`parameters`&&m?.kind===`integral`&&i(Cs,{draft:m,onChange:h}),f===`members`&&m!==null&&S!==null&&i(wi,{kind:`members`,request:S,enabled:!0,members:w,onMembersChange:e=>h(m.kind===`group`?{...m,members:e}:{...m,source:e[0]??null}),onRefuse:e=>_(e===null?[]:[{path:`helper.members`,code:`member-constraint`,message:d(`helper.maxMembers`,{max:e.max})}])}),i(Es,{lines:g}),e(`div`,{className:`flex flex-wrap gap-2`,children:[f!==`template`&&i(B,{variant:`ghost`,onClick:()=>p(f===`members`?`parameters`:`template`),children:d(`helper.back`)}),f===`parameters`&&m!==null&&i(B,{"data-testid":`helper-to-members`,disabled:m.name.trim()===``,onClick:()=>{_([]),p(`members`)},children:d(`helper.next`)}),f===`members`&&m!==null&&r===`edit`&&i(B,{"data-testid":`helper-save`,disabled:!Vo(m)||s,onClick:()=>x(`open`),children:d(`helper.save`)}),f===`members`&&m!==null&&r===`create`&&e(c,{children:[i(B,{"data-testid":`helper-save-open`,disabled:!Vo(m)||s,onClick:()=>x(`open`),children:d(`helper.saveOpen`)}),i(B,{variant:`outline`,"data-testid":`helper-save-more`,disabled:!Vo(m)||s,onClick:()=>x(`again`),children:d(`helper.saveMore`)})]})]})]})}var hs=6e4;function gs({draft:t,onDraft:n}){let{t:r}=W(),a=t.appliance??`washer`;return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[r(`helper.applianceType`),i(V,{"aria-label":r(`helper.applianceType`),"data-testid":`helper-appliance`,value:a,onChange:e=>{let r=N.find(t=>t===e.target.value);r!==void 0&&n(Mo(t,r))},options:N.map(e=>({value:e,label:r(`helper.appliance.${e}`)}))})]}),e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[r(`helper.name`),i(H,{"aria-label":r(`helper.name`),"data-testid":`helper-name`,value:t.name,onChange:e=>n({...t,name:e.target.value})})]}),i(bs,{label:r(`helper.threshold`),testId:`helper-threshold`,value:String(t.thresholdWatts),onValue:e=>{let r=ys(e);r!==null&&n({...t,thresholdWatts:r})}}),i(bs,{label:r(`helper.startDwell`),testId:`helper-start-dwell`,value:_s(t.startDwellMs),onValue:e=>{let r=vs(e);r!==null&&n({...t,startDwellMs:r})}}),i(bs,{label:r(`helper.stopDwell`),testId:`helper-stop-dwell`,value:_s(t.stopDwellMs),onValue:e=>{let r=vs(e);r!==null&&n({...t,stopDwellMs:r})}})]})}function _s(e){return String(e/hs)}function vs(e){let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.round(t*hs)}function ys(e){let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function bs({label:t,testId:n,value:r,onValue:a}){return e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[t,i(H,{type:`number`,min:0,step:`any`,"aria-label":t,"data-testid":n,value:r,onChange:e=>a(e.target.value)})]})}function xs({draft:t,onChange:n}){let{t:r}=W(),a=t.window.kind===`rolling`;return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-statistic-parameters`,children:[i($,{label:r(`helper.stat`),children:i(V,{"aria-label":r(`helper.stat`),"data-testid":`helper-stat`,value:t.stat,onChange:e=>{let r=v.find(t=>t===e.target.value);r!==void 0&&n({...t,stat:r})},options:v.map(e=>({value:e,label:r(`helper.statName.${e}`)}))})}),i($,{label:r(`helper.range`),children:i(V,{"aria-label":r(`helper.range`),"data-testid":`helper-range-kind`,value:t.window.kind,onChange:e=>{e.target.value===`calendar`&&n({...t,window:{kind:`calendar`,period:`today`}}),e.target.value===`rolling`&&n({...t,window:{kind:`rolling`,span:`24h`}})},options:[{value:`rolling`,label:r(`helper.rangeKind.rolling`)},{value:`calendar`,label:r(`helper.rangeKind.calendar`)}]})}),a?i($,{label:r(`helper.span`),children:i(V,{"aria-label":r(`helper.span`),"data-testid":`helper-span`,value:t.window.span,onChange:e=>{let r=Se.find(t=>t===e.target.value);r!==void 0&&n({...t,window:Ss(r,t)})},options:Se.map(e=>({value:e,label:r(`helper.spanName.${e}`)}))})}):i($,{label:r(`helper.period`),children:i(V,{"aria-label":r(`helper.period`),"data-testid":`helper-period`,value:t.window.period,onChange:e=>{let r=C.find(t=>t===e.target.value);r!==void 0&&n({...t,window:{kind:`calendar`,period:r}})},options:C.map(e=>({value:e,label:r(`helper.periodName.${e}`)}))})}),t.window.kind===`rolling`&&t.window.span===`custom`&&i($,{label:r(`helper.customMinutes`),children:i(H,{"aria-label":r(`helper.customMinutes`),"data-testid":`helper-custom-minutes`,inputMode:`numeric`,value:t.window.customMinutes===void 0?``:String(t.window.customMinutes),onChange:e=>{let r=Number.parseInt(e.target.value,10);n({...t,window:{kind:`rolling`,span:`custom`,...Number.isFinite(r)?{customMinutes:r}:{}}})}})}),i(ws,{name:t.name,onChange:e=>n({...t,name:e})})]})}function Ss(e,t){if(e!==`custom`)return{kind:`rolling`,span:e};let n=t.window.kind===`rolling`?t.window.customMinutes:void 0;return n===void 0?{kind:`rolling`,span:e}:{kind:`rolling`,span:e,customMinutes:n}}function Cs({draft:t,onChange:n}){let{t:r}=W();return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-integral-parameters`,children:[i($,{label:r(`helper.reset`),children:i(V,{"aria-label":r(`helper.reset`),"data-testid":`helper-reset`,value:t.reset,onChange:e=>{let r=F.find(t=>t===e.target.value);r!==void 0&&n({...t,reset:r})},options:F.map(e=>({value:e,label:r(`helper.resetName.${e}`)}))})}),i(ws,{name:t.name,onChange:e=>n({...t,name:e})})]})}function ws({name:e,onChange:t}){let{t:n}=W();return i($,{label:n(`helper.name`),children:i(H,{"aria-label":n(`helper.name`),"data-testid":`helper-name`,value:e,onChange:e=>t(e.target.value)})})}function Ts(e,t){if(t?.kind===`statistic`||t?.kind===`integral`){if(e===`parameters`)return`helper.step.historyParameters`;if(e===`members`)return`helper.step.historySource`}if(t?.kind===`group`&&t.templateId===`appliance`){if(e===`parameters`)return`helper.step.appliance`;if(e===`members`)return`helper.step.applianceMembers`}return`helper.step.${e}`}function $({label:t,children:n}){return e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[t,n]})}function Es({lines:t}){return t.length===0?null:i(`ul`,{role:`alert`,className:`flex flex-col gap-1`,"data-testid":`helper-refusals`,children:t.map(t=>e(`li`,{className:`text-xs text-danger`,children:[i(`span`,{className:`font-medium`,children:t.code}),t.message===``?``:` — ${t.message}`]},`${t.path}:${t.code}:${t.message}`))})}export{Rr as A,Bt as B,Qi as C,qi as D,Ji as E,qt as F,jt as G,K as H,J as I,Ot as K,Kt as L,sn as M,Y as N,wi as O,Yt as P,q as R,ra as S,Zi as T,G as U,Vt as V,Nt as W,za as _,Go as a,Na as b,Xo as c,Ko as d,Zo as f,Ja as g,lo as h,Jo as i,zr as j,Xr as k,Wo as l,ho as m,qo as n,Do as o,Bo as p,Dt as q,Eo as r,Yo as s,ms as t,Uo as u,Ea as v,$i as w,aa as x,Da as y,Ut as z};
@@ -1 +0,0 @@
1
- import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,et as s,o as c,x as l}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{An as u,Ci as d,Oi as f,Si as p,bi as m,dn as h,dt as g,kn as _,ot as v,pn as y,pr as ee,sr as b,wn as x,xn as te}from"./player-overlays-Cs6l33cj.js";import{t as ne}from"./table-2-lftK0wHb.js";import{$a as re,At as S,Er as C,F as ie,Nt as w,So as ae,_d as T,_i as oe,at as E,bs as D,do as se,ei as O,hs as k,jt as A,ld as ce,r as j,ud as le,vs as M}from"./src-DFzrn-CX.js";import{t as N}from"./i18n-DJ4egBMY.js";import{t as P}from"./useTranslation-BJr-n0es.js";import{fr as ue,hr as F,pr as de,sr as I}from"./index-hKEeWkm1.js";import{t as L}from"./AdminPage-QmLz5qjj.js";import"./useEventInvalidation-P-UzQOB7.js";import{t as R}from"./device-integration-icon-DukkUZAm.js";import{i as fe,n as pe,r as z,t as me}from"./ScanNetworkModal-qjbQd1Q4.js";s();function he({rows:t,isExpanded:r,onToggleExpand:a,onOpen:s,renderExpanded:c,searchPlaceholder:l,emptyLabel:u}){let[d,f]=o(``),p=n(()=>{let e=d.trim().toLowerCase();return e.length===0?t:t.filter(t=>`${t.name} ${t.addonId}`.toLowerCase().includes(e))},[d,t]);return e(`div`,{className:`space-y-3`,children:[e(`div`,{className:`relative`,children:[i(y,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`,"aria-hidden":!0}),i(ce,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:l,"aria-label":l,className:`pl-8`})]}),p.length===0?i(`p`,{className:`py-8 text-center text-xs text-foreground-subtle`,children:u}):i(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3`,children:p.map(e=>i(ge,{integration:e,expanded:r(e),onToggleExpand:a,onOpen:s,renderExpanded:c},e.id))})]})}function ge({integration:t,expanded:n,onToggleExpand:r,onOpen:a,renderExpanded:o}){return e(`article`,{"data-testid":`integration-card-${t.id}`,className:T(`flex min-w-0 flex-col gap-2 overflow-x-clip rounded-lg border border-border bg-surface p-3`,n&&`sm:col-span-2 lg:col-span-3`),children:[i(_e,{integration:t,expanded:n,onToggleExpand:r,onOpen:a}),n?i(`div`,{className:`min-w-0`,children:o(t)}):null]})}function _e({integration:t,expanded:n,onToggleExpand:r,onOpen:a}){let{t:o}=P(),s=n?o(`integrations.integrationColumns.collapse`,`Collapse`):o(`integrations.integrationColumns.expand`,`Expand`);return e(`div`,{className:`relative flex min-w-0 items-stretch gap-3`,children:[i(O,{type:`button`,variant:`ghost`,"aria-label":o(`integrations.openNamed`,{name:t.name,defaultValue:`Open {{name}}`}),onClick:()=>a(t),className:`absolute inset-0 z-0 h-auto w-auto rounded-lg p-0 focus-visible:ring-2 focus-visible:ring-primary`}),i(B,{integration:t}),e(`div`,{className:`pointer-events-none relative z-10 flex min-w-0 flex-1 flex-col items-start gap-1.5`,children:[i(E,{status:t.status,className:`shrink-0`}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:o(`integrations.integrationColumns.deviceCount`,{count:t.deviceCount})}),i(`div`,{className:`pointer-events-auto mt-auto self-end`,children:i(le,{type:`button`,variant:`ghost`,size:`sm`,icon:n?p:m,"aria-label":s,"aria-expanded":n,onClick:e=>H(e,t.addonId,r)})})]})]})}function B({integration:t}){return e(`div`,{className:`pointer-events-none relative z-10 flex w-28 shrink-0 flex-col items-center gap-1 lg:w-24`,children:[i(I,{type:t.addonId,size:`xl`}),i(`p`,{className:`w-full text-center text-xs font-semibold text-foreground`,children:t.name}),i(V,{addonId:t.addonId})]})}function V({addonId:t}){return i(`p`,{className:`w-full text-center text-[10px] leading-tight text-foreground-subtle`,children:t.split(`-`).map((t,n)=>e(`span`,{children:[n>0?e(l,{children:[`-`,i(`wbr`,{})]}):null,t]},`${t}-${String(n)}`))})}function H(e,t,n){e.stopPropagation(),n(t)}s();var U=`camstack.admin.integrations.view`;function W(e){return e===`table`||e===`grid`}function G(){try{return typeof window>`u`?null:window.localStorage}catch{return null}}function K(e=G()){if(e===null)return`table`;try{let t=e.getItem(U);return W(t)?t:`table`}catch{return`table`}}function q(e,t=G()){if(t!==null)try{t.setItem(U,e)}catch{}}function ve(){let[e,t]=o(()=>K());return[e,r(e=>{t(e),q(e)},[])]}s();function J(e=!0){a(()=>{if(!e)return;let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=t}},[e])}s();function ye(e,t){let[n,r]=o(!1);return a(()=>{if(!e){r(!1);return}r(!1);let n=setTimeout(()=>r(!0),t);return()=>clearTimeout(n)},[e,t]),n}s();function be({providerId:t,onImport:n,onSkip:r}){let{t:s}=P(),[c,l]=o(new Set),u=se(),p=u.data,m=u.isPending||!u.data&&!u.isError;a(()=>{t&&(u.isPending||u.data||u.mutate({addonId:t}))},[t,u]);function h(e){l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}if(m)return e(`div`,{className:`flex flex-col items-center py-12`,children:[i(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent`}),i(`p`,{className:`mt-3 text-xs text-foreground-subtle`,children:s(`integrations.searchingDevices`)})]});let g=p??[];return e(`div`,{className:`space-y-4`,children:[i(`p`,{className:`text-xs text-foreground-subtle`,children:g.length>0?s(`integrations.foundDevices`,{count:g.length}):s(`integrations.noDevicesFound`)}),g.length>0&&i(`div`,{className:`space-y-1.5 max-h-64 overflow-y-auto`,children:g.map(t=>{let n=t.stableId,r=t.suggestedName??n,a=c.has(n),o=t.alreadyOnboarded===!0;return e(`button`,{onClick:()=>{o||h(n)},disabled:o,title:o?s(`integrations.alreadyAddedHint`,{defaultValue:`Already added as "{{name}}" — re-adding would overwrite its settings.`,name:t.onboardedName??r}):void 0,className:`flex w-full items-center gap-3 rounded-lg border p-3 text-left transition-colors ${o?`border-border bg-surface opacity-60 cursor-not-allowed`:a?`border-primary/40 bg-primary/5`:`border-border bg-surface hover:border-foreground-subtle/30`}`,children:[i(`div`,{className:`flex h-5 w-5 items-center justify-center rounded border flex-shrink-0 ${a&&!o?`border-primary bg-primary`:`border-border`}`,children:a&&!o&&i(d,{className:`h-3 w-3 text-primary-foreground`})}),i(f,{className:`h-3.5 w-3.5 text-foreground-subtle flex-shrink-0`}),i(`span`,{className:`text-xs font-medium text-foreground truncate`,children:r}),o&&i(`span`,{className:`ml-auto flex-shrink-0 rounded bg-surface-muted px-1.5 py-0.5 text-[10px] font-medium text-foreground-subtle`,children:s(`integrations.alreadyAdded`,{defaultValue:`Already added`})})]},n)})}),e(`div`,{className:`flex items-center justify-between pt-2`,children:[i(`button`,{onClick:r,className:`rounded-lg border border-border px-3 py-1.5 text-xs text-foreground-subtle hover:text-foreground transition-colors`,children:s(`integrations.skip`)}),g.length>0&&e(`button`,{onClick:()=>n(Array.from(c)),disabled:c.size===0,className:`rounded-lg bg-primary px-4 py-1.5 text-xs font-medium text-primary-foreground shadow-sm disabled:opacity-50`,children:[s(`integrations.importSelected`),` (`,c.size,`)`]})]})]})}var Y=`(hover: none) and (pointer: coarse)`;function X(){if(typeof window>`u`||typeof window.matchMedia!=`function`)return!0;try{return!window.matchMedia(Y).matches}catch{return!0}}s();function Z({onSelect:r,onClose:s,pendingAddonId:c=null}){let{t:l}=P(),u=de(),[d,f]=o(``),p=t(null),{data:m,isLoading:g}=M();a(()=>{g||!X()||p.current?.focus()},[g]);let _=n(()=>{let e=m??[],t=d.trim().toLowerCase();return t.length===0?e:e.filter(e=>`${e.name} ${e.description??``} ${e.addonId}`.toLowerCase().includes(t))},[m,d]);if(g)return i(`div`,{className:`grid grid-cols-2 gap-2 p-2`,children:[1,2,3,4].map(e=>i(`div`,{className:`h-24 rounded-lg bg-surface animate-pulse`},e))});let v=c!==null;return e(`div`,{className:`space-y-3`,"data-testid":`provider-picker`,children:[e(`div`,{className:`relative`,children:[i(y,{className:`pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-foreground-subtle`,"aria-hidden":!0}),i(ce,{ref:p,type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:l(`integrations.searchProviders`,`Search integrations…`),className:`pl-8`,"data-testid":`provider-picker-search`,"aria-label":l(`integrations.searchProviders`,`Search integrations…`)})]}),i(`div`,{className:`grid grid-cols-2 gap-2`,children:_.map(t=>{let n=t.instanceMode===`unique`&&t.existingInstances.length>0,a=c===t.addonId,o=v;return e(`button`,{type:`button`,disabled:o,"data-testid":`provider-pick-${t.addonId}`,onClick:()=>{if(!o)if(n){let e=t.existingInstances[0].id;s(),u(`/integrations/${e}`)}else r(t.addonId,t.instanceMode,t.discoveryMode,t.name,t.kind,t.brokerKind,t.mode,t.canTest)},className:`flex flex-col items-center gap-1.5 rounded-lg border border-border bg-surface px-3 py-3 text-center text-xs hover:border-primary/50 hover:bg-surface-hover transition-colors disabled:opacity-60 disabled:cursor-not-allowed disabled:hover:border-border`,children:[t.iconUrl?i(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-lg flex-shrink-0`,style:{backgroundColor:`${t.color}15`},children:i(`img`,{src:t.iconUrl,alt:``,className:`h-5 w-5`})}):i(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-lg flex-shrink-0`,style:{backgroundColor:`${t.color}15`},children:i(`span`,{className:`text-sm`,style:{color:t.color},children:`◉`})}),i(`p`,{className:`w-full truncate text-xs font-semibold text-foreground`,children:t.name}),t.description?i(`p`,{className:`w-full line-clamp-2 text-[10px] text-foreground-subtle`,children:t.description}):null,a?i(b,{className:`h-4 w-4 animate-spin text-primary`}):n?e(`span`,{className:`flex items-center gap-1 text-[10px] font-medium text-foreground-subtle`,children:[i(h,{className:`h-3 w-3`}),l(`integrations.manage`)]}):null]},t.addonId)})}),_.length===0&&i(`div`,{className:`py-8 text-center text-xs text-foreground-subtle`,children:(m??[]).length===0?l(`integrations.noProviders`):l(`integrations.noProvidersMatch`,`No integrations match your search.`)})]})}s();function xe(e){let t=e=>{if(e.type===`separator`||e.type===`info`||e.type===`button`)return e;if(e.type===`group`)return{...e,fields:e.fields.map(e=>t(e))};let{value:n,...r}=e;return r};return{...e.tabs?{tabs:e.tabs}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(t)}))}}var Se=2e4;function Ce({open:t,onClose:r,seed:s=null}){let{t:u}=P(),d=de(),f=c(),[p,m]=o(`picker`),[h,_]=o(null),[v,y]=o(null),[ee,x]=o(`manual`),[te,ne]=o(null),[S,C]=o(``),[ie,w]=o(null),[ae,T]=o(null),[E,D]=o(!1),[O,A]=o({}),[ce,j]=o(``),le=s?.config.host,N=s===null?``:`${s.addonId}\0${s.name}\0${typeof le==`string`?le:``}`;t&&s!==null&&ce!==N&&(j(N),_(s.addonId),C(s.name),A({...s.config}),m(`config`));let ue=M(void 0,{enabled:t&&s!==null}),{data:F}=oe({addonId:h??``,nodeId:`hub`},{enabled:h!=null}),I=n(()=>F?xe(F):null,[F]),L=k({onSuccess:()=>f.invalidateQueries({queryKey:[[`integrations`]]})}),R=se(),pe=R.data;a(()=>{if(!t||s===null)return;let e=ue.data?.find(e=>e.addonId===s.addonId);e&&(D(e.canTest),x(e.discoveryMode))},[t,s,ue.data]),a(()=>{p!==`discovery`||!v||!h||R.isPending||R.data||R.mutate({addonId:h})},[p,v,h,R]);let me=re({onSuccess:()=>f.invalidateQueries({queryKey:[[`deviceManager`]]})});function he(e,t,n,r,i,a,o,s){if(!L.isPending){if(_(e),D(s),x(n),C(r),T(null),o===`broker`){if(!a){T(`Addon '${e}' declares mode 'broker' but no brokerKind in its manifest`);return}ne(a),m(`broker`);return}if(o===`account`){m(`config`);return}ge(e,r)}}async function ge(e,t){try{let n=await L.mutateAsync({addonId:e,name:t,settings:{}});r(),U(),d(`/integrations/${n.id}?add=1`)}catch{}}async function _e(e){if(h)try{let t=await L.mutateAsync({addonId:h,name:e.name,settings:e.config,secretKeys:[...e.secretKeys]});y(t.id),w(t.id),ee===`auto`||ee===`both`?m(`discovery`):H(t.id,{openAdd:!0})}catch{}}async function B(e){if(h)try{let t=await L.mutateAsync({addonId:h,name:S,settings:{brokerId:e}});w(t.id),y(t.id),H(t.id)}catch{}}async function V(e){if(h){for(let t of e){let e=pe?.find(e=>e.stableId===t);e&&await me.mutateAsync({addonId:h,candidate:e,...ie===null?{}:{integrationId:ie}})}H()}}function H(e,t){let n=e??v??h;r(),U(),n&&d(t?.openAdd===!0?`/integrations/${n}?add=1`:`/integrations/${n}`)}function U(){m(`picker`),_(null),y(null),x(`manual`),ne(null),C(``),w(null),T(null),D(!1),A({}),j(``)}function W(){r(),U()}J(t);let G=L.isPending,K=ye(G,Se);if(!t)return null;let q={picker:u(`integrations.newIntegration`),config:u(`integrations.configureIntegration`),discovery:u(`integrations.importDevices`),broker:u(`integrations.connectBroker`,{defaultValue:`Connect a broker`})},ve=G?h:null,Y=L.error,X=G&&!K;return e(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center`,children:[i(`div`,{className:`absolute inset-0 bg-black/60`,onClick:X?void 0:W}),e(`div`,{className:`relative z-10 w-full max-w-lg max-h-[calc(85dvh-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))] rounded-xl border border-border bg-background shadow-2xl flex flex-col overflow-hidden`,children:[e(`div`,{className:`flex items-center justify-between border-b border-border px-5 py-4 flex-shrink-0`,children:[i(`h2`,{className:`text-sm font-semibold text-foreground`,children:q[p]}),i(`button`,{onClick:W,disabled:X,className:`rounded-md p-1 text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,children:i(g,{className:`h-4 w-4`})})]}),e(`div`,{className:`px-5 py-4 flex-1 overflow-y-auto overscroll-contain`,children:[Y&&!G&&i(`div`,{className:`mb-3 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:Y instanceof Error?Y.message:String(Y)}),p===`picker`&&e(l,{children:[ae&&i(`div`,{className:`mb-3 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:ae}),i(Z,{onSelect:he,onClose:W,pendingAddonId:ve})]}),p===`config`&&h&&i(z,{addonId:h,configSchema:I??null,canTest:E,initialName:typeof O.host==`string`?S:void 0,initialConfig:{...O},onSave:_e,onBack:()=>{A({}),m(`picker`)}},N.length>0?N:h),p===`broker`&&te&&i(fe,{kind:te,onResolved:e=>{B(e)},onBack:()=>m(`picker`)}),p===`discovery`&&v&&i(be,{providerId:v,onImport:V,onSkip:H})]}),G&&e(`div`,{className:`absolute inset-0 z-20 flex flex-col items-center justify-center gap-2 rounded-xl bg-background/85 backdrop-blur-sm px-6 text-center`,children:[i(b,{className:`h-6 w-6 animate-spin text-primary`}),i(`p`,{className:`text-xs font-medium text-foreground`,children:u(`integrations.creating`,{defaultValue:`Creating integration…`})}),!K&&i(`p`,{className:`text-[10px] text-foreground-subtle`,children:u(`integrations.creatingHint`,{defaultValue:`Waiting for the addon to restart and register`})}),K&&e(l,{children:[i(`p`,{className:`text-[10px] text-foreground-subtle max-w-xs`,children:u(`integrations.creatingOverdue`,{defaultValue:`This is taking longer than expected. The integration may already have been created — close this dialog and refresh to check.`})}),i(`button`,{onClick:W,className:`mt-1 rounded-md border border-border bg-surface px-3 py-1.5 text-[11px] font-medium text-foreground hover:bg-surface-hover transition-colors`,children:u(`integrations.closeAndRefresh`,{defaultValue:`Close`})})]})]})]})]})}function we({integration:t,expanded:n,onToggleExpand:r}){let{t:a}=P();return e(`div`,{className:`flex items-center gap-2.5`,children:[i(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),r(t.addonId)},"aria-label":n?a(`integrations.integrationColumns.collapse`,`Collapse`):a(`integrations.integrationColumns.expand`,`Expand`),"aria-expanded":n,className:`flex h-5 w-5 flex-shrink-0 items-center justify-center rounded text-foreground-subtle transition-colors hover:bg-surface-hover hover:text-foreground`,children:i(n?p:m,{className:`h-3.5 w-3.5`})}),i(I,{type:t.addonId,size:`sm`}),e(`div`,{className:`flex min-w-0 flex-col`,children:[i(`span`,{className:`truncate text-xs font-semibold text-foreground`,children:t.name}),i(`span`,{className:`truncate text-[10px] text-foreground-subtle`,children:t.addonId})]})]})}function Te(e){let{isExpanded:t,onToggleExpand:n}=e;return[{key:`name`,header:N.t(`integrations.integrationColumns.integration`,`Integration`),headerClassName:`w-[55%]`,cell:e=>i(we,{integration:e,expanded:t(e),onToggleExpand:n})},{key:`devices`,header:N.t(`integrations.integrationColumns.devices`,`Devices`),headerClassName:`w-[15%]`,cellClassName:`text-[11px] text-foreground-subtle`,cell:e=>N.t(`integrations.integrationColumns.deviceCount`,{count:e.deviceCount})},{key:`status`,header:N.t(`integrations.integrationColumns.status`,`Status`),headerClassName:`w-[15%]`,cell:e=>i(E,{status:e.status})}]}s();function Ee(e){if(!e.enabled)return`disabled`;switch(e.processState){case`running`:return`running`;default:return`stopped`}}var De=`expand`;function Oe(){let{t}=P(),s=de(),c=ue(),d=v(),[f]=F(),[p,m]=ve(),[h,g]=o(!1),[y,b]=o(null),re=r(()=>{b(null),g(!0)},[]),oe=r(()=>{g(!1),b(null)},[]),E=r(e=>{O(!1),b(e),g(!0)},[]),[se,O]=o(!1);a(()=>{let e=pe(c.state);e!==null&&(b(e),g(!0),s(`/integrations`,{replace:!0,state:null}))},[c.state,s]);let k=f.get(`setup`);a(()=>{k===null||k.length===0||(b({addonId:k,name:k,config:{}}),g(!0))},[k]);let ce=r(()=>O(!0),[]),le=r(()=>O(!1),[]);j([`integrations`],[`integration.enabled`,`integration.disabled`,`integration.deleted`,`provider.started`,`provider.stopped`,`addon.installed`,`addon.uninstalled`,`addon.started`,`addon.stopped`,`addon.updated`]),j([`deviceManager`],[`device.registered`,`device.unregistered`,`device.online`,`device.offline`,`device.disabled`,`device.enabled`]);let{data:M,isLoading:N,isError:I,refetch:fe}=D(void 0),{data:z,isLoading:ge,isError:_e,refetch:B}=ae({projection:`slim`}),V=n(()=>z??[],[z]),H=n(()=>M??[],[M]),U=n(()=>{let e=new Map;for(let t of V)e.set(t.id,{id:t.id,name:t.name??t.stableId??`#${String(t.id)}`});return e},[V]),W=n(()=>A(M),[M]),G=n(()=>{let e=new Map;for(let t of w(V)){let n=W(t);if(n.kind!==`resolved`)continue;let r=n.integration.id;e.set(r,(e.get(r)??0)+1)}return e},[V,W]),K=n(()=>H.map(e=>({id:e.id,addonId:e.addonId,name:e.name,enabled:e.enabled,status:Ee(e),deviceCount:G.get(e.id)??0})),[H,G]),q=f.get(De),J=r(e=>{let t=new URLSearchParams(window.location.search);t.get(De)===e?t.delete(De):t.set(De,e);let n=t.toString(),r=`${window.location.pathname}${n?`?${n}`:``}${window.location.hash}`;window.history.replaceState(window.history.state,``,r),window.dispatchEvent(new PopStateEvent(`popstate`))},[]),ye=r(e=>s(`/integrations/${e.id}`),[s]),be=r(e=>U.get(e)??null,[U]),Y=r(e=>s(`/devices/${String(e)}`),[s]),X=r(e=>i(S,{context:`integration-detail`,devices:V,trpc:d.trpcClient,integrationOf:W,forceIntegrationId:e.id,urlScope:`nested`,lsKey:`integrations:nested:${e.addonId}`,resolveIntegrationIcon:R,resolveParent:be,onNavigate:Y}),[V,d.trpcClient,W,be,Y]),Z=r(e=>q===e.addonId,[q]),xe=n(()=>Te({isExpanded:Z,onToggleExpand:J}),[Z,J]),Se=r(e=>`${e.name} ${e.addonId}`,[]),we=r(e=>e.addonId,[]),Oe=r(()=>{fe(),B()},[fe,B]),Q=I===!0||_e===!0,$=!Q&&(N||ge||M===void 0||z===void 0),ke=H.length>0,Ae=[{id:`table`,label:t(`integrations.viewTable`,`Table`),icon:ne},{id:`grid`,label:t(`integrations.viewGrid`,`Grid`),icon:ee}];return e(L,{icon:_,title:t(`nav.integrations`,`Integrations`),actions:e(l,{children:[i(ie,{ariaLabel:t(`integrations.viewLabel`,`Layout`),value:p,onChange:m,options:Ae,testId:`integrations-view`}),i(`button`,{onClick:Oe,disabled:$,className:`flex items-center gap-1 rounded-lg border border-border bg-surface px-2.5 py-1.5 text-xs font-medium text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-50`,title:t(`common.refresh`,`Refresh`),children:i(te,{className:T(`h-3.5 w-3.5`,$&&`animate-spin`)})}),e(`button`,{onClick:ce,className:`flex items-center gap-1.5 rounded-lg border border-border bg-surface px-2.5 py-1.5 text-xs font-medium text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors`,title:t(`integrations.scanTheLocalNetworkFor`,`Scan the local network for devices`),children:[i(x,{className:`h-3.5 w-3.5`}),t(`integrations.scanNetwork`,`Scan network`)]}),e(`button`,{onClick:re,className:`flex items-center gap-1.5 rounded-lg bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground shadow-sm`,children:[i(u,{className:`h-3.5 w-3.5`}),t(`integrations.newIntegration`,`New Integration`)]})]}),children:[Q&&i(C,{message:t(`integrations.loadFailed`,`Integrations could not be loaded.`),onRetry:Oe}),$&&i(`div`,{className:`space-y-2`,"data-testid":`integrations-pending`,children:[1,2,3].map(e=>i(`div`,{className:`h-12 rounded-lg border border-border bg-surface animate-pulse`},e))}),!Q&&!$&&!ke&&e(`div`,{className:`flex flex-col items-center py-20 text-foreground-subtle`,children:[i(`p`,{className:`text-sm`,children:t(`integrations.noIntegrationsConfigured`,`No integrations configured.`)}),i(`p`,{className:`text-xs mt-1`,children:t(`integrations.clickNewIntegrationToConnect`,`Click "New Integration" to connect cameras and devices.`)})]}),!Q&&!$&&ke&&p===`table`&&i(S,{mode:`generic`,items:K,getKey:we,getSearchText:Se,columns:xe,onRowClick:ye,isExpanded:Z,renderExpanded:X,searchPlaceholder:t(`integrations.search`,{defaultValue:`Search integrations…`}),emptyLabel:t(`integrations.empty`,{defaultValue:`No integrations found.`})}),!Q&&!$&&ke&&p===`grid`&&i(he,{rows:K,isExpanded:Z,onToggleExpand:J,onOpen:ye,renderExpanded:X,searchPlaceholder:t(`integrations.search`,{defaultValue:`Search integrations…`}),emptyLabel:t(`integrations.empty`,{defaultValue:`No integrations found.`})}),i(Ce,{open:h,onClose:oe,seed:y}),i(me,{open:se,onClose:le,onSetupIntegration:E})]})}export{Oe as IntegrationsPage};
@@ -1 +0,0 @@
1
- import{C as e,K as t,R as n,S as r,V as i,Y as a,et as o,o as s,x as c}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{An as l,Bn as u,Ci as d,D as f,L as p,Lt as m,Pt as h,Qr as g,Qt as _,Vr as v,Xt as y,Z as b,bn as x,dt as S,fn as C,gn as ee,ht as w,ir as T,jn as te,ot as E,sn as D,sr as O,xn as ne}from"./player-overlays-Cs6l33cj.js";import{Ar as re,Fr as ie,Pr as ae,Xn as oe}from"./client-Ct1F5MoE.js";import{t as k}from"./boxes-BiMbpzNh.js";import{l as A,s as se}from"./video-Byw3ItoR.js";import{t as ce}from"./log-in-53JDrQ-P.js";import{$s as le,Ai as j,Bs as ue,Cn as de,Er as fe,Gs as pe,Js as me,Ks as he,Qs as ge,Rs as _e,So as ve,Us as ye,Vu as be,Wn as xe,Ys as Se,ac as Ce,bn as we,ec as Te,ei as M,id as Ee,ji as N,ld as De,nc as Oe,oc as ke,sc as Ae,si as P,tc as je,vn as Me,xn as Ne,xr as Pe,zs as Fe}from"./src-DFzrn-CX.js";import{t as F}from"./i18n-DJ4egBMY.js";import{t as I}from"./useTranslation-BJr-n0es.js";import"./mount-P-UzQOB7.js";import{S as Ie,a as L,dr as Le,hr as Re,i as R,ur as ze}from"./index-hKEeWkm1.js";import{t as Be}from"./AdminSectionedPage-DYCbg6TR.js";import{t as z}from"./AdminPage-QmLz5qjj.js";import{t as Ve}from"./NodeAddonsSettingsPanel-DOuw1uWS.js";import{n as B,r as He,t as V}from"./IntegrationHub-Crv-Ut8D.js";import{n as H,t as U}from"./addon-display-names-BkwMrExv.js";o();var W=5e3,G=`network-access`,Ue={connected:!1,endpoint:null};function We(){let{t:e}=I(),n=s(),i=N({capName:`network-access`},{refetchInterval:W}),o=j(void 0,{refetchInterval:W}),c=t(()=>U(o.data??[]),[o.data]),l=t(()=>(i.data??[]).map(e=>({addonId:e.addonId,displayName:c.get(e.addonId)??e.addonId,isActive:e.isActive})),[i.data,c]),[u,d]=a(null),[f,p]=a({}),m=(e,t)=>{let r=t?.addonId;n.invalidateQueries({queryKey:[[`networkAccess`,`getStatus`],{input:{addonId:r},type:`query`}]}),d(null),p(e=>{if(r===void 0||!(r in e))return e;let t={...e};return delete t[r],t})},h=(e,t)=>{d(null);let n=t?.addonId;if(n===void 0)return;let r=e instanceof Error?e.message:String(e);p(e=>({...e,[n]:r}))},g=ke({onSuccess:m,onError:h}),_=Ae({onSuccess:m,onError:h}),v=[{id:G,label:e(`system.remoteAccess.remoteAccess`,`Remote access`),install:{capability:G,label:e(`system.remoteAccess.addTunnel`,`Add tunnel`)},entries:l.map(e=>({id:e.addonId,name:e.displayName,fallbackIcon:A,...H(e.isActive),render:()=>r(B,{addonId:e.addonId,displayName:e.displayName,capName:G,isActive:e.isActive,badges:r(Ke,{addonId:e.addonId}),error:f[e.addonId]??null,primaryAction:r(qe,{addonId:e.addonId,busyId:u,onStart:e=>{d(e),g.mutate({addonId:e})},onStop:e=>{d(e),_.mutate({addonId:e})}})})}))}];return r(V,{embedded:!0,icon:A,title:e(`system.remoteAccess.remoteAccess2`,`Remote Access`),subtitle:e(`system.remoteAccess.publicFacingTunnelsThatExpose`,`Public-facing tunnels that expose this hub to the internet (Cloudflare Tunnel, ngrok, …).`),groups:v,isLoading:i.isLoading,emptyTitle:e(`system.remoteAccess.noRemoteAccessProvidersInstalled`,`No remote-access providers installed`),emptyDescription:e(`system.remoteAccess.installATunnelAddonE`,`Install a tunnel addon (e.g. @camstack/addon-cloudflare) to expose this hub publicly.`)})}function Ge(e){let{data:t}=Ce({addonId:e},{refetchInterval:W,retry:!1}),n=t?re.safeParse(t):null;return n?.success?n.data:Ue}function Ke({addonId:t}){let{t:n}=I(),i=Ge(t);return e(c,{children:[r(P,{variant:i.connected?`success`:`default`,className:He,children:i.connected?n(`system.remoteAccess.connected`,`Connected`):n(`system.remoteAccess.disconnected`,`Disconnected`)}),i.endpoint&&e(`a`,{href:i.endpoint.url,target:`_blank`,rel:`noopener noreferrer`,className:`flex min-w-0 items-center gap-1 break-all text-[11px] text-success hover:underline`,children:[r(v,{className:`h-3 w-3`}),i.endpoint.url]})]})}function qe({addonId:t,busyId:n,onStart:i,onStop:a}){let{t:o}=I(),s=Ge(t),c=n===t;return s.connected?e(M,{size:`sm`,variant:`secondary`,disabled:c,onClick:()=>a(t),children:[c?r(O,{className:`h-3 w-3 animate-spin`}):r(y,{className:`h-3 w-3`}),o(`system.remoteAccess.stop`,`Stop`)]}):e(M,{size:`sm`,variant:`primary`,disabled:c,onClick:()=>i(t),children:[c?r(O,{className:`h-3 w-3 animate-spin`}):r(te,{className:`h-3 w-3`}),o(`system.remoteAccess.start`,`Start`)]})}o();var Je=3e4,K=`turn-provider`;function Ye(e){let t=[];for(let n of e)typeof n.urls==`string`?t.push(n.urls):t.push(...n.urls);return t}function Xe(){let{t:n}=I(),i=N({capName:`turn-provider`},{refetchInterval:Je}),a=j(void 0,{refetchInterval:Je}),o=be(),s=o.data??[],c=t(()=>U(a.data??[]),[a.data]),l=t(()=>(i.data??[]).map(e=>({addonId:e.addonId,displayName:c.get(e.addonId)??e.addonId,isActive:e.isActive})),[i.data,c]),d=[{id:K,label:n(`system.turnServers.turnProviders`,`TURN providers`),install:{capability:K,label:n(`system.turnServers.addProvider`,`Add provider`)},entries:l.map(e=>({id:e.addonId,name:e.displayName,fallbackIcon:u,...H(e.isActive),render:()=>r(B,{addonId:e.addonId,displayName:e.displayName,capName:K,isActive:e.isActive,panels:[{id:`ice-servers`,title:n(`system.turnServers.discoveredIceServers`,`Discovered ICE servers`),icon:u,content:r(Ze,{addonId:e.addonId,enabled:e.isActive})}]})}))}];return r(V,{embedded:!0,icon:u,title:n(`system.turnServers.turnServers`,`TURN Servers`),subtitle:n(`system.turnServers.iceServersUsedForWebrtc`,`ICE servers used for WebRTC NAT traversal. Multiple providers can coexist — the WebRTC layer concatenates servers from all enabled providers per session.`),groups:d,isLoading:i.isLoading,emptyTitle:n(`system.turnServers.noTurnProvidersInstalled`,`No TURN providers installed`),emptyDescription:n(`system.turnServers.installATurnAddonE`,`Install a TURN addon (e.g. @camstack/addon-cloudflare) to enable WebRTC behind restrictive NATs.`),trailing:r(Ne,{headingId:`turn-combined-ice`,title:n(`system.turnServers.combinedIceServerListAll`,`Combined ICE server list — all enabled providers`),icon:u,actions:r(M,{size:`sm`,variant:`secondary`,onClick:()=>o.refetch(),disabled:o.isFetching,children:n(`common.refresh`,`Refresh`)}),children:r(`div`,{className:f,children:s.length===0?r(`div`,{className:`text-xs text-foreground-subtle`,children:n(`system.turnServers.noServersFromEnabledProviders`,`No servers from enabled providers.`)}):r(`div`,{className:`flex flex-col gap-3`,children:s.map((t,n)=>{let i=Array.isArray(t.urls)?t.urls:[t.urls];return e(`div`,{className:`rounded border border-border bg-surface`,children:[(t.username||t.credential)&&e(`div`,{className:`px-3 py-1.5 border-b border-border text-[10px] font-mono text-foreground-subtle flex items-center gap-3`,children:[t.username&&e(`span`,{children:[r(`span`,{className:`text-foreground-subtle`,children:`user:`}),` `,r(`span`,{className:`text-foreground`,children:t.username})]}),t.credential&&e(`span`,{children:[r(`span`,{className:`text-foreground-subtle`,children:`credential:`}),` `,r(`span`,{className:`text-foreground`,children:`••••••••`})]})]}),r(`ul`,{className:`divide-y divide-border`,children:i.map(e=>r(`li`,{className:`px-3 py-1.5 font-mono text-xs text-foreground break-all`,children:e},e))})]},n)})})})})})}function Ze({addonId:e,enabled:n}){let i=be({addonId:e},{enabled:n,retry:!1}),a=t(()=>Ye(i.data??[]),[i.data]),o=n?i.isLoading?`Loading…`:a.length===0?`This provider returned no servers.`:null:`Disabled — enable the provider to fetch its servers.`;return r(`div`,{className:`rounded-lg border border-border bg-surface p-2 sm:p-3`,children:o===null?r(`div`,{className:`flex flex-wrap gap-1`,children:a.map(e=>r(`span`,{className:`inline-block break-all rounded bg-foreground-subtle/10 px-1.5 py-0.5 font-mono text-[10px] text-foreground`,children:e},e))}):r(`div`,{className:`text-xs text-foreground-subtle`,children:o})})}o();var Qe={lan:u,wifi:w,docker:k,vpn:T,loopback:C,other:C},$e={lan:`LAN`,wifi:`Wi-Fi`,docker:`Docker`,vpn:`VPN`,loopback:`Loopback`,other:`Other`},et=[`lan`,`wifi`,`vpn`,`docker`,`other`,`loopback`];function tt(n){let{t:i}=I(),{interfaces:a,disabled:o,hideLoopback:s,ipv4Only:c,emptyMessage:l}=n,u=t(()=>a.filter(e=>!(s&&e.kind===`loopback`||c&&e.family!==`IPv4`)),[a,s,c]),f=t(()=>{let e=new Map;for(let t of u){let n=e.get(t.kind)??[];n.push(t),e.set(t.kind,n)}return et.filter(t=>e.has(t)).map(t=>({kind:t,items:e.get(t)}))},[u]),p=e=>n.mode===`single`?n.value===e:n.value.includes(e),m=e=>{if(o||e.kind===`loopback`)return;if(n.mode===`single`){n.onChange(n.value===e.address?null:e.address);return}let t=new Set(n.value);t.has(e.address)?t.delete(e.address):t.add(e.address),n.onChange([...t])};return u.length===0?r(`div`,{className:`text-xs text-foreground-subtle italic`,children:l??i(`shared.addressSelector.noAddressesAvailable`,`No addresses available.`)}):r(`div`,{className:`flex flex-col gap-3`,children:f.map(({kind:t,items:a})=>e(`div`,{className:`rounded-md border border-border overflow-hidden`,children:[e(`div`,{className:`flex items-center gap-2 px-3 py-1.5 bg-surface-hover/30 border-b border-border`,children:[r(Qe[t]??C,{className:`h-3.5 w-3.5 text-foreground-subtle`}),r(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-foreground-subtle`,children:$e[t]??t}),e(`span`,{className:`text-[10px] text-foreground-subtle`,children:[`· `,a.length]})]}),r(`ul`,{className:`divide-y divide-border`,children:a.map(t=>{let a=p(t.address),s=t.kind===`loopback`,c=!t.plausible&&!s;return e(`li`,{className:`flex items-center gap-3 px-3 py-2 ${s?`opacity-60 cursor-not-allowed`:o?`opacity-60`:c?`cursor-pointer hover:bg-surface-hover/30 bg-amber-500/[0.04]`:`cursor-pointer hover:bg-surface-hover/30`}`,onClick:()=>m(t),children:[r(`span`,{className:`flex items-center justify-center h-4 w-4 rounded ${n.mode===`single`?`rounded-full`:`rounded`} border ${a?`border-primary bg-primary text-primary-foreground`:`border-border bg-surface`}`,children:a&&r(d,{className:`h-3 w-3`})}),e(`div`,{className:`flex-1 min-w-0 ${c?`text-foreground-subtle`:``}`,children:[e(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[r(`span`,{className:`font-mono text-xs font-semibold ${c?`text-foreground-subtle`:`text-foreground`}`,children:t.name}),r(`span`,{className:`text-[10px] rounded px-1.5 py-0.5 bg-foreground-subtle/10 text-foreground-subtle font-mono`,children:t.family}),t.preferred&&r(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium bg-primary/15 text-primary`,children:i(`shared.addressSelector.autoPreferred`,`Auto-preferred`)}),s&&r(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium bg-foreground-subtle/15 text-foreground-subtle`,children:i(`shared.addressSelector.alwaysIncluded`,`Always included`)}),c&&e(`span`,{className:`inline-flex items-center gap-1 text-[10px] rounded-full px-2 py-0.5 font-medium bg-amber-500/15 text-amber-700 dark:text-amber-300`,title:t.plausibleReason||void 0,children:[r(h,{className:`h-2.5 w-2.5`}),i(`shared.addressSelector.unlikelyUsable`,`Unlikely usable`)]})]}),e(`div`,{className:`text-xs text-foreground-subtle mt-0.5 font-mono break-all`,children:[t.address,t.cidr&&t.cidr!==t.address?` (${t.cidr})`:``]})]})]},`${t.name}-${t.family}-${t.address}`)})})]},t))})}var q=[{role:`appConnections`,get title(){return F.t(`helpers.addressTableModel.appConnectionsTitle`)},single:!1,get help(){return F.t(`helpers.addressTableModel.appConnectionsHelp`)}},{role:`notificationTaps`,get title(){return F.t(`helpers.addressTableModel.notificationTapsTitle`)},single:!0,get help(){return F.t(`helpers.addressTableModel.notificationTapsHelp`)}},{role:`publicEndpoint`,get title(){return F.t(`helpers.addressTableModel.publicEndpointTitle`)},single:!0,get help(){return F.t(`helpers.addressTableModel.publicEndpointHelp`)}},{role:`internal`,get title(){return F.t(`helpers.addressTableModel.internalTitle`)},single:!0,get help(){return F.t(`helpers.addressTableModel.internalHelp`)}}],nt=`A role with nothing ticked is automatic. Add a custom address when the hub is reached at an address it cannot see itself (NAT, reverse proxy, VPN, Docker bridge).`;function J(e,t){return e.inUse.includes(t)}function rt(e,t){if(!e.eligible.includes(t))return{kind:`none`};if(e.kind===`app-link`)return J(e,t)?{kind:`none`}:{kind:`set`,input:{role:t,baseUrl:null,enabled:!0}};if(e.flags.includes(t)||t===`appConnections`&&J(e,t))return{kind:`set`,input:{role:t,baseUrl:e.baseUrl,enabled:!1}};let n={role:t,baseUrl:e.baseUrl,enabled:!0};return t===`publicEndpoint`&&e.baseUrl.startsWith(`http:`)?{kind:`confirm-http`,input:n,reason:ae}:{kind:`set`,input:n}}function it(e){return q.map(({role:t,title:n})=>{if(t===`appConnections`){let r=e.roles.appConnections;return{role:t,title:n,inUse:r.resolved.length===0?`nothing reachable`:r.resolved.join(`, `),automatic:r.source!==`flagged`}}let r=e.roles[t];return{role:t,title:n,inUse:r.resolved===null?`nothing reachable`:t===`notificationTaps`&&r.source===`auto`?`CamStack app link`:r.resolved,automatic:r.source!==`flagged`}})}o();var at={"lan-ipv4":{labelKey:`system.addressesCard.kindIpv4`,className:`bg-emerald-500/15 text-emerald-700 dark:text-emerald-300`},"lan-ipv6":{labelKey:`system.addressesCard.kindIpv6`,className:`bg-violet-500/15 text-violet-700 dark:text-violet-300`},public:{labelKey:`system.addressesCard.kindPublic`,className:`bg-blue-500/15 text-blue-700 dark:text-blue-300`},"app-link":{labelKey:`system.addressesCard.kindAppLink`,className:`bg-amber-500/15 text-amber-700 dark:text-amber-300`},custom:{labelKey:`system.addressesCard.kindCustom`,className:`bg-sky-500/15 text-sky-700 dark:text-sky-300`},loopback:{labelKey:`system.addressesCard.kindLoopback`,className:`bg-foreground-subtle/15 text-foreground-subtle`}};function ot({book:t,loading:n,saving:i,error:o,onSetRole:s,onAdd:c,onRemove:u}){let{t:d}=I(),[f,p]=a(``),[g,_]=a(``),[v,y]=a(null),[b,x]=a(null),S=()=>{let e=ie(f);if(!e.ok){y(e.reason);return}y(null),p(``),_(``),c(e.baseUrl,g.trim())},C=(e,t)=>{let n=rt(e,t.role);if(n.kind!==`none`){if(n.kind===`confirm-http`){x({input:n.input,reason:n.reason});return}x(null),s(n.input)}},ee=[{key:`url`,header:d(`system.addressesCard.address`,`Address`),render:n=>e(`div`,{className:`min-w-0 py-0.5`,children:[r(`div`,{className:`font-mono text-[12px] break-all ${n.plausible?`text-foreground`:`text-foreground-subtle`}`,children:n.baseUrl}),e(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-1.5 text-[11px] text-foreground-subtle`,children:[r(`span`,{children:n.label}),n.kind===`app-link`&&e(`span`,{className:`font-mono`,children:[`hub=`,` `,t?.appLinkHub??d(`system.addressesCard.noneNoTunnelOrTailscale`,`none (no tunnel or Tailscale)`)]}),n.custom&&n.detected&&r(`span`,{children:d(`system.addressesCard.alsoAddedAsACustom`,`also added as a custom address`)}),n.kind!==`custom`&&n.interfaceKind!==`lan`&&n.interfaceKind!==`public`&&n.interfaceKind!==`other`&&r(`span`,{className:`uppercase tracking-wide`,children:n.interfaceKind}),!n.plausible&&n.interfaceKind!==`loopback`&&e(`span`,{className:`inline-flex items-center gap-1 text-amber-700 dark:text-amber-300`,title:n.plausibleReason||void 0,children:[r(h,{className:`h-2.5 w-2.5`}),d(`system.addressesCard.unlikelyUsable`,`Unlikely usable`)]})]})]})},{key:`kind`,header:d(`system.addressesCard.kind`,`Kind`),nowrap:!0,render:e=>{let t=at[e.kind]??at.loopback;return r(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium ${t.className}`,children:d(t.labelKey)})}},...q.map(t=>({key:t.role,headerRender:()=>r(`span`,{title:t.help,children:t.title}),align:`center`,nowrap:!0,width:`w-24`,render:n=>{let a=n.eligible.includes(t.role),o=n.flags.includes(t.role),s=J(n,t.role);return e(`label`,{className:`inline-flex items-center justify-center gap-1 ${a?`cursor-pointer`:`cursor-not-allowed opacity-40`}`,title:a?s&&!o?d(`system.addressesCard.inUseAutomatically`,`{{title}}: in use automatically. {{help}}`,{title:t.title,help:t.help}):t.help:d(`system.addressesCard.thisAddressCannotBeUsed`,`This address cannot be used for this.`),children:[r(xe,{checked:a&&s,disabled:!a||i,onChange:()=>C(n,t),"aria-label":`${t.title}: ${n.baseUrl}`}),s&&!o&&a&&r(`span`,{className:`text-[9px] text-foreground-subtle`,children:d(`common.auto`)})]})}})),{key:`actions`,header:``,align:`right`,nowrap:!0,render:e=>e.custom?r(M,{size:`sm`,variant:`ghost`,disabled:i,onClick:()=>u(e.baseUrl),"aria-label":d(`system.addressesCard.remove`,`Remove {{baseUrl}}`,{baseUrl:e.baseUrl}),title:d(`system.addressesCard.removeThisCustomAddressIts`,`Remove this custom address (its roles turn automatic)`),children:r(m,{className:`h-3 w-3`})}):null}],w=t===void 0?[]:it(t);return e(Pe,{children:[e(`div`,{className:`px-4 py-3 border-b border-border flex flex-col gap-2`,children:[e(`div`,{children:[r(`div`,{className:`text-sm font-semibold`,children:d(`system.addressesCard.addresses`,`Addresses`)}),r(`div`,{className:`text-xs text-foreground-subtle max-w-3xl`,children:d(`system.addressesCard.everyAddressThisHubIs`,`Every address this hub is reached at, detected or added by you. Tick what each one is used for.`)}),e(`details`,{className:`mt-1.5 text-xs max-w-3xl`,"data-testid":`address-roles-help`,children:[r(`summary`,{className:`cursor-pointer select-none text-foreground-subtle hover:text-foreground`,children:d(`system.addressesCard.whatAreRoles`,`What are roles?`)}),r(`dl`,{className:`mt-1.5 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1`,children:q.map(t=>e(`div`,{className:`contents`,children:[r(`dt`,{className:`font-medium`,children:t.title}),r(`dd`,{className:`text-foreground-subtle`,children:t.help})]},t.role))}),r(`p`,{className:`mt-1.5 text-foreground-subtle`,children:nt})]})]}),w.length>0&&r(`div`,{className:`grid grid-cols-[auto_1fr_auto] gap-x-3 gap-y-1 items-baseline text-xs`,"data-testid":`address-roles-summary`,children:w.map(t=>e(`div`,{className:`contents`,children:[r(`span`,{className:`text-foreground-subtle`,children:t.title}),e(`span`,{className:`font-mono break-all`,"data-testid":`address-role-${t.role}`,children:[t.inUse,r(`span`,{className:`ml-1.5 font-sans text-foreground-subtle`,children:t.automatic?d(`system.addressesCard.automatic`,`(automatic)`):d(`system.addressesCard.setByYou`,`(set by you)`)})]}),t.automatic?r(`span`,{}):r(M,{size:`sm`,variant:`secondary`,disabled:i,onClick:()=>s({role:t.role,baseUrl:null,enabled:!1}),children:d(`system.addressesCard.useAutomatic`,`Use automatic`)})]},t.role))}),b!==null&&e(`div`,{className:`rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-xs flex flex-wrap items-center gap-2`,children:[r(h,{className:`h-3.5 w-3.5 text-amber-600`}),r(`span`,{className:`flex-1 min-w-[220px]`,children:b.reason}),r(M,{size:`sm`,variant:`secondary`,onClick:()=>{s({...b.input,acceptInsecureHttp:!0}),x(null)},children:d(`system.addressesCard.useHttpAnyway`,`Use http anyway`)}),r(M,{size:`sm`,variant:`ghost`,onClick:()=>x(null),children:d(`common.cancel`,`Cancel`)})]}),o!==null&&r(`div`,{className:`text-[11px] text-red-600 dark:text-red-400`,role:`alert`,children:o})]}),r(de,{columns:ee,rows:t?.rows??[],rowKey:e=>`${e.kind}-${e.baseUrl}`,minWidthPx:760,bordered:!1,emptyMessage:n?d(`common.loading`,`Loading…`):d(`system.addressesCard.noAddressesAvailable`,`No addresses available.`),rowClassName:e=>e.plausible?void 0:`opacity-80`}),e(`div`,{className:`px-4 py-3 border-t border-border flex flex-wrap items-start gap-2`,children:[e(`div`,{className:`flex-1 min-w-[220px]`,children:[r(De,{value:f,onChange:e=>{p(e.target.value),y(null)},placeholder:`https://cams.example.com or https://192.0.2.20:4443`,"aria-label":d(`system.addressesCard.customAddress`,`Custom address`),disabled:i}),v!==null&&r(`div`,{className:`mt-1 text-[11px] text-red-600 dark:text-red-400`,children:v})]}),r(`div`,{className:`w-48`,children:r(De,{value:g,onChange:e=>_(e.target.value),placeholder:d(`system.addressesCard.labelOptional`,`Label (optional)`),"aria-label":d(`system.addressesCard.customAddressLabel`,`Custom address label`),maxLength:80,disabled:i})}),e(M,{size:`sm`,variant:`secondary`,disabled:i||f.trim()===``,onClick:S,children:[r(l,{className:`h-3 w-3`}),d(`system.addressesCard.addCustomAddress`,`Add custom address`)]})]})]})}o();function st(){let{t:n}=I(),o=s(),c=()=>{o.invalidateQueries({queryKey:[[`localNetwork`]]})},l=ye(void 0,{refetchInterval:3e4}),u=ue(void 0),d=Se({onSuccess:c}),p=he({onSuccess:e=>{w(e.addresses),c()}}),m=t(()=>l.data?.interfaces??[],[l.data]),h=Fe({scheme:typeof window<`u`&&window.location.protocol===`https:`?`https`:`http`},{refetchInterval:3e4}),g=me({onSuccess:c}),v=_e({onSuccess:c}),y=pe({onSuccess:c}),b=g.error?.message??v.error?.message??y.error?.message??null,S=g.isPending||v.isPending||y.isPending,[C,w]=a([]),[T,te]=a(!1);i(()=>{!T&&u.data&&(w(u.data.addresses),te(!0))},[u.data,T]);let E=u.data?.addresses??[],D=t(()=>{if(C.length!==E.length)return!0;let e=[...C].toSorted(),t=[...E].toSorted();return e.some((e,n)=>e!==t[n])},[C,E]);return e(z,{embedded:!0,children:[e(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[r(`p`,{className:`text-xs text-foreground-subtle max-w-2xl`,children:n(`system.networkAddresses.pinWhichHostInterfacesExist`,`Pin which host interfaces exist, then tick what each address is used for. Add a custom address when this hub is reached at one it cannot detect.`)}),r(`div`,{className:`flex items-center gap-2 shrink-0`,children:e(M,{size:`sm`,variant:`secondary`,onClick:()=>{l.refetch(),u.refetch(),h.refetch()},disabled:l.isLoading,children:[r(ne,{className:`h-3 w-3 ${l.isLoading?`animate-spin`:``}`}),n(`common.refresh`,`Refresh`)]})})]}),r(Ne,{headingId:`network-allowed-addresses`,title:n(`system.networkAddresses.allowedAddresses`,`Allowed addresses`),actions:e(`div`,{className:`flex flex-wrap items-center gap-1`,children:[e(M,{size:`sm`,variant:`secondary`,onClick:()=>p.mutate(void 0),disabled:p.isPending||d.isPending,title:n(`system.networkAddresses.reRunTheAutoDetection`,`Re-run the auto-detection heuristic + overwrite the current allowlist with the best matches.`),children:[r(_,{className:`h-3 w-3`}),p.isPending?n(`system.networkAddresses.detecting`,`Detecting…`):n(`system.networkAddresses.bestMatch`,`Best match`)]}),e(M,{size:`sm`,variant:`secondary`,onClick:()=>{w([])},disabled:C.length===0||d.isPending,children:[r(x,{className:`h-3 w-3`}),n(`system.networkAddresses.clear`,`Clear`)]}),D&&r(M,{size:`sm`,variant:`secondary`,onClick:()=>{w(E)},disabled:d.isPending,children:n(`system.networkAddresses.discard`,`Discard`)}),e(M,{size:`sm`,variant:`primary`,onClick:()=>{d.mutate({addresses:[...C]})},disabled:!D||d.isPending,children:[r(ee,{className:`h-3 w-3`}),d.isPending?n(`system.networkAddresses.saving`,`Saving…`):n(`common.save`,`Save`)]})]}),children:e(`div`,{className:f,children:[r(`p`,{className:`mb-3 text-xs text-foreground-subtle`,children:C.length===0?n(`system.networkAddresses.autoEveryNonLoopbackNon`,`Auto — every non-loopback / non-link-local interface participates.`):n(`system.networkAddresses.pinned`,`{{value1}} pinned`,{value1:String(C.length)})}),r(tt,{mode:`multiple`,interfaces:m,value:C,onChange:w,disabled:d.isPending,emptyMessage:l.isLoading?n(`system.networkAddresses.loadingInterfaces`,`Loading interfaces…`):n(`system.networkAddresses.noInterfacesDetected`,`No interfaces detected.`)})]})}),r(ot,{book:h.data,loading:h.isLoading,saving:S,error:b,onSetRole:e=>g.mutate({...e}),onAdd:(e,t)=>v.mutate({baseUrl:e,label:t}),onRemove:e=>y.mutate({baseUrl:e})})]})}o();var ct={mesh:`bg-violet-500/15 text-violet-700 dark:text-violet-300`,public:`bg-blue-500/15 text-blue-700 dark:text-blue-300`},Y=5e3,X=`mesh-network`,lt=3e4,ut={joined:!1,meshIp:``,magicDnsHostname:``,peerCount:0,endpoints:[],tenantName:``,magicDnsSuffix:``,userLogin:null,controlPlaneUrl:``,keyExpiry:null};function dt(){let{t:e}=I(),n=N({capName:`mesh-network`},{refetchInterval:Y}),i=j(void 0,{refetchInterval:Y}),a=t(()=>U(i.data??[]),[i.data]),o=t(()=>(n.data??[]).map(e=>({addonId:e.addonId,displayName:a.get(e.addonId)??e.addonId,isActive:e.isActive})),[n.data,a]),s=[{id:X,label:e(`system.meshNetworks.meshNetworks`,`Mesh networks`),install:{capability:X,label:e(`system.meshNetworks.addMesh`,`Add mesh`)},entries:o.map(t=>({id:t.addonId,name:t.displayName,fallbackIcon:u,...H(t.isActive),render:()=>r(B,{addonId:t.addonId,displayName:t.displayName,capName:X,isActive:t.isActive,badges:r(ft,{addonId:t.addonId}),primaryAction:r(pt,{addonId:t.addonId}),panels:[{id:`status`,title:e(`system.meshNetworks.status`,`Status`),icon:k,content:r(mt,{addonId:t.addonId})}]})}))}];return r(V,{embedded:!0,icon:k,title:e(`system.meshNetworks.meshNetworks2`,`Mesh Networks`),subtitle:e(`system.meshNetworks.privateVpnMeshesThatConnect`,`Private VPN meshes that connect CamStack to your other devices (Tailscale, Headscale, …). Each provider can also expose this hub publicly via its ingress (Tailscale Funnel).`),groups:s,isLoading:n.isLoading,emptyTitle:e(`system.meshNetworks.noMeshNetworkProvidersInstalled`,`No mesh-network providers installed`),emptyDescription:e(`system.meshNetworks.installAMeshAddonE`,`Install a mesh addon (e.g. @camstack/addon-tailscale) to join this hub into a private VPN mesh.`)})}function Z(e){let{data:t,isLoading:n}=ge({addonId:e},{refetchInterval:Y,retry:!1}),r=t?oe.safeParse(t):null;return{status:r?.success?r.data:ut,isLoading:n}}function ft({addonId:t}){let{t:n}=I(),{status:i}=Z(t);return e(c,{children:[r(P,{variant:i.joined?`success`:`default`,className:He,children:i.joined?n(`system.meshNetworks.joined`,`Joined`):n(`system.meshNetworks.notJoined`,`Not joined`)}),i.joined&&r(P,{className:`text-[10px]`,children:n(`common.peers`,{count:i.peerCount})})]})}function pt({addonId:t}){let{t:i}=I(),o=s(),[l,u]=a(!1),[d,f]=a(null),p=E(),{status:m}=Z(t),h=n(()=>{o.invalidateQueries({queryKey:[[`meshNetwork`]]})},[o]),g=Oe(),_=le({onSuccess:h}),v=je({onSuccess:h}),y=n(async()=>{u(!0);let e={cancelled:!1};f(e);try{let n=await g.mutateAsync({addonId:t});if(e.cancelled)return;n.loginUrl&&window.open(n.loginUrl,`_blank`,`noopener,noreferrer`);let r=Date.now();for(;!e.cancelled&&(await bt(2e3),!e.cancelled);){let e=await p.trpcClient.meshNetwork.getStatus.query({addonId:t}).catch(()=>null),n=e?oe.safeParse(e):null;if(n?.success&&n.data.joined){h();break}if(Date.now()-r>6e5)break}}finally{u(!1),f(null)}},[t,h,g,p]),b=n(()=>{d&&(d.cancelled=!0),u(!1),f(null)},[d]);return r(c,{children:m.joined?e(c,{children:[e(M,{size:`sm`,variant:`secondary`,disabled:_.isPending,onClick:()=>_.mutate({addonId:t}),children:[_.isPending?r(O,{className:`h-3 w-3 animate-spin`}):r(se,{className:`h-3 w-3`}),i(`system.meshNetworks.disconnect`,`Disconnect`)]}),e(M,{size:`sm`,variant:`ghost`,disabled:v.isPending,onClick:()=>v.mutate({addonId:t}),children:[v.isPending?r(O,{className:`h-3 w-3 animate-spin`}):r(D,{className:`h-3 w-3`}),i(`system.meshNetworks.logOut`,`Log out`)]})]}):l?e(M,{size:`sm`,variant:`ghost`,onClick:b,children:[r(S,{className:`h-3 w-3 mr-1`}),` `,i(`common.cancel`)]}):e(c,{children:[e(M,{size:`sm`,variant:`primary`,onClick:()=>void y(),children:[r(ce,{className:`h-3 w-3`}),i(`system.meshNetworks.connect`,`Connect`)]}),e(M,{size:`sm`,variant:`ghost`,disabled:v.isPending,onClick:()=>v.mutate({addonId:t}),children:[v.isPending?r(O,{className:`h-3 w-3 animate-spin`}):r(D,{className:`h-3 w-3`}),i(`system.meshNetworks.logOut`,`Log out`)]})]})})}function mt({addonId:t}){let{t:n}=I(),{status:i}=Z(t),a=Te({addonId:t},{refetchInterval:lt,retry:!1});return e(`div`,{className:`rounded-lg border border-border bg-surface`,children:[e(`div`,{className:`space-y-4 p-2 sm:p-4`,children:[i.error&&r(fe,{message:i.error}),r(ht,{status:i}),i.endpoints.length>0&&e(`div`,{className:`space-y-1.5`,children:[r(`div`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wide`,children:n(`system.meshNetworks.endpoints`,`Endpoints`)}),i.endpoints.map(t=>e(`div`,{className:`flex items-center gap-2 text-xs flex-wrap`,children:[e(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium ${ct[t.scope]??`bg-foreground-subtle/15 text-foreground-subtle`}`,children:[t.scope===`public`?r(A,{className:`inline h-2.5 w-2.5 mr-0.5`}):null,t.label]}),e(`a`,{href:t.url,target:`_blank`,rel:`noopener noreferrer`,className:`text-emerald-700 dark:text-emerald-300 hover:underline break-all flex items-center gap-1`,children:[r(v,{className:`h-3 w-3 shrink-0`}),t.url]})]},t.id))]})]}),r(`div`,{className:`border-t border-border`,children:r(_t,{peers:a.data?.peers??[],loading:a.isLoading})})]})}function ht({status:t}){let{t:n}=I();return r(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-1.5`,children:[{label:n(`system.meshNetworks.tenant`,`Tenant`),value:t.tenantName||`—`},{label:n(`system.meshNetworks.user`,`User`),value:t.userLogin??`—`},{label:n(`system.meshNetworks.controlPlane`,`Control plane`),value:t.controlPlaneUrl||`—`},{label:n(`system.meshNetworks.meshIp`,`Mesh IP`),value:t.meshIp||`—`,mono:!0},{label:n(`system.meshNetworks.magicdns`,`MagicDNS`),value:t.magicDnsHostname||`—`,mono:!0},{label:n(`system.meshNetworks.dnsSuffix`,`DNS suffix`),value:t.magicDnsSuffix||`—`,mono:!0},{label:n(`system.meshNetworks.peers`,`Peers`),value:String(t.peerCount)},{label:n(`system.meshNetworks.keyExpiry`,`Key expiry`),value:t.keyExpiry?gt(t.keyExpiry):`—`}].map(t=>e(`div`,{className:`flex items-baseline justify-between gap-3 text-xs`,children:[r(`span`,{className:`text-foreground-subtle shrink-0`,children:t.label}),r(`span`,{className:`text-foreground truncate ${t.mono?`font-mono`:``}`,children:t.value})]},t.label))})}function gt(e){let t=e-Date.now();if(t<0)return F.t(`system.meshNetworks.expiredAgo`,{when:Q(e)});let n=Math.floor(t/864e5);if(n>60)return new Date(e).toLocaleDateString();if(n>1)return F.t(`system.meshNetworks.expiryDays`,{count:n});let r=Math.floor(t/36e5);return r>1?F.t(`system.meshNetworks.expiryHours`,{count:r}):F.t(`system.meshNetworks.expiryMin`,{count:Math.max(1,Math.floor(t/6e4))})}function _t({peers:i,loading:a}){let{t:o}=I(),s=t(()=>i.map(e=>({...e,_id:e.id})),[i]),c=n(e=>{e&&navigator.clipboard?.writeText(e)},[]),l=t(()=>[{key:`hostname`,header:o(`system.meshNetworks.hostname`,`Hostname`),render:t=>e(`div`,{className:`flex flex-col`,children:[e(`div`,{className:`flex items-center gap-1.5`,children:[r(`span`,{className:`font-medium text-foreground`,children:t.hostname||o(`system.meshNetworks.unknown`,`(unknown)`)}),t.isSelf&&r(P,{variant:`info`,children:o(`common.self`)}),t.exitNodeOption&&r(P,{variant:`warning`,children:`exit-node`})]}),t.userLogin&&r(`div`,{className:`text-[10px] text-foreground-subtle truncate`,children:t.userLogin})]})},{key:`magicDns`,header:o(`system.meshNetworks.magicdns`,`MagicDNS`),render:t=>t.magicDns?e(`div`,{className:`flex items-center gap-1`,children:[r(`span`,{className:`font-mono text-xs truncate`,children:t.magicDns}),r(`button`,{onClick:()=>c(t.magicDns),className:`p-0.5 hover:bg-foreground-subtle/10 rounded`,"aria-label":o(`system.meshNetworks.copyMagicdns`,`Copy MagicDNS`),children:r(g,{className:`h-3 w-3 text-foreground-subtle`})})]}):r(`span`,{className:`text-foreground-subtle`,children:`—`})},{key:`addresses`,header:`IP`,render:t=>{let n=t.addresses[0]??``;return n?e(`div`,{className:`flex items-center gap-1`,children:[r(`span`,{className:`font-mono text-xs`,children:n}),r(`button`,{onClick:()=>c(n),className:`p-0.5 hover:bg-foreground-subtle/10 rounded`,"aria-label":o(`system.meshNetworks.copyIp`,`Copy IP`),children:r(g,{className:`h-3 w-3 text-foreground-subtle`})})]}):r(`span`,{className:`text-foreground-subtle`,children:`—`})}},{key:`connection`,header:o(`system.meshNetworks.connection`,`Connection`),render:t=>e(`div`,{className:`flex items-center gap-1.5`,children:[r(P,{variant:vt(t.connection),children:t.connection}),t.relay&&r(`span`,{className:`text-[10px] text-foreground-subtle font-mono`,children:t.relay})]})},{key:`routes`,header:o(`system.meshNetworks.routes`,`Routes`),render:e=>e.advertisedRoutes.length>0?r(`span`,{className:`text-[10px] font-mono text-foreground-subtle truncate`,children:e.advertisedRoutes.join(`, `)}):r(`span`,{className:`text-foreground-subtle`,children:`—`})},{key:`tx`,header:o(`system.meshNetworks.txRx`,`TX / RX`),render:t=>e(`span`,{className:`text-[10px] text-foreground-subtle font-mono`,children:[`↑ `,yt(t.txBytes),` · ↓ `,yt(t.rxBytes)]})},{key:`lastSeen`,header:o(`system.meshNetworks.lastSeen`,`Last seen`),render:e=>r(`span`,{className:`text-[10px] text-foreground-subtle`,children:e.lastSeenMs>0?Q(e.lastSeenMs):`—`})}],[c,o]);return a&&i.length===0?e(`div`,{className:`p-4 text-xs text-foreground-subtle`,children:[r(O,{className:`h-3 w-3 animate-spin inline mr-1`}),` `,o(`systemPage.meshNetworks.loadingPeers`)]}):i.length===0?r(`div`,{className:`p-4 text-xs text-foreground-subtle`,children:o(`system.meshNetworks.noPeersVisibleYourTailnet`,`No peers visible — your tailnet may be empty or the host is not joined.`)}):r(`div`,{className:`p-4`,children:r(de,{columns:l,rows:s,rowKey:e=>e._id,minWidthPx:820})})}function vt(e){return e===`direct`?`success`:e===`relay`?`warning`:`info`}function yt(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)}MB`:`${(e/1024/1024/1024).toFixed(2)}GB`}function Q(e){let t=Date.now()-e;return t<6e4?F.t(`system.meshNetworks.justNow`):t<36e5?F.t(`system.meshNetworks.agoMin`,{count:Math.round(t/6e4)}):t<864e5?F.t(`system.meshNetworks.agoHour`,{count:Math.round(t/36e5)}):F.t(`system.meshNetworks.agoDay`,{count:Math.round(t/864e5)})}function bt(e){return new Promise(t=>setTimeout(t,e))}var $=`/system/identity?tab=certificates`;function xt(){let{t}=I();return r(z,{embedded:!0,children:e(`div`,{className:p,children:[r(Ve,{nodeId:`hub`,addonIds:[`local-network`],level:`global`,title:t(`system.localAccess.lanHttp`,`LAN HTTP`),description:t(`system.localAccess.nativeAppsOnThisWi`,`Native apps on this Wi-Fi use http:// and skip the private certificate. The tunnel and this admin UI stay on HTTPS.`)}),e(`p`,{className:`text-xs text-foreground-subtle`,"data-testid":`https-certificate-hint`,children:[t(`system.localAccess.certificateMoved`,`The HTTPS certificate and the local CA are managed under`),` `,r(ze,{className:`underline`,to:$,children:t(`system.localAccess.certificateMovedLink`,`Identity → Certificates`)}),`.`]})]})})}o();function St({value:n,onChange:i}){let{t:a}=I(),{data:o}=ve({isCamera:!0,projection:`slim`}),s=t(()=>o===void 0?[{value:``,label:a(`system.networkDiagnostics.loadingCameras`,`Loading cameras…`)}]:o.length===0?[{value:``,label:a(`system.networkDiagnostics.noCameras`,`No cameras`)}]:[{value:``,label:a(`system.networkDiagnostics.pickACamera`,`Pick a camera`)},...o.toSorted((e,t)=>e.name.localeCompare(t.name)).map(e=>({value:String(e.id),label:`${e.name} (#${String(e.id)})`}))],[o,a]);return e(`label`,{className:`flex min-w-0 flex-col gap-1`,children:[r(`span`,{className:`text-[11px] text-foreground-subtle`,children:a(`system.networkDiagnostics.camera`,`Camera`)}),r(Ee,{value:n===null?``:String(n),disabled:o===void 0||o.length===0,onChange:e=>i(e.target.value===``?null:Number(e.target.value)),options:s})]})}function Ct(){let t=E(),[i,o]=a(null);return r(z,{embedded:!0,children:e(`div`,{className:p,"data-testid":`network-diagnostics`,children:[r(we,{loadServers:n(async()=>t.trpcClient.turnProvider.getTurnServers.query(),[t])}),r(Me,{trpc:t.trpcClient,serverUrl:b(),deviceId:i,cameraField:r(St,{value:i,onChange:o})})]})})}var wt=[`certificate`,`certificates`,`https`];function Tt(){let{t:e}=I(),[t]=Re();if(wt.includes(t.get(`tab`)??``))return r(Le,{to:$,replace:!0});let n=Ie(`/system/network`,{t:e,isAdmin:!0})??{icon:A,title:e(`system.network`,`Network`)};return r(Be,{icon:n.icon,title:n.title,defaultSection:`addresses`,sectionsLabel:`${n.title} sections`,sections:[{id:`local-access`,label:e(`systemPage.network.localAccess`,`Local access`),content:r(xt,{})},{id:`addresses`,label:e(`systemPage.network.networkAddresses`,`Network Addresses`),content:r(st,{})},{id:L.remoteAccess.tab,label:e(`systemPage.network.remoteAccess`,`Remote Access`),content:r(We,{}),ownedParams:R},{id:L.mesh.tab,label:e(`systemPage.network.meshNetworks`,`Mesh Networks`),content:r(dt,{}),ownedParams:R},{id:L.turn.tab,label:e(`systemPage.network.turnServers`,`TURN Servers`),content:r(Xe,{}),ownedParams:R},{id:`diagnostics`,label:e(`systemPage.network.diagnostics`,`Diagnostics`),content:r(Ct,{})}]})}export{Tt as NetworkPage};