@camstack/addon-admin-ui 1.2.531 → 1.2.532

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 (137) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/assets/{AddonAssetIcon-Cp5zLEvD.js → AddonAssetIcon-CfGdzQS1.js} +1 -1
  3. package/dist/assets/Addons-D2MV22hj.js +5 -0
  4. package/dist/assets/{AdminPage-D2S65e6Q.js → AdminPage-95Fx8-ai.js} +1 -1
  5. package/dist/assets/{AdminSectionedPage-CKX5JkdQ.js → AdminSectionedPage-CXlo0qGc.js} +1 -1
  6. package/dist/assets/{AiProfiles-BIQHK5vc.js → AiProfiles-Bb1UnC_U.js} +1 -1
  7. package/dist/assets/Build-B3Pfe7Gr.js +40 -0
  8. package/dist/assets/{Calendars-Brkz06fF.js → Calendars-6NC4XKbJ.js} +1 -1
  9. package/dist/assets/{Cluster-BtvDTlfe.js → Cluster-BK3JDN8a.js} +1 -1
  10. package/dist/assets/ComposedDeviceEditDialog-FYsRkLBz.js +1 -0
  11. package/dist/assets/CompositionBlockEditor-B5c79zIn.js +2 -0
  12. package/dist/assets/{CompositionEditorPage-GtC8DYG6.js → CompositionEditorPage-DC7kXor2.js} +1 -1
  13. package/dist/assets/{Data-39SL2gbC.js → Data-DXhl9LBq.js} +1 -1
  14. package/dist/assets/{DeviceDetail-C9eCLTmW.js → DeviceDetail-CXnY80TP.js} +2 -2
  15. package/dist/assets/{DeviceDoActionFields-Ca2TmJDn.js → DeviceDoActionFields-CoQ2tX-q.js} +1 -1
  16. package/dist/assets/Devices-C0JTSIZP.js +1 -0
  17. package/dist/assets/{EmbedPlayerPage-D91A6i3P.js → EmbedPlayerPage-BDaNxrOE.js} +1 -1
  18. package/dist/assets/{FormBuilder-C01MTb_b.js → FormBuilder-BTaNPSjN.js} +1 -1
  19. package/dist/assets/{History-OBh3harZ.js → History-CxgkTGB8.js} +1 -1
  20. package/dist/assets/{Identity-Bx-Ja-MP.js → Identity-BMPRwxzH.js} +1 -1
  21. package/dist/assets/{IntegrationDetail-TLO47L5-.js → IntegrationDetail-DuM1lFY-.js} +1 -1
  22. package/dist/assets/{IntegrationHub-C--hpDK-.js → IntegrationHub-DzmepqLp.js} +1 -1
  23. package/dist/assets/{Integrations-Cm9BV3o8.js → Integrations-B9EgQmNO.js} +1 -1
  24. package/dist/assets/{Integrations-GHsM_7uc.js → Integrations-CiSPvaJK.js} +1 -1
  25. package/dist/assets/{Library-D2EugVqE.js → Library-DcwBFLS2.js} +1 -1
  26. package/dist/assets/{Locations-Cb8RSNkt.js → Locations-DFR37ATW.js} +1 -1
  27. package/dist/assets/{Logs-Gsq1EPYC.js → Logs-CFR9B1vW.js} +1 -1
  28. package/dist/assets/{MaskShapeCanvas-4rUt1muq.js → MaskShapeCanvas-Du7NeQ1p.js} +1 -1
  29. package/dist/assets/{MotionZonesSettings-D8frKIxI.js → MotionZonesSettings-DEov5lgX.js} +1 -1
  30. package/dist/assets/{MyAccess-WsIYje4M.js → MyAccess-qH72oIKl.js} +1 -1
  31. package/dist/assets/Network-Bs4ySinW.js +1 -0
  32. package/dist/assets/{NodeAddonsSettingsPanel-DYEAw_0K.js → NodeAddonsSettingsPanel-CKuqtZiy.js} +1 -1
  33. package/dist/assets/Notifications-CrJqzOsT.js +1 -0
  34. package/dist/assets/Pipeline-DINXMlHJ.js +1 -0
  35. package/dist/assets/{PrivacyMaskSettings-LVUmj3W4.js → PrivacyMaskSettings-B3og-Ovf.js} +1 -1
  36. package/dist/assets/{Recordings-DeZnE3O5.js → Recordings-CcLwVhIE.js} +1 -1
  37. package/dist/assets/{RemoteGrid-CjSx3Aah.js → RemoteGrid-BJ5xj0Z6.js} +1 -1
  38. package/dist/assets/{ScanNetworkModal-CvlBpDgq.js → ScanNetworkModal-agfFGh7H.js} +1 -1
  39. package/dist/assets/{SceneMonitorEditor-CUgqZlLF.js → SceneMonitorEditor-RvxV30AA.js} +1 -1
  40. package/dist/assets/{SessionsList-CPlqGJSE.js → SessionsList-MVWwyBor.js} +1 -1
  41. package/dist/assets/{Showroom-CoWYMVAI.js → Showroom-CcxQEbpv.js} +1 -1
  42. package/dist/assets/{System-CqV_BBXI.js → System-mXNnser5.js} +1 -1
  43. package/dist/assets/Templates-DlXAN6pH.js +1 -0
  44. package/dist/assets/{Terminal-BiuPjGjh.js → Terminal-BShZ11PH.js} +1 -1
  45. package/dist/assets/{Trans-DlVN2FAm.js → Trans-BgSU9dw1.js} +1 -1
  46. package/dist/assets/{Viewer-VFeL3oiK.js → Viewer-BebHLPaG.js} +1 -1
  47. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BzI5prAS.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DIitQnBe.js} +1 -1
  48. package/dist/assets/{addon-icons-context-D_SbgBlL.js → addon-icons-context-v7m0a2FB.js} +1 -1
  49. package/dist/assets/addon-kind-filter-CEGKkC1O.js +1 -0
  50. package/dist/assets/{archive-BdOuJA6D.js → archive-DXMVa-lX.js} +1 -1
  51. package/dist/assets/{assignment-candidates-FrlfxULJ.js → assignment-candidates-66hRsjMW.js} +1 -1
  52. package/dist/assets/{authed-media-Cdlj2yED.js → authed-media-Czu7XTaj.js} +1 -1
  53. package/dist/assets/{bell-off-DE260sCQ.js → bell-off-CEN8nQp-.js} +1 -1
  54. package/dist/assets/{board-model-C8M8reLO.js → board-model-D8H0B0qn.js} +1 -1
  55. package/dist/assets/{boxes-ncBMqqF7.js → boxes-eRc-lVOF.js} +1 -1
  56. package/dist/assets/circle-slash-CX4B4mGW.js +1 -0
  57. package/dist/assets/client-AOeY3PoN.js +806 -0
  58. package/dist/assets/{cloud-upload-xWhkZB2K.js → cloud-upload-DUJt0JdH.js} +1 -1
  59. package/dist/assets/crop-BXN2L3sb.js +1 -0
  60. package/dist/assets/{device-integration-icon-DXsx1ovH.js → device-integration-icon-C4S0QaFp.js} +1 -1
  61. package/dist/assets/device-picker-model-CXUDiSMs.js +1 -0
  62. package/dist/assets/dist-Cx9VAEKP.js +806 -0
  63. package/dist/assets/{dist-CxGqD88j.js → dist-DM6wwJkd.js} +1 -1
  64. package/dist/assets/{file-up-DSkaqgrs.js → file-up-BBdOgTK9.js} +1 -1
  65. package/dist/assets/{format-5kuRrylR.js → format-42qUo1AE.js} +1 -1
  66. package/dist/assets/{grip-vertical-oBh5I9hk.js → grip-vertical-BmdvsAbL.js} +1 -1
  67. package/dist/assets/{hard-drive-download-BJ9Vaf4q.js → hard-drive-download-Bc1pBGlo.js} +1 -1
  68. package/dist/assets/{hostInit-ClzsOBVS.js → hostInit-D8BcPSGc.js} +1 -1
  69. package/dist/assets/i18n-DFGXm9ze.js +1 -0
  70. package/dist/assets/{icons-B7ZVbtoQ.js → icons-BtVYU84-.js} +1 -1
  71. package/dist/assets/{index-BoU7NTPo.js → index-DzxzA2lU.js} +3 -3
  72. package/dist/assets/{key-5z5CPQqC.js → key-CJv2Q3F2.js} +1 -1
  73. package/dist/assets/{key-round-DE61GWtp.js → key-round-QObyZIrV.js} +1 -1
  74. package/dist/assets/{layers-DUXoEBYs.js → layers-Bty4v-Tb.js} +1 -1
  75. package/dist/assets/{linked-devices-model-D76tAwE6.js → linked-devices-model-Cgwx8ecs.js} +1 -1
  76. package/dist/assets/{list-ordered-DSox6EY0.js → list-ordered-D-ONPhRl.js} +1 -1
  77. package/dist/assets/{location-owned-usage-BSaNp20e.js → location-owned-usage-CcliDqzu.js} +1 -1
  78. package/dist/assets/{memory-stick-f2B4Aw1x.js → memory-stick-Drrk6RL-.js} +1 -1
  79. package/dist/assets/{message-square-plus-DUwM59NW.js → message-square-plus-C1puLp2Z.js} +1 -1
  80. package/dist/assets/{mf-entry-bootstrap-0-167f91f2.js → mf-entry-bootstrap-0-31ab8284.js} +2 -2
  81. package/dist/assets/{mic-off-DpDwbFnF.js → mic-off-BSOCVNWB.js} +1 -1
  82. package/dist/assets/{monitor-off-Cevi7ihB.js → monitor-off-CnQwhS8p.js} +1 -1
  83. package/dist/assets/{monitor-smartphone-DPzM2qXf.js → monitor-smartphone-DOpzfamp.js} +1 -1
  84. package/dist/assets/mount-CXUDiSMs.js +1 -0
  85. package/dist/assets/{notification-schedule-field-B_Y6t98m.js → notification-schedule-field-BOCpJtoM.js} +1 -1
  86. package/dist/assets/{player-overlays-D0HsTHUG.js → player-overlays-CdeStLFY.js} +1 -1
  87. package/dist/assets/{recycle-CK0-gO9v.js → recycle-ClLhxLjT.js} +1 -1
  88. package/dist/assets/remoteEntry-CXTI50w4.js +1 -0
  89. package/dist/assets/{ruler-C_9y2OuS.js → ruler-coNtNpKS.js} +1 -1
  90. package/dist/assets/{scan-eye-Cqs3dsDB.js → scan-eye-BShVz2L8.js} +1 -1
  91. package/dist/assets/{scissors-BomV8klv.js → scissors-BxXRJpwa.js} +1 -1
  92. package/dist/assets/{search-x-Ck_vydrn.js → search-x-DpL8duZX.js} +1 -1
  93. package/dist/assets/{send-B8Po_JT_.js → send-ViRZe20J.js} +1 -1
  94. package/dist/assets/{settings-2-CyAo_nYh.js → settings-2-DvF55McU.js} +1 -1
  95. package/dist/assets/{shapes-CuqJ7CA_.js → shapes-DNn8cgSP.js} +1 -1
  96. package/dist/assets/{sigma-YkVVm5dQ.js → sigma-BEGwr5QF.js} +1 -1
  97. package/dist/assets/{speaker-iL5Ep2q1.js → speaker-GaNm4DAq.js} +1 -1
  98. package/dist/assets/src-CImrkf6y.js +67 -0
  99. package/dist/assets/{sso-popup-aQr_3YWW.js → sso-popup-BdhUqpKP.js} +1 -1
  100. package/dist/assets/{step-inspector-model-gcGmLTWD.js → step-inspector-model-BFTjgLfV.js} +1 -1
  101. package/dist/assets/{table-2-Bx38akVK.js → table-2-C8-ZYHKC.js} +1 -1
  102. package/dist/assets/{timer-reset-Z1XvH6K-.js → timer-reset-DN7ULNUA.js} +1 -1
  103. package/dist/assets/{unlink-Dx9zRmL9.js → unlink-86HtbCbI.js} +1 -1
  104. package/dist/assets/{usb-_-9JyMyy.js → usb-D-x3E2FA.js} +1 -1
  105. package/dist/assets/{use-device-bound-caps-BR0aNe6v.js → use-device-bound-caps-Co_MVwFl.js} +1 -1
  106. package/dist/assets/{use-scenes-feed-CNxJKI3Y.js → use-scenes-feed-YiyBa_Xr.js} +1 -1
  107. package/dist/assets/{use-stationary-objects-CFFufETF.js → use-stationary-objects-BQcBWrZ4.js} +1 -1
  108. package/dist/assets/useEventInvalidation-CXUDiSMs.js +1 -0
  109. package/dist/assets/{useNodeUrlSelection-zNi606-l.js → useNodeUrlSelection-Drl3e02l.js} +1 -1
  110. package/dist/assets/user-round-utP9DdB_.js +1 -0
  111. package/dist/assets/{user-x-DCKuWnFc.js → user-x-Zewc1EPo.js} +1 -1
  112. package/dist/assets/{variable-pzTTvzbo.js → variable-DkO97Gws.js} +1 -1
  113. package/dist/assets/{video-Dn2Lqozt.js → video-D8GbzI4M.js} +1 -1
  114. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-o917suSb.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BjuBkWi8.js} +2 -2
  115. package/dist/index.html +13 -13
  116. package/dist/server/addon.js +62303 -61890
  117. package/package.json +1 -1
  118. package/dist/assets/Addons-BES3OMn0.js +0 -5
  119. package/dist/assets/Build-DjlUwtu8.js +0 -40
  120. package/dist/assets/ComposedDeviceEditDialog-UYQVMVk7.js +0 -1
  121. package/dist/assets/CompositionBlockEditor-CYd3iEcq.js +0 -2
  122. package/dist/assets/Devices-DwFifk2g.js +0 -1
  123. package/dist/assets/Network-CjuJ-PkF.js +0 -1
  124. package/dist/assets/Notifications-DcpvQo5d.js +0 -1
  125. package/dist/assets/Pipeline-CoNbGWDs.js +0 -1
  126. package/dist/assets/Templates-CMETwZM5.js +0 -1
  127. package/dist/assets/circle-slash-bDMoAvuJ.js +0 -1
  128. package/dist/assets/client-3nhKn2xf.js +0 -711
  129. package/dist/assets/crop-BZhdHvRT.js +0 -1
  130. package/dist/assets/device-picker-model-yyadLjpT.js +0 -1
  131. package/dist/assets/dist-dKXZSA43.js +0 -711
  132. package/dist/assets/i18n-BTbD-8vc.js +0 -1
  133. package/dist/assets/mount-yyadLjpT.js +0 -1
  134. package/dist/assets/remoteEntry-CURqqH0d.js +0 -1
  135. package/dist/assets/src-D1j-98hX.js +0 -67
  136. package/dist/assets/useEventInvalidation-yyadLjpT.js +0 -1
  137. package/dist/assets/user-round-BnFLdVEf.js +0 -1
