@camstack/addon-admin-ui 1.2.530 → 1.2.531

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 (134) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/assets/{AddonAssetIcon-B1rn0DLw.js → AddonAssetIcon-Cp5zLEvD.js} +1 -1
  3. package/dist/assets/Addons-BES3OMn0.js +5 -0
  4. package/dist/assets/{AdminPage-DmkuRREx.js → AdminPage-D2S65e6Q.js} +1 -1
  5. package/dist/assets/{AdminSectionedPage-Dv8ahC-U.js → AdminSectionedPage-CKX5JkdQ.js} +1 -1
  6. package/dist/assets/{AiProfiles-BJrqkjtX.js → AiProfiles-BIQHK5vc.js} +1 -1
  7. package/dist/assets/{Build-DTcg9gkb.js → Build-DjlUwtu8.js} +3 -3
  8. package/dist/assets/{Calendars-x_EpS-cd.js → Calendars-Brkz06fF.js} +1 -1
  9. package/dist/assets/{Cluster-aj2_8TZC.js → Cluster-BtvDTlfe.js} +1 -1
  10. package/dist/assets/{ComposedDeviceEditDialog-DNGwDK80.js → ComposedDeviceEditDialog-UYQVMVk7.js} +1 -1
  11. package/dist/assets/{CompositionBlockEditor-O3eDPOLD.js → CompositionBlockEditor-CYd3iEcq.js} +2 -2
  12. package/dist/assets/{CompositionEditorPage-D09wEj7N.js → CompositionEditorPage-GtC8DYG6.js} +1 -1
  13. package/dist/assets/{Data-D4Sz8Rl9.js → Data-39SL2gbC.js} +1 -1
  14. package/dist/assets/{DeviceDetail-BE-C2aGY.js → DeviceDetail-C9eCLTmW.js} +2 -2
  15. package/dist/assets/{DeviceDoActionFields-D1rhgn3I.js → DeviceDoActionFields-Ca2TmJDn.js} +1 -1
  16. package/dist/assets/{Devices-BBsDc0QJ.js → Devices-DwFifk2g.js} +1 -1
  17. package/dist/assets/{EmbedPlayerPage-D0lVyXps.js → EmbedPlayerPage-D91A6i3P.js} +1 -1
  18. package/dist/assets/{FormBuilder-BvQZWKCS.js → FormBuilder-C01MTb_b.js} +1 -1
  19. package/dist/assets/{History-TMZn0v_I.js → History-OBh3harZ.js} +1 -1
  20. package/dist/assets/{Identity-DNIHuEKY.js → Identity-Bx-Ja-MP.js} +1 -1
  21. package/dist/assets/IntegrationDetail-TLO47L5-.js +1 -0
  22. package/dist/assets/{IntegrationHub-DviGnYgu.js → IntegrationHub-C--hpDK-.js} +1 -1
  23. package/dist/assets/{Integrations-9bupF3uw.js → Integrations-Cm9BV3o8.js} +1 -1
  24. package/dist/assets/{Integrations-B7okjAJ8.js → Integrations-GHsM_7uc.js} +1 -1
  25. package/dist/assets/{Library-BHn4Iifg.js → Library-D2EugVqE.js} +1 -1
  26. package/dist/assets/{Locations-BVaRTbq0.js → Locations-Cb8RSNkt.js} +1 -1
  27. package/dist/assets/{Logs-DI7IZGug.js → Logs-Gsq1EPYC.js} +1 -1
  28. package/dist/assets/{MaskShapeCanvas-HJuLPIJP.js → MaskShapeCanvas-4rUt1muq.js} +1 -1
  29. package/dist/assets/{MotionZonesSettings-COMPKhfx.js → MotionZonesSettings-D8frKIxI.js} +1 -1
  30. package/dist/assets/{MyAccess-YiGVb3gF.js → MyAccess-WsIYje4M.js} +1 -1
  31. package/dist/assets/{Network-ZYEqAiF5.js → Network-CjuJ-PkF.js} +1 -1
  32. package/dist/assets/{NodeAddonsSettingsPanel-Chb7RIE6.js → NodeAddonsSettingsPanel-DYEAw_0K.js} +1 -1
  33. package/dist/assets/{Notifications-DrVDMEuK.js → Notifications-DcpvQo5d.js} +1 -1
  34. package/dist/assets/Pipeline-CoNbGWDs.js +1 -0
  35. package/dist/assets/{PrivacyMaskSettings-C88JqmdE.js → PrivacyMaskSettings-LVUmj3W4.js} +1 -1
  36. package/dist/assets/Recordings-DeZnE3O5.js +1 -0
  37. package/dist/assets/RemoteGrid-CjSx3Aah.js +1 -0
  38. package/dist/assets/{ScanNetworkModal-Cq9BlXXk.js → ScanNetworkModal-CvlBpDgq.js} +1 -1
  39. package/dist/assets/{SceneMonitorEditor-mE7W6emU.js → SceneMonitorEditor-CUgqZlLF.js} +1 -1
  40. package/dist/assets/SessionsList-CPlqGJSE.js +2 -0
  41. package/dist/assets/{Showroom-Crq5JUKV.js → Showroom-CoWYMVAI.js} +1 -1
  42. package/dist/assets/{System-CfurcyNZ.js → System-CqV_BBXI.js} +1 -1
  43. package/dist/assets/Templates-CMETwZM5.js +1 -0
  44. package/dist/assets/{Terminal-UyKanKPS.js → Terminal-BiuPjGjh.js} +5 -5
  45. package/dist/assets/{Trans-Bsz5Pghy.js → Trans-DlVN2FAm.js} +1 -1
  46. package/dist/assets/{Viewer-BTxcZ-BR.js → Viewer-VFeL3oiK.js} +1 -1
  47. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CmowmspB.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BzI5prAS.js} +1 -1
  48. package/dist/assets/{addon-icons-context-DZZCjo9x.js → addon-icons-context-D_SbgBlL.js} +1 -1
  49. package/dist/assets/{archive-Bu9T4BL0.js → archive-BdOuJA6D.js} +1 -1
  50. package/dist/assets/{assignment-candidates-DWivr3bV.js → assignment-candidates-FrlfxULJ.js} +1 -1
  51. package/dist/assets/{authed-media-yW7W_8pm.js → authed-media-Cdlj2yED.js} +1 -1
  52. package/dist/assets/{bell-off-E0Abr7jJ.js → bell-off-DE260sCQ.js} +1 -1
  53. package/dist/assets/{board-model-CCD7fB3T.js → board-model-C8M8reLO.js} +1 -1
  54. package/dist/assets/{boxes-BkzsIUkw.js → boxes-ncBMqqF7.js} +1 -1
  55. package/dist/assets/circle-slash-bDMoAvuJ.js +1 -0
  56. package/dist/assets/{client-BvflqtP1.js → client-3nhKn2xf.js} +1 -1
  57. package/dist/assets/{cloud-upload-BIjzjy_K.js → cloud-upload-xWhkZB2K.js} +1 -1
  58. package/dist/assets/crop-BZhdHvRT.js +1 -0
  59. package/dist/assets/{device-integration-icon-BpHHi90B.js → device-integration-icon-DXsx1ovH.js} +1 -1
  60. package/dist/assets/device-picker-model-yyadLjpT.js +1 -0
  61. package/dist/assets/{dist-DoqhrZoo.js → dist-CxGqD88j.js} +1 -1
  62. package/dist/assets/{dist-Gm_hHBN2.js → dist-dKXZSA43.js} +1 -1
  63. package/dist/assets/{file-up-Cyg6A2qN.js → file-up-DSkaqgrs.js} +1 -1
  64. package/dist/assets/{format-ChSVChsY.js → format-5kuRrylR.js} +1 -1
  65. package/dist/assets/{grip-vertical-CLVyc1HC.js → grip-vertical-oBh5I9hk.js} +1 -1
  66. package/dist/assets/{hard-drive-download-Cd122TYb.js → hard-drive-download-BJ9Vaf4q.js} +1 -1
  67. package/dist/assets/{hostInit-DR1ykbVx.js → hostInit-ClzsOBVS.js} +1 -1
  68. package/dist/assets/{i18n-Bg2ooh3q.js → i18n-BTbD-8vc.js} +1 -1
  69. package/dist/assets/icons-B7ZVbtoQ.js +1 -0
  70. package/dist/assets/index-BGL4RiB2.css +2 -0
  71. package/dist/assets/{index-DGvsu0ui.js → index-BoU7NTPo.js} +3 -3
  72. package/dist/assets/{key-D_zqd1r-.js → key-5z5CPQqC.js} +1 -1
  73. package/dist/assets/{key-round-pNw827HU.js → key-round-DE61GWtp.js} +1 -1
  74. package/dist/assets/{layers-CFNXRt4j.js → layers-DUXoEBYs.js} +1 -1
  75. package/dist/assets/{linked-devices-model-D9m6pafu.js → linked-devices-model-D76tAwE6.js} +1 -1
  76. package/dist/assets/{list-ordered-Dy6tCUD8.js → list-ordered-DSox6EY0.js} +1 -1
  77. package/dist/assets/{location-owned-usage-DasgH3RR.js → location-owned-usage-BSaNp20e.js} +1 -1
  78. package/dist/assets/{memory-stick-Bt2KoB-0.js → memory-stick-f2B4Aw1x.js} +1 -1
  79. package/dist/assets/{message-square-plus-rkd_X0vs.js → message-square-plus-DUwM59NW.js} +1 -1
  80. package/dist/assets/{mf-entry-bootstrap-0-3390b09e.js → mf-entry-bootstrap-0-167f91f2.js} +2 -2
  81. package/dist/assets/{mic-off-DWb36TX2.js → mic-off-DpDwbFnF.js} +1 -1
  82. package/dist/assets/{monitor-off-B2GWMMt_.js → monitor-off-Cevi7ihB.js} +1 -1
  83. package/dist/assets/{monitor-smartphone-DJzvbVtx.js → monitor-smartphone-DPzM2qXf.js} +1 -1
  84. package/dist/assets/mount-yyadLjpT.js +1 -0
  85. package/dist/assets/{notification-schedule-field-B7FdiF_t.js → notification-schedule-field-B_Y6t98m.js} +1 -1
  86. package/dist/assets/{player-overlays-DpZIxQHp.js → player-overlays-D0HsTHUG.js} +1 -1
  87. package/dist/assets/{recycle-BWLoavmg.js → recycle-CK0-gO9v.js} +1 -1
  88. package/dist/assets/remoteEntry-CURqqH0d.js +1 -0
  89. package/dist/assets/{ruler-C1SbVRl3.js → ruler-C_9y2OuS.js} +1 -1
  90. package/dist/assets/{scan-eye-Bv4PGTFl.js → scan-eye-Cqs3dsDB.js} +1 -1
  91. package/dist/assets/{scissors-BsEkbrx_.js → scissors-BomV8klv.js} +1 -1
  92. package/dist/assets/{search-x-DE4DxdsF.js → search-x-Ck_vydrn.js} +1 -1
  93. package/dist/assets/{send-Dd0BBamd.js → send-B8Po_JT_.js} +1 -1
  94. package/dist/assets/{settings-2-z3X6U2eo.js → settings-2-CyAo_nYh.js} +1 -1
  95. package/dist/assets/shapes-CuqJ7CA_.js +1 -0
  96. package/dist/assets/{sigma-CxBVWJ85.js → sigma-YkVVm5dQ.js} +1 -1
  97. package/dist/assets/{speaker-Dy79a571.js → speaker-iL5Ep2q1.js} +1 -1
  98. package/dist/assets/{src-KDhMZ5Ob.js → src-D1j-98hX.js} +14 -14
  99. package/dist/assets/{sso-popup-BjTl8T6g.js → sso-popup-aQr_3YWW.js} +1 -1
  100. package/dist/assets/{step-inspector-model-D6NC9QoX.js → step-inspector-model-gcGmLTWD.js} +1 -1
  101. package/dist/assets/{table-2-IUuOvuT8.js → table-2-Bx38akVK.js} +1 -1
  102. package/dist/assets/{timer-reset-D1H0hoMf.js → timer-reset-Z1XvH6K-.js} +1 -1
  103. package/dist/assets/{unlink-DTu1e00O.js → unlink-Dx9zRmL9.js} +1 -1
  104. package/dist/assets/{usb-CFK8z-TS.js → usb-_-9JyMyy.js} +1 -1
  105. package/dist/assets/{use-device-bound-caps-DS4FtJtN.js → use-device-bound-caps-BR0aNe6v.js} +1 -1
  106. package/dist/assets/{use-scenes-feed-CE-KFGxN.js → use-scenes-feed-CNxJKI3Y.js} +1 -1
  107. package/dist/assets/{use-stationary-objects-CFLRkxjx.js → use-stationary-objects-CFFufETF.js} +1 -1
  108. package/dist/assets/useEventInvalidation-yyadLjpT.js +1 -0
  109. package/dist/assets/{useNodeUrlSelection-DytighTL.js → useNodeUrlSelection-zNi606-l.js} +1 -1
  110. package/dist/assets/user-round-BnFLdVEf.js +1 -0
  111. package/dist/assets/{user-x-KWsBR0tG.js → user-x-DCKuWnFc.js} +1 -1
  112. package/dist/assets/{variable-BG_qKWYf.js → variable-pzTTvzbo.js} +1 -1
  113. package/dist/assets/{video-D0guHpd1.js → video-Dn2Lqozt.js} +1 -1
  114. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-FCSZ5q7m.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-o917suSb.js} +2 -2
  115. package/dist/index.html +14 -14
  116. package/dist/server/addon.js +9 -2
  117. package/package.json +1 -1
  118. package/dist/assets/Addons-DRU_qk60.js +0 -5
  119. package/dist/assets/IntegrationDetail-CYhU0hEL.js +0 -1
  120. package/dist/assets/Pipeline-BT9k34b_.js +0 -1
  121. package/dist/assets/Recordings-Dl-l1Vzi.js +0 -1
  122. package/dist/assets/RemoteGrid-CF92aN64.js +0 -1
  123. package/dist/assets/SessionsList-84zwfhuD.js +0 -2
  124. package/dist/assets/Templates-D0V7IdcS.js +0 -1
  125. package/dist/assets/circle-slash-pdaivo-U.js +0 -1
  126. package/dist/assets/crop-CZJDrMcX.js +0 -1
  127. package/dist/assets/device-picker-model-2dkiqOI6.js +0 -1
  128. package/dist/assets/icons-BSJCF6qM.js +0 -1
  129. package/dist/assets/index-CyqhCHax.css +0 -2
  130. package/dist/assets/mount-2dkiqOI6.js +0 -1
  131. package/dist/assets/remoteEntry-CD4F7fE2.js +0 -1
  132. package/dist/assets/shapes-D-IaC6en.js +0 -1
  133. package/dist/assets/useEventInvalidation-2dkiqOI6.js +0 -1
  134. package/dist/assets/user-round-BSVSJsjB.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-BvflqtP1.js";import{U as f}from"./src-KDhMZ5Ob.js";import{t as p}from"./i18n-Bg2ooh3q.js";import{t as m}from"./useTranslation-BJr-n0es.js";import"./notification-schedule-field-B7FdiF_t.js";import{n as h,t as g}from"./use-device-bound-caps-DS4FtJtN.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-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 +1 @@
