@fastybird/smart-panel-admin 1.1.0-alpha.64 → 1.1.0-alpha.65

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 (367) hide show
  1. package/dist/assets/{_baseClone-BRvt9rE2.js → _baseClone-Dte8C1GY.js} +1 -1
  2. package/dist/assets/alert-C46gt4gd.js +1 -0
  3. package/dist/assets/card-CfYeWlyn.js +1 -0
  4. package/dist/assets/card-add-form-prPDxTto.js +1 -0
  5. package/dist/assets/card-edit-form-DeJkki_S.js +1 -0
  6. package/dist/assets/checkbox-DTPMEXAL.js +1 -0
  7. package/dist/assets/{clamp-FW02HANf.js → clamp-Dw8cnUDq.js} +1 -1
  8. package/dist/assets/col-DlQWLFQs.js +1 -0
  9. package/dist/assets/collapse-Lq5XIsa-.js +1 -0
  10. package/dist/assets/common-Cq0z9nNV.js +135 -0
  11. package/dist/assets/components-B-hsdZRB.js +6 -0
  12. package/dist/assets/components-B383JPLp.js +1 -0
  13. package/dist/assets/components-B7P2CZq6.js +8 -0
  14. package/dist/assets/components-Bq3pGRkK.js +2 -0
  15. package/dist/assets/components-CAKqGh0u.js +1 -0
  16. package/dist/assets/components-CKVFjqFL.js +1 -0
  17. package/dist/assets/components-D-L2AY7i.js +1 -0
  18. package/dist/assets/components-DeVRIc-a.js +1 -0
  19. package/dist/assets/components-WE7iG2jt.js +1 -0
  20. package/dist/assets/components-Zvb61V03.js +1 -0
  21. package/dist/assets/composables-9t6Z9PcI.js +1 -0
  22. package/dist/assets/composables-BGj78DB-.js +1 -0
  23. package/dist/assets/composables-BYXOFFmS.js +1 -0
  24. package/dist/assets/{composables-C-o6-CAH.js → composables-CIOrWHUe.js} +1 -1
  25. package/dist/assets/composables-CQU3fAXU.js +1 -0
  26. package/dist/assets/composables-CZF9saW7.js +1 -0
  27. package/dist/assets/{composables-DPgLjJbY.js → composables-CkZcA6lV2.js} +1 -1
  28. package/dist/assets/composables-DQBxpwSg.js +1 -0
  29. package/dist/assets/composables-DWpPaUpC.js +1 -0
  30. package/dist/assets/composables-ejopM-lJ.js +1 -0
  31. package/dist/assets/composables-rXK2U5tg.js +1 -0
  32. package/dist/assets/config-COwev7fh.js +2 -0
  33. package/dist/assets/dashboard-CjfXUy9Q.js +2 -0
  34. package/dist/assets/{dashboard.types-B1PBhwVR.js → dashboard.types-CR6hZnWk.js} +1 -1
  35. package/dist/assets/{data-source-edit-form-DEVPfSNf.js → data-source-edit-form-BmWiJ3nH.js} +1 -1
  36. package/dist/assets/descriptions-CK3XrcY5.js +1 -0
  37. package/dist/assets/devices-Id44EDCB.js +2 -0
  38. package/dist/assets/devices-virtual.constants-BxQtZ-rg.js +1 -0
  39. package/dist/assets/devices.constants-cxt4nI1j.js +1 -0
  40. package/dist/assets/dialog-C_c6nIiU.js +1 -0
  41. package/dist/assets/directive-CBwN801q.js +1 -0
  42. package/dist/assets/drawer-BDUl_ooz.js +1 -0
  43. package/dist/assets/{empty-DvXiCUNF.js → empty-BkxH1E8f.js} +1 -1
  44. package/dist/assets/form-CoKeb4n7.js +12 -0
  45. package/dist/assets/{icon-with-child-CgZMNB3F.js → icon-with-child-C0yuv0oQ.js} +1 -1
  46. package/dist/assets/index-BH_S-Ibi.js +11 -0
  47. package/dist/assets/index-zUke6Vim.css +1 -0
  48. package/dist/assets/input-number-LzEdwV5R.js +1 -0
  49. package/dist/assets/integration-config-dialog-o1o5fsBY.js +1 -0
  50. package/dist/assets/{keys-TghOLUK_.js → keys-bvwxU-Nn.js} +1 -1
  51. package/dist/assets/layout-config-vjyQ55VE.js +1 -0
  52. package/dist/assets/{layout-default-CQvX8pvu.js → layout-default-Bmr2AuLS.js} +1 -1
  53. package/dist/assets/layout-lock-i85d1fqR.js +1 -0
  54. package/dist/assets/layout-profile-CN8aC5D8.js +1 -0
  55. package/dist/assets/layout-profile-CXXVPlf5.js +1 -0
  56. package/dist/assets/layout-sign-dRB17K6p.js +1 -0
  57. package/dist/assets/layout-sign-ltYwHtGk.js +1 -0
  58. package/dist/assets/link-oGaKVImK.js +1 -0
  59. package/dist/assets/list-data-sources-adjust-WTi20syM.js +1 -0
  60. package/dist/assets/list-locations-As0Q6B1j.js +1 -0
  61. package/dist/assets/list-users-DsoIjPaS.js +1 -0
  62. package/dist/assets/logs-entries.transformers-CsxVIzqA.js +1 -0
  63. package/dist/assets/mcp.exceptions-DCsimQKn.js +1 -0
  64. package/dist/assets/notifications.exceptions-DWLirHz-.js +1 -0
  65. package/dist/assets/{omit-CwOnvSVN.js → omit-Bx6J5ySX.js} +1 -1
  66. package/dist/assets/page-configure-D1uozFKi.js +1 -0
  67. package/dist/assets/page-configure-ytjG854u.js +1 -0
  68. package/dist/assets/pagination-BRD3yP76.js +1 -0
  69. package/dist/assets/radio-Ccjyja5p.js +1 -0
  70. package/dist/assets/scene-add-form-CgruxHec.js +1 -0
  71. package/dist/assets/scene-edit-form-Bix-e8-P.js +1 -0
  72. package/dist/assets/{schemas.utils-D840MBN3.js → schemas.utils-DWbEHUX2.js} +1 -1
  73. package/dist/assets/select-BZCtBPAN.js +1 -0
  74. package/dist/assets/select-data-source-plugin-iGick1Fu.js +1 -0
  75. package/dist/assets/skeleton-CNRuASqp.js +1 -0
  76. package/dist/assets/slider-Bb1_3mLl.js +1 -0
  77. package/dist/assets/source-candidates.utils-Cb9r1JWA.js +1 -0
  78. package/dist/assets/{spaces-D-tQFPMe.js → spaces-D9wyAbko.js} +2 -2
  79. package/dist/assets/spaces-home-control.constants-CvSKJux3.js +1 -0
  80. package/dist/assets/steps-CFlcEz-i.js +1 -0
  81. package/dist/assets/{system-BfccTgQv.js → system-79rvuFsE.js} +2 -2
  82. package/dist/assets/table-CFRJXsHQ.js +1 -0
  83. package/dist/assets/tabs-61uwdeaq.js +1 -0
  84. package/dist/assets/tile-detail-D4Ur1_43.js +1 -0
  85. package/dist/assets/tile-edit-form-HVPJGvVJ.js +1 -0
  86. package/dist/assets/types-DPk4ChIx.js +1 -0
  87. package/dist/assets/types-DaHriOn2.js +1 -0
  88. package/dist/assets/use-dialog-DT7SEb4g.js +1 -0
  89. package/dist/assets/use-ordered-children-jLmZ6DmH.js +1 -0
  90. package/dist/assets/useBuddyChat-ChFgcSNQ.js +1 -0
  91. package/dist/assets/useConfigModule-C5G5RPH_.js +1 -0
  92. package/dist/assets/{useDataSources-Hdo8qJZg.js → useDataSources-BCjgNXH7.js} +1 -1
  93. package/dist/assets/useDevicesPlugins-DoFX5T7Z.js +1 -0
  94. package/dist/assets/useEventBus-BBp5LBB-.js +1 -0
  95. package/dist/assets/{useExtensions-DoQMQb0z.js → useExtensions-CBRBDhdG.js} +1 -1
  96. package/dist/assets/useGeolocation-Bu_OrWlG.js +2 -0
  97. package/dist/assets/useLocation-D4jTkrKi.js +1 -0
  98. package/dist/assets/{useMcpClients-1EbfQ9P3.js → useMcpClients-evOnRLSH.js} +1 -1
  99. package/dist/assets/{useModule-CkH6rcF3.js → useModule-BFwF0Hvb.js} +1 -1
  100. package/dist/assets/{useModules-Diux-w1Q.js → useModules-LMm1LMWQ.js} +1 -1
  101. package/dist/assets/{useNumberFormat-Cpk8jRAr.js → useNumberFormat-8Lz2ms_w.js} +1 -1
  102. package/dist/assets/{usePage-qUuM3PR6.js → usePage-i5CJ8Y7Q.js} +1 -1
  103. package/dist/assets/{usePersonalTokens-ePsqRodN.js → usePersonalTokens-B-gvWF4Y.js} +1 -1
  104. package/dist/assets/{usePlugin-DAzjvxjS.js → usePlugin-BR8u8DBb.js} +1 -1
  105. package/dist/assets/{usePlugins-BzLkBW9_.js → usePlugins-CJqAJVB-.js} +1 -1
  106. package/dist/assets/useSession-BRG9xKsr.js +1 -0
  107. package/dist/assets/{useSpaces-CWuh4Y89.js → useSpaces-B-iaoyU0.js} +1 -1
  108. package/dist/assets/{useUuid-d9Pl2-B1.js → useUuid-ki5cjFg3.js} +1 -1
  109. package/dist/assets/view-buddy-chat-DtHYWFX7.js +1 -0
  110. package/dist/assets/view-card-add-IQthsVQk.js +1 -0
  111. package/dist/assets/view-card-edit-CYPHEwmR.js +1 -0
  112. package/dist/assets/view-channel-C3NGmwqj.js +1 -0
  113. package/dist/assets/view-channel-add-mFc_Z5uu.js +1 -0
  114. package/dist/assets/view-channel-edit-DxGvIum2.js +1 -0
  115. package/dist/assets/view-channel-property-add-D1m7T7OC.js +1 -0
  116. package/dist/assets/view-channel-property-edit-DZPU_3he.js +1 -0
  117. package/dist/assets/view-channels-BuBP9OyR.js +1 -0
  118. package/dist/assets/view-config-module-edit-C3GF41u-.js +1 -0
  119. package/dist/assets/view-config-modules-BbMGPuHA.js +1 -0
  120. package/dist/assets/view-config-plugin-edit-BFC9JPsn.js +1 -0
  121. package/dist/assets/view-config-plugins-D5czRx2c.js +1 -0
  122. package/dist/assets/view-data-source-add-DC4Cslpa.js +1 -0
  123. package/dist/assets/view-data-source-add-E8o8Ah6n.js +1 -0
  124. package/dist/assets/view-data-source-edit-D2rNqmKf.js +1 -0
  125. package/dist/assets/view-data-source-edit-M2OtC6AF.js +1 -0
  126. package/dist/assets/view-device-D2uINp2H.js +1 -0
  127. package/dist/assets/view-device-IDRa3OGX.css +1 -0
  128. package/dist/assets/view-device-add-SVR78XVz.js +1 -0
  129. package/dist/assets/view-device-control-DjTtRcVc.js +1 -0
  130. package/dist/assets/view-device-edit-Das0ELu7.js +1 -0
  131. package/dist/assets/view-devices-ES4YZ9Mx.js +1 -0
  132. package/dist/assets/view-devices-wizard-DA74IFeX.js +1 -0
  133. package/dist/assets/view-display-BQfiAcvA.js +1 -0
  134. package/dist/assets/view-display-edit-C2Q42ydZ.js +1 -0
  135. package/dist/assets/view-display-tokens-BOESTyRS.js +1 -0
  136. package/dist/assets/view-displays-DY4G5b0h.js +1 -0
  137. package/dist/assets/view-extension-detail-bg9LM7Qj.js +1 -0
  138. package/dist/assets/view-extensions-xLhnoWiR.js +1 -0
  139. package/dist/assets/view-light-group-wizard-C9jkTOTk.js +1 -0
  140. package/dist/assets/view-location-BiJYukNN.js +1 -0
  141. package/dist/assets/view-location-add-CC6x1o9s.js +1 -0
  142. package/dist/assets/view-location-edit-GJ3tBcMW.js +1 -0
  143. package/dist/assets/view-locations-Cpb31fOD.js +1 -0
  144. package/dist/assets/view-lock-screen-Qq8nNW0J.js +1 -0
  145. package/dist/assets/view-mcp-clients-hheL7VHs.js +1 -0
  146. package/dist/assets/view-mcp-oauth-consent-CyRCSOdl.js +1 -0
  147. package/dist/assets/view-mcp-oauth-management-CCbs1Kls.js +1 -0
  148. package/dist/assets/view-not-found-Dmbqw-XX.js +1 -0
  149. package/dist/assets/view-notifications-BX_CiuBF.js +1 -0
  150. package/dist/assets/view-onboarding-CxSWrF3B.js +1 -0
  151. package/dist/assets/view-page-Cm0Y4rlN.js +1 -0
  152. package/dist/assets/view-page-add-prE_qprC.js +1 -0
  153. package/dist/assets/view-page-configure-CUg75FaF.js +1 -0
  154. package/dist/assets/view-page-configure-DiWrdPO7.js +1 -0
  155. package/dist/assets/view-page-data-source-add-NTc7jCDJ.js +1 -0
  156. package/dist/assets/view-page-data-source-edit-eUvW2Ikr.js +1 -0
  157. package/dist/assets/view-page-edit-WpWT7tqq.js +1 -0
  158. package/dist/assets/view-page-plugin-DUzf5_B5.js +1 -0
  159. package/dist/assets/view-pages-CTZGODWB.js +1 -0
  160. package/dist/assets/view-profile-general-BDIhKfZf.js +1 -0
  161. package/dist/assets/view-profile-security-C3XKfmMM.js +1 -0
  162. package/dist/assets/view-remote-access-BY2xp7Zs.js +1 -0
  163. package/dist/assets/view-scene-add-eg06sORS.js +1 -0
  164. package/dist/assets/view-scene-edit-PwGTdwiH.js +1 -0
  165. package/dist/assets/view-scenes-Cw9ZQs-s.js +1 -0
  166. package/dist/assets/view-sign-in-DAJUkP4c.js +1 -0
  167. package/dist/assets/view-sign-up-JILDDlSt.js +1 -0
  168. package/dist/assets/view-simulator-device-wizard-DSAJrqIl.js +1 -0
  169. package/dist/assets/view-space-add-1oPsH2pS.js +1 -0
  170. package/dist/assets/view-space-configure-DxcrtfV4.js +1 -0
  171. package/dist/assets/view-space-configure-xSeRl5_6.css +1 -0
  172. package/dist/assets/view-space-edit-CKqi1xnn.js +1 -0
  173. package/dist/assets/view-space-plugin-BC-2GTO3.js +1 -0
  174. package/dist/assets/view-spaces-CguaoIcm.js +1 -0
  175. package/dist/assets/view-spaces-wizard-BaSqyh-S.js +1 -0
  176. package/dist/assets/view-stats-Dy4hI8ZC.js +1 -0
  177. package/dist/assets/view-system-backups-DZPXeohl.js +1 -0
  178. package/dist/assets/view-system-info-CquwwTkw.js +1 -0
  179. package/dist/assets/view-system-log-detail-CJPA0zbJ.js +1 -0
  180. package/dist/assets/view-system-logs-DXgQ14GN.js +1 -0
  181. package/dist/assets/view-tile-C24Ijx8R.js +1 -0
  182. package/dist/assets/view-tile-add-CbmbvYTu.js +1 -0
  183. package/dist/assets/view-tile-add-P4tSvs_9.js +1 -0
  184. package/dist/assets/view-tile-data-source-add-Dq5BYt27.js +1 -0
  185. package/dist/assets/view-tile-data-source-edit-B6mEXeAW.js +1 -0
  186. package/dist/assets/view-tile-edit-BQVqas4k.js +1 -0
  187. package/dist/assets/view-tile-edit-Cch5jL15.js +1 -0
  188. package/dist/assets/view-tile-edit-iOjoxpHP.js +1 -0
  189. package/dist/assets/view-user-add-BRYyi5fb.js +1 -0
  190. package/dist/assets/view-user-edit-e2S_mRfQ.js +1 -0
  191. package/dist/assets/view-users-DHIxR8Qy.js +1 -0
  192. package/dist/assets/view-virtual-device-wizard-FIcP5kB2.js +1 -0
  193. package/dist/assets/view-virtual-measurement-wizard-BH4k8pUm.js +1 -0
  194. package/dist/assets/view-virtual-thermostat-wizard-BBIb-taG.js +1 -0
  195. package/dist/assets/virtual-light-group-members-OmU35xjj.js +1 -0
  196. package/dist/assets/virtual-measurement-editor-CkDduLTw.js +1 -0
  197. package/dist/assets/virtual-measurement-editor-R993YkiI.js +1 -0
  198. package/dist/assets/virtual-thermostat-editor-CRGPh71P.js +1 -0
  199. package/dist/assets/{vue-meta.esm-browser.min-C5z7o_np.js → vue-meta.esm-browser.min-K07OTZFQ.js} +1 -1
  200. package/dist/assets/weather-CMRkX4kS.js +2 -0
  201. package/dist/assets/{weather-forecast.transformers-Byk60sNo.js → weather-forecast.transformers-BLYZYxUk.js} +1 -1
  202. package/dist/index.html +106 -102
  203. package/package.json +1 -1
  204. package/dist/assets/alert-QrG1sCYZ.js +0 -1
  205. package/dist/assets/card-C50YgvLJ.js +0 -1
  206. package/dist/assets/card-add-form-xQ3jq8UU.js +0 -1
  207. package/dist/assets/card-edit-form-ij_WELVm.js +0 -1
  208. package/dist/assets/checkbox-DC8SWg5-.js +0 -1
  209. package/dist/assets/col-DutoOaP1.js +0 -1
  210. package/dist/assets/collapse-YYBw5kEr.js +0 -1
  211. package/dist/assets/common-DkmUkaQU.js +0 -135
  212. package/dist/assets/components-B9rBWPBZ.js +0 -1
  213. package/dist/assets/components-CJN-jy0X.js +0 -1
  214. package/dist/assets/components-CM0wAvqJ.js +0 -1
  215. package/dist/assets/components-CRnkbXLk.js +0 -2
  216. package/dist/assets/components-Cifm_fnj.js +0 -8
  217. package/dist/assets/components-DAi6Luki.js +0 -6
  218. package/dist/assets/components-DdRbccBG.js +0 -1
  219. package/dist/assets/components-Dq6nZhqz.js +0 -1
  220. package/dist/assets/components-eR8dxK9x.js +0 -1
  221. package/dist/assets/components-uz62kHtl.js +0 -1
  222. package/dist/assets/composables-B9DljBQT.js +0 -1
  223. package/dist/assets/composables-BOOOE2P5.js +0 -1
  224. package/dist/assets/composables-CPxXv_dj.js +0 -1
  225. package/dist/assets/composables-CptvqUdI.js +0 -1
  226. package/dist/assets/composables-D0d8feiK.js +0 -1
  227. package/dist/assets/composables-DC6tLXWe.js +0 -1
  228. package/dist/assets/composables-DleezpFx2.js +0 -1
  229. package/dist/assets/composables-DlulzZQO.js +0 -1
  230. package/dist/assets/composables-kGCsTX0b.js +0 -1
  231. package/dist/assets/config-CdzBdVwi.js +0 -2
  232. package/dist/assets/dashboard-C9xOrxUn.js +0 -2
  233. package/dist/assets/descriptions-AI3JbKtS.js +0 -1
  234. package/dist/assets/devices-B0FYNZiC.js +0 -2
  235. package/dist/assets/devices-virtual.constants-BIMeiR5r.js +0 -1
  236. package/dist/assets/devices.constants-DHQemX04.js +0 -1
  237. package/dist/assets/dialog-Bfheq391.js +0 -1
  238. package/dist/assets/directive-D42ORGRu.js +0 -1
  239. package/dist/assets/drawer-C7FPifGU.js +0 -1
  240. package/dist/assets/form-D4GORLIN.js +0 -12
  241. package/dist/assets/index-BZxtmZTM.css +0 -1
  242. package/dist/assets/index-lUdYD5zb.js +0 -11
  243. package/dist/assets/input-number-BZA4bSND.js +0 -1
  244. package/dist/assets/integration-config-dialog-DCWljoXP.js +0 -1
  245. package/dist/assets/layout-config-B5_LNz9i.js +0 -1
  246. package/dist/assets/layout-lock-DRVJcMfF.js +0 -1
  247. package/dist/assets/layout-profile-DWnH5jHT.js +0 -1
  248. package/dist/assets/layout-profile-PUlyhE4I.js +0 -1
  249. package/dist/assets/layout-sign-AHug0XoT.js +0 -1
  250. package/dist/assets/layout-sign-DvG4Nfc1.js +0 -1
  251. package/dist/assets/link-mE1gaRBg.js +0 -1
  252. package/dist/assets/list-data-sources-adjust-6RL1H-hB.js +0 -1
  253. package/dist/assets/list-locations-BgjPPXLh.js +0 -1
  254. package/dist/assets/list-users-BBeCJy0F.js +0 -1
  255. package/dist/assets/logs-entries.transformers-p26XEWE3.js +0 -1
  256. package/dist/assets/mcp.exceptions-0AO2PkjW.js +0 -1
  257. package/dist/assets/notifications.exceptions-iK91Mjq1.js +0 -1
  258. package/dist/assets/page-configure-BN473onl.js +0 -1
  259. package/dist/assets/page-configure-BwvoI9-V.js +0 -1
  260. package/dist/assets/pagination-CSrb9USq.js +0 -1
  261. package/dist/assets/radio-BfBpfygp.js +0 -1
  262. package/dist/assets/scene-add-form-CHA8yKeQ.js +0 -1
  263. package/dist/assets/scene-edit-form-DScYyBtx.js +0 -1
  264. package/dist/assets/select-SNW1ZnG3.js +0 -1
  265. package/dist/assets/select-data-source-plugin-D3pcvOKH.js +0 -1
  266. package/dist/assets/skeleton-DkyCzTs7.js +0 -1
  267. package/dist/assets/slider-Cfdt_kIA.js +0 -1
  268. package/dist/assets/spaces-home-control.constants-Ci3s_u49.js +0 -1
  269. package/dist/assets/steps-DVtRuf_2.js +0 -1
  270. package/dist/assets/table-DOZz9A77.js +0 -1
  271. package/dist/assets/tabs-CUYibH1q.js +0 -1
  272. package/dist/assets/tile-detail-E3wkJ8QA.js +0 -1
  273. package/dist/assets/tile-edit-form-DrcZiDuz.js +0 -1
  274. package/dist/assets/types-B6K6Du7l.js +0 -1
  275. package/dist/assets/types-CKQ-nhSt.js +0 -1
  276. package/dist/assets/use-dialog-BNeR0eyg.js +0 -1
  277. package/dist/assets/use-ordered-children-D5mRegXD.js +0 -1
  278. package/dist/assets/useBuddyChat-O-Nu32au.js +0 -1
  279. package/dist/assets/useConfigModule-DLtc9prD.js +0 -1
  280. package/dist/assets/useDevicesPlugins-BNDlsi9J.js +0 -1
  281. package/dist/assets/useEventBus-Bqm_mpTp.js +0 -1
  282. package/dist/assets/useGeolocation-BDxIXwid.js +0 -2
  283. package/dist/assets/useLocation-D66xYs9N.js +0 -1
  284. package/dist/assets/view-buddy-chat-DgkTnDkf.js +0 -1
  285. package/dist/assets/view-card-add-D9LBvOga.js +0 -1
  286. package/dist/assets/view-card-edit-bpvsyA1z.js +0 -1
  287. package/dist/assets/view-channel-3GPSRWtI.js +0 -1
  288. package/dist/assets/view-channel-add-DhRPnQuu.js +0 -1
  289. package/dist/assets/view-channel-edit-ByBMo6NK.js +0 -1
  290. package/dist/assets/view-channel-property-add-BdWFCGYB.js +0 -1
  291. package/dist/assets/view-channel-property-edit-BSK8NGx7.js +0 -1
  292. package/dist/assets/view-channels-BYPwgOH0.js +0 -1
  293. package/dist/assets/view-config-module-edit-D1EjDVlr.js +0 -1
  294. package/dist/assets/view-config-modules-ggI2BfJX.js +0 -1
  295. package/dist/assets/view-config-plugin-edit-X-ItOKUt.js +0 -1
  296. package/dist/assets/view-config-plugins-C_yffKUH.js +0 -1
  297. package/dist/assets/view-data-source-add-BY8C94Cw.js +0 -1
  298. package/dist/assets/view-data-source-add-v_akMAIZ.js +0 -1
  299. package/dist/assets/view-data-source-edit-BvwZfjcY.js +0 -1
  300. package/dist/assets/view-data-source-edit-sz5TUYS-.js +0 -1
  301. package/dist/assets/view-device-DSPGceiB.js +0 -1
  302. package/dist/assets/view-device-TJjGoba6.css +0 -1
  303. package/dist/assets/view-device-add-BDvxExLQ.js +0 -1
  304. package/dist/assets/view-device-control-B7eoT8fq.js +0 -1
  305. package/dist/assets/view-device-edit-CU_H5pxJ.js +0 -1
  306. package/dist/assets/view-devices-C2mfgXUt.js +0 -1
  307. package/dist/assets/view-devices-wizard-DWG9Fwsx.js +0 -1
  308. package/dist/assets/view-display-BeXpzbyP.js +0 -1
  309. package/dist/assets/view-display-edit-DLXJwBL0.js +0 -1
  310. package/dist/assets/view-display-tokens-CiXmtc2w.js +0 -1
  311. package/dist/assets/view-displays-Cm3Fc3dW.js +0 -1
  312. package/dist/assets/view-extension-detail-BzN2bHlZ.js +0 -1
  313. package/dist/assets/view-extensions-BOl8ZA9d.js +0 -1
  314. package/dist/assets/view-location-C9JKUHrG.js +0 -1
  315. package/dist/assets/view-location-add-Cyw9rNUf.js +0 -1
  316. package/dist/assets/view-location-edit-aKeRl0KT.js +0 -1
  317. package/dist/assets/view-locations-BRvsyxJX.js +0 -1
  318. package/dist/assets/view-lock-screen-BCVT-Txz.js +0 -1
  319. package/dist/assets/view-mcp-clients-4Wbh1wHR.js +0 -1
  320. package/dist/assets/view-mcp-oauth-consent-Bg7DsVZA.js +0 -1
  321. package/dist/assets/view-mcp-oauth-management-Dd1VS4ue.js +0 -1
  322. package/dist/assets/view-not-found-G5Aj98MD.js +0 -1
  323. package/dist/assets/view-notifications-CPtnm75W.js +0 -1
  324. package/dist/assets/view-onboarding-Cy66_-so.js +0 -1
  325. package/dist/assets/view-page-B5vr7x6L.js +0 -1
  326. package/dist/assets/view-page-add-Bx4kqewh.js +0 -1
  327. package/dist/assets/view-page-configure-C8gP42vB.js +0 -1
  328. package/dist/assets/view-page-configure-DLbQ0jo4.js +0 -1
  329. package/dist/assets/view-page-data-source-add-Bw6M4YHe.js +0 -1
  330. package/dist/assets/view-page-data-source-edit-Dgg9mncl.js +0 -1
  331. package/dist/assets/view-page-edit-Dye6EYLo.js +0 -1
  332. package/dist/assets/view-page-plugin-DEtt9En1.js +0 -1
  333. package/dist/assets/view-pages-Dn8Drdve.js +0 -1
  334. package/dist/assets/view-profile-general-8ks668d4.js +0 -1
  335. package/dist/assets/view-profile-security-Ce-FmQW8.js +0 -1
  336. package/dist/assets/view-remote-access-e4HQhY5z.js +0 -1
  337. package/dist/assets/view-scene-add-RhFPc4Wu.js +0 -1
  338. package/dist/assets/view-scene-edit-C2C5cYN8.js +0 -1
  339. package/dist/assets/view-scenes-cbBuTg7e.js +0 -1
  340. package/dist/assets/view-sign-in-Cm_TlPMa.js +0 -1
  341. package/dist/assets/view-sign-up-DUuGiF8o.js +0 -1
  342. package/dist/assets/view-simulator-device-wizard-BbUri-gC.js +0 -1
  343. package/dist/assets/view-space-add-BkLSwO2X.js +0 -1
  344. package/dist/assets/view-space-configure-DKlvZpIj.css +0 -1
  345. package/dist/assets/view-space-configure-DbW2ofRt.js +0 -1
  346. package/dist/assets/view-space-edit-DP5Y5ggD.js +0 -1
  347. package/dist/assets/view-space-plugin-Cwd9TUxg.js +0 -1
  348. package/dist/assets/view-spaces-C6SFJ1VW.js +0 -1
  349. package/dist/assets/view-spaces-wizard-Y3wiwlhs.js +0 -1
  350. package/dist/assets/view-stats-BjXC9i9f.js +0 -1
  351. package/dist/assets/view-system-backups-Cm6fgx7X.js +0 -1
  352. package/dist/assets/view-system-info-DNBRAC3B.js +0 -1
  353. package/dist/assets/view-system-log-detail-BDfcqvAC.js +0 -1
  354. package/dist/assets/view-system-logs-B8sJc0sZ.js +0 -1
  355. package/dist/assets/view-tile-BPCK9n9t.js +0 -1
  356. package/dist/assets/view-tile-add-CF9ubtMw.js +0 -1
  357. package/dist/assets/view-tile-add-h0VJqXUB.js +0 -1
  358. package/dist/assets/view-tile-data-source-add-CVTfQps5.js +0 -1
  359. package/dist/assets/view-tile-data-source-edit-BzY0kuaA.js +0 -1
  360. package/dist/assets/view-tile-edit-50dQVXk8.js +0 -1
  361. package/dist/assets/view-tile-edit-BDAe8RfW.js +0 -1
  362. package/dist/assets/view-tile-edit-DR26QBRL.js +0 -1
  363. package/dist/assets/view-user-add-D6yErQib.js +0 -1
  364. package/dist/assets/view-user-edit-Dx054xQN.js +0 -1
  365. package/dist/assets/view-users-BRcK8se-.js +0 -1
  366. package/dist/assets/view-virtual-device-wizard-Cengr_tU.js +0 -1
  367. package/dist/assets/weather-BZKkHzjy.js +0 -2
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ar as e,Ci as t,D as n,Dr as r,Er as i,Fr as a,H as o,Kr as s,Mr as c,Nr as l,Or as u,Pi as d,T as ee,Ti as f,Xi as p,di as m,ei as h,jr as g,k as _,kr as v,n as y,ni as b,pi as x,r as S,x as te,xr as C}from"./icon-with-child-C0yuv0oQ.js";import{t as w}from"./vue-meta.esm-browser.min-K07OTZFQ.js";import{$r as T,Di as E,Gr as D,Hr as O,Kn as k,Qr as A,Ti as j,Wr as M,_ as N,_n as P,ai as F,bi as I,ei as L,h as R,m as z,p as B,r as V,rn as H,sn as ne,vn as U,x as re}from"./common-Cq0z9nNV.js";import{n as W,t as G}from"./descriptions-CK3XrcY5.js";import{n as ie,t as ae}from"./table-CFRJXsHQ.js";import{n as K,t as q}from"./form-CoKeb4n7.js";import{t as J}from"./alert-C46gt4gd.js";import{r as Y,t as X}from"./select-BZCtBPAN.js";import{t as oe}from"./card-CfYeWlyn.js";import{t as Z}from"./checkbox-DTPMEXAL.js";import{n as Q,r as se}from"./radio-Ccjyja5p.js";import{x as ce}from"./components-B-hsdZRB.js";import{n as le,t as $}from"./steps-CFlcEz-i.js";import{t as ue}from"./dist-DJgPCOr0.js";import{C as de,g as fe,n as pe}from"./keys-bvwxU-Nn.js";import{i as me,o as he,r as ge}from"./keys-DMEIfK2a.js";import{o as _e,r as ve}from"./devices.constants-cxt4nI1j.js";import"./devices-Id44EDCB.js";import{A as ye,F as be,M as xe,N as Se,P as Ce,j as we}from"./composables-CQU3fAXU.js";import{a as Te,i as Ee,n as De,o as Oe,r as ke}from"./devices-virtual.constants-BxQtZ-rg.js";import{n as Ae,t as je}from"./source-candidates.utils-Cb9r1JWA.js";var Me={class:`space-y-4`},Ne={key:0,"data-test-id":`blocked-categories`},Pe={class:`text-sm text-gray-500 mb-2`},Fe={class:`flex flex-wrap gap-2`},Ie=a({name:`VirtualWizardCategoryStep`,__name:`virtual-wizard-category-step`,props:{modelValue:{}},emits:[`update:modelValue`],setup(t,{expose:n,emit:a}){let o=a,{t:s}=ee(),f=i(()=>Oe.map(e=>({value:e,label:s(`devicesModule.categories.devices.${e}`)}))),m=i(()=>Te.map(e=>({value:e,label:s(`devicesModule.categories.devices.${e}`),reason:s(`devicesVirtualPlugin.wizard.category.blockedReason`)}))),g=e=>{o(`update:modelValue`,e)};return n({categories:f,blockedCategories:m}),(n,i)=>(h(),e(`div`,Me,[l(d(J),{type:`info`,title:d(s)(`devicesVirtualPlugin.wizard.category.heading`),description:d(s)(`devicesVirtualPlugin.wizard.category.description`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),l(d(q),{"label-position":`top`},{default:x(()=>[l(d(K),{label:d(s)(`devicesVirtualPlugin.fields.devices.category.title`)},{default:x(()=>[l(d(Y),{"model-value":t.modelValue,placeholder:d(s)(`devicesVirtualPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``,class:`w-full`,"onUpdate:modelValue":g},{default:x(()=>[(h(!0),e(C,null,b(f.value,e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`placeholder`])]),_:1},8,[`label`])]),_:1}),m.value.length>0?(h(),e(`div`,Ne,[r(`p`,Pe,p(d(s)(`devicesVirtualPlugin.wizard.category.blockedHeading`)),1),r(`div`,Fe,[(h(!0),e(C,null,b(m.value,e=>(h(),u(d(I),{key:e.value,type:`info`,title:e.reason,class:`opacity-60! cursor-not-allowed!`},{default:x(()=>[c(p(e.label),1)]),_:2},1032,[`title`]))),128))])])):v(``,!0)]))}}),Le={class:`space-y-4`},Re={class:`text-xs text-gray-500 mt-1`},ze={class:`text-xs text-gray-500 mt-1`},Be=a({name:`VirtualWizardDetailsStep`,__name:`virtual-wizard-details-step`,props:{category:{},name:{},roomId:{},zoneIds:{}},emits:[`update:name`,`update:roomId`,`update:zoneIds`],setup(t,{expose:n,emit:a}){let o=t,c=a,{t:g}=ee(),_=N(),v=re().getStore(pe),y=i(()=>o.name),S=i(()=>o.roomId),te=i(()=>o.zoneIds),w=i(()=>ue(v.findAll().filter(e=>e.type===fe.ROOM),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),T=i(()=>ue(v.findAll().filter(e=>e.type===fe.ZONE&&!de(e.category)),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),D=i(()=>{if(o.category===null)return``;let e=g(`devicesModule.categories.devices.${o.category}`);if(o.roomId===null)return e;let t=v.findById(o.roomId);return t?`${e} — ${t.name}`:e}),O=f(o.name===``||o.name===D.value?o.name:null);m(D,e=>{o.name===O.value&&e!==o.name&&(O.value=e,c(`update:name`,e))},{immediate:!0});let k=e=>{c(`update:name`,e)},A=e=>{c(`update:roomId`,e)},j=e=>{c(`update:zoneIds`,e)};return s(()=>{v.fetch().catch(e=>_.error(`Failed to load rooms and zones`,e))}),n({roomOptions:w,zoneOptions:T,generatedName:D}),(t,n)=>(h(),e(`div`,Le,[l(d(J),{type:`info`,title:d(g)(`devicesVirtualPlugin.wizard.details.heading`),description:d(g)(`devicesVirtualPlugin.wizard.details.description`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),l(d(q),{"label-position":`top`},{default:x(()=>[l(d(K),{label:d(g)(`devicesVirtualPlugin.fields.devices.name.title`)},{default:x(()=>[l(d(E),{"model-value":y.value,placeholder:d(g)(`devicesVirtualPlugin.fields.devices.name.placeholder`),name:`name`,"onUpdate:modelValue":k},null,8,[`model-value`,`placeholder`])]),_:1},8,[`label`]),l(d(K),{label:d(g)(`devicesModule.fields.devices.room.title`)},{default:x(()=>[l(d(Y),{"model-value":S.value,placeholder:d(g)(`devicesModule.fields.devices.room.placeholder`),name:`room`,filterable:``,clearable:``,class:`w-full`,"onUpdate:modelValue":A},{default:x(()=>[(h(!0),e(C,null,b(w.value,e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`placeholder`]),r(`div`,Re,p(d(g)(`devicesModule.fields.devices.room.hint`)),1)]),_:1},8,[`label`]),l(d(K),{label:d(g)(`devicesModule.fields.devices.zones.title`)},{default:x(()=>[l(d(Y),{"model-value":te.value,placeholder:d(g)(`devicesModule.fields.devices.zones.placeholder`),name:`zones`,filterable:``,clearable:``,multiple:``,class:`w-full`,"onUpdate:modelValue":j},{default:x(()=>[(h(!0),e(C,null,b(T.value,e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`placeholder`]),r(`div`,ze,p(d(g)(`devicesModule.fields.devices.zones.hint`)),1)]),_:1},8,[`label`])]),_:1})]))}}),Ve={class:`space-y-4`},He={class:`flex items-center gap-3`,"data-test-id":`mapping-progress`},Ue=[`data-test-id`],We={class:`flex items-center gap-2 flex-wrap`},Ge={class:`flex flex-wrap items-center gap-2`},Ke=[`data-test-id`],qe={class:`flex items-center gap-2 flex-wrap`},Je={class:`text-sm font-medium`},Ye={class:`flex flex-wrap items-center gap-2`},Xe=a({name:`VirtualWizardMappingStep`,__name:`virtual-wizard-mapping-step`,props:{category:{},modelValue:{}},emits:[`update:modelValue`,`update:valid`],setup(n,{expose:a,emit:o}){let f=n,g=o,{t:y}=ee(),te=z(),w=N(),T=B(),E=re(),D=E.getStore(he),O=E.getStore(me),A=E.getStore(ge),j=t({}),M=t({}),P=t({}),L=t({}),R=t({}),U=t({}),W=0,G=new Map,ie=e=>be[e]?.constraints??{},ae=e=>Ce[e]?.constraints??{},K=i(()=>{if(f.category===null)return[];let e=we[f.category];if(!e)return[];let t=(xe[f.category]??[...e.required,...e.optional]).filter(e=>e!==H.device_information);return[...t.filter(t=>e.required.includes(t)),...t.filter(t=>!e.required.includes(t))].map(t=>{let n=e.required.includes(t),r=ye[t]??{required:[],optional:[]};return{specChannel:t,required:n,slots:[...r.required,...r.optional].map(e=>{let i=Se(t,e),a=r.required.includes(e);return{key:`${t}.${e}`,specChannel:t,specProperty:e,required:n&&a,channelRequired:n,propertyRequired:a,permissions:i?.permissions??[],dataType:i?.data_type??null,unit:i?.unit??null}})}})}),q=i(()=>K.value.flatMap(e=>e.slots)),oe=i(()=>q.value.map(e=>({specChannel:e.specChannel,specProperty:e.specProperty,sourceProperty:j[e.key]??null}))),Z=i(()=>{let e=new Set(q.value.filter(e=>typeof j[e.key]==`string`).map(e=>e.specChannel)),t=q.value.filter(t=>t.required||t.propertyRequired&&e.has(t.specChannel)),n=t.filter(e=>typeof j[e.key]!=`string`);return{requiredTotal:t.length,requiredFilled:t.length-n.length,remaining:n}}),Q=i(()=>Object.keys(j).length>0),se=i(()=>Q.value&&Z.value.remaining.length===0),le=i(()=>Z.value.requiredTotal===0?Q.value?100:0:Math.round(Z.value.requiredFilled/Z.value.requiredTotal*100)),$=i(()=>{let e=[],t=K.value.filter(e=>e.slots.some(e=>typeof j[e.key]==`string`)).map(e=>e.specChannel);if(f.category!==null&&t.length>0){let n=ae(f.category);for(let r of n.oneOrMoreOf??[])r.some(e=>t.includes(e))||e.push({specChannel:r[0],message:y(`devicesVirtualPlugin.wizard.mapping.constraints.deviceOneOrMoreOf`,{channels:r.map(e=>y(`devicesModule.categories.channels.${e}`)).join(`, `)})});for(let r of n.oneOf??[])r.filter(e=>t.includes(e)).length>1&&e.push({specChannel:r[0],message:y(`devicesVirtualPlugin.wizard.mapping.constraints.deviceOneOf`,{channels:r.map(e=>y(`devicesModule.categories.channels.${e}`)).join(`, `)})});for(let r of n.mutuallyExclusiveGroups??[]){let n=r.filter(e=>e.some(e=>t.includes(e)));n.length>1&&e.push({specChannel:n[0][0],message:y(`devicesVirtualPlugin.wizard.mapping.constraints.deviceMutuallyExclusive`,{groups:n.map(e=>e.map(e=>y(`devicesModule.categories.channels.${e}`)).join(` + `)).join(` / `)})})}}for(let t of K.value){let n=t.slots.filter(e=>typeof j[e.key]==`string`).map(e=>e.specProperty);if(n.length===0)continue;let r=ie(t.specChannel);for(let i of r.oneOrMoreOf??[])i.some(e=>n.includes(e))||e.push({specChannel:t.specChannel,message:y(`devicesVirtualPlugin.wizard.mapping.constraints.oneOrMoreOf`,{properties:i.map(e=>y(`devicesModule.categories.channelsProperties.${e}`)).join(`, `)})});for(let i of r.oneOf??[])i.filter(e=>n.includes(e)).length>1&&e.push({specChannel:t.specChannel,message:y(`devicesVirtualPlugin.wizard.mapping.constraints.oneOf`,{properties:i.map(e=>y(`devicesModule.categories.channelsProperties.${e}`)).join(`, `)})});for(let i of r.mutuallyExclusiveGroups??[]){let r=i.filter(e=>e.some(e=>n.includes(e)));r.length>1&&e.push({specChannel:t.specChannel,message:y(`devicesVirtualPlugin.wizard.mapping.constraints.mutuallyExclusive`,{groups:r.map(e=>e.map(e=>y(`devicesModule.categories.channelsProperties.${e}`)).join(` + `)).join(` / `)})})}}return e}),de=i(()=>Object.values(P).some(e=>e)),fe=i(()=>f.category!==null&&se.value&&Object.keys(M).length===0&&$.value.length===0&&!de.value),pe=i(()=>ue(D.findAll().filter(e=>!e.draft&&(!e.hidden||e.hiddenBy===ne.system)&&je(e)),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),_e=e=>e===null?[]:ue(O.findForDevice(e),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name})),ve=e=>e===null?[]:ue(A.findForChannel(e).filter(t=>{let n=O.findById(e);return Ae(n?D.findById(n.device):null,n,t)}),[e=>e.name??y(`devicesModule.categories.channelsProperties.${e.category}`)],[`asc`]).map(e=>({value:e.id,label:e.name??y(`devicesModule.categories.channelsProperties.${e.category}`)})),Te=e=>[e.dataType,e.unit,e.permissions.join(`/`)].filter(e=>typeof e==`string`&&e.length>0).join(` · `),Ee=(e,t)=>t.required||U[e.specChannel]===!0||typeof j[t.key]==`string`||typeof M[t.key]==`string`,Oe=e=>e.slots.filter(t=>Ee(e,t)),ke=e=>e.slots.length-Oe(e).length,Me=async e=>{try{return await O.fetch({deviceId:e})}catch(t){return w.error(`Failed to load source channels`,t),O.findForDevice(e)}},Ne=async e=>{try{await A.fetch({channelId:e})}catch(e){w.error(`Failed to load source properties`,e)}return A.findForChannel(e)},Pe=(e,t,n)=>{let r=e=>e.spec_channel===t.slot.specChannel&&e.spec_property===t.slot.specProperty&&e.source_property===t.sourceProperty,i=e[n];return i&&r(i)?i:e.find(r)??null},Fe=async e=>{if(f.category===null||e.length===0)return;let t=++W;for(let n of e)G.set(n.slot.key,t),P[n.slot.key]=!0,delete M[n.slot.key];let n=(e,n)=>{G.get(e)===t&&(delete P[e],n===null?delete M[e]:M[e]=n)};try{let{data:t,error:r}=await te.client.POST(`/${S}/${De}/devices/compatibility`,{body:{data:{category:f.category,candidates:e.map(e=>({spec_channel:e.slot.specChannel,spec_property:e.slot.specProperty,source_property:e.sourceProperty}))}}}),i=t?.data;if(!i){let t=r?V(r,y(`devicesVirtualPlugin.wizard.mapping.errors.checkFailed`)):y(`devicesVirtualPlugin.wizard.mapping.errors.checkFailed`);for(let r of e)n(r.slot.key,t);T.error(t);return}e.forEach((e,t)=>{let r=Pe(i,e,t);if(!r){n(e.slot.key,y(`devicesVirtualPlugin.wizard.mapping.errors.checkFailed`));return}n(e.slot.key,r.compatible?null:r.reason??y(`devicesVirtualPlugin.wizard.mapping.errors.incompatible`))})}catch(t){w.error(`Virtual device compatibility check failed`,t);let r=y(`devicesVirtualPlugin.wizard.mapping.errors.checkFailed`);for(let t of e)n(t.slot.key,r);T.error(r)}},Ie=async(e,t)=>{let n=q.value.find(t=>t.key===e);if(n){if(G.set(e,++W),delete M[e],delete P[e],t===null){delete j[e];return}j[e]=t,await Fe([{slot:n,sourceProperty:t}])}},Le=async(e,t)=>{let n=K.value.find(t=>t.specChannel===e);if(!n||t===null)return;let r=++W;for(let e of n.slots)G.set(e.key,r),delete P[e.key];let i=await Ne(t);if(n.slots.some(e=>G.get(e.key)!==r))return;let a=O.findById(t),o=[];for(let e of n.slots){let n=i.find(t=>t.category===e.specProperty);if(!n){let t=j[e.key];t&&o.push({slot:e,sourceProperty:t});continue}delete M[e.key],j[e.key]=n.id,L[e.key]={device:a?.device??null,channel:t},o.push({slot:e,sourceProperty:n.id})}if(o.length===0){T.info(y(`devicesVirtualPlugin.wizard.mapping.shortcut.nothingApplied`));return}U[e]=!0,T.info(y(`devicesVirtualPlugin.wizard.mapping.shortcut.applied`,{filled:o.length,total:n.slots.length})),await Fe(o)},Re=(e,t)=>{L[e]={device:t,channel:null},Ie(e,null).catch(e=>w.error(`Failed to clear source property`,e)),t!==null&&Me(t).catch(e=>w.error(`Failed to load source channels`,e))},ze=(e,t)=>{L[e]={device:L[e]?.device??null,channel:t},Ie(e,null).catch(e=>w.error(`Failed to clear source property`,e)),t!==null&&Ne(t).catch(e=>w.error(`Failed to load source properties`,e))},Be=(e,t)=>{Ie(e,t).catch(e=>w.error(`Failed to select source property`,e))},Xe=(e,t)=>{R[e]={device:t,channel:null},t!==null&&Me(t).catch(e=>w.error(`Failed to load source channels`,e))},Ze=(e,t)=>{R[e]={device:R[e]?.device??null,channel:t},t!==null&&Ne(t).catch(e=>w.error(`Failed to load source properties`,e))},Qe=e=>{Le(e,R[e]?.channel??null).catch(e=>w.error(`Failed to apply source channel`,e))},$e=e=>e.filter(e=>e.sourceProperty!==null).map(e=>`${e.specChannel}.${e.specProperty}=${e.sourceProperty}`).sort().join(`|`),et=()=>{for(let[e,t]of Object.entries(j)){if(L[e]?.channel)continue;let n=A.findById(t),r=n?O.findById(n.channel):null;L[e]={device:r?.device??null,channel:r?.id??null}}};return m(()=>f.modelValue,e=>{if($e(e)!==$e(oe.value)){for(let e of Object.keys(j))delete j[e];for(let e of Object.keys(M))delete M[e];for(let e of Object.keys(P))delete P[e];for(let e of Object.keys(L))delete L[e];G.clear();for(let t of e)t.sourceProperty!==null&&(j[`${t.specChannel}.${t.specProperty}`]=t.sourceProperty);et()}},{deep:!0,immediate:!0}),m(()=>f.category,(e,t)=>{if(!(t==null||t===e)){for(let e of Object.keys(j))delete j[e];for(let e of Object.keys(M))delete M[e];for(let e of Object.keys(P))delete P[e];for(let e of Object.keys(L))delete L[e];for(let e of Object.keys(R))delete R[e];G.clear(),W++}}),m(oe,e=>g(`update:modelValue`,e),{deep:!0,immediate:!0}),m(fe,e=>g(`update:valid`,e),{immediate:!0}),s(()=>{D.fetch({hidden:k.all}).catch(e=>w.error(`Failed to load source devices`,e))}),a({slots:q,groups:K,errors:M,checking:P,pickers:L,progress:Z,constraintViolations:$,isValid:fe,sourceDevicesOptions:pe,selectSource:Ie,applyChannel:Le}),(t,i)=>(h(),e(`div`,Ve,[l(d(J),{type:`info`,title:d(y)(`devicesVirtualPlugin.wizard.mapping.heading`),description:d(y)(`devicesVirtualPlugin.wizard.mapping.description`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),n.category===null?(h(),u(d(J),{key:0,type:`warning`,title:d(y)(`devicesVirtualPlugin.wizard.mapping.noCategory`),closable:!1,"show-icon":``},null,8,[`title`])):(h(),e(C,{key:1},[r(`div`,He,[l(d(ce),{percentage:le.value,status:se.value?`success`:void 0,class:`grow`},null,8,[`percentage`,`status`]),Z.value.requiredTotal>0?(h(),u(d(F),{key:0,size:`small`,class:`whitespace-nowrap`},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.mapping.progress`,{filled:Z.value.requiredFilled,total:Z.value.requiredTotal})),1)]),_:1})):Q.value?v(``,!0):(h(),u(d(F),{key:1,size:`small`},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.mapping.noRequired`)),1)]),_:1}))]),(h(!0),e(C,null,b($.value,e=>(h(),u(d(J),{key:`${e.specChannel}-${e.message}`,type:`error`,closable:!1,"show-icon":``,class:`mt-2`,"data-test-id":`constraint-violation`},{default:x(()=>[r(`strong`,null,p(d(y)(`devicesModule.categories.channels.${e.specChannel}`)),1),c(` `+p(e.message),1)]),_:2},1024))),128)),(h(!0),e(C,null,b(K.value,t=>(h(),e(`div`,{key:t.specChannel,class:`b b-solid b-gray-200 dark:b-gray-700 rounded p-3 space-y-3`,"data-test-id":`slot-group-${t.specChannel}`},[r(`div`,We,[r(`strong`,null,p(d(y)(`devicesModule.categories.channels.${t.specChannel}`)),1),l(d(I),{type:t.required?`danger`:`info`,size:`small`},{default:x(()=>[c(p(t.required?d(y)(`devicesVirtualPlugin.wizard.mapping.channelRequired`):d(y)(`devicesVirtualPlugin.wizard.mapping.channelOptional`)),1)]),_:2},1032,[`type`])]),r(`div`,Ge,[l(d(F),{size:`small`,class:`basis-full`},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.mapping.shortcut.description`)),1)]),_:1}),l(d(Y),{"model-value":R[t.specChannel]?.device??null,placeholder:d(y)(`devicesVirtualPlugin.wizard.mapping.source.devicePlaceholder`),name:`shortcut-device-${t.specChannel}`,filterable:``,clearable:``,class:`w-60`,"onUpdate:modelValue":e=>Xe(t.specChannel,e)},{default:x(()=>[(h(!0),e(C,null,b(pe.value,e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`placeholder`,`name`,`onUpdate:modelValue`]),l(d(Y),{"model-value":R[t.specChannel]?.channel??null,placeholder:d(y)(`devicesVirtualPlugin.wizard.mapping.source.channelPlaceholder`),name:`shortcut-channel-${t.specChannel}`,disabled:!R[t.specChannel]?.device,filterable:``,clearable:``,class:`w-60`,"onUpdate:modelValue":e=>Ze(t.specChannel,e)},{default:x(()=>[(h(!0),e(C,null,b(_e(R[t.specChannel]?.device??null),e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:2},1032,[`model-value`,`placeholder`,`name`,`disabled`,`onUpdate:modelValue`]),l(d(_),{disabled:!R[t.specChannel]?.channel,plain:``,onClick:e=>Qe(t.specChannel)},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.mapping.shortcut.apply`)),1)]),_:1},8,[`disabled`,`onClick`])]),(h(!0),e(C,null,b(Oe(t),t=>(h(),e(`div`,{key:t.key,class:`space-y-1`,"data-test-id":`slot-${t.key}`},[r(`div`,qe,[r(`span`,Je,p(d(y)(`devicesModule.categories.channelsProperties.${t.specProperty}`)),1),t.required?(h(),u(d(I),{key:0,type:`danger`,size:`small`},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.mapping.propertyRequired`)),1)]),_:1})):v(``,!0),l(d(F),{size:`small`,type:`info`},{default:x(()=>[c(p(Te(t)),1)]),_:2},1024)]),r(`div`,Ye,[l(d(Y),{"model-value":L[t.key]?.device??null,placeholder:d(y)(`devicesVirtualPlugin.wizard.mapping.source.devicePlaceholder`),name:`device-${t.key}`,filterable:``,clearable:``,class:`w-60`,"onUpdate:modelValue":e=>Re(t.key,e)},{default:x(()=>[(h(!0),e(C,null,b(pe.value,e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`placeholder`,`name`,`onUpdate:modelValue`]),l(d(Y),{"model-value":L[t.key]?.channel??null,placeholder:d(y)(`devicesVirtualPlugin.wizard.mapping.source.channelPlaceholder`),name:`channel-${t.key}`,disabled:!L[t.key]?.device,filterable:``,clearable:``,class:`w-60`,"onUpdate:modelValue":e=>ze(t.key,e)},{default:x(()=>[(h(!0),e(C,null,b(_e(L[t.key]?.device??null),e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:2},1032,[`model-value`,`placeholder`,`name`,`disabled`,`onUpdate:modelValue`]),l(d(Y),{"model-value":j[t.key]??null,placeholder:d(y)(`devicesVirtualPlugin.wizard.mapping.source.propertyPlaceholder`),name:`property-${t.key}`,disabled:!L[t.key]?.channel,loading:P[t.key]===!0,filterable:``,clearable:``,class:`w-60`,"onUpdate:modelValue":e=>Be(t.key,e)},{default:x(()=>[(h(!0),e(C,null,b(ve(L[t.key]?.channel??null),e=>(h(),u(d(X),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:2},1032,[`model-value`,`placeholder`,`name`,`disabled`,`loading`,`onUpdate:modelValue`])]),M[t.key]?(h(),u(d(F),{key:0,size:`small`,type:`danger`,class:`block`,"data-test-id":`slot-error-${t.key}`},{default:x(()=>[c(p(M[t.key]),1)]),_:2},1032,[`data-test-id`])):v(``,!0)],8,Ke))),128)),U[t.specChannel]||ke(t)>0?(h(),u(d(_),{key:0,link:``,type:`primary`,"data-test-id":`optional-slots-${t.specChannel}`,onClick:e=>U[t.specChannel]=!U[t.specChannel]},{default:x(()=>[c(p(U[t.specChannel]?d(y)(`devicesVirtualPlugin.wizard.mapping.hideOptional`):d(y)(`devicesVirtualPlugin.wizard.mapping.showOptional`,{count:ke(t)})),1)]),_:2},1032,[`data-test-id`,`onClick`])):v(``,!0)],8,Ue))),128))],64))]))}}),Ze={class:`space-y-4`},Qe={class:`text-xs text-gray-500`},$e=a({name:`VirtualWizardReviewStep`,__name:`virtual-wizard-review-step`,props:{category:{},mappings:{},name:{},roomId:{},zoneIds:{},showCreateAction:{type:Boolean,default:!0}},emits:[`created`,`submitting`],setup(t,{expose:n,emit:a}){let o=t,s=a,{t:m}=ee(),g=z(),b=N(),S=B(),te=re(),w=te.getStore(he),T=te.getStore(me),E=te.getStore(ge),D=te.getStore(pe),O=f(`idle`),k=f(null),A=f(!1),j=f(`idle`),M=f(null),F=f(0),I=i(()=>o.mappings.filter(e=>e.sourceProperty!==null)),L=()=>m(`devicesVirtualPlugin.wizard.review.unknownSource`),R=e=>{let t=E.findById(e),n=t?T.findById(t.channel):null,r=n?w.findById(n.device):null;return{deviceId:n?.device??null,deviceName:r?.name??L(),channelName:n?.name??L(),propertyName:t?t.name??m(`devicesModule.categories.channelsProperties.${t.category}`):L()}},H=i(()=>I.value.map(e=>R(e.sourceProperty))),U=i(()=>I.value.map((e,t)=>{let n=H.value[t];return{key:`${e.specChannel}.${e.specProperty}`,specChannel:e.specChannel,specProperty:e.specProperty,sourceDevice:n.deviceName,sourceChannel:n.channelName,sourceProperty:n.propertyName}})),K=i(()=>{let e=H.value.map(e=>e.deviceId);return e.length===0||e.some(e=>e===null)?!1:new Set(e).size===1}),q=i(()=>{if(!K.value)return null;let e=H.value[0]?.deviceId??null;return e===null?null:w.findById(e)}),Y=i(()=>o.category===null?``:m(`devicesModule.categories.devices.${o.category}`)),X=i(()=>{if(o.roomId===null)return m(`devicesVirtualPlugin.wizard.review.noRoom`);let e=D.findById(o.roomId);return e?e.name:L()}),oe=i(()=>o.zoneIds.length===0?m(`devicesVirtualPlugin.wizard.review.noZones`):o.zoneIds.map(e=>{let t=D.findById(e);return t?t.name:L()}).join(`, `)),Q=i(()=>O.value!==`submitting`&&O.value!==`created`&&o.category!==null&&o.name.trim().length>0&&U.value.length>0),se=(e,t)=>{let n=E.findById(e.sourceProperty)?.dataType??null,r=be[e.specChannel],i=Object.values(r?.properties??{}).find(t=>t.category===e.specProperty);return(n===null?void 0:i?.data_types?.find(e=>e.data_type===n))??t},ce=e=>{let t=Se(e.specChannel,e.specProperty);if(!t)return b.error(`No specification found for ${e.specChannel}.${e.specProperty}; leaving it out of the create payload`),null;let n=se(e,{data_type:t.data_type,format:t.format??void 0,step:t.step??void 0});return{type:ke,category:e.specProperty,identifier:e.specProperty,name:null,permissions:t.permissions,data_type:n.data_type,format:n.format??null,invalid:E.findById(e.sourceProperty)?.invalid??t.invalid??null,step:n.step??null,value:null,value_origin:P.source,source_property:e.sourceProperty}},le=i(()=>{let e=new Map;for(let t of I.value){let n=ce(t);if(!n)continue;let r=e.get(t.specChannel)??[];r.push(n),e.set(t.specChannel,r)}return Array.from(e.entries()).map(([e,t])=>({type:ke,category:e,identifier:e,name:m(`devicesModule.categories.channels.${e}`),properties:t}))}),$=async e=>{F.value=0;for(let t of o.zoneIds)try{await w.addZone({id:e,zoneId:t})}catch(n){b.error(`Failed to assign the created device id=${e} to zone id=${t}`,n),F.value+=1}F.value>0&&S.warning(m(`devicesVirtualPlugin.wizard.review.errors.zonesFailed`,{count:F.value}))},ue=async()=>{let e=q.value;if(e){j.value=`hiding`,M.value=null;try{await w.edit({id:e.id,data:{type:e.type,hidden:!0,hiddenBy:ne.system}}),j.value=`hidden`}catch(t){b.error(`Failed to hide the source device id=${e.id}`,t),j.value=`failed`,M.value=t instanceof Error?t.message:m(`devicesVirtualPlugin.wizard.review.errors.hideFailed`),S.error(m(`devicesVirtualPlugin.wizard.review.errors.hideFailedFlash`,{device:e.name}))}}},de=()=>{ue().catch(e=>b.error(`Failed to retry hiding the source device`,e))},fe=async()=>{if(!Q.value)return;let e=o.category,t=o.name.trim(),n=o.roomId,r=o.zoneIds,i=le.value;if(e===null)return;O.value=`submitting`,s(`submitting`,!0),k.value=null;let a={type:ke,category:e,name:t,room_id:n,channels:i};try{let{data:e,error:t}=await g.client.POST(`/${y}/${ve}/devices`,{body:{data:a}});if(!e){k.value=t?V(t,m(`devicesVirtualPlugin.wizard.review.errors.createFailed`)):m(`devicesVirtualPlugin.wizard.review.errors.createFailed`),O.value=`error`,s(`submitting`,!1),S.error(k.value);return}let n=e.data;O.value=`created`;try{await w.get({id:n.id})}catch(e){b.error(`Failed to refresh the created device`,e)}r.length>0&&await $(n.id),A.value&&K.value&&await ue(),s(`submitting`,!1),s(`created`,{id:n.id,name:n.name})}catch(e){b.error(`Failed to create the virtual device`,e),k.value=m(`devicesVirtualPlugin.wizard.review.errors.createFailed`),O.value=`error`,s(`submitting`,!1),S.error(k.value)}};return n({rows:U,canHideSource:K,sourceDevice:q,submitState:O,hideState:j,hideError:M,createError:k,canCreate:Q,onCreate:fe,onRetryHide:de}),(n,i)=>(h(),e(`div`,Ze,[l(d(J),{type:`info`,title:d(m)(`devicesVirtualPlugin.wizard.review.heading`),description:d(m)(`devicesVirtualPlugin.wizard.review.description`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),l(d(G),{column:1,border:``,"data-test-id":`review-summary`},{default:x(()=>[l(d(W),{label:d(m)(`devicesVirtualPlugin.fields.devices.category.title`)},{default:x(()=>[c(p(Y.value),1)]),_:1},8,[`label`]),l(d(W),{label:d(m)(`devicesVirtualPlugin.fields.devices.name.title`)},{default:x(()=>[c(p(t.name),1)]),_:1},8,[`label`]),l(d(W),{label:d(m)(`devicesModule.fields.devices.room.title`)},{default:x(()=>[c(p(X.value),1)]),_:1},8,[`label`]),l(d(W),{label:d(m)(`devicesModule.fields.devices.zones.title`)},{default:x(()=>[c(p(oe.value),1)]),_:1},8,[`label`])]),_:1}),U.value.length===0?(h(),u(d(J),{key:0,type:`warning`,title:d(m)(`devicesVirtualPlugin.wizard.review.noMappings`),closable:!1,"show-icon":``,"data-test-id":`review-no-mappings`},null,8,[`title`])):(h(),u(d(ae),{key:1,data:U.value,"data-test-id":`review-rows`},{default:x(()=>[l(d(ie),{label:d(m)(`devicesVirtualPlugin.wizard.review.columns.property`)},{default:x(({row:e})=>[r(`strong`,null,p(d(m)(`devicesModule.categories.channels.${e.specChannel}`)),1),c(` · `+p(d(m)(`devicesModule.categories.channelsProperties.${e.specProperty}`)),1)]),_:1},8,[`label`]),l(d(ie),{label:d(m)(`devicesVirtualPlugin.wizard.review.columns.sourceDevice`),prop:`sourceDevice`},null,8,[`label`]),l(d(ie),{label:d(m)(`devicesVirtualPlugin.wizard.review.columns.sourceChannel`),prop:`sourceChannel`},null,8,[`label`]),l(d(ie),{label:d(m)(`devicesVirtualPlugin.wizard.review.columns.sourceProperty`),prop:`sourceProperty`},null,8,[`label`])]),_:1},8,[`data`])),K.value&&O.value!==`created`?(h(),e(C,{key:2},[l(d(Z),{modelValue:A.value,"onUpdate:modelValue":i[0]||=e=>A.value=e,"data-test-id":`hide-source-checkbox`},{default:x(()=>[c(p(d(m)(`devicesVirtualPlugin.wizard.review.hideSource.label`,{device:q.value?.name??``})),1)]),_:1},8,[`modelValue`]),r(`div`,Qe,p(d(m)(`devicesVirtualPlugin.wizard.review.hideSource.hint`)),1)],64)):v(``,!0),O.value===`error`?(h(),u(d(J),{key:3,type:`error`,title:k.value??``,closable:!1,"show-icon":``,"data-test-id":`create-error`},null,8,[`title`])):v(``,!0),O.value===`created`?(h(),e(C,{key:4},[l(d(J),{type:`success`,title:d(m)(`devicesVirtualPlugin.wizard.review.created`,{name:t.name}),closable:!1,"show-icon":``,"data-test-id":`create-success`},null,8,[`title`]),j.value===`failed`?(h(),u(d(J),{key:0,type:`warning`,title:M.value??``,closable:!1,"show-icon":``,"data-test-id":`hide-error`},{default:x(()=>[l(d(_),{size:`small`,"data-test-id":`retry-hide`,onClick:de},{default:x(()=>[c(p(d(m)(`devicesVirtualPlugin.wizard.review.hideSource.retry`)),1)]),_:1})]),_:1},8,[`title`])):j.value===`hidden`?(h(),u(d(J),{key:1,type:`success`,title:d(m)(`devicesVirtualPlugin.wizard.review.hideSource.success`,{device:q.value?.name??``}),closable:!1,"show-icon":``,"data-test-id":`hide-success`},null,8,[`title`])):v(``,!0)],64)):o.showCreateAction===!1?v(``,!0):(h(),u(d(_),{key:5,type:`primary`,disabled:!Q.value,loading:O.value===`submitting`,"data-test-id":`create-device`,onClick:fe},{default:x(()=>[c(p(d(m)(`devicesVirtualPlugin.wizard.review.create`)),1)]),_:1},8,[`disabled`,`loading`]))]))}}),et={key:2,class:`mx-4 my-2`},tt={class:`flex items-center`},nt={class:`grow-1 flex flex-col gap-2 lt-sm:mx-1 sm:mx-2 lt-sm:mb-1 sm:mb-2 overflow-hidden mt-2`},rt={class:`p-4`},it={key:3,class:`mt-2 flex justify-end lt-sm:mx-1 sm:mx-2 lt-sm:mb-1 sm:mb-2`},at=4,ot=a({name:`ViewVirtualDeviceWizard`,__name:`view-virtual-device-wizard`,setup(a,{expose:s}){let{t:y}=ee(),b=te(),S=e=>{e===U.actuator_group?b.push({name:Ee.LIGHT_GROUP_WIZARD}):e===U.climate_controller?b.push({name:Ee.THERMOSTAT_WIZARD}):(e===U.sensor_aggregate||e===U.sensor_transform)&&b.push({name:Ee.MEASUREMENT_WIZARD,query:{mode:e}})},{isMDDevice:E,isLGDevice:k}=D();w({title:y(`devicesVirtualPlugin.wizard.title`)});let N=t({category:null,mappings:[],name:``,roomId:null,zoneIds:[]}),P=f(0),F=f(!1),I=f(null),z=f(null),B=f(!1),V=i(()=>P.value===at-1),H=i(()=>P.value===0?N.category!==null:P.value===1?F.value:P.value===2&&N.name.trim().length>0),ne=i(()=>[{label:y(`devicesModule.breadcrumbs.devices.list`),route:b.resolve({name:_e.DEVICES})},{label:y(`devicesVirtualPlugin.wizard.breadcrumb`),route:b.resolve({name:Ee.WIZARD})}]);O(()=>!B.value);let re=()=>{B.value||(k.value?b.replace({name:_e.DEVICES}):b.push({name:_e.DEVICES}))},W=()=>{B.value||P.value!==0&&--P.value},G=()=>{!H.value||V.value||(P.value+=1)},ie=e=>{F.value=e},ae=e=>{I.value=e},K=()=>{if(I.value===null)return;let e={name:_e.DEVICE,params:{id:I.value.id}};k.value?b.replace(e):b.push(e)};return m(()=>N.category,(e,t)=>{t==null||t===e||(N.mappings=[],F.value=!1)}),s({activeStep:P,canAdvance:H,createdDevice:I}),(t,i)=>(h(),e(C,null,[d(E)?v(``,!0):(h(),u(d(A),{key:0,teleport:``},{icon:x(()=>[l(d(n),{icon:`mdi:wizard-hat`,class:`w[20px] h[20px]`})]),title:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.title`)),1)]),subtitle:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.subtitle`)),1)]),_:1})),d(E)?v(``,!0):(h(),u(d(T),{key:1,align:d(L).LEFT,teleport:``,small:``,onClick:re},{icon:x(()=>[l(d(o),{size:24},{default:x(()=>[l(d(n),{icon:`mdi:chevron-left`})]),_:1})]),_:1},8,[`align`])),l(d(M),{items:ne.value},null,8,[`items`]),P.value===0?(h(),e(`div`,et,[l(d(se),{"model-value":d(U).projection,"aria-label":d(y)(`devicesVirtualPlugin.measurement.mode`),onChange:S},{default:x(()=>[l(d(Q),{value:d(U).projection},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.measurement.projection`)),1)]),_:1},8,[`value`]),l(d(Q),{value:d(U).sensor_aggregate},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.measurement.aggregate`)),1)]),_:1},8,[`value`]),l(d(Q),{value:d(U).sensor_transform},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.measurement.transform`)),1)]),_:1},8,[`value`]),l(d(Q),{value:d(U).actuator_group},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.measurement.group`)),1)]),_:1},8,[`value`]),l(d(Q),{value:d(U).climate_controller},{default:x(()=>[...i[6]||=[c(`Thermostat controller`,-1)]]),_:1},8,[`value`])]),_:1},8,[`model-value`,`aria-label`])])):v(``,!0),l(d(R),{heading:d(y)(`devicesVirtualPlugin.wizard.title`),"sub-heading":d(y)(`devicesVirtualPlugin.wizard.subtitle`),icon:`mdi:wizard-hat`},g({_:2},[d(E)?{name:`extra`,fn:x(()=>[r(`div`,tt,[I.value===null&&P.value>0?(h(),u(d(_),{key:0,disabled:B.value,"data-test-id":`wizard-back`,onClick:W},{default:x(()=>[c(p(d(y)(`devicesModule.wizard.actions.back`)),1)]),_:1},8,[`disabled`])):v(``,!0),I.value===null?(h(),u(d(_),{key:1,link:``,class:`ml-2!`,disabled:B.value,"data-test-id":`wizard-cancel`,onClick:re},{default:x(()=>[c(p(d(y)(`devicesModule.wizard.actions.cancel`)),1)]),_:1},8,[`disabled`])):v(``,!0),I.value===null?v(``,!0):(h(),u(d(_),{key:2,type:`primary`,"data-test-id":`wizard-view-device`,onClick:K},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.viewDevice`)),1)]),_:1})),I.value===null&&V.value?(h(),u(d(_),{key:3,type:`primary`,class:`ml-2!`,disabled:!z.value?.canCreate,loading:B.value,"data-test-id":`create-device`,onClick:z.value?.onCreate},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.review.create`)),1)]),_:1},8,[`disabled`,`loading`,`onClick`])):v(``,!0),I.value===null&&!V.value?(h(),u(d(_),{key:4,type:`primary`,class:`ml-2!`,disabled:!H.value,"data-test-id":`wizard-next`,onClick:G},{default:x(()=>[c(p(d(y)(`devicesModule.wizard.actions.next`)),1)]),_:1},8,[`disabled`])):v(``,!0)])]),key:`0`}:void 0]),1032,[`heading`,`sub-heading`]),r(`div`,nt,[l(d(oe),{shadow:`never`,class:`max-h-full flex flex-col overflow-hidden box-border`,"body-class":`p-0! max-h-full overflow-hidden flex flex-col`},{header:x(()=>[l(d(le),{active:P.value,"finish-status":`success`,"align-center":``},{default:x(()=>[l(d($),{title:d(y)(`devicesVirtualPlugin.wizard.steps.category`)},null,8,[`title`]),l(d($),{title:d(y)(`devicesVirtualPlugin.wizard.steps.mapping`)},null,8,[`title`]),l(d($),{title:d(y)(`devicesVirtualPlugin.wizard.steps.details`)},null,8,[`title`]),l(d($),{title:d(y)(`devicesVirtualPlugin.wizard.steps.review`)},null,8,[`title`])]),_:1},8,[`active`])]),default:x(()=>[l(d(j),{class:`flex-1 overflow-hidden h-full`},{default:x(()=>[r(`div`,rt,[P.value===0?(h(),u(Ie,{key:0,modelValue:N.category,"onUpdate:modelValue":i[0]||=e=>N.category=e},null,8,[`modelValue`])):P.value===1?(h(),u(Xe,{key:1,modelValue:N.mappings,"onUpdate:modelValue":i[1]||=e=>N.mappings=e,category:N.category,"onUpdate:valid":ie},null,8,[`modelValue`,`category`])):P.value===2?(h(),u(Be,{key:2,name:N.name,"onUpdate:name":i[2]||=e=>N.name=e,"room-id":N.roomId,"onUpdate:roomId":i[3]||=e=>N.roomId=e,"zone-ids":N.zoneIds,"onUpdate:zoneIds":i[4]||=e=>N.zoneIds=e,category:N.category},null,8,[`name`,`room-id`,`zone-ids`,`category`])):(h(),u($e,{key:3,ref_key:`reviewStep`,ref:z,category:N.category,mappings:N.mappings,name:N.name,"room-id":N.roomId,"zone-ids":N.zoneIds,"show-create-action":!1,onCreated:ae,onSubmitting:i[5]||=e=>B.value=e},null,8,[`category`,`mappings`,`name`,`room-id`,`zone-ids`]))])]),_:1})]),_:1})]),d(E)?v(``,!0):(h(),e(`div`,it,[I.value===null&&P.value>0?(h(),u(d(_),{key:0,disabled:B.value,"data-test-id":`wizard-back`,onClick:W},{default:x(()=>[c(p(d(y)(`devicesModule.wizard.actions.back`)),1)]),_:1},8,[`disabled`])):v(``,!0),I.value===null?(h(),u(d(_),{key:1,link:``,class:`ml-2!`,disabled:B.value,"data-test-id":`wizard-cancel`,onClick:re},{default:x(()=>[c(p(d(y)(`devicesModule.wizard.actions.cancel`)),1)]),_:1},8,[`disabled`])):v(``,!0),I.value===null?v(``,!0):(h(),u(d(_),{key:2,type:`primary`,class:`ml-2!`,"data-test-id":`wizard-view-device`,onClick:K},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.viewDevice`)),1)]),_:1})),I.value===null&&V.value?(h(),u(d(_),{key:3,type:`primary`,class:`ml-2!`,disabled:!z.value?.canCreate,loading:B.value,"data-test-id":`create-device`,onClick:z.value?.onCreate},{default:x(()=>[c(p(d(y)(`devicesVirtualPlugin.wizard.review.create`)),1)]),_:1},8,[`disabled`,`loading`,`onClick`])):v(``,!0),I.value===null&&!V.value?(h(),u(d(_),{key:4,type:`primary`,class:`ml-2!`,disabled:!H.value,"data-test-id":`wizard-next`,onClick:G},{default:x(()=>[c(p(d(y)(`devicesModule.wizard.actions.next`)),1)]),_:1},8,[`disabled`])):v(``,!0)]))],64))}});export{ot as default};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ar as e,Er as t,Fr as n,Mr as r,Nr as i,Pi as a,T as o,Ti as s,Xi as c,b as l,ei as u,k as d,pi as f,x as p}from"./icon-with-child-C0yuv0oQ.js";import{vn as m}from"./common-Cq0z9nNV.js";import{o as h}from"./devices.constants-cxt4nI1j.js";import"./devices-Id44EDCB.js";import{i as g}from"./devices-virtual.constants-BxQtZ-rg.js";import{t as _}from"./virtual-measurement-editor-CkDduLTw.js";var v={class:`p-4 overflow-auto`},y=n({__name:`view-virtual-measurement-wizard`,setup(n){let{t:y}=o(),b=p(),x=l(),S=s(!1),C=t(()=>x.query.mode===m.sensor_transform?m.sensor_transform:m.sensor_aggregate),w=e=>b.push({name:h.DEVICE,params:{id:e}});return(t,n)=>(u(),e(`div`,v,[i(a(d),{class:`mb-3`,disabled:S.value,onClick:n[0]||=e=>a(b).push({name:a(g).WIZARD})},{default:f(()=>[r(c(a(y)(`devicesModule.wizard.actions.back`)),1)]),_:1},8,[`disabled`]),i(_,{mode:C.value,onCreated:w,onBusy:n[1]||=e=>S.value=e},null,8,[`mode`])]))}});export{y as default};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ar as e,Fr as t,Mr as n,Nr as r,Pi as i,T as a,Ti as o,Xi as s,_r as c,ei as l,k as u,mi as d,pi as f,x as p}from"./icon-with-child-C0yuv0oQ.js";import{n as m,r as h}from"./radio-Ccjyja5p.js";import{o as g}from"./devices.constants-cxt4nI1j.js";import"./devices-Id44EDCB.js";import{i as _}from"./devices-virtual.constants-BxQtZ-rg.js";import{n as v,t as y}from"./virtual-thermostat-editor-CRGPh71P.js";var b={class:`p-4 overflow-auto`},x=t({__name:`view-virtual-thermostat-wizard`,setup(t){let x=p(),{t:S}=a(),C=o(`guarded_branches`),w=e=>x.push({name:g.DEVICE,params:{id:e}});return(t,a)=>(l(),e(`div`,b,[r(i(u),{class:`mb-3`,onClick:a[0]||=e=>i(x).push({name:i(_).WIZARD})},{default:f(()=>[...a[2]||=[n(` Back `,-1)]]),_:1}),r(i(h),{modelValue:C.value,"onUpdate:modelValue":a[1]||=e=>C.value=e,class:`mb-3`,"aria-label":i(S)(`devicesVirtualPlugin.nativeThermostat.strategy`)},{default:f(()=>[r(i(m),{value:`guarded_branches`},{default:f(()=>[n(s(i(S)(`devicesVirtualPlugin.nativeThermostat.guarded`)),1)]),_:1}),r(i(m),{value:`native_unit`},{default:f(()=>[n(s(i(S)(`devicesVirtualPlugin.nativeThermostat.title`)),1)]),_:1})]),_:1},8,[`modelValue`,`aria-label`]),d(r(y,{create:``,onCreated:w},null,512),[[c,C.value===`guarded_branches`]]),d(r(v,{create:``,onCreated:w},null,512),[[c,C.value===`native_unit`]])]))}});export{x as default};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ar as e,Fr as t,Mr as n,Nr as r,Or as i,Pi as a,T as o,Ti as s,Xi as c,ei as l,ni as u,pi as d,xr as f}from"./icon-with-child-C0yuv0oQ.js";import{ai as p,m}from"./common-Cq0z9nNV.js";import{r as h,t as g}from"./select-BZCtBPAN.js";var _=()=>{let e=m(),{t}=o(),n=s(null),r=s([]),i=s(null),a=s(!1),c=0;return{catalog:n,profiles:r,error:i,pending:a,load:async o=>{let s=++c;n.value=null,a.value=!0,i.value=null;try{let i=await e.client.POST(`/plugins/devices-virtual/producers/light-group-candidates`,{body:o});if(s!==c)return null;if(!i.data)throw Error(i.error&&typeof i.error==`object`&&`message`in i.error?String(i.error.message):t(`devicesVirtualPlugin.lightGroup.readinessUnavailable`));return n.value=i.data.data,r.value=i.data.data.profiles,i.data.data}catch(e){return s===c&&(i.value=e instanceof Error?e.message:t(`devicesVirtualPlugin.lightGroup.readinessUnavailable`)),null}finally{s===c&&(a.value=!1)}},invalidate:()=>{c++,n.value=null,a.value=!1}}},v=()=>{let e=m(),{t}=o(),n=s(null),r=s(null),i=s(!1),a=s(null),c=s(!1),l=0,u=null,d=e=>e instanceof Error||typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`?e.message:t(`devicesVirtualPlugin.lightGroup.loadFailed`),f=()=>{l++,r.value=null,u=null,i.value=!1},p=e=>JSON.stringify({profile:e.profile??`light`,members:e.members,capabilities:e.capabilities});return{configuration:n,preview:r,pending:i,error:a,repairConflict:c,load:async t=>{let r=++l;i.value=!0,a.value=null;try{let i=await e.client.GET(`/plugins/devices-virtual/producers/light-groups/{id}`,{params:{path:{id:t}}});if(r!==l)return null;if(!i.data)throw Error(d(i.error));return n.value=i.data.data,i.data.data}catch(e){return r===l&&(a.value=d(e)),null}finally{r===l&&(i.value=!1)}},previewDraft:async t=>{let n=++l;r.value=null,u=null,i.value=!0,a.value=null;try{let i=await e.client.POST(`/plugins/devices-virtual/producers/light-groups/draft-preview`,{body:t});if(n!==l)return null;if(!i.data)throw Error(d(i.error));return r.value=i.data.data,u=p(t),i.data.data}catch(e){return n===l&&(a.value=d(e)),null}finally{n===l&&(i.value=!1)}},create:async n=>{if(!r.value||u!==p(n))throw Error(t(`devicesVirtualPlugin.lightGroup.previewRequired`));let o=++l;i.value=!0,a.value=null,c.value=!1;try{let t=await e.client.POST(`/plugins/devices-virtual/producers/light-groups`,{body:{...n,expected_graph_revision:r.value.graph_revision}});if(o!==l)return null;if(!t.data)throw c.value=t.response.status===409||t.response.status===422,Error(d(t.error));return f(),t.data.data}catch(e){return o===l&&(a.value=d(e)),null}finally{o===l&&(i.value=!1)}},invalidatePreview:f}},y=t({__name:`virtual-light-group-members`,props:{modelValue:{},candidates:{},disabled:{type:Boolean}},emits:[`update:modelValue`],setup(t,{emit:s}){let m=s,{t:_}=o();return(o,s)=>(l(),e(f,null,[r(a(h),{"model-value":t.modelValue,disabled:t.disabled,multiple:``,filterable:``,"multiple-limit":256,class:`w-full`,placeholder:a(_)(`devicesVirtualPlugin.lightGroup.selectMembers`),"data-test-id":`light-group-members`,"onUpdate:modelValue":s[0]||=e=>m(`update:modelValue`,e)},{default:d(()=>[(l(!0),e(f,null,u(t.candidates,e=>(l(),i(a(g),{key:e.id,value:e.id,label:e.label,disabled:e.eligible===!1&&!t.modelValue.includes(e.id)},null,8,[`value`,`label`,`disabled`]))),128))]),_:1},8,[`model-value`,`disabled`,`placeholder`]),r(a(p),{size:`small`},{default:d(()=>[n(c(a(_)(`devicesVirtualPlugin.lightGroup.memberBounds`)),1)]),_:1})],64))}});export{v as n,_ as r,y as t};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ar as e,Ci as t,Dr as n,Er as r,Fr as i,Mr as a,Nr as o,Or as s,Pi as c,Qr as l,Si as u,T as d,Ti as f,Xi as p,Zr as m,_i as h,di as g,ei as _,k as v,ki as y,kr as b,ni as x,pi as S,xr as C}from"./icon-with-child-C0yuv0oQ.js";import{Cn as w,Di as T,Kn as ee,Sn as E,Tn as D,_n as O,ai as k,an as A,bi as te,bn as j,dn as ne,er as M,fn as re,hn as N,in as P,m as ie,mn as F,nn as I,oi as L,on as R,pn as ae,r as oe,rn as z,vn as B,x as V,xn as se,yn as H}from"./common-Cq0z9nNV.js";import{n as U,t as ce}from"./form-CoKeb4n7.js";import{t as W}from"./alert-C46gt4gd.js";import{t as G}from"./input-number-LzEdwV5R.js";import{r as K,t as q}from"./select-BZCtBPAN.js";import{t as le}from"./card-CfYeWlyn.js";import{i as ue,o as de,r as fe}from"./keys-DMEIfK2a.js";function pe(e,t,n,r){return r.flatMap(r=>{let i=n.find(e=>e.id===r.channel),a=t.find(e=>e.id===i?.device);if(!a||!i||!r.permissions.some(e=>[R.ro,R.rw].includes(e)))return[];if(e===B.sensor_transform){if(a.type===`virtual`||!r.unit||![`float`,`char`,`uchar`,`short`,`ushort`,`int`,`uint`].includes(r.dataType))return[]}else{let e=a,t=r;if(i.category!==z.temperature||r.category!==P.temperature||r.unit!==`°C`||r.dataType!==A.float||a.type===`virtual`&&(e.mode!==B.sensor_transform||t.valueOrigin!==O.derived||t.sourceProperty||r.permissions.some(e=>e!==R.ro)))return[]}return[{id:r.id,label:`${a.name} / ${i.name} / ${r.name??r.category}`,quantity:r.category,unit:r.unit??``}]})}function J(e,t,n,r,i,a,o){return{id:i,type:`virtual`,mode:e,name:t,category:I.sensor,channels:[{id:a,type:`virtual`,name:t,category:n?z.temperature:z.analog_input,properties:[{id:r,type:`virtual`,category:n?P.temperature:P.value,data_type:A.float,permissions:[R.ro],value_origin:O.derived,...o?{format:[o.minimum,o.maximum]}:{}}]}]}}function me(e,t,n,r,i){let a=J(B.sensor_aggregate,t,!0,n,r,i),o=a.channels[0];o.category=e.channel;let s=o.properties[0];return s.category=e.quantity,s.data_type=e.data_types[0],e.numeric_policy&&e.output_step!==null&&(s.step=e.output_step),a}function he(e,t,n,r,i){return e.map(e=>{let a=t.find(t=>t.id===e.device),o=n.find(t=>t.id===e.channel),s=r.find(t=>t.id===e.property);return{id:e.property,label:[a?.name,o?.name,s?.name??e.property].filter(Boolean).join(` / `),quantity:i.quantity,unit:i.unit??``}})}function ge(e){let t=`${e.operatorId}@${e.operatorVersion}`;return e.contractVersion===1?t:`${t} / contract ${e.contractVersion}`}var Y=F.magnus_water_17_62_243_12_v1;function X(e){let n=ie(),i={output:e??crypto.randomUUID(),device:crypto.randomUUID(),channel:crypto.randomUUID()},a=t({name:``,dryBulb:null,humidity:null,maximumAgeSeconds:60,maximumSkewSeconds:5}),o=f(null),s=f(null),c=f(!1),l=f(null),u=0,d,p=0,h=null,_=()=>JSON.stringify(y(a)),v=r(()=>!!s.value&&h===_()&&!c.value),b=()=>({schema_version:N.Value1,formula_version:Y,expected_revision:u,...d===void 0?{}:{expected_graph_revision:d},maximum_age_seconds:a.maximumAgeSeconds,maximum_skew_seconds:a.maximumSkewSeconds,sources:[{role:H.dry_bulb,source_property:a.dryBulb},{role:H.relative_humidity,source_property:a.humidity}]}),x=()=>({device:J(B.sensor_transform,a.name,!1,i.output,i.device,i.channel,{minimum:-45,maximum:60}),output_property:i.output,configuration:b()}),S=()=>(e||a.name.trim())&&(a.dryBulb||o.value?.sources.some(e=>e.role===`dry_bulb`&&e.source_property===null))&&(a.humidity||o.value?.sources.some(e=>e.role===`relative_humidity`&&e.source_property===null));async function C(){if(!e)return;let t=++p;c.value=!0,h=null,s.value=null;try{let r=await n.client.GET(`/plugins/devices-virtual/producers/dew-points/{id}`,{params:{path:{id:e}}});if(!r.data||r.error)throw Error(`dewPointReload`);if(t!==p)return;let i=r.data.data;o.value=i,u=i.revision,d=i.graph_revision,a.dryBulb=i.sources.find(e=>e.role===`dry_bulb`)?.source_property??null,a.humidity=i.sources.find(e=>e.role===`relative_humidity`)?.source_property??null,a.maximumAgeSeconds=i.maximum_age_seconds,a.maximumSkewSeconds=i.maximum_skew_seconds}catch{t===p&&(l.value=`reload`)}finally{t===p&&(c.value=!1)}}async function w(){if(!S()){l.value=`inputs`;return}let t=++p,r=_();c.value=!0,l.value=null,h=null;try{let i=e?await n.client.POST(`/plugins/devices-virtual/producers/dew-points/{id}/preview`,{params:{path:{id:e}},body:b()}):await n.client.POST(`/plugins/devices-virtual/producers/dew-points/draft-preview`,{body:x()});if(!i.data||i.error)throw Error(`dewPointPreview`);if(t!==p||r!==_())return;s.value=i.data.data,d=s.value.graph_revision,h=r}catch{t===p&&(l.value=`preview`)}finally{t===p&&(c.value=!1)}}async function T(){if(!v.value)return null;let t=++p;c.value=!0,l.value=null;try{if(e){let r=await n.client.PUT(`/plugins/devices-virtual/producers/dew-points/{id}`,{params:{path:{id:e}},body:b()});if(!r.data||r.error)throw Error(`revision`);return t===p&&(o.value=r.data.data,u=o.value.revision,d=o.value.graph_revision),null}let r=await n.client.POST(`/plugins/devices-virtual/producers/dew-points`,{body:x()});if(!r.data||r.error)throw Error(`revision`);return t===p?r.data.data.device.id:null}catch{return t===p&&(l.value=`revision`),null}finally{t===p&&(c.value=!1,h=null,s.value=null)}}return g(a,()=>{h=null,s.value=null},{deep:!0,flush:`sync`}),m(C),{model:a,current:o,preview:s,busy:c,error:l,canSave:v,reload:C,check:w,save:T}}var Z={key:0},_e={key:1,"data-test-id":`dew-point-diagnostics`},ve={key:2,"data-test-id":`dew-point-preview`},ye=i({__name:`virtual-dew-point-editor`,props:{outputId:{}},emits:[`created`,`busy`],setup(t,{emit:i}){let u=t,h=i,{t:y}=d(),{model:w,current:E,preview:D,busy:O,error:k,canSave:A,reload:te,check:j,save:ne}=X(u.outputId),M=f(Date.now()),re=f(performance.now()),N=0,P=null,ie=null,F;g(E,e=>{let t=Date.parse(e?.expires_at??``),n=JSON.stringify([e?.revision,e?.sources.map(e=>[e.source_identity,e.contract_fingerprint])]);e?.quality!==`good`||!Number.isFinite(t)?N=0:P===null||t>P?(P=t,ie=n,N=performance.now()+Math.max(0,t-Date.now())):(t<P||n!==ie)&&(N=0)},{flush:`sync`});let I=r(()=>E.value?.quality===`good`&&M.value<Date.parse(E.value.expires_at??``)&&re.value<N);m(()=>{F=setInterval(()=>{M.value=Date.now(),re.value=performance.now()},1e3)}),l(()=>{F&&clearInterval(F)});let L=V(),R=L.getStore(de),ae=L.getStore(ue),oe=L.getStore(fe),z=[{key:`dry_bulb`,field:`dryBulb`},{key:`relative_humidity`,field:`humidity`}];function B(e){let t=e===`dry_bulb`?`temperature`:`humidity`,n=e===`dry_bulb`?`°C`:`%`;return oe.findAll().flatMap(e=>{let r=ae.findById(e.channel),i=r&&R.findById(r.device);return!i||e.measurementQuantity!=null&&e.measurementQuantity!==t||r?.category!==t||e.category!==t||e.unit!==n||!e.permissions.some(e=>[`ro`,`rw`].includes(e))?[]:[{id:e.id,label:`${i.name} / ${r.name} / ${e.name??t}`}]})}async function se(){let e=await ne();e&&h(`created`,e)}return g(O,e=>h(`busy`,e),{immediate:!0}),m(async()=>{await R.fetch({hidden:ee.all}),await ae.fetch({}),await Promise.all(ae.findAll().map(e=>oe.fetch({channelId:e.id})))}),(r,i)=>(_(),s(c(le),{shadow:`never`,"data-test-id":`dew-point-editor`},{header:S(()=>[a(p(c(y)(`devicesVirtualPlugin.dewPoint.title`)),1)]),default:S(()=>[o(c(W),{title:c(y)(`devicesVirtualPlugin.dewPoint.boundary`),type:`info`,closable:!1},null,8,[`title`]),c(k)?(_(),s(c(W),{key:0,title:c(y)(`devicesVirtualPlugin.dewPoint.errors.${c(k)}`),type:`error`,closable:!1},null,8,[`title`])):b(``,!0),o(c(ce),{"label-position":`top`,disabled:c(O)},{default:S(()=>[t.outputId?b(``,!0):(_(),s(c(U),{key:0,label:c(y)(`devicesVirtualPlugin.measurement.name`)},{default:S(()=>[o(c(T),{modelValue:c(w).name,"onUpdate:modelValue":i[0]||=e=>c(w).name=e},null,8,[`modelValue`])]),_:1},8,[`label`])),(_(),e(C,null,x(z,t=>o(c(U),{key:t.key,label:c(y)(`devicesVirtualPlugin.dewPoint.${t.key}`)},{default:S(()=>[o(c(K),{modelValue:c(w)[t.field],"onUpdate:modelValue":e=>c(w)[t.field]=e,filterable:``},{default:S(()=>[(_(!0),e(C,null,x(B(t.key),e=>(_(),s(c(q),{key:e.id,value:e.id,label:e.label},null,8,[`value`,`label`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`]),c(E)?.sources.find(e=>e.role===t.key)?.source_property===null?(_(),e(`p`,Z,p(c(y)(`devicesVirtualPlugin.dewPoint.retained`))+`: `+p(c(E)?.sources.find(e=>e.role===t.key)?.source_identity),1)):b(``,!0)]),_:2},1032,[`label`])),64)),o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.maximumAge`)},{default:S(()=>[o(c(G),{modelValue:c(w).maximumAgeSeconds,"onUpdate:modelValue":i[1]||=e=>c(w).maximumAgeSeconds=e,min:1,max:86400},null,8,[`modelValue`])]),_:1},8,[`label`]),o(c(U),{label:c(y)(`devicesVirtualPlugin.dewPoint.skew`)},{default:S(()=>[o(c(G),{modelValue:c(w).maximumSkewSeconds,"onUpdate:modelValue":i[2]||=e=>c(w).maximumSkewSeconds=e,min:0,max:3600},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`disabled`]),c(E)?(_(),e(`p`,_e,p(c(E).quantity)+` · `+p(I.value?c(E).current_value:`—`)+` `+p(c(E).unit)+` · `+p(I.value?c(E).quality:`unavailable`)+` · `+p(c(E).errors.join(`, `)),1)):b(``,!0),(_(!0),e(C,null,x(c(E)?.sources??[],t=>(_(),e(`div`,{key:t.role},p(c(y)(`devicesVirtualPlugin.dewPoint.${t.role}`))+` · `+p(t.source_identity)+` · `+p(t.age_seconds??`—`)+` s · `+p(t.errors.join(`, `)),1))),128)),c(D)?(_(),e(`section`,ve,[n(`strong`,null,p(c(y)(`devicesVirtualPlugin.measurement.preview`)),1),n(`p`,null,p(c(D).quality)+` · `+p(c(D).errors.join(`, `)),1),(_(!0),e(C,null,x(c(D).sources,t=>(_(),e(`p`,{key:t.role},p(c(y)(`devicesVirtualPlugin.dewPoint.${t.role}`))+` · `+p(t.source_identity)+` · `+p(t.current_value??`—`)+` `+p(t.unit)+` · `+p(t.age_seconds??`—`)+` s · `+p(t.errors.join(`, `)),1))),128))])):b(``,!0),o(c(v),{disabled:c(O),onClick:c(te)},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.reload`)),1)]),_:1},8,[`disabled`,`onClick`]),o(c(v),{disabled:c(O),onClick:c(j)},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.preview`)),1)]),_:1},8,[`disabled`,`onClick`]),o(c(v),{disabled:!c(A),onClick:se},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.${t.outputId?`save`:`create`}`)),1)]),_:1},8,[`disabled`])]),_:1}))}}),be=class extends Error{status;constructor(e,t){super(e),this.status=t}};function xe(e,n){let i=ie(),a={device:crypto.randomUUID(),channel:crypto.randomUUID(),output:n??crypto.randomUUID()},o=t({name:``,profile:`temperature`,filterEnabled:!1,filterThreshold:void 0,temperature:!0,quantity:`temperature`,unit:`°C`,maximumAgeSeconds:60,operator:E.affine,extensionKey:``,parameters:{},aggregateOperator:ae.mean,minimumValidInputs:1,inputMinimum:void 0,inputMaximum:void 0,outputMinimum:void 0,outputMaximum:void 0,scale:void 0,offset:void 0,points:[],referenceVoltage:void 0,seriesResistance:void 0,nominalResistance:void 0,nominalTemperatureCelsius:void 0,beta:void 0,coefficientA:void 0,coefficientB:void 0,coefficientC:void 0,thermistorLeg:void 0,previewInput:void 0,inputs:[]}),s=f([]),c=!1,l=r(()=>s.value.find(e=>`${e.operatorId}@${e.operatorVersion}`===o.extensionKey)),d=()=>{let e=l.value;e&&(c=!0,o.parameters={},o.inputMinimum=e.inputRange.minimum,o.inputMaximum=e.inputRange.maximum,o.outputMinimum=e.outputRange.minimum,o.outputMaximum=e.outputRange.maximum,n||(o.temperature=e.output.quantity===`temperature`,o.quantity=e.output.quantity,o.unit=e.output.unit))},p=f([]),m=f([]),_=f(!1),v=f(null),y=r(()=>p.value.find(e=>e.profile===o.profile)),b=r(()=>y.value?.numeric_policy===!0),x=0,S=async()=>{F();let e=++x;m.value=[],_.value=!0,v.value=null;try{let t=await i.client.GET(`/plugins/devices-virtual/producers/aggregate-profiles/{profile}/sources`,{params:{path:{profile:M[o.profile]}}}),n=K(t.data,t.error,t.response?.status);e===x&&(m.value=n)}catch{e===x&&(v.value=`measurementCatalog`)}finally{e===x&&(_.value=!1)}},C=async()=>{if(z){try{let e=await i.client.GET(`/plugins/devices-virtual/producers/numeric-operators`);s.value=K(e.data,e.error,e.response?.status)}catch{s.value=[]}return}let e=await i.client.GET(`/plugins/devices-virtual/producers/aggregate-profiles`);p.value=K(e.data,e.error,e.response?.status),await S()},T=f(!1),ee=f(null),O=f(!1),k=f(null),A=f(null),te=0,N=f(!1),P,F=()=>{te++,clearTimeout(P),A.value=null,N.value=!1};h()&&u(()=>{F(),x++}),g(A,e=>{if(clearTimeout(P),!e||!(`inputs`in e)||!e.preview_result?.expires_at)return;let t=Date.parse(e.preview_result.expires_at)-Date.now(),n=()=>{F(),N.value=!0};t>0?P=setTimeout(n,t):n()},{flush:`sync`});let I=r(()=>!!A.value&&(z||`inputs`in A.value&&!!A.value.preview_result&&!A.value.preview_result.reasons.includes(`preview_revoked`))),L=f(0),R=f(),z=e===B.sensor_transform,V=e=>{if(typeof e!=`number`||!Number.isFinite(e))throw Error(`measurementFinite`);return e},H=()=>typeof o.filterThreshold==`number`&&Number.isFinite(o.filterThreshold)&&o.filterThreshold>0,U=()=>{if(!H())throw Error(`measurementFinite`);return V(o.filterThreshold)},ce=()=>{if(o.operator===`extension`){let e=l.value;if(!e)throw Error(`measurementOperatorMissing`);if(Object.keys(o.parameters).some(t=>!Object.prototype.hasOwnProperty.call(e.parameters,t)))throw Error(`measurementOperatorParameter`);let t={};for(let[n,r]of Object.entries(e.parameters)){let e=o.parameters[n];if(e===void 0&&!r.required)continue;let i=V(e);if(i<r.minimum||i>r.maximum)throw Error(`measurementOperatorParameter`);t[n]=i}return{...!c&&k.value&&`policy`in k.value&&k.value.policy.operator===`extension`?k.value.policy:{},operator:j.extension,contractVersion:1,operatorId:e.operatorId,operatorVersion:e.operatorVersion,parameters:t,inputRange:{minimum:V(o.inputMinimum),maximum:V(o.inputMaximum)},outputRange:{minimum:V(o.outputMinimum),maximum:V(o.outputMaximum)}}}let e={operator:o.operator,inputRange:{minimum:V(o.inputMinimum),maximum:V(o.inputMaximum)},outputRange:{minimum:V(o.outputMinimum),maximum:V(o.outputMaximum)}};if(o.operator===E.affine)Object.assign(e,{scale:V(o.scale),offset:V(o.offset)});else if(o.operator===E.piecewise_linear)e.points=o.points.map(({x:e,y:t})=>({x:V(e),y:V(t)}));else if(o.operator===E.ntc_beta){if(!o.thermistorLeg)throw Error(`measurementDivider`);Object.assign(e,{referenceVoltage:V(o.referenceVoltage),seriesResistance:V(o.seriesResistance),nominalResistance:V(o.nominalResistance),nominalTemperatureCelsius:V(o.nominalTemperatureCelsius),beta:V(o.beta),thermistorLeg:o.thermistorLeg})}else{if(!o.thermistorLeg)throw Error(`measurementDivider`);Object.assign(e,{referenceVoltage:V(o.referenceVoltage),seriesResistance:V(o.seriesResistance),coefficientA:V(o.coefficientA),coefficientB:V(o.coefficientB),coefficientC:V(o.coefficientC),thermistorLeg:o.thermistorLeg})}let t={[E.affine]:ne.affine,[E.piecewise_linear]:w.piecewise_linear,[E.ntc_beta]:se.ntc_beta,[E.steinhart_hart]:D.steinhart_hart};return{...e,operator:t[o.operator]}},W=()=>z?{schema_version:1,expected_revision:L.value,expected_graph_revision:R.value,maximum_age_seconds:o.maximumAgeSeconds,quantity:o.temperature?`temperature`:o.quantity,unit:o.temperature?`°C`:o.unit,source:{id:o.inputs[0]?.id,source_property:o.inputs[0]?.source_property??null},policy:ce()}:{expected_revision:L.value,expected_graph_revision:R.value,operator:o.aggregateOperator,minimum_valid_inputs:o.minimumValidInputs,maximum_age_seconds:o.maximumAgeSeconds,inputs:o.inputs.map(({id:e,source_property:t,weight:n})=>({id:e,source_property:t,...b.value?{weight:n??1}:{}})),...b.value?{outlier_filter:o.filterEnabled?{kind:re.absolute_deviation_from_median,threshold:U()}:null}:{}},G=async e=>{if(!T.value){T.value=!0,ee.value=null,O.value=!1;try{return await e()}catch(e){let t=e instanceof Error?e.message:`measurementFailed`;ee.value=t,O.value=t.toLowerCase().includes(`revision`)||e instanceof be&&e.status===409}finally{T.value=!1}}},K=(e,t,n)=>{if(e)return e.data;throw new be(oe(t,`measurementFailed`),n)},q=async()=>(F(),G(async()=>{if(k.value=null,c=!1,L.value=0,R.value=void 0,!n)return;let e;if(z){let t=await i.client.GET(`/plugins/devices-virtual/producers/transforms/{id}`,{params:{path:{id:n}}});if(t.response?.status===404)return;e=K(t.data,t.error,t.response?.status)}else{let t=await i.client.GET(`/plugins/devices-virtual/producers/aggregates/{id}`,{params:{path:{id:n}}});if(t.response?.status===404)return;e=K(t.data,t.error,t.response?.status)}if(k.value=e,L.value=e.revision,R.value=e.graph_revision,o.maximumAgeSeconds=e.maximum_age_seconds,`policy`in e){o.temperature=e.quantity===`temperature`,o.quantity=e.quantity,o.unit=e.unit,o.inputs=[{id:e.source.id,source_property:e.source.source_property,identity:e.source.source_identity}],o.operator=e.policy.operator,e.policy.operator===`extension`&&(o.extensionKey=ge(e.policy),o.parameters={...e.policy.parameters}),o.inputMinimum=e.policy.inputRange.minimum,o.inputMaximum=e.policy.inputRange.maximum,o.outputMinimum=e.policy.outputRange.minimum,o.outputMaximum=e.policy.outputRange.maximum;for(let t of[`scale`,`offset`,`referenceVoltage`,`seriesResistance`,`nominalResistance`,`nominalTemperatureCelsius`,`beta`,`coefficientA`,`coefficientB`,`coefficientC`,`thermistorLeg`])Object.assign(o,{[t]:e.policy[t]});o.points=e.policy.points?.map(e=>({...e}))??[]}else o.profile=e.profile??`temperature`,o.filterEnabled=!!e.outlier_filter,o.filterThreshold=e.outlier_filter?.threshold,o.aggregateOperator=e.operator,o.minimumValidInputs=e.minimum_valid_inputs,o.inputs=e.inputs.map(e=>({id:e.id,source_property:e.source_property,identity:e.source_identity,...e.weight===void 0?{}:{weight:e.weight}}));A.value=null})),le=()=>({device:z?J(e,o.name,!z||o.temperature,a.output,a.device,a.channel,z?ce().outputRange:void 0):me(y.value??(()=>{throw Error(`measurementCatalog`)})(),o.name,a.output,a.device,a.channel),output_property:a.output}),ue=async()=>{F();let e=te;return G(async()=>{let t;if(z){let e=W(),r=n?await i.client.POST(`/plugins/devices-virtual/producers/transforms/{id}/preview`,{params:{path:{id:n}},body:{...e,preview_input:o.previewInput}}):await i.client.POST(`/plugins/devices-virtual/producers/transforms/draft-preview`,{body:{...le(),configuration:e,preview_input:o.previewInput}});t=K(r.data,r.error,r.response?.status)}else{let e=W(),r=n?await i.client.POST(`/plugins/devices-virtual/producers/aggregates/{id}/preview`,{params:{path:{id:n}},body:e}):await i.client.POST(`/plugins/devices-virtual/producers/aggregates/draft-preview`,{body:{...le(),configuration:e}});t=K(r.data,r.error,r.response?.status)}e===te&&(A.value=t,R.value=t.graph_revision)})},de=async()=>G(async()=>{let e;if(z){let t=W();if(n){let e=await i.client.PUT(`/plugins/devices-virtual/producers/transforms/{id}`,{params:{path:{id:n}},body:t});k.value=K(e.data,e.error,e.response?.status)}else{let n=await i.client.POST(`/plugins/devices-virtual/producers/transforms`,{body:{...le(),configuration:t}}),r=K(n.data,n.error,n.response?.status);k.value=r.configuration,e=r.device.id}}else{let t=W();if(n){let e=await i.client.PUT(`/plugins/devices-virtual/producers/aggregates/{id}`,{params:{path:{id:n}},body:t});k.value=K(e.data,e.error,e.response?.status)}else{let n=await i.client.POST(`/plugins/devices-virtual/producers/aggregates`,{body:{...le(),configuration:t}}),r=K(n.data,n.error,n.response?.status);k.value=r.configuration,e=r.device.id}}return`inputs`in k.value&&(o.inputs=k.value.inputs.map(e=>({id:e.id,source_property:e.source_property,identity:e.source_identity,...e.weight===void 0?{}:{weight:e.weight}}))),L.value=k.value.revision,R.value=k.value.graph_revision,A.value=null,e}),fe=r(()=>(z?o.inputs.length===1&&(o.operator!==`extension`||!!l.value):o.inputs.length>=2&&o.minimumValidInputs<=o.inputs.length)&&o.inputs.every(e=>e.source_property!==null||!!e.id)&&(z||!b.value||!o.filterEnabled||H()));return g(()=>o.profile,(e,t)=>{if(A.value=null,z||e===t)return;let r=y.value;n||(o.inputs=[],o.filterEnabled=!1,o.filterThreshold=void 0,r&&(o.aggregateOperator=r.operators[0])),p.value.length>0&&S()},{flush:`sync`}),g(o,()=>{F()},{deep:!0,flush:`sync`}),{numericOperators:s,selectedOperator:l,selectOperator:d,invalidatePreview:F,previewExpired:N,canSavePreview:I,profiles:p,sources:m,sourcesLoading:_,sourcesError:v,selectedProfile:y,numericPolicy:b,loadCapabilities:C,loadSources:S,model:o,busy:T,error:ee,conflict:O,current:k,preview:A,isTransform:z,canPreview:fe,load:q,previewDraft:ue,save:de}}var Se={key:3,"data-test-id":`measurement-reasons`},Ce={key:0,"data-test-id":`aggregate-grid`},we={key:3,class:`grid grid-cols-2 gap-3`},Te={class:`w-full space-y-2`},Ee={class:`grid grid-cols-2 gap-3`},De={"data-test-id":`numeric-operator-domains`},Oe={key:1,class:`grid grid-cols-2 gap-3`},ke={key:2,class:`mb-3`},Ae={class:`grid grid-cols-2 gap-3`},je={key:4,class:`mb-3`,"data-test-id":`measurement-preview`},Me={"data-test-id":`aggregate-preview-result`},Ne={"data-test-id":`aggregate-preview-quality`},Pe={key:5,class:`mb-3`},Fe={key:6,class:`mb-3`},Ie=i({__name:`virtual-numeric-measurement-editor`,props:{mode:{},outputId:{},temperature:{type:Boolean}},emits:[`created`,`busy`],setup(t,{emit:i}){let u=t,h=i,{t:y,te:w}=d(),D=V(),O=D.getStore(de),A=D.getStore(ue),j=D.getStore(fe),{numericOperators:ne,selectedOperator:M,selectOperator:re,profiles:N,invalidatePreview:P,previewExpired:ie,canSavePreview:F,selectedProfile:I,numericPolicy:R,sources:oe,sourcesLoading:z,sourcesError:B,loadCapabilities:se,model:H,busy:J,error:me,conflict:ge,current:Y,preview:X,isTransform:Z,canPreview:_e,load:ve,previewDraft:ye,save:be}=xe(u.mode,u.outputId);g(J,e=>h(`busy`,e),{immediate:!0}),H.temperature=u.temperature??!0,Z&&(H.inputs=[{source_property:null}]);let Ie=f(!1),Q=f(null),Le=r(()=>Z?pe(u.mode,O.findAll(),A.findAll(),j.findAll()).filter(e=>H.operator!==`extension`||!M.value||e.quantity===M.value.input.quantity&&e.unit===M.value.input.unit):I.value?he(oe.value,O.findAll(),A.findAll(),j.findAll(),I.value):[]),$=r(()=>X.value&&`inputs`in X.value?X.value.preview_result:null),Re=(e,t)=>{if(e==null)return`—`;if(typeof e==`boolean`)return y(`devicesVirtualPlugin.measurement.${e?`detected`:`notDetected`}`);if(!(t&&t>0))return String(e);let[n,r]=String(t).split(`e`),i=Math.max(0,(n.split(`.`)[1]??``).length-Number(r??0));return i>20?String(e):new Intl.NumberFormat(void 0,{minimumFractionDigits:i,maximumFractionDigits:i}).format(e)};g(()=>H.inputs.map(e=>{let t=j.findAll().find(t=>t.id===e.source_property),n=A.findAll().find(e=>e.id===t?.channel);return{property:t,channel:n,device:O.findAll().find(e=>e.id===n?.device)}}),P,{deep:!0,flush:`sync`}),g(()=>j.findAll().find(e=>e.id===u.outputId)?.value?.producer?.revision,P,{flush:`sync`});let ze=r(()=>Y.value&&`output_step`in Y.value?Y.value.output_step:I.value?.output_step??null),Be=f(Date.now()),Ve;l(()=>clearInterval(Ve));let He=r(()=>j.findAll().find(e=>e.id===u.outputId)?.value?.producer),Ue=r(()=>[...He.value?.reasons??[],...He.value?.expiresAt&&Date.parse(He.value.expiresAt)<=Be.value?[`stale`]:[]]),We=r(()=>{let e=He.value;return e&&e.quality!==`unavailable`&&e.sampledAt&&e.expiresAt&&Date.parse(e.sampledAt)<=Be.value&&Date.parse(e.evaluatedAt)>=Date.parse(e.sampledAt)&&Date.parse(e.evaluatedAt)<=Be.value&&Date.parse(e.expiresAt)>Be.value?e.quality:`unavailable`}),Ge=e=>Le.value.filter(t=>!H.inputs.some((n,r)=>r!==e&&n.source_property===t.id)),Ke=r(()=>H.temperature&&Le.value.some(e=>e.id===H.inputs[0]?.source_property&&e.quantity===`voltage`&&e.unit===`V`)),qe={low:`low`,high:`high`},Je=[`inputMinimum`,`inputMaximum`,`outputMinimum`,`outputMaximum`],Ye=[`scale`,`offset`],Xe=[`referenceVoltage`,`seriesResistance`,`nominalResistance`,`nominalTemperatureCelsius`,`beta`],Ze=[`referenceVoltage`,`seriesResistance`,`coefficientA`,`coefficientB`,`coefficientC`],Qe=Object.values(E),$e=r(()=>I.value?.operators??[]),et=e=>e?.startsWith(`measurement`)?y(`devicesVirtualPlugin.measurement.${e}`):e??``,tt=e=>{if(!e)return`—`;let[t,n]=e.split(`:`,2),r=`devicesVirtualPlugin.measurement.states.${t}`;return w(r)?`${y(r)}${n?` · ${n}`:``}`:`${y(`devicesVirtualPlugin.measurement.states.unknown`)} (${e})`},nt=async()=>{Ie.value=!0,Q.value=null;try{await O.fetch({hidden:ee.all}),await A.fetch({}),await Promise.all([...new Set(A.findAll().map(e=>e.id))].map(e=>j.fetch({channelId:e}))),await ve(),await se()}catch{Q.value=`measurementCatalog`}finally{Ie.value=!1}},rt=async()=>{let e=await be();e&&h(`created`,e)};return m(()=>{nt(),Ve=setInterval(()=>{Be.value=Date.now()},1e3)}),(r,i)=>(_(),s(c(le),{shadow:`never`,"data-test-id":`measurement-editor`},{header:S(()=>[n(`strong`,null,p(c(y)(`devicesVirtualPlugin.measurement.${c(Z)?`transform`:`aggregate`}`)),1)]),default:S(()=>[c(me)||Q.value?(_(),s(c(W),{key:0,title:et(c(me)??Q.value),type:`error`,closable:!1,class:`mb-3`},null,8,[`title`])):b(``,!0),c(ge)||Q.value?(_(),s(c(v),{key:1,disabled:c(J),onClick:nt},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.reload`)),1)]),_:1},8,[`disabled`])):b(``,!0),c(Y)?(_(),s(c(W),{key:2,title:c(y)(`devicesVirtualPlugin.measurement.quality`,{quality:tt(We.value)}),type:`info`,closable:!1,class:`mb-3`},null,8,[`title`])):b(``,!0),c(Y)&&Ue.value.length?(_(),e(`p`,Se,p(Ue.value.map(tt).join(`, `)),1)):b(``,!0),o(c(ce),{"label-position":`top`,disabled:c(J)||Ie.value},{default:S(()=>[t.outputId?b(``,!0):(_(),s(c(U),{key:0,label:c(y)(`devicesVirtualPlugin.measurement.name`)},{default:S(()=>[o(c(T),{modelValue:c(H).name,"onUpdate:modelValue":i[0]||=e=>c(H).name=e},null,8,[`modelValue`])]),_:1},8,[`label`])),c(Z)?(_(),s(c(U),{key:1,label:c(y)(`devicesVirtualPlugin.measurement.profile`)},{default:S(()=>[o(c(K),{modelValue:c(H).temperature,"onUpdate:modelValue":i[1]||=e=>c(H).temperature=e,disabled:!!t.outputId},{default:S(()=>[o(c(q),{value:!0,label:c(y)(`devicesVirtualPlugin.measurement.temperature`)},null,8,[`label`]),o(c(q),{value:!1,label:c(y)(`devicesVirtualPlugin.measurement.generic`)},null,8,[`label`])]),_:1},8,[`modelValue`,`disabled`])]),_:1},8,[`label`])):b(``,!0),c(Z)?b(``,!0):(_(),e(C,{key:2},[o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.profile`)},{default:S(()=>[o(c(K),{modelValue:c(H).profile,"onUpdate:modelValue":i[2]||=e=>c(H).profile=e,disabled:!!t.outputId,"data-test-id":`aggregate-profile`},{default:S(()=>[(_(!0),e(C,null,x(c(N),e=>(_(),s(c(q),{key:e.profile,value:e.profile,label:c(y)(`devicesVirtualPlugin.measurement.profiles.${e.profile}`)},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),c(I)?.numeric_policy?(_(),e(`p`,Ce,p(c(y)(`devicesVirtualPlugin.measurement.unit`))+`: `+p(c(I).unit)+` · `+p(ze.value===null?c(y)(`devicesVirtualPlugin.measurement.legacyGrid`):c(y)(`devicesVirtualPlugin.measurement.grid`,{step:ze.value,unit:c(I).unit})),1)):b(``,!0),c(B)?(_(),s(c(W),{key:1,title:et(c(B)),type:`error`,closable:!1},null,8,[`title`])):b(``,!0)],64)),c(Z)&&!c(H).temperature?(_(),e(`div`,we,[o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.quantity`)},{default:S(()=>[o(c(T),{modelValue:c(H).quantity,"onUpdate:modelValue":i[3]||=e=>c(H).quantity=e,disabled:c(Y)!==null},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.unit`)},{default:S(()=>[o(c(T),{modelValue:c(H).unit,"onUpdate:modelValue":i[4]||=e=>c(H).unit=e,disabled:c(Y)!==null,maxlength:32},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`])])):b(``,!0),o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.inputs`)},{default:S(()=>[n(`div`,Te,[(_(!0),e(C,null,x(c(H).inputs,(t,n)=>(_(),e(`div`,{key:t.id??n,class:`flex gap-2 items-center`},[o(c(K),{modelValue:t.source_property,"onUpdate:modelValue":e=>t.source_property=e,filterable:``,class:`grow-1`,loading:c(z),disabled:!c(Z)&&(c(z)||!!c(B)),placeholder:c(y)(`devicesVirtualPlugin.measurement.selectSource`)},{default:S(()=>[t.source_property&&!Le.value.some(e=>e.id===t.source_property)?(_(),s(c(q),{key:0,value:t.source_property,disabled:``,label:c(y)(`devicesVirtualPlugin.measurement.missing`,{id:t.identity??t.source_property})},null,8,[`value`,`label`])):b(``,!0),t.source_property===null?(_(),s(c(q),{key:1,value:``,disabled:``,label:c(y)(`devicesVirtualPlugin.measurement.missing`,{id:t.identity})},null,8,[`label`])):b(``,!0),(_(!0),e(C,null,x(Ge(n),e=>(_(),s(c(q),{key:e.id,value:e.id,label:`${e.label} (${e.unit})`},null,8,[`value`,`label`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`loading`,`disabled`,`placeholder`]),t.identity?(_(),s(c(te),{key:0,type:t.source_property===null?`warning`:`info`},{default:S(()=>[a(p(t.source_property===null?c(y)(`devicesVirtualPlugin.measurement.missing`,{id:t.identity}):t.identity),1)]),_:2},1032,[`type`])):b(``,!0),!c(Z)&&c(R)&&c(H).aggregateOperator===c(ae).weighted_mean?(_(),s(c(U),{key:1,label:c(y)(`devicesVirtualPlugin.measurement.weight`),class:`mb-0`},{default:S(()=>[o(c(G),{modelValue:t.weight,"onUpdate:modelValue":e=>t.weight=e,min:1e-6,max:1e6,precision:6,"data-test-id":`aggregate-weight`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`label`])):b(``,!0),c(Z)?b(``,!0):(_(),s(c(v),{key:2,onClick:e=>c(H).inputs.splice(n,1)},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.remove`)),1)]),_:1},8,[`onClick`]))]))),128)),c(Z)?b(``,!0):(_(),s(c(v),{key:0,onClick:i[5]||=e=>c(H).inputs.push({source_property:null,weight:1})},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.addInput`)),1)]),_:1}))])]),_:1},8,[`label`]),o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.operator`)},{default:S(()=>[c(Z)?(_(),s(c(K),{key:0,modelValue:c(H).operator,"onUpdate:modelValue":i[6]||=e=>c(H).operator=e},{default:S(()=>[o(c(q),{value:`extension`,label:c(y)(`devicesVirtualPlugin.measurement.extensionOperator`)},null,8,[`label`]),(_(!0),e(C,null,x(c(Qe),e=>(_(),s(c(q),{key:e,value:e,label:c(y)(`devicesVirtualPlugin.measurement.operators.${e}`),disabled:[c(E).ntc_beta,c(E).steinhart_hart].includes(e)&&!Ke.value},null,8,[`value`,`label`,`disabled`]))),128))]),_:1},8,[`modelValue`])):(_(),s(c(K),{key:1,modelValue:c(H).aggregateOperator,"onUpdate:modelValue":i[7]||=e=>c(H).aggregateOperator=e},{default:S(()=>[(_(!0),e(C,null,x($e.value,e=>(_(),s(c(q),{key:e,value:e,label:c(y)(`devicesVirtualPlugin.measurement.operators.${e}`)},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`]))]),_:1},8,[`label`]),c(Z)?(_(),s(c(W),{key:4,title:c(y)(`devicesVirtualPlugin.measurement.nativeCelsius`),type:`info`,closable:!1,class:`mb-3`},null,8,[`title`])):b(``,!0),c(Z)?b(``,!0):(_(),s(c(U),{key:5,label:c(y)(`devicesVirtualPlugin.measurement.quorum`)},{default:S(()=>[o(c(G),{modelValue:c(H).minimumValidInputs,"onUpdate:modelValue":i[8]||=e=>c(H).minimumValidInputs=e,min:1,max:c(H).inputs.length||1,precision:0},null,8,[`modelValue`,`max`])]),_:1},8,[`label`])),!c(Z)&&c(R)?(_(),e(C,{key:6},[o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.filter`)},{default:S(()=>[o(c(L),{modelValue:c(H).filterEnabled,"onUpdate:modelValue":i[9]||=e=>c(H).filterEnabled=e,"data-test-id":`aggregate-filter`},null,8,[`modelValue`])]),_:1},8,[`label`]),c(H).filterEnabled?(_(),s(c(U),{key:0,label:c(y)(`devicesVirtualPlugin.measurement.filterThreshold`,{unit:c(I)?.unit})},{default:S(()=>[o(c(G),{modelValue:c(H).filterThreshold,"onUpdate:modelValue":i[10]||=e=>c(H).filterThreshold=e,min:1e-6,"data-test-id":`aggregate-filter-threshold`},null,8,[`modelValue`]),o(c(k),null,{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.filterCohort`)),1)]),_:1})]),_:1},8,[`label`])):b(``,!0)],64)):b(``,!0),o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.maximumAge`)},{default:S(()=>[o(c(G),{modelValue:c(H).maximumAgeSeconds,"onUpdate:modelValue":i[11]||=e=>c(H).maximumAgeSeconds=e,min:1,max:86400,precision:0},null,8,[`modelValue`])]),_:1},8,[`label`]),c(Z)?(_(),e(C,{key:7},[n(`div`,Ee,[(_(),e(C,null,x(Je,e=>o(c(U),{key:e,label:c(y)(`devicesVirtualPlugin.measurement.${e}`)},{default:S(()=>[o(c(G),{modelValue:c(H)[e],"onUpdate:modelValue":t=>c(H)[e]=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`label`])),64))]),c(H).operator===`extension`?(_(),e(C,{key:0},[o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.extensionOperator`)},{default:S(()=>[o(c(K),{modelValue:c(H).extensionKey,"onUpdate:modelValue":i[12]||=e=>c(H).extensionKey=e,"data-test-id":`numeric-operator`,onChange:c(re)},{default:S(()=>[c(H).extensionKey&&!c(M)?(_(),s(c(q),{key:0,value:c(H).extensionKey,label:c(H).extensionKey,disabled:``},null,8,[`value`,`label`])):b(``,!0),(_(!0),e(C,null,x(c(ne),e=>(_(),s(c(q),{key:`${e.operatorId}@${e.operatorVersion}`,value:`${e.operatorId}@${e.operatorVersion}`,label:`${e.operatorId} · v${e.operatorVersion}`},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`,`onChange`])]),_:1},8,[`label`]),c(M)?(_(),e(C,{key:1},[o(c(v),{"data-test-id":`numeric-operator-reset`,onClick:c(re)},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.resetOperatorDefinition`)),1)]),_:1},8,[`onClick`]),n(`p`,De,p(c(M).input.quantity)+` (`+p(c(M).input.unit)+`) [`+p(c(M).inputRange.minimum)+`, `+p(c(M).inputRange.maximum)+`] → `+p(c(M).output.quantity)+` (`+p(c(M).output.unit)+`) [`+p(c(M).outputRange.minimum)+`, `+p(c(M).outputRange.maximum)+`] `,1),(_(!0),e(C,null,x(c(M).parameters,(e,t)=>(_(),s(c(U),{key:t,label:String(t),required:e.required},{default:S(()=>[o(c(G),{modelValue:c(H).parameters[t],"onUpdate:modelValue":e=>c(H).parameters[t]=e,min:e.minimum,max:e.maximum,"data-test-id":`numeric-parameter-${t}`},null,8,[`modelValue`,`onUpdate:modelValue`,`min`,`max`,`data-test-id`])]),_:2},1032,[`label`,`required`]))),128))],64)):(_(),s(c(W),{key:0,title:c(y)(`devicesVirtualPlugin.measurement.measurementOperatorMissing`),type:`warning`,closable:!1},null,8,[`title`]))],64)):b(``,!0),c(H).operator===c(E).affine?(_(),e(`div`,Oe,[(_(),e(C,null,x(Ye,e=>o(c(U),{key:e,label:c(y)(`devicesVirtualPlugin.measurement.${e}`)},{default:S(()=>[o(c(G),{modelValue:c(H)[e],"onUpdate:modelValue":t=>c(H)[e]=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`label`])),64))])):b(``,!0),c(H).operator===c(E).piecewise_linear?(_(),e(`div`,ke,[(_(!0),e(C,null,x(c(H).points,(t,n)=>(_(),e(`div`,{key:n,class:`flex gap-2 mb-2`},[o(c(G),{modelValue:t.x,"onUpdate:modelValue":e=>t.x=e,"aria-label":`X`},null,8,[`modelValue`,`onUpdate:modelValue`]),o(c(G),{modelValue:t.y,"onUpdate:modelValue":e=>t.y=e,"aria-label":`Y`},null,8,[`modelValue`,`onUpdate:modelValue`]),o(c(v),{onClick:e=>c(H).points.splice(n,1)},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.remove`)),1)]),_:1},8,[`onClick`])]))),128)),o(c(v),{onClick:i[13]||=e=>c(H).points.push({x:0,y:0})},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.addPoint`)),1)]),_:1})])):b(``,!0),c(H).operator===c(E).ntc_beta||c(H).operator===c(E).steinhart_hart?(_(),e(C,{key:3},[n(`div`,Ae,[(_(!0),e(C,null,x(c(H).operator===c(E).ntc_beta?Xe:Ze,e=>(_(),s(c(U),{key:e,label:c(y)(`devicesVirtualPlugin.measurement.${e}`)},{default:S(()=>[o(c(G),{modelValue:c(H)[e],"onUpdate:modelValue":t=>c(H)[e]=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`label`]))),128))]),o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.divider`)},{default:S(()=>[o(c(K),{modelValue:c(H).thermistorLeg,"onUpdate:modelValue":i[14]||=e=>c(H).thermistorLeg=e},{default:S(()=>[o(c(q),{value:qe.low,label:c(y)(`devicesVirtualPlugin.measurement.low`)},null,8,[`value`,`label`]),o(c(q),{value:qe.high,label:c(y)(`devicesVirtualPlugin.measurement.high`)},null,8,[`value`,`label`])]),_:1},8,[`modelValue`])]),_:1},8,[`label`])],64)):b(``,!0),o(c(U),{label:c(y)(`devicesVirtualPlugin.measurement.sample`)},{default:S(()=>[o(c(G),{modelValue:c(H).previewInput,"onUpdate:modelValue":i[15]||=e=>c(H).previewInput=e},null,8,[`modelValue`])]),_:1},8,[`label`])],64)):b(``,!0)]),_:1},8,[`disabled`]),c(X)?(_(),e(`div`,je,[o(c(W),{title:c(y)(`devicesVirtualPlugin.measurement.${c(Z)?`previewOnly`:`aggregatePreviewOnly`}`),type:`info`,closable:!1},null,8,[`title`]),`preview_result`in c(X)&&c(X).preview_result&&`input`in c(X).preview_result?(_(),e(C,{key:0},[n(`p`,null,p(c(X).preview_result.input)+` → `+p(c(X).preview_result.value??`—`)+` `+p(`unit`in c(X)?c(X).unit:``),1),o(c(k),{type:`danger`},{default:S(()=>[a(p(tt(c(X).preview_result.error)),1)]),_:1})],64)):b(``,!0),$.value?(_(),e(C,{key:1},[n(`p`,null,p(c(y)(`devicesVirtualPlugin.measurement.profiles.${$.value.profile}`)),1),n(`p`,Me,p(Re($.value.value,$.value.output_step))+` `+p($.value.unit),1),n(`p`,Ne,p(c(y)(`devicesVirtualPlugin.measurement.snapshotQuality`,{quality:tt($.value.quality)})),1),n(`p`,null,p($.value.reasons.map(tt).join(`, `)),1),n(`p`,null,p(c(y)(`devicesVirtualPlugin.measurement.evaluatedAt`,{time:$.value.evaluated_at})),1),n(`p`,null,p(c(y)(`devicesVirtualPlugin.measurement.expiresAt`,{time:$.value.expires_at??`—`})),1),(_(!0),e(C,null,x($.value.inputs,t=>(_(),e(`div`,{key:t.id},[n(`code`,null,p(t.source_identity),1),a(` · `+p(Re(t.current_value))+` `+p(t.unit)+` · `+p(tt(t.exclusion))+` · `+p(c(y)(`devicesVirtualPlugin.measurement.sampleAge`,{age:t.age_seconds??`—`})),1)]))),128))],64)):b(``,!0)])):b(``,!0),c(Y)&&`source`in c(Y)?(_(),e(`div`,Pe,[n(`p`,null,p(c(Y).source.current_value??`—`)+` `+p(c(Y).source.unit)+` → `+p(c(Y).current_value??`—`)+` `+p(c(Y).unit),1),o(c(k),{type:`warning`},{default:S(()=>[a(p(c(Y).errors.map(tt).join(`, `)),1)]),_:1})])):b(``,!0),c(Y)&&`inputs`in c(Y)?(_(),e(`div`,Fe,[(_(!0),e(C,null,x(c(Y).inputs,t=>(_(),e(`div`,{key:t.id},[n(`code`,null,p(t.source_identity),1),a(` · `+p(tt(t.exclusion))+` · `+p(c(y)(`devicesVirtualPlugin.measurement.sampleAge`,{age:t.age_seconds??`—`})),1)]))),128))])):b(``,!0),o(c(v),{loading:c(J),disabled:!c(_e)||Ie.value||!!Q.value||!c(Z)&&(!c(I)||c(z)||!!c(B))||!t.outputId&&!c(H).name.trim(),onClick:c(ye)},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.preview`)),1)]),_:1},8,[`loading`,`disabled`,`onClick`]),c(ie)?(_(),s(c(W),{key:7,title:c(y)(`devicesVirtualPlugin.measurement.previewExpired`),type:`warning`,closable:!1},null,8,[`title`])):b(``,!0),o(c(v),{type:`primary`,loading:c(J),disabled:!c(F)||Ie.value||!!Q.value,onClick:rt},{default:S(()=>[a(p(c(y)(`devicesVirtualPlugin.measurement.${t.outputId?`save`:`create`}`)),1)]),_:1},8,[`loading`,`disabled`])]),_:1}))}}),Q=i({__name:`virtual-measurement-editor`,props:{mode:{},outputId:{},temperature:{type:Boolean}},emits:[`created`,`busy`],setup(t,{emit:n}){let r=t,i=n,{t:a}=d(),l=V().getStore(fe),u=f(`numeric`),p=f(!1);g(()=>r.outputId&&r.mode===`sensor_transform`?l.findById(r.outputId)?.measurementQuantity:null,e=>{r.outputId&&(u.value=e===`dew_point`?`dew_point`:`numeric`)},{immediate:!0});function m(e){p.value=e,i(`busy`,e)}return(n,r)=>(_(),e(C,null,[t.mode===`sensor_transform`&&!t.outputId?(_(),s(c(K),{key:0,modelValue:u.value,"onUpdate:modelValue":r[0]||=e=>u.value=e,disabled:p.value,class:`mb-3`,"data-test-id":`measurement-kind`},{default:S(()=>[o(c(q),{value:`numeric`,label:c(a)(`devicesVirtualPlugin.measurement.transform`)},null,8,[`label`]),o(c(q),{value:`dew_point`,label:c(a)(`devicesVirtualPlugin.dewPoint.title`)},null,8,[`label`])]),_:1},8,[`modelValue`,`disabled`])):b(``,!0),u.value===`dew_point`?(_(),s(ye,{key:t.outputId??`draft-dew-point`,"output-id":t.outputId,onCreated:r[1]||=e=>i(`created`,e),onBusy:m},null,8,[`output-id`])):(_(),s(Ie,{key:t.outputId??`draft-numeric`,mode:t.mode,"output-id":t.outputId,temperature:t.temperature,onCreated:r[2]||=e=>i(`created`,e),onBusy:m},null,8,[`mode`,`output-id`,`temperature`]))],64))}});export{Q as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./virtual-measurement-editor-CkDduLTw.js";export{e as default};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-QTnfLwEv.js";import{Ai as e,Ar as t,Ci as n,Dr as r,Er as i,Fr as a,Hr as o,Mr as s,Nr as c,Oi as l,Or as u,Pi as d,Si as f,T as p,Ti as m,Xi as h,Zr as g,di as _,ei as v,k as y,ki as b,kr as x,li as S,mi as C,ni as w,pi as T,qr as E,r as D,xr as O,yr as k}from"./icon-with-child-C0yuv0oQ.js";import{Di as A,Dn as j,En as M,Hr as N,On as P,Ur as ee,_n as F,ai as I,an as L,di as te,gn as R,gr as ne,hn as z,ii as re,in as B,m as ie,nn as V,o as ae,oi as H,on as U,r as oe,rn as W,vn as se,w as ce,wn as le,x as ue}from"./common-Cq0z9nNV.js";import{n as G,t as de}from"./form-CoKeb4n7.js";import{t as K}from"./alert-C46gt4gd.js";import{t as q}from"./input-number-LzEdwV5R.js";import{r as J,t as Y}from"./select-BZCtBPAN.js";import{t as fe}from"./card-CfYeWlyn.js";import{t as pe}from"./checkbox-DTPMEXAL.js";import{t as me}from"./directive-CBwN801q.js";import{i as he,o as ge,r as _e}from"./keys-DMEIfK2a.js";import{t as ve}from"./useSession-BRG9xKsr.js";import{n as ye}from"./devices-virtual.constants-BxQtZ-rg.js";var be=()=>{throw Error(`native_request_failed`)};function xe(e,t){if(!e||t===void 0||![t,e.minimum,e.maximum,e.step].every(Number.isFinite)||e.step<=0||e.minimum>=e.maximum||t<e.minimum||t>e.maximum)return!1;let n=(t-e.minimum)/e.step;return Math.abs(n-Math.round(n))<1e-6}function Se(e,t){return!e?.supportsCompound||!e.modes.includes(`auto`)||!xe(e.heating,t.heating)||!xe(e.cooling,t.cooling)||t.heating>=t.cooling?null:{mode:`auto`,heating_setpoint:t.heating,cooling_setpoint:t.cooling}}function Ce(e,t,n){let r=n[t],i=e.capabilities;if(!i||!xe(i[t],r))return null;let a=t===`heating`?{heating_setpoint:r}:{cooling_setpoint:r};if(e.provider!==`home-assistant`||!i.heating||!i.cooling)return a;let o=t===`heating`?`heat`:`cool`;return i.modes.includes(o)?{...a,mode:o}:i.modes.includes(`auto`)?Se(i,n):null}var X=e=>e?.controller?{...e,controller:e.controller}:be();function we(e){return{async candidates(t){let{data:n}=await e.client.GET(`/plugins/devices-virtual/producers/thermostats/native/candidates`,{signal:t});return n?.data??be()},async read(t,n){let{data:r,response:i}=await e.client.GET(`/plugins/devices-virtual/producers/thermostats/native/{id}`,{params:{path:{id:t}},signal:n});return i.status===404?null:X(r?.data)},async create(t,n,r){let{data:i}=await e.client.POST(`/plugins/devices-virtual/producers/thermostats/native`,{body:{name:t,source_device:n},signal:r});return X(i?.data)},async request(t,n,r,i,a){let{data:o}=await e.client.POST(`/plugins/devices-virtual/producers/thermostats/native/{id}/requests`,{params:{path:{id:t}},body:{...i,mode:i.mode?ne[i.mode]:void 0,expected_revision:n,request_id:r},signal:a});return X(o?.data)},async revalidate(t,n,r,i){let{data:a}=await e.client.PUT(`/plugins/devices-virtual/producers/thermostats/native/{id}`,{params:{path:{id:t}},body:{expected_revision:n,source_device:r},signal:i});return X(a?.data)},async release(t,n,r){let{data:i}=await e.client.POST(`/plugins/devices-virtual/producers/thermostats/native/{id}/release`,{params:{path:{id:t}},body:{expected_revision:n},signal:r});return X(i?.data)}}}var Te={key:0},Ee={class:`mt-3`},De={"data-test-id":`native-observed`},Oe={key:1},ke={key:0},Z={key:5,class:`mt-3`,"data-test-id":`native-outcome`},Ae=a({__name:`NativeThermostatEditor`,props:{create:{type:Boolean},deviceId:{}},emits:[`created`,`absent`],setup(e,{expose:n,emit:a}){let o=e,l=a,{t:f}=p(),g=e=>f(`devicesVirtualPlugin.nativeThermostat.${e}`),{profile:b}=ve(),S=i(()=>[`owner`,`admin`].includes(b.value?.role??``)),C=we(ie()),D=m([]),j=m(null),M=m(``),P=m(``),F=i(()=>D.value.find(e=>e.device===P.value)),I=m(),L=[`heating`,`cooling`],R=m({heating:void 0,cooling:void 0}),ne=i(()=>!I.value||!j.value?.capabilities?null:I.value===`auto`?Se(j.value.capabilities,R.value):{mode:I.value}),z=m(!1),B=m(!1),V=m(null),H=0,U=!0,oe,W,se=async e=>{let t=new AbortController;oe=t;let n;try{return await Promise.race([e(t.signal),new Promise((e,r)=>{n=setTimeout(()=>{t.abort(),r(Error(`deadline`))},1e4)})])}finally{clearTimeout(n)}},ce=async(e=!1)=>{if(z.value)return;let t=++H,n=o.deviceId;z.value=!0,B.value=!1,V.value=null;try{if(o.create){let e=await se(e=>C.candidates(e));U&&t===H&&(D.value=e)}else if(n){let r=await se(e=>C.read(n,e));if(!U||t!==H||n!==o.deviceId)return;if(!r){l(`absent`);return}if(r.controller!==n)throw Error(`controller_conflict`);j.value=r,e||(I.value=r.requested.mode,R.value={heating:r.requested.heatingSetpoint,cooling:r.requested.coolingSetpoint}),B.value=!0}}catch{U&&t===H&&(V.value=g(`readFailed`))}finally{U&&t===H&&(z.value=!1)}},le=async(e,t=!1)=>{if(z.value||!S.value)return;let n=++H;z.value=!0,B.value=!1,V.value=null,W=(async()=>{try{let r=await se(e);if(!U||n!==H)return;if(t){M.value=``,l(`created`,r.controller);return}if(r.controller!==o.deviceId)throw Error(`controller_conflict`);j.value=r,B.value=!0}catch{U&&n===H&&(V.value=g(`uncertain`))}finally{U&&n===H&&(z.value=!1)}})(),await W},ue=()=>{if(!M.value.trim()||!F.value||F.value.reasons.length)return;let e={name:M.value.trim(),source:F.value.device};return le(t=>C.create(e.name,e.source,t),!0)},pe=e=>{if(!j.value||!B.value)return;let t=j.value,n=ae();return le(r=>C.request(t.controller,t.revision,n,e,r))},me=e=>{if(!j.value)return;let t=Ce(j.value,e,R.value);if(t)return pe(t)},he=()=>{if(!j.value||!B.value)return;let e=j.value;return le(t=>C.revalidate(e.controller,e.revision,e.source_device,t))},ge=async()=>{if(!j.value||!B.value||z.value||!S.value)return;let e=j.value;try{await re.confirm(g(`releaseHelp`))}catch{return}if(!(!U||!B.value||e.controller!==o.deviceId||e.revision!==j.value?.revision))return le(t=>C.release(e.controller,e.revision,t))};_(()=>[o.deviceId,o.create],()=>{H++,oe?.abort(),z.value=!1,j.value=null,ce()},{immediate:!0});let _e=setInterval(()=>{!o.create&&!z.value&&ce(!0)},5e3);E(()=>{clearInterval(_e),U=!1,H++,oe?.abort()});let ye=async()=>{if(await W,!o.create||!M.value.trim())return!0;try{return await re.confirm(g(`discard`)),!0}catch{return!1}};return N(ye),ee(ye),n({hasUnsavedChanges:i(()=>!!M.value.trim()),waitForSave:()=>W??Promise.resolve()}),(n,i)=>(v(),u(d(fe),{class:`mt-3`,"data-test-id":`native-thermostat-editor`},{header:T(()=>[s(h(g(`title`)),1)]),default:T(()=>[c(d(K),{title:g(`delegation`),type:`info`,closable:!1},null,8,[`title`]),V.value?(v(),u(d(K),{key:0,title:V.value,type:`error`,closable:!1,class:`mt-2`},null,8,[`title`])):x(``,!0),c(d(y),{disabled:z.value,class:`mt-3`,"data-test-id":`native-refresh`,onClick:i[0]||=e=>ce()},{default:T(()=>[s(h(g(`refresh`)),1)]),_:1},8,[`disabled`]),e.create&&S.value?(v(),u(d(de),{key:1,"label-position":`top`,class:`mt-3`,onSubmit:k(ue,[`prevent`])},{default:T(()=>[c(d(G),{label:g(`name`)},{default:T(()=>[c(d(A),{modelValue:M.value,"onUpdate:modelValue":i[1]||=e=>M.value=e,disabled:z.value},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),c(d(G),{label:g(`unit`)},{default:T(()=>[c(d(J),{modelValue:P.value,"onUpdate:modelValue":i[2]||=e=>P.value=e,disabled:z.value,class:`w-full`},{default:T(()=>[(v(!0),t(O,null,w(D.value,e=>(v(),u(d(Y),{key:e.device,value:e.device,disabled:e.reasons.length>0,label:`${e.name} · ${e.provider}`},null,8,[`value`,`disabled`,`label`]))),128))]),_:1},8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),D.value.length?x(``,!0):(v(),t(`p`,Te,h(g(`noCandidates`)),1)),c(d(y),{disabled:z.value||!M.value.trim()||!F.value,"data-test-id":`native-create`,onClick:ue},{default:T(()=>[s(h(g(`create`)),1)]),_:1},8,[`disabled`])]),_:1})):x(``,!0),j.value?(v(),t(O,{key:2},[r(`p`,null,h(g(`binding`))+`: `+h(g(j.value.binding_state)),1),j.value.drift.length?(v(),u(d(K),{key:0,title:g(`drift`),description:j.value.drift.join(`, `),type:`warning`,closable:!1},null,8,[`title`,`description`])):x(``,!0),r(`p`,Ee,h(j.value.provider)+` · `+h(j.value.physical_identity),1),r(`p`,null,h(g(`requested`))+`: `+h(j.value.requested.mode??`—`)+` · `+h(j.value.requested.heatingSetpoint??`—`)+` / `+h(j.value.requested.coolingSetpoint??`—`)+` °C `,1),r(`p`,De,h(g(`observed`))+`: `+h(B.value&&j.value.observed.available?j.value.observed.mode??`—`:g(`unavailable`))+` · `+h(B.value?j.value.observed.temperature??`—`:`—`)+` °C · `+h(B.value?j.value.observed.activity??g(`unavailable`):g(`unavailable`)),1),(v(!0),t(O,null,w(j.value.observed.reasons,e=>(v(),t(`p`,{key:e},h(e),1))),128)),j.value.observed.observedAt?(v(),t(`p`,Oe,h(g(`sampled`))+`: `+h(j.value.observed.observedAt),1)):x(``,!0),c(d(K),{title:g(`acceptance`),type:`info`,closable:!1},null,8,[`title`]),S.value&&j.value.capabilities&&j.value.binding_state===`bound`?(v(),t(O,{key:2},[c(d(te),null,{default:T(()=>[s(h(g(`request`)),1)]),_:1}),c(d(J),{modelValue:I.value,"onUpdate:modelValue":i[3]||=e=>I.value=e,disabled:z.value||!B.value,"aria-label":g(`mode`)},{default:T(()=>[(v(!0),t(O,null,w(j.value.capabilities.modes,e=>(v(),u(d(Y),{key:e,value:e,label:e},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`,`disabled`,`aria-label`]),c(d(y),{disabled:z.value||!B.value||!ne.value,"data-test-id":`native-mode`,onClick:i[4]||=e=>ne.value&&pe(ne.value)},{default:T(()=>[s(h(g(`sendMode`)),1)]),_:1},8,[`disabled`]),(v(),t(O,null,w(L,e=>r(`div`,{key:e,class:`mt-3`},[j.value.capabilities[e]?(v(),t(O,{key:0},[c(d(q),{modelValue:R.value[e],"onUpdate:modelValue":t=>R.value[e]=t,disabled:z.value||!B.value,min:j.value.capabilities[e].minimum,max:j.value.capabilities[e].maximum,step:j.value.capabilities[e].step,"aria-label":g(e)},null,8,[`modelValue`,`onUpdate:modelValue`,`disabled`,`min`,`max`,`step`,`aria-label`]),c(d(y),{disabled:z.value||!B.value||!d(Ce)(j.value,e,R.value),"data-test-id":`native-${e}`,onClick:t=>me(e)},{default:T(()=>[s(h(g(e))+` °C `,1)]),_:2},1032,[`disabled`,`data-test-id`,`onClick`])],64)):x(``,!0)])),64)),j.value.capabilities.supportsCompound?x(``,!0):(v(),t(`p`,ke,h(g(`singleOperation`)),1))],64)):x(``,!0),S.value&&j.value.binding_state===`bound`?(v(),u(d(y),{key:3,disabled:z.value||!B.value,class:`mt-3`,"data-test-id":`native-revalidate`,onClick:he},{default:T(()=>[s(h(g(`revalidate`)),1)]),_:1},8,[`disabled`])):x(``,!0),S.value&&j.value.binding_state!==`released`?(v(),u(d(y),{key:4,disabled:z.value||!B.value,class:`mt-3`,"data-test-id":`native-release`,onClick:ge},{default:T(()=>[s(h(g(`release`)),1)]),_:1},8,[`disabled`])):x(``,!0),j.value.latest_request?(v(),t(`div`,Z,[r(`p`,null,h(g(`outcome`))+`: `+h(j.value.latest_request.state),1),(v(!0),t(O,null,w(j.value.latest_request.operations,(e,n)=>(v(),t(`p`,{key:n},h(e.operation)+`: `+h(g(e.outcome))+` `+h(e.reason??``),1))),128))])):x(``,!0)],64)):x(``,!0)]),_:1}))}});function je(e,t){let n=l(null),r=m(null),i=m(!1),a=0,o=!1,s,c=()=>{a++,s?.abort(),n.value=null,i.value=!1},u=async()=>{let c=++a,l=e.value;if(s?.abort(),n.value=null,r.value=null,!l||o){i.value=!1;return}s=new AbortController,i.value=!0;try{let r=await t(l,s.signal);!o&&c===a&&l===e.value&&(n.value=r)}catch(e){!o&&c===a&&(r.value=String(e))}finally{c===a&&(i.value=!1)}};return _(e,()=>{u()},{immediate:!0,flush:`sync`}),f(()=>{o=!0,a++,s?.abort()}),{value:n,error:r,loading:i,reload:u,invalidate:c}}function Me(e,t,n){let r=0,a=m(null),o=()=>{r+=1,a.value=null,n?.()};_(t,o,{deep:!0,flush:`sync`});let s=t=>(o(),{generation:r,snapshot:e(),request:JSON.parse(JSON.stringify(t))}),c=t=>t.generation===r&&t.snapshot===e(),l=e=>c(e)?(a.value=e.snapshot,!0):!1;return{execute:async(e,t,n)=>{let r=s(e);n.pending(!0);try{let e=await t(r.request);if(!c(r))return;l(r),n.success(e)}catch(e){c(r)&&n.error(e)}finally{c(r)&&n.pending(!1)}},canSave:i(()=>a.value!==null&&a.value===e()),invalidate:o}}var Ne=()=>({requested_mode:ne.off,policy:{heatingSetpoint:null,coolingSetpoint:null,coldTolerance:null,hotTolerance:null,neutralMargin:null,minimumOffMs:null,changeoverMs:null,floor:null},heuristic:null,contact_opening_ms:null,contact_closing_ms:null,sources:[],actuators:[],settings:[]}),Pe=e=>({display_floor_claim:e.display_floor_claim??null,requested_mode:e.requested_mode,policy:structuredClone(b(e.policy)),heuristic:e.heuristic?structuredClone(b(e.heuristic)):null,contact_opening_ms:e.contact_opening_ms,contact_closing_ms:e.contact_closing_ms,sources:e.sources.map(e=>({id:e.id,role:e.role,source_property:e.source_property,maximum_age_seconds:e.maximum_age_seconds,open_value:e.open_value,closed_value:e.closed_value})),actuators:e.actuators.map(e=>({role:e.role,source_property:e.source_property??e.source_identity,lease_seconds:e.lease_seconds,retained:structuredClone(b(e)),...e.cooling_protection?{cooling_protection:{schemaVersion:z.Value1,purpose:R.cooled_surface,dew_point_property:e.cooling_protection.dew_point_property,surface_property:e.cooling_protection.surface_property,maximum_age_seconds:e.cooling_protection.maximum_age_seconds}}:{},...e.protection?{protection:{schema_version:z.Value1,kind:M.local_floor,source_property:e.protection.source_property,maximum_age_seconds:e.protection.maximum_age_seconds}}:{}})),settings:e.settings.map(e=>({...e}))}),Fe=(e,t)=>{let n=Pe(t);return{...e,display_floor_claim:n.actuators.some(t=>t.retained?.id===e.display_floor_claim)?e.display_floor_claim:null,actuators:[...n.actuators.map(t=>{let n=e.actuators.find(e=>e.retained?.id===t.retained?.id);return n?{...n,source_property:t.source_property,retained:t.retained}:t}),...e.actuators.filter(e=>!e.retained)]}},Q=e=>typeof e==`number`&&Number.isFinite(e),$=e=>Q(e)&&Number.isInteger(e),Ie=(e,t,n)=>{let r=[],i=e.policy;if(i.cooling){(!Q(i.cooling.marginC)||i.cooling.marginC<=0||i.cooling.marginC>60||!Q(i.cooling.recoveryHysteresisC)||i.cooling.recoveryHysteresisC<=0||i.cooling.recoveryHysteresisC>60)&&r.push(`devicesVirtualPlugin.dewPoint.errors.coolingPolicy`),i.cooling.absoluteMinimumC!=null&&(!Q(i.cooling.absoluteMinimumC)||i.cooling.absoluteMinimumC<=-45||i.cooling.absoluteMinimumC>60)&&r.push(`devicesVirtualPlugin.dewPoint.errors.coolingMinimum`);for(let t of e.actuators.filter(e=>e.role===`cooling`))(!t.cooling_protection||!t.cooling_protection.dew_point_property&&!(t.cooling_protection.dew_point_property===null&&t.retained?.cooling_protection?.dew_point_property===null)||!t.cooling_protection.surface_property&&!(t.cooling_protection.surface_property===null&&t.retained?.cooling_protection?.surface_property===null)||!$(t.cooling_protection.maximum_age_seconds)||t.cooling_protection.maximum_age_seconds<1||t.cooling_protection.maximum_age_seconds>86400)&&r.push(`devicesVirtualPlugin.dewPoint.errors.coolingDependencies`)}!Q(i.heatingSetpoint)&&!Q(i.coolingSetpoint)&&r.push(`Select at least one comfort branch and setpoint.`),(!Q(i.coldTolerance)||i.coldTolerance<0)&&r.push(`Enter a nonnegative cold tolerance.`),(!Q(i.hotTolerance)||i.hotTolerance<0)&&r.push(`Enter a nonnegative hot tolerance.`),(!Q(i.neutralMargin)||i.neutralMargin<=0)&&r.push(`Enter a positive neutral margin.`),(!$(i.minimumOffMs)||i.minimumOffMs<0)&&r.push(`Enter the minimum OFF interval in milliseconds.`),(!$(i.changeoverMs)||i.changeoverMs<0)&&r.push(`Enter the changeover interval in milliseconds.`),i.floor&&(!Q(i.floor.limit)||!Q(i.floor.recoveryHysteresis)||i.floor.recoveryHysteresis<=0)&&r.push(`Enter the floor limit and positive recovery hysteresis in Celsius.`),e.heuristic&&Object.values(e.heuristic).some(e=>!Q(e))&&r.push(`Complete every enabled trend setting.`),(!$(e.contact_opening_ms)||e.contact_opening_ms<0||!$(e.contact_closing_ms)||e.contact_closing_ms<0)&&r.push(`Enter both contact debounce intervals in milliseconds.`),e.sources.filter(e=>e.role===`ambient`).length!==1&&r.push(`Configure exactly one ambient source.`),e.sources.some(e=>e.role===`floor`)&&!i.floor&&r.push(`Retain a common floor policy for the existing global guard.`),i.floor&&!e.sources.some(e=>e.role===`floor`)&&!(e.actuators.some(e=>e.role===`heating`)&&e.actuators.filter(e=>e.role===`heating`).every(e=>!!e.protection))&&r.push(`Floor protection requires a global source or an explicit local guard for every heating member.`),e.sources.filter(e=>e.role===`contact`).length>1&&r.push(`Configure at most one contact source.`);for(let t of e.sources)(!$(t.maximum_age_seconds)||t.maximum_age_seconds<1)&&r.push(`Enter a positive maximum age for ${t.role}.`),!t.source_property&&!t.id&&r.push(`Select a ${t.role} source.`),t.role===`contact`&&(t.open_value==null||t.closed_value==null)&&r.push(`Map both contact open and closed values.`),t.role===`contact`&&t.open_value===t.closed_value&&r.push(`Contact open and closed values must differ.`);e.actuators.length||r.push(`Select at least one physical actuator.`);for(let t of[`heating`,`cooling`])e.actuators.some(e=>e.role===t)!==Q(i[`${t}Setpoint`])&&r.push(`${t} actuator must match its comfort setpoint branch.`);e.actuators.length>8&&r.push(`At most eight mandatory members, including retained claims, are allowed.`),new Set(e.actuators.map(e=>e.source_property)).size!==e.actuators.length&&r.push(`Each physical member must be distinct.`);let a=e.actuators.filter(e=>e.role===`heating`).length>1;for(let t of e.actuators)t.retained&&!t.retained.source_property&&r.push(`Repair retained claim ${t.retained.id}; its ownership is preserved.`),t.role===`heating`&&(a||t.protection)&&(i.floor||r.push(`Enter the shared floor limit and hysteresis for local protection.`),(!t.protection||!t.protection.source_property&&!t.retained?.protection)&&r.push(`Every heating member requires an explicit local protective source.`),t.protection&&(!$(t.protection.maximum_age_seconds)||t.protection.maximum_age_seconds<1)&&r.push(`Enter a positive protective source maximum age.`)),t.source_property||r.push(`Repair the ${t.role} actuator before saving.`),(!Q(t.lease_seconds)||t.lease_seconds<=0)&&r.push(`Enter a positive ${t.role} ON lease.`);return new Set(e.settings.map(e=>e.setting)).size!==e.settings.length&&r.push(`Each local setting role may be registered once.`),e.settings.some(e=>!e.property)&&r.push(`Select a local property for each setting.`),r.length?{errors:r}:{errors:r,request:{schema_version:1,expected_revision:t,...n===void 0?{}:{expected_graph_revision:n},display_floor_claim:e.display_floor_claim,requested_mode:e.requested_mode,policy:i,heuristic:e.heuristic,contact_opening_ms:e.contact_opening_ms,contact_closing_ms:e.contact_closing_ms,sources:e.sources,actuators:e.actuators.map(e=>({role:e.role,source_property:e.source_property,lease_seconds:e.lease_seconds,...e.protection?{protection:e.protection}:{},...i.cooling&&e.role===`cooling`&&e.cooling_protection?{cooling_protection:e.cooling_protection}:{}})),settings:e.settings}}};function Le(e,t,n){let r=e?.protection;if(!r)return{temperature:null,status:`unavailable`,age:null,ready:!1};let i=Math.max(0,(n-t)/1e3),a=r.age_seconds===null?null:r.age_seconds+i,o=r.expires_at?Date.parse(r.expires_at):NaN,s=n>=t&&r.status===`fresh`&&r.quality===`good`&&Number.isFinite(o)&&n<o&&a!==null&&r.maximum_age_seconds!==null&&a<r.maximum_age_seconds;return{temperature:s?r.temperature:null,status:s?r.status:r.status===`fresh`?`stale`:r.status,age:a,ready:s&&r.ready===!0}}function Re(e,t,n){let r=e?.activity_sampled_at?Date.parse(e.activity_sampled_at):NaN,i=e?.activity_expires_at?Date.parse(e.activity_expires_at):NaN,a=!!e&&[`on`,`off`].includes(e.activity)&&Number.isFinite(r)&&Number.isFinite(i)&&n>=t&&n>=r&&i>r&&n<i;return{activity:a?e.activity:`unknown`,qualification:a?e.qualification_ready??null:null,sampledAt:a?e.activity_sampled_at:null,expiresAt:a?e.activity_expires_at:null}}var ze=class{monotonicNow;claims=new Map;constructor(e=()=>performance.now()){this.monotonicNow=e}get size(){return this.claims.size}retain(e){let t=new Set(e);for(let e of this.claims.keys())t.has(e)||this.claims.delete(e)}clear(){this.claims.clear()}expire(e){for(let t of this.claims.values())for(let n of Object.values(t))(e>=n.expiresAt||this.monotonicNow()>=n.deadline)&&(n.withdrawn=!0)}accepts(e,t,n,r,i,a){if(this.expire(a),!Number.isFinite(n))return!1;let o=this.claims.get(e);if(!o){if(this.claims.size>=16)return!1;o={},this.claims.set(e,o)}let s=o[t];return s&&n<s.sampledAt?!1:((!s||n>s.sampledAt)&&(s={sampledAt:n,expiresAt:r,deadline:this.monotonicNow()+Math.max(0,r-a),withdrawn:!1},o[t]=s),(!i||a<n||!Number.isFinite(r)||r<=n||a>=s.expiresAt)&&(s.withdrawn=!0),!s.withdrawn)}observation(e,t,n,r){let i=Re(t,n,r);return this.accepts(e,`activity`,Date.parse(t?.activity_sampled_at??``),Date.parse(t?.activity_expires_at??``),i.activity!==`unknown`,r)?i:{activity:`unknown`,qualification:null,sampledAt:null,expiresAt:null}}reading(e,t,n,r){let i=Le(t,n,r);return this.accepts(e,`protection`,Date.parse(t?.protection?.sampled_at??``),Date.parse(t?.protection?.expires_at??``),i.status===`fresh`&&i.temperature!==null,r)?i:{...i,temperature:null,ready:!1,status:i.status===`fresh`?`stale`:i.status}}};function Be(e,t,n){let r=[],i=(e,t,n,i)=>{let a=crypto.randomUUID();return i&&r.push({setting:i,property:a}),{id:a,type:`virtual`,identifier:e,category:e,data_type:t,permissions:[U.ro],value_origin:F.local,...n?{format:n}:{}}},a=(e,t)=>({id:crypto.randomUUID(),type:`virtual`,identifier:e,name:e===W.device_information?`Device Information`:e,category:e,properties:t}),o=[a(W.temperature,[i(B.temperature,L.float,[0,100])]),a(W.thermostat,[i(B.locked,L.bool,void 0,j.locked)]),a(W.device_information,[i(B.manufacturer,L.string),i(B.model,L.string),i(B.serial_number,L.string),i(B.status,L.enum,[`connected`,`disconnected`,`init`,`ready`,`running`,`sleeping`,`stopped`,`lost`,`alert`,`unknown`])])];return t&&o.push(a(W.heater,[i(B.on,L.bool,void 0,j.heating_enabled),i(B.temperature,L.float,[0,100],j.heating_setpoint),i(B.status,L.bool)])),n&&o.push(a(W.cooler,[i(B.on,L.bool,void 0,j.cooling_enabled),i(B.temperature,L.float,[0,100],j.cooling_setpoint),i(B.status,L.bool)])),{device:{id:crypto.randomUUID(),type:`virtual`,mode:se.climate_controller,name:e,category:V.thermostat,channels:o},settings:r}}var Ve=[`commissioning_barrier`,`writer_isolation`,`restart_drain`,`local_execution_bounds`,`endpoint_authentication`,`independent_protection`,`opposed_interlock`],He=()=>({endpoint:``,epoch:``,script:null,ceiling:null,minimumLease:null,maximumLease:null,watchdog:null,heatingMinimum:null,heatingMaximum:null,coolingMinimum:null,coolingMaximum:null,attestations:[]}),Ue=e=>typeof e==`number`&&Number.isFinite(e);function We(e,t){if(!e)return`member_authoring_context_unavailable`;let n=e.candidates.find(e=>e.property===t);return n?n.snapshot?null:`selected_protective_source_installation_snapshot_missing`:`selected_protective_source_unavailable`}function Ge(e,t,n,r,i=null){return We(t,i)||!t?.device_hardware_id||!t.firmware||!t.switch_configuration_json||t.reasons.length||!e.endpoint.trim()||!e.epoch.trim()||!Ue(e.script)||!Number.isInteger(e.script)||!Ue(e.ceiling)||!Ue(e.minimumLease)||!Ue(e.maximumLease)||!Ue(e.watchdog)||!Ue(e.heatingMinimum)||!Ue(e.heatingMaximum)||e.heatingMinimum>=e.heatingMaximum||(e.coolingMinimum!==null||e.coolingMaximum!==null)&&(!Ue(e.coolingMinimum)||!Ue(e.coolingMaximum)||e.coolingMinimum>=e.coolingMaximum)||e.attestations.some(e=>!e.equipment.trim()||!e.procedure.trim()||!e.evidenceReference.trim()||!Number.isFinite(Date.parse(e.testedAt)))?null:{expected_revision:n,expected_configuration_revision:t.configuration_revision,expected_claim_revision:t.claim_revision,expected_qualification_generation:r,member_setup:{format_version:2,installed_floor_ceiling_c:e.ceiling,device_hardware_id:t.device_hardware_id,firmware:t.firmware,switch_configuration_json:t.switch_configuration_json,endpoint_hostname:e.endpoint.trim(),script_id:e.script,epoch_key:e.epoch.trim(),heating_setpoint_range:{minimum:e.heatingMinimum,maximum:e.heatingMaximum},cooling_setpoint_range:e.coolingMinimum===null?null:{minimum:e.coolingMinimum,maximum:e.coolingMaximum},minimum_lease_seconds:e.minimumLease,maximum_lease_seconds:e.maximumLease,watchdog_ms:e.watchdog},operator_attestations:e.attestations.map(({maximumObservedMs:e,...t})=>({...t,...e===null?{}:{maximumObservedMs:e}}))}}var Ke={"data-test-id":`member-installation`},qe={key:1},Je={key:2},Ye={key:4},Xe=a({__name:`thermostat-member-installation`,props:{claim:{},configurationRevision:{},requestedLimit:{},disabled:{type:Boolean}},emits:[`changed`],setup(e,{emit:n}){let a=e,o=n,{t:l}=p(),g=e=>l(`devicesVirtualPlugin.members.${e}`),_=!0;f(()=>{_=!1});let b=ie(),S=m(!1),C=m(null),E=m(He()),D=i(()=>`${a.claim.id}:${a.claim.revision}:${a.configurationRevision}:${a.claim.qualification_generation??``}`),k=je(D,async(e,t)=>{let n=a.claim.id,[r,i]=await Promise.all([b.client.GET(`/plugins/devices-virtual/producers/thermostat-member-authoring/claims/{claim}`,{params:{path:{claim:n}},signal:t}),b.client.GET(`/plugins/devices-virtual/producers/thermostat-installations/{claim}`,{params:{path:{claim:n}},signal:t})]);if(!r.data||!i.data&&i.response.status!==404)throw Error(JSON.stringify(r.error??i.error));return{context:r.data.data,profile:i.data?.data??null}}),j=i(()=>k.value.value?.context.configuration_revision===a.configurationRevision&&k.value.value.context.claim_revision===a.claim.revision),M=i(()=>a.claim.protection?.source_property??a.claim.protection?.source_identity??null),N=i(()=>a.claim.protection&&k.value.value?We(k.value.value.context,M.value):null),P=i(()=>Ge(E.value,k.value.value?.context??null,k.value.value?.profile?.revision??0,a.claim.qualification_generation,M.value)),ee=[{key:`endpoint`,label:`endpoint`},{key:`epoch`,label:`epoch`}],F=[{key:`script`,label:`script`},{key:`ceiling`,label:`ceiling`},{key:`minimumLease`,label:`minimumLease`},{key:`maximumLease`,label:`maximumLease`},{key:`watchdog`,label:`watchdog`},{key:`heatingMinimum`,label:`heatingMinimum`},{key:`heatingMaximum`,label:`heatingMaximum`},{key:`coolingMinimum`,label:`coolingMinimum`},{key:`coolingMaximum`,label:`coolingMaximum`}],I=async()=>{if(!P.value||!j.value||S.value||a.disabled)return;let e=structuredClone(P.value),t=D.value,n=a.claim.id;S.value=!0,C.value=null;try{let{data:r,error:i}=await b.client.PUT(`/plugins/devices-virtual/producers/thermostat-installations/{claim}`,{params:{path:{claim:n}},body:e});if(!_||t!==D.value||a.disabled)return;if(!r)throw Error(JSON.stringify(i));o(`changed`),await k.reload()}catch(e){_&&t===D.value&&(C.value=String(e),k.invalidate(),k.reload())}finally{_&&(S.value=!1)}};return(n,i)=>(v(),t(`details`,Ke,[r(`summary`,null,h(g(`installation`)),1),r(`p`,null,h(g(`stagingOnly`)),1),d(k).error.value||C.value?(v(),u(d(K),{key:0,title:d(k).error.value??C.value??``,type:`error`,closable:!1},null,8,[`title`])):x(``,!0),d(k).value.value?.profile?(v(),t(`p`,qe,h(d(k).value.value.profile.readiness)+` · r`+h(d(k).value.value.profile.revision),1)):x(``,!0),(v(!0),t(O,null,w([...d(k).value.value?.context.reasons??[],...d(k).value.value?.profile?.reasons??[],...N.value?[N.value]:[]],e=>(v(),u(d(K),{key:e,title:e,type:`warning`,closable:!1},null,8,[`title`]))),128)),d(k).value.value?.profile?(v(),t(`details`,Je,[r(`summary`,null,h(g(`retainedProfile`)),1),r(`pre`,null,h(JSON.stringify(d(k).value.value.profile,null,2)),1)])):x(``,!0),e.claim.protection?(v(),u(d(de),{key:3,"label-position":`top`,disabled:e.disabled||S.value},{default:T(()=>[(v(),t(O,null,w(ee,e=>c(d(G),{key:e.key,label:g(e.label)},{default:T(()=>[c(d(A),{modelValue:E.value[e.key],"onUpdate:modelValue":t=>E.value[e.key]=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`label`])),64)),(v(),t(O,null,w(F,e=>c(d(G),{key:e.key,label:g(e.label)},{default:T(()=>[c(d(q),{modelValue:E.value[e.key],"onUpdate:modelValue":t=>E.value[e.key]=t,controls:!1},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`label`])),64)),r(`p`,null,h(g(`cutoff`))+`: `+h(e.requestedLimit!==null&&E.value.ceiling!==null?Math.min(e.requestedLimit,E.value.ceiling):`—`)+` °C`,1),r(`p`,null,h(g(`evidenceHelp`)),1),(v(!0),t(O,null,w(E.value.attestations,(e,n)=>(v(),t(`div`,{key:n,class:`border p-2 mb-2`},[c(d(J),{modelValue:e.kind,"onUpdate:modelValue":t=>e.kind=t},{default:T(()=>[(v(!0),t(O,null,w(d(Ve),e=>(v(),u(d(Y),{key:e,value:e,label:e},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`,`onUpdate:modelValue`]),c(d(A),{modelValue:e.equipment,"onUpdate:modelValue":t=>e.equipment=t,placeholder:g(`equipment`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),c(d(A),{modelValue:e.procedure,"onUpdate:modelValue":t=>e.procedure=t,placeholder:g(`procedure`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),c(d(A),{modelValue:e.evidenceReference,"onUpdate:modelValue":t=>e.evidenceReference=t,placeholder:g(`evidence`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),c(d(A),{modelValue:e.testedAt,"onUpdate:modelValue":t=>e.testedAt=t,placeholder:g(`testedAt`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),c(d(q),{modelValue:e.maximumObservedMs,"onUpdate:modelValue":t=>e.maximumObservedMs=t,controls:!1,placeholder:g(`observedMs`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),c(d(y),{onClick:e=>E.value.attestations.splice(n,1)},{default:T(()=>[s(h(g(`removeDraft`)),1)]),_:1},8,[`onClick`])]))),128)),c(d(y),{disabled:E.value.attestations.length>=7,onClick:i[0]||=e=>E.value.attestations.push({kind:``,equipment:``,procedure:``,evidenceReference:``,testedAt:``,maximumObservedMs:null})},{default:T(()=>[s(h(g(`addEvidence`)),1)]),_:1},8,[`disabled`]),r(`details`,null,[r(`summary`,null,h(g(`snapshot`)),1),r(`pre`,null,h(JSON.stringify(d(k).value.value?.context,null,2)),1)]),c(d(y),{disabled:!P.value||!j.value||e.disabled||S.value,onClick:I},{default:T(()=>[s(h(g(`stage`)),1)]),_:1},8,[`disabled`])]),_:1},8,[`disabled`])):(v(),t(`p`,Ye,h(g(`legacyProfile`)),1)),c(d(y),{disabled:S.value,onClick:d(k).reload},{default:T(()=>[s(h(g(`reload`)),1)]),_:1},8,[`disabled`,`onClick`])]))}}),Ze={class:`flex flex-wrap gap-2 items-center`},Qe=a({__name:`thermostat-property-picker`,props:{modelValue:{},ownerDeviceId:{},kind:{}},emits:[`update:modelValue`],setup(e,{emit:n}){let r=e,a=n,o=ue(),l=ie(),f=o.getStore(ge),p=o.getStore(he),y=o.getStore(_e),b=m(r.ownerDeviceId??null),S=m(null),C=i(()=>r.ownerDeviceId?f.findAll().filter(e=>e.id===r.ownerDeviceId):f.findAll().filter(e=>e.id!==r.ownerDeviceId)),k=i(()=>b.value?p.findForDevice(b.value):[]),A=i(()=>S.value?y.findForChannel(S.value).filter(e=>r.kind===`setting`?!0:r.kind===`actuator`?e.dataType===`bool`:r.kind===`contact`?[`bool`,`string`,`enum`,`uchar`,`int`].includes(e.dataType):e.category===`temperature`&&[`float`,`int`,`uchar`].includes(e.dataType)):[]),j=e=>{P++,b.value=e,S.value=null,a(`update:modelValue`,null),e&&p.fetch({deviceId:e})},M=e=>{P++,S.value=e,a(`update:modelValue`,null),e&&y.fetch({channelId:e})},N=e=>a(`update:modelValue`,e),P=0,ee=async()=>{let e=++P,t=r.modelValue,n=r.ownerDeviceId,i=()=>e===P&&r.modelValue===t&&r.ownerDeviceId===n;if(!t){b.value=n??null,S.value=null;return}try{let{data:e}=await l.client.GET(`/${D}/${ye}/producers/thermostats/binding-properties/{id}`,{params:{path:{id:t}}});if(!i())return;if(!e||e.data.property!==t)throw Error(`Binding property is unavailable.`);let r=e.data;if(n&&r.device!==n)return;let a=p.findById(r.channel)??await p.get({id:r.channel});if(!i()||a.device!==r.device)return;let o=y.findById(t)??await y.get({id:t,channelId:a.id});if(!i()||o.channel!==a.id)return;b.value=a.device,S.value=a.id,await Promise.all([p.fetch({deviceId:a.device}).catch(()=>void 0),y.fetch({channelId:a.id}).catch(()=>void 0)])}catch{if(!i())return;b.value=n??null,S.value=null}};return g(async()=>{f.firstLoadFinished()||await f.fetch(),r.ownerDeviceId&&await p.fetch({deviceId:r.ownerDeviceId}),await ee()}),_(()=>[r.modelValue,r.ownerDeviceId],()=>{ee()}),E(()=>{P++}),(n,r)=>(v(),t(`div`,Ze,[c(d(J),{modelValue:b.value,"onUpdate:modelValue":r[0]||=e=>b.value=e,filterable:``,clearable:``,placeholder:`Device`,class:`w-52`,onChange:j},{default:T(()=>[(v(!0),t(O,null,w(C.value,e=>(v(),u(d(Y),{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),c(d(J),{modelValue:S.value,"onUpdate:modelValue":r[1]||=e=>S.value=e,filterable:``,clearable:``,placeholder:`Channel`,class:`w-48`,disabled:!b.value,onChange:M},{default:T(()=>[(v(!0),t(O,null,w(k.value,e=>(v(),u(d(Y),{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`disabled`]),c(d(J),{"model-value":e.modelValue,filterable:``,clearable:``,placeholder:`Property`,class:`w-56`,disabled:!S.value,onChange:N},{default:T(()=>[(v(!0),t(O,null,w(A.value,e=>(v(),u(d(Y),{key:e.id,label:e.name??e.category,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`disabled`]),e.modelValue&&!A.value.some(t=>t.id===e.modelValue)?(v(),u(d(I),{key:0,type:`warning`,size:`small`},{default:T(()=>[s(` Missing or unloaded property: `+h(e.modelValue),1)]),_:1})):x(``,!0)]))}}),$e={"data-test-id":`member-recovery`},et=a({__name:`thermostat-member-recovery`,props:{claim:{},controller:{},configurationRevision:{},disabled:{type:Boolean}},emits:[`changed`],setup(e,{emit:n}){let i=e,a=n,o=ie(),l=m(null),g=m(``),_=m(!1),b=m(!1),S=m(null),{t:C}=p(),w=e=>C(`devicesVirtualPlugin.members.${e}`),E=!0;f(()=>{E=!1});let D=async()=>{if(!l.value||!g.value.trim()||!_.value||!i.controller||i.disabled||b.value)return;let e=i.controller,t=i.claim.id,n=i.configurationRevision;b.value=!0,S.value=null;try{let{data:r,error:s}=await o.client.POST(`/plugins/devices-virtual/producers/thermostats/{id}/claims/{claimId}/restore`,{params:{path:{id:e,claimId:t}},body:{expected_revision:n,expected_claim_revision:i.claim.revision,physical_identity:i.claim.physical_identity,source_property:l.value,reason:g.value.trim(),disconnection_acknowledged:!0}});if(!E||e!==i.controller||t!==i.claim.id||n!==i.configurationRevision||i.disabled)return;if(!r)throw Error(JSON.stringify(s));a(`changed`)}catch(r){E&&e===i.controller&&t===i.claim.id&&n===i.configurationRevision&&(S.value=String(r))}finally{E&&(b.value=!1)}};return(n,i)=>(v(),t(`details`,$e,[r(`summary`,null,h(w(`recovery`)),1),r(`p`,null,h(w(`recoveryHelp`)),1),r(`p`,null,h(e.claim.id)+` · `+h(e.claim.physical_identity)+` · r`+h(e.claim.revision)+` · `+h(e.claim.qualification_generation??`—`),1),c(Qe,{modelValue:l.value,"onUpdate:modelValue":i[0]||=e=>l.value=e,kind:`actuator`},null,8,[`modelValue`]),c(d(A),{modelValue:g.value,"onUpdate:modelValue":i[1]||=e=>g.value=e,placeholder:w(`reason`),disabled:e.disabled||b.value},null,8,[`modelValue`,`placeholder`,`disabled`]),c(d(pe),{modelValue:_.value,"onUpdate:modelValue":i[2]||=e=>_.value=e,disabled:e.disabled||b.value},{default:T(()=>[s(h(w(`disconnection`)),1)]),_:1},8,[`modelValue`,`disabled`]),S.value?(v(),u(d(K),{key:0,title:S.value,type:`error`,closable:!1},null,8,[`title`])):x(``,!0),S.value?(v(),u(d(y),{key:1,disabled:b.value,onClick:i[3]||=e=>a(`changed`)},{default:T(()=>[s(h(w(`reload`)),1)]),_:1},8,[`disabled`])):x(``,!0),c(d(y),{disabled:e.disabled||b.value||!l.value||!g.value.trim()||!_.value||!e.controller,onClick:D},{default:T(()=>[s(h(w(`recover`)),1)]),_:1},8,[`disabled`])]))}}),tt={key:0},nt={key:2},rt={key:0},it={key:3},at={class:`overflow-auto`},ot=a({__name:`thermostat-member-card`,props:{member:{},parallel:{type:Boolean},controller:{},configurationRevision:{},requestedLimit:{},disabled:{type:Boolean},setupDisabled:{type:Boolean},runtime:{},receivedAt:{},now:{},freshness:{}},emits:[`remove`,`changed`],setup(n,{emit:a}){let o=n,l=a,{t:f}=p(),m=e=>f(`devicesVirtualPlugin.members.${e}`),g=ie(),_=je(i(()=>o.member.source_property?`${o.member.source_property}:${o.configurationRevision}:${o.member.retained?.revision??``}:${o.member.retained?.qualification_generation??``}`:``),async(e,t)=>{let n=o.member.source_property,{data:r,error:i}=await g.client.GET(`/plugins/devices-virtual/producers/thermostat-member-authoring/actuators/{property}`,{params:{path:{property:n}},signal:t});if(!r)throw Error(JSON.stringify(i));return r.data}),b=i(()=>_.value.value?.candidates.find(e=>e.property===o.member.protection?.source_property)),S=new ze,C=i(()=>o.member.retained?.id??o.member.source_property??`unbound`),E=i(()=>(o.freshness??S).observation(C.value,o.runtime,o.receivedAt,o.now)),D=i(()=>(o.freshness??S).reading(C.value,o.runtime,o.receivedAt,o.now)),k=e(o,`member`),A=e=>{e===!0&&!k.value.protection&&(k.value.protection={schema_version:1,kind:`local_floor`,source_property:null,maximum_age_seconds:null})},j=e=>{k.value.protection&&_.value.value?.candidates.some(t=>t.property===e)&&(k.value.protection.source_property=e)};return(e,i)=>(v(),u(d(fe),{shadow:`never`,class:`mb-3`,"data-test-id":`thermostat-member`},{header:T(()=>[r(`strong`,null,h(m(`mandatory`))+` · `+h(k.value.role)+` · `+h(k.value.retained?.id??m(`newMember`)),1),k.value.retained?x(``,!0):(v(),u(d(y),{key:0,disabled:n.disabled,link:``,type:`danger`,onClick:i[0]||=e=>l(`remove`)},{default:T(()=>[s(h(m(`removeDraft`)),1)]),_:1},8,[`disabled`]))]),default:T(()=>[k.value.retained?(v(),t(`p`,tt,h(k.value.retained.physical_identity)+` · `+h(k.value.retained.state)+` · `+h(k.value.retained.source_identity),1)):x(``,!0),k.value.retained?(v(),t(`p`,nt,h(m(`retained`)),1)):(v(),u(Qe,{key:1,modelValue:k.value.source_property,"onUpdate:modelValue":i[1]||=e=>k.value.source_property=e,kind:`actuator`},null,8,[`modelValue`])),c(d(G),{label:m(`lease`)},{default:T(()=>[c(d(q),{modelValue:k.value.lease_seconds,"onUpdate:modelValue":i[2]||=e=>k.value.lease_seconds=e,disabled:n.disabled,controls:!1},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),k.value.role===`heating`?(v(),t(O,{key:3},[c(d(pe),{"model-value":!!k.value.protection,disabled:n.disabled||!!k.value.retained?.protection,onChange:A},{default:T(()=>[s(h(m(`localProtection`)),1)]),_:1},8,[`model-value`,`disabled`]),k.value.protection?(v(),t(O,{key:0},[k.value.retained?.protection?(v(),t(`p`,rt,h(m(`retainedSource`))+`: `+h(k.value.retained.protection.source_identity)+` · `+h(k.value.retained.protection.physical_property)+` · r`+h(k.value.retained.protection.revision),1)):x(``,!0),c(d(J),{"model-value":k.value.protection.source_property,disabled:n.disabled||d(_).loading.value,placeholder:m(`localSource`),onChange:j},{default:T(()=>[(v(!0),t(O,null,w(d(_).value.value?.candidates??[],e=>(v(),u(d(Y),{key:e.property,label:`${e.name} · ${e.physical_property}`,value:e.property},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`disabled`,`placeholder`]),c(d(G),{label:m(`maximumAge`)},{default:T(()=>[c(d(q),{modelValue:k.value.protection.maximum_age_seconds,"onUpdate:modelValue":i[3]||=e=>k.value.protection.maximum_age_seconds=e,disabled:n.disabled,controls:!1,min:1},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),(v(!0),t(O,null,w(d(_).value.value?.reasons??[],e=>(v(),u(d(K),{key:e,title:e,type:`warning`,closable:!1},null,8,[`title`]))),128)),d(_).error.value?(v(),u(d(K),{key:1,title:d(_).error.value,type:`error`,closable:!1},null,8,[`title`])):x(``,!0),k.value.protection.source_property&&!d(_).loading.value&&!b.value?(v(),u(d(K),{key:2,title:m(`sourceMismatch`),type:`warning`,closable:!1},null,8,[`title`])):x(``,!0),b.value?(v(),t(`details`,it,[r(`summary`,null,h(m(`snapshot`)),1),r(`pre`,at,h(JSON.stringify(b.value.snapshot,null,2)),1)])):x(``,!0)],64)):x(``,!0)],64)):x(``,!0),k.value.retained?(v(),t(O,{key:4},[r(`p`,null,h(m(`observed`))+`: `+h(E.value.activity)+` · `+h(m(`pendingOn`))+`: `+h(n.runtime?.pending_on??`unknown`),1),r(`p`,null,h(m(`qualification`))+`: `+h(E.value.qualification??`unknown`),1),r(`p`,null,h(m(`qualificationHelp`)),1),r(`p`,null,h(m(`activitySample`))+`: `+h(E.value.sampledAt??`—`)+` · `+h(m(`activityExpiry`))+`: `+h(E.value.expiresAt??`—`),1),r(`p`,null,h(m(`reading`))+`: `+h(D.value.temperature===null?m(`unavailable`):`${D.value.temperature} °C`)+` · `+h(D.value.status)+` · `+h(n.runtime?.protection?.quality??`unavailable`)+` · `+h(D.value.age??`—`)+` s `,1),r(`p`,null,h(m(`cutoff`))+`: `+h(n.runtime?.protection?.effective_cutoff??`—`)+` °C · `+h(m(`latched`))+`: `+h(D.value.status===`fresh`&&D.value.temperature!==null?n.runtime?.protection?.latched??`unknown`:`unknown`),1),r(`p`,null,h(m(`release`))+`: `+h(n.runtime?.release_pending??`unknown`)+` · `+h(n.runtime?.release_attempts??`—`)+` · `+h(n.runtime?.next_release_at??`—`)+` · `+h(m(`releaseProven`))+`: `+h(n.runtime?.release_proven??`unknown`)+` · `+h(m(`lastOff`))+`: `+h(n.runtime?.last_verified_off_at??`—`),1),r(`p`,null,h(m(`generation`))+`: `+h(k.value.retained.qualification_generation??`—`)+` · r`+h(k.value.retained.revision),1),(v(!0),t(O,null,w([...n.runtime?.protection?.reasons??[],...n.runtime?.fault?[n.runtime.fault]:[]],e=>(v(),u(d(K),{key:e,title:e,type:`warning`,closable:!1},null,8,[`title`]))),128)),r(`details`,null,[r(`summary`,null,h(m(`proof`)),1),r(`pre`,null,h(JSON.stringify(n.runtime?.release_evidence??k.value.retained.release_evidence,null,2)),1)]),c(Xe,{claim:k.value.retained,"configuration-revision":n.configurationRevision,disabled:n.disabled||n.setupDisabled,"requested-limit":n.requestedLimit,onChanged:i[4]||=e=>l(`changed`)},null,8,[`claim`,`configuration-revision`,`disabled`,`requested-limit`]),k.value.retained.state===`reserved`?x(``,!0):(v(),u(et,{key:0,claim:k.value.retained,controller:n.controller,"configuration-revision":n.configurationRevision,disabled:n.disabled||n.setupDisabled,onChanged:i[5]||=e=>l(`changed`)},null,8,[`claim`,`controller`,`configuration-revision`,`disabled`]))],64)):x(``,!0)]),_:1}))}}),st={"data-test-id":`cooling-policy-editor`},ct={key:0},lt={key:1},ut=a({__name:`virtual-cooling-policy-editor`,props:o({disabled:{type:Boolean}},{draft:{required:!0},draftModifiers:{}}),emits:[`update:draft`],setup(e){let n=e,a=S(e,`draft`),{t:o}=p(),s=i(()=>a.value.actuators.some(e=>!!e.retained?.cooling_protection));function l(e){n.disabled||s.value||(a.value.policy.cooling=e===!0?{schemaVersion:1,marginC:null,recoveryHysteresisC:null,absoluteMinimumC:null}:null)}return _(()=>[!!a.value.policy.cooling,a.value.actuators.map(e=>[e.role,e.source_property])],()=>{if(a.value.policy.cooling)for(let e of a.value.actuators.filter(e=>e.role===`cooling`))e.cooling_protection??={schemaVersion:z.Value1,purpose:R.cooled_surface,dew_point_property:null,surface_property:null,maximum_age_seconds:60}},{immediate:!0}),(n,i)=>(v(),t(`section`,st,[r(`h3`,null,h(d(o)(`devicesVirtualPlugin.dewPoint.cooling`)),1),c(d(K),{title:d(o)(`devicesVirtualPlugin.dewPoint.installation`),type:`warning`,closable:!1},null,8,[`title`]),c(d(H),{"model-value":!!a.value.policy.cooling,disabled:e.disabled||s.value,onChange:l},null,8,[`model-value`,`disabled`]),a.value.policy.cooling?(v(),t(O,{key:0},[c(d(G),{label:d(o)(`devicesVirtualPlugin.dewPoint.margin`)},{default:T(()=>[c(d(q),{modelValue:a.value.policy.cooling.marginC,"onUpdate:modelValue":i[0]||=e=>a.value.policy.cooling.marginC=e,disabled:e.disabled,min:.01,max:60},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),c(d(G),{label:d(o)(`devicesVirtualPlugin.dewPoint.hysteresis`)},{default:T(()=>[c(d(q),{modelValue:a.value.policy.cooling.recoveryHysteresisC,"onUpdate:modelValue":i[1]||=e=>a.value.policy.cooling.recoveryHysteresisC=e,disabled:e.disabled,min:.01,max:60},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),c(d(G),{label:d(o)(`devicesVirtualPlugin.dewPoint.absoluteMinimum`)},{default:T(()=>[c(d(q),{modelValue:a.value.policy.cooling.absoluteMinimumC,"onUpdate:modelValue":i[2]||=e=>a.value.policy.cooling.absoluteMinimumC=e,disabled:e.disabled,min:-44.99,max:60},null,8,[`modelValue`,`disabled`])]),_:1},8,[`label`]),(v(!0),t(O,null,w(a.value.actuators.filter(e=>e.role===`cooling`),n=>(v(),t(`section`,{key:n.retained?.id??n.source_property??``},[r(`strong`,null,h(n.retained?.physical_identity??n.source_property),1),(v(!0),t(O,null,w(n.retained?.cooling_diagnostics?.reasons??[],e=>(v(),t(`p`,{key:e},h(e),1))),128)),n.cooling_protection?(v(),t(O,{key:0},[c(d(G),{label:d(o)(`devicesVirtualPlugin.dewPoint.title`)},{default:T(()=>[c(d(A),{modelValue:n.cooling_protection.dew_point_property,"onUpdate:modelValue":e=>n.cooling_protection.dew_point_property=e,"data-test-id":`cooling-dew-point`,disabled:e.disabled},null,8,[`modelValue`,`onUpdate:modelValue`,`disabled`])]),_:2},1032,[`label`]),n.retained?.cooling_protection?(v(),t(`p`,ct,h(d(o)(`devicesVirtualPlugin.dewPoint.retained`))+`: `+h(n.retained.cooling_protection.dew_point_identity),1)):x(``,!0),c(d(G),{label:d(o)(`devicesVirtualPlugin.dewPoint.surface`)},{default:T(()=>[c(d(A),{modelValue:n.cooling_protection.surface_property,"onUpdate:modelValue":e=>n.cooling_protection.surface_property=e,"data-test-id":`cooling-surface`,disabled:e.disabled},null,8,[`modelValue`,`onUpdate:modelValue`,`disabled`])]),_:2},1032,[`label`]),n.retained?.cooling_protection?(v(),t(`p`,lt,h(d(o)(`devicesVirtualPlugin.dewPoint.retained`))+`: `+h(n.retained.cooling_protection.surface_identity),1)):x(``,!0),c(d(G),{label:d(o)(`devicesVirtualPlugin.measurement.maximumAge`)},{default:T(()=>[c(d(q),{modelValue:n.cooling_protection.maximum_age_seconds,"onUpdate:modelValue":e=>n.cooling_protection.maximum_age_seconds=e,min:1,max:86400,disabled:e.disabled},null,8,[`modelValue`,`onUpdate:modelValue`,`disabled`])]),_:2},1032,[`label`])],64)):x(``,!0)]))),128))],64)):x(``,!0)]))}});function dt(e,t){let n=l(null),r=m(null),a=m(null),o=i(()=>a.value??r.value),s=m(!1),c=m(!1),u=m(!1),d,f=0,p=0,h=!1,g=0,v=()=>{d?.abort(),f++,u.value=!1,s.value=!1},y=async()=>{if(c.value||h||!e.value)return;let i=e.value,a=++f;u.value=!1,s.value=!0;try{d?.abort(),d=new AbortController;let o=await t.read(i,d.signal);if(h||a!==f||i!==e.value)return;if(o.comfort.controller!==i)throw Error(`controller_conflict`);if(o.comfort.revision<p)return;n.value=o,r.value=null,u.value=!0}catch(e){!h&&a===f&&(r.value=String(e))}finally{a===f&&(s.value=!1)}};return _(e,()=>{v(),g++,c.value=!1,n.value=null,a.value=null,r.value=null,p=0,y()},{flush:`sync`}),{snapshot:n,error:o,loading:s,pending:c,ready:u,canAct:i(()=>u.value&&!c.value),reload:y,invalidate:v,edit:()=>{v(),y()},act:async i=>{if(!u.value||c.value||!n.value)return!1;let o=structuredClone(n.value.comfort),s=structuredClone(i),l=e.value,d=++g;v(),c.value=!0,a.value=null,r.value=null;let p=f,m=!1,_=!1;try{await t.write(l,o,s),m=!0}catch(t){!h&&d===g&&l===e.value&&(a.value=String(t))}finally{!h&&d===g&&l===e.value&&(_=p!==f,c.value=!1,await y())}return m&&!_&&!h&&d===g&&l===e.value},dispose:()=>{h=!0,v(),g++},serverRevision:e=>{p=Math.max(p,e),(n.value?.comfort.revision??-1)<p&&(u.value=!1,s.value||y())}}}var ft=`/plugins/devices-virtual/producers/thermostats/{id}`,pt=e=>Error(typeof e==`object`&&e&&`message`in e?String(e.message):`Thermostat request failed`);function mt(e){return{async read(t,n){let r={path:{id:t}};for(let t=0;;t++){let[i,a,o]=await Promise.all([e.client.GET(`${ft}/comfort`,{params:r,signal:n}),e.client.GET(ft,{params:r,signal:n}),e.client.GET(`${ft}/runtime`,{params:r,signal:n})]);if(!i.data||!a.data||!o.data)throw pt(i.error??a.error??o.error);let s=i.data.data.revision;if(a.data.data.revision!==s||o.data.data.configuration_revision!==s||a.data.data.graph_revision!==i.data.data.graph_revision){if(t===0&&!n?.aborted)continue;throw Error(`revision_conflict`)}return{comfort:i.data.data,configuration:a.data.data,runtime:o.data.data}}},async write(t,n,r){let i={path:{id:t}},a={expected_revision:n.revision,expected_graph_revision:n.graph_revision},o;switch(r.kind){case`configure`:o=await e.client.PUT(`${ft}/comfort`,{params:i,body:{...r.input,...a}});break;case`selection`:o=await e.client.POST(`${ft}/comfort/selection`,{params:i,body:{...a,preset:r.preset,clear_user_off:r.clear_user_off}});break;case`override`:o=await e.client.POST(`${ft}/comfort/override`,{params:i,body:{...a,preset:r.preset,setpoints:r.setpoints,expires_at:r.expires_at}});break;case`cancel`:o=await e.client.POST(`${ft}/comfort/override/cancel`,{params:i,body:{...a,override_id:r.override_id}});break}if(!o.data)throw pt(o.error)}}}var ht=e=>typeof e==`number`&&Number.isFinite(e),gt=(e,t)=>{let n=e?Date.parse(e):NaN;return Number.isFinite(n)?Math.max(0,Math.ceil((n-t)/1e3)):null},_t={key:0},vt={"data-test-id":`override-audit`},yt={key:0},bt=a({__name:`virtual-thermostat-comfort`,props:{deviceId:{},disabled:{type:Boolean},revision:{}},emits:[`changed`],setup(a,{emit:o}){let l=a,f=o,{t:b}=p(),S=e=>b(`devicesVirtualPlugin.comfort.${e}`),C=ce(),D=dt(e(l,`deviceId`),mt(ie())),A=D.snapshot,j=i(()=>A.value?.comfort.configuration),M=i(()=>j.value?.temporary_override),N=i(()=>M.value&&[`active`,`clock_uncertain`].includes(M.value.status)?[{id:M.value.id,revision:A.value.comfort.revision}]:[]),P=i(()=>M.value!=null&&![`active`,`expired`,`cancelled`].includes(M.value.status)),ee=i(()=>!M.value||[`active`,`clock_uncertain`,`expired`,`cancelled`].includes(M.value.status)),F=i(()=>D.canAct.value&&!l.disabled&&ee.value&&A.value?.configuration.locked===!1),I=i(()=>[`heating`,`cooling`].filter(e=>ht(A.value?.configuration.policy[`${e}Setpoint`]))),L=n({heating:{minimum:null,maximum:null},cooling:{minimum:null,maximum:null}}),R=n([`comfort`,`eco`,`away`].map(e=>({preset:e,enabled:!1,setpoints:{heating_setpoint:null,cooling_setpoint:null}}))),ne=m(!1),z=m(!1),re=m(!1),B=m(!1),V=m(!1),ae=m(!1),H=m(`manual`),U=m(`explicit`),oe=n({heating_setpoint:null,cooling_setpoint:null}),W=m(null),se=m(Date.now()),le=i(()=>gt(M.value?.expires_at,se.value)),ue=i(()=>I.value.length>0&&I.value.every(e=>ht(L[e].minimum)&&ht(L[e].maximum)&&L[e].minimum<=L[e].maximum)&&R.every(e=>!e.enabled||I.value.every(t=>ht(e.setpoints[`${t}_setpoint`])))),me=i(()=>W.value!=null&&Number.isInteger(W.value)&&W.value>=1&&W.value<=10080&&(U.value===`explicit`?I.value.every(e=>ht(oe[`${e}_setpoint`])):j.value?.presets.some(e=>e.preset===U.value)));_(A,()=>{if(!z.value){for(let e of[`heating`,`cooling`])Object.assign(L[e],j.value?.[`${e}_range`]??{minimum:null,maximum:null});for(let e of R){let t=j.value?.presets.find(t=>t.preset===e.preset);e.enabled=t!==void 0,Object.assign(e.setpoints,t?.setpoints??{heating_setpoint:null,cooling_setpoint:null})}ne.value=j.value?.automation_enabled===!0}re.value||(H.value=j.value?.selected_preset??`manual`)}),_(()=>l.deviceId,()=>{z.value=!1,re.value=!1,B.value=!1,V.value=!1,ae.value=!1,U.value=`explicit`,oe.heating_setpoint=null,oe.cooling_setpoint=null,W.value=null}),_(()=>[l.disabled,l.revision],()=>{D.invalidate(),D.reload()});let he=()=>{z.value=!0,D.edit()},ge=()=>{re.value=!0,D.edit()},_e=()=>{B.value=!0,D.edit()},ve=()=>{z.value=!1,re.value=!1,B.value=!1,D.reload()},ye=()=>f(`changed`),be=async()=>{let e={heating_range:I.value.includes(`heating`)?{...L.heating}:null,cooling_range:I.value.includes(`cooling`)?{...L.cooling}:null,presets:R.filter(e=>e.enabled).map(e=>({preset:e.preset,setpoints:{heating_setpoint:I.value.includes(`heating`)?e.setpoints.heating_setpoint:null,cooling_setpoint:I.value.includes(`cooling`)?e.setpoints.cooling_setpoint:null}})),automation_enabled:ne.value};await D.act({kind:`configure`,input:e})&&(z.value=!1,ye())},xe=async e=>{await D.act({kind:`selection`,preset:H.value===`manual`?null:H.value,clear_user_off:e})&&(re.value=!1,ye())},Se=async()=>{await D.act({kind:`selection`,preset:j.value?.selected_preset??null,clear_user_off:!0})&&ye()},Ce=async()=>{me.value&&await D.act({kind:`override`,preset:U.value===`explicit`?null:U.value,setpoints:U.value===`explicit`?{heating_setpoint:I.value.includes(`heating`)?oe.heating_setpoint:null,cooling_setpoint:I.value.includes(`cooling`)?oe.cooling_setpoint:null}:null,expires_at:new Date(Date.now()+W.value*6e4).toISOString()})&&(B.value=!1,ye())},X=async(e,t)=>{if(M.value?.id!==e||A.value?.comfort.revision!==t){D.invalidate(),D.reload();return}await D.act({kind:`cancel`,override_id:e})&&ye()},we=()=>{D.invalidate(),D.reload()},Te=()=>D.invalidate(),Ee=e=>{e.event===`DevicesVirtualPlugin.Thermostat.RuntimeChanged`&&e.payload&&typeof e.payload==`object`&&`controller`in e.payload&&e.payload.controller===l.deviceId&&`configuration_revision`in e.payload&&typeof e.payload.configuration_revision==`number`&&D.serverRevision(e.payload.configuration_revision)},De,Oe=null,ke=0;return g(()=>{D.reload(),C.on(`event`,Ee),C.on(`connect`,we),C.on(`disconnect`,Te),De=setInterval(()=>{se.value=Date.now();let e=++ke%5==0;M.value?.status===`active`&&le.value===0&&Oe!==M.value.id?(Oe=M.value.id,we()):e&&!z.value&&!re.value&&!B.value&&!V.value&&!ae.value&&D.reload()},1e3)}),E(()=>{D.dispose(),clearInterval(De),C.off(`event`,Ee),C.off(`connect`,we),C.off(`disconnect`,Te)}),(e,n)=>(v(),u(d(fe),{"data-test-id":`thermostat-comfort`,class:`mt-4`,onFocusin:n[8]||=e=>V.value=!0,onFocusout:n[9]||=e=>V.value=!1},{header:T(()=>[s(h(S(`title`)),1)]),default:T(()=>[r(`p`,null,h(S(`help`)),1),d(D).error.value?(v(),u(d(K),{key:0,title:`${S(`error`)}: ${d(D).error.value}`,type:`error`,closable:!1},null,8,[`title`])):x(``,!0),c(d(y),{disabled:d(D).pending.value,onClick:ve},{default:T(()=>[s(h(S(`reload`)),1)]),_:1},8,[`disabled`]),d(A)?(v(),t(O,{key:1},[r(`p`,null,h(S(`requested`))+`: `+h(d(A).configuration.requested_mode),1),r(`p`,null,h(S(`activity`))+`: `+h(d(A).runtime.branches.map(e=>`${e.role}: ${e.activity}${e.fault?` (${e.fault})`:``}`).join(` · `)),1),(v(!0),t(O,null,w(d(A).runtime.reasons,e=>(v(),t(`p`,{key:e},h(e),1))),128)),r(`p`,null,h(S(`effective`))+`: `+h(d(A).comfort.effective.source)+` / `+h(d(A).comfort.effective.preset??S(`manual`))+` · `+h(d(A).comfort.effective.heating_setpoint??`—`)+` / `+h(d(A).comfort.effective.cooling_setpoint??`—`)+` °C `,1),r(`p`,null,h(S(`clockPolicy`))+`: `+h(d(A).comfort.clock_policy),1),j.value?x(``,!0):(v(),t(`p`,_t,h(S(`unconfigured`)),1)),P.value?(v(),u(d(K),{key:1,title:S(`uncertain`),type:`warning`,closable:!1},null,8,[`title`])):x(``,!0),j.value?.user_off===!0?(v(),u(d(K),{key:2,title:S(`offHeld`),type:`warning`,closable:!1},null,8,[`title`])):x(``,!0),M.value?(v(),t(O,{key:3},[r(`dl`,vt,[r(`dt`,null,h(S(`status`)),1),r(`dd`,null,h(M.value.status),1),r(`dt`,null,h(S(`source`))+` / `+h(S(`actor`)),1),r(`dd`,null,h(M.value.source)+` / `+h(M.value.actor_id),1),r(`dt`,null,h(S(`identity`))+` / `+h(S(`revision`)),1),r(`dd`,null,h(M.value.id)+` / `+h(M.value.revision),1),r(`dt`,null,h(S(`expires`)),1),r(`dd`,null,h(M.value.expires_at),1)]),M.value.status===`active`?(v(),t(`p`,yt,h(S(`remaining`))+`: `+h(le.value??`—`)+` s. `+h(S(`expiryHint`)),1)):x(``,!0),(v(!0),t(O,null,w(N.value,e=>(v(),u(d(y),{key:e.id,"data-test-id":`cancel-override`,disabled:!F.value,onClick:t=>X(e.id,e.revision)},{default:T(()=>[s(h(S(`cancel`)),1)]),_:1},8,[`disabled`,`onClick`]))),128))],64)):x(``,!0),c(d(te),null,{default:T(()=>[s(h(S(`configure`)),1)]),_:1}),r(`p`,null,h(S(`configHint`)),1),c(d(de),{disabled:a.disabled||d(D).pending.value,"label-position":`top`,onSubmit:n[1]||=k(()=>{},[`prevent`])},{default:T(()=>[(v(!0),t(O,null,w(I.value,e=>(v(),t(`div`,{key:e},[r(`p`,null,h(S(e))+` (°C)`,1),c(d(G),{label:S(`minimum`)},{default:T(()=>[c(d(q),{modelValue:L[e].minimum,"onUpdate:modelValue":t=>L[e].minimum=t,"aria-label":`${S(e)} ${S(`minimum`)}`,onChange:he},null,8,[`modelValue`,`onUpdate:modelValue`,`aria-label`])]),_:2},1032,[`label`]),c(d(G),{label:S(`maximum`)},{default:T(()=>[c(d(q),{modelValue:L[e].maximum,"onUpdate:modelValue":t=>L[e].maximum=t,"aria-label":`${S(e)} ${S(`maximum`)}`,onChange:he},null,8,[`modelValue`,`onUpdate:modelValue`,`aria-label`])]),_:2},1032,[`label`])]))),128)),(v(!0),t(O,null,w(R,e=>(v(),t(`div`,{key:e.preset},[c(d(pe),{modelValue:e.enabled,"onUpdate:modelValue":t=>e.enabled=t,onChange:he},{default:T(()=>[s(h(S(e.preset)),1)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`]),(v(!0),t(O,null,w(e.enabled?I.value:[],t=>(v(),u(d(G),{key:t,label:`${S(e.preset)} · ${S(t)} (°C)`},{default:T(()=>[c(d(q),{modelValue:e.setpoints[`${t}_setpoint`],"onUpdate:modelValue":n=>e.setpoints[`${t}_setpoint`]=n,"aria-label":`${S(e.preset)} ${S(t)}`,onChange:he},null,8,[`modelValue`,`onUpdate:modelValue`,`aria-label`])]),_:2},1032,[`label`]))),128))]))),128)),c(d(pe),{modelValue:ne.value,"onUpdate:modelValue":n[0]||=e=>ne.value=e,onChange:he},{default:T(()=>[s(h(S(`automation`)),1)]),_:1},8,[`modelValue`]),r(`p`,null,h(S(`serverValidation`)),1),c(d(y),{"data-test-id":`save-comfort`,disabled:!F.value||!ue.value,onClick:be},{default:T(()=>[s(h(S(`save`)),1)]),_:1},8,[`disabled`])]),_:1},8,[`disabled`]),j.value?(v(),t(O,{key:4},[c(d(te),null,{default:T(()=>[s(h(S(`selected`)),1)]),_:1}),c(d(J),{modelValue:H.value,"onUpdate:modelValue":n[2]||=e=>H.value=e,disabled:!F.value,"aria-label":S(`selected`),onChange:ge,onVisibleChange:n[3]||=e=>ae.value=e},{default:T(()=>[c(d(Y),{value:`manual`,label:S(`manual`)},null,8,[`label`]),(v(!0),t(O,null,w(j.value.presets,e=>(v(),u(d(Y),{key:e.preset,value:e.preset,label:S(e.preset)},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`,`disabled`,`aria-label`]),c(d(y),{disabled:!F.value,onClick:n[4]||=e=>xe(!1)},{default:T(()=>[s(h(S(`choose`)),1)]),_:1},8,[`disabled`]),j.value.user_off===!0?(v(),u(d(y),{key:0,"data-test-id":`clear-user-off`,disabled:!F.value,onClick:Se},{default:T(()=>[s(h(S(`clearOff`)),1)]),_:1},8,[`disabled`])):x(``,!0),r(`p`,null,h(S(`offClearHelp`)),1),c(d(te),null,{default:T(()=>[s(h(S(`override`)),1)]),_:1}),c(d(J),{modelValue:U.value,"onUpdate:modelValue":n[5]||=e=>U.value=e,disabled:a.disabled||d(D).pending.value,"aria-label":S(`override`),onChange:_e,onVisibleChange:n[6]||=e=>ae.value=e},{default:T(()=>[c(d(Y),{value:`explicit`,label:S(`explicit`)},null,8,[`label`]),(v(!0),t(O,null,w(j.value.presets,e=>(v(),u(d(Y),{key:e.preset,value:e.preset,label:S(e.preset)},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`,`disabled`,`aria-label`]),c(d(de),{disabled:a.disabled||d(D).pending.value,"label-position":`top`},{default:T(()=>[(v(!0),t(O,null,w(U.value===`explicit`?I.value:[],e=>(v(),u(d(G),{key:e,label:`${S(e)} (°C)`},{default:T(()=>[c(d(q),{modelValue:oe[`${e}_setpoint`],"onUpdate:modelValue":t=>oe[`${e}_setpoint`]=t,"aria-label":`${S(`override`)} ${S(e)}`,onChange:_e},null,8,[`modelValue`,`onUpdate:modelValue`,`aria-label`])]),_:2},1032,[`label`]))),128)),c(d(G),{label:S(`duration`)},{default:T(()=>[c(d(q),{modelValue:W.value,"onUpdate:modelValue":n[7]||=e=>W.value=e,min:1,max:10080,"aria-label":S(`duration`),onChange:_e},null,8,[`modelValue`,`aria-label`])]),_:1},8,[`label`])]),_:1},8,[`disabled`]),c(d(y),{"data-test-id":`create-override`,disabled:!F.value||!me.value,onClick:Ce},{default:T(()=>[s(h(S(`create`)),1)]),_:1},8,[`disabled`])],64)):x(``,!0)],64)):x(``,!0)]),_:1}))}}),xt={key:1,class:`h-20`},St={key:1,class:`mt-3 space-y-2`},Ct={class:`grid grid-cols-2 gap-3`},wt={key:0,class:`grid grid-cols-2 gap-3`},Tt={key:1,class:`grid grid-cols-2 gap-3`},Et={class:`grid grid-cols-2 gap-3`},Dt={class:`flex items-center justify-between mb-2`},Ot={key:0},kt={key:0,class:`grid grid-cols-2 gap-3`},At={class:`flex gap-2`},jt={key:3},Mt={key:4,class:`text-sm`},Nt={class:`flex gap-2`},Pt=a({__name:`virtual-thermostat-editor`,props:{deviceId:{},create:{type:Boolean}},emits:[`created`],setup(e,{emit:n}){let a=e,o=n,l=ie(),f=ce(),b=!0,{profile:S}=ve(),k=i(()=>[`owner`,`admin`].includes(S.value?.role??``)),{t:M}=p(),N=e=>M(`devicesVirtualPlugin.members.${e}`),ee=m(!1),F=m(Date.now()),I=m(null),L=new ze,R=[],z=je(i(()=>a.deviceId&&I.value?`${a.deviceId}:${I.value.revision}`:``),async(e,t)=>{let{data:n,error:r}=await l.client.GET(`/plugins/devices-virtual/producers/thermostats/{id}/runtime`,{params:{path:{id:a.deviceId}},signal:t});if(!n)throw Error(JSON.stringify(r));if(n.data.configuration_revision!==I.value?.revision)throw Error(`configuration_revision_changed`);return{snapshot:n.data,receivedAt:Date.now()}});_([I,z.value],([e,t])=>{t&&(R=t.snapshot.branches.filter(e=>e.claim_state!==`released`).map(e=>e.claim)),e&&L.retain([...e.actuators.filter(e=>e.state!==`released`).map(e=>e.id),...R])});let re=setInterval(()=>{F.value=Date.now(),L.expire(F.value)},1e3),B=()=>z.invalidate(),V=()=>{z.reload()},ae=e=>{e.event===`DevicesVirtualPlugin.Thermostat.RuntimeChanged`&&e.payload&&typeof e.payload==`object`&&`controller`in e.payload&&e.payload.controller===a.deviceId&&V()};g(()=>{f.on(`event`,ae),f.on(`connect`,V),f.on(`disconnect`,B)}),E(()=>{b=!1,clearInterval(re),Z++,f.off(`event`,ae),f.off(`connect`,V),f.off(`disconnect`,B)});let H=m(null),U=m(Ne()),W=m(``),se=m(null),ue=``,he=()=>{let e=`${U.value.policy.heatingSetpoint!==null}:${U.value.policy.coolingSetpoint!==null}`;return(!se.value||ue!==e)&&(se.value=Be(W.value,U.value.policy.heatingSetpoint!==null,U.value.policy.coolingSetpoint!==null),ue=e),se.value.device.name=W.value.trim(),se.value},ge=()=>Ie(a.create?{...U.value,settings:he().settings}:U.value,I.value?.revision??0,I.value?.graph_revision??H.value?.graph_revision),_e=m(!1),be=m(!1),xe=m(!1),Se=i(()=>be.value||xe.value),Ce=m(null),X=m(null),we=Me(()=>JSON.stringify({draft:U.value,name:W.value,create:a.create,deviceId:a.deviceId,revision:I.value?.revision}),[U,W,()=>a.create,()=>a.deviceId,()=>I.value?.revision],()=>{H.value=null,xe.value=!1}),Te=we.canSave,Ee=i(()=>[...a.create&&!W.value.trim()?[`Enter a thermostat name.`]:[],...I.value?.sources.some(e=>e.role===`floor`)&&!U.value.sources.some(e=>e.role===`floor`)&&!ee.value?[N(`removeLegacyGuard`)]:[],...ge().errors.map(e=>e.startsWith(`devicesVirtualPlugin.`)?M(e):e)]),De=Object.values(ne),Oe=Object.values(j),ke=[{key:`sampleWindowMs`,label:`Sample window (ms)`},{key:`minimumSamples`,label:`Minimum samples`},{key:`minimumSpanMs`,label:`Minimum span (ms)`},{key:`maximumSampleAgeMs`,label:`Maximum sample age (ms)`},{key:`slopeThresholdCPerMinute`,label:`Slope threshold (°C/min)`},{key:`confirmationMs`,label:`Confirmation (ms)`},{key:`recoveryMs`,label:`Recovery (ms)`},{key:`maximumPauseMs`,label:`Maximum pause (ms)`},{key:`cooldownMs`,label:`Cooldown (ms)`}],Z=0,Ae=`/${D}/${ye}/producers/thermostats/{id}`,Q=async()=>{if(a.create||!a.deviceId)return;let e=++Z;be.value=!1,_e.value=!0,Ce.value=null,we.invalidate();try{let{data:t,error:n,response:r}=await l.client.GET(Ae,{params:{path:{id:a.deviceId}}});if(!b||e!==Z)return;r.status===404?(I.value=null,U.value=Ne()):t?(I.value=t.data,U.value=Pe(t.data)):Ce.value=oe(n,`Could not load thermostat configuration.`)}catch(t){e===Z&&(Ce.value=String(t))}finally{e===Z&&(_e.value=!1)}},$=e=>{if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`)return t;if(Array.isArray(t))return t.join(`; `)}return`Thermostat request failed.`},Le=async()=>{if(be.value||!k.value)return;let e=ge();if(!e.request)return;let t={create:a.create,configuration:e.request,device:a.create?he().device:null,deviceId:a.deviceId};X.value=null,await we.execute(t,async e=>{let{data:t,error:n}=e.create?await l.client.POST(`/${D}/${ye}/producers/thermostats/draft-preview`,{body:{device:e.device,configuration:e.configuration}}):await l.client.POST(`${Ae}/preview`,{params:{path:{id:e.deviceId}},body:e.configuration});if(!t)throw Error($(n));return t.data},{success:e=>H.value=e,error:e=>X.value=$(e),pending:e=>xe.value=e})},Re=async()=>{if(!k.value||!H.value||!we.canSave.value||Se.value)return;let e=ge();if(!e.request)return;let t=a.deviceId,n=++Z,r=JSON.stringify(U.value);be.value=!0,X.value=null;try{if(a.create){let{data:t,error:r}=await l.client.POST(`/${D}/${ye}/producers/thermostats`,{body:{device:he().device,configuration:e.request}});if(!b||n!==Z)return;t?o(`created`,t.data.device.id):X.value=$(r);return}let{data:i,error:s}=await l.client.PUT(Ae,{params:{path:{id:a.deviceId}},body:e.request});if(!b||n!==Z||t!==a.deviceId)return;i?(I.value=i.data,JSON.stringify(U.value)===r&&(U.value=Pe(i.data)),H.value=null):X.value=$(s)}catch(e){b&&n===Z&&(X.value=$(e))}finally{b&&n===Z&&(be.value=!1)}},Ve=async()=>{let e=a.deviceId;if(!k.value||!I.value||!e||Se.value)return;let t=++Z,n=JSON.stringify(Pe(I.value));be.value=!0,X.value=null;try{let{data:r,error:i}=await l.client.POST(`${Ae}/release`,{params:{path:{id:e}},body:{expected_revision:I.value.revision}});if(!b||t!==Z||e!==a.deviceId)return;r?(I.value=r.data,U.value=JSON.stringify(U.value)===n?Pe(r.data):Fe(U.value,r.data),we.invalidate(),H.value=null,z.invalidate(),z.reload()):X.value=$(i)}catch(e){b&&t===Z&&(X.value=$(e))}finally{b&&t===Z&&(be.value=!1)}},He=e=>{e!==!0&&(U.value.actuators.some(e=>!!e.protection)||U.value.sources.some(e=>e.role===`floor`))||(U.value.policy.floor=e===!0?{limit:null,recoveryHysteresis:null}:null)},Ue=e=>{U.value.heuristic=e===!0?Object.fromEntries(ke.map(e=>[e.key,null])):null},We=e=>{U.value.sources.push({role:e,source_property:null,maximum_age_seconds:null})},Ge=e=>{U.value.actuators.length>=8||!k.value||U.value.actuators.push({role:e,source_property:``,lease_seconds:null})},Ke=()=>{U.value.settings.push({setting:j.heating_setpoint,property:``})},qe=e=>e==null?``:typeof e==`string`?e:JSON.stringify(e),Je=(e,t,n)=>{try{e[t]=JSON.parse(n)}catch{e[t]=n}};return _(()=>a.deviceId,()=>{L.clear(),R=[],we.invalidate(),Q()}),g(()=>{a.create||Q()}),(n,i)=>(v(),t(O,null,[k.value?(v(),u(d(fe),{key:0,shadow:`never`,class:`mt-2`,"data-test-id":`virtual-thermostat-editor`},{header:T(()=>[r(`strong`,null,h(e.create?`Create virtual thermostat`:`Thermostat configuration`),1)]),default:T(()=>[c(d(K),{type:`info`,closable:!1,title:`Draft controller`,description:`Configuration and reservations persist, but heating and cooling remain unavailable until hardware qualification and runtime reconciliation.`}),Ce.value?(v(),u(d(K),{key:0,type:`error`,closable:!1,title:Ce.value,class:`mt-2`},null,8,[`title`])):x(``,!0),_e.value?C((v(),t(`div`,xt,null,512)),[[d(me),!0]]):(v(),t(O,{key:2},[e.create?(v(),u(d(G),{key:0,label:`Thermostat name`,class:`mt-3`},{default:T(()=>[c(d(A),{modelValue:W.value,"onUpdate:modelValue":i[0]||=e=>W.value=e},null,8,[`modelValue`])]),_:1})):x(``,!0),I.value?(v(),t(`div`,St,[r(`p`,null,`Configuration revision `+h(I.value.revision)+` · graph revision `+h(I.value.graph_revision)+` · `+h(I.value.readiness),1),(v(!0),t(O,null,w(I.value.reasons,e=>(v(),u(d(K),{key:e,type:`warning`,closable:!1,title:e},null,8,[`title`]))),128)),(v(!0),t(O,null,w(I.value.actuators,e=>(v(),u(d(K),{key:e.id,type:e.state===`reserved`?`info`:`warning`,closable:!1,title:`${e.role}: ${e.state} · ${e.physical_identity}`,description:e.reason??void 0},null,8,[`type`,`title`,`description`]))),128)),(v(!0),t(O,null,w(I.value.sources.filter(e=>!e.source_property),e=>(v(),u(d(K),{key:e.id,type:`warning`,closable:!1,title:`${e.role}: missing ${e.source_identity}`},null,8,[`title`]))),128))])):x(``,!0),c(d(te),{"content-position":`left`},{default:T(()=>[...i[19]||=[s(`Requested settings`,-1)]]),_:1}),c(d(de),{"label-position":`top`,class:`space-y-3`},{default:T(()=>[c(d(G),{label:`Requested mode (intent, not reported activity)`},{default:T(()=>[c(d(J),{modelValue:U.value.requested_mode,"onUpdate:modelValue":i[1]||=e=>U.value.requested_mode=e,class:`w-40`},{default:T(()=>[(v(!0),t(O,null,w(d(De),e=>(v(),u(d(Y),{key:e,value:e,label:e},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`])]),_:1}),r(`div`,Ct,[c(d(G),{label:`Heating setpoint (°C)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.heatingSetpoint,"onUpdate:modelValue":i[2]||=e=>U.value.policy.heatingSetpoint=e,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Cooling setpoint (°C)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.coolingSetpoint,"onUpdate:modelValue":i[3]||=e=>U.value.policy.coolingSetpoint=e,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Cold tolerance (°C)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.coldTolerance,"onUpdate:modelValue":i[4]||=e=>U.value.policy.coldTolerance=e,min:0,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Hot tolerance (°C)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.hotTolerance,"onUpdate:modelValue":i[5]||=e=>U.value.policy.hotTolerance=e,min:0,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Neutral heat/cool margin (°C)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.neutralMargin,"onUpdate:modelValue":i[6]||=e=>U.value.policy.neutralMargin=e,min:0,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Minimum OFF interval (ms)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.minimumOffMs,"onUpdate:modelValue":i[7]||=e=>U.value.policy.minimumOffMs=e,min:0,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Changeover interval (ms)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.changeoverMs,"onUpdate:modelValue":i[8]||=e=>U.value.policy.changeoverMs=e,min:0,controls:!1},null,8,[`modelValue`])]),_:1})]),c(d(pe),{"model-value":U.value.policy.floor!==null,onChange:He},{default:T(()=>[...i[20]||=[s(` Protect heating with floor temperature `,-1)]]),_:1},8,[`model-value`]),U.value.policy.floor?(v(),t(`div`,wt,[c(d(G),{label:`Floor maximum (°C)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.floor.limit,"onUpdate:modelValue":i[9]||=e=>U.value.policy.floor.limit=e,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Floor recovery hysteresis (°C)`},{default:T(()=>[c(d(q),{modelValue:U.value.policy.floor.recoveryHysteresis,"onUpdate:modelValue":i[10]||=e=>U.value.policy.floor.recoveryHysteresis=e,controls:!1},null,8,[`modelValue`])]),_:1})])):x(``,!0),c(d(pe),{"model-value":U.value.heuristic!==null,onChange:Ue},{default:T(()=>[...i[21]||=[s(` Use ambient trend to infer open window without contact `,-1)]]),_:1},8,[`model-value`]),U.value.heuristic?(v(),t(`div`,Tt,[(v(),t(O,null,w(ke,e=>c(d(G),{key:e.key,label:e.label},{default:T(()=>[c(d(q),{modelValue:U.value.heuristic[e.key],"onUpdate:modelValue":t=>U.value.heuristic[e.key]=t,controls:!1},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`label`])),64))])):x(``,!0),r(`div`,Et,[c(d(G),{label:`Contact opening debounce (ms)`},{default:T(()=>[c(d(q),{modelValue:U.value.contact_opening_ms,"onUpdate:modelValue":i[11]||=e=>U.value.contact_opening_ms=e,min:0,controls:!1},null,8,[`modelValue`])]),_:1}),c(d(G),{label:`Contact closing debounce (ms)`},{default:T(()=>[c(d(q),{modelValue:U.value.contact_closing_ms,"onUpdate:modelValue":i[12]||=e=>U.value.contact_closing_ms=e,min:0,controls:!1},null,8,[`modelValue`])]),_:1})])]),_:1}),c(d(te),{"content-position":`left`},{default:T(()=>[...i[22]||=[s(`Temperature and contact sources`,-1)]]),_:1}),I.value?.sources.some(e=>e.role===`floor`)?(v(),u(d(pe),{key:2,modelValue:ee.value,"onUpdate:modelValue":i[13]||=e=>ee.value=e},{default:T(()=>[s(h(N(`removeLegacyGuard`)),1)]),_:1},8,[`modelValue`])):x(``,!0),i[33]||=r(`p`,{class:`text-sm`},`Select original-age-qualified sources. Floor is an independent Celsius protection input; contact is optional.`,-1),(v(!0),t(O,null,w(U.value.sources,(e,n)=>(v(),t(`div`,{key:e.id??n,class:`border rounded p-3 mb-2`},[r(`div`,Dt,[r(`strong`,null,[s(h(e.role)+` `,1),e.id?(v(),t(`small`,Ot,`· `+h(e.id),1)):x(``,!0)]),c(d(y),{type:`danger`,link:``,disabled:e.role===`floor`&&!!I.value?.sources.some(e=>e.role===`floor`)&&!ee.value,onClick:e=>U.value.sources.splice(n,1)},{default:T(()=>[...i[23]||=[s(` Remove `,-1)]]),_:1},8,[`disabled`,`onClick`])]),c(Qe,{modelValue:e.source_property,"onUpdate:modelValue":t=>e.source_property=t,kind:e.role},null,8,[`modelValue`,`onUpdate:modelValue`,`kind`]),c(d(G),{label:`Maximum original sample age (seconds)`,class:`mt-2`},{default:T(()=>[c(d(q),{modelValue:e.maximum_age_seconds,"onUpdate:modelValue":t=>e.maximum_age_seconds=t,min:1,controls:!1},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),e.role===`contact`?(v(),t(`div`,kt,[c(d(G),{label:`Open value (JSON literal or text)`},{default:T(()=>[c(d(A),{"model-value":qe(e.open_value),"onUpdate:modelValue":t=>Je(e,`open_value`,t)},null,8,[`model-value`,`onUpdate:modelValue`])]),_:2},1024),c(d(G),{label:`Closed value (JSON literal or text)`},{default:T(()=>[c(d(A),{"model-value":qe(e.closed_value),"onUpdate:modelValue":t=>Je(e,`closed_value`,t)},null,8,[`model-value`,`onUpdate:modelValue`])]),_:2},1024)])):x(``,!0)]))),128)),r(`div`,At,[c(d(y),{onClick:i[14]||=e=>We(d(P).ambient)},{default:T(()=>[...i[24]||=[s(`Add ambient`,-1)]]),_:1}),c(d(y),{disabled:U.value.sources.some(e=>e.role===`floor`),onClick:i[15]||=e=>We(d(P).floor)},{default:T(()=>[...i[25]||=[s(` Add floor `,-1)]]),_:1},8,[`disabled`]),c(d(y),{disabled:U.value.sources.some(e=>e.role===`contact`),onClick:i[16]||=e=>We(d(P).contact)},{default:T(()=>[...i[26]||=[s(` Add contact `,-1)]]),_:1},8,[`disabled`])]),c(ut,{draft:U.value,"onUpdate:draft":i[17]||=e=>U.value=e,disabled:Se.value},null,8,[`draft`,`disabled`]),c(d(te),{"content-position":`left`},{default:T(()=>[s(h(N(`members`))+` · `+h(U.value.actuators.length)+`/8`,1)]),_:1}),r(`p`,null,h(N(`mandatoryHelp`)),1),r(`p`,null,h(N(`nativeUnavailable`)),1),(v(!0),t(O,null,w([d(le).heating,d(le).cooling],n=>(v(),t(`section`,{key:n},[r(`h3`,null,h(n),1),(v(!0),t(O,null,w(U.value.actuators.filter(e=>e.role===n),(t,r)=>(v(),u(ot,{key:t.retained?.id??`${n}-${r}`,member:t,parallel:U.value.actuators.filter(e=>e.role===`heating`).length>1,controller:e.deviceId,"configuration-revision":I.value?.revision??0,"requested-limit":U.value.policy.floor?.limit??null,disabled:Se.value,runtime:d(z).value.value?.snapshot.branches.find(e=>e.claim===t.retained?.id)??null,"setup-disabled":!!I.value&&JSON.stringify(U.value)!==JSON.stringify(d(Pe)(I.value)),freshness:d(L),"received-at":d(z).value.value?.receivedAt??F.value,now:F.value,onRemove:e=>U.value.actuators.splice(U.value.actuators.indexOf(t),1),onChanged:Q},null,8,[`member`,`parallel`,`controller`,`configuration-revision`,`requested-limit`,`disabled`,`runtime`,`setup-disabled`,`freshness`,`received-at`,`now`,`onRemove`]))),128)),c(d(y),{disabled:Se.value||U.value.actuators.length>=8,onClick:e=>Ge(n)},{default:T(()=>[s(h(N(`addMember`))+` · `+h(n),1)]),_:2},1032,[`disabled`,`onClick`])]))),128)),c(d(G),{label:N(`displayFloor`)},{default:T(()=>[c(d(J),{modelValue:U.value.display_floor_claim,"onUpdate:modelValue":i[18]||=e=>U.value.display_floor_claim=e,clearable:``},{default:T(()=>[(v(!0),t(O,null,w(U.value.actuators.filter(e=>e.retained?.protection),e=>(v(),u(d(Y),{key:e.retained.id,value:e.retained.id,label:`${e.role} · ${e.retained.physical_identity}`},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`])]),_:1},8,[`label`]),I.value?.released_actuators?.length?(v(),t(`details`,jt,[r(`summary`,null,h(N(`releasedHistory`)),1),(v(!0),t(O,null,w(I.value.released_actuators,e=>(v(),t(`pre`,{key:e.id},h(JSON.stringify(e,null,2)),1))),128))])):x(``,!0),c(d(te),{"content-position":`left`},{default:T(()=>[...i[27]||=[s(`Owned local command settings`,-1)]]),_:1}),e.create?(v(),t(`p`,Mt,` The controller creates local mode, setpoint and lock slots together with their registrations. `)):x(``,!0),(v(!0),t(O,null,w(e.create?[]:U.value.settings,(n,r)=>(v(),t(`div`,{key:n.setting,class:`flex items-center gap-2 mb-2`},[c(d(J),{modelValue:n.setting,"onUpdate:modelValue":e=>n.setting=e,class:`w-48`},{default:T(()=>[(v(!0),t(O,null,w(d(Oe),e=>(v(),u(d(Y),{key:e,value:e,label:e},null,8,[`value`,`label`]))),128))]),_:1},8,[`modelValue`,`onUpdate:modelValue`]),c(Qe,{modelValue:n.property,"onUpdate:modelValue":e=>n.property=e,"owner-device-id":e.deviceId,kind:`setting`},null,8,[`modelValue`,`onUpdate:modelValue`,`owner-device-id`]),c(d(y),{type:`danger`,link:``,onClick:e=>U.value.settings.splice(r,1)},{default:T(()=>[...i[28]||=[s(` Remove `,-1)]]),_:1},8,[`onClick`])]))),128)),e.create?x(``,!0):(v(),u(d(y),{key:5,onClick:Ke},{default:T(()=>[...i[29]||=[s(` Add setting `,-1)]]),_:1})),c(d(te)),(v(!0),t(O,null,w(Ee.value,e=>(v(),u(d(K),{key:e,type:`warning`,closable:!1,title:e,class:`mb-2`},null,8,[`title`]))),128)),X.value?(v(),u(d(K),{key:6,type:`error`,closable:!1,title:X.value,class:`mb-2`},null,8,[`title`])):x(``,!0),H.value?(v(),u(d(K),{key:7,type:H.value.reasons.length?`warning`:`success`,closable:!1,title:`Preview: ${H.value.readiness}; ${H.value.reasons.length} blocker(s)`,class:`mb-2`},{default:T(()=>[r(`ul`,null,[(v(!0),t(O,null,w(H.value.reasons,e=>(v(),t(`li`,{key:e},h(e),1))),128))])]),_:1},8,[`type`,`title`])):x(``,!0),r(`div`,Nt,[c(d(y),{loading:Se.value,disabled:Ee.value.length>0,onClick:Le},{default:T(()=>[...i[30]||=[s(` Preview eligibility and claims `,-1)]]),_:1},8,[`loading`,`disabled`]),c(d(y),{type:`primary`,loading:Se.value,disabled:!H.value||!d(Te)||Ee.value.length>0,onClick:Re},{default:T(()=>[s(h(e.create?`Create thermostat`:`Save configuration`),1)]),_:1},8,[`loading`,`disabled`]),I.value?.actuators.length?(v(),u(d(y),{key:0,type:`warning`,loading:Se.value,onClick:Ve},{default:T(()=>[...i[31]||=[s(` Request OFF and release `,-1)]]),_:1},8,[`loading`])):x(``,!0),c(d(y),{onClick:Q},{default:T(()=>[...i[32]||=[s(`Reload`,-1)]]),_:1})])],64))]),_:1})):x(``,!0),!e.create&&e.deviceId&&I.value?(v(),u(bt,{key:e.deviceId,"device-id":e.deviceId,revision:I.value.revision,disabled:Se.value||JSON.stringify(U.value)!==JSON.stringify(d(Pe)(I.value)),onChanged:Q},null,8,[`device-id`,`revision`,`disabled`])):x(``,!0)],64))}});export{Ae as n,Pt as t};
@@ -1 +1 @@
1
- import{Cr as e,Er as t,Fr as n,Lr as r,Pr as i,Xr as a,bi as o,br as s,ci as c,hi as l,vi as u}from"./icon-with-child-CgZMNB3F.js";var d=Object.freeze({__proto__:null,setup:e=>{let t=0;if(e.vm){let{vm:n}=e;do n.parent&&(t++,n=n.parent);while(n&&n.parent&&n!==n.root)}e.depth=t},resolve:((e,t)=>(n,r)=>{let i=-1;if(r.reduce(((t,n,r)=>{let a=e(t,n);return a===t?t:(i=r,a)}),t),i>-1)return n[i]})(((e,t)=>{let{depth:n}=t;return!e||n>e?n:e}))}),f={body:{tag:`script`,to:`body`},base:{valueAttribute:`href`},charset:{tag:`meta`,nameless:!0,valueAttribute:`charset`},description:{tag:`meta`},og:{group:!0,namespacedAttribute:!0,tag:`meta`,keyAttribute:`property`},twitter:{group:!0,namespacedAttribute:!0,tag:`meta`},htmlAttrs:{attributesFor:`html`},headAttrs:{attributesFor:`head`},bodyAttrs:{attributesFor:`body`}},p={title:{attributes:!1},base:{contentAsAttribute:!0,attributes:[`href`,`target`]},meta:{contentAsAttribute:!0,keyAttribute:`name`,attributes:[`content`,`name`,`http-equiv`,`charset`]},link:{contentAsAttribute:!0,attributes:[`href`,`crossorigin`,`rel`,`media`,`integrity`,`hreflang`,`type`,`referrerpolicy`,`sizes`,`imagesrcset`,`imagesizes`,`as`,`color`]},style:{attributes:[`media`]},script:{attributes:[`src`,`type`,`nomodule`,`async`,`defer`,`crossorigin`,`integrity`,`referrerpolicy`]},noscript:{attributes:!1}};Object.freeze({}),Object.freeze([]);var m=Array.isArray,h=e=>typeof e==`function`,g=e=>typeof e==`string`,_=e=>typeof e==`object`&&!!e,v=Object.prototype.toString,y=e=>v.call(e)===`[object Object]`,b=Symbol(`kIsProxy`),x=Symbol(`kProxySources`),S=Symbol(`kProxyTarget`),C=Symbol(`kResolveContext`);function w(e){if(m(e))return e.map(w);if(_(e)){let t={};for(let n in e)t[n]=n===`context`?e[n]:w(e[n]);return t}return e}var T=(e,t,n)=>{let r=[];for(let i of e)i&&t in i&&(r.push(i[t]),n&&n(i));return r},E=(e,t=[],n,r)=>{if(!n&&!r&&({active:n,sources:r}=e,t.length))for(let e=0;e<t.length;e++){let i=t[e];if(!n||!n[i])return void console.error(`recompute: segment ${i} not found on target`,t,n);n=n[i],r=r.map((e=>e[i])).filter(Boolean)}if(!n||!r)return;let i=((e,...t)=>{let n=e?Object.keys(e):[];if(t){for(let e of t)if(e&&_(e))for(let t in e)n.includes(t)||n.push(t)}return n})(...r),a=Object.keys(n);for(let e of a)i.includes(e)||delete n[e];for(let a of i){let i=!1;for(let e=0;e<r.length;e++){let t=r[e];if(t&&a in t&&t[a]!==void 0){i=y(t[a]);break}}if(i){n[a]||(n[a]={});let i=[];for(let e of r)a in e&&i.push(e[a]);E(e,[...t,a],n[a],i);continue}!n[a]&&m(r[0][a])&&(n[a]=[]);let o=[],s=T(r,a,(e=>o.push(e[C]))),c=e.resolve(s,o,n[a],a,t);y(c)&&(c=w(c)),n[a]=c}},D=(e,t,n,r=[])=>{let i=O(e,n,r),a=u(new Proxy(t,i));return!r.length&&e.sources&&e.sources.push(a),a},O=(e,t,n=[])=>({get:(r,i,a)=>{if(i===b)return!0;if(i===x)return e.sources;if(i===S)return r;if(i===C)return t;let o=Reflect.get(r,i,a);if(!_(o))return o;if(!o[b]){let a=[...n,i];o=D(e,o,t,a),Reflect.set(r,i,o)}return o},set:(t,r,i)=>{let a=Reflect.set(t,r,i);if(a){let o=m(t),s,c=!1,{sources:l,active:u}=e,d=0;for(let e of n){if(l=T(l,e),o&&d===n.length-1){s=e;break}m(u)&&(c=!0),u=u[e],d++}if(c)return E(e),a;if(y(i))return E(e,n),a;let f,p=[];o?(f=l,p=l.map((e=>e[C]))):f=T(l,r,(e=>p.push(e[C])));let h=e.resolve(f,p,u,r,n);y(h)&&(h=w(h)),o&&s?u[s]=h:u[r]=h}return a},deleteProperty:(t,r)=>{let i=Reflect.deleteProperty(t,r);if(i){let i=m(t),a,o=e.sources,s=e.active,c=0;for(let e of n){if(o=o.map((t=>t&&t[e])),i&&c===n.length-1){a=e;break}s=s[e],c++}if(o.some((e=>e&&r in e))){let t,c=[];i?(t=o,c=o.map((e=>e[C]))):t=T(o,r,(e=>c.push(e[C])));let l=e.resolve(t,c,s,r,n);y(l)&&(l=w(l)),i&&a?s[a]=l:s[r]=l}else delete s[r]}return i}}),k={};function A(e,t,n,i){return`attributesFor`in i?function(e,t,n,i){let{attributesFor:a}=i;if(!a||!n)return;if(e.isSSR)return{to:``,vnode:r(`ssr-${a}`,n)};if(!k[a]){let[e,t]=Array.from(document.querySelectorAll(a));if(!e)return void console.error(`Could not find element for selector`,a,`, won't render attributes`);t&&console.warn(`Found multiple elements for selector`,a),k[a]={el:e,attrs:[]}}let{el:o,attrs:s}=k[a];for(let r in n){let i=M(e,`${t}(${r})`,n[r],n);m(i)&&(i=i.join(`,`)),o.setAttribute(r,i||``),s.includes(r)||s.push(r)}let c=s.filter((e=>!n[e]));for(let e of c)o.removeAttribute(e)}(e,t,n,i):`group`in i?function(e,t,n,r){return m(n)?(console.warn(`Specifying an array for group properties isnt supported`),[]):Object.keys(n).map((i=>{let a={group:t,data:n};if(r.namespaced)a.tagNamespace=!0===r.namespaced?t:r.namespaced;else if(r.namespacedAttribute){let e=!0===r.namespacedAttribute?t:r.namespacedAttribute;a.fullName=`${e}:${i}`,a.slotName=`${e}(${i})`}return j(e,t,n[i],r,a)})).filter(Boolean).flat()}(e,t,n,i):j(e,t,n,i)}function j(e,t,n,i={},a){let o=[`content`,`json`,`rawContent`],s=e=>function(e,t){for(let n of e){let e=p[n];if(n&&e)return e[t]}}([c,i.tag],e);if(m(n))return n.map((n=>j(e,t,n,i,a))).filter(Boolean).flat();let{tag:c=i.tag||t}=n,l=``,u=!1,d=!1;if(g(n))l=n;else if(n.children&&m(n.children))u=!0,l=n.children.map((n=>{let r=j(e,t,n,i,a);return m(r)?r.map((({vnode:e})=>e)):r&&r.vnode}));else{let e=0;for(let t of o){if(!l&&n[t]){l=e===1?JSON.stringify(n[t]):n[t],d=e>1;break}e++}}let f=a&&a.fullName||t,h=a&&a.slotName||t,{attrs:_}=n;if(_||typeof n!=`object`)_||={};else{_={...n},delete _.tag,delete _.children,delete _.to;for(let e of o)delete _[e]}if(u)l=M(e,h,l,n);else{let t=!!s(`contentAsAttribute`),{valueAttribute:r}=i;if(!r&&t){let[e]=s(`attributes`);r=g(t)?t:e}if(r){let{nameless:t}=i;if(!t){let e=i.keyAttribute||s(`keyAttribute`);e&&(_[e]=f)}_[r]=M(e,h,_[r]||l,a),l=``}else l=M(e,h,l,n)}let v=a&&a.tagNamespace?`${a.tagNamespace}:${c}`:c;if(v===`title`&&!e.isSSR)return void(document.title=l);d&&l&&(_.innerHTML=l);let y=r(v,_,l||void 0);return{to:n.to,vnode:y}}function M({metainfo:e,slots:t},n,r,i){let a=t&&t[n];if(!a||!h(a))return r;let o={content:r,metainfo:e};if(i&&i.group){let{group:e,data:t}=i;o[e]=t}let s=a(o);if(s&&s.length){let{children:e}=s[0];return e?e.toString():``}return r}var N=typeof Symbol==`function`&&typeof Symbol.toStringTag==`symbol`,P=(e=>N?Symbol(`[vue-meta]: `+e):`[vue-meta]: `+e)(`meta_active`);function F(e,t,n){for(let r in t)r in n?_(e[r])?F(e[r],t[r],n[r]):t[r]!==n[r]&&(e[r]=t[r]):e[r]=t[r];for(let r in n)t&&r in t||delete e[r]}function I(e){if(e||=n()||void 0,e)return e.appContext.config.globalProperties.$metaManager}function L(e,t){let r=n()||void 0;if(!t&&r&&(t=I(r)),!t)throw Error(`No manager or current instance`);l(e)&&(c(e,((e,t)=>{F(i.meta,e,t)})),e=e.value);let i=t.addMeta(e,r);return i}var R=i({name:`Metainfo`,inheritAttrs:!1,setup:(e,{slots:t})=>()=>{let e=I();if(e)return e.render({slots:t})}});function z(e,t,n,r){let i=m(r)?r:[r];e?n.endsWith(`Attrs`)||i.forEach((e=>{e.props||={},e.props[`data-vm-ssr`]=!0})):i.forEach(((e,t)=>{e.type===s&&i.splice(t,1)})),t[n]||(t[n]=[]),t[n].push(...i)}var B=(e=!1,t,n)=>V.create(e,t||f,n||d),V=class t{isSSR=!1;config;target;resolver;ssrCleanedUp=!1;constructor(e,t,n,r){this.isSSR=e,this.config=t,this.target=n,r&&`setup`in r&&h(r.setup)&&(this.resolver=r)}static create=(e,n,r)=>{let i=((e,t)=>{let n=[],r={active:t,resolve:e,sources:n},i=()=>E(r);return{context:r,compute:i,addSource:(e,t,n=!1)=>{let a=D(r,e,t||{});return n&&i(),a},delSource:(e,t=!0)=>{let r=n.findIndex((t=>t===e||t[S]===e));return r>-1&&(n.splice(r,1),t&&i(),!0)}}})(((e,t,n,i,a)=>h(r)?r(e,t,n,i,a):r.resolve(e,t,n,i,a)),o({}));return new t(e,n,i,r)};install(e){e.component(`Metainfo`,R),e.config.globalProperties.$metaManager=this,e.provide(P,this.target.context.active)}addMeta(e,t){t||=n()||void 0;let r={removed:[]},i={vm:t},{resolver:o}=this;o&&o.setup&&o.setup(i);let s=this.target.addSource(e,i,!0),c=e=>this.unmount(!!e,s,r,t);return t&&a(c),{meta:s,onRemoved:e=>r.removed.push(e),unmount:c}}unmount(e,t,n,r){if(r){let{$el:i}=r.proxy;if(i&&i.offsetParent){let r=new MutationObserver((a=>{for(let{removedNodes:o}of a)o&&o.forEach((a=>{a===i&&r&&(r.disconnect(),r=void 0,this.reallyUnmount(e,t,n))}))}));r.observe(i.parentNode,{childList:!0});return}}this.reallyUnmount(e,t,n)}async reallyUnmount(e,t,n){this.target.delSource(t),!e&&n&&await Promise.all(n.removed.map((e=>e())))}render({slots:t}={}){let n=this.target.context.active,{isSSR:i}=this;if(!i&&!this.ssrCleanedUp){this.ssrCleanedUp=!0;let e=()=>{let e=document.querySelectorAll(`[data-vm-ssr]`);e&&e.length&&e.forEach((e=>e.parentNode&&e.parentNode.removeChild(e)))};document.readyState===`loading`?window.addEventListener(`DOMContentLoaded`,e,{once:!0}):e()}let a={};for(let e in n){let r=this.config[e]||{},o=A({isSSR:i,metainfo:n,slots:t},e,n[e],r);if(!o)continue;m(o)||(o=[o]);let s=e!==`base`&&n[e].to;!s&&`to`in r&&(s=r.to),!s&&`attributesFor`in r&&(s=e);for(let{to:e,vnode:t}of o)z(this.isSSR,a,e||s||`head`,t)}if(t)for(let e in t){let r=e==="default"?`head`:e;if(r!==`head`&&r!==`body`)continue;let i=t[e];h(i)&&z(this.isSSR,a,r,i({metainfo:n}))}return Object.keys(a).map((t=>r(e,{to:t},a[t])))}},H={keyName:`metaInfo`},U=e=>({created(){let r=n();if(!r?.type||!(e.keyName in r.type))return;let i=r.type[e.keyName];h(i)?L(t(i.bind(this))):L(i)}}),W=(e,t={})=>{let n=Object.assign({},H,t);e.mixin(U(n))};export{B as n,W as r,L as t};
1
+ import{Ci as e,Cr as t,Er as n,Fr as r,Ir as i,Qr as a,Rr as o,br as s,di as c,vi as l,xi as u}from"./icon-with-child-C0yuv0oQ.js";var d=Object.freeze({__proto__:null,setup:e=>{let t=0;if(e.vm){let{vm:n}=e;do n.parent&&(t++,n=n.parent);while(n&&n.parent&&n!==n.root)}e.depth=t},resolve:((e,t)=>(n,r)=>{let i=-1;if(r.reduce(((t,n,r)=>{let a=e(t,n);return a===t?t:(i=r,a)}),t),i>-1)return n[i]})(((e,t)=>{let{depth:n}=t;return!e||n>e?n:e}))}),f={body:{tag:`script`,to:`body`},base:{valueAttribute:`href`},charset:{tag:`meta`,nameless:!0,valueAttribute:`charset`},description:{tag:`meta`},og:{group:!0,namespacedAttribute:!0,tag:`meta`,keyAttribute:`property`},twitter:{group:!0,namespacedAttribute:!0,tag:`meta`},htmlAttrs:{attributesFor:`html`},headAttrs:{attributesFor:`head`},bodyAttrs:{attributesFor:`body`}},p={title:{attributes:!1},base:{contentAsAttribute:!0,attributes:[`href`,`target`]},meta:{contentAsAttribute:!0,keyAttribute:`name`,attributes:[`content`,`name`,`http-equiv`,`charset`]},link:{contentAsAttribute:!0,attributes:[`href`,`crossorigin`,`rel`,`media`,`integrity`,`hreflang`,`type`,`referrerpolicy`,`sizes`,`imagesrcset`,`imagesizes`,`as`,`color`]},style:{attributes:[`media`]},script:{attributes:[`src`,`type`,`nomodule`,`async`,`defer`,`crossorigin`,`integrity`,`referrerpolicy`]},noscript:{attributes:!1}};Object.freeze({}),Object.freeze([]);var m=Array.isArray,h=e=>typeof e==`function`,g=e=>typeof e==`string`,_=e=>typeof e==`object`&&!!e,v=Object.prototype.toString,y=e=>v.call(e)===`[object Object]`,b=Symbol(`kIsProxy`),x=Symbol(`kProxySources`),S=Symbol(`kProxyTarget`),C=Symbol(`kResolveContext`);function w(e){if(m(e))return e.map(w);if(_(e)){let t={};for(let n in e)t[n]=n===`context`?e[n]:w(e[n]);return t}return e}var T=(e,t,n)=>{let r=[];for(let i of e)i&&t in i&&(r.push(i[t]),n&&n(i));return r},E=(e,t=[],n,r)=>{if(!n&&!r&&({active:n,sources:r}=e,t.length))for(let e=0;e<t.length;e++){let i=t[e];if(!n||!n[i])return void console.error(`recompute: segment ${i} not found on target`,t,n);n=n[i],r=r.map((e=>e[i])).filter(Boolean)}if(!n||!r)return;let i=((e,...t)=>{let n=e?Object.keys(e):[];if(t){for(let e of t)if(e&&_(e))for(let t in e)n.includes(t)||n.push(t)}return n})(...r),a=Object.keys(n);for(let e of a)i.includes(e)||delete n[e];for(let a of i){let i=!1;for(let e=0;e<r.length;e++){let t=r[e];if(t&&a in t&&t[a]!==void 0){i=y(t[a]);break}}if(i){n[a]||(n[a]={});let i=[];for(let e of r)a in e&&i.push(e[a]);E(e,[...t,a],n[a],i);continue}!n[a]&&m(r[0][a])&&(n[a]=[]);let o=[],s=T(r,a,(e=>o.push(e[C]))),c=e.resolve(s,o,n[a],a,t);y(c)&&(c=w(c)),n[a]=c}},D=(e,t,n,r=[])=>{let i=O(e,n,r),a=u(new Proxy(t,i));return!r.length&&e.sources&&e.sources.push(a),a},O=(e,t,n=[])=>({get:(r,i,a)=>{if(i===b)return!0;if(i===x)return e.sources;if(i===S)return r;if(i===C)return t;let o=Reflect.get(r,i,a);if(!_(o))return o;if(!o[b]){let a=[...n,i];o=D(e,o,t,a),Reflect.set(r,i,o)}return o},set:(t,r,i)=>{let a=Reflect.set(t,r,i);if(a){let o=m(t),s,c=!1,{sources:l,active:u}=e,d=0;for(let e of n){if(l=T(l,e),o&&d===n.length-1){s=e;break}m(u)&&(c=!0),u=u[e],d++}if(c)return E(e),a;if(y(i))return E(e,n),a;let f,p=[];o?(f=l,p=l.map((e=>e[C]))):f=T(l,r,(e=>p.push(e[C])));let h=e.resolve(f,p,u,r,n);y(h)&&(h=w(h)),o&&s?u[s]=h:u[r]=h}return a},deleteProperty:(t,r)=>{let i=Reflect.deleteProperty(t,r);if(i){let i=m(t),a,o=e.sources,s=e.active,c=0;for(let e of n){if(o=o.map((t=>t&&t[e])),i&&c===n.length-1){a=e;break}s=s[e],c++}if(o.some((e=>e&&r in e))){let t,c=[];i?(t=o,c=o.map((e=>e[C]))):t=T(o,r,(e=>c.push(e[C])));let l=e.resolve(t,c,s,r,n);y(l)&&(l=w(l)),i&&a?s[a]=l:s[r]=l}else delete s[r]}return i}}),k={};function A(e,t,n,r){return`attributesFor`in r?function(e,t,n,r){let{attributesFor:i}=r;if(!i||!n)return;if(e.isSSR)return{to:``,vnode:o(`ssr-${i}`,n)};if(!k[i]){let[e,t]=Array.from(document.querySelectorAll(i));if(!e)return void console.error(`Could not find element for selector`,i,`, won't render attributes`);t&&console.warn(`Found multiple elements for selector`,i),k[i]={el:e,attrs:[]}}let{el:a,attrs:s}=k[i];for(let r in n){let i=M(e,`${t}(${r})`,n[r],n);m(i)&&(i=i.join(`,`)),a.setAttribute(r,i||``),s.includes(r)||s.push(r)}let c=s.filter((e=>!n[e]));for(let e of c)a.removeAttribute(e)}(e,t,n,r):`group`in r?function(e,t,n,r){return m(n)?(console.warn(`Specifying an array for group properties isnt supported`),[]):Object.keys(n).map((i=>{let a={group:t,data:n};if(r.namespaced)a.tagNamespace=!0===r.namespaced?t:r.namespaced;else if(r.namespacedAttribute){let e=!0===r.namespacedAttribute?t:r.namespacedAttribute;a.fullName=`${e}:${i}`,a.slotName=`${e}(${i})`}return j(e,t,n[i],r,a)})).filter(Boolean).flat()}(e,t,n,r):j(e,t,n,r)}function j(e,t,n,r={},i){let a=[`content`,`json`,`rawContent`],s=e=>function(e,t){for(let n of e){let e=p[n];if(n&&e)return e[t]}}([c,r.tag],e);if(m(n))return n.map((n=>j(e,t,n,r,i))).filter(Boolean).flat();let{tag:c=r.tag||t}=n,l=``,u=!1,d=!1;if(g(n))l=n;else if(n.children&&m(n.children))u=!0,l=n.children.map((n=>{let a=j(e,t,n,r,i);return m(a)?a.map((({vnode:e})=>e)):a&&a.vnode}));else{let e=0;for(let t of a){if(!l&&n[t]){l=e===1?JSON.stringify(n[t]):n[t],d=e>1;break}e++}}let f=i&&i.fullName||t,h=i&&i.slotName||t,{attrs:_}=n;if(_||typeof n!=`object`)_||={};else{_={...n},delete _.tag,delete _.children,delete _.to;for(let e of a)delete _[e]}if(u)l=M(e,h,l,n);else{let t=!!s(`contentAsAttribute`),{valueAttribute:a}=r;if(!a&&t){let[e]=s(`attributes`);a=g(t)?t:e}if(a){let{nameless:t}=r;if(!t){let e=r.keyAttribute||s(`keyAttribute`);e&&(_[e]=f)}_[a]=M(e,h,_[a]||l,i),l=``}else l=M(e,h,l,n)}let v=i&&i.tagNamespace?`${i.tagNamespace}:${c}`:c;if(v===`title`&&!e.isSSR)return void(document.title=l);d&&l&&(_.innerHTML=l);let y=o(v,_,l||void 0);return{to:n.to,vnode:y}}function M({metainfo:e,slots:t},n,r,i){let a=t&&t[n];if(!a||!h(a))return r;let o={content:r,metainfo:e};if(i&&i.group){let{group:e,data:t}=i;o[e]=t}let s=a(o);if(s&&s.length){let{children:e}=s[0];return e?e.toString():``}return r}var N=typeof Symbol==`function`&&typeof Symbol.toStringTag==`symbol`,P=(e=>N?Symbol(`[vue-meta]: `+e):`[vue-meta]: `+e)(`meta_active`);function F(e,t,n){for(let r in t)r in n?_(e[r])?F(e[r],t[r],n[r]):t[r]!==n[r]&&(e[r]=t[r]):e[r]=t[r];for(let r in n)t&&r in t||delete e[r]}function I(e){if(e||=i()||void 0,e)return e.appContext.config.globalProperties.$metaManager}function L(e,t){let n=i()||void 0;if(!t&&n&&(t=I(n)),!t)throw Error(`No manager or current instance`);l(e)&&(c(e,((e,t)=>{F(r.meta,e,t)})),e=e.value);let r=t.addMeta(e,n);return r}var R=r({name:`Metainfo`,inheritAttrs:!1,setup:(e,{slots:t})=>()=>{let e=I();if(e)return e.render({slots:t})}});function z(e,t,n,r){let i=m(r)?r:[r];e?n.endsWith(`Attrs`)||i.forEach((e=>{e.props||={},e.props[`data-vm-ssr`]=!0})):i.forEach(((e,t)=>{e.type===s&&i.splice(t,1)})),t[n]||(t[n]=[]),t[n].push(...i)}var B=(e=!1,t,n)=>V.create(e,t||f,n||d),V=class n{isSSR=!1;config;target;resolver;ssrCleanedUp=!1;constructor(e,t,n,r){this.isSSR=e,this.config=t,this.target=n,r&&`setup`in r&&h(r.setup)&&(this.resolver=r)}static create=(t,r,i)=>{let a=((e,t)=>{let n=[],r={active:t,resolve:e,sources:n},i=()=>E(r);return{context:r,compute:i,addSource:(e,t,n=!1)=>{let a=D(r,e,t||{});return n&&i(),a},delSource:(e,t=!0)=>{let r=n.findIndex((t=>t===e||t[S]===e));return r>-1&&(n.splice(r,1),t&&i(),!0)}}})(((e,t,n,r,a)=>h(i)?i(e,t,n,r,a):i.resolve(e,t,n,r,a)),e({}));return new n(t,r,a,i)};install(e){e.component(`Metainfo`,R),e.config.globalProperties.$metaManager=this,e.provide(P,this.target.context.active)}addMeta(e,t){t||=i()||void 0;let n={removed:[]},r={vm:t},{resolver:o}=this;o&&o.setup&&o.setup(r);let s=this.target.addSource(e,r,!0),c=e=>this.unmount(!!e,s,n,t);return t&&a(c),{meta:s,onRemoved:e=>n.removed.push(e),unmount:c}}unmount(e,t,n,r){if(r){let{$el:i}=r.proxy;if(i&&i.offsetParent){let r=new MutationObserver((a=>{for(let{removedNodes:o}of a)o&&o.forEach((a=>{a===i&&r&&(r.disconnect(),r=void 0,this.reallyUnmount(e,t,n))}))}));r.observe(i.parentNode,{childList:!0});return}}this.reallyUnmount(e,t,n)}async reallyUnmount(e,t,n){this.target.delSource(t),!e&&n&&await Promise.all(n.removed.map((e=>e())))}render({slots:e}={}){let n=this.target.context.active,{isSSR:r}=this;if(!r&&!this.ssrCleanedUp){this.ssrCleanedUp=!0;let e=()=>{let e=document.querySelectorAll(`[data-vm-ssr]`);e&&e.length&&e.forEach((e=>e.parentNode&&e.parentNode.removeChild(e)))};document.readyState===`loading`?window.addEventListener(`DOMContentLoaded`,e,{once:!0}):e()}let i={};for(let t in n){let a=this.config[t]||{},o=A({isSSR:r,metainfo:n,slots:e},t,n[t],a);if(!o)continue;m(o)||(o=[o]);let s=t!==`base`&&n[t].to;!s&&`to`in a&&(s=a.to),!s&&`attributesFor`in a&&(s=t);for(let{to:e,vnode:t}of o)z(this.isSSR,i,e||s||`head`,t)}if(e)for(let t in e){let r=t==="default"?`head`:t;if(r!==`head`&&r!==`body`)continue;let a=e[t];h(a)&&z(this.isSSR,i,r,a({metainfo:n}))}return Object.keys(i).map((e=>o(t,{to:e},i[e])))}},H={keyName:`metaInfo`},U=e=>({created(){let t=i();if(!t?.type||!(e.keyName in t.type))return;let r=t.type[e.keyName];h(r)?L(n(r.bind(this))):L(r)}}),W=(e,t={})=>{let n=Object.assign({},H,t);e.mixin(U(n))};export{B as n,W as r,L as t};