@@ -1 +1 @@
1
- import{C as e,K as t,S as n,et as r}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{cn as i,dn as a,fn as o,hn as s,ln as c,mn as l,pn as u,un as d}from"./client-3nhKn2xf.js";import{U as f}from"./src-D1j-98hX.js";import{t as p}from"./i18n-BTbD-8vc.js";import{t as m}from"./useTranslation-BJr-n0es.js";import"./notification-schedule-field-B_Y6t98m.js";import{n as h,t as g}from"./use-device-bound-caps-BR0aNe6v.js";r();var _=`mt-1 w-full rounded border border-border bg-background px-2 py-1 text-xs`,v=`block text-[11px] font-medium text-foreground`,y=`deviceId`;function b(e,t){return t.length===0?0:t.length===1?t[0]:t.find(t=>!e.includes(t))??t[t.length-1]}function x(e,t,n){if(t.length===0)return[];if(t.length===1)return t;let r=t.find(t=>!e.includes(t));if(r===void 0)return t;let i=n(r);if(i===void 0)return[r];let a=e[0]??t.find(e=>e!==r);if(a===void 0)return[r];let o=n(a);return o===void 0||!s(o,i)?[r]:t.filter(e=>{let t=n(e);return t!==void 0&&s(o,t)})}function S(e){return e.length===0?0:e.length===1?e[0]:[...e]}function C(e){return typeof e==`number`?e>0?[e]:[]:Array.isArray(e)?e.filter(e=>e>0):[]}function w(e,t){return{deviceId:e,cap:t.cap,method:t.method,...t.args===void 0?{}:{args:{...t.args}}}}function T(e,t){return p.t(`deviceDoAction.customLabel`,{name:`${e}.${t}`})}function E({value:r,onChange:p,devices:E,listState:D,fleet:O,allowTriggerDevice:k=!1,allowMultiSameFamily:A=!1,testId:j=`device-do-action`}){let{t:M}=m(),N=typeof r.deviceId!=`number`&&!Array.isArray(r.deviceId),P=C(r.deviceId),F=t(()=>E.filter(e=>u(String(e.type??``))),[E]),I=t(()=>{let e=new Map;for(let t of F)t.type!==void 0&&t.type!==null&&e.set(t.id,String(t.type));return e},[F]),L=t(()=>{if(!A||P.length===0)return F;let e=I.get(P[0]);return e===void 0?F:F.filter(t=>{if(P.includes(t.id))return!0;let n=t.type!==void 0&&t.type!==null?String(t.type):void 0;return n!==void 0&&s(e,n)})},[A,P,F,I]),R=g(!A&&P.length===1?P[0]:0),z=h(A?P:[]),B=t(()=>N?a():P.length===0?[]:A?z.isLoading&&z.data===void 0?[]:d(P.map(e=>({boundCaps:z.data?.get(e),deviceType:I.get(e)}))):R.data===void 0&&R.isLoading?[]:c({boundCaps:R.data,deviceType:I.get(P[0])}),[N,P,A,z.data,z.isLoading,R.data,R.isLoading,I]),V=o(r.cap,r.method,r.args),H=l(r.cap,r.method,r.args),U=r.cap!==``&&r.method!==``&&H===null&&(N||P.length>0),W=A?z.isLoading:R.isLoading,G=A?z.isError:R.isError,K=e=>{if(e.startsWith(`custom:`))return;let t=i.find(t=>t.id===e);t!==void 0&&p(w(N?r.deviceId:P.length>0?S(P):F[0]?.id??0,t))};return e(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,"data-testid":j,children:[k&&e(`div`,{className:`w-full max-w-xs`,children:[n(`label`,{className:v,children:M(`deviceDoAction.deviceDoActionFields.target`,`Target`)}),e(`select`,{className:_,"data-testid":`${j}-target`,value:N?`trigger`:`device`,onChange:e=>{if(e.target.value===`trigger`){p({deviceId:{$var:y},cap:``,method:``});return}p({deviceId:F[0]?.id??0,cap:``,method:``})},children:[n(`option`,{value:`device`,children:M(`deviceDoAction.deviceDoActionFields.specificDevice`,`Specific device`)}),n(`option`,{value:`trigger`,children:M(`deviceDoAction.deviceDoActionFields.theDeviceThatTriggeredThis`,`The device that triggered this run`)})]})]}),!N&&e(`div`,{"data-testid":`${j}-device`,children:[n(`label`,{className:v,children:M(`deviceDoAction.deviceLabel`,{count:A?2:1})}),n(f,{devices:L,listState:D,...O===void 0?{}:{fleet:O},value:[...P],onChange:e=>{p({deviceId:S(A?x(P,e,e=>I.get(e)):(()=>{let t=b(P,e);return t>0?[t]:[]})()),cap:``,method:``})},emptyLabel:A?`No devices selected`:`No device selected`,noun:`device`,testId:`${j}-device-picker`}),A&&P.length>1&&n(`p`,{className:`mt-1 text-[11px] text-foreground-subtle`,children:M(`deviceDoAction.deviceDoActionFields.sameFamilyOnlyTheAction`,`Same family only — the action runs on each selected device.`)})]}),e(`div`,{className:`w-full max-w-sm`,children:[n(`label`,{className:v,children:M(`deviceDoAction.deviceDoActionFields.action`,`Action`)}),e(`select`,{className:_,"data-testid":`${j}-action`,value:V===`custom:${r.cap}.${r.method}`?V:H?.id??``,disabled:!N&&(P.length===0||W),onChange:e=>K(e.target.value),children:[n(`option`,{value:``,children:!N&&P.length===0?M(`deviceDoAction.deviceDoActionFields.pickADeviceFirst`,`Pick a device first`):W?M(`deviceDoAction.deviceDoActionFields.loadingActions`,`Loading actions…`):B.length===0?M(`deviceDoAction.deviceDoActionFields.noActionsForThisDevice`,`No actions for this device`):M(`deviceDoAction.deviceDoActionFields.selectAnAction`,`Select an action…`)}),U&&n(`option`,{value:V,children:T(r.cap,r.method)}),B.map(e=>n(`option`,{value:e.id,children:e.label},e.id))]}),G&&n(`p`,{className:`mt-1 text-[11px] text-warning`,children:M(`deviceDoAction.deviceDoActionFields.couldNotReadThisDevice`,`Could not read this device’s capabilities.`)})]}),H?.openArgs!==void 0&&H.openArgs.length>0&&n(`div`,{className:`flex flex-col gap-2`,children:H.openArgs.map(t=>{let i=r.args?.[t.key],a=typeof i==`string`||typeof i==`number`?String(i):``;return e(`div`,{className:`w-full max-w-sm`,children:[n(`label`,{className:v,htmlFor:`${j}-${t.key}`,children:t.label}),n(`input`,{id:`${j}-${t.key}`,className:_,"data-testid":`${j}-${t.key}`,type:t.kind===`number`?`number`:`text`,value:a,onChange:e=>{let n=e.target.value,i=r.args===void 0?{}:{...r.args};if(n===``)delete i[t.key];else if(t.kind===`number`){let e=Number(n);Number.isNaN(e)?delete i[t.key]:i[t.key]=e}else i[t.key]=n;p(Object.keys(i).length>0?{...r,args:i}:{deviceId:r.deviceId,cap:r.cap,method:r.method})}})]},t.key)})})]})}export{E as t};
1
+ import{C as e,K as t,S as n,et as r}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{cn as i,dn as a,fn as o,hn as s,ln as c,mn as l,pn as u,un as d}from"./client-AOeY3PoN.js";import{U as f}from"./src-CImrkf6y.js";import{t as p}from"./i18n-DFGXm9ze.js";import{t as m}from"./useTranslation-BJr-n0es.js";import"./notification-schedule-field-BOCpJtoM.js";import{n as h,t as g}from"./use-device-bound-caps-Co_MVwFl.js";r();var _=`mt-1 w-full rounded border border-border bg-background px-2 py-1 text-xs`,v=`block text-[11px] font-medium text-foreground`,y=`deviceId`;function b(e,t){return t.length===0?0:t.length===1?t[0]:t.find(t=>!e.includes(t))??t[t.length-1]}function x(e,t,n){if(t.length===0)return[];if(t.length===1)return t;let r=t.find(t=>!e.includes(t));if(r===void 0)return t;let i=n(r);if(i===void 0)return[r];let a=e[0]??t.find(e=>e!==r);if(a===void 0)return[r];let o=n(a);return o===void 0||!s(o,i)?[r]:t.filter(e=>{let t=n(e);return t!==void 0&&s(o,t)})}function S(e){return e.length===0?0:e.length===1?e[0]:[...e]}function C(e){return typeof e==`number`?e>0?[e]:[]:Array.isArray(e)?e.filter(e=>e>0):[]}function w(e,t){return{deviceId:e,cap:t.cap,method:t.method,...t.args===void 0?{}:{args:{...t.args}}}}function T(e,t){return p.t(`deviceDoAction.customLabel`,{name:`${e}.${t}`})}function E({value:r,onChange:p,devices:E,listState:D,fleet:O,allowTriggerDevice:k=!1,allowMultiSameFamily:A=!1,testId:j=`device-do-action`}){let{t:M}=m(),N=typeof r.deviceId!=`number`&&!Array.isArray(r.deviceId),P=C(r.deviceId),F=t(()=>E.filter(e=>u(String(e.type??``))),[E]),I=t(()=>{let e=new Map;for(let t of F)t.type!==void 0&&t.type!==null&&e.set(t.id,String(t.type));return e},[F]),L=t(()=>{if(!A||P.length===0)return F;let e=I.get(P[0]);return e===void 0?F:F.filter(t=>{if(P.includes(t.id))return!0;let n=t.type!==void 0&&t.type!==null?String(t.type):void 0;return n!==void 0&&s(e,n)})},[A,P,F,I]),R=g(!A&&P.length===1?P[0]:0),z=h(A?P:[]),B=t(()=>N?a():P.length===0?[]:A?z.isLoading&&z.data===void 0?[]:d(P.map(e=>({boundCaps:z.data?.get(e),deviceType:I.get(e)}))):R.data===void 0&&R.isLoading?[]:c({boundCaps:R.data,deviceType:I.get(P[0])}),[N,P,A,z.data,z.isLoading,R.data,R.isLoading,I]),V=o(r.cap,r.method,r.args),H=l(r.cap,r.method,r.args),U=r.cap!==``&&r.method!==``&&H===null&&(N||P.length>0),W=A?z.isLoading:R.isLoading,G=A?z.isError:R.isError,K=e=>{if(e.startsWith(`custom:`))return;let t=i.find(t=>t.id===e);t!==void 0&&p(w(N?r.deviceId:P.length>0?S(P):F[0]?.id??0,t))};return e(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,"data-testid":j,children:[k&&e(`div`,{className:`w-full max-w-xs`,children:[n(`label`,{className:v,children:M(`deviceDoAction.deviceDoActionFields.target`,`Target`)}),e(`select`,{className:_,"data-testid":`${j}-target`,value:N?`trigger`:`device`,onChange:e=>{if(e.target.value===`trigger`){p({deviceId:{$var:y},cap:``,method:``});return}p({deviceId:F[0]?.id??0,cap:``,method:``})},children:[n(`option`,{value:`device`,children:M(`deviceDoAction.deviceDoActionFields.specificDevice`,`Specific device`)}),n(`option`,{value:`trigger`,children:M(`deviceDoAction.deviceDoActionFields.theDeviceThatTriggeredThis`,`The device that triggered this run`)})]})]}),!N&&e(`div`,{"data-testid":`${j}-device`,children:[n(`label`,{className:v,children:M(`deviceDoAction.deviceLabel`,{count:A?2:1})}),n(f,{devices:L,listState:D,...O===void 0?{}:{fleet:O},value:[...P],onChange:e=>{p({deviceId:S(A?x(P,e,e=>I.get(e)):(()=>{let t=b(P,e);return t>0?[t]:[]})()),cap:``,method:``})},emptyLabel:A?`No devices selected`:`No device selected`,noun:`device`,testId:`${j}-device-picker`}),A&&P.length>1&&n(`p`,{className:`mt-1 text-[11px] text-foreground-subtle`,children:M(`deviceDoAction.deviceDoActionFields.sameFamilyOnlyTheAction`,`Same family only — the action runs on each selected device.`)})]}),e(`div`,{className:`w-full max-w-sm`,children:[n(`label`,{className:v,children:M(`deviceDoAction.deviceDoActionFields.action`,`Action`)}),e(`select`,{className:_,"data-testid":`${j}-action`,value:V===`custom:${r.cap}.${r.method}`?V:H?.id??``,disabled:!N&&(P.length===0||W),onChange:e=>K(e.target.value),children:[n(`option`,{value:``,children:!N&&P.length===0?M(`deviceDoAction.deviceDoActionFields.pickADeviceFirst`,`Pick a device first`):W?M(`deviceDoAction.deviceDoActionFields.loadingActions`,`Loading actions…`):B.length===0?M(`deviceDoAction.deviceDoActionFields.noActionsForThisDevice`,`No actions for this device`):M(`deviceDoAction.deviceDoActionFields.selectAnAction`,`Select an action…`)}),U&&n(`option`,{value:V,children:T(r.cap,r.method)}),B.map(e=>n(`option`,{value:e.id,children:e.label},e.id))]}),G&&n(`p`,{className:`mt-1 text-[11px] text-warning`,children:M(`deviceDoAction.deviceDoActionFields.couldNotReadThisDevice`,`Could not read this device’s capabilities.`)})]}),H?.openArgs!==void 0&&H.openArgs.length>0&&n(`div`,{className:`flex flex-col gap-2`,children:H.openArgs.map(t=>{let i=r.args?.[t.key],a=typeof i==`string`||typeof i==`number`?String(i):``;return e(`div`,{className:`w-full max-w-sm`,children:[n(`label`,{className:v,htmlFor:`${j}-${t.key}`,children:t.label}),n(`input`,{id:`${j}-${t.key}`,className:_,"data-testid":`${j}-${t.key}`,type:t.kind===`number`?`number`:`text`,value:a,onChange:e=>{let n=e.target.value,i=r.args===void 0?{}:{...r.args};if(n===``)delete i[t.key];else if(t.kind===`number`){let e=Number(n);Number.isNaN(e)?delete i[t.key]:i[t.key]=e}else i[t.key]=n;p(Object.keys(i).length>0?{...r,args:i}:{deviceId:r.deviceId,cap:r.cap,method:r.method})}})]},t.key)})})]})}export{E as t};
@@ -0,0 +1 @@
1
+ import{C as e,K as t,R as n,S as r,Y as i,et as a,o,x as s}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Fi as c,Fn as l,In as u,dt as d,zt as f}from"./player-overlays-CdeStLFY.js";import{Co as p,Er as m,Fr as h,Fs as g,Ft as _,Io as v,Lr as y,Ns as b,Oo as x,Pr as S,Pt as C,Sr as w,Tr as T,br as E,ii as D,qo as O,r as k,xr as A}from"./src-CImrkf6y.js";import{t as j}from"./useTranslation-BJr-n0es.js";import{H as M,Q as N}from"./index-DzxzA2lU.js";import{t as P}from"./AdminPage-95Fx8-ai.js";import"./useEventInvalidation-CXUDiSMs.js";import{t as F}from"./device-integration-icon-C4S0QaFp.js";import{n as I}from"./addon-kind-filter-CEGKkC1O.js";a();function L(e,t){return e.filter(e=>e.canAdd).map(e=>({addonId:e.addonId,name:e.name,instances:t.filter(t=>t.addonId===e.addonId&&t.enabled&&t.info?.fixed!==!0)})).filter(e=>e.instances.length>0||!t.some(t=>t.addonId===e.addonId&&t.info?.fixed===!0)).sort((e,t)=>e.name.localeCompare(t.name))}function R(e,t){return`/integrations/${encodeURIComponent(e)}?instance=${encodeURIComponent(t)}&add=1`}function z(e){return`/integrations?setup=${encodeURIComponent(e)}`}function B({open:n,onClose:i}){let{t:a}=j(),o=N(),s=b(void 0,{enabled:n}),c=g(void 0,{enabled:n}),u=t(()=>s.data===void 0||c.data===void 0?null:L(s.data,c.data),[s.data,c.data]),d=s.isError||c.isError,f=e=>{i(),o(e)};return r(E,{open:n,onOpenChange:e=>!e&&i(),children:e(w,{width:`md`,placement:`sheet-on-mobile`,children:[r(T,{children:r(m,{children:a(`devices.addDevice.title`,`Add device`)})}),r(A,{children:d?r(S,{message:a(`devices.addDevice.loadFailed`,`Integrations could not be loaded.`),onRetry:()=>{s.refetch(),c.refetch()}}):u===null?e(`div`,{className:`space-y-2`,"data-testid":`add-device-pending`,children:[r(y,{className:`h-10 w-full`}),r(y,{className:`h-10 w-full`})]}):u.length===0?r(h,{icon:l,title:a(`devices.addDevice.noneTitle`,`No integration installed`),description:a(`devices.addDevice.noneDescription`,`Install an integration first, then add devices from it.`),action:r(D,{onClick:()=>f(I),children:a(`devices.browseIntegrations`,`Browse integrations`)})}):r(`ul`,{className:`space-y-1.5`,children:u.map(t=>t.instances.length===0?r(`li`,{children:e(D,{variant:`outline`,className:`w-full justify-between`,onClick:()=>f(z(t.addonId)),children:[r(`span`,{className:`truncate`,children:t.name}),r(`span`,{className:`text-foreground-subtle`,children:a(`devices.addDevice.setUp`,`Set up`)})]})},t.addonId):t.instances.map(n=>r(`li`,{children:e(D,{variant:`outline`,className:`w-full justify-between`,onClick:()=>f(R(t.addonId,n.id)),children:[r(`span`,{className:`truncate`,children:t.name}),n.name!==t.name&&r(`span`,{className:`truncate text-foreground-subtle`,children:n.name})]})},n.id)))})})]})})}var V=32;function H(e,t){let n=e=>t(e).kind===`orphan`,r=new Set;for(let t of e)n(t)&&r.add(t.id);let i=new Map;for(let t of e)i.set(t.id,t);let a=(e,t=0)=>{if(t>V)return!1;if(r.has(e.id))return!0;if(e.parentDeviceId==null)return!1;let n=i.get(e.parentDeviceId);return n?a(n,t+1):!1},o=[],s=[];for(let t of e)a(t)?s.push(t):o.push(t);return{activeDevices:o,orphanDevices:s}}a();function U(){let{t:a}=j(),m=N(),[h,y]=i(!1),b=d(),S=o();k([`deviceManager`],[`device.registered`,`device.unregistered`,`device.online`,`device.offline`,`device.disabled`,`device.enabled`]),k([`integrations`],[`integration.enabled`,`integration.disabled`,`integration.deleted`,`provider.started`,`provider.stopped`,`addon.installed`,`addon.uninstalled`,`addon.started`,`addon.stopped`]);let{data:w}=v({projection:`slim`}),{data:T}=g(void 0),E=O({onSuccess:()=>{S.invalidateQueries({queryKey:[[`deviceManager`]]})}}),A=p({onSuccess:()=>{S.invalidateQueries({queryKey:[[`deviceManager`]]})}}),L=x({onSuccess:()=>{S.invalidateQueries({queryKey:[[`deviceManager`]]})}}),R=t(()=>w??[],[w]),z=t(()=>_(T),[T]),{activeDevices:V,orphanDevices:U}=t(()=>H(R,z),[R,z]),W=t(()=>{let e=new Map;for(let t of R)e.set(t.id,{id:t.id,name:t.name??t.stableId??`#${String(t.id)}`});return e},[R]),G=n(e=>W.get(e)??null,[W]),K=t(()=>(T??[]).map(e=>({id:e.id,name:e.name??e.addonId,icon:r(M,{type:e.addonId,size:`sm`})})),[T]),q=n(e=>m(`/devices/${String(e)}`),[m]);return e(P,{icon:c,title:a(`nav.devices`,`Devices`),actions:e(s,{children:[e(D,{variant:`outline`,size:`sm`,onClick:()=>m(I),children:[r(l,{className:`h-3.5 w-3.5`}),a(`devices.browseIntegrations`,`Browse integrations`)]}),e(D,{size:`sm`,onClick:()=>y(!0),children:[r(u,{className:`h-3.5 w-3.5`}),a(`devices.addDevice.title`,`Add device`)]})]}),children:[r(B,{open:h,onClose:()=>y(!1)}),r(C,{context:`devices`,devices:V,trpc:b.trpcClient,filters:{integrations:K},integrationOf:z,resolveIntegrationIcon:F,resolveParent:G,onNavigate:q,batchActions:{remove:E.mutate,disable:A.mutate,enable:L.mutate}}),U.length>0&&e(`div`,{className:`mt-6 space-y-2`,children:[e(`div`,{className:`flex items-baseline gap-2`,children:[r(f,{className:`h-3.5 w-3.5 text-warning shrink-0`}),r(`h2`,{className:`text-sm font-semibold text-foreground`,children:a(`devices.orphanDevices`,`Orphan devices`)}),r(`span`,{className:`text-[10px] text-foreground-subtle`,children:a(`common.deviceOrphans`,{count:U.length})})]}),e(`div`,{className:`rounded-lg border border-warning/30 bg-warning/5 p-2`,children:[r(`p`,{className:`text-[11px] text-foreground-subtle px-2 pb-2`,children:a(`devices.theseDevicesReferenceAnIntegration`,"These devices reference an integration that is no longer registered (their `integrationId`, or — for older devices without one — their `addonId`). Delete them, or re-install the missing integration to bring them back online. The provider badge beside each row is the addon that serves it.")}),r(C,{context:`devices`,devices:U,trpc:b.trpcClient,integrationOf:z,urlScope:`nested`,lsKey:`devices:orphan`,resolveIntegrationIcon:F,resolveParent:G,onNavigate:q})]})]})]})}export{U as DevicesPage};
@@ -1 +1 @@
1
- import{C as e,K as t,S as n,V as r,Y as i,d as a,et as o,u as s}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{lt as c}from"./player-overlays-D0HsTHUG.js";import{Oo as l}from"./client-3nhKn2xf.js";import{D as u,F as d,N as f,O as p,T as m,y as h}from"./__vite-browser-external-BCAtXlNQ.js";import{Tn as g,df as _,jn as v,ln as y,pn as b}from"./src-D1j-98hX.js";import{t as x}from"./useTranslation-BJr-n0es.js";o();var S=d([p({kind:m(`adaptive`)}),p({kind:m(`profile`),profile:l})]),C=p({serverUrl:f().min(1),token:f().min(1),deviceId:u().int().nonnegative(),target:S,muted:h()});function w(e,t){let n=t===void 0?{type:`state`,state:e}:{type:`state`,state:e,message:t};window.ReactNativeWebView?.postMessage(JSON.stringify(n))}function T(e){switch(e){case`playing`:return`playing`;case`error`:return`error`;case`connecting`:case`disconnected`:case`idle`:return`connecting`}}function E(e){return e.kind===`adaptive`?{kind:`adaptive`}:{kind:`profile`,profile:e.profile}}function D(e){return e.kind===`adaptive`?`embed:adaptive`:`embed:profile:${e.profile}`}function O(){let e=window.__CAMSTACK_EMBED__;if(e==null)return{ok:!1,error:`window.__CAMSTACK_EMBED__ is not set`};let t=C.safeParse(e);return t.success?{ok:!0,config:t.data}:{ok:!1,error:t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}: ${e.message}`).join(`; `)}}function k({message:t}){let{t:n}=x();return r(()=>{w(`error`,t)},[t]),e(`div`,{style:{position:`fixed`,inset:0,display:`flex`,alignItems:`center`,justifyContent:`center`,background:`#000`,color:`#f87171`,fontFamily:`system-ui, sans-serif`,fontSize:13,padding:16,textAlign:`center`},children:[n(`embedPlayerPage.embedConfigError`,`Embed config error:`),` `,t]})}function A({system:e,deviceId:a,initialTarget:o,initialMuted:s}){let[c,l]=i(o),[u,d]=i(s),{handleOffer:f,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:_,getSessionState:y,getSessionDebug:b,applyDownlinkProbe:x}=g(e.trpcClient,a),C=t(()=>E(c),[c]),O=t(()=>(e,t)=>f(C,e,t),[f,C]),k=t(()=>(e,t,n)=>f(n,t,e),[f]);r(()=>(window.__camstackEmbed={setMuted:e=>d(e),setTarget:e=>{let t=S.safeParse(e);t.success&&l(t.data)}},()=>{window.__camstackEmbed&&delete window.__camstackEmbed}),[]);let A=D(c);return n(`div`,{style:{position:`fixed`,inset:0,width:`100vw`,height:`100vh`,background:`#000`},children:n(v,{serverUrl:e.serverUrl,streamKey:A,autoPlay:!0,muted:u,showControls:!1,className:`w-full h-full`,getSessionDebug:b,applyDownlinkProbe:x,handleOffer:O,reoffer:k,getSessionState:y,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:_,onStateChange:e=>w(T(e)),onError:e=>w(`error`,e)},A)})}function j(){let{t:e}=x(),i=t(()=>O(),[]),o=t(()=>{if(!i.ok)return null;let e=b({serverUrl:i.config.serverUrl,token:i.config.token}),t=new a({defaultOptions:{queries:{retry:!1,refetchOnWindowFocus:!1}}});return y(t),{system:e,queryClient:t}},[i]);return r(()=>{if(o)return()=>{o.system.close()}},[o]),i.ok?o?n(c,{system:o.system,children:n(s,{client:o.queryClient,children:n(_.Provider,{client:o.system.trpcClient,queryClient:o.queryClient,children:n(A,{system:o.system,deviceId:i.config.deviceId,initialTarget:i.config.target,initialMuted:i.config.muted})})})}):n(k,{message:e(`embedPlayerPage.failedToInitialiseTheEmbed`,`Failed to initialise the embed player`)}):n(k,{message:i.error})}export{j as EmbedPlayerPage};
1
+ import{C as e,K as t,S as n,V as r,Y as i,d as a,et as o,u as s}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{lt as c}from"./player-overlays-CdeStLFY.js";import{ko as l}from"./client-AOeY3PoN.js";import{D as u,F as d,N as f,O as p,T as m,y as h}from"./__vite-browser-external-BCAtXlNQ.js";import{Tn as g,df as _,jn as v,ln as y,pn as b}from"./src-CImrkf6y.js";import{t as x}from"./useTranslation-BJr-n0es.js";o();var S=d([p({kind:m(`adaptive`)}),p({kind:m(`profile`),profile:l})]),C=p({serverUrl:f().min(1),token:f().min(1),deviceId:u().int().nonnegative(),target:S,muted:h()});function w(e,t){let n=t===void 0?{type:`state`,state:e}:{type:`state`,state:e,message:t};window.ReactNativeWebView?.postMessage(JSON.stringify(n))}function T(e){switch(e){case`playing`:return`playing`;case`error`:return`error`;case`connecting`:case`disconnected`:case`idle`:return`connecting`}}function E(e){return e.kind===`adaptive`?{kind:`adaptive`}:{kind:`profile`,profile:e.profile}}function D(e){return e.kind===`adaptive`?`embed:adaptive`:`embed:profile:${e.profile}`}function O(){let e=window.__CAMSTACK_EMBED__;if(e==null)return{ok:!1,error:`window.__CAMSTACK_EMBED__ is not set`};let t=C.safeParse(e);return t.success?{ok:!0,config:t.data}:{ok:!1,error:t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}: ${e.message}`).join(`; `)}}function k({message:t}){let{t:n}=x();return r(()=>{w(`error`,t)},[t]),e(`div`,{style:{position:`fixed`,inset:0,display:`flex`,alignItems:`center`,justifyContent:`center`,background:`#000`,color:`#f87171`,fontFamily:`system-ui, sans-serif`,fontSize:13,padding:16,textAlign:`center`},children:[n(`embedPlayerPage.embedConfigError`,`Embed config error:`),` `,t]})}function A({system:e,deviceId:a,initialTarget:o,initialMuted:s}){let[c,l]=i(o),[u,d]=i(s),{handleOffer:f,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:_,getSessionState:y,getSessionDebug:b,applyDownlinkProbe:x}=g(e.trpcClient,a),C=t(()=>E(c),[c]),O=t(()=>(e,t)=>f(C,e,t),[f,C]),k=t(()=>(e,t,n)=>f(n,t,e),[f]);r(()=>(window.__camstackEmbed={setMuted:e=>d(e),setTarget:e=>{let t=S.safeParse(e);t.success&&l(t.data)}},()=>{window.__camstackEmbed&&delete window.__camstackEmbed}),[]);let A=D(c);return n(`div`,{style:{position:`fixed`,inset:0,width:`100vw`,height:`100vh`,background:`#000`},children:n(v,{serverUrl:e.serverUrl,streamKey:A,autoPlay:!0,muted:u,showControls:!1,className:`w-full h-full`,getSessionDebug:b,applyDownlinkProbe:x,handleOffer:O,reoffer:k,getSessionState:y,getIceServers:p,addIceCandidate:m,getIceCandidates:h,closeSession:_,onStateChange:e=>w(T(e)),onError:e=>w(`error`,e)},A)})}function j(){let{t:e}=x(),i=t(()=>O(),[]),o=t(()=>{if(!i.ok)return null;let e=b({serverUrl:i.config.serverUrl,token:i.config.token}),t=new a({defaultOptions:{queries:{retry:!1,refetchOnWindowFocus:!1}}});return y(t),{system:e,queryClient:t}},[i]);return r(()=>{if(o)return()=>{o.system.close()}},[o]),i.ok?o?n(c,{system:o.system,children:n(s,{client:o.queryClient,children:n(_.Provider,{client:o.system.trpcClient,queryClient:o.queryClient,children:n(A,{system:o.system,deviceId:i.config.deviceId,initialTarget:i.config.target,initialMuted:i.config.muted})})})}):n(k,{message:e(`embedPlayerPage.failedToInitialiseTheEmbed`,`Failed to initialise the embed player`)}):n(k,{message:i.error})}export{j as EmbedPlayerPage};
@@ -1 +1 @@
1
- import{C as e,S as t,Y as n,et as r,x as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Nd as a,hr as o,mr as s,si as c}from"./src-D1j-98hX.js";import{t as l}from"./useTranslation-BJr-n0es.js";import{t as u}from"./notification-schedule-field-B_Y6t98m.js";r();function d(e){return e>=8}function f(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`windows`);if(!(!Array.isArray(t)||t.length===0))return e}function p(e){return e.type===`multiselect`}function m(e){let t=e.suggestions;return t===void 0||t.length===0?[]:t.map(e=>({value:e,label:e}))}function h(e){return e.map(e=>({value:e.value,label:e.label,...e.description===void 0?{}:{description:e.description},...e.iconId===void 0?{}:{iconId:e.iconId}}))}function g(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function _({field:n,values:r,onChange:i,onChangeMany:a,disabled:_,translationFn:v,onTestField:b,externalProbe:x,allFields:S,onAction:C}){let{t:w}=l();if(n.type===`tags`){if(!o(n,r,S))return null;let e=n.creatable!==!1;return t(c,{mode:`multi`,options:m(n),value:g(r[n.key]),onChange:e=>i(n.key,e),disabled:_===!0||n.disabled===!0,creatable:e,...n.createLabel===void 0?{}:{createLabel:n.createLabel},...n.maxTags===void 0?{}:{maxItems:n.maxTags},label:y(n.label,v),description:n.description===void 0?void 0:y(n.description,v),placeholder:n.placeholder??w(`formBuilder.formBuilder.searchOrAdd`,`Search or add…`),testId:`config-tags-${n.key}`})}if(n.type===`schedule`){if(!o(n,r,S))return null;let a=y(n.label,v),s=n.description===void 0?void 0:y(n.description,v),c=n.mode===`times`?`times`:`windows`;return e(`div`,{className:`space-y-1`,"data-testid":`config-schedule-${n.key}`,children:[a!==void 0&&t(`label`,{className:`block text-[11px] font-medium text-foreground-subtle`,children:a}),s!==void 0&&t(`p`,{className:`text-[10px] text-foreground-subtle`,children:s}),t(u,{mode:c,value:f(r[n.key]),onChange:e=>i(n.key,e)})]})}return p(n)&&(d(n.options.length)||n.creatable===!0)?o(n,r,S)?t(c,{mode:`multi`,options:h(n.options),value:g(r[n.key]),onChange:e=>i(n.key,e),disabled:_===!0||n.disabled===!0,creatable:n.creatable===!0,...n.createLabel===void 0?{}:{createLabel:n.createLabel},...n.maxItems===void 0?{}:{maxItems:n.maxItems},label:y(n.label,v),description:n.description===void 0?void 0:y(n.description,v),placeholder:n.placeholder??w(`formBuilder.formBuilder.searchToAdd`,`Search to add…`),testId:`config-multiselect-${n.key}`,listboxId:`msel-${n.key}`}):null:t(s,{field:n,values:r,onChange:i,onChangeMany:a,disabled:_,translationFn:v,onTestField:b,externalProbe:x,allFields:S,onAction:C})}function v(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function y(e,t){if(e!==void 0)return t&&v(e)?t(e):e}function b({section:r,values:c,onChange:l,onChangeMany:u,disabled:d,translationFn:f,onTestField:p,probeResults:m,onAction:h}){let[g,v]=n(r.defaultCollapsed??!1),b=r.style===`accordion`;if(r.fields.reduce((e,t)=>e+ +!!o(t,c,r.fields),0)===0)return null;let x=r.fields,S=r.columns??2,C=S===1?`grid-cols-1`:S===3?`grid-cols-1 @[480px]:grid-cols-2 @[880px]:grid-cols-3`:S===4?`grid-cols-1 @[480px]:grid-cols-2 @[1140px]:grid-cols-4`:`grid-cols-1 @[480px]:grid-cols-2`,w=r.fields.length===1&&r.fields[0]?.type===`widget`?r.fields[0]:void 0,T=w!==void 0||!r.title&&!r.description;return e(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},"data-settings-section":r.id,children:[!T&&(b?e(`button`,{type:`button`,"aria-expanded":!g,onClick:()=>v(e=>!e),className:`flex w-full items-center justify-between mb-2 text-left`,children:[e(`div`,{children:[r.title&&t(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:y(r.title,f)}),r.description&&t(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:y(r.description,f)})]}),t(a,{expanded:!g,className:`ml-2`})]}):t(`div`,{className:`flex items-center justify-between mb-2`,children:e(`div`,{children:[r.title&&t(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:y(r.title,f)}),r.description&&t(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:y(r.description,f)})]})})),!(g&&!T)&&(w===void 0?t(i,{children:t(`div`,{className:`grid ${C} gap-x-3 gap-y-2.5`,children:x.map(e=>t(_,{field:e,values:c,onChange:l,onChangeMany:u,disabled:d,translationFn:f,onTestField:p,externalProbe:m?.[e.key],allFields:r.fields,onAction:h},e.key))})}):t(s,{field:w,values:c,onChange:l,onChangeMany:u,disabled:d,translationFn:f,onTestField:p,externalProbe:m?.[w.key],allFields:r.fields,onAction:h},w.key))]})}function x({schema:e,values:n,onChange:r,disabled:i,translationFn:a,onTestField:o,probeResults:s,onClearProbe:c,onAction:l,visibilityContext:u}){let d=u?{...u,...n}:n,f=(e,t)=>{r({...n,[e]:t}),c?.(e)},p=e=>{r({...n,...e});for(let t of Object.keys(e))c?.(t)};return t(`div`,{className:`space-y-4`,children:e.sections.map((e,n)=>t(b,{section:e,values:d,onChange:f,onChangeMany:p,disabled:i,translationFn:a,onTestField:o,probeResults:s,onAction:l},`${e.id}-${n}`))})}export{x as t};
1
+ import{C as e,S as t,Y as n,et as r,x as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Nd as a,hr as o,mr as s,si as c}from"./src-CImrkf6y.js";import{t as l}from"./useTranslation-BJr-n0es.js";import{t as u}from"./notification-schedule-field-BOCpJtoM.js";r();function d(e){return e>=8}function f(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`windows`);if(!(!Array.isArray(t)||t.length===0))return e}function p(e){return e.type===`multiselect`}function m(e){let t=e.suggestions;return t===void 0||t.length===0?[]:t.map(e=>({value:e,label:e}))}function h(e){return e.map(e=>({value:e.value,label:e.label,...e.description===void 0?{}:{description:e.description},...e.iconId===void 0?{}:{iconId:e.iconId}}))}function g(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function _({field:n,values:r,onChange:i,onChangeMany:a,disabled:_,translationFn:v,onTestField:b,externalProbe:x,allFields:S,onAction:C}){let{t:w}=l();if(n.type===`tags`){if(!o(n,r,S))return null;let e=n.creatable!==!1;return t(c,{mode:`multi`,options:m(n),value:g(r[n.key]),onChange:e=>i(n.key,e),disabled:_===!0||n.disabled===!0,creatable:e,...n.createLabel===void 0?{}:{createLabel:n.createLabel},...n.maxTags===void 0?{}:{maxItems:n.maxTags},label:y(n.label,v),description:n.description===void 0?void 0:y(n.description,v),placeholder:n.placeholder??w(`formBuilder.formBuilder.searchOrAdd`,`Search or add…`),testId:`config-tags-${n.key}`})}if(n.type===`schedule`){if(!o(n,r,S))return null;let a=y(n.label,v),s=n.description===void 0?void 0:y(n.description,v),c=n.mode===`times`?`times`:`windows`;return e(`div`,{className:`space-y-1`,"data-testid":`config-schedule-${n.key}`,children:[a!==void 0&&t(`label`,{className:`block text-[11px] font-medium text-foreground-subtle`,children:a}),s!==void 0&&t(`p`,{className:`text-[10px] text-foreground-subtle`,children:s}),t(u,{mode:c,value:f(r[n.key]),onChange:e=>i(n.key,e)})]})}return p(n)&&(d(n.options.length)||n.creatable===!0)?o(n,r,S)?t(c,{mode:`multi`,options:h(n.options),value:g(r[n.key]),onChange:e=>i(n.key,e),disabled:_===!0||n.disabled===!0,creatable:n.creatable===!0,...n.createLabel===void 0?{}:{createLabel:n.createLabel},...n.maxItems===void 0?{}:{maxItems:n.maxItems},label:y(n.label,v),description:n.description===void 0?void 0:y(n.description,v),placeholder:n.placeholder??w(`formBuilder.formBuilder.searchToAdd`,`Search to add…`),testId:`config-multiselect-${n.key}`,listboxId:`msel-${n.key}`}):null:t(s,{field:n,values:r,onChange:i,onChangeMany:a,disabled:_,translationFn:v,onTestField:b,externalProbe:x,allFields:S,onAction:C})}function v(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function y(e,t){if(e!==void 0)return t&&v(e)?t(e):e}function b({section:r,values:c,onChange:l,onChangeMany:u,disabled:d,translationFn:f,onTestField:p,probeResults:m,onAction:h}){let[g,v]=n(r.defaultCollapsed??!1),b=r.style===`accordion`;if(r.fields.reduce((e,t)=>e+ +!!o(t,c,r.fields),0)===0)return null;let x=r.fields,S=r.columns??2,C=S===1?`grid-cols-1`:S===3?`grid-cols-1 @[480px]:grid-cols-2 @[880px]:grid-cols-3`:S===4?`grid-cols-1 @[480px]:grid-cols-2 @[1140px]:grid-cols-4`:`grid-cols-1 @[480px]:grid-cols-2`,w=r.fields.length===1&&r.fields[0]?.type===`widget`?r.fields[0]:void 0,T=w!==void 0||!r.title&&!r.description;return e(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},"data-settings-section":r.id,children:[!T&&(b?e(`button`,{type:`button`,"aria-expanded":!g,onClick:()=>v(e=>!e),className:`flex w-full items-center justify-between mb-2 text-left`,children:[e(`div`,{children:[r.title&&t(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:y(r.title,f)}),r.description&&t(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:y(r.description,f)})]}),t(a,{expanded:!g,className:`ml-2`})]}):t(`div`,{className:`flex items-center justify-between mb-2`,children:e(`div`,{children:[r.title&&t(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:y(r.title,f)}),r.description&&t(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:y(r.description,f)})]})})),!(g&&!T)&&(w===void 0?t(i,{children:t(`div`,{className:`grid ${C} gap-x-3 gap-y-2.5`,children:x.map(e=>t(_,{field:e,values:c,onChange:l,onChangeMany:u,disabled:d,translationFn:f,onTestField:p,externalProbe:m?.[e.key],allFields:r.fields,onAction:h},e.key))})}):t(s,{field:w,values:c,onChange:l,onChangeMany:u,disabled:d,translationFn:f,onTestField:p,externalProbe:m?.[w.key],allFields:r.fields,onAction:h},w.key))]})}function x({schema:e,values:n,onChange:r,disabled:i,translationFn:a,onTestField:o,probeResults:s,onClearProbe:c,onAction:l,visibilityContext:u}){let d=u?{...u,...n}:n,f=(e,t)=>{r({...n,[e]:t}),c?.(e)},p=e=>{r({...n,...e});for(let t of Object.keys(e))c?.(t)};return t(`div`,{className:`space-y-4`,children:e.sections.map((e,n)=>t(b,{section:e,values:d,onChange:f,onChangeMany:p,disabled:i,translationFn:a,onTestField:o,probeResults:s,onAction:l},`${e.id}-${n}`))})}export{x as t};
@@ -1 +1 @@
1
- import{C as e,K as t,S as n,Y as r,et as i,i as a,x as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Dn as s,Er as c,Ht as l,ct as u,dt as d,gt as f,ha as p,ji as m,pr as h,st as g,xn as _}from"./player-overlays-D0HsTHUG.js";import{Fr as v,eo as y}from"./client-3nhKn2xf.js";import{A as b,An as x,C as S,Dn as C,Du as w,E as T,Er as E,F as D,Fr as O,I as k,Io as A,Ir as ee,Kr as j,Lr as M,M as te,Mr as ne,N as re,O as ie,P as N,Pr as P,S as F,Sr as ae,T as oe,Tr as se,Ur as ce,Xr as I,_ as le,b as ue,bn as de,br as fe,do as pe,f as me,fi as L,g as he,ii as R,j as ge,k as _e,kn as z,m as ve,of as ye,p as be,uo as xe,w as Se,wr as Ce,xr as we,y as Te,yn as Ee}from"./src-D1j-98hX.js";import{t as B}from"./useTranslation-BJr-n0es.js";import{et as De}from"./index-BoU7NTPo.js";import{t as Oe}from"./AdminPage-D2S65e6Q.js";i();function V(e,t){return e.scope===``?e.displayName:`${e.displayName} · ${t?.(e)??e.scope}`}function ke(e,t,n){let r=[];for(let{device:t,series:i}of e)for(let e of i){let i={subject:{kind:`device`,deviceId:t.id},key:e.key,scope:e.scope};r.push({id:S(i),ref:i,info:e,subjectName:t.name,location:t.location??``,nodeId:``,metric:V(e,n)})}for(let{node:e,series:i}of t)for(let t of i){let i={subject:{kind:`node`,nodeId:e.id},key:t.key,scope:t.scope};r.push({id:S(i),ref:i,info:t,subjectName:e.name,location:``,nodeId:e.id,metric:V(t,n)})}return r}function Ae(e){return[e.subjectName,e.location,e.metric,e.info.key,e.info.unit??``,e.nodeId].join(` `)}function H(e,t,n){if(e.ref.subject.kind!==`device`||t===null)return e.subjectName;let r=t.byId.get(e.ref.subject.deviceId);return r===void 0?e.subjectName:ce(r,`compact`,t,n)}var je=[`energy`,`temperatures`,`nodes`,`storage`],Me=new Set([`cap:temperature-sensor.temperature`,`cap:climate-control.currentTemp`]),U=[`addon:metrics-native/node-cpu-percent`,`addon:metrics-native/node-memory-percent`],Ne=`addon:storage-orchestrator/location-used-percent`;function Pe(e,t){let n=(e,n)=>{let r=t.filter(e);return F((n?[...r].sort(n):r).map(e=>e.ref))};switch(e){case`energy`:return n(e=>e.ref.subject.kind===`device`&&e.info.key===`derived:energy.kwh`);case`temperatures`:return n(e=>e.ref.subject.kind===`device`&&Me.has(e.info.key)&&e.info.scope===``,(e,t)=>e.location.localeCompare(t.location)||e.subjectName.localeCompare(t.subjectName));case`nodes`:return n(e=>e.ref.subject.kind===`node`&&U.includes(e.info.key)&&e.info.scope===``,(e,t)=>U.indexOf(e.info.key)-U.indexOf(t.info.key)||e.subjectName.localeCompare(t.subjectName));case`storage`:return n(e=>e.ref.subject.kind===`node`&&e.info.key===Ne)}}function Fe(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=[],a=[],o=[];for(let t of F(e)){let e=n.get(S(t));if(e===void 0){o.push(t);continue}e.info.key===`derived:energy.kwh`?a.push(e):e.info.kind===`boolean`||e.info.kind===`enum`?i.push(e):r.push(e)}return{lines:r,states:i,energy:a,missing:o}}function W(e){return e.subject.kind===`device`?{deviceId:e.subject.deviceId,key:e.key,scope:e.scope}:{forNodeId:e.subject.nodeId,key:e.key,scope:e.scope}}var G=`history-page`;function Ie({part:r,window:i}){let{t:a}=B(),o=p(),s=I(),c=j(),l=e=>`${H(e,s,c)} · ${e.metric}`,u=t(()=>[...r.lines,...r.states,...r.energy],[r]),d=he(t(()=>u.map(e=>W(e.ref)),[u]),i,!1),f=e=>d.status===`ok`?d.data.current.get(ve(W(e.ref))):void 0,h=e=>{let t=f(e);return t?.ok?t.result:void 0};if(u.length===0)return n(O,{icon:m,title:a(`history.page.emptyTitle`,`Pick series to compare`),description:a(`history.page.emptyHint`,`Choose up to 24 series on the left, or start from a panel above.`)});if(d.status===`error`)return n(P,{title:a(`history.page.readFailed`,`History could not be read`),message:d.error});let g=d.status===`pending`,_=u.map(e=>({c:e,e:f(e)})).filter(e=>e.e?.ok===!1),v=r.lines.map((e,t)=>{let n=h(e),r=_e(e.info,n,i.from);return{id:e.id,label:l(e),unit:e.info.unit,colorIndex:t,points:r.points,gapMs:r.gapMs,interpolation:r.held&&n?.resolution===`raw`?`step`:`linear`}}),y=r.states.map((e,t)=>{let n=b(e.info,h(e),i.from,i.to),r=T(e.info.key,o);return{id:e.id,label:l(e),kind:e.info.kind===`boolean`?`boolean`:`enum`,colorIndex:e.info.kind===`boolean`?t:0,states:n.states,segments:n.segments,totals:n.totals,stateLabel:e.info.kind===`boolean`?e=>e===`true`?r.on:r.off:void 0}}),x=r.energy.map(e=>({c:e,...ie(h(e))})),S=x[0]?.bucketMs??36e5,C=[...new Set(x.flatMap(e=>e.buckets.map(e=>e.t)))].sort((e,t)=>e-t).map(e=>({t:e,values:x.map(t=>t.buckets.find(t=>t.t===e)?.values[0]??null)}));return e(`div`,{className:`space-y-5 min-w-0`,children:[_.length>0&&n(P,{title:a(`history.page.someFailed`,`Some series could not be read`),message:_.map(e=>`${l(e.c)}: ${e.e.error}`).join(` · `)}),v.length>0&&n(k,{title:a(`history.page.lines`,`Measurements`),series:v,range:i,height:260,syncKey:G,pending:g}),x.length>0&&n(ne,{title:a(`history.page.energy`,`Energy`),layers:x.map((e,t)=>({id:e.c.id,label:H(e.c,s,c),colorIndex:t})),buckets:C,bucketMs:S,range:i,unit:`kWh`,showTotal:!0,height:160,syncKey:G,pending:g}),y.length>0&&n(D,{title:y.length===1?y[0]?.label??``:a(`history.page.states`,`States`),rows:y,range:i,syncKey:G,pending:g})]})}function Le(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}async function Re(e,t){let n=[];for(let r of Le(e,50))try{let{results:e}=await t(r),i=new Map(e.map(e=>[e.seriesId,e]));for(let e of r)n.push(i.get(e)??{seriesId:e,ok:!1,reason:`not-found`})}catch(e){let t=e instanceof Error?e.message:String(e);for(let e of r)n.push({seriesId:e,ok:!1,reason:`request-failed`,message:t})}return n}function K(e){return e.raw+e[`5m`]+e[`1h`]+e[`1d`]}function ze(e){return e.reduce((e,t)=>t.ok?{...e,deleted:e.deleted+1,points:e.points+K(t.deleted)}:{...e,refused:e.refused+1},{deleted:0,refused:0,points:0})}function Be(e,t){let n=new Map(e.map(e=>[e.seriesId,e]));return t.flatMap(e=>{let t=n.get(e.seriesId);return t===void 0?[]:[{series:t,outcome:e}]})}var q=e=>new Date(e).toLocaleDateString(void 0,{dateStyle:`short`});function J(e,t,n){let r=t.get(e.deviceId);return r===void 0?e.reason===`device-gone`?n(`history.orphans.deviceRemoved`,`#{{id}} (removed)`,{id:e.deviceId}):n(`history.orphans.deviceId`,`#{{id}}`,{id:e.deviceId}):r}function Y(e){let t=e.displayName??e.key;return e.scope===``?t:`${t} · ${e.scope}`}function X(t,r,i){return{key:`series`,header:i(`history.orphans.colSeries`,`Series`),render:a=>{let o=t(a);return e(`div`,{className:`min-w-0 max-w-[16rem]`,children:[n(`div`,{className:`truncate text-foreground`,title:o.key,children:Y(o)}),n(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:J(o,r,i)})]})},sortValue:e=>`${J(t(e),r,i)} ${Y(t(e))}`}}var Ve=[`raw`,`5m`,`1h`,`1d`];function He(e,t){return e===`raw`?t(`history.orphans.colRaw`,`Raw points`):e===`5m`?t(`history.orphans.col5m`,`5 min`):e===`1h`?t(`history.orphans.col1h`,`1 h`):t(`history.orphans.col1d`,`1 day`)}function Ue(t,r){return[X(e=>e,t,r),{key:`reason`,header:r(`history.orphans.colReason`,`Reason`),render:t=>e(`div`,{className:`flex flex-col items-start gap-0.5`,children:[n(L,{variant:t.reason===`device-gone`?`warning`:`neutral`,className:`text-[10px]`,children:t.reason===`device-gone`?r(`history.orphans.deviceGone`,`Device removed`):r(`history.orphans.undeclared`,`No longer declared`)}),t.missingSince!==null&&n(`span`,{className:`text-[10px] text-foreground-subtle`,children:r(`history.orphans.since`,`since {{date}}`,{date:q(t.missingSince)})})]}),sortValue:e=>e.reason},{key:`span`,header:r(`history.orphans.colSpan`,`Recorded`),render:t=>e(`span`,{className:`tabular-nums text-foreground-muted`,children:[q(t.firstTs),` → `,q(t.lastTs)]}),sortValue:e=>e.lastTs},...Ve.map(e=>({key:`rows-${e}`,header:He(e,r),align:`right`,render:t=>n(`span`,{className:`tabular-nums text-foreground-muted`,children:t.rows[e].toLocaleString()}),sortValue:t=>t.rows[e]}))]}function We(e,t){if(e.ok)return n(L,{variant:`success`,className:`text-[10px]`,children:t(`history.orphans.deleted`,{count:K(e.deleted),points:K(e.deleted).toLocaleString(),defaultValue_one:`Deleted · {{points}} point`,defaultValue_other:`Deleted · {{points}} points`})});let r=e.reason===`request-failed`?t(`history.orphans.requestFailed`,`Not sent: {{message}}`,{message:e.message}):e.reason===`not-orphan`?t(`history.orphans.refusedNotOrphan`,`Kept: no longer orphan`):e.reason===`not-found`?t(`history.orphans.refusedNotFound`,`Already gone`):t(`history.orphans.refusedFailed`,`The hub could not delete it`);return n(L,{variant:e.reason===`not-found`?`neutral`:`warning`,className:`text-[10px]`,children:r})}function Ge(e,t){return[X(e=>e.series,e,t),{key:`result`,header:t(`history.orphans.colResult`,`Result`),render:e=>We(e.outcome,t),sortValue:e=>+!e.outcome.ok}]}i();function Ke({open:i,onClose:a,list:o,deviceNames:c,onDelete:u,onRefresh:d,refreshing:f}){let{t:p}=B(),m=g(),[_,v]=r(new Set),[y,b]=r(!1),[S,C]=r([]),w=t(()=>Ue(c,p),[c,p]),T=t(()=>Ge(c,p),[c,p]),D=t(()=>new Set(o.series.map(e=>String(e.seriesId))),[o.series]),O=[..._].filter(e=>D.has(e)).map(Number),k=ze(S.map(e=>e.outcome)),A=async()=>{if(await m({title:p(`history.orphans.confirmTitle`,{count:O.length,defaultValue_one:`Delete {{count}} series`,defaultValue_other:`Delete {{count}} series`}),message:p(`history.orphans.confirmMessage`,`Every recorded point of these series is removed from the hub. This cannot be undone.`),confirmLabel:p(`history.orphans.confirmLabel`,`Delete`),variant:`danger`})){b(!0);try{let e=await Re(O,u);C(Be(o.series,e)),v(new Set)}finally{b(!1),d()}}};return n(fe,{open:i,onOpenChange:e=>!e&&a(),children:e(ae,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"data-testid":`orphan-series-dialog`,children:[n(se,{children:n(E,{children:p(`history.orphans.title`,`Series no longer linked to a device`)})}),e(we,{className:`space-y-3`,children:[n(`p`,{className:`text-xs text-foreground-muted`,children:p(`history.orphans.intro`,`Nothing records into these series any more: their device was removed, or no capability declares them now. Select the ones to delete.`)}),o.truncated&&e(`div`,{className:`flex flex-wrap items-center gap-2`,"data-testid":`orphan-truncated`,children:[n(`p`,{className:`text-xs text-warning`,children:p(`history.orphans.truncated`,`More series are unlinked than are listed here. Delete these, then load the rest.`)}),e(R,{size:`sm`,variant:`outline`,onClick:d,disabled:f,children:[n(s,{className:`h-3 w-3`,"aria-hidden":!0}),p(`history.orphans.loadAgain`,`Load again`)]})]}),S.length>0&&e(`div`,{className:`space-y-2`,"data-testid":`orphan-outcomes`,children:[n(`p`,{className:`text-xs text-foreground`,"aria-live":`polite`,children:p(`history.orphans.summary`,{count:k.deleted,refused:k.refused,points:k.points.toLocaleString(),defaultValue_one:`{{count}} series deleted ({{points}} points), {{refused}} kept.`,defaultValue_other:`{{count}} series deleted ({{points}} points), {{refused}} kept.`})}),n(z,{columns:T,rows:S,rowKey:e=>String(e.series.seriesId),minWidthPx:420,maxBodyHeight:`max-h-[60vh]`,emptyMessage:``})]}),n(z,{columns:w,rows:o.series,rowKey:e=>String(e.seriesId),minWidthPx:760,maxBodyHeight:x,defaultSort:{columnKey:`series`,dir:`asc`},emptyMessage:p(`history.orphans.empty`,`Every series is linked to a device.`),selection:{selected:_,onChange:v,rowLabel:e=>`${Y(e)} — ${J(e,c,p)}`,pageLabel:p(`history.orphans.selectAll`,`Select every listed series`)}})]}),e(Ce,{children:[n(`span`,{className:`mr-auto text-[11px] tabular-nums text-foreground`,"aria-live":`polite`,children:p(`history.orphans.selected`,{count:O.length,defaultValue_one:`{{count}} selected`,defaultValue_other:`{{count}} selected`})}),n(R,{variant:`ghost`,size:`sm`,onClick:a,children:p(`history.orphans.close`,`Close`)}),e(R,{variant:`danger`,size:`sm`,disabled:O.length===0||y,onClick:()=>void A(),children:[y?n(h,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):n(l,{className:`h-3 w-3`,"aria-hidden":!0}),p(`history.orphans.deleteSelected`,`Delete selected`)]})]})]})})}i();var Z=5*6e4;function qe({enabled:i}){let{t:a}=B(),[s,c]=r(!1),l=pe({},{enabled:i,staleTime:Z}),u=A({projection:`slim`},{enabled:i}),d=xe(),f=t(()=>new Map((u.data??[]).map(e=>[e.id,e.name])),[u.data]),p=e=>d.mutateAsync({seriesIds:[...e]});if(!i||l.status===`pending`)return null;if(l.status===`error`)return n(P,{variant:`warning`,title:a(`history.orphans.checkFailedTitle`,`Could not check for unlinked series`),message:l.error.message,onRetry:()=>void l.refetch()});let m=l.data;if(m.series.length===0&&!s)return null;let h=m.series.length;return e(o,{children:[h>0&&n(P,{variant:`warning`,message:m.truncated?a(`history.orphans.noticeMore`,{count:h,defaultValue_one:`More than {{count}} series are no longer linked to a device.`,defaultValue_other:`More than {{count}} series are no longer linked to a device.`}):a(`history.orphans.notice`,{count:h,defaultValue_one:`{{count}} series is no longer linked to a device.`,defaultValue_other:`{{count}} series are no longer linked to a device.`}),action:n(R,{size:`sm`,variant:`outline`,onClick:()=>c(!0),children:a(`history.orphans.review`,`Review`)})}),n(Ke,{open:s,onClose:()=>c(!1),list:m,deviceNames:f,onDelete:p,onRefresh:()=>void l.refetch(),refreshing:l.isFetching})]})}i();var Q=`device`,Je=`node`;function Ye({catalog:r,selected:i,onChange:a,loading:o}){let{t:s}=B(),c=I(),l=j(),u=e=>H(e,c,l),d=Ee(r,{searchText:e=>[Ae(e)],facetGroups:[{id:`subject`,value:e=>e.ref.subject.kind===`device`?Q:Je},{id:`room`,value:e=>e.location},{id:`unit`,value:e=>e.info.unit??``}]}),f=t(()=>[{key:`metric`,header:s(`history.picker.series`,`Series`),render:t=>e(`div`,{className:`min-w-0`,children:[n(`div`,{className:`truncate text-foreground`,children:t.metric}),n(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:t.location===``?u(t):`${u(t)} · ${t.location}`})]}),sortValue:e=>`${e.subjectName} ${e.metric}`},{key:`unit`,header:s(`history.picker.unit`,`Unit`),render:e=>n(`span`,{className:`text-foreground-muted`,children:e.info.unit??`—`}),sortValue:e=>e.info.unit??``}],[s,c,l]),p=i.size>=24;return e(`div`,{className:`space-y-2 min-w-0`,children:[n(de,{state:d.state,facets:[],groups:[{...d.groups.find(e=>e.id===`subject`)??{id:`subject`,facets:[],selected:[]},label:s(`history.picker.subject`,`Source`),facetLabel:e=>e===Q?s(`history.picker.devices`,`Devices`):s(`history.picker.nodes`,`Nodes`)},{...d.groups.find(e=>e.id===`room`)??{id:`room`,facets:[],selected:[]},label:s(`history.picker.room`,`Room`),facetLabel:e=>e===``?s(`history.picker.noRoom`,`No room`):e},{...d.groups.find(e=>e.id===`unit`)??{id:`unit`,facets:[],selected:[]},label:s(`history.picker.metricType`,`Unit`),facetLabel:e=>e===``?s(`history.picker.noUnit`,`States & counts`):e}],labels:{searchPlaceholder:s(`history.picker.search`,`Search device, room, metric or node…`),searchLabel:s(`history.picker.searchLabel`,`Search series`),facetsLabel:s(`history.picker.facets`,`Filters`),clearLabel:s(`history.picker.clear`,`Clear`)},onSearch:d.setSearch,onToggleFacet:d.toggleFacet,onToggleGroupFacet:d.toggleGroupFacet,onClear:d.clear}),n(`p`,{className:`text-[10px] text-foreground-subtle`,"aria-live":`polite`,children:s(`history.picker.count`,`{{count}} of {{max}} selected`,{count:i.size,max:24})}),n(z,{columns:f,rows:d.rows,rowKey:e=>e.id,maxBodyHeight:x,pageSize:50,defaultSort:{columnKey:`metric`,dir:`asc`},emptyMessage:o?s(`history.picker.loading`,`Reading the series of every device…`):d.active?s(`history.picker.emptyFiltered`,`No series match these filters.`):s(`history.picker.empty`,`Nothing is recorded yet.`),selection:{selected:i,onChange:e=>{let t=[...e].filter(e=>i.has(e)),n=[...e].filter(e=>!i.has(e));a(new Set([...t,...n].slice(0,24)))},isSelectable:e=>i.has(e.id)||!p,rowLabel:e=>`${u(e)} · ${e.metric}`,pageLabel:s(`history.picker.selectPage`,`Select every series on this page`)}})]})}i();var Xe=new Set([y.Hub,y.Container]),$=5*6e4;function Ze(){let{t:r}=B(),i=ee(`device-history`),[a,o]=De(),s=t(()=>F(a.getAll(`s`).flatMap(e=>{let t=Te(e);return t===null?[]:[t]})),[a]),l=a.get(`window`),d=re(l)?l:`7d`,p=ge(a.get(`range`)),h=(e,t,n)=>{let r=new URLSearchParams;for(let t of F(e))r.append(`s`,ue(t));t!==`7d`&&r.set(`window`,t);let i=n===void 0?a.get(`range`):n;t===`custom`&&i&&r.set(`range`,i),o(r,{replace:!0})},v=Qe(i===`present`),y=N(d,Date.now(),p),b=N(d,be(Date.now(),y.to-y.from),p),x=t(()=>Fe(s,v.candidates),[s,v.candidates]),w=t(()=>new Set(s.map(S)),[s]),T=me(),E=u(),D=g(),k=async()=>{let e=await E({title:r(`history.page.saveTitle`,`Save as panel`),label:r(`history.page.saveName`,`Panel name`),confirmLabel:r(`history.page.save`,`Save`)});e===null||e.trim()===``||await T.update(t=>Se(t,{id:`panel-${Date.now().toString(36)}`,name:e.trim().slice(0,80),window:d,selection:[...s]}))},A=async(e,t)=>{await D({title:r(`history.page.deleteTitle`,`Delete panel`),message:r(`history.page.deleteMessage`,`The panel "{{name}}" is removed from your account.`,{name:t}),confirmLabel:r(`history.page.delete`,`Delete`),variant:`danger`})&&await T.update(t=>oe(t,e))},j=e=>e===`energy`?r(`history.panels.energy`,`Total energy`):e===`temperatures`?r(`history.panels.temperatures`,`Temperatures by room`):e===`nodes`?r(`history.panels.nodes`,`Cluster nodes`):r(`history.panels.storage`,`Storage locations`);return n(Oe,{icon:m,title:r(`history.page.title`,`History`),subtitle:r(`history.page.subtitle`,`What devices, nodes and storage recorded over time, side by side.`),actions:i===`present`?e(R,{size:`sm`,variant:`outline`,onClick:()=>void k(),disabled:s.length===0||!T.writable,children:[n(_,{className:`h-3.5 w-3.5`,"aria-hidden":`true`}),r(`history.page.saveTitle`,`Save as panel`)]}):void 0,children:i===`pending`?n(M,{className:`h-64 w-full`}):i===`unknown`?n(P,{title:r(`history.page.presenceUnknownTitle`,`Could not reach the hub`),message:r(`history.page.presenceUnknown`,`The hub did not say whether device history is installed. Try again in a moment.`)}):i===`absent`?n(O,{icon:c,title:r(`history.page.absentTitle`,`Device history is not running on this hub`),description:r(`history.page.absent`,`Nothing is recorded until the device-history system addon is enabled.`)}):e(`div`,{className:`space-y-3 sm:space-y-4`,children:[n(qe,{enabled:i===`present`}),e(`div`,{className:`flex flex-wrap items-center gap-2`,role:`group`,"aria-label":r(`history.page.panels`,`Panels`),children:[je.map(e=>n(R,{size:`sm`,variant:`outline`,disabled:v.status!==`ok`,onClick:()=>h(Pe(e,v.candidates),d),children:j(e)},e)),T.value.panels.map(t=>e(`span`,{className:`inline-flex items-center`,children:[n(R,{size:`sm`,variant:`secondary`,onClick:()=>h(t.selection,t.window,null),children:t.name}),n(R,{size:`sm`,variant:`ghost`,"aria-label":r(`history.page.deleteNamed`,`Delete panel {{name}}`,{name:t.name}),onClick:()=>void A(t.id,t.name),disabled:!T.writable,children:n(f,{className:`h-3.5 w-3.5`,"aria-hidden":`true`})})]},t.id))]}),e(`div`,{className:`grid grid-cols-1 gap-3 sm:gap-4 xl:grid-cols-5`,children:[n(`div`,{className:`min-w-0 xl:col-span-2`,children:n(C,{headingId:`history-picker`,title:r(`history.picker.title`,`Series`),children:n(`div`,{className:`p-2 sm:p-3`,children:v.status===`error`?n(P,{message:v.error}):n(Ye,{catalog:v.candidates,loading:v.status===`pending`,selected:w,onChange:e=>{let t=s.filter(t=>e.has(S(t))),n=v.candidates.filter(t=>e.has(t.id)&&!w.has(t.id)).map(e=>e.ref);h([...t,...n],d)}})})})}),n(`div`,{className:`min-w-0 xl:col-span-3`,children:n(C,{headingId:`history-overlay`,title:r(`history.page.overlay`,`Overlay`),actions:s.length>0?n(R,{size:`sm`,variant:`ghost`,onClick:()=>h([],d),children:r(`history.page.clear`,`Clear`)}):void 0,children:e(`div`,{className:`p-2 sm:p-3 space-y-3 min-w-0`,children:[n(le,{value:d,onChange:e=>h(s,e),custom:p,onCustomChange:e=>h(s,`custom`,te(e))}),v.status===`pending`&&s.length>0?n(M,{className:`h-64 w-full`}):n(Ie,{part:x,window:b}),x.missing.length>0&&v.status===`ok`&&n(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`history.page.missing`,{count:x.missing.length,defaultValue_one:`{{count}} selected series is no longer recorded.`,defaultValue_other:`{{count}} selected series are no longer recorded.`})})]})})})]})]})})}function Qe(e){let{t:n}=B(),r=n(`history.picker.wholeFrame`,`Whole frame`),i=d().trpcClient,o=A({projection:`slim`},{enabled:e}),{nodes:s}=ye(),c=t(()=>(o.data??[]).filter(e=>!Xe.has(String(e.type))),[o.data]),l=a({queries:c.map(t=>({queryKey:[`device-history`,`listSeries`,t.id],queryFn:()=>i.deviceHistory.listSeries.query({deviceId:t.id}),enabled:e,staleTime:$}))}),u=a({queries:s.map(t=>({queryKey:[`device-history`,`listNodeSeries`,t.id],queryFn:()=>i.deviceHistory.listNodeSeries.query({forNodeId:t.id}),enabled:e,staleTime:$}))}),f=w({},{enabled:e,staleTime:$}),p=t(()=>new Map((f?.data??[]).map(e=>[e.id,e.displayName])),[f?.data]),m=l.map(e=>e.data),h=u.map(e=>e.data),g=t(()=>ke(c.flatMap((e,t)=>{let n=m[t];return n===void 0?[]:[{device:{id:e.id,name:e.name,location:e.location??null},series:n}]}),s.flatMap((e,t)=>{let n=h[t];return n===void 0?[]:[{node:{id:e.id,name:e.name},series:n}]}),e=>{if(e.key!==`addon:pipeline-analytics/occupancy`)return p.get(e.scope)??e.scope;let{zoneId:t,className:n}=v(e.scope),i=t===``?r:t;return n===void 0?i:`${i} · ${n}`}),[c,s,p,[...l,...u].map(e=>e.dataUpdatedAt).join(`,`),r]);return o.status===`error`?{status:`error`,error:o.error.message,candidates:[]}:{status:o.status===`pending`||l.some(e=>e.isPending)||u.some(e=>e.isPending)?`pending`:`ok`,error:``,candidates:g}}export{Ze as HistoryPage};
1
+ import{C as e,K as t,S as n,Y as r,et as i,i as a,x as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Dn as s,Er as c,Ht as l,ct as u,dt as d,gt as f,ha as p,ji as m,pr as h,st as g,xn as _}from"./player-overlays-CdeStLFY.js";import{Pr as v,to as y}from"./client-AOeY3PoN.js";import{A as b,An as x,C as S,Dn as C,Du as w,E as T,Er as E,F as D,Fr as O,I as k,Io as A,Ir as ee,Kr as j,Lr as M,M as te,Mr as ne,N as re,O as ie,P as N,Pr as P,S as F,Sr as ae,T as oe,Tr as se,Ur as ce,Xr as I,_ as le,b as ue,bn as de,br as fe,do as pe,f as me,fi as L,g as he,ii as R,j as ge,k as _e,kn as z,m as ve,of as ye,p as be,uo as xe,w as Se,wr as Ce,xr as we,y as Te,yn as Ee}from"./src-CImrkf6y.js";import{t as B}from"./useTranslation-BJr-n0es.js";import{et as De}from"./index-DzxzA2lU.js";import{t as Oe}from"./AdminPage-95Fx8-ai.js";i();function V(e,t){return e.scope===``?e.displayName:`${e.displayName} · ${t?.(e)??e.scope}`}function ke(e,t,n){let r=[];for(let{device:t,series:i}of e)for(let e of i){let i={subject:{kind:`device`,deviceId:t.id},key:e.key,scope:e.scope};r.push({id:S(i),ref:i,info:e,subjectName:t.name,location:t.location??``,nodeId:``,metric:V(e,n)})}for(let{node:e,series:i}of t)for(let t of i){let i={subject:{kind:`node`,nodeId:e.id},key:t.key,scope:t.scope};r.push({id:S(i),ref:i,info:t,subjectName:e.name,location:``,nodeId:e.id,metric:V(t,n)})}return r}function Ae(e){return[e.subjectName,e.location,e.metric,e.info.key,e.info.unit??``,e.nodeId].join(` `)}function H(e,t,n){if(e.ref.subject.kind!==`device`||t===null)return e.subjectName;let r=t.byId.get(e.ref.subject.deviceId);return r===void 0?e.subjectName:ce(r,`compact`,t,n)}var je=[`energy`,`temperatures`,`nodes`,`storage`],Me=new Set([`cap:temperature-sensor.temperature`,`cap:climate-control.currentTemp`]),U=[`addon:metrics-native/node-cpu-percent`,`addon:metrics-native/node-memory-percent`],Ne=`addon:storage-orchestrator/location-used-percent`;function Pe(e,t){let n=(e,n)=>{let r=t.filter(e);return F((n?[...r].sort(n):r).map(e=>e.ref))};switch(e){case`energy`:return n(e=>e.ref.subject.kind===`device`&&e.info.key===`derived:energy.kwh`);case`temperatures`:return n(e=>e.ref.subject.kind===`device`&&Me.has(e.info.key)&&e.info.scope===``,(e,t)=>e.location.localeCompare(t.location)||e.subjectName.localeCompare(t.subjectName));case`nodes`:return n(e=>e.ref.subject.kind===`node`&&U.includes(e.info.key)&&e.info.scope===``,(e,t)=>U.indexOf(e.info.key)-U.indexOf(t.info.key)||e.subjectName.localeCompare(t.subjectName));case`storage`:return n(e=>e.ref.subject.kind===`node`&&e.info.key===Ne)}}function Fe(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=[],a=[],o=[];for(let t of F(e)){let e=n.get(S(t));if(e===void 0){o.push(t);continue}e.info.key===`derived:energy.kwh`?a.push(e):e.info.kind===`boolean`||e.info.kind===`enum`?i.push(e):r.push(e)}return{lines:r,states:i,energy:a,missing:o}}function W(e){return e.subject.kind===`device`?{deviceId:e.subject.deviceId,key:e.key,scope:e.scope}:{forNodeId:e.subject.nodeId,key:e.key,scope:e.scope}}var G=`history-page`;function Ie({part:r,window:i}){let{t:a}=B(),o=p(),s=I(),c=j(),l=e=>`${H(e,s,c)} · ${e.metric}`,u=t(()=>[...r.lines,...r.states,...r.energy],[r]),d=he(t(()=>u.map(e=>W(e.ref)),[u]),i,!1),f=e=>d.status===`ok`?d.data.current.get(ve(W(e.ref))):void 0,h=e=>{let t=f(e);return t?.ok?t.result:void 0};if(u.length===0)return n(O,{icon:m,title:a(`history.page.emptyTitle`,`Pick series to compare`),description:a(`history.page.emptyHint`,`Choose up to 24 series on the left, or start from a panel above.`)});if(d.status===`error`)return n(P,{title:a(`history.page.readFailed`,`History could not be read`),message:d.error});let g=d.status===`pending`,_=u.map(e=>({c:e,e:f(e)})).filter(e=>e.e?.ok===!1),v=r.lines.map((e,t)=>{let n=h(e),r=_e(e.info,n,i.from);return{id:e.id,label:l(e),unit:e.info.unit,colorIndex:t,points:r.points,gapMs:r.gapMs,interpolation:r.held&&n?.resolution===`raw`?`step`:`linear`}}),y=r.states.map((e,t)=>{let n=b(e.info,h(e),i.from,i.to),r=T(e.info.key,o);return{id:e.id,label:l(e),kind:e.info.kind===`boolean`?`boolean`:`enum`,colorIndex:e.info.kind===`boolean`?t:0,states:n.states,segments:n.segments,totals:n.totals,stateLabel:e.info.kind===`boolean`?e=>e===`true`?r.on:r.off:void 0}}),x=r.energy.map(e=>({c:e,...ie(h(e))})),S=x[0]?.bucketMs??36e5,C=[...new Set(x.flatMap(e=>e.buckets.map(e=>e.t)))].sort((e,t)=>e-t).map(e=>({t:e,values:x.map(t=>t.buckets.find(t=>t.t===e)?.values[0]??null)}));return e(`div`,{className:`space-y-5 min-w-0`,children:[_.length>0&&n(P,{title:a(`history.page.someFailed`,`Some series could not be read`),message:_.map(e=>`${l(e.c)}: ${e.e.error}`).join(` · `)}),v.length>0&&n(k,{title:a(`history.page.lines`,`Measurements`),series:v,range:i,height:260,syncKey:G,pending:g}),x.length>0&&n(ne,{title:a(`history.page.energy`,`Energy`),layers:x.map((e,t)=>({id:e.c.id,label:H(e.c,s,c),colorIndex:t})),buckets:C,bucketMs:S,range:i,unit:`kWh`,showTotal:!0,height:160,syncKey:G,pending:g}),y.length>0&&n(D,{title:y.length===1?y[0]?.label??``:a(`history.page.states`,`States`),rows:y,range:i,syncKey:G,pending:g})]})}function Le(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}async function Re(e,t){let n=[];for(let r of Le(e,50))try{let{results:e}=await t(r),i=new Map(e.map(e=>[e.seriesId,e]));for(let e of r)n.push(i.get(e)??{seriesId:e,ok:!1,reason:`not-found`})}catch(e){let t=e instanceof Error?e.message:String(e);for(let e of r)n.push({seriesId:e,ok:!1,reason:`request-failed`,message:t})}return n}function K(e){return e.raw+e[`5m`]+e[`1h`]+e[`1d`]}function ze(e){return e.reduce((e,t)=>t.ok?{...e,deleted:e.deleted+1,points:e.points+K(t.deleted)}:{...e,refused:e.refused+1},{deleted:0,refused:0,points:0})}function Be(e,t){let n=new Map(e.map(e=>[e.seriesId,e]));return t.flatMap(e=>{let t=n.get(e.seriesId);return t===void 0?[]:[{series:t,outcome:e}]})}var q=e=>new Date(e).toLocaleDateString(void 0,{dateStyle:`short`});function J(e,t,n){let r=t.get(e.deviceId);return r===void 0?e.reason===`device-gone`?n(`history.orphans.deviceRemoved`,`#{{id}} (removed)`,{id:e.deviceId}):n(`history.orphans.deviceId`,`#{{id}}`,{id:e.deviceId}):r}function Y(e){let t=e.displayName??e.key;return e.scope===``?t:`${t} · ${e.scope}`}function X(t,r,i){return{key:`series`,header:i(`history.orphans.colSeries`,`Series`),render:a=>{let o=t(a);return e(`div`,{className:`min-w-0 max-w-[16rem]`,children:[n(`div`,{className:`truncate text-foreground`,title:o.key,children:Y(o)}),n(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:J(o,r,i)})]})},sortValue:e=>`${J(t(e),r,i)} ${Y(t(e))}`}}var Ve=[`raw`,`5m`,`1h`,`1d`];function He(e,t){return e===`raw`?t(`history.orphans.colRaw`,`Raw points`):e===`5m`?t(`history.orphans.col5m`,`5 min`):e===`1h`?t(`history.orphans.col1h`,`1 h`):t(`history.orphans.col1d`,`1 day`)}function Ue(t,r){return[X(e=>e,t,r),{key:`reason`,header:r(`history.orphans.colReason`,`Reason`),render:t=>e(`div`,{className:`flex flex-col items-start gap-0.5`,children:[n(L,{variant:t.reason===`device-gone`?`warning`:`neutral`,className:`text-[10px]`,children:t.reason===`device-gone`?r(`history.orphans.deviceGone`,`Device removed`):r(`history.orphans.undeclared`,`No longer declared`)}),t.missingSince!==null&&n(`span`,{className:`text-[10px] text-foreground-subtle`,children:r(`history.orphans.since`,`since {{date}}`,{date:q(t.missingSince)})})]}),sortValue:e=>e.reason},{key:`span`,header:r(`history.orphans.colSpan`,`Recorded`),render:t=>e(`span`,{className:`tabular-nums text-foreground-muted`,children:[q(t.firstTs),` → `,q(t.lastTs)]}),sortValue:e=>e.lastTs},...Ve.map(e=>({key:`rows-${e}`,header:He(e,r),align:`right`,render:t=>n(`span`,{className:`tabular-nums text-foreground-muted`,children:t.rows[e].toLocaleString()}),sortValue:t=>t.rows[e]}))]}function We(e,t){if(e.ok)return n(L,{variant:`success`,className:`text-[10px]`,children:t(`history.orphans.deleted`,{count:K(e.deleted),points:K(e.deleted).toLocaleString(),defaultValue_one:`Deleted · {{points}} point`,defaultValue_other:`Deleted · {{points}} points`})});let r=e.reason===`request-failed`?t(`history.orphans.requestFailed`,`Not sent: {{message}}`,{message:e.message}):e.reason===`not-orphan`?t(`history.orphans.refusedNotOrphan`,`Kept: no longer orphan`):e.reason===`not-found`?t(`history.orphans.refusedNotFound`,`Already gone`):t(`history.orphans.refusedFailed`,`The hub could not delete it`);return n(L,{variant:e.reason===`not-found`?`neutral`:`warning`,className:`text-[10px]`,children:r})}function Ge(e,t){return[X(e=>e.series,e,t),{key:`result`,header:t(`history.orphans.colResult`,`Result`),render:e=>We(e.outcome,t),sortValue:e=>+!e.outcome.ok}]}i();function Ke({open:i,onClose:a,list:o,deviceNames:c,onDelete:u,onRefresh:d,refreshing:f}){let{t:p}=B(),m=g(),[_,v]=r(new Set),[y,b]=r(!1),[S,C]=r([]),w=t(()=>Ue(c,p),[c,p]),T=t(()=>Ge(c,p),[c,p]),D=t(()=>new Set(o.series.map(e=>String(e.seriesId))),[o.series]),O=[..._].filter(e=>D.has(e)).map(Number),k=ze(S.map(e=>e.outcome)),A=async()=>{if(await m({title:p(`history.orphans.confirmTitle`,{count:O.length,defaultValue_one:`Delete {{count}} series`,defaultValue_other:`Delete {{count}} series`}),message:p(`history.orphans.confirmMessage`,`Every recorded point of these series is removed from the hub. This cannot be undone.`),confirmLabel:p(`history.orphans.confirmLabel`,`Delete`),variant:`danger`})){b(!0);try{let e=await Re(O,u);C(Be(o.series,e)),v(new Set)}finally{b(!1),d()}}};return n(fe,{open:i,onOpenChange:e=>!e&&a(),children:e(ae,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,"data-testid":`orphan-series-dialog`,children:[n(se,{children:n(E,{children:p(`history.orphans.title`,`Series no longer linked to a device`)})}),e(we,{className:`space-y-3`,children:[n(`p`,{className:`text-xs text-foreground-muted`,children:p(`history.orphans.intro`,`Nothing records into these series any more: their device was removed, or no capability declares them now. Select the ones to delete.`)}),o.truncated&&e(`div`,{className:`flex flex-wrap items-center gap-2`,"data-testid":`orphan-truncated`,children:[n(`p`,{className:`text-xs text-warning`,children:p(`history.orphans.truncated`,`More series are unlinked than are listed here. Delete these, then load the rest.`)}),e(R,{size:`sm`,variant:`outline`,onClick:d,disabled:f,children:[n(s,{className:`h-3 w-3`,"aria-hidden":!0}),p(`history.orphans.loadAgain`,`Load again`)]})]}),S.length>0&&e(`div`,{className:`space-y-2`,"data-testid":`orphan-outcomes`,children:[n(`p`,{className:`text-xs text-foreground`,"aria-live":`polite`,children:p(`history.orphans.summary`,{count:k.deleted,refused:k.refused,points:k.points.toLocaleString(),defaultValue_one:`{{count}} series deleted ({{points}} points), {{refused}} kept.`,defaultValue_other:`{{count}} series deleted ({{points}} points), {{refused}} kept.`})}),n(z,{columns:T,rows:S,rowKey:e=>String(e.series.seriesId),minWidthPx:420,maxBodyHeight:`max-h-[60vh]`,emptyMessage:``})]}),n(z,{columns:w,rows:o.series,rowKey:e=>String(e.seriesId),minWidthPx:760,maxBodyHeight:x,defaultSort:{columnKey:`series`,dir:`asc`},emptyMessage:p(`history.orphans.empty`,`Every series is linked to a device.`),selection:{selected:_,onChange:v,rowLabel:e=>`${Y(e)} — ${J(e,c,p)}`,pageLabel:p(`history.orphans.selectAll`,`Select every listed series`)}})]}),e(Ce,{children:[n(`span`,{className:`mr-auto text-[11px] tabular-nums text-foreground`,"aria-live":`polite`,children:p(`history.orphans.selected`,{count:O.length,defaultValue_one:`{{count}} selected`,defaultValue_other:`{{count}} selected`})}),n(R,{variant:`ghost`,size:`sm`,onClick:a,children:p(`history.orphans.close`,`Close`)}),e(R,{variant:`danger`,size:`sm`,disabled:O.length===0||y,onClick:()=>void A(),children:[y?n(h,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):n(l,{className:`h-3 w-3`,"aria-hidden":!0}),p(`history.orphans.deleteSelected`,`Delete selected`)]})]})]})})}i();var Z=5*6e4;function qe({enabled:i}){let{t:a}=B(),[s,c]=r(!1),l=pe({},{enabled:i,staleTime:Z}),u=A({projection:`slim`},{enabled:i}),d=xe(),f=t(()=>new Map((u.data??[]).map(e=>[e.id,e.name])),[u.data]),p=e=>d.mutateAsync({seriesIds:[...e]});if(!i||l.status===`pending`)return null;if(l.status===`error`)return n(P,{variant:`warning`,title:a(`history.orphans.checkFailedTitle`,`Could not check for unlinked series`),message:l.error.message,onRetry:()=>void l.refetch()});let m=l.data;if(m.series.length===0&&!s)return null;let h=m.series.length;return e(o,{children:[h>0&&n(P,{variant:`warning`,message:m.truncated?a(`history.orphans.noticeMore`,{count:h,defaultValue_one:`More than {{count}} series are no longer linked to a device.`,defaultValue_other:`More than {{count}} series are no longer linked to a device.`}):a(`history.orphans.notice`,{count:h,defaultValue_one:`{{count}} series is no longer linked to a device.`,defaultValue_other:`{{count}} series are no longer linked to a device.`}),action:n(R,{size:`sm`,variant:`outline`,onClick:()=>c(!0),children:a(`history.orphans.review`,`Review`)})}),n(Ke,{open:s,onClose:()=>c(!1),list:m,deviceNames:f,onDelete:p,onRefresh:()=>void l.refetch(),refreshing:l.isFetching})]})}i();var Q=`device`,Je=`node`;function Ye({catalog:r,selected:i,onChange:a,loading:o}){let{t:s}=B(),c=I(),l=j(),u=e=>H(e,c,l),d=Ee(r,{searchText:e=>[Ae(e)],facetGroups:[{id:`subject`,value:e=>e.ref.subject.kind===`device`?Q:Je},{id:`room`,value:e=>e.location},{id:`unit`,value:e=>e.info.unit??``}]}),f=t(()=>[{key:`metric`,header:s(`history.picker.series`,`Series`),render:t=>e(`div`,{className:`min-w-0`,children:[n(`div`,{className:`truncate text-foreground`,children:t.metric}),n(`div`,{className:`truncate text-[10px] text-foreground-subtle`,children:t.location===``?u(t):`${u(t)} · ${t.location}`})]}),sortValue:e=>`${e.subjectName} ${e.metric}`},{key:`unit`,header:s(`history.picker.unit`,`Unit`),render:e=>n(`span`,{className:`text-foreground-muted`,children:e.info.unit??`—`}),sortValue:e=>e.info.unit??``}],[s,c,l]),p=i.size>=24;return e(`div`,{className:`space-y-2 min-w-0`,children:[n(de,{state:d.state,facets:[],groups:[{...d.groups.find(e=>e.id===`subject`)??{id:`subject`,facets:[],selected:[]},label:s(`history.picker.subject`,`Source`),facetLabel:e=>e===Q?s(`history.picker.devices`,`Devices`):s(`history.picker.nodes`,`Nodes`)},{...d.groups.find(e=>e.id===`room`)??{id:`room`,facets:[],selected:[]},label:s(`history.picker.room`,`Room`),facetLabel:e=>e===``?s(`history.picker.noRoom`,`No room`):e},{...d.groups.find(e=>e.id===`unit`)??{id:`unit`,facets:[],selected:[]},label:s(`history.picker.metricType`,`Unit`),facetLabel:e=>e===``?s(`history.picker.noUnit`,`States & counts`):e}],labels:{searchPlaceholder:s(`history.picker.search`,`Search device, room, metric or node…`),searchLabel:s(`history.picker.searchLabel`,`Search series`),facetsLabel:s(`history.picker.facets`,`Filters`),clearLabel:s(`history.picker.clear`,`Clear`)},onSearch:d.setSearch,onToggleFacet:d.toggleFacet,onToggleGroupFacet:d.toggleGroupFacet,onClear:d.clear}),n(`p`,{className:`text-[10px] text-foreground-subtle`,"aria-live":`polite`,children:s(`history.picker.count`,`{{count}} of {{max}} selected`,{count:i.size,max:24})}),n(z,{columns:f,rows:d.rows,rowKey:e=>e.id,maxBodyHeight:x,pageSize:50,defaultSort:{columnKey:`metric`,dir:`asc`},emptyMessage:o?s(`history.picker.loading`,`Reading the series of every device…`):d.active?s(`history.picker.emptyFiltered`,`No series match these filters.`):s(`history.picker.empty`,`Nothing is recorded yet.`),selection:{selected:i,onChange:e=>{let t=[...e].filter(e=>i.has(e)),n=[...e].filter(e=>!i.has(e));a(new Set([...t,...n].slice(0,24)))},isSelectable:e=>i.has(e.id)||!p,rowLabel:e=>`${u(e)} · ${e.metric}`,pageLabel:s(`history.picker.selectPage`,`Select every series on this page`)}})]})}i();var Xe=new Set([y.Hub,y.Container]),$=5*6e4;function Ze(){let{t:r}=B(),i=ee(`device-history`),[a,o]=De(),s=t(()=>F(a.getAll(`s`).flatMap(e=>{let t=Te(e);return t===null?[]:[t]})),[a]),l=a.get(`window`),d=re(l)?l:`7d`,p=ge(a.get(`range`)),h=(e,t,n)=>{let r=new URLSearchParams;for(let t of F(e))r.append(`s`,ue(t));t!==`7d`&&r.set(`window`,t);let i=n===void 0?a.get(`range`):n;t===`custom`&&i&&r.set(`range`,i),o(r,{replace:!0})},v=Qe(i===`present`),y=N(d,Date.now(),p),b=N(d,be(Date.now(),y.to-y.from),p),x=t(()=>Fe(s,v.candidates),[s,v.candidates]),w=t(()=>new Set(s.map(S)),[s]),T=me(),E=u(),D=g(),k=async()=>{let e=await E({title:r(`history.page.saveTitle`,`Save as panel`),label:r(`history.page.saveName`,`Panel name`),confirmLabel:r(`history.page.save`,`Save`)});e===null||e.trim()===``||await T.update(t=>Se(t,{id:`panel-${Date.now().toString(36)}`,name:e.trim().slice(0,80),window:d,selection:[...s]}))},A=async(e,t)=>{await D({title:r(`history.page.deleteTitle`,`Delete panel`),message:r(`history.page.deleteMessage`,`The panel "{{name}}" is removed from your account.`,{name:t}),confirmLabel:r(`history.page.delete`,`Delete`),variant:`danger`})&&await T.update(t=>oe(t,e))},j=e=>e===`energy`?r(`history.panels.energy`,`Total energy`):e===`temperatures`?r(`history.panels.temperatures`,`Temperatures by room`):e===`nodes`?r(`history.panels.nodes`,`Cluster nodes`):r(`history.panels.storage`,`Storage locations`);return n(Oe,{icon:m,title:r(`history.page.title`,`History`),subtitle:r(`history.page.subtitle`,`What devices, nodes and storage recorded over time, side by side.`),actions:i===`present`?e(R,{size:`sm`,variant:`outline`,onClick:()=>void k(),disabled:s.length===0||!T.writable,children:[n(_,{className:`h-3.5 w-3.5`,"aria-hidden":`true`}),r(`history.page.saveTitle`,`Save as panel`)]}):void 0,children:i===`pending`?n(M,{className:`h-64 w-full`}):i===`unknown`?n(P,{title:r(`history.page.presenceUnknownTitle`,`Could not reach the hub`),message:r(`history.page.presenceUnknown`,`The hub did not say whether device history is installed. Try again in a moment.`)}):i===`absent`?n(O,{icon:c,title:r(`history.page.absentTitle`,`Device history is not running on this hub`),description:r(`history.page.absent`,`Nothing is recorded until the device-history system addon is enabled.`)}):e(`div`,{className:`space-y-3 sm:space-y-4`,children:[n(qe,{enabled:i===`present`}),e(`div`,{className:`flex flex-wrap items-center gap-2`,role:`group`,"aria-label":r(`history.page.panels`,`Panels`),children:[je.map(e=>n(R,{size:`sm`,variant:`outline`,disabled:v.status!==`ok`,onClick:()=>h(Pe(e,v.candidates),d),children:j(e)},e)),T.value.panels.map(t=>e(`span`,{className:`inline-flex items-center`,children:[n(R,{size:`sm`,variant:`secondary`,onClick:()=>h(t.selection,t.window,null),children:t.name}),n(R,{size:`sm`,variant:`ghost`,"aria-label":r(`history.page.deleteNamed`,`Delete panel {{name}}`,{name:t.name}),onClick:()=>void A(t.id,t.name),disabled:!T.writable,children:n(f,{className:`h-3.5 w-3.5`,"aria-hidden":`true`})})]},t.id))]}),e(`div`,{className:`grid grid-cols-1 gap-3 sm:gap-4 xl:grid-cols-5`,children:[n(`div`,{className:`min-w-0 xl:col-span-2`,children:n(C,{headingId:`history-picker`,title:r(`history.picker.title`,`Series`),children:n(`div`,{className:`p-2 sm:p-3`,children:v.status===`error`?n(P,{message:v.error}):n(Ye,{catalog:v.candidates,loading:v.status===`pending`,selected:w,onChange:e=>{let t=s.filter(t=>e.has(S(t))),n=v.candidates.filter(t=>e.has(t.id)&&!w.has(t.id)).map(e=>e.ref);h([...t,...n],d)}})})})}),n(`div`,{className:`min-w-0 xl:col-span-3`,children:n(C,{headingId:`history-overlay`,title:r(`history.page.overlay`,`Overlay`),actions:s.length>0?n(R,{size:`sm`,variant:`ghost`,onClick:()=>h([],d),children:r(`history.page.clear`,`Clear`)}):void 0,children:e(`div`,{className:`p-2 sm:p-3 space-y-3 min-w-0`,children:[n(le,{value:d,onChange:e=>h(s,e),custom:p,onCustomChange:e=>h(s,`custom`,te(e))}),v.status===`pending`&&s.length>0?n(M,{className:`h-64 w-full`}):n(Ie,{part:x,window:b}),x.missing.length>0&&v.status===`ok`&&n(`p`,{className:`text-[11px] text-foreground-subtle`,children:r(`history.page.missing`,{count:x.missing.length,defaultValue_one:`{{count}} selected series is no longer recorded.`,defaultValue_other:`{{count}} selected series are no longer recorded.`})})]})})})]})]})})}function Qe(e){let{t:n}=B(),r=n(`history.picker.wholeFrame`,`Whole frame`),i=d().trpcClient,o=A({projection:`slim`},{enabled:e}),{nodes:s}=ye(),c=t(()=>(o.data??[]).filter(e=>!Xe.has(String(e.type))),[o.data]),l=a({queries:c.map(t=>({queryKey:[`device-history`,`listSeries`,t.id],queryFn:()=>i.deviceHistory.listSeries.query({deviceId:t.id}),enabled:e,staleTime:$}))}),u=a({queries:s.map(t=>({queryKey:[`device-history`,`listNodeSeries`,t.id],queryFn:()=>i.deviceHistory.listNodeSeries.query({forNodeId:t.id}),enabled:e,staleTime:$}))}),f=w({},{enabled:e,staleTime:$}),p=t(()=>new Map((f?.data??[]).map(e=>[e.id,e.displayName])),[f?.data]),m=l.map(e=>e.data),h=u.map(e=>e.data),g=t(()=>ke(c.flatMap((e,t)=>{let n=m[t];return n===void 0?[]:[{device:{id:e.id,name:e.name,location:e.location??null},series:n}]}),s.flatMap((e,t)=>{let n=h[t];return n===void 0?[]:[{node:{id:e.id,name:e.name},series:n}]}),e=>{if(e.key!==`addon:pipeline-analytics/occupancy`)return p.get(e.scope)??e.scope;let{zoneId:t,className:n}=v(e.scope),i=t===``?r:t;return n===void 0?i:`${i} · ${n}`}),[c,s,p,[...l,...u].map(e=>e.dataUpdatedAt).join(`,`),r]);return o.status===`error`?{status:`error`,error:o.error.message,candidates:[]}:{status:o.status===`pending`||l.some(e=>e.isPending)||u.some(e=>e.isPending)?`pending`:`ok`,error:``,candidates:g}}export{Ze as HistoryPage};