1
- import{C as e,K as t,R as n,S as r,et as i,o as a}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 o,dt as s,zt as c}from"./player-overlays-DpZIxQHp.js";import{Co as l,Fs as u,Ft as d,Io as f,Oo as p,Pt as m,qo as h,r as g}from"./src-KDhMZ5Ob.js";import{t as _}from"./useTranslation-BJr-n0es.js";import{H as v,Q as y}from"./index-DGvsu0ui.js";import{t as b}from"./AdminPage-DmkuRREx.js";import"./useEventInvalidation-2dkiqOI6.js";import{t as x}from"./device-integration-icon-BpHHi90B.js";i();var S=32;function C(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>S)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}}function w(){let{t:i}=_(),S=y(),w=s(),T=a();g([`deviceManager`],[`device.registered`,`device.unregistered`,`device.online`,`device.offline`,`device.disabled`,`device.enabled`]),g([`integrations`],[`integration.enabled`,`integration.disabled`,`integration.deleted`,`provider.started`,`provider.stopped`,`addon.installed`,`addon.uninstalled`,`addon.started`,`addon.stopped`]);let{data:E}=f({projection:`slim`}),{data:D}=u(void 0),O=h({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),k=l({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),A=p({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),j=t(()=>E??[],[E]),M=t(()=>d(D),[D]),{activeDevices:N,orphanDevices:P}=t(()=>C(j,M),[j,M]),F=t(()=>{let e=new Map;for(let t of j)e.set(t.id,{id:t.id,name:t.name??t.stableId??`#${String(t.id)}`});return e},[j]),I=n(e=>F.get(e)??null,[F]),L=t(()=>(D??[]).map(e=>({id:e.id,name:e.name??e.addonId,icon:r(v,{type:e.addonId,size:`sm`})})),[D]),R=n(e=>S(`/devices/${String(e)}`),[S]);return e(b,{icon:o,title:i(`nav.devices`,`Devices`),children:[r(m,{context:`devices`,devices:N,trpc:w.trpcClient,filters:{integrations:L},integrationOf:M,resolveIntegrationIcon:x,resolveParent:I,onNavigate:R,batchActions:{remove:O.mutate,disable:k.mutate,enable:A.mutate}}),P.length>0&&e(`div`,{className:`mt-6 space-y-2`,children:[e(`div`,{className:`flex items-baseline gap-2`,children:[r(c,{className:`h-3.5 w-3.5 text-warning shrink-0`}),r(`h2`,{className:`text-sm font-semibold text-foreground`,children:i(`devices.orphanDevices`,`Orphan devices`)}),r(`span`,{className:`text-[10px] text-foreground-subtle`,children:i(`common.deviceOrphans`,{count:P.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:i(`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(m,{context:`devices`,devices:P,trpc:w.trpcClient,integrationOf:M,urlScope:`nested`,lsKey:`devices:orphan`,resolveIntegrationIcon:x,resolveParent:I,onNavigate:R})]})]})]})}export{w as DevicesPage};
1
+ import{C as e,K as t,R as n,S as r,et as i,o as a}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 o,dt as s,zt as c}from"./player-overlays-D0HsTHUG.js";import{Co as l,Fs as u,Ft as d,Io as f,Oo as p,Pt as m,qo as h,r as g}from"./src-D1j-98hX.js";import{t as _}from"./useTranslation-BJr-n0es.js";import{H as v,Q as y}from"./index-BoU7NTPo.js";import{t as b}from"./AdminPage-D2S65e6Q.js";import"./useEventInvalidation-yyadLjpT.js";import{t as x}from"./device-integration-icon-DXsx1ovH.js";i();var S=32;function C(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>S)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}}function w(){let{t:i}=_(),S=y(),w=s(),T=a();g([`deviceManager`],[`device.registered`,`device.unregistered`,`device.online`,`device.offline`,`device.disabled`,`device.enabled`]),g([`integrations`],[`integration.enabled`,`integration.disabled`,`integration.deleted`,`provider.started`,`provider.stopped`,`addon.installed`,`addon.uninstalled`,`addon.started`,`addon.stopped`]);let{data:E}=f({projection:`slim`}),{data:D}=u(void 0),O=h({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),k=l({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),A=p({onSuccess:()=>{T.invalidateQueries({queryKey:[[`deviceManager`]]})}}),j=t(()=>E??[],[E]),M=t(()=>d(D),[D]),{activeDevices:N,orphanDevices:P}=t(()=>C(j,M),[j,M]),F=t(()=>{let e=new Map;for(let t of j)e.set(t.id,{id:t.id,name:t.name??t.stableId??`#${String(t.id)}`});return e},[j]),I=n(e=>F.get(e)??null,[F]),L=t(()=>(D??[]).map(e=>({id:e.id,name:e.name??e.addonId,icon:r(v,{type:e.addonId,size:`sm`})})),[D]),R=n(e=>S(`/devices/${String(e)}`),[S]);return e(b,{icon:o,title:i(`nav.devices`,`Devices`),children:[r(m,{context:`devices`,devices:N,trpc:w.trpcClient,filters:{integrations:L},integrationOf:M,resolveIntegrationIcon:x,resolveParent:I,onNavigate:R,batchActions:{remove:O.mutate,disable:k.mutate,enable:A.mutate}}),P.length>0&&e(`div`,{className:`mt-6 space-y-2`,children:[e(`div`,{className:`flex items-baseline gap-2`,children:[r(c,{className:`h-3.5 w-3.5 text-warning shrink-0`}),r(`h2`,{className:`text-sm font-semibold text-foreground`,children:i(`devices.orphanDevices`,`Orphan devices`)}),r(`span`,{className:`text-[10px] text-foreground-subtle`,children:i(`common.deviceOrphans`,{count:P.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:i(`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(m,{context:`devices`,devices:P,trpc:w.trpcClient,integrationOf:M,urlScope:`nested`,lsKey:`devices:orphan`,resolveIntegrationIcon:x,resolveParent:I,onNavigate:R})]})]})]})}export{w 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-DpZIxQHp.js";import{Oo as l}from"./client-BvflqtP1.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,jn as _,ln as v,pn as y,uf as b}from"./src-KDhMZ5Ob.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:v,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(_,{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:v,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=y({serverUrl:i.config.serverUrl,token:i.config.token}),t=new a({defaultOptions:{queries:{retry:!1,refetchOnWindowFocus:!1}}});return v(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(b.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-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 +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-KDhMZ5Ob.js";import{t as l}from"./useTranslation-BJr-n0es.js";import{t as u}from"./notification-schedule-field-B7FdiF_t.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-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 +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-DpZIxQHp.js";import{Fr as v,eo as y}from"./client-BvflqtP1.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,af as ue,b as de,bn as fe,br as pe,do as me,f as he,fi as L,g as ge,ii as R,j as _e,k as ve,kn as z,m 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-KDhMZ5Ob.js";import{t as B}from"./useTranslation-BJr-n0es.js";import{et as De}from"./index-DGvsu0ui.js";import{t as Oe}from"./AdminPage-DmkuRREx.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=ge(t(()=>u.map(e=>W(e.ref)),[u]),i,!1),f=e=>d.status===`ok`?d.data.current.get(ye(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=ve(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(pe,{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=me({},{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(fe,{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=_e(a.get(`range`)),h=(e,t,n)=>{let r=new URLSearchParams;for(let t of F(e))r.append(`s`,de(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=he(),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}=ue(),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-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};