@camstack/addon-admin-ui 1.2.517 → 1.2.519

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 (142) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/assets/{AddonAssetIcon-DaAStKC8.js → AddonAssetIcon-Do54wTZ7.js} +1 -1
  3. package/dist/assets/Addons-6_-wfXxF.js +5 -0
  4. package/dist/assets/{AdminPage-CgFhd3My.js → AdminPage-BmoKOToB.js} +1 -1
  5. package/dist/assets/{AdminSectionedPage-C9702pKD.js → AdminSectionedPage-BVRb5Xx_.js} +1 -1
  6. package/dist/assets/{AiProfiles-CZMD4KM-.js → AiProfiles-BDvnR_4v.js} +2 -2
  7. package/dist/assets/{BrokerEditorDialog-BCtpOmtb.js → BrokerEditorDialog-BGzqj_xB.js} +1 -1
  8. package/dist/assets/Build-Bt7G7Fl-.js +40 -0
  9. package/dist/assets/{Calendars-CvhWz72R.js → Calendars-0sdMS0h-.js} +1 -1
  10. package/dist/assets/Cluster-C8z_ezr0.js +1 -0
  11. package/dist/assets/ComposedDeviceEditDialog-DMHHX26S.js +1 -0
  12. package/dist/assets/CompositionBlockEditor-BN_Knc98.js +2 -0
  13. package/dist/assets/{CompositionEditorPage-CZQd9oj4.js → CompositionEditorPage-jHRMkJAB.js} +1 -1
  14. package/dist/assets/Data-BLCk3bRU.js +2 -0
  15. package/dist/assets/DeviceDetail-WuonpcW1.js +2 -0
  16. package/dist/assets/DeviceDoActionFields-QuNvGYh2.js +1 -0
  17. package/dist/assets/{Devices-60E3KVab.js → Devices-uoz9LDSC.js} +1 -1
  18. package/dist/assets/{EmbedPlayerPage-BCjssXwM.js → EmbedPlayerPage-B-NlJHwD.js} +1 -1
  19. package/dist/assets/{History-QHsS9OSz.js → History-Dvaf0xT6.js} +1 -1
  20. package/dist/assets/Identity-DfU1qxG7.js +1 -0
  21. package/dist/assets/IntegrationDetail-CRMLO8el.js +1 -0
  22. package/dist/assets/{IntegrationHub-YFOb5Q5f.js → IntegrationHub-BWv5Fg0o.js} +1 -1
  23. package/dist/assets/Integrations-BzA5bIzc.js +1 -0
  24. package/dist/assets/{Integrations-CAGCgM4m.js → Integrations-D76PKsKH.js} +1 -1
  25. package/dist/assets/{Library-CDBh4UY7.js → Library-CGtKaxY5.js} +1 -1
  26. package/dist/assets/Locations-6OyPx_9Z.js +3 -0
  27. package/dist/assets/{Logs-BzR8S8Az.js → Logs-73QHCsO8.js} +1 -1
  28. package/dist/assets/{MaskShapeCanvas-v1VFSWGn.js → MaskShapeCanvas-B599Qff8.js} +1 -1
  29. package/dist/assets/{MotionZonesSettings-sNv6UeyN.js → MotionZonesSettings-kGwQFrli.js} +1 -1
  30. package/dist/assets/{MyAccess-d7f5aurQ.js → MyAccess-aAaXYWh8.js} +1 -1
  31. package/dist/assets/Network-81XYmJI_.js +1 -0
  32. package/dist/assets/{NodeAddonsSettingsPanel-Dul-TVez.js → NodeAddonsSettingsPanel-4ZIViPki.js} +1 -1
  33. package/dist/assets/Notifications-C3Q-zMJT.js +1 -0
  34. package/dist/assets/Pipeline-BU1kCg0o.js +1 -0
  35. package/dist/assets/{PrivacyMaskSettings-BOFfKtZS.js → PrivacyMaskSettings-D3OKCG5L.js} +1 -1
  36. package/dist/assets/Recordings-X80n4tx4.js +1 -0
  37. package/dist/assets/{RemoteGrid-DwD_77yd.js → RemoteGrid-BC7RcI7j.js} +1 -1
  38. package/dist/assets/{ScanNetworkModal-DfCSNZP7.js → ScanNetworkModal-B-q8sfOu.js} +1 -1
  39. package/dist/assets/{SceneMonitorEditor-CYSd3nvA.js → SceneMonitorEditor-BWwBdarY.js} +1 -1
  40. package/dist/assets/SessionsList-BTc6C0Y8.js +2 -0
  41. package/dist/assets/{Showroom-BW0s66nO.js → Showroom-GvVEKdMA.js} +1 -1
  42. package/dist/assets/{System-lEmnBarz.js → System-8ayhyG8M.js} +1 -1
  43. package/dist/assets/{Templates-oi3TGvJ_.js → Templates-DIMuzzu_.js} +1 -1
  44. package/dist/assets/{Terminal-DSohGtV9.js → Terminal-CwX9MQHx.js} +3 -3
  45. package/dist/assets/{Viewer-B6FpTku6.js → Viewer-BzxcMFB5.js} +1 -1
  46. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DqPNLVRX.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DvIAWVsR.js} +1 -1
  47. package/dist/assets/{addon-icons-context-BAMZN6v3.js → addon-icons-context-D-3KCr36.js} +1 -1
  48. package/dist/assets/{archive-CQSA3no9.js → archive-sIPC64K9.js} +1 -1
  49. package/dist/assets/{assignment-candidates-CX47iOH5.js → assignment-candidates-C_UoiwJK.js} +1 -1
  50. package/dist/assets/{authed-media-Bk6ZG2lV.js → authed-media-BE3neYoh.js} +1 -1
  51. package/dist/assets/{bell-off-ByVFjmad.js → bell-off-DBYFNI8u.js} +1 -1
  52. package/dist/assets/{board-model-Cij0wyiz.js → board-model-CeWFKx9n.js} +1 -1
  53. package/dist/assets/{boxes-B8shBGyA.js → boxes-5j10egHw.js} +1 -1
  54. package/dist/assets/circle-slash-VFJ46qWN.js +1 -0
  55. package/dist/assets/client-BmfSvq-t.js +674 -0
  56. package/dist/assets/{cloud-upload-knnOuFf0.js → cloud-upload-CUkN17bl.js} +1 -1
  57. package/dist/assets/crop-DwwjG8X9.js +1 -0
  58. package/dist/assets/{device-integration-icon-CXZW9un_.js → device-integration-icon-BOTb2lo-.js} +1 -1
  59. package/dist/assets/device-picker-model-C2rxDYB3.js +1 -0
  60. package/dist/assets/dist-CGa31Bpn.js +674 -0
  61. package/dist/assets/{dist-DWGbpqHP.js → dist-dCyhYCji.js} +1 -1
  62. package/dist/assets/{file-up-DsJKDfNx.js → file-up-DF9281zn.js} +1 -1
  63. package/dist/assets/format-Ctn7h3o7.js +1 -0
  64. package/dist/assets/{hard-drive-download-3fltBasv.js → hard-drive-download-YoDQjZ6G.js} +1 -1
  65. package/dist/assets/{hostInit-Djg3zVjo.js → hostInit-BqZN7ExA.js} +1 -1
  66. package/dist/assets/i18n-CWf2gqjI.js +1 -0
  67. package/dist/assets/{icons-yMzKblPs.js → icons-CUtj9rug.js} +1 -1
  68. package/dist/assets/{index-Dvd8RKBK.js → index-3I8aJwfA.js} +3 -3
  69. package/dist/assets/{index-DrGgMc78.css → index-C0TfYmoA.css} +1 -1
  70. package/dist/assets/{key-DCYw0FNE.js → key-BpA5yjS5.js} +1 -1
  71. package/dist/assets/{key-round-CTD-QhVl.js → key-round-BbwlZYgP.js} +1 -1
  72. package/dist/assets/{layers-7Ihtoyz5.js → layers-Bxrx5612.js} +1 -1
  73. package/dist/assets/{linked-devices-model-n5gH_HKu.js → linked-devices-model-4X2JNgtv.js} +1 -1
  74. package/dist/assets/{list-ordered-oYfsQM3w.js → list-ordered-BQZRweJv.js} +1 -1
  75. package/dist/assets/{location-owned-usage-CT1Figq_.js → location-owned-usage-exyIAC5r.js} +1 -1
  76. package/dist/assets/{log-in-BzAjDKMU.js → log-in-BFtLVkKt.js} +1 -1
  77. package/dist/assets/{memory-stick-XgJPnz3h.js → memory-stick-65f0Nh--.js} +1 -1
  78. package/dist/assets/{message-square-plus-DObXI5UO.js → message-square-plus-Cz97-8Ea.js} +1 -1
  79. package/dist/assets/{mf-entry-bootstrap-0-8ecb92b3.js → mf-entry-bootstrap-0-4f81b329.js} +2 -2
  80. package/dist/assets/{mic-off-CFZpIFfk.js → mic-off-C90AfhxH.js} +1 -1
  81. package/dist/assets/{monitor-off-610T_Gdj.js → monitor-off-Kj0KouMn.js} +1 -1
  82. package/dist/assets/{monitor-smartphone-Dn0zJRqy.js → monitor-smartphone-dJjQFha0.js} +1 -1
  83. package/dist/assets/mount-C2rxDYB3.js +1 -0
  84. package/dist/assets/{player-overlays-CJHEGkWA.js → player-overlays-Cl9fdVyE.js} +1 -1
  85. package/dist/assets/{recycle-BDhcl0YV.js → recycle-B_n3HNql.js} +1 -1
  86. package/dist/assets/remoteEntry-Bgu2wj6M.js +1 -0
  87. package/dist/assets/{ruler-DRBBjPda.js → ruler-DFksgfFc.js} +1 -1
  88. package/dist/assets/{scan-eye-Cq1A21Jj.js → scan-eye-Dcs85qj4.js} +1 -1
  89. package/dist/assets/{scissors-_YyUi2Wc.js → scissors-DpVQCMjY.js} +1 -1
  90. package/dist/assets/{search-x-0cpMKp48.js → search-x-BUboqisx.js} +1 -1
  91. package/dist/assets/{send-BPU5cRG9.js → send-i8_gi4Wv.js} +1 -1
  92. package/dist/assets/{settings-2-L8TMaIKQ.js → settings-2-BuOeZPiK.js} +1 -1
  93. package/dist/assets/{shapes-DJVtgjGZ.js → shapes-DGstG7DR.js} +1 -1
  94. package/dist/assets/{sigma-DPXOWC0b.js → sigma-B0KIxXLC.js} +1 -1
  95. package/dist/assets/{speaker-CokRNflr.js → speaker-C7Ctczma.js} +1 -1
  96. package/dist/assets/src-Cjqv1L1_.js +67 -0
  97. package/dist/assets/{step-inspector-model-8FwvV-vd.js → step-inspector-model-CSluC3K5.js} +1 -1
  98. package/dist/assets/{table-2-DBJuUbJh.js → table-2-Bi2N6ehZ.js} +1 -1
  99. package/dist/assets/{timer-reset-D9k5wmF9.js → timer-reset-C-DbgYsd.js} +1 -1
  100. package/dist/assets/{unlink-Bs2RzKEu.js → unlink-DOrqvhrS.js} +1 -1
  101. package/dist/assets/{usb-BjhR3doW.js → usb-D21IcPqp.js} +1 -1
  102. package/dist/assets/use-device-bound-caps-DUbLU0h-.js +1 -0
  103. package/dist/assets/{use-scenes-feed-CT1HkH56.js → use-scenes-feed-Cc_FfCf0.js} +1 -1
  104. package/dist/assets/{use-stationary-objects-HuzwOvOv.js → use-stationary-objects-C9cIQpEH.js} +1 -1
  105. package/dist/assets/useEventInvalidation-C2rxDYB3.js +1 -0
  106. package/dist/assets/{useNodeUrlSelection-B82QsLnx.js → useNodeUrlSelection-BmuHzJCe.js} +1 -1
  107. package/dist/assets/user-round-CCHLAyrG.js +1 -0
  108. package/dist/assets/{user-x-lD1eMNGr.js → user-x-dk19_EsK.js} +1 -1
  109. package/dist/assets/{variable-f5kvdTkN.js → variable-jCYthbGt.js} +1 -1
  110. package/dist/assets/{video-DNdx4dbt.js → video-BbvU47vV.js} +1 -1
  111. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BwnfAs-v.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DOT_MvML.js} +2 -2
  112. package/dist/index.html +10 -10
  113. package/dist/server/addon.js +90 -7
  114. package/package.json +1 -1
  115. package/dist/assets/Addons-Do9U7LcM.js +0 -5
  116. package/dist/assets/Build-BgRIdgDr.js +0 -40
  117. package/dist/assets/Cluster-GaxjV7h4.js +0 -1
  118. package/dist/assets/ComposedDeviceEditDialog-B1R5Dm6Q.js +0 -1
  119. package/dist/assets/CompositionBlockEditor-CKIEoswd.js +0 -2
  120. package/dist/assets/Data-CZij0oVZ.js +0 -2
  121. package/dist/assets/DeviceDetail-DIqK-Pxm.js +0 -2
  122. package/dist/assets/DeviceDoActionFields-DAsmzytT.js +0 -1
  123. package/dist/assets/Identity-Ck9bdqfT.js +0 -1
  124. package/dist/assets/IntegrationDetail-Cggj8UuG.js +0 -1
  125. package/dist/assets/Integrations-CM_r2esc.js +0 -1
  126. package/dist/assets/Locations-C5J-xGpv.js +0 -3
  127. package/dist/assets/Network-D5kLXsF4.js +0 -1
  128. package/dist/assets/Notifications-BCXKW0H1.js +0 -1
  129. package/dist/assets/Pipeline-DQ0gg-q3.js +0 -1
  130. package/dist/assets/Recordings-CSEh6SKS.js +0 -1
  131. package/dist/assets/SessionsList-e-yTK3Ce.js +0 -2
  132. package/dist/assets/circle-slash-CYJP5692.js +0 -1
  133. package/dist/assets/client-B3Uh4h4a.js +0 -674
  134. package/dist/assets/crop-CO-cCOHc.js +0 -1
  135. package/dist/assets/device-picker-model-CLwbjCLX.js +0 -1
  136. package/dist/assets/dist-2sWhwHC7.js +0 -674
  137. package/dist/assets/i18n-qDGVD_PF.js +0 -1
  138. package/dist/assets/mount-CLwbjCLX.js +0 -1
  139. package/dist/assets/remoteEntry-BkNPWH4W.js +0 -1
  140. package/dist/assets/src-CzDAA2fz.js +0 -67
  141. package/dist/assets/useEventInvalidation-CLwbjCLX.js +0 -1
  142. package/dist/assets/user-round-reErwwaE.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{Di as l,Fn as u,Ji as d,Oi as f,Pr as p,T as m,V as h,Vt as g,Wn as _,ca as v,dt as y,er as b,gt as x,ht as S,st as C}from"./player-overlays-CJHEGkWA.js";import{$i as w,$n as T,$t as E,Ai as D,An as O,Bi as k,Di as A,Dn as j,En as ee,Fi as M,Fn as te,Gi as N,Gn as P,Hn as F,Ii as I,In as L,Ji as R,Ki as ne,Kn as re,Kt as ie,Li as ae,Ln as oe,Mi as se,Mn as ce,Nn as le,On as ue,Pn as de,Qi as fe,Qn as pe,Ri as z,Rn as me,Ta as he,Tn as ge,Ui as _e,Un as ve,Wn as ye,Xi as be,Yi as xe,Zi as Se,_a as Ce,aa as we,ba as Te,ca as Ee,en as De,er as Oe,fr as ke,gn as Ae,ia as je,ji as Me,jn as Ne,kn as Pe,na as Fe,nn as Ie,nr as Le,oa as Re,qi as ze,qn as Be,ra as Ve,rr as He,sa as Ue,ta as We,tr as Ge,ur as Ke,va as qe,xa as Je,ya as Ye,zi as Xe}from"./client-B3Uh4h4a.js";import{i as Ze,n as Qe,r as $e,t as et}from"./sigma-DPXOWC0b.js";import{t as tt}from"./boxes-B8shBGyA.js";import{Ad as B,Ar as V,B as nt,Bn as rt,Br as it,Fr as at,Gr as ot,Ir as st,Jd as ct,Jn as lt,Kd as ut,Lr as dt,Mo as ft,Nt as pt,Pr as mt,Qa as ht,Rr as gt,Sr as _t,St as vt,Td as H,Tn as yt,Ur as bt,Vn as xt,Vr as St,Wa as Ct,Xo as wt,_r as Tt,br as Et,ci as Dt,cs as Ot,ei as U,fi as kt,gr as At,hi as jt,jd as Mt,jo as Nt,js as Pt,ls as Ft,mi as It,pi as Lt,s as Rt,tf as zt,vr as Bt,xr as Vt,zn as Ht,zr as Ut}from"./src-CzDAA2fz.js";import{t as W}from"./i18n-qDGVD_PF.js";import{t as G}from"./useTranslation-BJr-n0es.js";import{h as Wt,mr as Gt,pr as Kt}from"./index-Dvd8RKBK.js";import{n as qt}from"./assignment-candidates-CX47iOH5.js";s();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 K(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:K(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({device:t,action:n,onPick:r}){let{t:a}=G(),o=St(t.id,`compact`,t.name),s=[t.container===null||o.includes(t.container)?null:a(`customize.suggest.in`,{container:t.container}),t.detail].filter(e=>e!==null&&e!==``).join(` · `);return e(`li`,{className:`${m} flex items-center gap-3`,children:[e(`div`,{className:`min-w-0 flex-1`,children:[i(`div`,{className:`text-xs text-foreground break-words`,children:o}),s!==``&&i(`div`,{className:`text-[11px] text-foreground-subtle break-words`,children:s})]}),i(U,{variant:`outline`,size:`sm`,"aria-label":a(n===`add`?`customize.suggest.addNamed`:`customize.suggest.useNamed`,{name:o}),onClick:()=>r(t.id),children:a(n===`add`?`customize.suggest.add`:`customize.suggest.use`)})]})}function en({location:t,devices:n,action:r,onPick:a,onPickAll:o}){let{t:s}=G();if(n.length===0)return null;let c=s(`customize.suggest.heading`,{location:t});return e(`section`,{"aria-label":c,className:`flex flex-col gap-1`,children:[e(`div`,{className:`flex min-h-7 items-center gap-2`,children:[i(`h3`,{className:`${h} min-w-0 flex-1`,children:c}),o!==void 0&&n.length>1&&i(U,{variant:`ghost`,size:`sm`,onClick:o,children:s(`customize.suggest.addAll`,{count:n.length})})]}),i(`ul`,{className:`flex flex-col divide-y divide-border rounded-md border border-border`,children:n.map(e=>i($t,{device:e,action:r,onPick:a},e.id))})]})}function tn(e,t){let n=zt.useQueries(n=>e.map(e=>n.deviceManager.listDeviceIdsByCaps({capNames:[e]},{enabled:t})));return qt(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 nn(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function rn(e){return Object.hasOwn(F,e)}function an(e){return rn(e)?F[e].targets:[]}function on(e,t){let n=an(e).find(e=>e.id===t);return n?.cardinality===`keyedArray`?n.fields??[]:[]}function sn(e,t){return an(e).find(e=>e.id===t)?.traits??[]}function cn(e,t){return e.caps.flatMap(e=>{let n=ln(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 ln(e,t){if(e===null)return null;let n=K(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function un(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 dn(e,t,n,r){let i=on(e,t).find(e=>e.path===n);if(i===void 0)return{ok:!1,reason:`kind`};let a=un(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(nn);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 fn(e,t,n){return on(e,t).find(e=>e.path===n)?.enumValues??[]}function pn(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 mn(e){if(e.transforms.includes(`identity`))return{kind:`identity`};if(e.transforms.includes(`threshold`)){let t=gn(e.declared,`threshold`);if(t!==null)return hn(t)}if(e.transforms.includes(`linear`)){let t=gn(e.declared,`linear`);if(t!==null)return hn(t)}return{kind:`invert`}}function hn(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 _n(e);case`enum-map`:return{kind:`identity`}}}function gn(e,t){return e.find(e=>e.kind===t)??null}function _n(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 vn(e){let t=me({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 yn({control:t,transforms:n,declared:r,unit:a,value:o,onChange:s}){let{t:c}=G();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(H,{"aria-label":c(`customize.scalar.stepTransform`),value:o.kind,options:n.map(e=>({value:e,label:c(`customize.scalar.transform.${e}`)})),onChange:e=>s(bn(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(lt,{checked:o.kind===`invert`,onChange:e=>s(e.target.checked?{kind:`invert`}:{kind:`identity`})}),c(`customize.scalar.invert`)]}):null,o.kind===`threshold`&&i(Sn,{declared:r,unit:a,value:o,onChange:s}),o.kind===`linear`&&i(wn,{declared:r,value:o,onChange:s})]})}function bn(e,t){let n=gn(t,xn(e));return n===null?e===`invert`?{kind:`invert`}:{kind:`identity`}:hn(n)}function xn(e){return e===`invert`||e===`threshold`||e===`linear`||e===`enum-map`?e:`identity`}function Sn({declared:t,unit:n,value:r,onChange:a}){let{t:o}=G(),s=n??``,c=gn(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(H,{"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(q,{label:o(`customize.scalar.threshold`,{unit:s}),value:r.threshold,onChange:e=>a({...r,threshold:e})}),i(q,{label:o(`customize.scalar.startDwell`),value:r.startDwellMs/1e3,onChange:e=>a({...r,startDwellMs:e*1e3})}),i(q,{label:o(`customize.scalar.stopDwell`),value:r.stopDwellMs/1e3,onChange:e=>a({...r,stopDwellMs:e*1e3})})]})}function Cn(e){return e===null||e.kind!==`linear`||e.clampMin===void 0||e.clampMax===void 0?null:{min:e.clampMin,max:e.clampMax}}function wn({declared:t,value:n,onChange:r}){let{t:a}=G(),o=Cn(gn(t,`linear`));return e(`div`,{className:`flex flex-col gap-2 text-[11px] text-foreground`,children:[i(q,{label:a(`customize.scalar.scale`),value:n.scale,onChange:e=>r({...n,scale:e})}),i(q,{label:a(`customize.scalar.offset`),value:n.offset,onChange:e=>r({...n,offset:e})}),o!==null&&i(q,{label:a(`customize.scalar.clampMin`),value:n.clampMin??o.min,onChange:e=>r({...n,clampMin:e,clampMax:n.clampMax??o.max})}),o!==null&&i(q,{label:a(`customize.scalar.clampMax`),value:n.clampMax??o.max,onChange:e=>r({...n,clampMin:n.clampMin??o.min,clampMax:e})})]})}function q({label:t,value:n,onChange:r}){return e(`label`,{className:`flex flex-col gap-1`,children:[t,i(B,{type:`number`,value:Number.isFinite(n)?n:0,onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&r(t)}})]})}var Tn=`kind`,En=`unit`,Dn=`unit-unknown`,On=`compile`,kn=`dwell`,An=`no-value`,jn=`empty`;function Mn(e){return`customize.scalar.previewFailure.${e}`}function Nn(e){return e===`compile`||e===`dwell`||e===`no-value`||e===`empty`}function Pn(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function Fn(e,t){let n=Object.entries(F).find(([t])=>t===e)?.[1];return n===void 0?null:n.targets.find(e=>e.id===t)??null}function In(e,t){return Fn(e,t)?.path??null}function Ln(e,t){return e.caps.flatMap(e=>{let n=zn(t,e.cap);return e.fields.filter(e=>e.item!==!0).map(t=>({cap:e.cap,path:t.path,kind:t.kind,unit:Rn(n,e.cap,t.path)}))})}function Rn(e,t,n){return e??De(t,n)??null}function zn(e,t){if(e===null)return null;let n=K(e[t],`unit`);return typeof n==`string`&&n.length>0?n:null}function Bn(e,t){if(t.kind===`boolean`){let n=Te[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 Vn(e,t,n){let r=Fn(e,t);if(r===null||r.cardinality!==`scalar`||n.kind===`enum`)return{ok:!1,reason:Tn};let i=Bn(r.sources,n);if(i===null)return{ok:!1,reason:Tn};if(i.requiredUnit!==void 0&&n.unit===null)return{ok:!1,reason:Dn};if(i.requiredUnit!==void 0&&n.unit!==i.requiredUnit)return{ok:!1,reason:En};let a=i.transformKinds.filter(Pn);return a.length===0?{ok:!1,reason:Tn}:{ok:!0,valueKind:n.kind,sourceUnit:i.requiredUnit??null,transforms:a,declared:i.transforms}}function Hn(e,t){return t.find(t=>t===e)??null}function Un({mode:t,modes:n,name:r,onChange:a}){let{t:o}=G();return n.length===0?null:e(`div`,{className:`flex flex-col gap-1`,children:[i(H,{"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=Hn(e.target.value,n);t!==null&&a(t)}}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:o(`customize.motion.modeLine.${t}`)})]})}var Wn={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 Gn(e,t){return t.startsWith(`it`)?e.it:e.en}function Kn(e){if(!(`unit`in e))return;let t=e.unit;return typeof t==`string`&&t.length>0?t:void 0}function qn(e,t){let n=Ae[e]?.noun;return n===void 0?e.split(`-`).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):Gn(n,t)}function J(e,t,n){let r=Ae[e]?.state?.find(e=>e.field===t);if(r!==void 0){let e=Gn(r.label,n),t=Kn(r);return t===void 0?e:`${e} (${t})`}let i=Wn[t];return i===void 0?t:Gn(i,n)}function Jn(e){return e===`single`?`values`:`devices`}function Yn(e){return e<=0?null:`values`}function Xn(){return`devices`}function Zn(e,t){return!e&&(t.seenDevice||t.step!==`devices`)?{seenDevice:!1,step:`devices`}:e&&!t.seenDevice?{seenDevice:!0,step:`values`}:null}function Qn(e,t){return e===t}function $n(e,t,n){let r=Qn(e,t);return n?r?`flex min-h-0 flex-col`:`hidden min-h-0 flex-col sm:flex`:r?void 0:`hidden sm:block`}function er({step:t,devices:n,values:r,back:a,onBack:o,done:s,onDone:c,fillHeight:u=!1}){return e(`div`,{"data-testid":`source-selector`,"data-step":t,className:u?`flex min-h-0 flex-1 flex-col gap-3 sm:grid sm:grid-cols-2 sm:grid-rows-[minmax(0,1fr)] sm:gap-4`:`flex flex-col gap-3 sm:grid sm:grid-cols-2 sm:gap-4`,children:[e(`div`,{"data-testid":`source-selector-devices`,className:$n(t,`devices`,u),children:[s!==null&&e(`div`,{className:`mb-2 flex items-center justify-between gap-2 sm:hidden`,children:[i(`p`,{"data-testid":`source-selector-picked-count`,className:`text-[11px] text-foreground-muted`,children:s.countLabel}),i(U,{size:`sm`,"data-testid":`source-selector-done`,disabled:s.disabled,onClick:c,children:s.label})]}),n]}),e(`div`,{"data-testid":`source-selector-values`,className:$n(t,`values`,u),children:[a!==null&&e(U,{variant:`ghost`,size:`sm`,className:`mb-2 sm:hidden`,"data-testid":`source-selector-back`,"aria-label":a.ariaLabel,onClick:o,children:[i(l,{className:`size-3`}),a.label]}),u?i(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:r}):r]})]})}function tr(e){return[...new Set(e.accept.map(e=>e.cap))]}function nr(e,t){let n=new Set(tr(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 rr(e,t){return e.filter(e=>cr(t,e)&&lr(t,e))}function ir(e,t){return t.history.required?e.filter(e=>cr(t,e)&&!ur(e)):[]}function ar(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 or(e){if(e.selectedIds.length>e.request.max)return{members:e.previous.map(mr),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=sr(r,e);return i===null?(t.push(n),[]):[pr(r,i.cap,i.fieldPath)]}),refused:null,needsField:t}}function sr(e,t){if(t.choiceDeviceId===e.id&&t.choice!==null&&dr(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&&dr(t.request,n))return n;let r=t.request.fieldChoice===`first-match`?t.request.accept.filter(t=>e.caps.includes(t.cap)):t.request.accept,i=t.request.fieldChoice===`first-match`||r.length===1?r[0]:void 0;return i===void 0?null:{cap:i.cap,fieldPath:i.fieldPath}}function cr(e,t){return e.accept.some(e=>e.cap===t.cap&&e.fieldPath===t.fieldPath&&e.valueKind===t.kind)}function lr(e,t){return!e.history.required||ur(t)}function ur(e){return M(e.cap)[e.fieldPath]!==void 0}function dr(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 pr(e,t,n){return{source:{addonId:e.addonId,stableId:e.stableId},cap:t,fieldPath:n}}function mr(e){return{source:{addonId:e.source.addonId,stableId:e.source.stableId},cap:e.cap,fieldPath:e.fieldPath}}function hr(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 gr(e,t,n=bt(`en`)){return Ut(e,`compact`,ot(t),n)}function _r(e){return e.map(e=>({id:e.id,name:e.name,type:e.type,parentDeviceId:e.parentDeviceId,...e.location===null?{}:{location:e.location}}))}function vr(e,t){return e===`pending`||t.kind===`pending`?`pending`:e===`error`||t.kind===`unknown`?`failed`:`answered`}function yr(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 br(e){return e.caps.flatMap(e=>e.fields.flatMap(t=>t.item===!0?[]:[{cap:e.cap,fieldPath:t.path,kind:t.kind}]))}function xr(e,t,n){return t?e==null?n:Qt(e,!0):`…`}function Sr({device:t,request:n,members:r,onChoose:a}){let{t:o,i18n:s}=G(),c=Nt({deviceId:t.id}),l=Ft({deviceId:t.id}),u=c.status===`success`?c.data:{caps:[]},d=rr(br(u),n),f=ir(br(u),n),p=`helper-member-value-${t.id}`;return e(`section`,{className:`flex flex-col gap-1`,"data-testid":`helper-member-section-${t.id}`,children:[i(`h3`,{className:`text-[11px] font-medium text-foreground`,children:i(gt,{device:t,form:`compact`})}),c.status===`pending`||l.status===`pending`?i(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:o(`customize.picker.loadingFields`)}):c.status===`error`?i(V,{title:o(`customize.picker.fieldsFailed`),message:c.error?.message??``}):d.length===0?i(`p`,{className:`text-[11px] text-foreground-muted`,children:o(`helper.noUsableValue`)}):i(`ul`,{className:`flex flex-col gap-1`,children:d.map(n=>{let c=r.some(e=>e.source.addonId===t.addonId&&e.source.stableId===t.stableId&&e.cap===n.cap&&e.fieldPath===n.fieldPath),u=l.status===`success`?K(l.data[n.cap],n.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:p,checked:c,"data-testid":`helper-value-${t.id}-${n.cap}.${n.fieldPath}`,onChange:()=>a(n)}),i(`span`,{children:J(n.cap,n.fieldPath,s.language)}),i(`span`,{className:`text-foreground-muted`,children:xr(u,l.status===`success`,o(`helper.valueUnknown`))})]})},`${n.cap}.${n.fieldPath}`)})}),f.length>0&&i(`p`,{className:`text-[11px] text-foreground-muted`,"data-testid":`helper-no-history`,children:o(`helper.noHistory`)})]})}function Cr({request:t,enabled:r,members:a,onMembersChange:s,onRefuse:c,fillHeight:l=!1}){let{t:u,i18n:d}=G(),[f,p]=o([]),[m,h]=o(`devices`),g=ft({projection:`slim`}),_=n(()=>g.status===`success`?Yt(g.data):[],[g.status,g.data]),v=tn(n(()=>tr(t),[t]),r),y=n(()=>v.kind===`known`?nr(yr(_,v.value),t):{compatible:[],incompatible:[]},[v,_,t]),b=vr(g.status,v),x=ar(a,y.compatible),S=[...f,...x.filter(e=>!f.includes(e))].filter(e=>y.compatible.some(t=>t.id===e)),C=n(()=>_r(y.compatible.map(wr)),[y.compatible]),w=(e,n,r)=>{if(v.kind!==`known`)return;let i=or({request:t,devices:y.compatible,selectedIds:e,previous:a,choiceDeviceId:n,choice:r});if(i.refused===`max`){c({code:`max`,max:t.max});return}c(null),s(i.members)},T=e(`div`,{className:l?`flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto`:`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:u(`helper.pickMembers`)}),g.status===`error`?i(V,{title:u(`customize.picker.devicesFailed`),message:g.error?.message??``}):v.kind===`unknown`?i(V,{title:u(`customize.picker.devicesFailed`),message:v.reason}):i(nt,{devices:C,listState:b,value:S,selection:`multiple`,groupBy:`location`,onChange:e=>{p(e),w(e,null,null)},noun:`device`,showAll:!0,testId:`helper-member-picker`})]}),E=S.flatMap(e=>{let t=y.compatible.find(t=>t.id===e);return t===void 0?[]:[t]});return i(er,{step:m,devices:T,values:i(`div`,{className:`flex min-h-0 flex-col gap-3`,children:E.length===0?i(`p`,{className:`text-[11px] text-foreground-subtle`,children:u(`helper.pickMembersHint`)}):E.map(e=>i(Sr,{device:e,request:t,members:a,onChoose:t=>w(Tr(S,e.id),e.id,t)},e.id))}),back:S.length===0?null:{label:u(`customize.sourceSelector.backToDevices`),ariaLabel:u(`customize.sourceSelector.backToDevices`)},onBack:()=>h(Xn()),done:{countLabel:u(`customize.sourceSelector.pickedCount`,{count:S.length}),label:u(`customize.sourceSelector.done`),disabled:S.length===0},onDone:()=>{let e=Yn(S.length);e!==null&&h(e)},fillHeight:l})}function wr(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 Tr(e,t){return e.includes(t)?e:[...e,t]}function Er(e,t){let n=Je[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 Dr(e,t,n){let r=Te[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:Er(e,t)!==null}function Or(e,t){return t===void 0?null:e.find(e=>e.addonId===t.addonId&&e.stableId===t.stableId)??null}function kr(e,t,n,r,i){let a=e.find(e=>e.addonId===t.addonId&&e.stableId===t.stableId),o=r===`pulse`?Je[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 Ar(e){return`${e.addonId}/${e.stableId}/${e.cap}.${e.fieldPath}`}function jr(e,t){let n=Ar(t);return e.filter(e=>Ar(e)!==n)}function Mr(e,t,n){let r=Ar(t);return e.map(e=>Ar(e)===r?{...e,mode:n}:e)}function Nr({edges:t,edge:n,onChange:r}){let{t:a}=G();return t.length===0?null:e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[a(`customize.event.edge`),i(H,{"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 Pr({label:t,value:n,onChange:r}){return e(`label`,{className:`flex flex-col gap-1 text-[11px] text-foreground`,children:[t,i(B,{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 Fr(e){return Object.hasOwn(F,e)}function Ir(e,t){return Fr(e)?F[e].targets.find(e=>e.id===t)??null:null}function Lr(e){let t=Ir(e.cap,e.targetId);if(t===null)return[];if(t.cardinality===`keyedArray`){let t=e.fieldPath;return t===void 0?[]:on(e.cap,e.targetId).find(e=>e.path===t)?.sources??[]}return t.sources}function Rr(e){return{cap:e.cap,path:e.path,kind:e.kind,unit:e.unit}}function zr(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 Br(e){return e===`identity`||e===`invert`||e===`threshold`||e===`linear`}function Vr(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(Br);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 Hr(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=Ir(e.cap,e.targetId);if(n?.cardinality===`event`&&t.kind===`boolean`&&Bn(Lr(e),Rr(t))!==null)return{kind:`direct`};let r=Lr(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?zr(r,t):Bn(r,Rr(t));return a===null?{kind:`incompatible`,reason:`kind`}:Vr(a,t)}function Ur(e,t){let n=ve[e];return n===void 0?!1:Object.values(n).includes(t)}function Y(){return Object.keys(ve)}function Wr(e,t){if(t.kind===`binary`)return e.some(e=>Object.hasOwn(Te,e));if(t.kind===`switch`)return e.includes(`switch`);if(t.kind===`numeric`){let n=t.requiredUnit;return n===void 0?e.some(e=>Y().includes(e)||e===`numeric-sensor`):n===`W`?e.some(e=>e===`numeric-sensor`||e===`power-meter`||Ur(e,n)):e.some(e=>Ur(e,n))}return t.kind===`field`?e.some(e=>Y().includes(e)||e===`numeric-sensor`||e===`battery`):t.kind===`enum`?e.includes(`consumables`)||e.some(e=>Y().includes(e)):!1}function Gr(e,t){if(t.pickerTargetKind!==void 0||t.acceptAnyField===!0)return!0;let n=Lr(t);return n.length===0?!1:n.some(t=>Wr(e.caps,t))}function Kr(e,t,n){let r=[],i=[];for(let a of e)a.id!==n&&(Gr(a,t)?r.push(a):i.push(a));return{compatible:r,incompatible:i}}function qr(e,t,n){let r=new Map,i=[];for(let a of e){let e=Hr(t,a),o=J(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:qn(e,n),rows:t.toSorted((e,t)=>e.label.localeCompare(t.label))})),incompatible:i}}function Jr(e){return Ir(e.cap,e.targetId)?.cardinality===`keyedArray`&&e.fieldPath!==void 0}function Yr(e){if(e.pickerTargetKind!==void 0)return[];if(e.acceptAnyField===!0)return Y();let t=Lr(e),n=new Set;for(let e of t)if(e.kind===`binary`)for(let e of Object.keys(Te))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 Y())(e.requiredUnit===void 0||Ur(t,e.requiredUnit))&&n.add(t)}else if(e.kind===`field`){n.add(`battery`),n.add(`numeric-sensor`);for(let e of Y())n.add(e)}else if(e.kind===`enum`){n.add(`consumables`);for(let e of Y())n.add(e)}return[...n]}function Xr(e,t,n,r,i){let a=Lr(e);if(a.length===0)return[];let o=Ln(t,i).filter(e=>e.kind===`boolean`),s=[];for(let e of o){if(Bn(a,e)===null||n===`pulse`&&!Dr(t,e.cap,e.path))continue;let o=i===null?void 0:K(i[e.cap],e.path);s.push({cap:e.cap,path:e.path,kind:`boolean`,unit:null,currentText:Qt(o,r)})}return s}function Zr(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)})):(Jr(e)?cn(t,r):Ln(t,r)).map(e=>{let t=r===null?void 0:K(r[e.cap],e.path);return{cap:e.cap,path:e.path,kind:e.kind,unit:e.unit,currentText:Qt(t,n)}}):Xr(e,t,a,n,r)}function Qr(e,t,n){return n!==null&&e.parentDeviceId===n?0:e.parentDeviceId===t?1:null}function $r(e,t,n){let r=t.find(e=>e.id===n),i=r?.parentDeviceId??null,a=t.find(e=>e.id===(i??n));if(r===void 0||a===void 0)return null;let o=e.flatMap(e=>{let t=Qr(e,n,i);return t===null?[]:[{candidate:e,place:t}]}).toSorted((e,t)=>e.place-t.place||e.candidate.name.localeCompare(t.candidate.name));return o.length===0?null:{container:a.name,devices:o.map(e=>e.candidate)}}s();function ei(e,t){return e===`pending`||t.kind===`pending`?`pending`:e===`error`?`failed`:`answered`}function ti(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 ni(e,t){return e.kind===`direct`?t(`customize.sourceSelector.direct`):e.kind===`conversion`?t(`customize.sourceSelector.withConversion`,{name:t(`customize.scalar.transform.${ri(e.name)}`)}):``}function ri(e){return e===`scale`?`linear`:e===`enum-map`?`enumMap`:e}function ii(e){return e.kind===`members`?i(Cr,{...e}):i(ai,{...e})}function ai(t){let{t:r,i18n:s}=G(),[l,u]=o(`devices`),[d,p]=o(!1),m=Zn(t.device!==null,{seenDevice:d,step:l});m!==null&&(p(m.seenDevice),u(m.step));let[h,g]=o(!1),[_,v]=o(!1),y=ft({projection:`slim`}),b=t.kind===`formula`?t.deviceFilter:void 0,x=n(()=>{if(y.status!==`success`)return[];let e=Yt(y.data);return b===void 0?e:e.filter(b)},[y.status,y.data,b]),S=tn(n(()=>Yr(t.destination),[t.destination]),t.enabled),{compatible:C,incompatible:w}=n(()=>S.kind===`known`?Kr(ti(x,S.value),t.destination,t.hostId):{compatible:[],incompatible:[]},[S,x,t.destination,t.hostId]),T=n(()=>S.kind===`known`?$r(C,ti(x,S.value),t.hostId):null,[S,C,x,t.hostId]),E=ei(y.status,S),D=t.device?.id??0,O=Nt({deviceId:D}),k=Ft({deviceId:t.device===null?0:D}),A=O.status===`success`?O.data:{caps:[]},j=t.kind===`event`?t.shape:null,ee=Zr(t.destination,A,k.status===`success`,k.status===`success`?k.data:null,t.device,j),M=t.kind===`event`?t.devicePickerTestId:`source-selector-device-picker`,{groups:te,incompatible:N}=qr(ee,t.destination,s.language),P=si(t,A,k.status===`success`?k.data:null),F=e=>{let n=e[0];if(n===void 0){t.onDeviceChange(null),t.kind!==`event`&&t.onFieldChange(null),u(Xn());return}if(t.device?.id!==n){let e=x.find(e=>e.id===n)??null;t.onDeviceChange(e),t.kind!==`event`&&t.onFieldChange(null)}u(Jn(`single`))},I=t.kind===`event`?ee[0]??null:null,L=t.kind===`event`?t:null;a(()=>{if(L===null||L.device===null||I===null)return;let e=kr(L.picked,L.device,{cap:I.cap,path:I.path},L.shape,L.sourceModes[0]??`in-addition`);e!==null&&L.onPickedChange(e)},[L,I]);let R=n(()=>_r(C),[C]),ne=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})}),y.status===`error`?i(V,{title:r(`customize.picker.devicesFailed`),message:y.error?.message??``}):e(c,{children:[T!==null&&i(en,{location:T.container,devices:T.devices.map(e=>({id:e.id,name:e.name,container:null,detail:null})),action:`use`,onPick:e=>F([e])}),i(nt,{devices:R,listState:E,value:t.device===null?[]:[t.device.id],selection:`single`,groupBy:`location`,onChange:F,noun:`device`,showAll:!0,testId:M})]}),w.length>0&&e(`div`,{"data-testid":`source-incompatible-devices`,children:[e(U,{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(f,{className:`size-3 transition-transform ${h?`rotate-180`:``}`}),r(`customize.sourceSelector.notCompatibleDevices`,{count:w.length})]}),h&&i(`ul`,{className:`mt-1 flex flex-col gap-0.5 pl-4 text-[11px] text-foreground-subtle`,children:w.map(e=>i(`li`,{children:e.name},e.id))})]})]}),re=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,` · `,J(n.cap,n.fieldPath,s.language)]}),t.shape===`span`&&n.mode!==void 0&&i(Un,{mode:n.mode,modes:t.sourceModes,name:n.stableId,onChange:e=>t.onPickedChange(Mr(t.picked,n,e))}),i(U,{variant:`ghost`,size:`sm`,onClick:()=>t.onPickedChange(jr(t.picked,n)),children:r(`customize.event.clear`)})]},`${n.addonId}/${n.stableId}/${n.cap}.${n.fieldPath}`))}):null,ie=t.kind===`event`?e(`div`,{className:`flex flex-col gap-2`,children:[t.shape===`pulse`&&e(c,{children:[i(Nr,{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(B,{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(Pr,{label:r(`customize.event.timeout`),value:t.timeoutSec,onChange:t.onTimeoutSecChange}),t.cooldownSec!==null&&i(Pr,{label:r(`customize.event.cooldown`),value:t.cooldownSec,onChange:t.onCooldownSecChange})]})]}):null;return i(er,{step:l,devices:ne,values:e(`div`,{className:`flex min-h-0 flex-col gap-2`,children:[re,t.device!==null&&i(gt,{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`)}):O.status===`pending`?i(`p`,{role:`status`,className:`text-[11px] text-foreground-subtle`,children:r(`customize.picker.loadingFields`)}):O.status===`error`?i(V,{title:r(`customize.picker.fieldsFailed`),message:O.error?.message??``}):e(`div`,{className:`flex flex-col gap-3`,children:[t.kind===`event`?i(li,{fields:I===null?[]:[I],language:s.language,emptyLabel:r(`customize.sourceSelector.noStateField`)}):null,t.kind!==`event`&&te.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=oi(t,A,k.status===`success`?k.data:null,n.cap,n.path);e!==null&&e.ok&&t.onTransformChange(mn(e))}}),i(`span`,{children:n.label}),i(`span`,{className:`text-foreground-muted`,children:n.currentText}),i(`span`,{className:`text-foreground-subtle`,children:ni(n.compatibility,r)})]})},`${n.cap}.${n.path}`))})]},n.cap)),t.kind!==`event`&&N.length>0&&e(`div`,{"data-testid":`source-incompatible-values`,children:[e(U,{variant:`ghost`,size:`sm`,className:`h-auto w-full justify-start gap-1 px-0 text-[11px] text-foreground-muted`,onClick:()=>v(e=>!e),children:[i(f,{className:`size-3 transition-transform ${_?`rotate-180`:``}`}),r(`customize.sourceSelector.otherValues`)]}),_&&i(`ul`,{className:`mt-1 flex flex-col gap-1 pl-4 text-[11px] text-foreground-subtle`,children:N.map(t=>e(`li`,{children:[t.label,` · `,t.currentText]},`${t.cap}.${t.path}`))})]})]}),t.kind===`scalar`&&P!==null&&P.ok&&i(yn,{control:pn(P.transforms),transforms:P.transforms,declared:P.declared,unit:P.sourceUnit,value:t.transform,onChange:t.onTransformChange}),t.kind===`keyed`&&P!==null&&P.ok&&t.field!==null&&i(yn,{control:pn(P.transforms),transforms:P.transforms,declared:P.declared,unit:P.sourceUnit,value:t.transform,onChange:t.onTransformChange}),ie]}),back:t.device===null?null:{label:i(gt,{device:t.device,form:`compact`}),ariaLabel:r(`customize.sourceSelector.backToDevice`,{name:t.device.name})},onBack:()=>u(Xn()),done:null,onDone:()=>void 0})}function oi(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:ci(n,e.cap),enumValues:t.enumValues??[]}))).find(e=>e.cap===r&&e.path===i);if(a===void 0)return null;let o=dn(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:Rn(ci(n,e.cap),e.cap,t.path)}))).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=Vn(e.destination.cap,e.destination.targetId,a);return o.ok?o:null}function si(e,t,n){return e.kind===`formula`||e.kind===`event`||e.device===null||e.field===null?null:oi(e,t,n,e.field.cap,e.field.path)}function ci(e,t){if(e===null)return null;let n=e[t]?.unit;return typeof n==`string`&&n.length>0?n:null}function li({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:qn(t.cap,n)}),` · `,J(t.cap,t.path,n),` `,i(`span`,{className:`text-foreground-muted`,children:t.currentText})]},`${t.cap}.${t.path}`))})}function ui({id:e,...t}){return i(yt,{headingId:`customize-${e}`,...t})}function di(e,t){if(e.status===`error`)return{kind:`unknown`,reason:e.error?.message??W.t(`helpers.customize.requestFailed`)};let n=e.data;return e.status===`pending`||n===void 0?{kind:`pending`}:{kind:`known`,value:t(n)}}s();function fi(e,t){let n=pt(e,t);return n.kind===`resolved`?n.integration.name:null}function pi(e){let t=ft({projection:`slim`},{enabled:e}),{data:r}=Pt(void 0,{enabled:e}),i=t.error===null||t.error===void 0?null:t.error.message;return n(()=>di({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:fi(e,r),parentDeviceId:e.parentDeviceId,primaryChildEntityId:e.primaryChildEntityId??null,role:e.role??null}))),[t.status,t.data,i,r])}function mi(e){let t=e?.trim()??``;return t.length>0?t:W.t(`helpers.customize.requestFailed`)}function hi(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=A(t.view.block);return e===null?{kind:`unknown`,reason:W.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:mi(e.error?.message)}:{kind:`pending`}}function X(e){return e.kind===`present`?e.composition:null}function gi(e){return Ie.find(t=>t.name===e)}function _i(e){return e===`lastFetchedAt`||e.endsWith(`At`)}function vi(e){let t=ee(e.role);if(t===null||gi(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 yi(e){return e===null?`incomplete`:ge(Me(e,{lookupCap:D(Ie),sources:new Map,self:null,blockId:null,target:null,peers:[]}).problems)}function bi(e,t){let n=gi(e);return n?.status===void 0?[]:k(n.status.schema).filter(e=>!_i(e)&&!t.has(e))}function xi(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 Si(e,t,n,r,i){return xi(e,t,de(Z(e,r),n,r,i))}function Ci(e,t,n){let r=te(Z(e,t),t,n);return r===null?wi(e,t):{target:e.target,features:e.features.map(e=>e.cap===t?r:e)}}function wi(e,t){let n=e.features.filter(e=>e.cap!==t);return n.length===0?null:{target:e.target,features:n}}function Z(e,t){let n=e?.features.find(e=>e.cap===t);return n!==void 0&&n.kind===`fields`?n:null}function Ti(e){return Array.isArray(e)?e.map(Ti):typeof e!=`object`||!e?e:Object.fromEntries(Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,Ti(t)]))}function Ei(e){return JSON.stringify(Ti(e))}function Di(e,t){switch(e.kind){case`pending`:return{kind:`refused`,reason:W.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}:Ei(t)===Ei(e.composition)?{kind:`noop`}:{kind:`update`,blockId:n,expectedUpdatedAt:e.view.block.updatedAt,composition:t}}}}function Oi(){let{t:e}=G(),t=C();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 ki(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ai(e,t){let n=K(e,t);return n===void 0?{kind:`absent`}:t===`level`&&e.binary===!0?{kind:`value`,value:n,binary:!0}:{kind:`value`,value:n}}function ji(e,t,n){return ki(t)?Ai(t,n):e.status===`error`?{kind:`unknown`,reason:e.error?.message??W.t(`helpers.liveValue.unreadable`)}:e.status===`pending`||e.data===void 0?{kind:`pending`}:e.data===null?{kind:`absent`}:Ai(e.data,n)}function Mi(e,t,n){if(t.binary===!0&&n.cap===`battery`&&n.path===`level`){let t=xt(e);return{text:W.t(t?Ht:rt),tone:t?`warning`:`normal`}}return{text:n.path===`level`?`${Math.round(e)} %`:String(e),tone:`normal`}}function Ni(e,t,n){let r=e?`active`:`muted`;return t.cap===`contact`&&t.path===`entryOpen`?{text:e?n.open:n.closed,tone:r}:Te[t.cap]===t.path?{text:e?n.active:n.inactive,tone:r}:{text:String(e),tone:`normal`}}function Pi(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`?Ni(r,t,n):typeof r==`number`?Mi(r,e,t):typeof r==`string`?{text:r,tone:`normal`}:{text:JSON.stringify(r),tone:`normal`}}}}var Fi=0;function Ii(e){let t=y(),n=Ot({deviceId:e?.deviceId??Fi,capName:e?.cap??``},{enabled:e!==null}),r=Rt(t.trpcClient,e?.deviceId??null,e?.cap??``);return e===null?{kind:`absent`}:ji({status:n.status,data:n.data,error:n.error===null||n.error===void 0?null:{message:n.error.message}},r,e.path)}var Li={muted:`text-foreground-subtle`,active:`text-success`,normal:`text-foreground`,warning:`text-warning`};function Ri({target:e}){let{t}=G(),n=Ii(e);return e===null?null:i(zi,{display:Pi(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 zi({display:e}){return i(`span`,{className:`text-xs ${Li[e.tone]}`,title:e.title,children:e.text})}function Bi(e){return e===`avg-round-1`?`customize.fieldsCard.aggregate.avg`:`customize.fieldsCard.aggregate.latest`}function Vi(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Hi(e,t,n){let r=RegExp(`(?<![A-Za-z0-9_])${Vi(t)}(?![A-Za-z0-9_])`,`g`);return e.replace(r,()=>n)}function Ui(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(R(a.source))??i,c=J(a.cap,a.fieldPath,r);o=Hi(o,e,`${s} · ${c}`)}return $i(o)}var Wi=1e3,Gi=60*Wi,Ki=60*Gi,qi={within:[1],dwell:[1,2],rose:[2]};function Ji(e){if(!Number.isInteger(e)||e<Wi)return null;if(e%Ki===0){let t=e/Ki;return t===1?`1 h`:`${t} h`}if(e%Gi===0){let t=e/Gi;return t===1?`1 min`:`${t} min`}if(e%Wi===0){let t=e/Wi;return t===1?`1 s`:`${t} s`}return null}function Yi(e){return/^\d+$/.test(e.trim())?Ji(Number(e.trim())):null}function Xi(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 Zi(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(qi)){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=Xi(e,a);return o===null?null:{name:n,close:o.close,args:o.args}}return null}function Qi(e){let t=e.args.map(e=>$i(e.text)),n=qi[e.name]??[];if(e.name===`within`){let e=t[1],n=e===void 0?null:Yi(e);if(n!==null)return`within ${n}`}let r=t.map((e,t)=>n.includes(t)?Yi(e)??e.trim():e.trim());return`${e.name}(${r.join(`, `)})`}function $i(e){let t=``,n=0;for(;n<e.length;){let r=Zi(e,n);if(r===null){t+=e[n]??``,n+=1;continue}t+=Qi(r),n=r.close+1}return t}function ea(e){for(let t=1;;t++){let n=`s${t}`;if(!e.includes(n))return n}}var ta={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)`,schmitt:`schmitt(x, high, low, onForMs?, offForMs?)`},na=/[A-Za-z_][A-Za-z0-9_]*$/;function ra(e,t,n){let r=na.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=[...Ye].filter(e=>e.startsWith(r)).toSorted().map(e=>({kind:`builtin`,label:ta[e]??e,insert:`${e}(`,hintKey:`compositionEditor.builtins.${e}`}));return[...i,...a,...o].slice(0,8)}function ia(e,t,n){let r=t-(na.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 aa({label:n,value:r,bindings:a,onChange:s}){let{t:c}=G(),l=t(null),[u,d]=o(r.length),f=ra(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=ia(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 oa(e){return{addonId:e.addonId,stableId:e.stableId}}function sa(e){return new Map(e.map(e=>[R(oa(e)),e]))}function ca(e,t,n){if(e.kind===`code`)return{kind:`unavailable`,reason:W.t(`helpers.fieldPreview.codeFields`)};if(e.kind===`series`||e.kind===`expression`&&(Xe(e.expr,`rose`)||Xe(e.expr,`count`)))return{kind:`runtime-only`};let r=xe(e).filter(e=>t.get(ze(e.source,e.cap))?.kind!==`value`).map(ne);if(r.length>0)return{kind:`waiting`,missing:r};let i=Be({source:e,now:n,read:e=>{let n=t.get(ze(e.source,e.cap)),r=n?.kind===`value`?K(n.slice,e.fieldPath):void 0,i=r===void 0?void 0:qe(r);return i===void 0?{state:`unavailable`,reason:W.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 la({sliceKey:e,deviceId:t,capName:n,onReading:r}){let i=Rt(y().trpcClient,t,n);return a(()=>{r(e,i===void 0?{kind:`pending`}:{kind:`value`,slice:i})},[e,i,r]),null}function ua(e,t){return[...new Map(xe(e).map(e=>[ze(e.source,e.cap),e]))].map(([e,n])=>({key:e,read:n,device:t.get(R(n.source))}))}function da({source:t}){let{t:n}=G(),a=ft({projection:`slim`}),[s,c]=o(new Map),l=r((e,t)=>{c(n=>new Map([...n,[e,t]]))},[]),u=ua(t,sa(a.status===`success`?Yt(a.data):[])),d=a.status===`success`?u.filter(e=>e.device===void 0).map(e=>R(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(la,{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(fa,{preview:ca(t,s,Date.now())})]})}function fa({preview:t}){let{t:n}=G();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 pa(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 ma=new Map;function ha(e,t,n,r){return e.kind===`from`?`${t.get(R(e.source))??r} · ${J(e.cap,e.fieldPath,n)}`:``}function ga({open:t,title:n,fieldPath:r,fieldLabel:a,sourceNames:s=ma,initial:c,selfNative:l=null,onClose:u,onSave:d}){let{t:f,i18n:p}=G(),[m,h]=o(c.kind===`expression`?c:{kind:`expression`,expr:`null`,bindings:{}}),[g,_]=o(`idle`),[v,y]=o(null),[b,x]=o(null),S=Nt({deviceId:v?.id??0}),C=Ft({deviceId:v?.id??0}),w=S.status===`success`?S.data:{caps:[]},T=j(m.expr,m.bindings),E=Object.keys(m.bindings);return i(At,{open:t,onOpenChange:e=>{e||u()},children:e(Bt,{width:`lg`,scroll:`body`,placement:`sheet-on-mobile`,"data-testid":`formula-dialog`,children:[i(Vt,{children:i(_t,{children:n})}),e(Tt,{className:`flex flex-col gap-2`,children:[i(`span`,{className:`text-xs text-foreground`,children:a??J(``,r,p.language)}),i(aa,{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`?ha(n,s,p.language,f(`customize.fieldsCard.unknownDevice`)):JSON.stringify(n.value)}),i(U,{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(U,{size:`sm`,variant:`outline`,"data-testid":`formula-self-native`,onClick:()=>{let e=Object.keys(m.bindings),t=m.bindings.v===void 0?`v`:ea(e);h({...m,bindings:{...m.bindings,[t]:{kind:`from`,source:l.source,cap:l.cap,fieldPath:l.fieldPath}}})},children:f(`customize.override.selfNative`)}),i(U,{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(da,{source:m}),g===`add-binding`&&e(`div`,{className:`flex flex-col gap-2 border border-border rounded-md p-2`,children:[i(ii,{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(U,{variant:`ghost`,size:`sm`,onClick:()=>_(`idle`),children:f(`customize.picker.cancel`)}),i(U,{size:`sm`,disabled:v===null||b===null,onClick:()=>{if(v===null||b===null)return;let e=pa(v,b.cap,b.path,w,C.status===`success`?C.data:null,null);if(e===null)return;let t=ea(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(Et,{children:[i(U,{variant:`ghost`,onClick:u,children:f(`compositionEditor.cancel`)}),i(U,{"data-testid":`formula-dialog-save`,disabled:T!==null,onClick:()=>{d(m),u()},children:f(`compositionEditor.save`)})]})]})})}s();function _a({open:t,from:n,initialTo:r,onClose:a,onSave:s}){let{t:c}=G(),l=ye(n),[u,d]=o(r??l[0]??``),f=l.includes(u)?u:l[0]??``;return i(At,{open:t,onOpenChange:e=>{e||a()},children:e(Bt,{width:`sm`,scroll:`body`,placement:`sheet-on-mobile`,"data-testid":`convert-unit-dialog`,children:[i(Vt,{children:i(_t,{children:c(`customize.override.convertTitle`)})}),e(Tt,{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(H,{"aria-label":c(`customize.override.targetUnit`),value:f,onChange:e=>d(e.target.value),options:l.map(e=>({value:e,label:e}))})]}),e(Et,{children:[i(U,{variant:`ghost`,onClick:a,children:c(`compositionEditor.cancel`)}),i(U,{"data-testid":`convert-unit-publish`,disabled:f===``||f===n,onClick:()=>{s(f),a()},children:c(`customize.override.publish`)})]})]})})}function va(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 ya(e){return{kind:`expression`,expr:JSON.stringify(e),bindings:{}}}function ba(e,t,n,r,i,a){let o=Z(e,n)??{kind:`fields`,cap:n,fields:{}},s={...o.fields,[r]:i},c=Object.fromEntries(Object.entries(s).filter(([e])=>!a.includes(e)));return xi(e,t,{...o,fields:c})}function xa(e,t,n,r){let i=re(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 Sa(e,t,n,r){let i=Z(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?wi(e,n):xi(e,t,{...i,fields:o})}s();function Ca({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}=G(),_=Oi(),[v,y]=o(`closed`),b=X(f.state),x=Z(b,a),S=x?.fields[s]??null,C=S===null?null:P(S),w=u===void 0?[]:ye(u),T=new Map(p);T.set(R(n),r);let E=()=>y(`closed`),D=(e,t)=>{f.save(ba(b,n,a,s,e,t))},O=()=>C?.kind===`convert-unit`?xa(x,a,s,C.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&&S===null&&i(Dt,{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(Ri,{target:{deviceId:t,cap:a,path:s}})]}),C===null?i(`p`,{className:`text-xs text-foreground-subtle`,children:h(`customize.override.none`)}):i(Ea,{entry:C,names:T,language:g.language,unknownDevice:h(`customize.fieldsCard.unknownDevice`)}),i(`div`,{className:`flex flex-wrap gap-2`,children:C===null?i(Ta,{cap:a,fieldPath:s,saving:f.saving,convert:w.length>0,onFrom:()=>y(`from`),onFormula:()=>y(`formula`),onConvert:()=>y(`convert`)}):e(c,{children:[i(U,{variant:`outline`,size:`sm`,disabled:f.saving,onClick:()=>y(wa(C)),children:h(`customize.scalar.change`)}),i(U,{variant:`ghost`,size:`sm`,disabled:f.saving,onClick:()=>{if(b===null)return;let e=Sa(b,n,a,[s,...O()]);_(h(`customize.fieldsCard.removeField`,{field:l}),e===null).then(t=>{t&&f.save(e)})},children:h(`customize.scalar.remove`)})]})}),i(At,{open:v===`from`,onOpenChange:e=>{e||E()},children:e(Bt,{width:`lg`,scroll:`body`,placement:`sheet-on-mobile`,children:[i(Vt,{children:i(_t,{children:l})}),i(Tt,{children:v===`from`&&i(Da,{title:h(`customize.override.fromDevice`),hostId:t,valueKind:d??(u===void 0?null:`number`),onCancel:E,onConfirm:e=>{D(e.source,O()),E()}})})]})}),v===`formula`&&i(ga,{open:!0,title:h(`compositionEditor.formulaFor`,{path:l}),fieldPath:s,fieldLabel:l,sourceNames:T,initial:S?.kind===`expression`?S:{kind:`expression`,expr:`v`,bindings:{}},selfNative:{source:n,cap:a,fieldPath:s},onClose:E,onSave:e=>{D(e,O()),E()}}),v===`convert`&&u!==void 0&&i(_a,{open:!0,from:u,initialTo:C?.kind===`convert-unit`?C.to:null,onClose:E,onSave:e=>{let t=re(a,s),r=ba(b,n,a,s,va(u,e,n,a,s),[]),i=t===null?r:ba(r,n,a,t,ya(e),[]);f.save(i),E()}})]})}function wa(e){return e.kind===`convert-unit`?`convert`:e.kind===`from`?`from`:`formula`}function Ta({cap:t,fieldPath:n,saving:r,convert:a,onFrom:o,onFormula:s,onConvert:c}){let{t:l}=G();return e(kt,{children:[i(jt,{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(Lt,{children:[i(It,{onClick:o,children:l(`customize.override.fromDevice`)}),i(It,{onClick:s,children:l(`customize.override.formula`)}),a&&i(It,{onClick:c,children:l(`customize.override.convertUnit`)})]})]})}function Ea({entry:t,names:n,language:r,unknownDevice:a}){let{t:o}=G();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(Dt,{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:Ui(t.expr,t.bindings,n,r,a)}),i(Dt,{children:o(`compositionEditor.formula`)})]}):e(`div`,{className:`flex flex-col gap-0.5`,children:[t.sources.map(e=>{let t=R(e.source);return i(`span`,{className:`text-xs text-foreground`,children:o(`customize.fieldsCard.from`,{name:n.get(t)??a,field:J(e.cap,e.fieldPath,r)})},`${t}:${e.cap}:${e.fieldPath}`)}),t.aggregate!==null&&i(`span`,{className:`text-xs text-foreground-muted`,children:o(Bi(t.aggregate))})]})}function Da({title:t,hostId:n,valueKind:r,onCancel:a,onConfirm:s}){let{t:c}=G(),[l,u]=o(null),[d,f]=o(null),p=Nt({deviceId:l?.id??0}),m=Ft({deviceId:l?.id??0}),h=p.status===`success`?p.data:{caps:[]};return e(`div`,{className:`flex flex-col gap-2`,children:[i(ii,{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(U,{variant:`ghost`,onClick:a,children:c(`customize.picker.cancel`)}),i(U,{disabled:l===null||d===null,onClick:()=>{if(l===null||d===null)return;let e=pa(l,d.cap,d.path,h,m.status===`success`?m.data:null,r);e!==null&&s(e)},children:c(`customize.override.save`)})]})]})}function Oa(e,t){return De(e,t)}function ka({deviceId:t,selfName:n,card:r,handle:a,names:o}){let{t:s,i18n:c}=G(),l=Oi(),u=X(a.state),d=c.language,f=qn(r.cap,d),p=new Set(Object.keys(r.entries)),m=bi(r.cap,p),h=()=>{if(u===null)return;let e=wi(u,r.cap);l(s(`customize.fieldsCard.removeWhat`,{cap:f}),e===null).then(t=>{t&&a.save(e)})},g=(e,s)=>i(Ca,{deviceId:t,self:a.target,selfName:n,cap:r.cap,fieldPath:e,label:J(r.cap,e,d),unit:Oa(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(U,{variant:`ghost`,size:`sm`,disabled:a.saving,onClick:h,children:s(`customize.fieldsCard.removeFeature`,{cap:f})})})]})}s();function Aa({device:e,handle:t,skipCaps:r}){let{i18n:a}=G(),o=it(e,`compact`),s=X(t.state),l=pi(s!==null),u=n(()=>l.kind===`known`?new Map(l.value.map(e=>[R({addonId:e.addonId,stableId:e.stableId}),e.name])):new Map,[l]);if(s===null)return null;let{model:d}=ue(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=qn(r.cap,a.language);return i(ui,{id:r.cap,icon:tt,title:s,testId:`fields-card-${r.cap}`,children:i(ka,{deviceId:e.id,selfName:o,card:r,handle:t,names:u})},r.cap)})})}function ja(){return Object.entries(F).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`event`).map(t=>({cap:e,pulse:Ma(t),span:Na(t)})).filter(e=>e.pulse!==null||e.span!==null))}function Ma(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 Na(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 Pa(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 Fa(e){return new Set(e.filter(e=>{let t=e.nativeAddonId?.trim()??``;return t!==``&&t!==`composer`}).map(e=>e.capName))}function Ia(e,t){return{cap:e,apply:t.apply,authority:t.applyAuthority?.kind??`composition-claim`,nativeItemsReadOnly:t.nativeItems===`read-only`}}function La(e){return e.kind===`known`?null:e}function Ra(e,t){return e.composable.kind===`known`?e.composable.value.has(t)?{kind:`present`,mode:`add`}:{kind:`absent`}:e.composable}function za(e){if(e.deviceType!==he.Camera)return{kind:`absent`};switch(e.cameraSensors){case`pending`:return{kind:`pending`};case`unknown`:return{kind:`unknown`,reason:W.t(`helpers.assignmentAvailability.sensorsUnchecked`)};case`absent`:return{kind:`absent`};case`present`:return{kind:`present`,mode:`add`}}}function Ba(e,t){if(e.authority===`camera-sensors`)return za(t);let n=La(t.nativeCaps);if(n!==null)return n;let r=t.nativeCaps.kind===`known`?t.nativeCaps.value:new Set;return e.nativeItemsReadOnly?Ra(t,e.cap):r.has(e.cap)?{kind:`absent`}:Ra(t,e.cap)}s();var Va=new Map;function Ha({handle:t,cap:n,fieldPath:r,itemKey:a,label:s,testId:l,sourceNames:u=Va}){let{t:d,i18n:f}=G(),p=J(n,r,f.language),[m,h]=o(!1),g=X(t.state),_=Z(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(xi(g,t.target,n))};return e(c,{children:[i(U,{variant:`ghost`,size:`sm`,"data-testid":l??`formula-entry-${n}-${r}`,onClick:()=>h(!0),children:s??d(`compositionEditor.formula`)}),i(ga,{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 Ua({name:t,detail:n,meta:r,value:a,shown:o,readout:s,problem:c,onRemove:l,removeLabel:u,busy:d=!1}){return e(`li`,{className:`${m} 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(Ri,{target:a}):o!==null&&i(zi,{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(Mt,{icon:x,variant:`ghost`,size:`sm`,"aria-label":u,disabled:d,onClick:l})})]})}function Wa(e){return e.toLowerCase().normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)}function Ga({preview:t}){let{t:n}=G();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:Nn(t.reason)?n(Mn(t.reason)):t.reason,className:`text-warning`,children:`?`})]})}function Ka(e){return!e.ok||e.mode===`enum`?{kind:`identity`}:mn(e.fit)}function qa(e,t){return Object.fromEntries(e.map(e=>[e,t.includes(e)?e:null]))}function Ja(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=O({cap:e.cap,targetId:e.targetId,device:e.device,apply:e.apply,items:[t]});return n.ok?n.value:null}function Ya(e,t,n){return(on(e,t).find(e=>e.path===n)?.literals??[]).map(e=>e.path)}function Xa(e,t,n,r){return on(e,t).find(e=>e.path===n)?.literals?.find(e=>e.path===r)?.values??[]}function Za(e,t,n){return fn(e,t,n)}s();var Qa={level:`customize.keyed.field.level`,"remaining.value":`customize.keyed.field.remaining`,status:`customize.keyed.field.status`};function $a(t){let{t:n}=G(),r=t.mode===`change`?n(`customize.keyed.changeTitle`):n(`customize.keyed.addTitle`);return i(At,{open:t.open,onOpenChange:e=>e?void 0:t.onClose(),children:e(Bt,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":r,children:[i(Vt,{children:i(_t,{children:r})}),t.open&&i(eo,{...t,heading:r})]})})}function eo(t){let{t:r,i18n:a}=G(),s=sn(t.cap,t.targetId),l=on(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??Xa(t.cap,t.targetId,`remaining.value`,`remaining.kind`)[0]??``),S=ft({projection:`slim`}),C=n(()=>S.status===`success`?Yt(S.data):[],[S.status,S.data]),w=co(t.seed,C),[T,E]=o(null),[D,O]=o(!1);!D&&w!==null&&(E(w),O(!0));let k=Nt({deviceId:T?.id??0}),A=Ft({deviceId:T?.id??0}),j=cn(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}`),[te,N]=o(t.seed?.transform??{kind:`identity`}),[P,F]=o(()=>t.seed?.transform.kind===`enum-map`?t.seed.transform.mapping:{}),I=j.find(e=>`${e.cap}.${e.path}`===ee)??null,L=I===null?null:dn(t.cap,t.targetId,g,I),R=m?f:Wa(u),ne=no(t.cap,t.targetId,g,v,b),re=ro(T,I,L,P,te),ie=re===null?null:Ja({cap:t.cap,targetId:t.targetId,device:t.target,apply:t.apply,key:R,label:u,fieldPath:g,source:re,transform:re.transform,literals:ne}),ae=io(ie,R,g,I,A.status===`success`?A.data:null),oe=e=>{if(e===null){M(null);return}let n=j.find(t=>t.cap===e.cap&&t.path===e.path);n!==void 0&&ce(n,dn(t.cap,t.targetId,g,n))},se=e=>{d(e),m||p(Wa(e))};return e(c,{children:[e(Tt,{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(B,{value:u,onChange:e=>se(e.target.value)})]}),e(`label`,{className:`flex flex-col gap-1 text-xs text-foreground`,children:[r(`customize.keyed.key`),i(B,{value:R,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(H,{value:g,options:l.map(e=>({value:e.path,label:r(Qa[e.path]??e.path)})),onChange:e=>{_(e.target.value),E(null),M(null),N({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(H,{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)),Ya(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(H,{value:b,options:Xa(t.cap,t.targetId,g,n).map(e=>({value:e,label:r(`customize.keyed.value.${e}`)})),onChange:e=>x(e.target.value)})]},n)),i(ii,{kind:`keyed`,enabled:t.open,hostId:t.host.id,fieldPath:g,destination:{cap:t.cap,targetId:t.targetId,fieldPath:g,title:r(Qa[g]??g)},device:T,field:so(ee),transform:te,onDeviceChange:e=>{E(e),M(null),N({kind:`identity`})},onFieldChange:oe,onTransformChange:N}),L?.ok===!0&&L.mode===`enum`&&I!==null&&i(to,{values:I.enumValues,outputs:Za(t.cap,t.targetId,g),mapping:P,onChange:F}),ae!==null&&i(Ga,{preview:ae})]}),e(Et,{className:`flex flex-wrap gap-2`,children:[i(U,{variant:`ghost`,onClick:t.onClose,children:r(`customize.scalar.cancel`)}),i(U,{"data-testid":`keyed-save-item`,disabled:!t.canSave||ie===null||R===``,onClick:()=>{ie!==null&&t.onSave(ie,R)},children:r(`customize.keyed.save`)})]})]});function ce(e,n){if(n.ok){if(M(`${e.cap}.${e.path}`),n.mode===`enum`){let n=qa(e.enumValues,Za(t.cap,t.targetId,g));F(n),N({kind:`enum-map`,mapping:{...n}});return}N(Ka(n))}}}function to(t){let{t:n}=G();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(H,{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 no(e,t,n,r,i){let a=Object.entries(r).map(([e,t])=>({path:e,value:t})),o=Ya(e,t,n).flatMap(e=>i===``?[]:[{path:e,value:i}]);return[...a,...o]}function ro(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 io(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=K(i[r.cap],r.path);if(a.kind===`from`)return ao(o);if(a.kind!==`expression`)return{kind:`failed`,reason:`compile`};let s=oo(o);if(s===void 0)return{kind:`failed`,reason:`no-value`};let c=Ce(a.expr,{x:s},Date.now());return c.ok?ao(c.value):{kind:`failed`,reason:c.error}}function ao(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 oo(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function so(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 co(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}var lo=`consumables`,uo=`items`,fo=ke.shape.items;function po(e){let t=e.split(`.`).pop()??e,n=t.replace(/Level$/,``);return n===``?t:n}function mo(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function ho(e,t){return e.caps.filter(e=>t.has(e.cap)&&e.cap!==`consumables`).flatMap(e=>e.fields.filter(e=>e.item!==!0&&st(e)).map(t=>({kind:`field`,key:po(t.path),cap:e.cap,path:t.path})))}function go(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=fo.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 _o(e,t,n){if(e.kind!==`known`)return e;if(t.kind!==`known`)return t;let r=ho(t.value,e.value);if(!e.value.has(`consumables`)||n===null)return{kind:`known`,value:r};let i=go(n);return i.kind===`known`?{kind:`known`,value:[...r,...i.value]}:i}function vo(e){return e.defaults.map(t=>t.kind===`field`?i(yo,{deviceId:e.deviceId,entry:t},`field:${t.cap}.${t.path}`):i(xo,{entry:t},`item:${t.key}`))}function yo(e){let{t}=G(),n=Ii({deviceId:e.deviceId,cap:e.entry.cap,path:e.entry.path});return i(Ua,{name:t(`customize.consumables.fields.${e.entry.key}`,{defaultValue:mo(e.entry.key)}),detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:i(bo,{value:n}),removeLabel:``})}function bo(e){switch(e.value.kind){case`pending`:return i(zi,{display:{text:`…`,tone:`muted`}});case`unknown`:return i(zi,{display:{text:`?`,title:e.value.reason,tone:`warning`}});case`absent`:return i(mt,{level:null,size:`sm`});case`value`:return i(mt,{level:dt(e.value.value),size:`sm`})}}function xo(e){let{t}=G(),{item:n}=e.entry,r=n.level===null?n.status===`replace`?t(`uiLibrary.consumablesPanel.replace`):void 0:`${Math.round(n.level)} %`;return i(Ua,{name:n.label,detail:t(`customize.consumables.builtIn`),meta:t(`customize.assign.native`),value:null,readout:i(mt,{level:at(n),label:r,size:`sm`}),removeLabel:``})}s();var So={consumables:_};function Co(){return Object.entries(F).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`keyedArray`).map(t=>({cap:e,target:t})))}function wo(t){let{t:n,i18n:r}=G(),a=Oi(),[s,l]=o(null),[u,d]=o(null),f=X(t.handle.state),p=Z(f,t.cap),m=Do(t.handle,p),h=m.kind===`known`&&m.value!==null?Pe(m.value,t.cap,t.target.id):null,g=pi(h!==null),_=Oo(h,g),v=ie({cap:t.cap,targetId:t.target.id,device:t.handle.target,stored:m,sourcePresence:_,sourceUnknownReason:g.kind===`unknown`?g.reason:null});if(!Eo(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=jo(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?wi(f,t.cap):xi(f,t.handle.target,r);await a(n(`customize.consumables.removeWhat`,{name:e.label}),i===null)&&await C(i)},T=s!==null&&s!==`add`?Ao(h,s):null;return e(c,{children:[i(ui,{id:t.cap,icon:So[t.cap],title:x,testId:`keyed-card-${t.cap}`,actions:i(Dt,{children:S}),children:e(`div`,{className:`flex flex-col gap-2 px-3 py-2 sm:px-4`,children:[t.defaults.kind===`known`&&i(vo,{deviceId:t.device.id,defaults:t.defaults.value}),t.defaults.kind===`unknown`&&i(V,{title:n(`customize.consumables.builtIn`),message:n(`customize.consumables.builtInUnreadable`,{reason:t.defaults.reason})}),h?.items.map(e=>i(To,{deviceId:t.device.id,cap:t.cap,item:e,language:r.language,sourceName:ko(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(U,{variant:`outline`,size:`sm`,"data-testid":`keyed-add-${t.cap}`,disabled:t.handle.saving,onClick:()=>l(`add`),children:n(`customize.keyed.add`)})]})}),i($a,{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=Ne(p,e,r);l(null),i!==null&&(d(null),C(xi(f,t.handle.target,i)))}})]})}function To(t){let{t:n}=G(),r=t.item.compile,a=t.item.recognized&&r!==null,o=r===null?``:J(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:N(_e,t.item.key,r.draft.fieldPath);return e(`div`,{className:`flex flex-col gap-1`,"data-testid":`keyed-row-${t.item.key}`,children:[i(Ua,{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(Ri,{target:{deviceId:t.deviceId,cap:t.cap,path:c}}),removeLabel:``}),e(`div`,{className:`flex flex-wrap gap-2`,children:[a&&i(U,{variant:`outline`,size:`sm`,disabled:t.saving,onClick:t.onChange,children:n(`customize.keyed.change`)}),a&&i(U,{variant:`ghost`,size:`sm`,disabled:t.saving,onClick:t.onRemove,children:n(`customize.keyed.remove`)}),!a&&i(Ha,{handle:t.handle,cap:t.cap,itemKey:t.item.key,fieldPath:`status`})]})]})}function Eo(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 Do(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 Oo(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=R(n);return t.value.some(e=>R({addonId:e.addonId,stableId:e.stableId})===r)})?`present`:`absent`}function ko(e,t){let n=e.compile?.draft.source;if(n===void 0||t.kind!==`known`)return null;let r=R(n);return t.value.find(e=>R({addonId:e.addonId,stableId:e.stableId})===r)?.name??null}function Ao(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 jo(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 Mo(e){return i(c,{children:Co().map(t=>t.target.deviceTypes.includes(e.device.type)?i(wo,{device:e.device,handle:e.handle,availability:Ba(Ia(t.cap,t.target),e.facts),cap:t.cap,target:t.target,defaults:e.defaults},t.cap):null)})}function No(e){let t=vn(e);if(t===null)return{kind:`failed`,reason:On};if(e.transform.kind===`threshold`)return Po(e.transform,e);let n=In(e.cap,e.targetId),r=n===null?void 0:t.fields[n];if(r===void 0)return{kind:`failed`,reason:On};if(r.kind===`from`)return Io(e.sourceValue);if(r.kind!==`expression`)return{kind:`failed`,reason:On};if(r.expr.startsWith(`dwell(`))return{kind:`failed`,reason:kn};let i=Fo(e.sourceValue);if(i===void 0)return{kind:`failed`,reason:An};let a=Ce(r.expr,{x:i},e.nowMs);return a.ok?Io(a.value):{kind:`failed`,reason:a.error}}function Po(e,t){if(typeof t.sourceValue!=`number`||!Number.isFinite(t.sourceValue))return{kind:`failed`,reason:An};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 Fo(e){if(typeof e==`number`||typeof e==`string`||typeof e==`boolean`)return e;if(e===null)return null}function Io(e){return e==null||typeof e==`number`&&!Number.isFinite(e)?{kind:`failed`,reason:jn}:typeof e==`number`||typeof e==`string`||typeof e==`boolean`?{kind:`value`,text:String(e)}:{kind:`failed`,reason:jn}}s();function Lo(t){let{t:n}=G(),r=t.mode===`change`?n(`customize.scalar.changeTitle`,{title:t.title}):n(`customize.scalar.addTitle`,{title:t.title});return i(At,{open:t.open,onOpenChange:e=>e?void 0:t.onClose(),children:e(Bt,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"aria-label":r,children:[i(Vt,{children:i(_t,{children:r})}),t.open&&i(Ro,{...t,heading:r})]})})}function Ro(t){let{t:r}=G(),a=ft({projection:`slim`}),s=n(()=>a.status===`success`?Yt(a.data):[],[a.status,a.data]),l=Vo(t.seed,s),[u,d]=o(null),[f,p]=o(!1);!f&&l!==null&&(d(l),p(!0));let m=Nt({deviceId:u?.id??0}),h=Ft({deviceId:u?.id??0}),g=m.status===`success`?m.data:{caps:[]},_=Ln(g,h.status===`success`?h.data:null),[v,y]=o(Ho(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=>zo(e)===v)??null,w=C===null?null:Vn(t.cap,t.targetId,C),T=C===null||w===null||!w.ok?null:Bo(u,C,w,g),E=T===null?null:vn({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:K(h.data[C.cap],C.path),O=T===null?null:h.status===`pending`?{kind:`pending`}:No({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(Tt,{className:`flex flex-col gap-3 p-2 sm:p-4`,children:[i(ii,{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(Ga,{preview:O})]}),e(Et,{className:`flex flex-wrap gap-2`,children:[i(U,{variant:`ghost`,onClick:t.onClose,children:r(`customize.scalar.cancel`)}),i(U,{"data-testid":`scalar-save-override`,disabled:!t.canSave||E===null,onClick:()=>{E!==null&&t.onSave(E)},children:r(`customize.scalar.save`)})]})]})}function zo(e){return`${e.cap}.${e.path}`}function Bo(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 Vo(e,t){return e===null?null:t.find(t=>t.addonId===e.source.addonId&&t.stableId===e.source.stableId)??null}function Ho(e){return e===null?null:`${e.source.cap}.${e.source.fieldPath}`}var Uo=`Assigned · `;function Wo(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(Uo)){let n=e.slice(11);return{kind:`assigned`,source:t??n}}return{kind:`unknown`}}s();var Go={id:0,name:``,type:`unknown`,stableId:``,parentDeviceId:null},Ko={battery:d,"running-state":v,"power-meter":S};function qo(){return Object.entries(F).flatMap(([e,t])=>t.targets.filter(e=>e.cardinality===`scalar`).map(t=>({cap:e,target:t})))}function Jo({device:t,handle:n,availability:r,cap:a,target:s}){let{t:l,i18n:u}=G(),d=Oi(),[f,p]=o(!1),[m,h]=o(null),g=L(a)>1,_=s.path??s.id,v=l(`customize.scalar.caps.${a}`),y=g?`${v} · ${J(a,_,u.language)}`:v,b=g?`${a}.${s.id}`:a,x=X(n.state),S=Xo(n,oe(Z(x,a),a,s.id)),C=S.kind===`known`&&S.value!==null?le({feature:S.value,device:n.target,cap:a,targetId:s.id}):null,w=C!==null,T=pi(w),D=C===null||T.kind!==`known`?null:T.value.find(e=>R({addonId:e.addonId,stableId:e.stableId})===R(C.draft.source))??null,O=it(D===null?Go:hr(D),`compact`),k=D===null?null:O,A=it(t,`full`),j=Zo(w,T.kind,D!==null),ee=E({cap:a,targetId:s.id,device:n.target,stored:S,sourcePresence:j,sourceUnknownReason:T.kind===`unknown`?T.reason:null}),M=Wo(ee.text,k),te=n.state.kind===`none`||n.state.kind===`present`,N=r.kind===`present`?r.mode:null;if(r.kind===`absent`||!s.deviceTypes.includes(t.type))return null;let P=async e=>{let t=await n.save(e);h(t.kind===`refused`?t.reason:null)},F=async()=>{if(x===null)return;let e=Ci(x,a,s.id);await d(l(`customize.scalar.removeWhat`,{name:k??(C===null?A:R(C.draft.source))}),e===null)&&await P(e)},I=C===null?null:{source:{addonId:C.draft.source.addonId,stableId:C.draft.source.stableId,cap:C.draft.source.cap,fieldPath:C.draft.source.fieldPath,valueKind:C.sourceValueKind,sourceUnit:C.sourceUnit,changedAtField:C.changedAtField},transform:C.draft.transform},ne=M.kind===`assigned`?l(`customize.scalar.badge.assigned`,{source:M.source}):l(`customize.scalar.badge.${M.kind}`);return e(c,{children:[i(ui,{id:b,icon:Ko[a],title:y,testId:`scalar-card-${b}`,actions:i(Dt,{children:ne}),children:i(Yo,{availability:r,answered:te,deviceId:t.id,cap:a,cardKey:b,path:_,recognized:w,stored:S,presence:j,released:ee.status.state===`released`,sourceName:k,sourceCap:C?.draft.source.cap??``,sourceField:C===null?``:J(C.draft.source.cap,C.draft.source.fieldPath,u.language),sourcePath:C?.draft.source.fieldPath??``,sourceDeviceId:D?.id??null,error:m,saving:n.saving,mode:N,onOpen:()=>p(!0),onRemove:()=>void F(),handle:n})}),N!==null&&i(Lo,{open:f,mode:I===null?`add`:`change`,title:y,cap:a,targetId:s.id,host:t,target:n.target,apply:N,seed:I,canSave:te&&!n.saving,onClose:()=>p(!1),onSave:e=>{p(!1),P(Si(x,n.target,e,a,s.id))}})]})}function Yo(t){let{t:n}=G();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(V,{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(Ri,{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(V,{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(Ri,{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(Ha,{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(U,{variant:`outline`,size:`sm`,"data-testid":`scalar-change-${t.cardKey}`,onClick:t.onOpen,disabled:t.saving,children:t.released?n(`customize.scalar.chooseAnother`):n(`customize.scalar.change`)}),t.recognized&&i(U,{variant:`ghost`,size:`sm`,onClick:t.onRemove,disabled:t.saving,children:n(`customize.scalar.remove`)}),r&&i(U,{variant:`outline`,size:`sm`,"data-testid":`scalar-add-${t.cardKey}`,disabled:t.saving||t.mode===null,onClick:t.onOpen,children:n(`customize.scalar.add`)})]})]})}function Xo(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 Zo(e,t,n){return e?t===`pending`?`pending`:t===`unknown`?`unknown`:n?`present`:`absent`:`present`}function Qo({device:e,handle:t,facts:n}){return i(c,{children:qo().map(r=>r.target.deviceTypes.includes(e.type)?i(Jo,{device:e,handle:t,availability:Ba(Ia(r.cap,r.target),n),cap:r.cap,target:r.target},`${r.cap}.${r.target.id}`):null)})}var $o=[`threshold`,`sum`,`difference`,`ratio`,`expression`,`derivative`],es=[`threshold`,`difference`,`ratio`,`derivative`];function ts(){return es}function ns(e){return $o.some(t=>t===e)}function rs(e){return e===`sum`||e===`difference`||e===`ratio`?{kind:`arithmetic`,op:e}:{kind:e}}var is=[`temperature`,`humidity`,`pressure`,`illuminance`,`power`,`energy`,`battery`,`numeric`],as=[`motion`,`contact`,`leak`,`smoke`,`occupancy`,`binary`],os=Ge,ss=[Ue],cs=`was refused — `,ls=/^(.+?) \[([a-z0-9-]+)\]: (.+)$/;function us(){return[{id:`readings`,templateIds:is},{id:`binary`,templateIds:as},{id:`actuators`,templateIds:os},{id:`appliances`,templateIds:ss}]}var ds={appliance:null,thresholdWatts:0,startDwellMs:0,stopDwellMs:0};function fs(e){if(e===`appliance`){let t=we.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=z(e);return t===null?null:{kind:`group`,templateId:e,aggregate:t.defaultAggregate,active:t.family===`actuator`?`at-least-one`:null,...ds,name:``,room:``,members:[]}}function ps(e){return e.kind===`group`?fs(e.templateId):e.kind===`appliance`?fs(Ue):e.kind===`statistic`?{kind:`statistic`,stat:`mean`,window:{kind:`rolling`,span:`24h`},name:``,room:``,source:null}:e.kind===`threshold`?{kind:`threshold`,high:0,low:0,onForMs:0,offForMs:0,name:``,room:``,source:null}:e.kind===`arithmetic`?{kind:`arithmetic`,op:e.op,name:``,room:``,inputs:[]}:e.kind===`expression`?{kind:`expression`,expr:``,output:`number`,name:``,room:``,inputs:[]}:e.kind===`derivative`?{kind:`derivative`,window:{kind:`rolling`,span:`1h`},per:`hour`,name:``,room:``,source:null}:{kind:`integral`,reset:`daily`,name:``,room:``,source:null}}function ms(e,t,n){if(e.kind===`appliance`)return{kind:`group`,templateId:Ue,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)};if(e.kind===`threshold`)return{kind:`threshold`,high:e.high,low:e.low,onForMs:e.onForMs,offForMs:e.offForMs,name:t,room:n,source:Q(e.source)};if(e.kind===`arithmetic`)return{kind:`arithmetic`,op:e.op,name:t,room:n,inputs:e.inputs.map(Q)};if(e.kind===`expression`)return{kind:`expression`,expr:e.expr,output:e.output,name:t,room:n,inputs:e.inputs.map(e=>({name:e.name,member:Q(e.member)}))};if(e.kind===`derivative`)return{kind:`derivative`,window:Zs(e.window),per:e.per,name:t,room:n,source:Q(e.source)};let r=z(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,...ds,name:t,room:n,members:e.members.map(Q)}}function hs(e){return e.helper!==void 0}function gs(e,t){if(e.templateId===`appliance`)return e;let n=z(e.templateId);return n===null||!n.aggregates.includes(t)?e:{...e,aggregate:t}}function _s(e,t){if(e.templateId===`appliance`)return e;let n=z(e.templateId);return n===null||n.family!==`actuator`?e:{...e,active:t,aggregate:I(t)}}function vs(e,t){return{...e,name:t}}function ys(e,t){return t===e.templateId?e:fs(t)??e}function bs(e,t){if(e.templateId!==`appliance`)return e;let n=we[t];return{...e,appliance:t,thresholdWatts:n.thresholdWatts,startDwellMs:n.startDwellMs,stopDwellMs:n.stopDwellMs}}function xs(e){if(e.kind===`statistic`||e.kind===`integral`)return pe(e.kind);if(e.kind===`threshold`)return T(`threshold`);if(e.kind===`arithmetic`)return T(e.op);if(e.kind===`expression`)return T(`expression`);if(e.kind===`derivative`)return T(`derivative`);if(e.templateId===`appliance`)return Ee();let t=z(e.templateId);return t===null?null:Oe(t)}function Ss(e){return e.kind===`statistic`?Gs(e):e.kind===`integral`?Ks(e):e.kind===`threshold`?qs(e):e.kind===`arithmetic`?Js(e):e.kind===`expression`?Ys(e):e.kind===`derivative`?Xs(e):e.templateId===`appliance`?Cs(e):ws(e)}function Cs(e){let t=e.members[0];return t===void 0||e.appliance===null?null:{kind:`appliance`,templateId:Ue,appliance:e.appliance,thresholdWatts:e.thresholdWatts,startDwellMs:e.startDwellMs,stopDwellMs:e.stopDwellMs,member:Q(t)}}function ws(e){if(e.templateId===`appliance`)return null;let t=z(e.templateId)?.family===`actuator`&&e.active!==null;return{kind:`group`,templateId:e.templateId,aggregate:t&&e.active!==null?I(e.active):e.aggregate,...t&&e.active!==null?{active:e.active}:{},members:e.members.map(Q)}}var Ts={code:`member-constraint`,path:`helper.member`,message:`an appliance helper needs one power reading`},Es={code:`member-constraint`,path:`helper.source`,message:`pick one reading that declares history`},Ds={code:`member-constraint`,path:`helper.source`,message:`pick one reading`},Os={code:`member-constraint`,path:`helper.inputs`,message:`pick the readings this helper combines`};function ks(e){return e.kind===`group`?e.templateId===`appliance`?Ts:Os:e.kind===`threshold`?Ds:e.kind===`arithmetic`||e.kind===`expression`?Os:Es}function As(e){let t=Ss(e);return t===null?{ok:!1,problems:[ks(e)]}:se(t)}async function js(e,t){let n=As(e);if(!n.ok)return Ns(n.problems);try{return await t(n.composition,e.name.trim()),[]}catch(e){return Ps(e instanceof Error?e.message:String(e))}}function Ms(e){return e.kind===`statistic`||e.kind===`integral`||e.kind===`derivative`?e.source!==null:e.kind===`threshold`?e.source!==null&&e.low<=e.high:e.kind===`arithmetic`?e.op===`sum`?e.inputs.length>=2:e.inputs.length===2:e.kind===`expression`?e.inputs.length>=1&&e.expr.trim()!==``:e.templateId===`appliance`?e.members.length===1:e.members.length>=1&&e.members.length<=64}function Ns(e){return e.map(e=>({path:e.path,code:e.code,message:e.message}))}function Ps(e){let t=e.indexOf(cs),n=(t===-1?e:e.slice(t+14)).split(/; (?=[^;]*\[[a-z0-9-]+\]:)/).flatMap(ac);return n.length>0?n:[{path:``,code:`refused`,message:e}]}function Fs(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 Is(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=ic(t.included),r=ic(t.excluded),i=ic(t.total);return n===null||r===null||i===null?{kind:`absent`}:{kind:`ready`,included:n,excluded:r,total:i}}function Ls(e,t){if(t.length===0||t.some(e=>e.kind===`pending`))return{kind:`pending`};if(t.some(e=>e.kind===`error`)||!Rs(e))return{kind:`unavailable`};let n=t.flatMap(e=>e.kind===`ready`?[e]:[]),r=He(e,n),i=e===`light`&&r.some(e=>e.cap===`color`)?ae(n.map(e=>e.features)):Le(e,n.map(e=>e.features));return{kind:`ready`,methods:r.map(e=>`${e.cap}.${e.method}`),modes:[...i]}}function Rs(e){return Ge.some(t=>t===e)}function zs(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=Ke.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 Bs(e,t,n,r,i=!1){if(e===`pending`)return`pending`;if(e===`error`)return`error`;let a=t?.[n];if(a===void 0)return`missing`;let o=a[r];return typeof o==`number`&&Number.isFinite(o)||typeof o==`boolean`||i&&typeof o==`string`&&o!==``?`value`:o===void 0?`missing`:`empty`}function Vs(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 Hs(e){return e.some(e=>e.presence===`unknown`)?{kind:`pending`}:{kind:`named`,names:e.flatMap(e=>e.presence===`excluded`?[e.name]:[])}}function Us(e){if(!Ws(e))return{};let t={};for(let[n,r]of Object.entries(e))Ws(r)&&(t[n]=r);return t}function Ws(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Gs(e){return e.source===null?null:{kind:`statistic`,stat:e.stat,window:rc(e.window),source:Q(e.source)}}function Ks(e){if(e.source===null)return null;let t=e.source.cap===`power-meter`&&e.source.fieldPath===`power`;return{kind:`integral`,reset:e.reset,output:t?`energy`:`meter`,source:Q(e.source)}}function qs(e){return e.source===null?null:{kind:`threshold`,source:Q(e.source),high:e.high,low:e.low,onForMs:e.onForMs,offForMs:e.offForMs}}function Js(e){return e.inputs.length===0?null:{kind:`arithmetic`,op:e.op,inputs:e.inputs.map(Q)}}function Ys(e){return e.inputs.length===0?null:{kind:`expression`,expr:e.expr.trim(),output:e.output,inputs:e.inputs.map(e=>({name:e.name,member:Q(e.member)}))}}function Xs(e){return e.source===null?null:{kind:`derivative`,window:Zs(e.window),per:e.per,source:Q(e.source)}}function Zs(e){return e.customMinutes===void 0?{kind:`rolling`,span:e.span}:{kind:`rolling`,span:e.span,customMinutes:e.customMinutes}}var Qs=`abcdefghijklmnopqrstuvwxyz`;function $s(e){return`${e.source.addonId}/${e.source.stableId}/${e.cap}.${e.fieldPath}`}function ec(e){for(let t=0;t<64;t++)for(let n of Qs){let r=t===0?n:`${n}${t}`;if(!e.has(r))return r}return`input${e.size+1}`}function tc(e){return e.kind===`group`?e.members:e.kind===`arithmetic`?e.inputs:e.kind===`expression`?e.inputs.map(e=>e.member):e.source===null?[]:[e.source]}function nc(e,t){if(e.kind===`group`)return{...e,members:t};if(e.kind===`arithmetic`)return{...e,inputs:t};if(e.kind===`expression`){let n=new Map(e.inputs.map(e=>[$s(e.member),e.name])),r=new Set,i=[],a=new Set(n.values());for(let[e,o]of t.entries()){let t=n.get($s(o)),s=Qs[e]??``,c=t!==void 0&&!r.has(t)?t:s!==``&&!r.has(s)&&!a.has(s)?s:ec(new Set([...r,...a]));r.add(c),i.push({name:c,member:o})}return{...e,inputs:i}}return{...e,source:t[0]??null}}function rc(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 ic(e){return typeof e!=`number`||!Number.isInteger(e)||e<0?null:e}function ac(e){let t=ls.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}]}var oc=`composition`;function sc({onPick:e,onFreeComposition:t}){let{t:n}=G();return i(`div`,{"data-testid":`helper-template-picker`,children:i(vt,{emptyMessage:n(`helper.noTemplates`),onPick:n=>{if(n===oc){t?.();return}if(n===`statistic`||n===`integral`){e({kind:n});return}if(n===`appliance`){e({kind:`appliance`});return}if(ns(n)){e(rs(n));return}mc(n)&&e({kind:`group`,templateId:n})},groups:[...hc(n),{id:`calculation`,label:n(`helper.section.calculation`),tiles:[...ts().map(e=>dc(e,n)),lc(`statistic`,$e,n),lc(`integral`,S,n)]},{id:`advanced`,label:n(`helper.section.advanced`),tiles:[...t===void 0?[]:[cc(n)],dc(`expression`,n)]}]})})}function cc(e){let t=e(`helper.template.composition`);return{key:oc,label:t,testId:`helper-template-composition`,icon:i(Ze,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:e(`helper.detailsOf`,{name:t}),detail:i(`div`,{className:`max-w-xs text-xs`,children:i(`p`,{className:`text-foreground-muted`,children:e(`helper.detail.composition`)})})}}function lc(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(pc,{id:e})}}var uc={threshold:p,sum:u,difference:b,ratio:Qe,expression:et,derivative:g};function dc(e,t){let n=t(`helper.template.${e}`),r=uc[e];return{key:e,label:n,testId:`helper-template-${e}`,icon:i(r,{className:`h-5 w-5 text-foreground-muted`,"aria-hidden":!0}),detailLabel:t(`helper.detailsOf`,{name:n}),detail:i(fc,{id:e})}}function fc({id:t}){let{t:n}=G();return e(`div`,{className:`max-w-xs space-y-1 text-xs`,children:[i(`p`,{className:`text-foreground-muted`,children:n(`helper.detail.${t}`)}),t===`derivative`&&i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.history`)}),t===`expression`&&i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.expressionStale`)})]})}function pc({id:t}){let{t:n}=G();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 mc(e){return w.some(t=>t===e)}function hc(e){return us().map(t=>({id:t.id,label:`${e(`helper.section.group`)} · ${e(`helper.group.${t.id}`)}`,tiles:gc(t.templateIds,e)}))}function gc(e,t){let n=[];for(let r of e){let e=_c(r,t);e!==null&&n.push(e)}return n}function _c(e,t){if(e===`appliance`)return vc(t);if(!mc(e))return null;let n=z(e);if(n===null)return null;let r=t(`helper.template.${e}`),a=n.role===void 0?ct(n.deviceType).icon:ut(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(bc,{templateId:e})}}function vc(e){let t=e(`helper.template.appliance`),n=ct(he.Washer).icon;return{key:Ue,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(yc,{})}}function yc(){let{t:e}=G();return i(`div`,{className:`max-w-xs text-xs`,children:i(`p`,{className:`text-foreground-muted`,children:e(`helper.template.applianceSummary`)})})}function bc({templateId:t}){let{t:n}=G(),r=z(t);if(r===null)return null;let a=r.family===`actuator`?be.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(`, `)})]}),r.id===`lock`&&i(`p`,{className:`text-foreground-subtle`,children:n(`helper.detail.lockConfirm`)}),i(`p`,{className:`text-foreground-subtle`,children:n(`helper.offlineCounted`)})]})}s();function xc({initial:n,start:r,purpose:s,saving:l,onSave:u,onDraftChange:d,onFreeComposition:f,fillHeight:p=!1}){let{t:m}=G(),[h,g]=o(n===null?`template`:r),[_,v]=o(n),[y,b]=o([]),[x,S]=o(null),C=t(!1),[w,T]=o(null),E=l||w!==null;a(()=>{d?.(_)},[_,d]);let D=e=>{v(t=>e.kind===`group`&&t?.kind===`group`&&t.templateId!==`appliance`?ys(t,e.templateId):ps(e)),b([]),S(null),g(`parameters`)},O=e=>{if(_===null||C.current)return;C.current=!0,T(e);let t=_;(async()=>{let n;try{n=await u(t,e)}finally{C.current=!1,T(null)}if(n.kind===`refused`){b(n.lines);return}e===`again`&&(S({deviceId:n.deviceId,name:t.name.trim()}),v(null),g(`template`),b([]))})()},k=_===null?null:xs(_),A=_!==null&&_.kind===`group`&&_.templateId!==`appliance`?z(_.templateId):null,j=_===null?[]:tc(_);return e(`div`,{className:p?`flex min-h-0 flex-1 flex-col gap-3`:`flex flex-col gap-3`,"data-testid":`helper-wizard`,children:[x!==null&&i(`p`,{role:`status`,className:`text-xs text-foreground`,"data-testid":`helper-created`,children:i(Kt,{i18nKey:`helper.created`,values:{name:x.name===``?m(`helper.newHelper`):x.name},components:{device:i(Gt,{to:Wt(x.deviceId),className:`text-primary hover:underline`})}})}),i(`p`,{className:`text-[11px] text-foreground-muted`,children:m(Bc(h,_))}),h===`template`&&i(sc,{onPick:D,onFreeComposition:f}),h===`parameters`&&_?.kind===`group`&&_.templateId===`appliance`&&i(Cc,{draft:_,onDraft:e=>v(e)}),h===`parameters`&&_?.kind===`group`&&A!==null&&e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[A.family===`actuator`&&_.active!==null?e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[m(`helper.criterion`),i(H,{"aria-label":m(`helper.criterion`),"data-testid":`helper-criterion`,value:_.active,onChange:e=>{let t=be.find(t=>t===e.target.value);t!==void 0&&v(_s(_,t))},options:be.map(e=>({value:e,label:m(`helper.active.${e}`)}))})]}):e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[m(`helper.reducer`),i(H,{"aria-label":m(`helper.reducer`),"data-testid":`helper-reducer`,value:_.aggregate,onChange:e=>{let t=A.aggregates.find(t=>t===e.target.value);t!==void 0&&v(gs(_,t))},options:A.aggregates.map(e=>({value:e,label:m(`helper.aggregate.${e}`)}))})]}),e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[m(`helper.name`),i(B,{"aria-label":m(`helper.name`),"data-testid":`helper-name`,value:_.name,onChange:e=>v(vs(_,e.target.value))})]})]}),h===`parameters`&&_?.kind===`statistic`&&i(Oc,{draft:_,onChange:v}),h===`parameters`&&_?.kind===`integral`&&i(Ac,{draft:_,onChange:v}),h===`parameters`&&_?.kind===`threshold`&&i(Mc,{draft:_,onChange:v}),h===`parameters`&&_?.kind===`derivative`&&i(Fc,{draft:_,onChange:v}),h===`parameters`&&_?.kind===`arithmetic`&&i(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-math-parameters`,children:i(Rc,{name:_.name,onChange:e=>v({..._,name:e})})}),h===`parameters`&&_?.kind===`expression`&&i(Ic,{draft:_,onChange:v}),h===`members`&&_!==null&&k!==null&&i(ii,{kind:`members`,request:k,enabled:!0,fillHeight:p,members:j,onMembersChange:e=>v(nc(_,e)),onRefuse:e=>b(e===null?[]:[{path:`helper.members`,code:`member-constraint`,message:m(`helper.maxMembers`,{max:e.max})}])}),h===`members`&&_?.kind===`expression`&&i(Lc,{draft:_,onChange:v}),h===`members`&&(_?.kind===`arithmetic`||_?.kind===`threshold`)&&i(`p`,{className:`text-[11px] text-foreground-muted`,"data-testid":`helper-math-hint`,children:m(zc(_))}),i(Vc,{lines:y}),e(`div`,{className:p?`mt-auto flex shrink-0 flex-wrap gap-2`:`flex flex-wrap gap-2`,children:[h===`members`&&i(U,{variant:`ghost`,onClick:()=>g(`parameters`),children:m(`helper.back`)}),h===`parameters`&&_!==null&&i(U,{"data-testid":`helper-to-members`,disabled:_.name.trim()===``,onClick:()=>{b([]),g(`members`)},children:m(`helper.next`)}),h===`members`&&_!==null&&s===`edit`&&i(U,{"data-testid":`helper-save`,disabled:!Ms(_)||E,onClick:()=>O(`open`),children:m(w===`open`?`helper.saving`:`helper.save`)}),h===`members`&&_!==null&&s===`create`&&e(c,{children:[i(U,{"data-testid":`helper-save-open`,disabled:!Ms(_)||E,onClick:()=>O(`open`),children:m(w===`open`?`helper.saving`:`helper.saveOpen`)}),i(U,{variant:`outline`,"data-testid":`helper-save-more`,disabled:!Ms(_)||E,onClick:()=>O(`again`),children:m(w===`again`?`helper.saving`:`helper.saveMore`)})]})]})]})}var Sc=6e4;function Cc({draft:t,onDraft:n}){let{t:r}=G(),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(H,{"aria-label":r(`helper.applianceType`),"data-testid":`helper-appliance`,value:a,onChange:e=>{let r=Re.find(t=>t===e.target.value);r!==void 0&&n(bs(t,r))},options:Re.map(e=>({value:e,label:r(`helper.appliance.${e}`)}))})]}),e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[r(`helper.name`),i(B,{"aria-label":r(`helper.name`),"data-testid":`helper-name`,value:t.name,onChange:e=>n({...t,name:e.target.value})})]}),i(Dc,{label:r(`helper.threshold`),testId:`helper-threshold`,value:String(t.thresholdWatts),onValue:e=>{let r=Ec(e);r!==null&&n({...t,thresholdWatts:r})}}),i(Dc,{label:r(`helper.startDwell`),testId:`helper-start-dwell`,value:wc(t.startDwellMs),onValue:e=>{let r=Tc(e);r!==null&&n({...t,startDwellMs:r})}}),i(Dc,{label:r(`helper.stopDwell`),testId:`helper-stop-dwell`,value:wc(t.stopDwellMs),onValue:e=>{let r=Tc(e);r!==null&&n({...t,stopDwellMs:r})}})]})}function wc(e){return String(e/Sc)}function Tc(e){let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.round(t*Sc)}function Ec(e){let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function Dc({label:t,testId:n,value:r,onValue:a}){return e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[t,i(B,{type:`number`,min:0,step:`any`,"aria-label":t,"data-testid":n,value:r,onChange:e=>a(e.target.value)})]})}function Oc({draft:t,onChange:n}){let{t:r}=G(),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(H,{"aria-label":r(`helper.stat`),"data-testid":`helper-stat`,value:t.stat,onChange:e=>{let r=je.find(t=>t===e.target.value);r!==void 0&&n({...t,stat:r})},options:je.map(e=>({value:e,label:r(`helper.statName.${e}`)}))})}),i($,{label:r(`helper.range`),children:i(H,{"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(H,{"aria-label":r(`helper.span`),"data-testid":`helper-span`,value:t.window.span,onChange:e=>{let r=Ve.find(t=>t===e.target.value);r!==void 0&&n({...t,window:kc(r,t)})},options:Ve.map(e=>({value:e,label:r(`helper.spanName.${e}`)}))})}):i($,{label:r(`helper.period`),children:i(H,{"aria-label":r(`helper.period`),"data-testid":`helper-period`,value:t.window.period,onChange:e=>{let r=We.find(t=>t===e.target.value);r!==void 0&&n({...t,window:{kind:`calendar`,period:r}})},options:We.map(e=>({value:e,label:r(`helper.periodName.${e}`)}))})}),t.window.kind===`rolling`&&t.window.span===`custom`&&i($,{label:r(`helper.customMinutes`),children:i(B,{"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(Rc,{name:t.name,onChange:e=>n({...t,name:e})})]})}function kc(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 Ac({draft:t,onChange:n}){let{t:r}=G();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(H,{"aria-label":r(`helper.reset`),"data-testid":`helper-reset`,value:t.reset,onChange:e=>{let r=Fe.find(t=>t===e.target.value);r!==void 0&&n({...t,reset:r})},options:Fe.map(e=>({value:e,label:r(`helper.resetName.${e}`)}))})}),i(Rc,{name:t.name,onChange:e=>n({...t,name:e})})]})}var jc=1e3;function Mc({draft:t,onChange:n}){let{t:r}=G(),a=t.low>t.high;return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-threshold-parameters`,children:[i(Pc,{label:r(`helper.highEdge`),testId:`helper-high`,value:t.high,onValue:e=>n({...t,high:e})}),i(Pc,{label:r(`helper.lowEdge`),testId:`helper-low`,value:t.low,onValue:e=>n({...t,low:e})}),i(Dc,{label:r(`helper.onDelay`),testId:`helper-on-delay`,value:String(t.onForMs/jc),onValue:e=>{let r=Nc(e);r!==null&&n({...t,onForMs:r})}}),i(Dc,{label:r(`helper.offDelay`),testId:`helper-off-delay`,value:String(t.offForMs/jc),onValue:e=>{let r=Nc(e);r!==null&&n({...t,offForMs:r})}}),i(Rc,{name:t.name,onChange:e=>n({...t,name:e})}),a&&i(`p`,{role:`alert`,className:`text-xs text-danger sm:col-span-2`,"data-testid":`helper-edges`,children:r(`helper.edgesReversed`)})]})}function Nc(e){let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.round(t*jc)}function Pc({label:t,testId:n,value:r,onValue:a}){return e(`label`,{className:`flex flex-col gap-1 text-[11px]`,children:[t,i(B,{type:`number`,step:`any`,"aria-label":t,"data-testid":n,value:String(r),onChange:e=>{let t=Number(e.target.value);e.target.value!==``&&Number.isFinite(t)&&a(t)}})]})}function Fc({draft:t,onChange:n}){let{t:r}=G();return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-derivative-parameters`,children:[i($,{label:r(`helper.span`),children:i(H,{"aria-label":r(`helper.span`),"data-testid":`helper-span`,value:t.window.span,onChange:e=>{let r=Ve.find(t=>t===e.target.value);r!==void 0&&n({...t,window:r===`custom`?{kind:`rolling`,span:r,customMinutes:t.window.customMinutes??60}:{kind:`rolling`,span:r}})},options:Ve.map(e=>({value:e,label:r(`helper.spanName.${e}`)}))})}),t.window.span===`custom`&&i($,{label:r(`helper.customMinutes`),children:i(B,{"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($,{label:r(`helper.per`),children:i(H,{"aria-label":r(`helper.per`),"data-testid":`helper-per`,value:t.per,onChange:e=>{let r=Se.find(t=>t===e.target.value);r!==void 0&&n({...t,per:r})},options:Se.map(e=>({value:e,label:r(`helper.perName.${e}`)}))})}),i(Rc,{name:t.name,onChange:e=>n({...t,name:e})})]})}function Ic({draft:t,onChange:n}){let{t:r}=G();return e(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,"data-testid":`helper-expression-parameters`,children:[i($,{label:r(`helper.exprOutput`),children:i(H,{"aria-label":r(`helper.exprOutput`),"data-testid":`helper-expr-output`,value:t.output,onChange:e=>{let r=fe.find(t=>t===e.target.value);r!==void 0&&n({...t,output:r})},options:fe.map(e=>({value:e,label:r(`helper.exprOutputName.${e}`)}))})}),i(Rc,{name:t.name,onChange:e=>n({...t,name:e})}),i(`p`,{className:`text-[11px] text-foreground-muted sm:col-span-2`,"data-testid":`helper-stale-note`,children:r(`helper.detail.expressionStale`)})]})}function Lc({draft:t,onChange:n}){let{t:r}=G();return t.inputs.length===0?null:e(`div`,{className:`flex flex-col gap-2`,"data-testid":`helper-expression-editor`,children:[i(`ul`,{className:`flex flex-col gap-1`,children:t.inputs.map((a,o)=>e(`li`,{className:`flex items-center gap-2 text-[11px]`,children:[i(B,{className:`w-24 font-mono`,"aria-label":r(`helper.inputName`),"data-testid":`helper-input-name-${o}`,value:a.name,onChange:e=>n({...t,inputs:t.inputs.map((t,n)=>n===o?{...t,name:e.target.value}:t)})}),e(`span`,{className:`truncate text-foreground-muted`,children:[a.member.source.stableId,` · `,a.member.cap,`.`,a.member.fieldPath]})]},`${a.member.source.addonId}/${a.member.source.stableId}/${a.member.cap}.${a.member.fieldPath}`))}),i(aa,{label:r(`helper.expr`),value:t.expr,bindings:t.inputs.map(e=>e.name),onChange:e=>n({...t,expr:e})})]})}function Rc({name:e,onChange:t}){let{t:n}=G();return i($,{label:n(`helper.name`),children:i(B,{"aria-label":n(`helper.name`),"data-testid":`helper-name`,value:e,onChange:e=>t(e.target.value)})})}function zc(e){return e.kind===`arithmetic`?`helper.hint.${e.op}`:`helper.hint.threshold`}function Bc(e,t){if(t?.kind===`threshold`||t?.kind===`arithmetic`||t?.kind===`expression`||t?.kind===`derivative`){if(e===`parameters`)return`helper.step.math.${t.kind}.parameters`;if(e===`members`)return`helper.step.math.${t.kind}.members`}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 Vc({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}`))})}s();function Hc({blockId:t,fillHeight:r=!1}){let{t:a}=G(),o=Ct({blockId:t}),s=ht(),c=wt(),l=n(()=>{let e=new Set;for(let{cap:t}of qo())e.add(t);for(let{cap:t}of Co())e.add(t);for(let{cap:t}of ja())e.add(t);return e},[]);if(o.status===`pending`)return i(`p`,{role:`status`,children:a(`compositionEditor.loading`)});if(o.status===`error`)return i(V,{title:a(`compositionEditor.loadFailed`),message:o.error.message});if(o.data.state===`not-loaded`)return i(`p`,{role:`status`,children:a(`customize.status.notLoaded`,{reason:o.data.reason})});let u=o.data.view;if(u===null)return i(`p`,{children:a(`compositionEditor.notFound`,{blockId:t})});let d=A(u.block);if(d===null)return i(`p`,{children:a(`compositionEditor.notComposition`)});if(hs(d)){let e=ms(d.helper,u.block.name,``);if(e===null)return i(`p`,{role:`alert`,children:a(`helper.unreadable`)});let t=u.state.kind===`answered`?u.state.state?.deviceId??null:null;return i(xc,{fillHeight:r,purpose:`edit`,initial:e,start:`parameters`,saving:s.isPending,onSave:async e=>{let n=await js(e,async(n,r)=>{await s.mutateAsync({blockId:u.block.id,expectedUpdatedAt:u.block.updatedAt,block:{composition:n,...r===``?{}:{name:r}}}),t!==null&&e.room.trim()!==``&&await c.mutateAsync({deviceId:t,location:e.room.trim()}),await o.refetch()});return n.length>0?{kind:`refused`,lines:n}:{kind:`saved`,deviceId:t??0}}})}let f=yi(d),p={id:0,name:u.block.name,addonId:`composer`,stableId:`composed-${t}`,type:d.target.kind===`new`?d.target.type:he.Sensor,location:``,disabled:!1,parentDeviceId:null,role:d.target.kind===`new`?d.target.role:null,online:!0,probed:!0,features:[],isCamera:!1,config:{},secretConfigPaths:[],metadata:{}},m={target:{addonId:`composer`,stableId:p.stableId},state:{kind:`present`,view:u,composition:d},saving:s.isPending,save:async e=>{if(e===null)return{kind:`refused`,reason:`cannot delete here`};try{return await s.mutateAsync({blockId:u.block.id,expectedUpdatedAt:u.block.updatedAt,block:{composition:e}}),await o.refetch(),{kind:`saved`}}catch(e){return{kind:`refused`,reason:e instanceof Error?e.message:String(e)}}}};return e(`div`,{className:`flex flex-col gap-2`,children:[i(Dt,{variant:f===`incomplete`?`warning`:`success`,children:a(`customize.blockStatus.${f===`incomplete`?`incomplete`:u.block.status}`)}),i(Aa,{device:p,handle:m,skipCaps:l})]})}export{Ii as A,pi as B,Ha as C,Pa as D,Ia as E,wi as F,hr as G,ui as H,vi as I,en as J,gr as K,yi as L,Z as M,Di as N,ja as O,xi as P,X as R,_o as S,Fa as T,ii as U,di as V,Or as W,Yt as X,K as Y,qo as _,tc as a,lo as b,hs as c,Fs as d,Ps as f,Qo as g,js as h,ms as i,Oi as j,Aa as k,Vs as l,Us as m,xc as n,Bs as o,Ls as p,J as q,zs as r,Is as s,Hc as t,Hs as u,Mo as v,Ba as w,uo as x,Co as y,hi as z};
@@ -1,2 +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{D as l,Ei as u,Fn as d,Ht as f,In as p,Oi as m,Q as h,Qi as g,Vn as _,Zr as v,bi as y,fi as b,fr as x,ii as S,lr as C,mi as w,na as T,ra as E,st as D,ti as O,ur as k,vn as A,wn as j,zt as M}from"./player-overlays-CJHEGkWA.js";import{n as N,t as P}from"./cloud-upload-knnOuFf0.js";import{t as F}from"./circle-slash-CYJP5692.js";import{t as I}from"./hard-drive-download-3fltBasv.js";import{Ad as L,Ar as R,Ca as z,Ct as B,Dn as V,Gn as ee,Jn as te,Ki as ne,Kn as re,Mu as ie,On as ae,Sa as oe,Sr as se,Td as ce,Un as le,_a as ue,_o as de,_r as fe,_u as pe,ba as me,br as he,ca as ge,da as _e,dt as ve,ei as H,fa as ye,ga as be,gr as xe,gt as Se,gu as Ce,ha as we,ht as Te,jd as U,jr as Ee,la as De,ma as Oe,mt as ke,pa as Ae,tu as je,ua as Me,va as Ne,vr as Pe,vu as Fe,xa as Ie,xr as Le,ya as Re,yu as ze}from"./src-CzDAA2fz.js";import{t as W}from"./i18n-qDGVD_PF.js";import{t as G}from"./useTranslation-BJr-n0es.js";import"./mount-CLwbjCLX.js";import{T as Be,hr as Ve,pr as He,yr as Ue}from"./index-Dvd8RKBK.js";import{t as We}from"./AdminSectionedPage-C9702pKD.js";import{t as Ge}from"./AdminPage-CgFhd3My.js";import{n as Ke}from"./authed-media-Bk6ZG2lV.js";import{t as K}from"./format-size-DIxKXxtj.js";import{a as qe,c as Je,l as Ye,n as Xe,o as Ze,s as Qe,t as $e,u as et}from"./location-owned-usage-CT1Figq_.js";o();function tt(){let{t:n}=G(),a=s(),o=D(),{data:c,isLoading:l,isError:u}=ze({}),d=Fe(),f=t(()=>d.data??[],[d.data]),{data:p}=je({},{refetchOnWindowFocus:!1}),m=t(()=>$e(c??[],p?.locations),[c,p?.locations]),{data:h}=pe({},{refetchOnWindowFocus:!1}),g=t(()=>qe(h),[h]),{state:_,openNew:v,openEdit:y,close:b}=ke(),[x,S]=Te(`type`),C=()=>{S(null),b()},w=e=>{S(e),v()},T=e=>{S(null),y(e.id)},E=c??[],O=_.mode===`edit`?E.find(e=>e.id===_.id)??null:null;i(()=>{_.mode===`new`&&(x===null||x===``)&&(S(null),b())},[_.mode,x,b,S]),i(()=>{_.mode===`edit`&&!l&&O===null&&(S(null),b())},[_.mode,l,O,b,S]),i(()=>{_.mode===`closed`&&x!==null&&S(null)},[_.mode,x,S]);let k=Ce({onSuccess:()=>{a.invalidateQueries({queryKey:[[`storage`,`listLocations`]]})}}),A=ie({onSuccess:()=>{a.invalidateQueries({queryKey:[[`storage`,`listLocations`]]})}}),j=async(e,t)=>{Ye(t)&&!await o({title:n(`system.storage.disable`,`Disable "{{displayName}}"?`,{displayName:e.displayName}),message:n(`system.storage.nothingIsDeletedSetThe`,`{{consequence}} Nothing is deleted — set the location back to Read-only or Active to bring its footage back.`,{consequence:Je(t).consequence}),confirmLabel:n(`common.disable`,`Disable`),variant:`danger`})||A.mutate(Qe(e,{mode:t}))},M=async e=>{if(await o({title:n(`system.storage.deleteLocation`,`Delete location "{{displayName}}"?`,{displayName:e.displayName}),message:n(`system.storage.thisRemovesTheLocationRecord`,`This removes the location record. Files on disk are not deleted; the underlying directory or remote path stays untouched.`),confirmLabel:n(`common.delete`,`Delete`),variant:`danger`}))try{await k.mutateAsync({id:e.id}),_.mode===`edit`&&_.id===e.id&&C()}catch(t){await o({title:n(`system.storage.deleteAnyway`,`Delete anyway?`),message:n(`system.storage.forcingNote`,{error:t instanceof Error?t.message:String(t)}),confirmLabel:n(`system.storage.forceDelete`,`Force delete`),variant:`danger`})&&k.mutate({id:e.id,force:!0},{onSuccess:()=>{_.mode===`edit`&&_.id===e.id&&C()}})}},N=t(()=>{let e=new Map;for(let t of c??[]){let n=e.get(t.type);n?n.push(t):e.set(t.type,[t])}return e},[c]),P=l||d.isLoading,F=u||d.isError,I=_.mode===`new`&&x!==null&&x!==``,L=_.mode===`edit`&&O!==null;return e(Ge,{embedded:!0,children:[P&&r(`div`,{className:`text-xs text-foreground-subtle animate-pulse`,children:n(`system.storage.loadingLocations`,`Loading locations…`)}),F&&r(`div`,{className:`text-xs text-danger`,children:n(`system.storage.failedToLoadStorageLocations`,`Failed to load storage locations.`)}),!P&&!F&&e(`div`,{className:`space-y-3`,children:[f.length===0&&r(`div`,{className:`rounded-lg border border-border bg-surface px-3 py-4 text-center text-[11px] text-foreground-subtle italic`,children:n(`system.storage.noStorageLocationsDeclaredBy`,`No storage locations declared by any installed addon.`)}),f.map(e=>r(Xe,{type:e.id,displayName:e.displayName,description:e.description,cardinality:e.cardinality,locations:N.get(e.id)??[],onAdd:w,onEdit:T,onDelete:e=>{M(e)},ownedBytesById:m,drainById:g,onSetMode:(e,t)=>{j(e,t)}},e.id))]}),I&&x!==null&&r(et,{initialType:x,onClose:C,onCreated:()=>{a.invalidateQueries({queryKey:[[`storage`,`listLocations`]]}),C()}}),L&&O!==null&&r(Ze,{location:O,onClose:C,onSaved:()=>{a.invalidateQueries({queryKey:[[`storage`,`listLocations`]]}),C()}})]})}var q={settings:{labelKey:`helpers.backupDatabases.settings.label`,descriptionKey:`helpers.backupDatabases.settings.description`,shortKey:`helpers.backupDatabases.settings.short`},events:{labelKey:`helpers.backupDatabases.events.label`,descriptionKey:`helpers.backupDatabases.events.description`,shortKey:`helpers.backupDatabases.events.short`},history:{labelKey:`helpers.backupDatabases.history.label`,descriptionKey:`helpers.backupDatabases.history.description`,shortKey:`helpers.backupDatabases.history.short`}},nt=Object.keys(q),J=[`settings`];function rt(){return W.t(`helpers.backupDatabases.notCreated`)}function it(e){return W.t(q[e].labelKey)}function at(e){return W.t(q[e].shortKey)}function ot(e){return W.t(q[e].descriptionKey)}function Y(e){let t=new Set(e);return nt.filter(e=>t.has(e))}function X(e){return e!==void 0&&e.length>0?Y(e):J}function st(e){return Y(e)}function ct(e,t){return t===void 0||!t.answered?`unknown`:t.databases.includes(e)?`present`:`absent`}function lt(e,t,n){return ct(e,t)===`absent`&&!n.has(e)}function ut(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}function dt(e){return!e.includes(`settings`)}function ft(e){return{databases:[...st(e)]}}function pt(e,t){return e!==void 0&&e.length>0?Y(e):t!==void 0&&t.length>0?Y(t.map(e=>e.databaseId??`settings`)):J}function Z({databases:e}){return r(`span`,{className:`text-xs font-medium uppercase tracking-wide text-foreground-muted`,"data-testid":`backup-database-badges`,children:e.map(e=>at(e)).join(` · `)})}o();var mt=[[`backup`,`listDestinations`]],ht=[`backup`,`listArchives`];function gt({destinationId:i,restoreSupported:o,onOpenRestoreWizard:c}){let{t:l}=G(),u=s(),d=D(),{data:p,isLoading:m,isError:h}=Oe({destinationId:i}),g=p??[],_=De({onSuccess:()=>{u.invalidateQueries({queryKey:[[...ht]]}),u.invalidateQueries({queryKey:mt})}}),y=n(async e=>{await d({title:l(`backup.archiveList.deleteThisArchive`,`Delete this archive?`),message:l(`backup.archiveList.permanentlyDeletesAndFrees`,`Permanently deletes "{{value1}}" and frees {{value2}}.`,{value1:e.label??e.id,value2:K(e.sizeBytes)}),confirmLabel:l(`common.delete`,`Delete`),variant:`danger`})&&_.mutate({destinationId:i,backupId:e.id})},[d,i,_,l]),[b,S]=a(null),w=n(async e=>{S(e.id);try{let t=await Ke(_t(i,e.id)),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${e.label??e.id}.tar.gz${e.encryption===void 0?``:`.csbk`}`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}finally{S(null)}},[i]),T=t(()=>[...g].toSorted((e,t)=>t.createdAt-e.createdAt),[g]);return m?r(`div`,{className:`text-xs text-foreground-subtle animate-pulse py-2`,children:l(`backup.archiveList.loadingArchives`,`Loading archives…`)}):h?r(`div`,{className:`text-xs text-danger py-2`,children:l(`backup.archiveList.failedToReadManifestFor`,`Failed to read manifest for this destination`)}):T.length===0?r(`div`,{className:`text-xs text-foreground-subtle italic py-2`,children:l(`backup.archiveList.noArchivesAtThisDestination`,`No archives at this destination yet.`)}):r(V,{columns:[{key:`when`,header:l(`backup.archiveList.when`,`When`),sortValue:e=>e.createdAt,render:e=>r(`span`,{className:`tabular-nums`,children:vt(e.createdAt)})},{key:`label`,header:l(`backup.archiveList.label`,`Label`),sortValue:e=>e.label??null,render:t=>e(`span`,{className:`inline-flex items-center gap-1`,children:[t.encryption!==void 0&&r(C,{className:`h-3 w-3 text-success`,"aria-label":l(`backup.archiveList.encryptedRestoreNeedsBackupKey`,`encrypted — restore needs backup key {{keyId}}`,{keyId:t.encryption.keyId})}),t.label??r(`span`,{className:`text-foreground-subtle italic`,children:`—`})]})},{key:`databases`,header:l(`backup.archiveList.databases`,`Databases`),nowrap:!1,notSortableReason:`Database badges`,render:e=>r(Z,{databases:X(e.databases)})},{key:`includes`,header:l(`backup.archiveList.files`,`Files`),nowrap:!1,notSortableReason:`Location list`,render:e=>e.locations.length>0?r(`span`,{className:`text-foreground-subtle`,children:e.locations.join(`, `)}):r(`span`,{className:`text-foreground-subtle italic`,children:l(`common.none`)})},{key:`size`,header:l(`backup.archiveList.size`,`Size`),align:`right`,sortValue:e=>e.sizeBytes,render:e=>r(`span`,{className:`tabular-nums`,children:K(e.sizeBytes)})},{key:`actions`,header:``,align:`right`,notSortableReason:`Actions`,render:t=>e(`span`,{className:`flex items-center justify-end gap-1`,children:[e(H,{variant:`ghost`,size:`sm`,onClick:()=>{w(t)},disabled:b===t.id,title:l(`backup.archiveList.downloadArchive`,`Download archive`),children:[b===t.id?r(x,{className:`h-3 w-3 animate-spin`}):r(v,{className:`h-3 w-3`}),l(`backup.archiveList.download`,`Download`)]}),o&&c&&e(H,{variant:`ghost`,size:`sm`,onClick:()=>c({destinationId:i,archiveId:t.id}),title:l(`backup.archiveList.restoreFromThisArchive`,`Restore from this archive`),children:[r(j,{className:`h-3 w-3`}),l(`backup.archiveList.restore`,`Restore`)]}),r(U,{variant:`ghost`,size:`sm`,icon:f,"aria-label":l(`backup.archiveList.delete`,`Delete {{value1}}`,{value1:t.label??t.id}),disabled:_.isPending,onClick:()=>{y(t)}})]})}],rows:T,rowKey:e=>e.id,minWidthPx:760,emptyMessage:l(`backup.archiveList.noArchivesAtThisDestination`,`No archives at this destination yet.`)})}function _t(e,t){return h(`/api/backup/download/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)}function vt(e){return new Date(e).toLocaleString(void 0,{day:`2-digit`,month:`short`,year:`numeric`,hour:`2-digit`,minute:`2-digit`})}o();var yt=[[`backup`,`listSchedules`]];function bt({onEdit:i,onOpenRestoreWizard:o}){let{t:s}=G(),{data:c,isLoading:l,isError:u,error:d,refetch:f}=Ne(),p=c??[],m=be().data??[],h=t(()=>{let e=new Map;for(let t of m)e.set(t.id,t);return e},[m]),[g,_]=a(null),v=n(e=>{_(t=>t===e?null:e)},[]),y=t(()=>xt({destById:h,expandedId:g,onToggleExpand:v,onEdit:i}),[h,g,v,i]);return l?e(`div`,{className:`flex items-center gap-2 text-xs text-foreground-subtle animate-pulse`,children:[r(x,{className:`h-3.5 w-3.5 animate-spin`}),s(`backup.backupEntriesTable.loadingBackupEntries`,`Loading backup entries…`)]}):u?r(R,{title:s(`backup.backupEntriesTable.failedToLoadBackupEntries`,`Failed to load backup entries`),message:d instanceof Error?d.message:s(`backup.backupEntriesTable.unknownError`,`Unknown error`),onRetry:()=>void f()}):p.length===0?r(Ee,{icon:N,title:s(`backup.backupEntriesTable.noBackupEntriesYet`,`No backup entries yet`),description:s(`backup.backupEntriesTable.createOneToScheduleBackups`,`Create one to schedule backups across one or more storage locations.`)}):r(V,{columns:y,rows:p,rowKey:e=>e.id,minWidthPx:980,maxBodyHeight:ae,emptyMessage:s(`backup.backupEntriesTable.noBackupEntriesYet`,`No backup entries yet`),onRowClick:e=>i(e),isExpanded:e=>e.id===g,renderExpanded:e=>r(Ot,{row:e,destById:h,...o?{onOpenRestoreWizard:o}:{}})})}function xt(t){return[{key:`expand`,header:``,width:`w-8`,nowrap:!0,notSortableReason:`Expand control`,render:e=>{let n=t.expandedId===e.id;return r(U,{variant:`ghost`,size:`sm`,icon:n?m:u,"aria-label":n?W.t(`backup.backupEntriesTable.hideArchives`,`Hide archives`):W.t(`backup.backupEntriesTable.showArchives`,`Show archives`),"aria-expanded":n,onClick:n=>{n.stopPropagation(),t.onToggleExpand(e.id)}})}},{key:`entry`,header:W.t(`backup.backupEntriesTable.entry`,`Entry`),sortValue:e=>e.label,render:t=>e(`span`,{className:`flex min-w-0 flex-col`,children:[r(`span`,{className:`truncate font-medium text-foreground`,children:t.label||W.t(`backup.backupEntriesTable.unnamed`,`(unnamed)`)}),t.lastRunAt!==void 0&&r(`span`,{className:`text-[10px] text-foreground-subtle`,children:W.t(`backup.backupEntriesTable.lastRun`,{when:new Date(t.lastRunAt).toLocaleString()})})]})},{key:`enabled`,header:W.t(`backup.backupEntriesTable.enabled`,`Enabled`),width:`w-20`,nowrap:!0,sortValue:e=>+!!e.enabled,render:e=>r(`span`,{onClick:e=>e.stopPropagation(),children:r(Tt,{row:e})})},{key:`databases`,header:W.t(`backup.backupEntriesTable.backsUp`,`Backs up`),nowrap:!1,notSortableReason:`Database badges`,render:e=>r(Z,{databases:X(e.databases)})},{key:`locations`,header:W.t(`backup.backupEntriesTable.locations`,`Locations`),nowrap:!1,notSortableReason:`Location chips`,render:e=>r(St,{row:e,destById:t.destById})},{key:`retention`,header:W.t(`backup.backupEntriesTable.retention`,`Retention`),width:`w-24`,nowrap:!0,sortValue:e=>e.retentionCount,render:e=>r(`span`,{onClick:e=>e.stopPropagation(),children:r(Et,{row:e})})},{key:`schedule`,header:W.t(`backup.backupEntriesTable.schedule`,`Schedule`),width:`w-48`,nowrap:!0,sortValue:e=>e.cron,render:e=>r(Ct,{row:e})},{key:`actions`,header:``,align:`right`,nowrap:!0,notSortableReason:`Actions`,render:e=>r(`span`,{onClick:e=>e.stopPropagation(),children:r(Dt,{row:e,onEdit:()=>t.onEdit(e)})})}]}function St({row:e,destById:t}){let{t:n}=G();return e.locationIds.length===0?r(`span`,{className:`text-[11px] italic text-danger`,children:n(`backup.backupEntriesTable.noLocations`,`No locations`)}):r(`span`,{className:`flex flex-wrap gap-1`,children:e.locationIds.map(e=>r(`span`,{className:`inline-flex items-center rounded border border-border bg-background px-1.5 py-0.5 text-[10px] text-foreground`,title:e,children:t.get(e)?.displayName??e},e))})}function Ct({row:t}){let{t:n}=G(),i=t.cron.trim().length>0;return e(`span`,{className:`flex flex-col items-start gap-0.5`,children:[e(`span`,{className:`inline-flex items-center gap-1`,children:[r(N,{className:`h-3 w-3 text-foreground-subtle`}),r(`span`,{className:`font-mono text-[11px] text-foreground`,children:i?t.cron:n(`backup.backupEntriesTable.manual`,`Manual`)})]}),i&&t.nextRunAt!==void 0&&r(`span`,{className:`text-[10px] text-foreground-subtle`,children:W.t(`common.nextRun`,{when:new Date(t.nextRunAt).toLocaleString()})})]})}function wt(e){return t(()=>({id:e.id,label:e.label,cron:e.cron,locationIds:[...e.locationIds],retentionCount:e.retentionCount,...e.dataSources?{dataSources:[...e.dataSources]}:{},...e.databases?{databases:[...e.databases]}:{}}),[e])}function Tt({row:e}){let{t}=G(),n=s(),i=z({onSuccess:()=>{n.invalidateQueries({queryKey:yt})}}),a=wt(e);return r(`label`,{className:`inline-flex cursor-pointer items-center`,children:r(`input`,{type:`checkbox`,className:`accent-primary`,checked:e.enabled,disabled:i.isPending,onChange:e=>i.mutate({...a,enabled:e.target.checked}),"aria-label":t(`backup.backupEntriesTable.enable`,`Enable {{value1}}`,{value1:e.label||e.id})})})}function Et({row:e}){let{t}=G(),n=s(),o=z({onSuccess:()=>{n.invalidateQueries({queryKey:yt})}}),c=wt(e),[l,u]=a(String(e.retentionCount));return i(()=>{u(String(e.retentionCount))},[e.retentionCount]),r(L,{type:`number`,min:1,max:1e3,value:l,disabled:o.isPending,onChange:e=>u(e.target.value),onBlur:()=>{let t=Number.parseInt(l,10);if(Number.isNaN(t)||t<1){u(String(e.retentionCount));return}t!==e.retentionCount&&o.mutate({...c,enabled:e.enabled,retentionCount:t})},onKeyDown:t=>{t.key===`Enter`&&t.target.blur(),t.key===`Escape`&&u(String(e.retentionCount))},className:`w-16`,"aria-label":t(`backup.backupEntriesTable.retentionFor`,`Retention for {{value1}}`,{value1:e.label||e.id})})}function Dt({row:t,onEdit:n}){let{t:i}=G(),a=s(),o=D(),c=Me({onSuccess:()=>{a.invalidateQueries({queryKey:yt})}}),l=oe({onMutate:()=>{a.invalidateQueries({queryKey:[[`backup`,`listRuns`]]})},onSuccess:()=>{a.invalidateQueries({queryKey:[[`backup`,`listArchives`]]}),a.invalidateQueries({queryKey:[[`backup`,`listDestinations`]]}),a.invalidateQueries({queryKey:[[`backup`,`listRuns`]]})}}),u=()=>{t.locationIds.length!==0&&l.mutate({destinations:[...t.locationIds],...t.dataSources&&t.dataSources.length>0?{locations:[...t.dataSources]}:{},label:t.label,retentionCount:t.retentionCount,databases:[...X(t.databases)]})},d=async()=>{await o({title:i(`backup.backupEntriesTable.deleteBackupEntry`,`Delete backup entry?`),message:i(`backup.backupEntriesTable.willStopRunningExistingArchives`,`"{{value1}}" will stop running. Existing archives are kept.`,{value1:t.label||t.id}),confirmLabel:i(`common.delete`,`Delete`),variant:`warning`})&&c.mutate({id:t.id})};return e(`span`,{className:`flex items-center justify-end gap-1.5`,children:[e(H,{size:`sm`,type:`button`,onClick:u,disabled:l.isPending||t.locationIds.length===0,title:i(`backup.backupEntriesTable.runThisEntryNow`,`Run this entry now`),children:[l.isPending?r(x,{className:`h-3 w-3 animate-spin`}):r(p,{className:`h-3 w-3`}),i(`backup.backupEntriesTable.runNow`,`Run now`)]}),r(U,{variant:`ghost`,size:`sm`,icon:_,"aria-label":i(`backup.backupEntriesTable.edit`,`Edit {{value1}}`,{value1:t.label||t.id}),onClick:n}),r(U,{variant:`ghost`,size:`sm`,icon:f,"aria-label":i(`backup.backupEntriesTable.delete`,`Delete {{value1}}`,{value1:t.label||t.id}),disabled:c.isPending,onClick:()=>{d()}})]})}function Ot({row:t,destById:n,onOpenRestoreWizard:i}){let{t:a}=G();return e(`div`,{className:`space-y-4 rounded-lg border border-border bg-background/30 px-4 py-3`,children:[r(`p`,{className:`text-[11px] font-medium text-foreground-subtle`,children:a(`backup.backupEntriesTable.archivesFor`,{name:t.label||t.id})}),t.locationIds.length===0&&r(`p`,{className:`text-xs italic text-foreground-subtle`,children:a(`backup.backupEntriesTable.thisEntryHasNoLocations`,`This entry has no locations selected.`)}),t.locationIds.map(t=>e(`div`,{className:`space-y-1.5`,children:[r(`div`,{className:`text-[11px] font-medium text-foreground-subtle`,children:n.get(t)?.displayName??t}),r(gt,{destinationId:t,restoreSupported:n.get(t)?.restoreSupported??!0,...i?{onOpenRestoreWizard:i}:{}})]},t))]})}function kt({selected:t,onChange:n,disabled:i=!1,testId:a=`backup-databases`}){let{t:o}=G(),s=we().data,c=t.size>0&&dt(Y(t)),l=t.size===0?`Pick at least one.`:c?`Snapshots only: configuration and files are not part of this backup.`:null;return r(B,{label:o(`backup.backupDatabasePicker.whatToBackUp`,`What to back up`),required:!0,...l===null?{}:{description:l},children:r(`div`,{className:`divide-y divide-border rounded border border-border bg-background`,"data-testid":a,children:nt.map(o=>{let c=ct(o,s),l=i||lt(o,s,t);return e(`label`,{className:`flex items-start gap-2 px-3 py-2 text-xs ${l?`opacity-60`:`cursor-pointer hover:bg-primary/5`}`,children:[r(te,{checked:t.has(o),disabled:l,onChange:()=>n(ut(t,o)),"data-testid":`${a}-${o}`}),e(`span`,{className:`min-w-0 flex-1`,children:[r(`span`,{className:`flex flex-wrap items-center gap-1.5 text-foreground`,children:it(o)}),r(`span`,{className:`block text-[11px] text-foreground-subtle`,children:c===`absent`?rt():ot(o)})]})]},o)})})})}o();function At({onClose:t}){let{t:n}=G(),i=s(),[o,c]=a(new Set(J)),l=oe({onMutate:()=>{i.invalidateQueries({queryKey:[[`backup`,`listRuns`]]})},onSuccess:()=>{i.invalidateQueries({queryKey:[[`backup`,`listArchives`]]}),i.invalidateQueries({queryKey:[[`backup`,`listDestinations`]]}),i.invalidateQueries({queryKey:[[`backup`,`listRuns`]]}),t()}});return r(xe,{open:!0,onOpenChange:e=>!e&&t(),children:e(Pe,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,children:[e(Le,{children:[r(se,{children:n(`backup.backupNowDialog.backUpNow`,`Back up now`)}),r(`p`,{className:`text-xs text-foreground-subtle`,children:n(`backup.backupNowDialog.runsOnceAndWritesThe`,`Runs once and writes the archive to every enabled backup location.`)})]}),r(fe,{children:e(`div`,{className:`p-4`,children:[r(kt,{selected:o,onChange:c,disabled:l.isPending,testId:`backup-now-databases`}),l.error&&r(`p`,{role:`alert`,className:`pt-2 text-xs text-danger`,children:l.error.message})]})}),e(he,{children:[r(H,{variant:`outline`,size:`sm`,onClick:t,children:n(`common.cancel`,`Cancel`)}),e(H,{size:`sm`,onClick:()=>{o.size!==0&&l.mutate(ft(o))},disabled:o.size===0||l.isPending,"data-testid":`backup-now-run`,children:[l.isPending?r(x,{className:`h-3.5 w-3.5 animate-spin`}):r(p,{className:`h-3.5 w-3.5`}),n(`backup.backupNowDialog.backUpNow`,`Back up now`)]})]})]})})}o();function jt(e){return e===null?`—`:new Date(e).toLocaleString()}function Mt(e){let t=new Blob([`${e.secretKey}\n`],{type:`text/plain`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`camstack-backup-key-${e.keyId}.txt`,r.click(),URL.revokeObjectURL(n)}function Nt({revealed:t,onDone:n}){let{t:i}=G(),[o,s]=a(!1),[c,l]=a(!1);return r(xe,{open:!0,onOpenChange:e=>!e&&o&&n(),children:e(Pe,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,className:`border-danger/40`,"aria-labelledby":`backup-key-title`,children:[r(Le,{children:r(se,{id:`backup-key-title`,children:i(`backup.encryptionCard.yourKey`,{keyId:t.keyId})})}),e(fe,{className:`space-y-3`,children:[e(`p`,{className:`flex items-start gap-2 rounded-md border border-danger/40 bg-danger/10 p-2 text-xs text-foreground`,children:[r(M,{className:`mt-0.5 h-4 w-4 shrink-0 text-danger`}),r(`span`,{children:i(`backup.backupEncryptionCard.thisKeyIsShownOnly`,`This key is shown only once. CamStack does not keep it — not the hub, not its database, not its backups. Without it, an encrypted backup cannot be restored by anyone, including you. Store it in a password manager or print it, away from this server.`)})]}),r(`div`,{className:`break-all rounded-md border border-border bg-background p-2 font-mono text-xs text-foreground select-all`,children:t.secretKey}),e(`div`,{className:`flex flex-wrap gap-2`,children:[e(H,{size:`sm`,variant:`outline`,onClick:()=>{navigator.clipboard?.writeText(t.secretKey).then(()=>l(!0))},children:[r(S,{className:`mr-1 h-3.5 w-3.5`}),c?i(`backup.backupEncryptionCard.copied`,`Copied`):i(`common.copy`,`Copy`)]}),e(H,{size:`sm`,variant:`outline`,onClick:()=>Mt(t),children:[r(v,{className:`mr-1 h-3.5 w-3.5`}),i(`backup.backupEncryptionCard.downloadAsFile`,`Download as file`)]})]}),e(`label`,{className:`flex items-center gap-2 text-xs text-foreground`,children:[r(`input`,{type:`checkbox`,checked:o,onChange:e=>s(e.target.checked),className:`accent-primary`}),i(`backup.backupEncryptionCard.iHaveStoredThisKey`,`I have stored this key somewhere safe, off this server.`)]})]}),r(he,{children:r(H,{size:`sm`,disabled:!o,onClick:n,children:i(`backup.backupEncryptionCard.iHaveStoredIt`,`I have stored it`)})})]})})}function Pt(){let{t}=G(),n=ye(),i=Ie(),o=_e(),s=D(),[l,u]=a(null),[d,f]=a(null),p=n.data?.enabled??!1,m=n.data?.active??null,h=(n.data?.keys??[]).filter(e=>e.retiredAt!==null),g=async()=>{if(await s({title:p?t(`backup.backupEncryptionCard.replaceTheBackupKey`,`Replace the backup key`):t(`backup.backupEncryptionCard.encryptBackups`,`Encrypt backups`),message:p?t(`backup.backupEncryptionCard.aNewKeyIsGenerated`,`A new key is generated and shown once; new backups are encrypted to it. Older backups keep needing the key they were made with — keep that one too.`):t(`backup.backupEncryptionCard.aBackupKeyIsGenerated`,`A backup key is generated and shown once. Every new backup is encrypted to it, and restoring one will ask for it. Existing backups stay as they are.`),confirmLabel:p?t(`backup.backupEncryptionCard.generateANewKey`,`Generate a new key`):t(`backup.backupEncryptionCard.generateTheKey`,`Generate the key`),variant:`warning`})){f(null);try{let e=await i.mutateAsync({});u({keyId:e.keyId,secretKey:e.secretKey})}catch(e){f(e instanceof Error?e.message:String(e))}}},_=async()=>{if(await s({title:t(`backup.backupEncryptionCard.turnBackupEncryptionOff`,`Turn backup encryption off`),message:t(`backup.backupEncryptionCard.newBackupsWillBeWritten`,`New backups will be written unencrypted. Existing encrypted backups still need their key to be restored.`),confirmLabel:t(`backup.backupEncryptionCard.turnOff`,`Turn off`),variant:`danger`})){f(null);try{await o.mutateAsync({}),n.refetch()}catch(e){f(e instanceof Error?e.message:String(e))}}};return e(`div`,{className:`space-y-2 rounded-lg border border-border bg-surface p-4`,children:[e(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[e(`div`,{className:`flex items-center gap-2`,children:[p?r(C,{className:`h-4 w-4 text-success`}):r(k,{className:`h-4 w-4 text-foreground-subtle`}),r(`h2`,{className:`text-sm font-semibold text-foreground`,children:t(`backup.backupEncryptionCard.encryption`,`Encryption`)}),r(`span`,{className:`text-xs text-foreground-subtle`,children:p&&m!==null?t(`backup.backupEncryptionCard.onKeySince`,`On — key {{keyId}}, since {{value2}}`,{keyId:m.keyId,value2:jt(m.createdAt)}):t(`backup.backupEncryptionCard.offBackupsAreNotEncrypted`,`Off — backups are not encrypted`)})]}),r(`div`,{className:`flex gap-2`,children:p?e(c,{children:[r(H,{size:`sm`,variant:`outline`,disabled:i.isPending,onClick:()=>void g(),children:t(`backup.backupEncryptionCard.replaceKey`,`Replace key`)}),r(H,{size:`sm`,variant:`outline`,disabled:o.isPending,onClick:()=>void _(),children:t(`backup.backupEncryptionCard.turnOff`,`Turn off`)})]}):r(H,{size:`sm`,disabled:i.isPending,onClick:()=>void g(),children:t(`backup.backupEncryptionCard.enableEncryption`,`Enable encryption`)})})]}),r(`p`,{className:`text-xs text-foreground-subtle`,children:t(`backup.backupEncryptionCard.archivesAreEncryptedOnThis`,`Archives are encrypted on this server before they reach any destination. The server keeps only a public key, so it can encrypt scheduled backups but cannot decrypt them — only your backup key can. Covers the database snapshot, config.yaml, addon data (HomeKit pairing, Matter fabric, Tailscale state) and TLS.`)}),h.length>0&&e(`div`,{className:`text-xs`,children:[r(`p`,{className:`text-foreground-subtle`,children:t(`backup.backupEncryptionCard.olderKeysBackupsMadeWith`,`Older keys (backups made with them still need them):`)}),r(`ul`,{className:`font-mono text-foreground`,children:h.map(t=>e(`li`,{children:[t.keyId,` · `,jt(t.createdAt),` → `,jt(t.retiredAt)]},t.keyId))})]}),d!==null&&r(`p`,{className:`text-xs text-danger`,children:d}),l!==null&&r(Nt,{revealed:l,onDone:()=>{u(null),n.refetch()}})]})}o();var Ft=[{id:`manual`,labelKey:`backup.cronEditor.presetManual`,cron:``},{id:`hourly`,labelKey:`backup.cronEditor.presetHourly`,cron:`0 * * * *`,descriptionKey:`backup.cronEditor.presetHourlyDesc`},{id:`every-3h`,labelKey:`backup.cronEditor.preset3h`,cron:`0 */3 * * *`,description:`00:00, 03:00, 06:00, 09:00 …`},{id:`every-6h`,labelKey:`backup.cronEditor.preset6h`,cron:`0 */6 * * *`,description:`00:00, 06:00, 12:00, 18:00`},{id:`daily-3am`,labelKey:`backup.cronEditor.presetDaily`,cron:`0 3 * * *`,descriptionKey:`backup.cronEditor.presetDailyDesc`},{id:`weekly-sun`,labelKey:`backup.cronEditor.presetWeekly`,cron:`0 3 * * 0`,descriptionKey:`backup.cronEditor.presetWeeklyDesc`}];function It(e){let t=e.trim();for(let e of Ft)if(e.cron===t)return e.id;return`custom`}function Lt({value:t,onChange:n,previewCount:o=5,disabled:s=!1}){let{t:c}=G(),l=It(t),[u,d]=a(l===`custom`);i(()=>{l!==`custom`&&d(!1)},[l]);let f=Bt(t,250),p=Re({cron:f,count:o},{enabled:f.trim().length>0}),m=p.data??null,h=e=>{d(!1),n(e.cron)},g=u||l===`custom`;return e(`div`,{className:`space-y-3`,children:[e(`div`,{className:`space-y-1`,children:[r(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-subtle`,children:c(`backup.cronEditor.schedulePreset`,`Schedule preset`)}),e(`div`,{className:`flex flex-wrap gap-1.5`,children:[Ft.map(e=>r(`button`,{type:`button`,onClick:()=>h(e),disabled:s,className:`rounded border px-2 py-1 text-[11px] transition-colors disabled:opacity-50 `+(!u&&l===e.id?`border-primary bg-primary/10 text-primary`:`border-border bg-background text-foreground-subtle hover:bg-primary/5 hover:text-foreground`),title:e.descriptionKey===void 0?e.description??c(e.labelKey):c(e.descriptionKey),children:c(e.labelKey)},e.id)),r(`button`,{type:`button`,onClick:()=>{d(!0),t.trim().length===0&&n(`0 3 * * *`)},disabled:s,className:`rounded border px-2 py-1 text-[11px] transition-colors disabled:opacity-50 `+(g?`border-primary bg-primary/10 text-primary`:`border-border bg-background text-foreground-subtle hover:bg-primary/5 hover:text-foreground`),children:c(`backup.cronEditor.custom`,`Custom…`)})]})]}),g&&e(`div`,{className:`space-y-1`,children:[r(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-subtle`,children:c(`backup.cronEditor.cronExpression5FieldPosix`,`Cron expression (5-field POSIX)`)}),r(`input`,{type:`text`,value:t,onChange:e=>n(e.target.value),disabled:s,placeholder:`0 3 * * *`,spellCheck:!1,className:`w-full rounded border border-border bg-background px-2 py-1.5 text-xs font-mono text-foreground placeholder:text-foreground-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),e(`p`,{className:`text-[10px] text-foreground-subtle`,children:[c(`backup.cronEditor.format`,`Format:`),` `,r(He,{i18nKey:`backup.cronEditor.formatLine`,components:{code:r(`span`,{className:`font-mono`})}})]})]}),r(Rt,{cron:f,preview:m,loading:p.isFetching})]})}function Rt({cron:t,preview:n,loading:i}){let{t:a}=G();return i&&n===null?e(`div`,{className:`flex items-center gap-2 rounded border border-border bg-background/40 px-3 py-2 text-[11px] text-foreground-subtle`,children:[r(x,{className:`h-3 w-3 animate-spin`}),a(`backup.cronEditor.validating`,`Validating…`)]}):n===null?null:n.ok?n.nextRuns.length===0?r(`div`,{className:`rounded border border-border bg-background/40 px-3 py-2 text-[11px] text-foreground-subtle`,children:a(`backup.cronEditor.noFutureRunsMatchThis`,`No future runs match this expression.`)}):e(`div`,{className:`space-y-1`,children:[r(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-subtle`,children:a(`backup.cronEditor.nextRuns`,`Next runs`)}),r(`ul`,{className:`rounded border border-border bg-background/40 divide-y divide-border`,children:n.nextRuns.map((t,n)=>e(`li`,{className:`flex items-center justify-between px-3 py-1.5 text-[11px]`,children:[r(`span`,{className:`text-foreground tabular-nums`,children:new Date(t).toLocaleString()}),r(`span`,{className:`text-foreground-subtle text-[10px] tabular-nums`,children:zt(t)})]},`${t}-${n}`))})]}):r(`div`,{className:`rounded border border-danger/40 bg-danger/10 px-3 py-2 text-[11px] text-danger`,children:n.error??a(`backup.cronEditor.invalidCronExpression`,`Invalid cron expression`)})}function zt(e){let t=e-Date.now();if(t<=0)return W.t(`helpers.relativeTime.now`);let n=Math.floor(t/1e3);if(n<60)return W.t(`helpers.relativeTime.inSeconds`,{count:n});let r=Math.floor(n/60);if(r<60)return W.t(`helpers.relativeTime.inMinutes`,{count:r});let i=Math.floor(r/60);if(i<24)return W.t(`helpers.relativeTime.inHours`,{count:i});let a=Math.floor(i/24);return W.t(`helpers.relativeTime.inDays`,{count:a})}function Bt(e,n){let[r,o]=a(e),s=t(()=>e,[e]);return i(()=>{let e=setTimeout(()=>o(s),n);return()=>clearTimeout(e)},[s,n]),r}o();var Vt=[[`backup`,`listSchedules`]];function Ht({entry:n,onClose:i,onSaved:o}){let{t:c}=G(),l=s(),u=be(),d=u.data??[],[f,p]=a(n?.label??``),[m,h]=a(n?.cron??`0 3 * * *`),[g,_]=a(n?.enabled??!0),[v,y]=a(String(n?.retentionCount??7)),[b,S]=a(new Set(n?.locationIds??[])),[C,w]=a(new Set(n===null?J:X(n.databases))),T=z({onSuccess:()=>{l.invalidateQueries({queryKey:Vt}),o()}}),E=e=>{S(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},D=Number.parseInt(v,10),O=t(()=>f.trim().length>0&&b.size>0&&C.size>0&&!Number.isNaN(D)&&D>=1&&D<=1e3,[f,b,C,D]),k=()=>{O&&T.mutate({...n?{id:n.id}:{},label:f.trim(),cron:m.trim(),enabled:g,locationIds:Array.from(b),retentionCount:D,databases:[...st(C)]})},A=T.error instanceof Error?T.error.message:null;return r(Se,{open:!0,onClose:i,title:n?c(`backup.backupEntryModal.editBackupEntry`,`Edit backup entry`):c(`backup.backupEntryModal.newBackupEntry`,`New backup entry`),icon:N,error:A,width:`lg`,testId:`backup-entry-form`,footer:e(H,{size:`sm`,type:`button`,onClick:k,disabled:!O||T.isPending,children:[T.isPending?r(x,{className:`h-3.5 w-3.5 animate-spin`}):null,n?c(`common.save`,`Save`):c(`backup.backupEntryModal.createEntry`,`Create entry`)]}),children:e(`div`,{className:`space-y-4`,children:[r(B,{label:c(`backup.backupEntryModal.name`,`Name`),required:!0,children:r(L,{value:f,onChange:e=>p(e.target.value),placeholder:c(`backup.backupEntryModal.nightlyOffsite`,`Nightly offsite`),autoFocus:!0,"data-testid":`backup-entry-name`})}),e(B,{label:c(`backup.backupEntryModal.locationsSelected`,`Locations ({{value1}} selected)`,{value1:String(b.size)}),required:!0,children:[u.isLoading&&e(`div`,{className:`flex items-center gap-2 px-1 py-2 text-xs text-foreground-subtle`,children:[r(x,{className:`h-3.5 w-3.5 animate-spin`}),c(`backup.backupEntryModal.loadingLocations`,`Loading locations…`)]}),!u.isLoading&&d.length===0&&r(`div`,{className:`rounded border border-border bg-background px-3 py-2 text-xs text-foreground-subtle italic`,children:c(`backup.backupEntryModal.noBackupsStorageLocationsConfigured`,"No `backups` storage locations configured. Add one in Settings → Storage first.")}),d.length>0&&r(`div`,{className:`max-h-52 divide-y divide-border overflow-y-auto rounded border border-border bg-background`,children:d.map(t=>e(`label`,{className:`flex cursor-pointer items-center justify-between px-3 py-2 text-xs hover:bg-primary/5`,children:[e(`div`,{className:`flex items-center gap-2`,children:[r(`input`,{type:`checkbox`,checked:b.has(t.id),onChange:()=>E(t.id),className:`accent-primary`}),r(`span`,{className:`text-foreground`,children:t.displayName})]}),e(`div`,{className:`flex items-center gap-1.5`,children:[r(`span`,{className:`rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-foreground-subtle`,children:t.kind}),r(`span`,{className:`font-mono text-[10px] text-foreground-subtle`,children:t.id})]})]},t.id))})]}),r(kt,{selected:C,onChange:w,disabled:T.isPending,testId:`backup-entry-databases`}),e(`div`,{className:`grid grid-cols-2 gap-3`,children:[r(B,{label:c(`backup.backupEntryModal.retentionArchivesKept`,`Retention (archives kept)`),required:!0,children:r(L,{type:`number`,min:1,max:1e3,value:v,onChange:e=>y(e.target.value),"data-testid":`backup-entry-retention`})}),r(B,{label:c(`backup.backupEntryModal.enabled`,`Enabled`),description:c(`backup.backupEntryModal.runOnScheduleWhenChecked`,`Run on schedule when checked.`),children:e(`label`,{className:`inline-flex cursor-pointer items-center gap-2 py-1.5 text-xs text-foreground`,children:[r(`input`,{type:`checkbox`,checked:g,onChange:e=>_(e.target.checked),className:`accent-primary`,"data-testid":`backup-entry-enabled`}),r(`span`,{children:c(`backup.backupEntryModal.runOnSchedule`,`Run on schedule`)})]})})]}),r(B,{label:c(`backup.backupEntryModal.schedule`,`Schedule`),children:r(Lt,{value:m,onChange:h,disabled:T.isPending})})]})})}o();var Ut=2e3,Wt=5e3;function Q(e){return e.state===`queued`||e.state===`running`}function Gt(e){if(e.state===`queued`)return{title:W.t(`backup.backupRunsPanel.cancelQueuedBackupRun`,`Cancel queued backup run?`),message:W.t(`backup.backupRunsPanel.thisRunHasNotStarted`,`This run has not started. Cancelling removes it from the queue — nothing has been written, nothing is deleted.`),confirmLabel:W.t(`backup.backupRunsPanel.cancelRun`,`Cancel run`),variant:`warning`};let t=e.completedDestinationIds.length,n=t>0?`${t===1?`The 1 destination`:`The ${t} destinations`} that already completed KEEP${t===1?`S`:``} the archive.`:`No destination has completed yet, so nothing will be kept.`;return{title:W.t(`backup.backupRunsPanel.stopThisBackupRun`,`Stop this backup run?`),message:W.t(`backup.backupRunsPanel.theHalfWrittenStagingArchive`,`The half-written staging archive is deleted and the destination currently uploading discards its partial copy. {{keptSentence}}`,{keptSentence:n}),confirmLabel:W.t(`backup.backupRunsPanel.stopRun`,`Stop run`),variant:`danger`}}function Kt(){let e=D(),[t,i]=a(null),o=ue(void 0,{refetchInterval:e=>(e.state.data??[]).some(Q)?Ut:Wt}),s=ge({onSettled:()=>{i(null),o.refetch()}}),c=n(async t=>{await e(Gt(t))&&(i(t.id),s.mutate({runId:t.id}))},[e,s]);return r(qt,{queryState:o.isError?`error`:o.data===void 0?`pending`:`ready`,runs:o.data??[],cancelingId:t,onCancelRequest:e=>{c(e)},now:Date.now()})}function qt({queryState:t,runs:n,cancelingId:i,onCancelRequest:a,now:o}){let{t:s}=G(),c=t===`ready`&&n.some(Q),l=n.filter(e=>e.state===`running`),u=n.filter(e=>e.state===`queued`),d=n.filter(e=>!Q(e)),f=[...l,...u,...d];return e(`section`,{className:`rounded-lg border border-border bg-surface`,children:[e(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b border-border`,children:[r(`h2`,{className:`text-xs font-semibold text-foreground`,children:s(`backup.backupRunsPanel.runs`,`Runs`)}),c&&e(`span`,{className:`inline-flex items-center gap-1 text-[10px] font-medium text-primary`,title:s(`backup.backupRunsPanel.aBackupRunIsIn`,`A backup run is in progress`),children:[r(`span`,{className:`h-1.5 w-1.5 rounded-full bg-primary animate-pulse`}),s(`backup.runsPanel.live`)]}),r(`span`,{className:`ml-auto text-[10px] text-foreground-subtle`,children:s(`backup.backupRunsPanel.oneRunExecutesAtA`,`One run executes at a time — queued runs wait in line.`)})]}),t===`pending`&&r(`div`,{className:`px-3 py-2.5 text-xs text-foreground-subtle animate-pulse`,children:s(`backup.backupRunsPanel.checkingForBackupRuns`,`Checking for backup runs…`)}),t===`error`&&r(`div`,{className:`px-3 py-2.5 text-xs text-danger`,children:s(`backup.backupRunsPanel.couldNotReadBackupRuns`,`Could not read backup runs — the orchestrator did not answer.`)}),t===`ready`&&n.length===0&&r(`div`,{className:`px-3 py-2.5 text-xs text-foreground-subtle italic`,children:s(`backup.backupRunsPanel.noBackupRunsYetRuns`,`No backup runs yet. Runs appear here the moment one starts — manual or scheduled.`)}),t===`ready`&&n.length>0&&r(`div`,{className:`overflow-x-auto`,children:e(`table`,{className:`w-full text-xs min-w-[720px]`,children:[r(`thead`,{children:e(`tr`,{className:`text-foreground-subtle bg-background/30`,children:[r(`th`,{className:`text-left px-3 py-1.5 font-medium`,children:s(`backup.backupRunsPanel.run`,`Run`)}),r(`th`,{className:`text-left px-3 py-1.5 font-medium`,children:s(`backup.backupRunsPanel.state`,`State`)}),r(`th`,{className:`text-left px-3 py-1.5 font-medium`,children:s(`backup.backupRunsPanel.progress`,`Progress`)}),r(`th`,{className:`text-left px-3 py-1.5 font-medium`,children:s(`backup.backupRunsPanel.destinations`,`Destinations`)}),r(`th`,{className:`text-left px-3 py-1.5 font-medium`,children:s(`backup.backupRunsPanel.timing`,`Timing`)}),r(`th`,{className:`text-right px-3 py-1.5 font-medium w-28`,children:s(`backup.backupRunsPanel.actions`,`Actions`)})]})}),r(`tbody`,{children:f.map(e=>r(Jt,{run:e,canceling:i===e.id,onCancelRequest:a,now:o},e.id))})]})})]})}function Jt({run:t,canceling:n,onCancelRequest:i,now:a}){let{t:o}=G(),s=Q(t);return e(`tr`,{className:`border-t border-border hover:bg-primary/5 align-top`,children:[r(`td`,{className:`px-3 py-2`,children:r(`div`,{className:`text-foreground`,title:t.id,children:t.label??r(`span`,{className:`text-foreground-subtle italic`,children:o(`backup.runsPanel.manual`)})})}),e(`td`,{className:`px-3 py-2`,children:[r(Yt,{run:t}),t.state===`failed`&&t.error!==void 0&&r(`div`,{className:`mt-1 text-[10px] text-danger max-w-56 truncate`,title:t.error,children:t.error})]}),r(`td`,{className:`px-3 py-2`,children:r(Xt,{run:t})}),r(`td`,{className:`px-3 py-2`,children:r(Zt,{run:t})}),r(`td`,{className:`px-3 py-2 text-foreground-subtle tabular-nums`,children:r(Qt,{run:t,now:a})}),r(`td`,{className:`px-3 py-2`,children:r(`div`,{className:`flex justify-end`,children:s&&e(`button`,{onClick:()=>i(t),disabled:n,className:`inline-flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-danger hover:bg-danger/10 disabled:opacity-50`,title:t.state===`queued`?o(`backup.backupRunsPanel.removeThisRunFromThe`,`Remove this run from the queue before it starts`):o(`backup.backupRunsPanel.stopThisRunTheHalf`,`Stop this run — the half-written archive is discarded`),children:[n?r(x,{className:`h-3 w-3 animate-spin`}):r(g,{className:`h-3 w-3`}),t.state===`queued`?o(`common.cancel`,`Cancel`):o(`backup.backupRunsPanel.stop`,`Stop`)]})})})]})}function Yt({run:t}){let{t:n}=G();switch(t.state){case`queued`:return e(`span`,{className:`inline-flex items-center gap-1 rounded bg-foreground-subtle/10 px-1.5 py-0.5 text-[10px] font-medium text-foreground-subtle`,children:[r(b,{className:`h-3 w-3`}),n(`backup.backupRunsPanel.queued`,`Queued`)]});case`running`:return e(`span`,{className:`inline-flex items-center gap-1 rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary`,children:[r(x,{className:`h-3 w-3 animate-spin`}),t.phase===`uploading`?n(`backup.backupRunsPanel.uploading`,`Uploading`):n(`backup.backupRunsPanel.buildingArchive`,`Building archive`)]});case`succeeded`:return e(`span`,{className:`inline-flex items-center gap-1 rounded bg-success/10 px-1.5 py-0.5 text-[10px] font-medium text-success`,children:[r(y,{className:`h-3 w-3`}),n(`backup.backupRunsPanel.succeeded`,`Succeeded`)]});case`failed`:return e(`span`,{className:`inline-flex items-center gap-1 rounded bg-danger/10 px-1.5 py-0.5 text-[10px] font-medium text-danger`,children:[r(w,{className:`h-3 w-3`}),n(`backup.backupRunsPanel.failed`,`Failed`)]});case`cancelled`:return e(`span`,{className:`inline-flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-[10px] font-medium text-amber-700 dark:text-amber-300`,title:n(`backup.backupRunsPanel.stoppedBeforeCompletingEveryDestination`,`Stopped before completing every destination — not a success`),children:[r(F,{className:`h-3 w-3`}),n(`backup.backupRunsPanel.stopped`,`Stopped`)]})}}function Xt({run:t}){let{t:n}=G();if(t.state===`queued`)return r(`span`,{className:`text-foreground-subtle`,children:t.queuePosition===void 0?r(`span`,{className:`italic`,children:n(`backup.backupRunsPanel.waitingItsTurn`,`waiting its turn`)}):e(`span`,{className:`inline-flex items-center gap-1`,children:[r(`span`,{className:t.queuePosition===1?`rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary`:`rounded bg-foreground-subtle/10 px-1.5 py-0.5 text-[10px] font-medium`,children:$t(t.queuePosition)}),n(`backup.backupRunsPanel.inLine`,`in line`)]})});if(t.state===`running`&&t.phase===`building`)return e(`span`,{className:`inline-flex items-center gap-1.5 text-foreground`,children:[r(I,{className:`h-3 w-3 text-primary`}),r(`span`,{className:`tabular-nums font-medium animate-pulse`,children:K(t.stagedBytes)}),r(`span`,{className:`text-foreground-subtle`,children:n(`backup.backupRunsPanel.stagedSoFar`,`staged so far`)})]});if(t.state===`running`){let i=t.archiveSizeBytes;return e(`span`,{className:`inline-flex items-center gap-1.5 text-foreground`,children:[r(P,{className:`h-3 w-3 text-primary`}),e(`span`,{className:`tabular-nums font-medium`,children:[K(t.uploadedBytes),i===void 0?``:` / ${K(i)}`]}),r(`span`,{className:`text-foreground-subtle`,children:n(`backup.backupRunsPanel.toCurrentDestination`,`to current destination`)})]})}let i=t.archiveSizeBytes??(t.stagedBytes>0?t.stagedBytes:void 0);return i===void 0?r(`span`,{className:`text-foreground-subtle italic`,children:`—`}):r(`span`,{className:`tabular-nums text-foreground`,children:n(`backup.runsPanel.archiveSize`,{size:K(i)})})}function Zt({run:t}){let{t:n}=G(),i=t.destinationIds.length,a=t.completedDestinationIds.length,o=t.failedDestinationIds.length;return i===0?r(`span`,{className:`text-foreground-subtle italic`,children:n(`backup.backupRunsPanel.notResolvedYet`,`not resolved yet`)}):e(`div`,{className:`flex flex-col gap-0.5`,children:[r(`span`,{className:`text-foreground-subtle`,title:t.destinationIds.join(`, `),children:n(`backup.runsPanel.targets`,{count:i})}),e(`span`,{className:`inline-flex items-center gap-2 text-[10px]`,children:[a>0&&r(`span`,{className:`text-success`,title:n(`backup.backupRunsPanel.keptTheirArchive`,`Kept their archive: {{value1}}`,{value1:t.completedDestinationIds.join(`, `)}),children:n(`backup.runsPanel.completed`,{count:a})}),o>0&&r(`span`,{className:`text-danger`,title:n(`backup.backupRunsPanel.failed2`,`Failed: {{value1}}`,{value1:t.failedDestinationIds.join(`, `)}),children:n(`backup.runsPanel.failedCount`,{count:o})})]})]})}function Qt({run:t,now:n}){let{t:i}=G();return t.state===`queued`?r(`span`,{children:i(`backup.runsPanel.queuedAgo`,{elapsed:en(n-t.requestedAt)})}):t.startedAt===void 0?r(`span`,{children:`—`}):t.finishedAt===void 0?r(`span`,{children:i(`backup.runsPanel.runningFor`,{elapsed:en(n-t.startedAt)})}):e(`div`,{className:`flex flex-col gap-0.5`,children:[r(`span`,{children:tn(t.finishedAt)}),r(`span`,{className:`text-[10px]`,children:i(`backup.runsPanel.took`,{elapsed:en(t.finishedAt-t.startedAt)})})]})}function $t(e){if(e<=1)return`next`;let t=e%100;if(t>=11&&t<=13)return`${e}th`;switch(e%10){case 1:return`${e}st`;case 2:return`${e}nd`;case 3:return`${e}rd`;default:return`${e}th`}}function en(e){let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${String(t%60).padStart(2,`0`)}s`:`${Math.floor(n/60)}h ${String(n%60).padStart(2,`0`)}m`}function tn(e){return new Date(e).toLocaleString(void 0,{day:`2-digit`,month:`short`,hour:`2-digit`,minute:`2-digit`})}o();var nn=[[`backup`,`list`]];function rn({initialDestinationId:n,initialArchiveId:o,onClose:c,onScheduled:l}){let{t:u}=G(),d=s(),[f,p]=a(n&&o?2:1),[m,h]=a(n),[g,_]=a(o),[v,y]=a(new Set),[b,S]=a(``),{data:C}=be(),w=C??[],{data:D,isLoading:O}=Oe({destinationId:m??``},{enabled:!!m}),k=D??[];i(()=>{if(m!==void 0)return;let e=w.filter(e=>e.restoreSupported);e.length===1&&h(e[0].id)},[m,w]);let{data:A}=Ae({destinationId:m??``,backupId:g??``},{enabled:!!m&&!!g}),M=t(()=>A?.locations??[],[A]);i(()=>{M.length!==0&&y(e=>e.size===0?new Set(M):e)},[M]);let N=me({onSuccess:()=>{d.invalidateQueries({queryKey:nn}),l(),c()}}),P=e=>{y(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},F=k.find(e=>e.id===g),I=F?.encryption!==void 0,L=pt(F?.databases,A?.sqliteSnapshots),R=dt(L),z=!!m&&!!g,B=R||v.size>0,V=z&&B&&!N.isPending&&(!I||b.trim().length>0),ee=()=>{!m||!g||N.mutate({destinationId:m,backupId:g,...R?{}:{locations:[...v]},...I?{backupSecretKey:b.trim()}:{}})};return r(xe,{open:!0,onOpenChange:e=>!e&&c(),children:e(Pe,{width:`md`,placement:`sheet-on-mobile`,scroll:`body`,children:[e(Le,{children:[r(se,{children:u(`backup.restoreWizard.restoreBackup`,`Restore Backup`)}),r(`p`,{className:`text-xs text-foreground-subtle`,children:u(`backup.restoreWizard.stepOf`,{step:f,name:f===1?u(`backup.restoreWizard.pickSource`,`pick source`):f===2?u(`backup.restoreWizard.pickLocations`,`pick locations`):u(`backup.restoreWizard.confirmStep`)})})]}),e(fe,{children:[f===1&&r(an,{destinations:w,destinationId:m,onPickDestination:e=>{h(e),_(void 0),y(new Set)},archives:k,archivesLoading:O,archiveId:g,onPickArchive:_}),f===2&&r(on,{locations:M,picked:v,onToggle:P,databases:L,snapshotsOnly:R}),f===3&&r(sn,{destinationName:w.find(e=>e.id===m)?.displayName??m??``,archive:F,picked:[...v],databases:L,snapshotsOnly:R}),f===3&&F?.encryption!==void 0&&r(cn,{keyId:F.encryption.keyId,value:b,onChange:S}),f===3&&N.error&&r(`p`,{role:`alert`,className:`px-4 pb-2 text-xs text-danger`,children:N.error.message})]}),e(he,{className:`justify-between`,children:[r(`div`,{children:f>1&&e(H,{variant:`outline`,size:`sm`,onClick:()=>p(e=>e===3?2:1),children:[r(E,{className:`h-3 w-3`}),u(`common.back`,`Back`)]})}),e(`div`,{className:`flex items-center gap-2`,children:[r(H,{variant:`outline`,size:`sm`,onClick:c,children:u(`common.cancel`,`Cancel`)}),f<3?e(H,{size:`sm`,disabled:f===1&&!z||f===2&&!B,onClick:()=>p(e=>e===1?2:3),children:[u(`common.next`,`Next`),r(T,{className:`h-3 w-3`})]}):e(H,{size:`sm`,onClick:ee,disabled:!V,children:[N.isPending?r(x,{className:`h-3.5 w-3.5 animate-spin`}):r(j,{className:`h-3.5 w-3.5`}),u(`backup.restoreWizard.scheduleRestore`,`Schedule Restore`)]})]})]})]})})}function an({destinations:t,destinationId:n,onPickDestination:i,archives:a,archivesLoading:o,archiveId:s,onPickArchive:c}){let{t:l}=G(),u=t.filter(e=>e.restoreSupported);return e(`div`,{className:`p-4 space-y-3`,children:[e(`div`,{className:`space-y-1.5`,children:[r(`label`,{className:`text-[10px] text-foreground-subtle uppercase tracking-wide`,children:l(`backup.restoreWizard.destination`,`Destination`)}),r(ce,{value:n??``,onChange:e=>i(e.target.value),options:[{value:``,label:l(`backup.restoreWizard.selectDestination`,`Select destination…`)},...u.map(e=>({value:e.id,label:`${e.displayName} (${e.kind})`}))]})]}),e(`div`,{className:`space-y-1.5`,children:[r(`label`,{className:`text-[10px] text-foreground-subtle uppercase tracking-wide`,children:l(`backup.restoreWizard.archive`,`Archive`)}),!n&&r(`div`,{className:`text-xs text-foreground-subtle italic`,children:l(`backup.restoreWizard.pickADestinationFirst`,`Pick a destination first.`)}),n&&o&&r(`div`,{className:`text-xs text-foreground-subtle animate-pulse`,children:l(`backup.restoreWizard.readingArchives`,`Reading archives…`)}),n&&!o&&a.length===0&&r(`div`,{className:`text-xs text-foreground-subtle italic`,children:l(`backup.restoreWizard.noArchivesAvailableAtThis`,`No archives available at this destination.`)}),n&&a.length>0&&r(`div`,{className:`rounded border border-border bg-background divide-y divide-border max-h-64 overflow-y-auto`,children:a.map(t=>{let n=s===t.id;return e(`label`,{className:`flex items-center justify-between px-3 py-2 text-xs cursor-pointer ${n?`bg-primary/10`:`hover:bg-primary/5`}`,children:[e(`div`,{className:`flex items-center gap-2`,children:[r(`input`,{type:`radio`,name:`archive`,checked:n,onChange:()=>c(t.id),className:`accent-primary`}),e(`div`,{children:[e(`div`,{className:`flex items-center gap-1 font-medium text-foreground`,children:[t.encryption!==void 0&&r(C,{className:`h-3 w-3 text-success`,"aria-label":l(`backup.restoreWizard.encryptedKey`,`encrypted (key {{keyId}})`,{keyId:t.encryption.keyId})}),t.label??t.id]}),r(`div`,{className:`text-[10px] text-foreground-subtle`,children:new Date(t.createdAt).toLocaleString()}),r(`div`,{className:`pt-1`,children:r(Z,{databases:pt(t.databases,void 0)})})]})]}),r(`span`,{className:`text-[10px] text-foreground-subtle tabular-nums`,children:K(t.sizeBytes)})]},t.id)})})]})]})}function on({locations:t,picked:n,onToggle:i,databases:a,snapshotsOnly:o}){let{t:s}=G();return o?e(`div`,{className:`space-y-3 p-4`,children:[e(`div`,{className:`space-y-1.5`,children:[r(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-subtle`,children:s(`backup.restoreWizard.databasesInThisArchive`,`Databases in this archive`)}),r(Z,{databases:a})]}),r(`div`,{className:`rounded border border-info/30 bg-info/10 px-3 py-2 text-[11px] text-info`,children:s(`backup.restoreWizard.snapshotsOnlyRestoringThisArchive`,`Snapshots only: restoring this archive replaces just these databases. It does NOT touch configuration, addons, addon data or certificates.`)})]}):t.length===0?r(`div`,{className:`p-4`,children:r(`div`,{className:`text-xs text-foreground-subtle`,children:s(`backup.restoreWizard.loadingArchiveManifestIfThis`,`Loading archive manifest… If this persists, the archive may predate manifests — restoring will apply everything in the tarball.`)})}):e(`div`,{className:`p-4 space-y-3`,children:[e(`div`,{className:`space-y-1.5`,children:[r(`div`,{className:`text-[10px] uppercase tracking-wide text-foreground-subtle`,children:s(`backup.restoreWizard.databasesInThisArchive`,`Databases in this archive`)}),r(Z,{databases:a})]}),r(`div`,{className:`rounded border border-warning/30 bg-warning/10 px-3 py-2 text-[11px] text-warning`,children:s(`backup.restoreWizard.selectedEntriesWillOverwriteLive`,`Selected entries will overwrite live data on the next server restart. Unchecked entries stay current.`)}),e(`div`,{className:`space-y-1.5`,children:[r(`label`,{className:`text-[10px] text-foreground-subtle uppercase tracking-wide`,children:s(`common.apply`,`Apply`)}),r(`div`,{className:`rounded border border-border bg-background divide-y divide-border max-h-64 overflow-y-auto`,children:t.map(t=>e(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs hover:bg-primary/5 cursor-pointer`,children:[r(`input`,{type:`checkbox`,checked:n.has(t),onChange:()=>i(t),className:`accent-primary`}),r(`span`,{className:`font-mono text-foreground`,children:t}),r(`span`,{className:`ml-auto text-[10px] text-foreground-subtle`,children:un(t)})]},t))})]})]})}function sn({destinationName:t,archive:n,picked:i,databases:a,snapshotsOnly:o}){let{t:s}=G();return e(`div`,{className:`p-4 space-y-3 text-xs`,children:[r(`div`,{className:`rounded border border-warning/30 bg-warning/10 px-3 py-2 text-warning`,children:s(`backup.restoreWizard.restoreIsAppliedAtNext`,`Restore is applied at next server boot. Active connections will drop when you restart.`)}),e(`dl`,{className:`space-y-1.5`,children:[r($,{term:`Destination`,value:t}),r($,{term:`Archive`,value:n?.label??n?.id??`—`}),n&&r($,{term:`Created`,value:`${new Date(n.createdAt).toLocaleString()} · ${K(n.sizeBytes)}`}),e(`div`,{className:`flex justify-between gap-3`,children:[r(`dt`,{className:`text-foreground-subtle`,children:s(`backup.restoreWizard.databases`,`Databases`)}),r(`dd`,{className:`text-right`,children:r(Z,{databases:a})})]}),r($,{term:`Locations`,value:o?`none (configuration is not touched)`:i.length>0?i.join(`, `):`— (full archive)`})]})]})}function cn({keyId:t,value:n,onChange:i}){let{t:a}=G();return e(`div`,{className:`space-y-1.5 px-4 pb-3`,children:[r(`label`,{htmlFor:`restore-backup-key`,className:`text-[10px] uppercase tracking-wide text-foreground-subtle`,children:a(`backup.restoreWizard.backupKey`,`Backup key`)}),r(`input`,{id:`restore-backup-key`,type:`password`,autoComplete:`off`,spellCheck:!1,value:n,onChange:e=>i(e.target.value),placeholder:a(`backup.restoreWizard.camstackBackupSecretV1`,`camstack-backup-secret-v1:…`),className:`w-full rounded border border-border bg-background px-2 py-1.5 font-mono text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-primary`}),r(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(He,{i18nKey:`backup.restoreWizard.encryptedTo`,values:{keyId:t},components:{mono:r(`span`,{className:`font-mono`})}})})]})}function $({term:t,value:n}){return e(`div`,{className:`flex justify-between gap-3`,children:[r(`dt`,{className:`text-foreground-subtle`,children:t}),r(`dd`,{className:`text-foreground font-mono text-right truncate`,children:n})]})}var ln={db:`Database`,addons:`Addon configs`,"addons-data":`Addon data`,tls:`TLS certificates`,cache:`Cache`,data:`Top-level data`};function un(e){return ln[e]??``}o();function dn(){let{t}=G(),n=D(),o=ne(),{state:s,openNew:c,openEdit:l,close:u}=ke({editKey:`edit`,newKey:`new`}),f=Ne(),m=f.data??[],[h,g]=a(null),[_,v]=a(!1),[y,b]=a(!1),[S,C]=a(!1),w=s.mode===`edit`?m.find(e=>e.id===s.id)??null:null;i(()=>{s.mode===`edit`&&!f.isLoading&&w===null&&u()},[s.mode,f.isLoading,w,u]);let T=s.mode===`new`||s.mode===`edit`&&w!==null,E=async()=>{await n({title:t(`system.backup.restartServerNow`,`Restart server now?`),message:t(`system.backup.activeConnectionsWillDropAnd`,`Active connections will drop and the apply-backup hook will run before boot.`),confirmLabel:t(`system.backup.restart`,`Restart`),variant:`warning`})&&o.mutate({confirm:!0})};return e(Ge,{embedded:!0,children:[e(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,"data-testid":`backup-actions`,children:[e(H,{variant:`outline`,size:`sm`,type:`button`,onClick:()=>C(!0),"data-testid":`backup-now`,children:[r(p,{className:`h-3.5 w-3.5`}),t(`system.backup.backUpNow`,`Back up now`)]}),e(H,{variant:`outline`,size:`sm`,type:`button`,onClick:()=>v(!0),children:[r(j,{className:`h-3.5 w-3.5`}),t(`system.backup.restore`,`Restore…`)]}),e(H,{size:`sm`,type:`button`,onClick:c,"data-testid":`backup-new-entry`,children:[r(d,{className:`h-3.5 w-3.5`}),t(`system.backup.newEntry`,`New entry`)]})]}),y&&r(`div`,{className:`rounded-lg border border-warning/30 bg-warning/10 px-3 py-2.5 text-xs text-warning`,children:e(`div`,{className:`flex items-center justify-between gap-3`,children:[e(`div`,{className:`flex items-center gap-2`,children:[r(j,{className:`h-3.5 w-3.5`}),r(`span`,{children:t(`system.backup.restoreScheduledRestartTheServer`,`Restore scheduled. Restart the server to apply.`)})]}),e(H,{size:`sm`,variant:`outline`,type:`button`,onClick:()=>{E()},disabled:o.isPending,children:[o.isPending?r(x,{className:`h-3.5 w-3.5 animate-spin`}):r(j,{className:`h-3.5 w-3.5`}),t(`system.backup.restartNow`,`Restart Now`)]})]})}),r(Pt,{}),r(Kt,{}),r(bt,{onEdit:e=>l(e.id),onOpenRestoreWizard:e=>g(e)}),T&&r(Ht,{entry:w,onClose:u,onSaved:u}),S&&r(At,{onClose:()=>C(!1)}),(h||_)&&r(rn,{...h?{initialDestinationId:h.destinationId,initialArchiveId:h.archiveId}:{},onClose:()=>{g(null),v(!1)},onScheduled:()=>b(!0)})]})}o();function fn(e){return Object.entries(e).map(([e,t])=>`${e} ${t}`).join(` · `)}function pn(e){return e.reduce((e,t)=>e+Object.values(t.stores).reduce((e,t)=>e+t,0),0)}function mn(){let{t}=G(),n=D(),i=de(),[o,s]=a(null),[l,u]=a(null),d=async e=>{u(null);try{s(await i.mutateAsync({confirm:e}))}catch(e){u(e instanceof Error?e.message:String(e))}},p=async()=>{o===null||o.status!==`dry-run`||await n({title:t(`systemPage.deletedDevices.confirmTitle`,`Delete the data of deleted devices?`),message:o.devices.map(e=>`#${e.deviceId}: ${fn(e.stores)}`).join(`
2
- `),confirmLabel:t(`systemPage.deletedDevices.confirmLabel`,`Delete`),variant:`danger`})&&await d(!0)},m=[{key:`device`,header:t(`systemPage.deletedDevices.device`,`Device`),render:e=>`#${e.deviceId}`},{key:`stores`,header:t(`systemPage.deletedDevices.stores`,`Data held`),nowrap:!1,render:e=>fn(e.stores)}];return e(`div`,{className:`space-y-4`,"data-testid":`deleted-devices-data`,children:[r(`p`,{className:`text-sm text-foreground-muted`,children:t(`systemPage.deletedDevices.intro`,`Data that still belongs to devices that were deleted before deletions were recorded: footage, events, history and per-addon settings. Scanning deletes nothing; deleting asks first and shows what goes.`)}),e(`div`,{className:`flex flex-wrap items-center gap-2`,children:[e(H,{variant:`outline`,onClick:()=>void d(!1),disabled:i.isPending,"data-testid":`deleted-devices-scan`,children:[i.isPending?r(x,{className:`mr-2 h-4 w-4 animate-spin`}):r(A,{className:`mr-2 h-4 w-4`}),t(`systemPage.deletedDevices.scan`,`Scan`)]}),o?.status===`dry-run`&&o.devices.length>0?e(H,{variant:`danger`,onClick:()=>void p(),disabled:i.isPending,"data-testid":`deleted-devices-delete`,children:[r(f,{className:`mr-2 h-4 w-4`}),t(`systemPage.deletedDevices.delete`,`Delete the data of {{count}} devices…`,{count:o.devices.length})]}):null]}),l===null?null:r(`p`,{className:`text-sm text-danger`,children:l}),o?.status===`skipped`?r(`p`,{className:`text-sm text-warning`,"data-testid":`deleted-devices-skipped`,children:t(`systemPage.deletedDevices.skipped`,`Nothing was listed or deleted: the device list could not be trusted ({{reason}}). Try again.`,{reason:o.reason??``})}):null,o!==null&&o.status!==`skipped`?e(c,{children:[r(`p`,{className:`text-sm`,"data-testid":`deleted-devices-summary`,children:o.status===`cleaned`?t(`systemPage.deletedDevices.cleaned`,`Deleted {{rows}} items of {{count}} devices.`,{rows:pn(o.devices),count:o.devices.length}):t(`systemPage.deletedDevices.found`,`{{count}} deleted devices still hold {{rows}} items.`,{rows:pn(o.devices),count:o.devices.length})}),r(V,{columns:m,rows:o.devices,rowKey:e=>e.deviceId,emptyMessage:t(`systemPage.deletedDevices.none`,`No data belongs to a deleted device.`)}),o.unreachable.length>0?r(`p`,{className:`text-xs text-foreground-muted`,children:t(`systemPage.deletedDevices.unreachable`,`Not asked (unreachable): {{names}}`,{names:o.unreachable.join(`, `)})}):null]}):null]})}var hn=`view`,gn=`kinds`,_n=`deleted-devices`;function vn(){let{t}=G(),[n,i]=Ue(),a=n.get(`view`)===`deleted-devices`?_n:gn;return e(`div`,{className:l,children:[e(`div`,{className:`mb-3 space-y-2`,children:[r(le,{appearance:`pills`,value:a,onValueChange:e=>{i(t=>{let n=new URLSearchParams(t);return e===`kinds`?n.delete(hn):n.set(hn,e),n},{replace:!0})},children:e(ee,{className:`flex flex-wrap gap-1`,children:[r(re,{value:gn,children:t(`systemPage.data.viewKinds`,`Record kinds`)}),r(re,{value:_n,children:t(`systemPage.data.viewDeletedDevices`,`Deleted devices`)})]})}),a===`kinds`?r(`p`,{className:`text-xs text-foreground-muted`,children:t(`systemPage.data.recordsUnifiedIntro`,`Every declared record kind on this hub. Entry kinds can be added, edited and deleted; the rest are read-only. Secret fields are redacted.`)}):null]}),r(a===`kinds`?ve:mn,{})]})}var yn={entries:null,"deleted-devices":`deleted-devices`};function bn(){let{t:e}=G(),t=Be(`/system/data`,{t:e,isAdmin:!0})??{icon:O,title:e(`system.data`,`Data`)},[n]=Ue(),i=yn[n.get(`tab`)??``];if(i!==void 0){let e=new URLSearchParams(n);return e.set(`tab`,`records`),i!==null&&e.set(`view`,i),r(Ve,{replace:!0,to:{search:e.toString()}})}return r(We,{icon:t.icon,title:t.title,defaultSection:`storage`,sectionsLabel:`${t.title} sections`,sections:[{id:`storage`,label:e(`systemPage.data.storage`,`Storage`),content:r(tt,{})},{id:`records`,label:e(`systemPage.data.records`,`Records`),content:r(vn,{}),ownedParams:[`view`,`recordsOwner`,`recordsKind`,`entryNew`,`entryEdit`]},{id:`backup`,label:e(`systemPage.data.backup`,`Backup`),content:r(dn,{})}]})}export{bn as DataPage};