@fastybird/smart-panel-admin 1.1.0-alpha.0 → 1.1.0-alpha.2
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.
- package/dist/assets/{alert-T9nrEIYw.js → alert-B_504iE8.js} +1 -1
- package/dist/assets/{card-add-form-Dmqn9mSR.js → card-add-form-hQfcolyj.js} +1 -1
- package/dist/assets/{card-edit-form-gTEMCJvQ.js → card-edit-form-BPs9Aljn.js} +1 -1
- package/dist/assets/{checkbox-lYuDNNRW.js → checkbox-DKrpi0d7.js} +1 -1
- package/dist/assets/{clamp-C5awl0Z9.js → clamp-BIBuaymK.js} +1 -1
- package/dist/assets/{col-CS5z2SZI.js → col-Brj0AIcp.js} +1 -1
- package/dist/assets/{collapse-BU-5F3-c.js → collapse-CcS8OeLM.js} +1 -1
- package/dist/assets/common-BI15rKA4.css +1 -0
- package/dist/assets/common-CEAYa_VX.js +135 -0
- package/dist/assets/components-1l-XQ9JU.js +6 -0
- package/dist/assets/components-B-x0bFEi.css +1 -0
- package/dist/assets/{components-EJSamUDY.js → components-B4a-3cag.js} +1 -1
- package/dist/assets/{components-eOJrNmD_.js → components-BqvPyJ09.js} +2 -2
- package/dist/assets/components-CDS0rEqD.js +1 -0
- package/dist/assets/components-CGY9a3zE.js +1 -0
- package/dist/assets/{components-BvIJ9V1A.js → components-CofHdxQO.js} +1 -1
- package/dist/assets/components-DJ-PhAdU.js +1 -0
- package/dist/assets/{components-DTUbSUWA.js → components-Dg_-11L_.js} +1 -1
- package/dist/assets/components-niPBJezT.js +1 -0
- package/dist/assets/components-v7BtnQr-.js +8 -0
- package/dist/assets/{composables-C_ClN_9k.js → composables-BiL7NDB2.js} +1 -1
- package/dist/assets/{composables-DauWd-yX.js → composables-CO2f80jd.js} +1 -1
- package/dist/assets/composables-CRIJLd1I.js +1 -0
- package/dist/assets/{composables-p3aMxqQW.js → composables-CdLuPMLl.js} +1 -1
- package/dist/assets/composables-CuDyfiS0.js +1 -0
- package/dist/assets/{composables-ByJA5Pkr.js → composables-D5CRUz8s.js} +1 -1
- package/dist/assets/composables-DIjPmeHV.js +1 -0
- package/dist/assets/composables-DNfuP9v9.js +1 -0
- package/dist/assets/{composables-Cu-tDLXA.js → composables-DrSNDrtP.js} +1 -1
- package/dist/assets/{composables-CnAm5-n0.js → composables-ZUeIfONp.js} +1 -1
- package/dist/assets/{composables-CnAdallo.js → composables-o5wEPPAf.js} +1 -1
- package/dist/assets/{config-Ca3KDCt_.js → config-CIAUSdP7.js} +2 -2
- package/dist/assets/{dashboard-sUj5gMgt.js → dashboard-CQWK08VY.js} +2 -2
- package/dist/assets/dashboard.types-FCvSt30R.js +1 -0
- package/dist/assets/{data-source-edit-form-TeVA0ZGT.js → data-source-edit-form-Ba0Rox_i.js} +1 -1
- package/dist/assets/{descriptions-BqAkDsOG.js → descriptions-Bk8rb6i3.js} +1 -1
- package/dist/assets/{devices-c2r4wXat.js → devices-Cx9K7dqW.js} +2 -2
- package/dist/assets/{devices-virtual.constants-BZiARLZb.js → devices-virtual.constants-Ckcs-m8t.js} +1 -1
- package/dist/assets/{dialog-CkpSeL6j.js → dialog-BKnLpTNm.js} +1 -1
- package/dist/assets/{drawer-BO0yGLCm.js → drawer-Bv6YcfZX.js} +1 -1
- package/dist/assets/empty-DvXiCUNF.js +1 -0
- package/dist/assets/{form-BXQzDd7P.js → form-CYGBQyZI.js} +1 -1
- package/dist/assets/index-CRKyZO94.js +9 -0
- package/dist/assets/index-E5bAVcL9.css +1 -0
- package/dist/assets/{input-number-BW5agJ92.js → input-number-DcR-vPr4.js} +1 -1
- package/dist/assets/integration-config-dialog-CfcgPh5F.js +1 -0
- package/dist/assets/{keys-DcE5nSGn.js → keys-BYonWGX0.js} +1 -1
- package/dist/assets/{layout-config-D3Rl8nnp.js → layout-config-Cjya-WMb.js} +1 -1
- package/dist/assets/{layout-default-DYN_BCAU.js → layout-default-CS5XwxjF.js} +1 -1
- package/dist/assets/{layout-lock-CnKsH_o2.js → layout-lock-CoJt4ng5.js} +1 -1
- package/dist/assets/layout-profile-BH6_ndbj.js +1 -0
- package/dist/assets/{layout-profile-BMiHIk-r.js → layout-profile-DaySzWNs.js} +1 -1
- package/dist/assets/{layout-sign-CRyGbt23.js → layout-sign-BR-IRKTg.js} +1 -1
- package/dist/assets/layout-sign-lJc9My5g.js +1 -0
- package/dist/assets/{list-data-sources-adjust-5-Pdok_s.js → list-data-sources-adjust-C1BWaGAY.js} +1 -1
- package/dist/assets/{list-locations-DDLG-wi7.js → list-locations-B_k17JmN.js} +1 -1
- package/dist/assets/{list-users-CoPYoKsq.js → list-users-Dtqpo3YK.js} +1 -1
- package/dist/assets/logs-entries.transformers-CZw7f53p.js +1 -0
- package/dist/assets/mcp.exceptions-DqhuYDrK.js +1 -0
- package/dist/assets/notifications-ByzWXMhj.css +1 -0
- package/dist/assets/notifications.exceptions-CTWKr2hv.js +1 -0
- package/dist/assets/{omit-oVmlMQup.js → omit-DRbsINX4.js} +1 -1
- package/dist/assets/page-configure-Bt3Zbbmn.js +1 -0
- package/dist/assets/{page-configure-n0ajoZ1U.js → page-configure-CVQE_kOC.js} +1 -1
- package/dist/assets/{pagination-CjJxy65X.js → pagination-CFSm62Hu.js} +1 -1
- package/dist/assets/{radio-CzhigJpe.js → radio-Cmy69XUu.js} +1 -1
- package/dist/assets/{scene-add-form-CbEbxU91.js → scene-add-form-CyeR3pxj.js} +1 -1
- package/dist/assets/{scene-edit-form-l_zU7WQe.js → scene-edit-form-dBV9baT5.js} +1 -1
- package/dist/assets/schemas.utils-DPM2Btj1.js +1 -0
- package/dist/assets/{select-O4KysHta.js → select-BE-J6w_y.js} +1 -1
- package/dist/assets/{select-data-source-plugin-CIr1ZUt3.js → select-data-source-plugin-CgTE90rj.js} +1 -1
- package/dist/assets/{slider-BakOmJFk.js → slider-B7Mhws2_.js} +1 -1
- package/dist/assets/{spaces-BsLvX_mm.js → spaces-DUnXUSuq.js} +2 -2
- package/dist/assets/spaces-home-control.constants-DR2Pcn9V.js +1 -0
- package/dist/assets/{steps-CcJujEC5.js → steps-ChWGGNoh.js} +1 -1
- package/dist/assets/system-DVGufF5G.js +2 -0
- package/dist/assets/{table-OOxB7eZ0.js → table-CP4k6PuT.js} +1 -1
- package/dist/assets/{tabs--WEsYe_1.js → tabs-BlmPldJW.js} +1 -1
- package/dist/assets/{tile-detail-DzmTEy7M.js → tile-detail-BbYkd7G4.js} +1 -1
- package/dist/assets/{tile-edit-form-DCms-EXo.js → tile-edit-form-DiShECn4.js} +1 -1
- package/dist/assets/types-BFzk34Iy.js +1 -0
- package/dist/assets/types-jnyNKIzd.js +1 -0
- package/dist/assets/{use-dialog-Lvd-Ls2e.js → use-dialog-BFPWhCwQ.js} +1 -1
- package/dist/assets/{use-ordered-children-CNn6LzZ5.js → use-ordered-children-CbAW48y2.js} +1 -1
- package/dist/assets/useBuddyChat-BQeijZgm.js +1 -0
- package/dist/assets/{useConfigModule-BnX1QBwr.js → useConfigModule-l8zp4LY1.js} +1 -1
- package/dist/assets/{useDataSources-CP_5chvd.js → useDataSources-CI2pLb0w.js} +1 -1
- package/dist/assets/{useDevicesPlugins-COw-D0RN.js → useDevicesPlugins-IYuPoZmZ.js} +1 -1
- package/dist/assets/useEventBus-C7h8fK0M.js +1 -0
- package/dist/assets/useExtensions-mIxpx3RO.js +1 -0
- package/dist/assets/{useGeolocation-B6K8Fgnb.js → useGeolocation-DlU1KRo-.js} +1 -1
- package/dist/assets/useLocation-CKsKAhov.js +1 -0
- package/dist/assets/{useMcpClients-BfqJppj8.js → useMcpClients-D44DSCoV.js} +1 -1
- package/dist/assets/{useModule-D1rm0Y0M.js → useModule-CGQr8Yht.js} +1 -1
- package/dist/assets/{useModules-Cy3UIua6.js → useModules-BqwGbI5l.js} +1 -1
- package/dist/assets/{useNumberFormat-CQgIxqs3.js → useNumberFormat-CLztaSFk.js} +1 -1
- package/dist/assets/{usePage-CedKpB5s.js → usePage-D3Y3z-Z-.js} +1 -1
- package/dist/assets/{usePersonalTokens-By_T4BUP.js → usePersonalTokens-DwMWVRNS.js} +1 -1
- package/dist/assets/{usePlugin-CyWrOblJ.js → usePlugin-DQ16ENWC.js} +1 -1
- package/dist/assets/{usePlugins-DQ7X6S0I.js → usePlugins-BAUrRkxK.js} +1 -1
- package/dist/assets/useSpaces-dSwttzjs.js +1 -0
- package/dist/assets/{useUuid-fukXwEj1.js → useUuid-B2AwaEQg.js} +1 -1
- package/dist/assets/{view-buddy-chat-BrlGdu81.js → view-buddy-chat-DpaYzexP.js} +1 -1
- package/dist/assets/{view-card-add-CtGSajM3.js → view-card-add-BcIFVzzf.js} +1 -1
- package/dist/assets/{view-card-edit-Zb9cFcPI.js → view-card-edit-BbS-QIUa.js} +1 -1
- package/dist/assets/view-channel-add-D9FB9I0d.js +1 -0
- package/dist/assets/{view-channel-edit-Axeb4Wsq.js → view-channel-edit-BMC2n_jY.js} +1 -1
- package/dist/assets/{view-channel-property-add-CQ5ba4om.js → view-channel-property-add-DMGQZ9QS.js} +1 -1
- package/dist/assets/view-channel-property-edit-DZPQoC26.js +1 -0
- package/dist/assets/{view-channel-uRWeCf75.js → view-channel-vLXMY5of.js} +1 -1
- package/dist/assets/{view-channels-9OykDzrx.js → view-channels-Bo16Lq4L.js} +1 -1
- package/dist/assets/{view-config-module-edit-DKx624EL.js → view-config-module-edit-BFQDbwC6.js} +1 -1
- package/dist/assets/{view-config-modules-B5GC5QVM.js → view-config-modules-Culfv_bK.js} +1 -1
- package/dist/assets/{view-config-plugin-edit-D880lhC9.js → view-config-plugin-edit-DX364xd_.js} +1 -1
- package/dist/assets/{view-config-plugins-vIUqs1BF.js → view-config-plugins-CK0vdPmj.js} +1 -1
- package/dist/assets/{view-data-source-add-B3EeEfoa.js → view-data-source-add-Bzb-61aK.js} +1 -1
- package/dist/assets/view-data-source-add-_7ip7mrf.js +1 -0
- package/dist/assets/view-data-source-edit-CoUrprKG.js +1 -0
- package/dist/assets/view-data-source-edit-DrlMJPDn.js +1 -0
- package/dist/assets/view-device-B6vGkfF5.js +1 -0
- package/dist/assets/view-device-TJjGoba6.css +1 -0
- package/dist/assets/{view-device-add-COpcEZUi.js → view-device-add-BjIlyY6E.js} +1 -1
- package/dist/assets/{view-device-control-C2sHc1fN.js → view-device-control-DdEXyVpn.js} +1 -1
- package/dist/assets/{view-device-edit-BacIFxG-.js → view-device-edit-DoQRQB09.js} +1 -1
- package/dist/assets/{view-devices-BZvnh_6I.css → view-devices-BV3p7TrL.css} +1 -1
- package/dist/assets/view-devices-_LNxDPyf.js +1 -0
- package/dist/assets/{view-devices-wizard-FN_kerQt.js → view-devices-wizard-DNVtEru3.js} +1 -1
- package/dist/assets/{view-display-edit-CeDdE9A3.js → view-display-edit-KWE_nXux.js} +1 -1
- package/dist/assets/{view-display-Cwe6xu0z.js → view-display-pQhEo0QJ.js} +1 -1
- package/dist/assets/{view-display-tokens-Cfdzw2NT.js → view-display-tokens-BkuVjpd3.js} +1 -1
- package/dist/assets/{view-displays-DE_oTtvk.js → view-displays-CHfrmtje.js} +1 -1
- package/dist/assets/view-extension-detail-BzdALouU.js +1 -0
- package/dist/assets/{view-extensions-8fjsl-aC.js → view-extensions-BEUE9DZM.js} +1 -1
- package/dist/assets/view-location-Cv4_QxT3.js +1 -0
- package/dist/assets/view-location-add-CR2vX0YA.js +1 -0
- package/dist/assets/view-location-edit-CPXCB6Ty.js +1 -0
- package/dist/assets/view-locations-DYzQbnuC.js +1 -0
- package/dist/assets/{view-lock-screen-bRDri9aj.js → view-lock-screen-CvMhzPRT.js} +1 -1
- package/dist/assets/view-mcp-clients-CXdQQbgy.js +1 -0
- package/dist/assets/{view-mcp-oauth-consent-BCCpyOy3.js → view-mcp-oauth-consent-CdSzhX8Z.js} +1 -1
- package/dist/assets/view-mcp-oauth-management-u-zf8VgR.js +1 -0
- package/dist/assets/view-notifications-Cg2TL1DH.js +1 -0
- package/dist/assets/view-onboarding-DTDmluyn.js +1 -0
- package/dist/assets/{view-page--EqFsctG.js → view-page-Zu_2hwIi.js} +1 -1
- package/dist/assets/{view-page-add-DKc0D-_Z.js → view-page-add-CKANfB0w.js} +1 -1
- package/dist/assets/{view-page-configure-BvJKjhWD.js → view-page-configure-C-eA0dC4.js} +1 -1
- package/dist/assets/{view-page-configure-D1S_L3Df.js → view-page-configure-C5n0g4eO.js} +1 -1
- package/dist/assets/{view-page-data-source-add-DmdPErHH.js → view-page-data-source-add-7ItspGgj.js} +1 -1
- package/dist/assets/view-page-data-source-edit-DQu21ar1.js +1 -0
- package/dist/assets/{view-page-edit-CalSVnS8.js → view-page-edit-CWXaQZak.js} +1 -1
- package/dist/assets/{view-page-plugin-COtv5VDP.js → view-page-plugin-Cfto42Wh.js} +1 -1
- package/dist/assets/{view-pages-FQaVAf16.js → view-pages-BBiRpjJE.js} +1 -1
- package/dist/assets/{view-profile-general-Dquye0Sq.js → view-profile-general-D_6x0Tyu.js} +1 -1
- package/dist/assets/{view-profile-security-Cm99XMFN.js → view-profile-security-BgZi5Vkz.js} +1 -1
- package/dist/assets/view-remote-access-CAUqIDKh.css +1 -0
- package/dist/assets/view-remote-access-DtZM_sYV.js +1 -0
- package/dist/assets/{view-scene-add-DJkyO05x.js → view-scene-add-LFcdVTaN.js} +1 -1
- package/dist/assets/{view-scene-edit-B8ew3Rh_.js → view-scene-edit-fX-u8fib.js} +1 -1
- package/dist/assets/{view-scenes-81znjW1S.js → view-scenes-DWbfoSPZ.js} +1 -1
- package/dist/assets/{view-sign-in-CkEM4vLp.js → view-sign-in-CZRERL0Y.js} +1 -1
- package/dist/assets/{view-sign-up-L6T2PYuR.js → view-sign-up-CrUHPweO.js} +1 -1
- package/dist/assets/{view-simulator-device-wizard-BUfsCMrh.js → view-simulator-device-wizard-DO1CpTZ7.js} +1 -1
- package/dist/assets/{view-space-add-DD-ImGjZ.js → view-space-add-BWXeqKGe.js} +1 -1
- package/dist/assets/{view-space-configure-DwMhMERS.js → view-space-configure-DpiLxtMc.js} +1 -1
- package/dist/assets/view-space-edit-uz1TPncu.js +1 -0
- package/dist/assets/{view-space-plugin-DsJrf4ZZ.js → view-space-plugin-8dCIw60l.js} +1 -1
- package/dist/assets/{view-spaces-BJLiNhUz.js → view-spaces-BlGL7Tsw.js} +1 -1
- package/dist/assets/{view-spaces-wizard-Bf8CgNF7.js → view-spaces-wizard-BKBTNd3t.js} +1 -1
- package/dist/assets/{view-stats-BtJZsvbJ.js → view-stats-sqy4OQw5.js} +1 -1
- package/dist/assets/{view-system-backups-BmITzwvM.js → view-system-backups-DRhdTizI.js} +1 -1
- package/dist/assets/{view-system-info-DtOm6RHr.js → view-system-info-SAJnQgbZ.js} +1 -1
- package/dist/assets/{view-system-log-detail-4QAXHly1.js → view-system-log-detail-De0uz6BL.js} +1 -1
- package/dist/assets/view-system-logs-B0eMqnft.js +1 -0
- package/dist/assets/{view-tile-CyRM73cc.js → view-tile-CdKYi0pR.js} +1 -1
- package/dist/assets/{view-tile-add-CysKFegv.js → view-tile-add-BXX2-rGD.js} +1 -1
- package/dist/assets/view-tile-add-Cn7SJEqT.js +1 -0
- package/dist/assets/{view-tile-data-source-add-Dtxzfau1.js → view-tile-data-source-add-pxfcE43r.js} +1 -1
- package/dist/assets/view-tile-data-source-edit-CdWGlpDC.js +1 -0
- package/dist/assets/view-tile-edit-D80VgTdu.js +1 -0
- package/dist/assets/view-tile-edit-XzR_OQfI.js +1 -0
- package/dist/assets/{view-tile-edit-DA2fNfYL.js → view-tile-edit-rO9uSt8e.js} +1 -1
- package/dist/assets/{view-user-add-Cw8Ewmt5.js → view-user-add-MWHxy3nf.js} +1 -1
- package/dist/assets/{view-user-edit-C3fP_UG4.js → view-user-edit-BJeiBIOb.js} +1 -1
- package/dist/assets/view-users-DKrdtOjY.js +1 -0
- package/dist/assets/view-virtual-device-wizard-CCj2n1FE.js +1 -0
- package/dist/assets/weather-DMmOelu3.js +2 -0
- package/dist/assets/weather-forecast.transformers-BKEpj85v.js +1 -0
- package/dist/index.html +96 -94
- package/package.json +1 -1
- package/dist/assets/common-BDejG8Ry.css +0 -1
- package/dist/assets/common-CoPMwt15.js +0 -135
- package/dist/assets/components-BhcKdzs8.js +0 -1
- package/dist/assets/components-Bo0zSRq-.js +0 -8
- package/dist/assets/components-CiDtTRIP.js +0 -6
- package/dist/assets/components-Ck3npXkH.js +0 -1
- package/dist/assets/components-CwI4oc4h.js +0 -1
- package/dist/assets/components-DFn7M7P8.js +0 -1
- package/dist/assets/composables-B8NoX0yi.js +0 -1
- package/dist/assets/composables-DRR44tiz.js +0 -1
- package/dist/assets/composables-Y3z5qfZL.js +0 -1
- package/dist/assets/composables-fi_xPbcU.js +0 -1
- package/dist/assets/dashboard.types-BL_StY9P.js +0 -1
- package/dist/assets/index-BMboulGN.js +0 -9
- package/dist/assets/index-Cquc4YKb.css +0 -1
- package/dist/assets/integration-config-dialog-CD29eKdA.js +0 -1
- package/dist/assets/layout-profile-eUgeGmsX.js +0 -1
- package/dist/assets/layout-sign-DQoDJ4cf.js +0 -1
- package/dist/assets/logs-entries.transformers-lH5ngVX4.js +0 -1
- package/dist/assets/mcp.exceptions-BljuOCTt.js +0 -1
- package/dist/assets/notifications-CXMpHhG5.css +0 -1
- package/dist/assets/notifications.exceptions-9rdw1GeU.js +0 -1
- package/dist/assets/page-configure-BEVX01FY.js +0 -1
- package/dist/assets/schemas.utils-meRZzKVK.js +0 -1
- package/dist/assets/spaces-home-control.constants-7pvytaMK.js +0 -1
- package/dist/assets/system-BHoHzIp7.js +0 -2
- package/dist/assets/types-Bb21yq0P.js +0 -1
- package/dist/assets/types-DNTr_87G.js +0 -1
- package/dist/assets/useBuddyChat-BH48PaUE.js +0 -1
- package/dist/assets/useEventBus-vQNsYIyS.js +0 -1
- package/dist/assets/useExtensions-Bk5NXQMd.js +0 -1
- package/dist/assets/useLocation-DapxyrCs.js +0 -1
- package/dist/assets/useSpaces-Dl88_yBJ.js +0 -1
- package/dist/assets/view-channel-add-IXRzITkP.js +0 -1
- package/dist/assets/view-channel-property-edit-Cf9sdZEV.js +0 -1
- package/dist/assets/view-data-source-add-D88BBTjK.js +0 -1
- package/dist/assets/view-data-source-edit-CYbGAY-U.js +0 -1
- package/dist/assets/view-data-source-edit-CqomLDF1.js +0 -1
- package/dist/assets/view-device-BXfpD62O.js +0 -1
- package/dist/assets/view-device-CoxxlPu_.css +0 -1
- package/dist/assets/view-devices-B1FVAfCK.js +0 -1
- package/dist/assets/view-extension-detail-BIj3vTbd.js +0 -1
- package/dist/assets/view-location-ByhZJx_6.js +0 -1
- package/dist/assets/view-location-add-C1eF2Urv.js +0 -1
- package/dist/assets/view-location-edit-CrUo0t6u.js +0 -1
- package/dist/assets/view-locations-D_OBOx6B.js +0 -1
- package/dist/assets/view-mcp-clients-D_IUC93a.js +0 -1
- package/dist/assets/view-mcp-oauth-management-BMuB6eti.js +0 -1
- package/dist/assets/view-notifications-CYHCdRsx.js +0 -1
- package/dist/assets/view-notifications-WYb2ehle.css +0 -1
- package/dist/assets/view-onboarding-B_q-NXIi.js +0 -1
- package/dist/assets/view-page-data-source-edit-CfElv5SN.js +0 -1
- package/dist/assets/view-remote-access-D1Wi7gy8.js +0 -1
- package/dist/assets/view-space-edit-COMCYPK1.js +0 -1
- package/dist/assets/view-system-logs-CQWo5Rbb.js +0 -1
- package/dist/assets/view-tile-add-h_oTIQ1I.js +0 -1
- package/dist/assets/view-tile-data-source-edit-BUgUtQup.js +0 -1
- package/dist/assets/view-tile-edit-B03viw4S.js +0 -1
- package/dist/assets/view-tile-edit-D-FPuQP4.js +0 -1
- package/dist/assets/view-users-DWUpWsPr.js +0 -1
- package/dist/assets/view-virtual-device-wizard-BbG4BQgL.js +0 -1
- package/dist/assets/weather-BBPDcFBG.js +0 -2
- package/dist/assets/weather-forecast.transformers-Ba10ZBsx.js +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/layout-sign-lJc9My5g.js","assets/layout-sign-BR-IRKTg.js","assets/rolldown-runtime-QTnfLwEv.js","assets/icon-with-child-CgZMNB3F.js","assets/icon-with-child-1Kb-D21P.css","assets/common-CEAYa_VX.js","assets/common-BI15rKA4.css","assets/card-C50YgvLJ.js","assets/link-mE1gaRBg.js","assets/auth.constants-BM6DNCoE.js","assets/view-sign-in-CZRERL0Y.js","assets/vue-meta.esm-browser.min-C5z7o_np.js","assets/useEventBus-C7h8fK0M.js","assets/components-CofHdxQO.js","assets/table-CP4k6PuT.js","assets/_baseClone-BRvt9rE2.js","assets/checkbox-DKrpi0d7.js","assets/omit-DRbsINX4.js","assets/form-CYGBQyZI.js","assets/alert-B_504iE8.js","assets/select-BE-J6w_y.js","assets/clamp-BIBuaymK.js","assets/dialog-BKnLpTNm.js","assets/use-dialog-BFPWhCwQ.js","assets/directive-D42ORGRu.js","assets/keys-CIqUg3Jv.js","assets/usePersonalTokens-DwMWVRNS.js","assets/view-sign-up-CrUHPweO.js","assets/layout-lock-CoJt4ng5.js","assets/view-lock-screen-CvMhzPRT.js","assets/layout-profile-BH6_ndbj.js","assets/layout-profile-DaySzWNs.js","assets/tabs-BlmPldJW.js","assets/use-ordered-children-CbAW48y2.js","assets/view-profile-general-D_6x0Tyu.js","assets/composables-CuDyfiS0.js","assets/view-profile-security-BgZi5Vkz.js","assets/view-users-DKrdtOjY.js","assets/drawer-Bv6YcfZX.js","assets/composables-CO2f80jd.js","assets/dist-DJgPCOr0.js","assets/list-users-Dtqpo3YK.js","assets/pagination-CFSm62Hu.js","assets/view-user-add-MWHxy3nf.js","assets/useUuid-B2AwaEQg.js","assets/components-Dg_-11L_.js","assets/view-user-edit-BJeiBIOb.js","assets/view-buddy-chat-DpaYzexP.js","assets/useBuddyChat-BQeijZgm.js","assets/radio-Cmy69XUu.js","assets/empty-DvXiCUNF.js","assets/steps-ChWGGNoh.js","assets/usePlugins-BAUrRkxK.js","assets/config.constants-17QBQ_kF.js","assets/integration-config-dialog-CfcgPh5F.js","assets/useSpaces-dSwttzjs.js","assets/keys-BYonWGX0.js","assets/view-extensions-BEUE9DZM.js","assets/composables-DIjPmeHV.js","assets/system.constants-BvSIFqdm.js","assets/logs-entries.transformers-CZw7f53p.js","assets/system.exceptions-BOq4IhGI.js","assets/useExtensions-mIxpx3RO.js","assets/components-niPBJezT.js","assets/skeleton-DkyCzTs7.js","assets/input-number-DcR-vPr4.js","assets/collapse-CcS8OeLM.js","assets/components-1l-XQ9JU.js","assets/descriptions-Bk8rb6i3.js","assets/col-Brj0AIcp.js","assets/config-CIAUSdP7.js","assets/useModules-BqwGbI5l.js","assets/usePlugin-DQ16ENWC.js","assets/useConfigModule-l8zp4LY1.js","assets/useModule-CGQr8Yht.js","assets/useNumberFormat-CLztaSFk.js","assets/composables-o5wEPPAf.js","assets/weather.constants-_S0I_w_Q.js","assets/devices.constants-HX5whDWr.js","assets/components-CIxy4TbQ.css","assets/system-DVGufF5G.js","assets/components-B4G4KJov.css","assets/view-extension-detail-BzdALouU.js","assets/view-extension-detail-BjYHp3ZH.css","assets/view-remote-access-DtZM_sYV.js","assets/components-v7BtnQr-.js","assets/components-B-x0bFEi.css","assets/view-remote-access-CAUqIDKh.css","assets/view-mcp-clients-CXdQQbgy.js","assets/mcp.exceptions-DqhuYDrK.js","assets/useMcpClients-D44DSCoV.js","assets/view-mcp-clients-UCOJ6iFl.css","assets/view-mcp-oauth-management-u-zf8VgR.js","assets/view-mcp-oauth-management-v0bn94UW.css","assets/view-mcp-oauth-consent-CdSzhX8Z.js","assets/view-mcp-oauth-consent-Vw4DfXN0.css","assets/view-notifications-Cg2TL1DH.js","assets/notifications.exceptions-CTWKr2hv.js","assets/notifications-ByzWXMhj.css","assets/view-onboarding-DTDmluyn.js","assets/useGeolocation-DlU1KRo-.js","assets/useGeolocation-vh-t_kPv.css","assets/keys-DghNVBR5.js","assets/useDevicesPlugins-IYuPoZmZ.js","assets/devices-virtual.constants-Ckcs-m8t.js","assets/view-scenes-DWbfoSPZ.js","assets/composables-CdLuPMLl.js","assets/keys-DExX7OfU.js","assets/components-B4a-3cag.js","assets/composables-BiL7NDB2.js","assets/schemas.utils-DPM2Btj1.js","assets/composables-D5CRUz8s.js","assets/scene-add-form-CyeR3pxj.js","assets/scene-add-form-TKYtnlDS.css","assets/scene-edit-form-dBV9baT5.js","assets/scene-edit-form-DId_sQZd.css","assets/components-B8YODd0w.css","assets/view-scene-add-LFcdVTaN.js","assets/view-scene-edit-fX-u8fib.js","assets/view-stats-sqy4OQw5.js","assets/weather-DMmOelu3.js","assets/keys-DgS2vm-E.js","assets/dashboard-CQWK08VY.js","assets/first-load.utils-Dp_L_7Dk.js","assets/types-jnyNKIzd.js","assets/composables-CRIJLd1I.js","assets/useDataSources-CI2pLb0w.js","assets/usePage-D3Y3z-Z-.js","assets/dashboard.types-FCvSt30R.js","assets/components-BqvPyJ09.js","assets/composables-ZUeIfONp.js","assets/components-CDS0rEqD.js","assets/slider-B7Mhws2_.js","assets/components-CGY9a3zE.js","assets/components-DQG8YRnR.css","assets/composables-DrSNDrtP.js","assets/useLocation-CKsKAhov.js","assets/types-BFzk34Iy.js","assets/components-BGiFbtPn.css","assets/tile-edit-form-DiShECn4.js","assets/tile-detail-BbYkd7G4.js","assets/list-data-sources-adjust-C1BWaGAY.js","assets/list-data-sources-adjust-REFqavw6.css","assets/select-data-source-plugin-CgTE90rj.js","assets/data-source-edit-form-Ba0Rox_i.js","assets/components-CjdlFz1u.css","assets/devices-Cx9K7dqW.js","assets/components-DJ-PhAdU.js","assets/components-CcNFsBLM.css","assets/spaces-DUnXUSuq.js","assets/weather-icon-BogpHIOS.js","assets/composables-DNfuP9v9.js","assets/list-locations-B_k17JmN.js","assets/weather-forecast.transformers-BKEpj85v.js","assets/weather-BKeryvnv.css","assets/view-virtual-device-wizard-CCj2n1FE.js","assets/view-page-configure-C5n0g4eO.js","assets/page-configure-Bt3Zbbmn.js","assets/gridstack.min-LmXwzWSF.js","assets/gridstack-DrhE8fGa.css","assets/page-configure-Bhbyv1tV.css","assets/keys-ctR4af6H.js","assets/pages-cards.contants-DcS0YOKq.js","assets/view-card-add-BcIFVzzf.js","assets/card-add-form-hQfcolyj.js","assets/view-card-edit-BbS-QIUa.js","assets/card-edit-form-BPs9Aljn.js","assets/view-tile-add-Cn7SJEqT.js","assets/view-tile-edit-D80VgTdu.js","assets/view-data-source-add-_7ip7mrf.js","assets/view-data-source-edit-CoUrprKG.js","assets/view-page-configure-C-eA0dC4.js","assets/page-configure-CVQE_kOC.js","assets/page-configure-beBdD2Qu.css","assets/pages-tiles.constants-BzKCg6RC.js","assets/view-tile-add-BXX2-rGD.js","assets/view-tile-edit-XzR_OQfI.js","assets/view-data-source-add-Bzb-61aK.js","assets/view-data-source-edit-DrlMJPDn.js","assets/view-simulator-device-wizard-DO1CpTZ7.js","assets/simulator.constants-CaAdgiGs.js","assets/view-space-configure-DpiLxtMc.js","assets/spaces-home-control.constants-DR2Pcn9V.js","assets/spaces-home-control-CWNguIE5.css","assets/view-space-configure-DKlvZpIj.css","assets/view-space-edit-uz1TPncu.js","assets/view-not-found-G5Aj98MD.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e,t}from"./rolldown-runtime-QTnfLwEv.js";import{$ as n,$r as r,Ar as i,Br as a,Cr as o,D as s,Di as c,Dr as l,Dt as u,E as d,Ei as f,Er as p,Fr as m,Gr as h,H as g,Hr as _,I as v,It as y,J as b,Ki as x,L as S,Li as C,Lt as w,Mi as T,Mr as E,Mt as ee,Nr as D,Nt as te,O as ne,Oi as re,Or as O,Pr as k,Qr as A,R as ie,Ri as ae,Si as j,T as M,Tt as oe,Ui as se,Vr as ce,Wi as N,Wr as le,X as ue,Xr as de,Y as fe,Yr as pe,Z as me,_i as he,_r as ge,an as _e,at as ve,bi as P,bt as ye,ci as F,cn as be,di as xe,ei as I,fr as Se,gn as Ce,hn as we,i as Te,ii as Ee,ji as L,jr as De,k as Oe,ki as ke,kr as R,ln as Ae,n as je,ni as Me,nt as Ne,oi as Pe,ot as Fe,qi as z,r as Ie,rt as Le,si as Re,t as ze,ti as Be,ui as B,ur as Ve,vi as He,vn as Ue,vr as We,wt as Ge,xn as Ke,xr as V,yr as qe,z as Je,zi as Ye,zr as Xe}from"./icon-with-child-CgZMNB3F.js";import{n as Ze,r as Qe,t as $e}from"./vue-meta.esm-browser.min-C5z7o_np.js";import{$i as et,$n as tt,$r as nt,$t as rt,Ai as it,An as at,At as ot,B as st,Bi as ct,Bn as lt,Bt as H,C as ut,Ci as dt,Cn as ft,Ct as pt,D as mt,Dn as ht,Dr as gt,Dt as _t,E as vt,En as yt,F as bt,Ft as xt,Gr as St,H as Ct,Hn as wt,I as Tt,In as Et,J as Dt,Jr as Ot,Jt as kt,Kt as At,L as jt,Ln as Mt,Mn as Nt,Mr as Pt,Mt as Ft,Nn as It,Nr as Lt,Nt as Rt,Or as zt,P as Bt,Pr as Vt,Qt as Ht,R as Ut,Rn as Wt,S as Gt,Sn as Kt,T as qt,Tr as Jt,Tt as Yt,Ur as Xt,V as Zt,Vn as Qt,W as $t,Xr as U,Xt as en,Yt as tn,Zt as nn,_ as rn,_n as an,_r as on,_t as sn,a as cn,aa as ln,ai as un,an as dn,ar as fn,at as W,b as pn,bn as mn,bt as hn,c as gn,ci as _n,cr as vn,d as yn,dn as bn,dr as xn,dt as Sn,en as Cn,er as wn,f as Tn,fn as En,fr as Dn,ft as G,g as On,gt as kn,ht as K,i as An,ia as jn,in as Mn,ir as Nn,it as Pn,jn as Fn,jr as In,jt as Ln,k as Rn,ki as zn,kn as Bn,kr as Vn,kt as Hn,l as Un,ln as Wn,lt as Gn,mt as q,n as Kn,na as qn,nn as Jn,oi as Yn,or as Xn,ot as J,p as Zn,q as Qn,qi as $n,qt as er,r as tr,ra as nr,rn as rr,rt as ir,s as ar,sr as or,st as sr,t as cr,ta as lr,ti as ur,tn as dr,u as fr,ui as pr,un as mr,ut as Y,v as hr,vi as gr,vt as X,w as _r,wt as vr,x as yr,xn as br,xt as xr,y as Sr,yi as Cr,yn as wr,yr as Tr,yt as Er,z as Dr,zn as Or,zt as kr}from"./common-CEAYa_VX.js";import{n as Ar,t as jr}from"./descriptions-Bk8rb6i3.js";import{n as Mr,r as Nr,t as Pr}from"./table-CP4k6PuT.js";import{t as Fr}from"./omit-DRbsINX4.js";import{n as Z,t as Ir}from"./form-CYGBQyZI.js";import{t as Q}from"./alert-B_504iE8.js";import{a as Lr,c as Rr,d as zr,f as Br,i as Vr,l as Hr,m as Ur,n as Wr,o as Gr,p as Kr,r as qr,s as Jr,t as Yr,u as Xr}from"./useGeolocation-DlU1KRo-.js";import{n as Zr,t as Qr}from"./input-number-DcR-vPr4.js";import{n as $r,r as ei,t as ti}from"./select-BE-J6w_y.js";import{t as ni}from"./card-C50YgvLJ.js";import{n as ri,t as ii}from"./checkbox-DKrpi0d7.js";import{n as ai,r as oi}from"./radio-Cmy69XUu.js";import{n as si,t as ci}from"./col-Brj0AIcp.js";import{n as li,t as ui}from"./collapse-CcS8OeLM.js";import{t as di}from"./dialog-BKnLpTNm.js";import{_ as fi,b as pi,g as mi,h as hi,v as gi,y as _i}from"./components-DJ-PhAdU.js";import{a as vi,c as yi,d as bi,f as xi,i as Si,l as Ci,o as wi,s as Ti,u as Ei}from"./useBuddyChat-BQeijZgm.js";import{b as Di}from"./components-1l-XQ9JU.js";import{n as Oi,t as ki}from"./steps-ChWGGNoh.js";import{n as Ai,t as ji}from"./tabs-BlmPldJW.js";import{i as Mi,n as Ni,r as Pi}from"./components-CGY9a3zE.js";import{t as Fi}from"./directive-D42ORGRu.js";import{_ as Ii,a as Li,c as Ri,d as zi,f as Bi,g as Vi,h as Hi,i as Ui,l as Wi,m as Gi,n as Ki,p as qi,r as Ji,s as Yi,t as Xi,u as Zi}from"./config-CIAUSdP7.js";import{i as Qi,n as $i,r as ea}from"./useModules-BqwGbI5l.js";import{i as ta,n as na,r as ra}from"./usePlugins-BAUrRkxK.js";import{t as ia}from"./useEventBus-C7h8fK0M.js";import{t as aa}from"./first-load.utils-Dp_L_7Dk.js";import{t as oa}from"./schemas.utils-DPM2Btj1.js";import{t as sa}from"./common.constants-C6QiEtuS.js";import{c as ca,i as la,l as ua,n as da,o as fa,r as pa,t as ma}from"./auth.constants-BM6DNCoE.js";import{t as ha}from"./keys-CIqUg3Jv.js";import{_ as ga,c as _a,d as va,f as ya,g as ba,l as xa,m as Sa,u as Ca}from"./composables-CO2f80jd.js";import{t as wa}from"./dist-DJgPCOr0.js";import"./components-CofHdxQO.js";import"./layout-profile-DaySzWNs.js";import"./layout-sign-BR-IRKTg.js";import{c as Ta,i as Ea,l as Da,n as Oa,r as ka,s as Aa}from"./config.constants-17QBQ_kF.js";import{n as ja}from"./usePlugin-DQ16ENWC.js";import{a as Ma,c as Na,d as Pa,f as Fa,i as Ia,o as La,r as Ra,t as za}from"./keys-DgS2vm-E.js";import{n as Ba,r as Va,t as Ha}from"./dashboard-CQWK08VY.js";import{a as Ua,c as Wa,d as Ga,f as Ka,o as qa,s as Ja}from"./types-jnyNKIzd.js";import{c as Ya,f as Xa,g as Za,h as Qa,i as $a,l as eo,n as to,o as no,p as ro,r as io,s as ao,t as oo}from"./composables-CRIJLd1I.js";import{i as so}from"./useDataSources-CI2pLb0w.js";import{c as co,i as lo,l as uo,n as fo,r as po,s as mo,t as ho,u as go}from"./dashboard.types-FCvSt30R.js";import{c as _o}from"./components-BqvPyJ09.js";import{o as vo}from"./components-CDS0rEqD.js";import{c as yo,d as bo,f as xo,g as So,n as Co}from"./keys-BYonWGX0.js";import{a as wo,c as To,o as Eo,s as Do,t as Oo}from"./useSpaces-dSwttzjs.js";import{d as ko,u as Ao}from"./composables-CdLuPMLl.js";import{a as jo,n as Mo,r as No}from"./keys-DghNVBR5.js";import{a as Po,i as Fo,n as Io,r as Lo,t as Ro}from"./spaces-home-control.constants-DR2Pcn9V.js";import{a as zo,g as Bo,i as Vo,o as Ho,p as Uo}from"./composables-DrSNDrtP.js";import{a as Wo,n as Go}from"./weather.constants-_S0I_w_Q.js";import{t as Ko}from"./types-BFzk34Iy.js";import"./tile-edit-form-DiShECn4.js";import{a as $,n as qo,o as Jo}from"./devices.constants-HX5whDWr.js";import{a as Yo,c as Xo,d as Zo,f as Qo,g as $o,h as es,i as ts,l as ns,m as rs,n as is,o as as,p as os,r as ss,s as cs,t as ls,u as us}from"./devices-Cx9K7dqW.js";import{C as ds,D as fs,H as ps,R as ms,U as hs,W as gs,_ as _s,f as vs,g as ys,h as bs,l as xs,o as Ss,s as Cs,u as ws,v as Ts,y as Es,z as Ds}from"./composables-BiL7NDB2.js";import{t as Os}from"./useDevicesPlugins-IYuPoZmZ.js";import{i as ks,o as As}from"./composables-o5wEPPAf.js";import{t as js}from"./system-DVGufF5G.js";import{a as Ms,c as Ns,o as Ps,s as Fs}from"./composables-DIjPmeHV.js";import{c as Is,d as Ls,f as Rs,g as zs,h as Bs,i as Vs,l as Hs,m as Us,o as Ws,u as Gs}from"./components-v7BtnQr-.js";import{i as Ks,o as qs,r as Js}from"./mcp.exceptions-DqhuYDrK.js";import{o as Ys}from"./useMcpClients-D44DSCoV.js";import{i as Xs,r as Zs,t as Qs}from"./notifications.exceptions-CTWKr2hv.js";import{t as $s}from"./components-B4a-3cag.js";import{_ as ec,b as tc,c as nc,d as rc,f as ic,g as ac,h as oc,i as sc,l as cc,m as lc,p as uc,r as dc,s as fc,u as pc,y as mc}from"./composables-D5CRUz8s.js";import{t as hc}from"./spaces-DUnXUSuq.js";import{S as gc,T as _c,_ as vc,b as yc,n as bc,r as xc,t as Sc,w as Cc,x as wc,y as Tc}from"./weather-DMmOelu3.js";import{i as Ec,o as Dc,r as Oc,t as kc}from"./devices-virtual.constants-Ckcs-m8t.js";import"./page-configure-Bt3Zbbmn.js";import{t as Ac}from"./keys-ctR4af6H.js";import"./card-add-form-hQfcolyj.js";import"./card-edit-form-BPs9Aljn.js";import{a as jc,i as Mc,o as Nc,r as Pc,t as Fc}from"./pages-cards.contants-DcS0YOKq.js";import"./page-configure-CVQE_kOC.js";import{n as Ic,r as Lc,t as Rc}from"./pages-tiles.constants-BzKCg6RC.js";import{t as zc}from"./composables-CuDyfiS0.js";import{a as Bc,n as Vc,r as Hc,t as Uc}from"./simulator.constants-CaAdgiGs.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function Wc(e){return{all:e||=new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(e){e(n)}),(r=e.get(`*`))&&r.slice().map(function(e){e(t,n)})}}}var Gc=/\{[^{}]+\}/g,Kc=()=>typeof process==`object`&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function qc(){return Math.random().toString(36).slice(2,11)}function Jc(e){let{baseUrl:t=``,Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:a,pathSerializer:o,headers:s,requestInitExt:c=void 0,...l}={...e};c=Kc()?c:void 0,t=rl(t);let u=[];async function d(e,d){let{baseUrl:f,fetch:p=r,Request:m=n,headers:h,params:g={},parseAs:_=`json`,querySerializer:v,bodySerializer:y=a??el,pathSerializer:b,body:x,middleware:S=[],...C}=d||{},w=t;f&&(w=rl(f)??t);let T=typeof i==`function`?i:Qc(i);v&&(T=typeof v==`function`?v:Qc({...typeof i==`object`?i:{},...v}));let E=b||o||$c,ee=x===void 0?void 0:y(x,nl(s,h,g.header)),D=nl(ee===void 0||ee instanceof FormData?{}:{"Content-Type":`application/json`},s,h,g.header),te=[...u,...S],ne={redirect:`follow`,...l,...C,body:ee,headers:D},re,O,k=new m(tl(e,{baseUrl:w,params:g,querySerializer:T,pathSerializer:E}),ne),A;for(let e in C)e in k||(k[e]=C[e]);if(te.length){re=qc(),O=Object.freeze({baseUrl:w,fetch:p,parseAs:_,querySerializer:T,bodySerializer:y,pathSerializer:E});for(let t of te)if(t&&typeof t==`object`&&typeof t.onRequest==`function`){let n=await t.onRequest({request:k,schemaPath:e,params:g,options:O,id:re});if(n)if(n instanceof m)k=n;else if(n instanceof Response){A=n;break}else throw Error(`onRequest: must return new Request() or Response() when modifying the request`)}}if(!A){try{A=await p(k,c)}catch(t){let n=t;if(te.length)for(let t=te.length-1;t>=0;t--){let r=te[t];if(r&&typeof r==`object`&&typeof r.onError==`function`){let t=await r.onError({request:k,error:n,schemaPath:e,params:g,options:O,id:re});if(t){if(t instanceof Response){n=void 0,A=t;break}if(t instanceof Error){n=t;continue}throw Error(`onError: must return new Response() or instance of Error`)}}}if(n)throw n}if(te.length)for(let t=te.length-1;t>=0;t--){let n=te[t];if(n&&typeof n==`object`&&typeof n.onResponse==`function`){let t=await n.onResponse({request:k,response:A,schemaPath:e,params:g,options:O,id:re});if(t){if(!(t instanceof Response))throw Error(`onResponse: must return new Response() when modifying the response`);A=t}}}}let ie=A.headers.get(`Content-Length`);if(A.status===204||k.method===`HEAD`||ie===`0`&&!A.headers.get(`Transfer-Encoding`)?.includes(`chunked`))return A.ok?{data:void 0,response:A}:{error:void 0,response:A};if(A.ok)return{data:await(async()=>{if(_===`stream`)return A.body;if(_===`json`&&!ie){let e=await A.text();return e?JSON.parse(e):void 0}return await A[_]()})(),response:A};let ae=await A.text();try{ae=JSON.parse(ae)}catch{}return{error:ae,response:A}}return{request(e,t,n){return d(t,{...n,method:e.toUpperCase()})},GET(e,t){return d(e,{...t,method:`GET`})},PUT(e,t){return d(e,{...t,method:`PUT`})},POST(e,t){return d(e,{...t,method:`POST`})},DELETE(e,t){return d(e,{...t,method:`DELETE`})},OPTIONS(e,t){return d(e,{...t,method:`OPTIONS`})},HEAD(e,t){return d(e,{...t,method:`HEAD`})},PATCH(e,t){return d(e,{...t,method:`PATCH`})},TRACE(e,t){return d(e,{...t,method:`TRACE`})},use(...e){for(let t of e)if(t){if(typeof t!=`object`||!(`onRequest`in t||`onResponse`in t||`onError`in t))throw Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");u.push(t)}},eject(...e){for(let t of e){let e=u.indexOf(t);e!==-1&&u.splice(e,1)}}}}function Yc(e,t,n){if(t==null)return``;if(typeof t==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${n?.allowReserved===!0?t:encodeURIComponent(t)}`}function Xc(e,t,n){if(!t||typeof t!=`object`)return``;let r=[],i={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`;if(n.style!==`deepObject`&&n.explode===!1){for(let e in t)r.push(e,n.allowReserved===!0?t[e]:encodeURIComponent(t[e]));let i=r.join(`,`);switch(n.style){case`form`:return`${e}=${i}`;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return i}}for(let i in t){let a=n.style===`deepObject`?`${e}[${i}]`:i;r.push(Yc(a,t[i],n))}let a=r.join(i);return n.style===`label`||n.style===`matrix`?`${i}${a}`:a}function Zc(e,t,n){if(!Array.isArray(t))return``;if(n.explode===!1){let r={form:`,`,spaceDelimited:`%20`,pipeDelimited:`|`}[n.style]||`,`,i=(n.allowReserved===!0?t:t.map(e=>encodeURIComponent(e))).join(r);switch(n.style){case`simple`:return i;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return`${e}=${i}`}}let r={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`,i=[];for(let r of t)n.style===`simple`||n.style===`label`?i.push(n.allowReserved===!0?r:encodeURIComponent(r)):i.push(Yc(e,r,n));return n.style===`label`||n.style===`matrix`?`${r}${i.join(r)}`:i.join(r)}function Qc(e){return function(t){let n=[];if(t&&typeof t==`object`)for(let r in t){let i=t[r];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;n.push(Zc(r,i,{style:`form`,explode:!0,...e?.array,allowReserved:e?.allowReserved||!1}));continue}if(typeof i==`object`){n.push(Xc(r,i,{style:`deepObject`,explode:!0,...e?.object,allowReserved:e?.allowReserved||!1}));continue}n.push(Yc(r,i,e))}}return n.join(`&`)}}function $c(e,t){let n=e;for(let r of e.match(Gc)??[]){let e=r.substring(1,r.length-1),i=!1,a=`simple`;if(e.endsWith(`*`)&&(i=!0,e=e.substring(0,e.length-1)),e.startsWith(`.`)?(a=`label`,e=e.substring(1)):e.startsWith(`;`)&&(a=`matrix`,e=e.substring(1)),!t||t[e]===void 0||t[e]===null)continue;let o=t[e];if(Array.isArray(o)){n=n.replace(r,Zc(e,o,{style:a,explode:i}));continue}if(typeof o==`object`){n=n.replace(r,Xc(e,o,{style:a,explode:i}));continue}if(a===`matrix`){n=n.replace(r,`;${Yc(e,o)}`);continue}n=n.replace(r,a===`label`?`.${encodeURIComponent(o)}`:encodeURIComponent(o))}return n}function el(e,t){return e instanceof FormData?e:t&&(t.get instanceof Function?t.get(`Content-Type`)??t.get(`content-type`):t[`Content-Type`]??t[`content-type`])===`application/x-www-form-urlencoded`?new URLSearchParams(e).toString():JSON.stringify(e)}function tl(e,t){let n=`${t.baseUrl}${e}`;t.params?.path&&(n=t.pathSerializer(n,t.params.path));let r=t.querySerializer(t.params.query??{});return r.startsWith(`?`)&&(r=r.substring(1)),r&&(n+=`?${r}`),n}function nl(...e){let t=new Headers;for(let n of e){if(!n||typeof n!=`object`)continue;let e=n instanceof Headers?n.entries():Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,r)}return t}function rl(e){return e.endsWith(`/`)?e.substring(0,e.length-1):e}var il=[],al=[`year`,`years`,`month`,`months`,`date`,`dates`,`week`,`datetime`,`datetimerange`,`daterange`,`monthrange`,`yearrange`],ol=[`hours`,`minutes`,`seconds`],sl=`EP_PICKER_BASE`,cl=`ElPopperOptions`,ll=Symbol(`commonPickerContextKey`),ul=`HH:mm:ss`,dl=`YYYY-MM-DD`,fl={date:dl,dates:dl,week:`gggg[w]ww`,year:`YYYY`,years:`YYYY`,month:`YYYY-MM`,months:`YYYY-MM`,datetime:`${dl} ${ul}`,monthrange:`YYYY-MM`,yearrange:`YYYY`,daterange:dl,datetimerange:`${dl} ${ul}`},pl=e(t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs=r()})(e,(function(){var e=1e3,t=6e4,n=36e5,r=`millisecond`,i=`second`,a=`minute`,o=`hour`,s=`day`,c=`week`,l=`month`,u=`quarter`,d=`year`,f=`date`,p=`Invalid Date`,m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,h=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:`en`,weekdays:`Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday`.split(`_`),months:`January_February_March_April_May_June_July_August_September_October_November_December`.split(`_`),ordinal:function(e){var t=[`th`,`st`,`nd`,`rd`],n=e%100;return`[`+e+(t[(n-20)%10]||t[n]||t[0])+`]`}},_=function(e,t,n){var r=String(e);return!r||r.length>=t?e:``+Array(t+1-r.length).join(n)+e},v={s:_,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?`+`:`-`)+_(r,2,`0`)+`:`+_(i,2,`0`)},m:function e(t,n){if(t.date()<n.date())return-e(n,t);var r=12*(n.year()-t.year())+(n.month()-t.month()),i=t.clone().add(r,l),a=n-i<0,o=t.clone().add(r+(a?-1:1),l);return+(-(r+(n-i)/(a?i-o:o-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:l,y:d,w:c,d:s,D:f,h:o,m:a,s:i,ms:r,Q:u}[e]||String(e||``).toLowerCase().replace(/s$/,``)},u:function(e){return e===void 0}},y=`en`,b={};b[y]=g;var x=`$isDayjsObject`,S=function(e){return e instanceof E||!(!e||!e[x])},C=function e(t,n,r){var i;if(!t)return y;if(typeof t==`string`){var a=t.toLowerCase();b[a]&&(i=a),n&&(b[a]=n,i=a);var o=t.split(`-`);if(!i&&o.length>1)return e(o[0])}else{var s=t.name;b[s]=t,i=s}return!r&&i&&(y=i),i||!r&&y},w=function(e,t){if(S(e))return e.clone();var n=typeof t==`object`?t:{};return n.date=e,n.args=arguments,new E(n)},T=v;T.l=C,T.i=S,T.w=function(e,t){return w(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var E=function(){function g(e){this.$L=C(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[x]=!0}var _=g.prototype;return _.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(t===null)return new Date(NaN);if(T.u(t))return new Date;if(t instanceof Date)return new Date(t);if(typeof t==`string`&&!/Z$/i.test(t)){var r=t.match(m);if(r){var i=r[2]-1||0,a=(r[7]||`0`).substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.init()},_.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},_.$utils=function(){return T},_.isValid=function(){return this.$d.toString()!==p},_.isSame=function(e,t){var n=w(e);return this.startOf(t)<=n&&n<=this.endOf(t)},_.isAfter=function(e,t){return w(e)<this.startOf(t)},_.isBefore=function(e,t){return this.endOf(t)<w(e)},_.$g=function(e,t,n){return T.u(e)?this[t]:this.set(n,e)},_.unix=function(){return Math.floor(this.valueOf()/1e3)},_.valueOf=function(){return this.$d.getTime()},_.startOf=function(e,t){var n=this,r=!!T.u(t)||t,u=T.p(e),p=function(e,t){var i=T.w(n.$u?Date.UTC(n.$y,t,e):new Date(n.$y,t,e),n);return r?i:i.endOf(s)},m=function(e,t){return T.w(n.toDate()[e].apply(n.toDate(`s`),(r?[0,0,0,0]:[23,59,59,999]).slice(t)),n)},h=this.$W,g=this.$M,_=this.$D,v=`set`+(this.$u?`UTC`:``);switch(u){case d:return r?p(1,0):p(31,11);case l:return r?p(1,g):p(0,g+1);case c:var y=this.$locale().weekStart||0,b=(h<y?h+7:h)-y;return p(r?_-b:_+(6-b),g);case s:case f:return m(v+`Hours`,0);case o:return m(v+`Minutes`,1);case a:return m(v+`Seconds`,2);case i:return m(v+`Milliseconds`,3);default:return this.clone()}},_.endOf=function(e){return this.startOf(e,!1)},_.$set=function(e,t){var n,c=T.p(e),u=`set`+(this.$u?`UTC`:``),p=(n={},n[s]=u+`Date`,n[f]=u+`Date`,n[l]=u+`Month`,n[d]=u+`FullYear`,n[o]=u+`Hours`,n[a]=u+`Minutes`,n[i]=u+`Seconds`,n[r]=u+`Milliseconds`,n)[c],m=c===s?this.$D+(t-this.$W):t;if(c===l||c===d){var h=this.clone().set(f,1);h.$d[p](m),h.init(),this.$d=h.set(f,Math.min(this.$D,h.daysInMonth())).$d}else p&&this.$d[p](m);return this.init(),this},_.set=function(e,t){return this.clone().$set(e,t)},_.get=function(e){return this[T.p(e)]()},_.add=function(r,u){var f,p=this;r=Number(r);var m=T.p(u),h=function(e){var t=w(p);return T.w(t.date(t.date()+Math.round(e*r)),p)};if(m===l)return this.set(l,this.$M+r);if(m===d)return this.set(d,this.$y+r);if(m===s)return h(1);if(m===c)return h(7);var g=(f={},f[a]=t,f[o]=n,f[i]=e,f)[m]||1,_=this.$d.getTime()+r*g;return T.w(_,this)},_.subtract=function(e,t){return this.add(-1*e,t)},_.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=e||`YYYY-MM-DDTHH:mm:ssZ`,i=T.z(this),a=this.$H,o=this.$m,s=this.$M,c=n.weekdays,l=n.months,u=n.meridiem,d=function(e,n,i,a){return e&&(e[n]||e(t,r))||i[n].slice(0,a)},f=function(e){return T.s(a%12||12,e,`0`)},m=u||function(e,t,n){var r=e<12?`AM`:`PM`;return n?r.toLowerCase():r};return r.replace(h,(function(e,r){return r||function(e){switch(e){case`YY`:return String(t.$y).slice(-2);case`YYYY`:return T.s(t.$y,4,`0`);case`M`:return s+1;case`MM`:return T.s(s+1,2,`0`);case`MMM`:return d(n.monthsShort,s,l,3);case`MMMM`:return d(l,s);case`D`:return t.$D;case`DD`:return T.s(t.$D,2,`0`);case`d`:return String(t.$W);case`dd`:return d(n.weekdaysMin,t.$W,c,2);case`ddd`:return d(n.weekdaysShort,t.$W,c,3);case`dddd`:return c[t.$W];case`H`:return String(a);case`HH`:return T.s(a,2,`0`);case`h`:return f(1);case`hh`:return f(2);case`a`:return m(a,o,!0);case`A`:return m(a,o,!1);case`m`:return String(o);case`mm`:return T.s(o,2,`0`);case`s`:return String(t.$s);case`ss`:return T.s(t.$s,2,`0`);case`SSS`:return T.s(t.$ms,3,`0`);case`Z`:return i}return null}(e)||i.replace(`:`,``)}))},_.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},_.diff=function(r,f,p){var m,h=this,g=T.p(f),_=w(r),v=(_.utcOffset()-this.utcOffset())*t,y=this-_,b=function(){return T.m(h,_)};switch(g){case d:m=b()/12;break;case l:m=b();break;case u:m=b()/3;break;case c:m=(y-v)/6048e5;break;case s:m=(y-v)/864e5;break;case o:m=y/n;break;case a:m=y/t;break;case i:m=y/e;break;default:m=y}return p?m:T.a(m)},_.daysInMonth=function(){return this.endOf(l).$D},_.$locale=function(){return b[this.$L]},_.locale=function(e,t){if(!e)return this.$L;var n=this.clone(),r=C(e,t,!0);return r&&(n.$L=r),n},_.clone=function(){return T.w(this.$d,this)},_.toDate=function(){return new Date(this.valueOf())},_.toJSON=function(){return this.isValid()?this.toISOString():null},_.toISOString=function(){return this.$d.toISOString()},_.toString=function(){return this.$d.toUTCString()},g}(),ee=E.prototype;return w.prototype=ee,[[`$ms`,r],[`$s`,i],[`$m`,a],[`$H`,o],[`$W`,s],[`$M`,l],[`$y`,d],[`$D`,f]].forEach((function(e){ee[e[1]]=function(t){return this.$g(t,e[0],e[1])}})),w.extend=function(e,t){return e.$i||=(e(t,E,w),!0),w},w.locale=C,w.isDayjs=S,w.unix=function(e){return w(1e3*e)},w.en=b[y],w.Ls=b,w.p={},w}))}))(),1),ml=(e,t)=>[e>0?e-1:void 0,e,e<t?e+1:void 0],hl=e=>Array.from(Array.from({length:e}).keys()),gl=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,``).replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,``).trim(),_l=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,``).trim(),vl=function(e,t){let n=ae(e),r=ae(t);return n&&r?e.getTime()===t.getTime():!n&&!r&&e===t},yl=function(e,t){let n=C(e),r=C(t);return n&&r?e.length===t.length&&e.every((e,n)=>vl(e,t[n])):!n&&!r&&vl(e,t)},bl=function(e,t,n){let r=we(t)||t===`x`?(0,pl.default)(e).locale(n):(0,pl.default)(e,t).locale(n);return r.isValid()?r:void 0},xl=function(e,t,n){return we(t)?e:t===`x`?+e:(0,pl.default)(e).locale(n).format(t)},Sl=(e,t)=>{let n=[],r=t?.();for(let t=0;t<e;t++)n.push(r?.includes(t)??!1);return n},Cl=e=>C(e)?e.map(e=>e.toDate()):e.toDate(),wl=be({disabledHours:{type:Ae(Function)},disabledMinutes:{type:Ae(Function)},disabledSeconds:{type:Ae(Function)}}),Tl=be({visible:Boolean,actualVisible:{type:Boolean,default:void 0},format:{type:String,default:``}}),El=be({automaticDropdown:{type:Boolean,default:!0},id:{type:Ae([Array,String])},name:{type:Ae([Array,String])},popperClass:ur.popperClass,popperStyle:ur.popperStyle,format:String,valueFormat:String,dateFormat:String,timeFormat:String,type:{type:String,default:``},clearable:{type:Boolean,default:!0},clearIcon:{type:Ae([String,Object]),default:Ne},editable:{type:Boolean,default:!0},saveOnBlur:{type:Boolean,default:!0},prefixIcon:{type:Ae([String,Object]),default:``},size:u,readonly:Boolean,disabled:{type:Boolean,default:void 0},placeholder:{type:String,default:``},popperOptions:{type:Ae(Object),default:()=>({})},modelValue:{type:Ae([Date,Array,String,Number]),default:``},rangeSeparator:{type:String,default:`-`},startPlaceholder:String,endPlaceholder:String,defaultValue:{type:Ae([Date,Array])},defaultTime:{type:Ae([Date,Array])},isRange:Boolean,...wl,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,tabindex:{type:Ae([String,Number]),default:0},validateEvent:{type:Boolean,default:!0},unlinkPanels:Boolean,placement:{type:Ae(String),values:gr,default:`bottom`},fallbackPlacements:{type:Ae(Array),default:[`bottom`,`top`,`right`,`left`]},...oe,..._n([`ariaLabel`]),showNow:{type:Boolean,default:!0},showConfirm:{type:Boolean,default:!0},showFooter:{type:Boolean,default:!0},showWeekNumber:Boolean}),Dl=be({id:{type:Ae(Array)},name:{type:Ae(Array)},modelValue:{type:Ae([Array,String])},startPlaceholder:String,endPlaceholder:String,disabled:Boolean}),Ol=(e,t)=>{let{lang:n}=te(),r=j(!1),i=j(!1),a=j(null),o=p(()=>{let{modelValue:t}=e;return!t||C(t)&&!t.filter(Boolean).length}),s=r=>{if(!yl(e.modelValue,r)){let i;C(r)?i=r.map(t=>xl(t,e.valueFormat,n.value)):r&&(i=xl(r,e.valueFormat,n.value)),t(lr,r&&i,n.value)}},c=p(()=>{let t;if(o.value?l.value.getDefaultValue&&(t=l.value.getDefaultValue()):t=C(e.modelValue)?e.modelValue.map(t=>bl(t,e.valueFormat,n.value)):bl(e.modelValue??``,e.valueFormat,n.value),l.value.getRangeAvailableTime){let e=l.value.getRangeAvailableTime(t);Ke(e,t)||(t=e,o.value||s(Cl(t)))}return C(t)&&t.some(e=>!e)&&(t=[]),t}),l=j({});return{parsedValue:c,pickerActualVisible:i,pickerOptions:l,pickerVisible:r,userInput:a,valueIsEmpty:o,emitInput:s,onCalendarChange:e=>{t(`calendar-change`,e)},onPanelChange:(e,n,r)=>{t(`panel-change`,e,n,r)},onPick:(e=``,t=!1)=>{r.value=t;let n;n=C(e)?e.map(e=>e.toDate()):e&&e.toDate(),a.value=null,s(n)},onSetPickerOption:e=>{l.value[e[0]]=e[1],l.value.panelReady=!0}}},kl=[`id`,`name`,`placeholder`,`value`,`disabled`],Al=[`id`,`name`,`placeholder`,`value`,`disabled`],jl=k({name:`PickerRangeTrigger`,inheritAttrs:!1,__name:`picker-range-trigger`,props:Dl,emits:[`mouseenter`,`mouseleave`,`click`,`touchstart`,`focus`,`blur`,`startInput`,`endInput`,`startChange`,`endChange`],setup(e,{expose:t,emit:n}){let r=e,a=n,{formItem:o}=v(),{inputId:s}=S(P({id:p(()=>r.id?.[0])}),{formItemContext:o}),c=ct(),u=ee(`date`),d=ee(`range`),f=j(),m=j(),{wrapperRef:h,isFocused:g}=pr(f,{disabled:p(()=>r.disabled)}),_=e=>{a(`click`,e)},y=e=>{a(`mouseenter`,e)},b=e=>{a(`mouseleave`,e)},C=e=>{a(`touchstart`,e)},w=e=>{a(`startInput`,e)},T=e=>{a(`endInput`,e)},E=e=>{a(`startChange`,e)},D=e=>{a(`endChange`,e)};return t({focus:()=>{f.value?.focus()},blur:()=>{f.value?.blur(),m.value?.blur()}}),(e,t)=>(A(),i(`div`,{ref_key:`wrapperRef`,ref:h,class:N([L(u).is(`active`,L(g)),e.$attrs.class]),style:x(e.$attrs.style),onClick:_,onMouseenter:y,onMouseleave:b,onTouchstartPassive:C},[Be(e.$slots,`prefix`),l(`input`,ce(L(c),{id:L(s),ref_key:`inputRef`,ref:f,name:e.name&&e.name[0],placeholder:e.startPlaceholder,value:e.modelValue&&e.modelValue[0],class:L(d).b(`input`),disabled:e.disabled,onInput:w,onChange:E}),null,16,kl),Be(e.$slots,`range-separator`),l(`input`,ce(L(c),{id:e.id&&e.id[1],ref_key:`endInputRef`,ref:m,name:e.name&&e.name[1],placeholder:e.endPlaceholder,value:e.modelValue&&e.modelValue[1],class:L(d).b(`input`),disabled:e.disabled,onInput:T,onChange:D}),null,16,Al),Be(e.$slots,`suffix`)],38))}}),Ml=k({name:`Picker`,__name:`picker`,props:El,emits:[lr,et,`focus`,`blur`,`clear`,`calendar-change`,`panel-change`,`visible-change`,`keydown`],setup(e,{expose:t,emit:i}){let a=e,o=i,s=Pe(),c=ee(`date`),u=ee(`input`),d=ee(`range`),{formItem:f}=v(),m=Xe(cl,{}),y=Ge(a,null),b=j(),S=j(),w=j(null),E=!1,D=ie(),te=Ol(a,o),{parsedValue:ne,pickerActualVisible:re,userInput:k,pickerVisible:ae,pickerOptions:M,valueIsEmpty:oe,emitInput:se,onPick:le,onSetPickerOption:ue,onCalendarChange:de,onPanelChange:fe}=te,{isFocused:pe,handleFocus:me,handleBlur:he}=pr(S,{disabled:D,beforeFocus(){return a.readonly},afterFocus(){a.automaticDropdown&&(ae.value=!0)},beforeBlur(e){return!E&&b.value?.isFocusInsideContent(e)},afterBlur(){Ae.value&&!a.saveOnBlur?oe.value||M.value.handleCancel?.():Ze(),ae.value=!1,E=!1,a.validateEvent&&f?.validate(`blur`).catch(e=>_e(e))}}),ge=j(!1),ve=p(()=>[c.b(`editor`),c.bm(`editor`,a.type),u.e(`wrapper`),c.is(`disabled`,D.value),c.is(`active`,ae.value),d.b(`editor`),Ke?d.bm(`editor`,Ke.value):``,s.class]),P=p(()=>[u.e(`icon`),d.e(`close-icon`),Ie.value?``:d.em(`close-icon`,`hidden`)]);F(ae,e=>{e?_(()=>{e&&(w.value=a.modelValue)}):(k.value=null,_(()=>{ye(a.modelValue)}))});let ye=(e,t)=>{(t||!yl(e,w.value))&&(o(et,e),t&&(w.value=e),a.validateEvent&&f?.validate(`change`).catch(e=>_e(e)))},be=e=>{o(`keydown`,e)},xe=p(()=>S.value?Array.from(S.value.$el.querySelectorAll(`input`)):[]),I=(e,t,n)=>{let r=xe.value;r.length&&(!n||n===`min`?(r[0].setSelectionRange(e,t),r[0].focus()):n===`max`&&(r[1].setSelectionRange(e,t),r[1].focus()))},Se=()=>{re.value=!0},Ce=()=>{o(`visible-change`,!0)},we=()=>{re.value=!1,ae.value=!1,o(`visible-change`,!1)},Te=()=>{ae.value=!0},De=()=>{ae.value=!1},Oe=p(()=>{let e=$e(ne.value);return C(k.value)?[k.value[0]||e&&e[0]||``,k.value[1]||e&&e[1]||``]:k.value===null?Ae.value&&oe.value&&!a.saveOnBlur||!Ae.value&&oe.value||!ae.value&&oe.value?``:e?je.value||Me.value||Ne.value?e.join(`, `):e:``:k.value}),ke=p(()=>a.type.includes(`time`)),Ae=p(()=>a.type.startsWith(`time`)),je=p(()=>a.type===`dates`),Me=p(()=>a.type===`months`),Ne=p(()=>a.type===`years`),Fe=p(()=>a.prefixIcon||(ke.value?Le:n)),Ie=p(()=>a.clearable&&!D.value&&!a.readonly&&!oe.value&&(ge.value||pe.value)),Re=e=>{a.readonly||D.value||(Ie.value&&(e?.stopPropagation(),M.value.handleClear?M.value.handleClear():se(y.valueOnClear.value),ye(y.valueOnClear.value,!0),we()),o(`clear`))},ze=async e=>{a.readonly||D.value||(e.target?.tagName!==`INPUT`||pe.value||!a.automaticDropdown)&&(ae.value=!0)},Ve=()=>{a.readonly||D.value||!oe.value&&a.clearable&&(ge.value=!0)},He=()=>{ge.value=!1},Ue=e=>{a.readonly||D.value||(e.touches[0].target?.tagName!==`INPUT`||pe.value||!a.automaticDropdown)&&(ae.value=!0)},We=p(()=>a.type.includes(`range`)),Ke=Je(),V=p(()=>L(b)?.popperRef?.contentRef),Ye=zn(S,e=>{let t=L(V),n=it(S);t&&(e.target===t||e.composedPath().includes(t))||e.target===n||n&&e.composedPath().includes(n)||(ae.value=!1)});h(()=>{Ye?.()});let Ze=()=>{if(!(Ae.value&&!a.saveOnBlur)){if(k.value){let e=Qe(Oe.value);e&&(tt(e)&&se(Cl(e)),k.value=null)}k.value===``&&(se(y.valueOnClear.value),ye(y.valueOnClear.value,!0),k.value=null)}},Qe=e=>e?M.value.parseUserInput(e):null,$e=e=>e?C(e)?e.map(e=>e.format(a.format)):e.format(a.format):null,tt=e=>M.value.isValidValue(e),rt=async e=>{if(a.readonly||D.value)return;let t=Cr(e);if(be(e),t===qn.esc){ae.value===!0&&(ae.value=!1,e.preventDefault(),e.stopPropagation());return}if(t===qn.down&&(M.value.handleFocusPicker&&(e.preventDefault(),e.stopPropagation()),ae.value===!1&&(ae.value=!0,await _()),M.value.handleFocusPicker)){M.value.handleFocusPicker();return}if(t===qn.tab){E=!0;return}if(t===qn.enter||t===qn.numpadEnter){ae.value?(k.value===null||k.value===``||tt(Qe(Oe.value)))&&(Ze(),ae.value=!1):ae.value=!0,e.preventDefault(),e.stopPropagation();return}if(k.value){e.stopPropagation();return}M.value.handleKeydownInput&&M.value.handleKeydownInput(e)},at=e=>{k.value=e,ae.value||=!0},ot=e=>{let t=e.target;k.value?k.value=[t.value,k.value[1]]:k.value=[t.value,null]},st=e=>{let t=e.target;k.value?k.value=[k.value[0],t.value]:k.value=[null,t.value]},ct=()=>{let e=k.value,t=Qe(e&&e[0]),n=L(ne);if(t&&t.isValid()){k.value=[$e(t),Oe.value?.[1]||null];let e=[t,n&&(n[1]||null)];tt(e)&&(se(Cl(e)),k.value=null)}},lt=()=>{let e=L(k),t=Qe(e&&e[1]),n=L(ne);if(t&&t.isValid()){k.value=[L(Oe)?.[0]||null,$e(t)];let e=[n&&n[0],t];tt(e)&&(se(Cl(e)),k.value=null)}};return r(sl,{props:a,emptyValues:y}),r(ll,te),t({focus:()=>{S.value?.focus()},blur:()=>{S.value?.blur()},handleOpen:Te,handleClose:De,onPick:le}),(e,t)=>(A(),O(L(nt),ce({ref_key:`refPopper`,ref:b,visible:L(ae),effect:`light`,pure:``,trigger:`click`},e.$attrs,{role:`dialog`,teleported:``,transition:`${L(c).namespace.value}-zoom-in-top`,"popper-class":[`${L(c).namespace.value}-picker__popper`,e.popperClass],"popper-style":e.popperStyle,"popper-options":L(m),"fallback-placements":e.fallbackPlacements,"gpu-acceleration":!1,placement:e.placement,"stop-popper-mouse-event":!1,"hide-after":0,persistent:``,onBeforeShow:Se,onShow:Ce,onHide:we}),{default:B(()=>[We.value?(A(),O(jl,{key:1,id:e.id,ref_key:`inputRef`,ref:S,"model-value":Oe.value,name:e.name,disabled:L(D),readonly:!e.editable||e.readonly,"start-placeholder":e.startPlaceholder,"end-placeholder":e.endPlaceholder,class:N(ve.value),style:x(e.$attrs.style),"aria-label":e.ariaLabel,tabindex:e.tabindex,autocomplete:`off`,role:`combobox`,onClick:ze,onFocus:L(me),onBlur:L(he),onStartInput:ot,onStartChange:ct,onEndInput:st,onEndChange:lt,onMousedown:ze,onMouseenter:Ve,onMouseleave:He,onTouchstartPassive:Ue,onKeydown:rt},{prefix:B(()=>[Fe.value?(A(),O(L(g),{key:0,class:N([L(u).e(`icon`),L(d).e(`icon`)])},{default:B(()=>[(A(),O(Ee(Fe.value)))]),_:1},8,[`class`])):R(`v-if`,!0)]),"range-separator":B(()=>[Be(e.$slots,`range-separator`,{},()=>[l(`span`,{class:N(L(d).b(`separator`))},z(e.rangeSeparator),3)])]),suffix:B(()=>[e.clearIcon?(A(),O(L(g),{key:0,class:N(P.value),onMousedown:qe(L(T),[`prevent`]),onClick:Re},{default:B(()=>[(A(),O(Ee(e.clearIcon)))]),_:1},8,[`class`,`onMousedown`])):R(`v-if`,!0)]),_:3},8,[`id`,`model-value`,`name`,`disabled`,`readonly`,`start-placeholder`,`end-placeholder`,`class`,`style`,`aria-label`,`tabindex`,`onFocus`,`onBlur`])):(A(),O(L(U),{key:0,id:e.id,ref_key:`inputRef`,ref:S,"container-role":`combobox`,"model-value":Oe.value,name:e.name,size:L(Ke),disabled:L(D),placeholder:e.placeholder,class:N([L(c).b(`editor`),L(c).bm(`editor`,e.type),L(c).is(`focus`,L(ae)),e.$attrs.class]),style:x(e.$attrs.style),readonly:!e.editable||e.readonly||je.value||Me.value||Ne.value||e.type===`week`,"aria-label":e.ariaLabel,tabindex:e.tabindex,"validate-event":!1,onInput:at,onFocus:L(me),onBlur:L(he),onKeydown:rt,onChange:Ze,onMousedown:ze,onMouseenter:Ve,onMouseleave:He,onTouchstartPassive:Ue,onClick:t[0]||=qe(()=>{},[`stop`])},{prefix:B(()=>[Fe.value?(A(),O(L(g),{key:0,class:N(L(u).e(`icon`)),onMousedown:qe(ze,[`prevent`]),onTouchstartPassive:Ue},{default:B(()=>[(A(),O(Ee(Fe.value)))]),_:1},8,[`class`])):R(`v-if`,!0)]),suffix:B(()=>[Ie.value&&e.clearIcon?(A(),O(L(g),{key:0,class:N(`${L(u).e(`icon`)} clear-icon`),onMousedown:qe(L(T),[`prevent`]),onClick:Re},{default:B(()=>[(A(),O(Ee(e.clearIcon)))]),_:1},8,[`class`,`onMousedown`])):R(`v-if`,!0)]),_:1},8,[`id`,`model-value`,`name`,`size`,`disabled`,`placeholder`,`class`,`style`,`readonly`,`aria-label`,`tabindex`,`onFocus`,`onBlur`]))]),content:B(()=>[Be(e.$slots,`default`,{visible:L(ae),actualVisible:L(re),parsedValue:L(ne),format:e.format,dateFormat:e.dateFormat,timeFormat:e.timeFormat,unlinkPanels:e.unlinkPanels,type:e.type,defaultValue:e.defaultValue,showNow:e.showNow,showConfirm:e.showConfirm,showFooter:e.showFooter,showWeekNumber:e.showWeekNumber,onPick:t[1]||=(...e)=>L(le)&&L(le)(...e),onSelectRange:I,onSetPickerOption:t[2]||=(...e)=>L(ue)&&L(ue)(...e),onCalendarChange:t[3]||=(...e)=>L(de)&&L(de)(...e),onClear:Re,onPanelChange:t[4]||=(...e)=>L(fe)&&L(fe)(...e),onMousedown:t[5]||=qe(()=>{},[`stop`])})]),_:3},16,[`visible`,`transition`,`popper-class`,`popper-style`,`popper-options`,`fallback-placements`,`placement`]))}}),Nl=be({...Tl,datetimeRole:String,parsedValue:{type:Ae(Object)}}),Pl=({getAvailableHours:e,getAvailableMinutes:t,getAvailableSeconds:n})=>{let r=(r,i,a,o)=>{let s={hour:e,minute:t,second:n},c=r;return[`hour`,`minute`,`second`].forEach(e=>{if(s[e]){let t,n=s[e];switch(e){case`minute`:t=n(c.hour(),i,o);break;case`second`:t=n(c.hour(),c.minute(),i,o);break;default:t=n(i,o);break}if(t?.length&&!t.includes(c[e]())){let n=a?0:t.length-1;c=c[e](t[n])}}}),c},i={};return{timePickerOptions:i,getAvailableTime:r,onSetOption:([e,t])=>{i[e]=t}}},Fl=e=>e.map((e,t)=>e||t).filter(e=>e!==!0),Il=(e,t,n)=>({getHoursList:(t,n)=>Sl(24,e&&(()=>e?.(t,n))),getMinutesList:(e,n,r)=>Sl(60,t&&(()=>t?.(e,n,r))),getSecondsList:(e,t,r,i)=>Sl(60,n&&(()=>n?.(e,t,r,i)))}),Ll=(e,t,n)=>{let{getHoursList:r,getMinutesList:i,getSecondsList:a}=Il(e,t,n);return{getAvailableHours:(e,t)=>Fl(r(e,t)),getAvailableMinutes:(e,t,n)=>Fl(i(e,t,n)),getAvailableSeconds:(e,t,n,r)=>Fl(a(e,t,n,r))}},Rl=(e,t)=>{let n=j(e.parsedValue);return F(()=>e.visible,r=>{let i=ke(t.modelValue),a=ke(t.valueOnClear);if(r&&i===a){n.value=a;return}r||(n.value=e.parsedValue)}),n},zl=be({role:{type:String,required:!0},spinnerDate:{type:Ae(Object),required:!0},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:Ae(String),default:``},...wl}),Bl=[`onClick`],Vl=[`onMouseenter`],Hl=k({__name:`basic-time-spinner`,props:zl,emits:[et,`select-range`,`set-option`],setup(e,{emit:t}){let n=e,{isRange:r,format:a,saveOnBlur:o}=Xe(sl).props,s=t,c=ee(`time`),{getHoursList:u,getMinutesList:d,getSecondsList:f}=Il(n.disabledHours,n.disabledMinutes,n.disabledSeconds),m=!1,h={hours:!1,minutes:!1,seconds:!1},v=j(),x={hours:j(),minutes:j(),seconds:j()},S=p(()=>n.showSeconds?ol:ol.slice(0,2)),C=p(()=>{let{spinnerDate:e}=n;return{hours:e.hour(),minutes:e.minute(),seconds:e.second()}}),w=p(()=>{let{hours:e,minutes:t}=L(C),{role:i,spinnerDate:a}=n,o=r?void 0:a;return{hours:u(i,o),minutes:d(e,i,o),seconds:f(e,t,i,o)}}),T=p(()=>{let{hours:e,minutes:t,seconds:n}=L(C);return{hours:ml(e,23),minutes:ml(t,59),seconds:ml(n,59)}}),te=Nr(e=>{m=!1,k(e)},200),ne=e=>{if(!n.amPmMode)return``;let t=n.amPmMode===`A`,r=e<12?` am`:` pm`;return t&&(r=r.toUpperCase()),r},re=e=>{let t=[0,0],n=a||`HH:mm:ss`,r=n.indexOf(`HH`),i=n.indexOf(`mm`),o=n.indexOf(`ss`);switch(e){case`hours`:r!==-1&&(t=[r,r+2]);break;case`minutes`:i!==-1&&(t=[i,i+2]);break;case`seconds`:o!==-1&&(t=[o,o+2]);break}let[c,l]=t;s(`select-range`,c,l),v.value=e},k=e=>{M(e,L(C)[e])},ie=()=>{k(`hours`),k(`minutes`),k(`seconds`)},ae=e=>e.querySelector(`.${c.namespace.value}-scrollbar__wrap`),M=(e,t)=>{if(n.arrowControl)return;let r=L(x[e]);r&&r.$el&&(o||(h[e]=!0,dt(()=>{h[e]=!1})),ae(r.$el).scrollTop=Math.max(0,t*oe(e)))},oe=e=>{let t=L(x[e])?.$el.querySelector(`li`);return t&&Number.parseFloat(y(t,`height`))||0},se=()=>{le(1)},ce=()=>{le(-1)},le=e=>{v.value||re(`hours`);let t=v.value,n=L(C)[t],r=ue(t,n,e,v.value===`hours`?24:60);de(t,r),M(t,r),_(()=>re(t))},ue=(e,t,n,r)=>{let i=(t+n+r)%r,a=L(w)[e];for(;a[i]&&i!==t;)i=(i+n+r)%r;return i},de=(e,t)=>{if(L(w)[e][t])return;let{hours:r,minutes:i,seconds:a}=L(C),o;switch(e){case`hours`:o=n.spinnerDate.hour(t).minute(i).second(a);break;case`minutes`:o=n.spinnerDate.hour(r).minute(t).second(a);break;case`seconds`:o=n.spinnerDate.hour(r).minute(i).second(t);break}s(et,o)},fe=(e,{value:t,disabled:n})=>{n||(de(e,t),re(e),M(e,t))},he=e=>{if(!o&&h[e])return;let t=L(x[e]);t&&(m=!0,te(e),de(e,Math.min(Math.round((ae(t.$el).scrollTop-(ge(e)*.5-10)/oe(e)+3)/oe(e)),e===`hours`?23:59)))},ge=e=>L(x[e]).$el.offsetHeight,_e=()=>{let e=e=>{let t=L(x[e]);t&&t.$el&&(ae(t.$el).onscroll=()=>{he(e)})};e(`hours`),e(`minutes`),e(`seconds`)};pe(()=>{_(()=>{!n.arrowControl&&_e(),ie(),n.role===`start`&&re(`hours`)})});let ve=(e,t)=>{x[t].value=e??void 0};return s(`set-option`,[`${n.role}_scrollDown`,le]),s(`set-option`,[`${n.role}_emitSelectRange`,re]),F(()=>n.spinnerDate,()=>{m||ie()}),(e,t)=>(A(),i(`div`,{class:N([L(c).b(`spinner`),{"has-seconds":e.showSeconds}])},[e.arrowControl?R(`v-if`,!0):(A(!0),i(V,{key:0},I(S.value,t=>(A(),O(L(Ot),{key:t,ref_for:!0,ref:e=>ve(e,t),class:N(L(c).be(`spinner`,`wrapper`)),"wrap-style":`max-height: inherit;`,"view-class":L(c).be(`spinner`,`list`),noresize:``,tag:`ul`,onMouseenter:e=>re(t),onMousemove:e=>k(t)},{default:B(()=>[(A(!0),i(V,null,I(w.value[t],(n,r)=>(A(),i(`li`,{key:r,class:N([L(c).be(`spinner`,`item`),L(c).is(`active`,r===C.value[t]),L(c).is(`disabled`,n)]),onClick:e=>fe(t,{value:r,disabled:n})},[t===`hours`?(A(),i(V,{key:0},[E(z((`0`+(e.amPmMode?r%12||12:r)).slice(-2))+z(ne(r)),1)],64)):(A(),i(V,{key:1},[E(z((`0`+r).slice(-2)),1)],64))],10,Bl))),128))]),_:2},1032,[`class`,`view-class`,`onMouseenter`,`onMousemove`]))),128)),e.arrowControl?(A(!0),i(V,{key:1},I(S.value,t=>(A(),i(`div`,{key:t,class:N([L(c).be(`spinner`,`wrapper`),L(c).is(`arrow`)]),onMouseenter:e=>re(t)},[xe((A(),O(L(g),{class:N([`arrow-up`,L(c).be(`spinner`,`arrow`)])},{default:B(()=>[D(L(me))]),_:1},8,[`class`])),[[L(Zr),ce]]),xe((A(),O(L(g),{class:N([`arrow-down`,L(c).be(`spinner`,`arrow`)])},{default:B(()=>[D(L(b))]),_:1},8,[`class`])),[[L(Zr),se]]),l(`ul`,{class:N(L(c).be(`spinner`,`list`))},[(A(!0),i(V,null,I(T.value[t],(n,r)=>(A(),i(`li`,{key:r,class:N([L(c).be(`spinner`,`item`),L(c).is(`active`,n===C.value[t]),L(c).is(`disabled`,w.value[t][n])])},[L(Ce)(n)?(A(),i(V,{key:0},[t===`hours`?(A(),i(V,{key:0},[E(z((`0`+(e.amPmMode?n%12||12:n)).slice(-2))+z(ne(n)),1)],64)):(A(),i(V,{key:1},[E(z((`0`+n).slice(-2)),1)],64))],64)):R(`v-if`,!0)],2))),128))],2)],42,Vl))),128)):R(`v-if`,!0)],2))}}),Ul=k({__name:`panel-time-pick`,props:Nl,emits:[`pick`,`select-range`,`set-picker-option`],setup(e,{emit:t}){let n=e,r=t,a=Xe(sl),{arrowControl:o,disabledHours:s,disabledMinutes:c,disabledSeconds:u,defaultValue:d}=a.props,{getAvailableHours:f,getAvailableMinutes:m,getAvailableSeconds:h}=Ll(s,c,u),g=ee(`time`),{t:v,lang:y}=te(),b=j([0,2]),x=Rl(n,{modelValue:p(()=>a.props.modelValue),valueOnClear:p(()=>a?.emptyValues?a.emptyValues.valueOnClear.value:null)}),S=p(()=>Ue(n.actualVisible)?`${g.namespace.value}-zoom-in-top`:``),C=p(()=>n.format.includes(`ss`)),w=p(()=>n.format.includes(`A`)?`A`:n.format.includes(`a`)?`a`:``),T=e=>{let t=(0,pl.default)(e).locale(y.value),n=ce(t);return t.isSame(n)},E=()=>{let e=x.value;r(`pick`,e,!1),_(()=>{x.value=e})},ne=(e=!1,t=!1)=>{t||r(`pick`,n.parsedValue,e)},re=e=>{n.visible&&r(`pick`,ce(e).millisecond(0),!0)},k=(e,t)=>{r(`select-range`,e,t),b.value=[e,t]},ie=e=>{let t=n.format,r=t.indexOf(`HH`),i=t.indexOf(`mm`),a=t.indexOf(`ss`),o=[],s=[];r!==-1&&(o.push(r),s.push(`hours`)),i!==-1&&(o.push(i),s.push(`minutes`)),a!==-1&&C.value&&(o.push(a),s.push(`seconds`));let c=(o.indexOf(b.value[0])+e+o.length)%o.length;M.start_emitSelectRange(s[c])},ae=e=>{let t=Cr(e),{left:n,right:r,up:i,down:a}=qn;if([n,r].includes(t)){ie(t===n?-1:1),e.preventDefault();return}if([i,a].includes(t)){let n=t===i?-1:1;M.start_scrollDown(n),e.preventDefault();return}},{timePickerOptions:M,onSetOption:oe,getAvailableTime:se}=Pl({getAvailableHours:f,getAvailableMinutes:m,getAvailableSeconds:h}),ce=e=>se(e,n.datetimeRole||``,!0);return r(`set-picker-option`,[`isValidValue`,T]),r(`set-picker-option`,[`parseUserInput`,e=>e?(0,pl.default)(e,n.format).locale(y.value):null]),r(`set-picker-option`,[`handleKeydownInput`,ae]),r(`set-picker-option`,[`getRangeAvailableTime`,ce]),r(`set-picker-option`,[`getDefaultValue`,()=>(0,pl.default)(d).locale(y.value)]),r(`set-picker-option`,[`handleCancel`,E]),(e,t)=>(A(),O(Ve,{name:S.value},{default:B(()=>[e.actualVisible||e.visible?(A(),i(`div`,{key:0,class:N(L(g).b(`panel`))},[l(`div`,{class:N([L(g).be(`panel`,`content`),{"has-seconds":C.value}])},[D(Hl,{ref:`spinner`,role:e.datetimeRole||`start`,"arrow-control":L(o),"show-seconds":C.value,"am-pm-mode":w.value,"spinner-date":e.parsedValue,"disabled-hours":L(s),"disabled-minutes":L(c),"disabled-seconds":L(u),onChange:re,onSetOption:L(oe),onSelectRange:k},null,8,[`role`,`arrow-control`,`show-seconds`,`am-pm-mode`,`spinner-date`,`disabled-hours`,`disabled-minutes`,`disabled-seconds`,`onSetOption`])],2),l(`div`,{class:N(L(g).be(`panel`,`footer`))},[l(`button`,{type:`button`,class:N([L(g).be(`panel`,`btn`),`cancel`]),onClick:E},z(L(v)(`el.datepicker.cancel`)),3),l(`button`,{type:`button`,class:N([L(g).be(`panel`,`btn`),`confirm`]),onClick:t[0]||=e=>ne()},z(L(v)(`el.datepicker.confirm`)),3)],2)],2)):R(`v-if`,!0)]),_:1},8,[`name`]))}}),Wl=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_customParseFormat=r()})(e,(function(){var e={LTS:`h:mm:ss A`,LT:`h:mm A`,L:`MM/DD/YYYY`,LL:`MMMM D, YYYY`,LLL:`MMMM D, YYYY h:mm A`,LLLL:`dddd, MMMM D, YYYY h:mm A`},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d/,r=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)},c=function(e){return function(t){this[e]=+t}},l=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||={}).offset=function(e){if(!e||e===`Z`)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return n===0?0:t[0]===`+`?-n:n}(e)}],u=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?`pm`:`PM`);return n},f={A:[a,function(e){this.afternoon=d(e,!1)}],a:[a,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*e}],SS:[r,function(e){this.milliseconds=10*e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[i,c(`seconds`)],ss:[i,c(`seconds`)],m:[i,c(`minutes`)],mm:[i,c(`minutes`)],H:[i,c(`hours`)],h:[i,c(`hours`)],HH:[i,c(`hours`)],hh:[i,c(`hours`)],D:[i,c(`day`)],DD:[r,c(`day`)],Do:[a,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,``)===e&&(this.day=r)}],w:[i,c(`week`)],ww:[r,c(`week`)],M:[i,c(`month`)],MM:[r,c(`month`)],MMM:[a,function(e){var t=u(`months`),n=(u(`monthsShort`)||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw Error();this.month=n%12||n}],MMMM:[a,function(e){var t=u(`months`).indexOf(e)+1;if(t<1)throw Error();this.month=t%12||t}],Y:[/[+-]?\d+/,c(`year`)],YY:[r,function(e){this.year=s(e)}],YYYY:[/\d{4}/,c(`year`)],Z:l,ZZ:l};function p(n){for(var r=n,i=o&&o.formats,a=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var a=r&&r.toUpperCase();return n||i[r]||e[r]||i[a].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),s=a.length,c=0;c<s;c+=1){var l=a[c],u=f[l],d=u&&u[0],p=u&&u[1];a[c]=p?{regex:d,parser:p}:l.replace(/^\[|\]$/g,``)}return function(e){for(var t={},n=0,r=0;n<s;n+=1){var i=a[n];if(typeof i==`string`)r+=i.length;else{var o=i.regex,c=i.parser,l=e.slice(r),u=o.exec(l)[0];c.call(t,u),e=e.replace(u,``)}}return function(e){var t=e.afternoon;if(t!==void 0){var n=e.hours;t?n<12&&(e.hours+=12):n===12&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,a=e.args;this.$u=r;var s=a[1];if(typeof s==`string`){var c=!0===a[2],l=!0===a[3],u=c||l,d=a[2];l&&(d=a[2]),o=this.$locale(),!c&&d&&(o=n.Ls[d]),this.$d=function(e,t,n,r){try{if([`x`,`X`].indexOf(t)>-1)return new Date((t===`X`?1e3:1)*e);var i=p(t)(e),a=i.year,o=i.month,s=i.day,c=i.hours,l=i.minutes,u=i.seconds,d=i.milliseconds,f=i.zone,m=i.week,h=new Date,g=s||(a||o?1:h.getDate()),_=a||h.getFullYear(),v=0;a&&!o||(v=o>0?o-1:h.getMonth());var y,b=c||0,x=l||0,S=u||0,C=d||0;return f?new Date(Date.UTC(_,v,g,b,x,S,C+60*f.offset*1e3)):n?new Date(Date.UTC(_,v,g,b,x,S,C)):(y=new Date(_,v,g,b,x,S,C),m&&(y=r(y).week(m).toDate()),y)}catch{return new Date(``)}}(t,s,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(s)&&(this.$d=new Date(``)),o={}}else if(s instanceof Array)for(var f=s.length,m=1;m<=f;m+=1){a[1]=s[m-1];var h=n.apply(this,a);if(h.isValid()){this.$d=h.$d,this.$L=h.$L,this.init();break}m===f&&(this.$d=new Date(``))}else i.call(this,e)}}}))})),Gl=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_localeData=r()})(e,(function(){return function(e,t,n){var r=t.prototype,i=function(e){return e&&(e.indexOf?e:e.s)},a=function(e,t,n,r,a){var o=e.name?e:e.$locale(),s=i(o[t]),c=i(o[n]),l=s||c.map((function(e){return e.slice(0,r)}));if(!a)return l;var u=o.weekStart;return l.map((function(e,t){return l[(t+(u||0))%7]}))},o=function(){return n.Ls[n.locale()]},s=function(e,t){return e.formats[t]||function(e){return e.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}(e.formats[t.toUpperCase()])},c=function(){var e=this;return{months:function(t){return t?t.format(`MMMM`):a(e,`months`)},monthsShort:function(t){return t?t.format(`MMM`):a(e,`monthsShort`,`months`,3)},firstDayOfWeek:function(){return e.$locale().weekStart||0},weekdays:function(t){return t?t.format(`dddd`):a(e,`weekdays`)},weekdaysMin:function(t){return t?t.format(`dd`):a(e,`weekdaysMin`,`weekdays`,2)},weekdaysShort:function(t){return t?t.format(`ddd`):a(e,`weekdaysShort`,`weekdays`,3)},longDateFormat:function(t){return s(e.$locale(),t)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return c.bind(this)()},n.localeData=function(){var e=o();return{firstDayOfWeek:function(){return e.weekStart||0},weekdays:function(){return n.weekdays()},weekdaysShort:function(){return n.weekdaysShort()},weekdaysMin:function(){return n.weekdaysMin()},months:function(){return n.months()},monthsShort:function(){return n.monthsShort()},longDateFormat:function(t){return s(e,t)},meridiem:e.meridiem,ordinal:e.ordinal}},n.months=function(){return a(o(),`months`)},n.monthsShort=function(){return a(o(),`monthsShort`,`months`,3)},n.weekdays=function(e){return a(o(),`weekdays`,null,null,e)},n.weekdaysShort=function(e){return a(o(),`weekdaysShort`,`weekdays`,3,e)},n.weekdaysMin=function(e){return a(o(),`weekdaysMin`,`weekdays`,2,e)}}}))})),Kl=be({valueFormat:String,dateFormat:String,timeFormat:String,disabled:{type:Boolean,default:void 0},modelValue:{type:Ae([Date,Array,String,Number]),default:``},defaultValue:{type:Ae([Date,Array])},defaultTime:{type:Ae([Date,Array])},isRange:Boolean,...wl,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,unlinkPanels:Boolean,showNow:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:Boolean,showWeekNumber:Boolean,type:{type:Ae(String),default:`date`},clearable:{type:Boolean,default:!0},border:{type:Boolean,default:!0},editable:{type:Boolean,default:!0}}),ql=Symbol(`rootPickerContextKey`),Jl=`ElIsDefaultFormat`,Yl=[`date`,`dates`,`year`,`years`,`month`,`months`,`week`,`range`],Xl=be({cellClassName:{type:Ae(Function)},disabledDate:{type:Ae(Function)},date:{type:Ae(Object),required:!0},minDate:{type:Ae(Object)},maxDate:{type:Ae(Object)},parsedValue:{type:Ae([Object,Array])},rangeState:{type:Ae(Object),default:()=>({endDate:null,selecting:!1})},disabled:Boolean}),Zl=be({type:{type:Ae(String),required:!0,values:al},dateFormat:String,timeFormat:String,showNow:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:{type:Boolean,default:!0},showWeekNumber:Boolean,border:Boolean,disabled:Boolean,editable:{type:Boolean,default:!0}}),Ql=be({unlinkPanels:Boolean,visible:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:{type:Boolean,default:!0},border:Boolean,disabled:Boolean,parsedValue:{type:Ae(Array)}}),$l=e=>({type:String,values:Yl,default:e}),eu=be({...Zl,parsedValue:{type:Ae([Object,Array])},visible:{type:Boolean,default:!0},format:{type:String,default:``}}),tu=e=>{if(!C(e))return!1;let[t,n]=e;return pl.default.isDayjs(t)&&pl.default.isDayjs(n)&&(0,pl.default)(t).isValid()&&(0,pl.default)(n).isValid()&&t.isSameOrBefore(n)},nu=(e,{lang:t,step:n=1,unit:r,unlinkPanels:i})=>{let a;if(C(e)){let[a,o]=e.map(e=>(0,pl.default)(e).locale(t));return i||(o=a.add(n,r)),[a,o]}else a=e?(0,pl.default)(e):(0,pl.default)();return a=a.locale(t),[a,a.add(n,r)]},ru=(e,t,{columnIndexOffset:n,startDate:r,nextEndDate:i,now:a,unit:o,relativeDateGetter:s,setCellMetadata:c,setRowMetadata:l})=>{for(let u=0;u<e.row;u++){let d=t[u];for(let t=0;t<e.column;t++){let l=d[t+n];l||={row:u,column:t,type:`normal`,inRange:!1,start:!1,end:!1};let f=s(u*e.column+t);l.dayjs=f,l.date=f.toDate(),l.timestamp=f.valueOf(),l.type=`normal`,l.inRange=!!(r&&f.isSameOrAfter(r,o)&&i&&f.isSameOrBefore(i,o))||!!(r&&f.isSameOrBefore(r,o)&&i&&f.isSameOrAfter(i,o)),r?.isSameOrAfter(i)?(l.start=!!i&&f.isSame(i,o),l.end=r&&f.isSame(r,o)):(l.start=!!r&&f.isSame(r,o),l.end=!!i&&f.isSame(i,o)),f.isSame(a,o)&&(l.type=`today`),c?.(l,{rowIndex:u,columnIndex:t}),d[t+n]=l}l?.(d)}},iu=(e,t,n,r)=>{let i=(0,pl.default)().locale(r).startOf(`month`).month(n).year(t).hour(e.hour()).minute(e.minute()).second(e.second());return hl(i.daysInMonth()).map(e=>i.add(e,`day`).toDate())},au=(e,t,n,r,i)=>{let a=(0,pl.default)().year(t).month(n).startOf(`month`).hour(e.hour()).minute(e.minute()).second(e.second()),o=iu(e,t,n,r).find(e=>!i?.(e));return o?(0,pl.default)(o).locale(r):a.locale(r)},ou=(e,t,n)=>{let r=e.year();if(!n?.(e.toDate()))return e.locale(t);let i=e.month();if(!iu(e,r,i,t).every(n))return au(e,r,i,t,n);for(let i=0;i<12;i++)if(!iu(e,r,i,t).every(n))return au(e,r,i,t,n);return e},su=(e,t,n,r)=>{if(C(e))return e.map(e=>su(e,t,n,r));if(se(e)){let n=r?.value?(0,pl.default)(e):(0,pl.default)(e,t);if(!n.isValid())return n}return(0,pl.default)(e,t).locale(n)},cu=be({...Xl,showWeekNumber:Boolean,selectionMode:$l(`date`)}),lu=[`changerange`,`pick`,`select`],uu=(e=``)=>[`normal`,`today`].includes(e),du=(e,t)=>{let{lang:n}=te(),r=j(),i=j(),a=j(),o=j(),s=j([[],[],[],[],[],[]]),c=!1,l=e.date.$locale().weekStart||7,u=e.date.locale(`en`).localeData().weekdaysShort().map(e=>e.toLowerCase()),d=p(()=>l>3?7-l:-l),f=p(()=>{let t=e.date.startOf(`month`);return t.subtract(t.day()||7,`day`)}),m=p(()=>u.concat(u).slice(l,l+7)),h=p(()=>$n(L(S)).some(e=>e.isCurrent)),g=p(()=>{let t=e.date.startOf(`month`);return{startOfMonthDay:t.day()||7,dateCountOfMonth:t.daysInMonth(),dateCountOfLastMonth:t.subtract(1,`month`).daysInMonth()}}),v=p(()=>e.selectionMode===`dates`?un(e.parsedValue):[]),y=(e,{count:t,rowIndex:n,columnIndex:r})=>{let{startOfMonthDay:i,dateCountOfMonth:a,dateCountOfLastMonth:o}=L(g),s=L(d);if(n>=0&&n<=1){let a=i+s<0?7+i+s:i+s;if(r+n*7>=a)return e.text=t,!0;e.text=o-(a-r%7)+1+n*7,e.type=`prev-month`}else return t<=a?e.text=t:(e.text=t-a,e.type=`next-month`),!0;return!1},b=(t,{columnIndex:n,rowIndex:r},i)=>{let{disabledDate:a,cellClassName:o}=e,s=L(v),c=y(t,{count:i,rowIndex:r,columnIndex:n}),l=t.dayjs.toDate();return t.selected=s.find(e=>e.isSame(t.dayjs,`day`)),t.isSelected=!!t.selected,t.isCurrent=T(t),t.disabled=a?.(l),t.customClass=o?.(l),c},x=t=>{if(e.selectionMode===`week`){let[n,r]=e.showWeekNumber?[1,7]:[0,6],i=oe(t[n+1]);t[n].inRange=i,t[n].start=i,t[r].inRange=i,t[r].end=i}},S=p(()=>{let{minDate:t,maxDate:r,rangeState:i,showWeekNumber:a}=e,o=L(d),c=L(s),l=1;if(ru({row:6,column:7},c,{startDate:t,columnIndexOffset:+!!a,nextEndDate:i.endDate||r||i.selecting&&t||null,now:(0,pl.default)().locale(L(n)).startOf(`day`),unit:`day`,relativeDateGetter:e=>L(f).add(e-o,`day`),setCellMetadata:(...e)=>{b(...e,l)&&(l+=1)},setRowMetadata:x}),a)for(let e=0;e<6;e++)c[e][1].dayjs&&(c[e][0]={type:`week`,text:c[e][1].dayjs.week()});return c});F(()=>e.date,async()=>{L(r)?.contains(document.activeElement)&&(await _(),await w())});let w=async()=>L(i)?.focus(),T=t=>e.selectionMode===`date`&&uu(t.type)&&E(t,e.parsedValue),E=(t,r)=>r?(0,pl.default)(r).locale(L(n)).isSame(e.date.date(Number(t.text)),`day`):!1,ee=(t,n)=>{let r=L(g).startOfMonthDay,i=L(d),a=r+i<0?7+r+i:r+i,o=t*7+(n-+!!e.showWeekNumber);return e.date.startOf(`month`).subtract(a,`day`).add(o,`day`)},D=n=>{if(!e.rangeState.selecting)return;let r=n.target;if(r.tagName===`SPAN`&&(r=r.parentNode?.parentNode),r.tagName===`DIV`&&(r=r.parentNode),r.tagName!==`TD`)return;let i=r.parentNode.rowIndex-1,s=r.cellIndex;L(S)[i][s].disabled||(i!==L(a)||s!==L(o))&&(a.value=i,o.value=s,t(`changerange`,{selecting:!0,endDate:ee(i,s)}))},ne=e=>!L(h)&&e?.text===1&&uu(e.type)||e.isCurrent,re=t=>{c||L(h)||e.selectionMode!==`date`||M(t,!0)},O=e=>{e.target.closest(`td`)&&(c=!0)},k=e=>{e.target.closest(`td`)&&(c=!1)},A=n=>{!e.rangeState.selecting||!e.minDate?(t(`pick`,{minDate:n,maxDate:null}),t(`select`,!0)):(n>=e.minDate?t(`pick`,{minDate:e.minDate,maxDate:n}):t(`pick`,{minDate:n,maxDate:e.minDate}),t(`select`,!1))},ie=e=>{let n=e.week(),r=`${e.year()}w${n}`;t(`pick`,{year:e.year(),week:n,value:r,date:e.startOf(`week`)})},ae=(n,r)=>{t(`pick`,r?un(e.parsedValue).filter(e=>e?.valueOf()!==n.valueOf()):un(e.parsedValue).concat([n]))},M=(n,r=!1)=>{if(e.disabled)return;let i=n.target.closest(`td`);if(!i)return;let a=i.parentNode.rowIndex-1,o=i.cellIndex,s=L(S)[a][o];if(s.disabled||s.type===`week`)return;let c=ee(a,o);switch(e.selectionMode){case`range`:A(c);break;case`date`:t(`pick`,c,r);break;case`week`:ie(c);break;case`dates`:ae(c,!!s.selected);break;default:break}},oe=t=>{if(e.selectionMode!==`week`)return!1;let n=e.date.startOf(`day`);if(t.type===`prev-month`&&(n=n.subtract(1,`month`)),t.type===`next-month`&&(n=n.add(1,`month`)),n=n.date(Number.parseInt(t.text,10)),e.parsedValue&&!C(e.parsedValue)){let t=(e.parsedValue.day()-l+7)%7-1;return e.parsedValue.subtract(t,`day`).isSame(n,`day`)}return!1};return{WEEKS:m,rows:S,tbodyRef:r,currentCellRef:i,focus:w,isCurrent:T,isWeekActive:oe,isSelectedCell:ne,handlePickDate:M,handleMouseUp:k,handleMouseDown:O,handleMouseMove:D,handleFocus:re}},fu=(e,{isCurrent:t,isWeekActive:n})=>{let r=ee(`date-table`),{t:i}=te();return{tableKls:p(()=>[r.b(),r.is(`week-mode`,e.selectionMode===`week`&&!e.disabled)]),tableLabel:p(()=>i(`el.datepicker.dateTablePrompt`)),weekHeaderClass:r.e(`week-header`),getCellClasses:n=>{let r=[];return uu(n.type)&&!n.disabled?(r.push(`available`),n.type===`today`&&r.push(`today`)):r.push(n.type),t(n)&&r.push(`current`),n.inRange&&(uu(n.type)||e.selectionMode===`week`)&&(r.push(`in-range`),n.start&&r.push(`start-date`),n.end&&r.push(`end-date`)),(n.disabled||e.disabled)&&r.push(`disabled`),n.selected&&r.push(`selected`),n.customClass&&r.push(n.customClass),r.join(` `)},getRowKls:e=>[r.e(`row`),{current:n(e)}],t:i}},pu=k({name:`ElDatePickerCell`,props:be({cell:{type:Ae(Object)}}),setup(e){let t=ee(`date-table-cell`),{slots:n}=Xe(ql);return()=>{let{cell:r}=e;return Be(n,`default`,{...r},()=>[D(`div`,{class:t.b()},[D(`span`,{class:t.e(`text`)},[r?.renderText??r?.text])])])}}}),mu=[`aria-label`],hu=[`aria-label`],gu=[`aria-current`,`aria-selected`,`tabindex`,`aria-disabled`],_u=k({__name:`basic-date-table`,props:cu,emits:lu,setup(e,{expose:t,emit:n}){let r=e,{WEEKS:a,rows:o,tbodyRef:s,currentCellRef:c,focus:u,isCurrent:d,isWeekActive:f,isSelectedCell:p,handlePickDate:m,handleMouseUp:g,handleMouseDown:_,handleMouseMove:v,handleFocus:y}=du(r,n),{tableLabel:b,tableKls:x,getCellClasses:S,getRowKls:C,weekHeaderClass:w,t:T}=fu(r,{isCurrent:d,isWeekActive:f}),E=!1;return h(()=>{E=!0}),t({focus:u}),(e,t)=>(A(),i(`table`,{"aria-label":L(b),class:N(L(x)),cellspacing:`0`,cellpadding:`0`,role:`grid`,onClick:t[1]||=(...e)=>L(m)&&L(m)(...e),onMousemove:t[2]||=(...e)=>L(v)&&L(v)(...e),onMousedown:t[3]||=(...e)=>L(_)&&L(_)(...e),onMouseup:t[4]||=(...e)=>L(g)&&L(g)(...e)},[l(`tbody`,{ref_key:`tbodyRef`,ref:s},[l(`tr`,null,[e.showWeekNumber?(A(),i(`th`,{key:0,scope:`col`,class:N(L(w))},null,2)):R(`v-if`,!0),(A(!0),i(V,null,I(L(a),(e,t)=>(A(),i(`th`,{key:t,"aria-label":L(T)(`el.datepicker.weeksFull.`+e),scope:`col`},z(L(T)(`el.datepicker.weeks.`+e)),9,hu))),128))]),(A(!0),i(V,null,I(L(o),(n,r)=>(A(),i(`tr`,{key:r,class:N(L(C)(e.showWeekNumber?n[2]:n[1]))},[(A(!0),i(V,null,I(n,(n,a)=>(A(),i(`td`,{key:`${r}.${a}`,ref_for:!0,ref:e=>!L(E)&&L(p)(n)&&(c.value=e),class:N(L(S)(n)),"aria-current":n.isCurrent?`date`:void 0,"aria-selected":n.isCurrent,tabindex:e.disabled?void 0:L(p)(n)?0:-1,"aria-disabled":e.disabled,onFocus:t[0]||=(...e)=>L(y)&&L(y)(...e)},[D(L(pu),{cell:n},null,8,[`cell`])],42,gu))),128))],2))),128))],512)],42,mu))}}),vu=be({...Xl,selectionMode:$l(`month`)}),yu=[`aria-label`],bu=[`aria-selected`,`aria-label`,`tabindex`,`onKeydown`],xu=k({__name:`basic-month-table`,props:vu,emits:[`changerange`,`pick`,`select`],setup(e,{expose:t,emit:n}){let r=e,a=n,o=ee(`month-table`),{t:s,lang:c}=te(),u=j(),d=j(),f=j(r.date.locale(`en`).localeData().monthsShort().map(e=>e.toLowerCase())),m=j([[],[],[]]),h=j(),g=j(),v=p(()=>{let e=m.value,t=(0,pl.default)().locale(c.value).startOf(`month`);for(let n=0;n<3;n++){let i=e[n];for(let e=0;e<4;e++){let a=i[e]||={row:n,column:e,type:`normal`,inRange:!1,start:!1,end:!1,text:-1,disabled:!1,isSelected:!1,customClass:void 0,date:void 0,dayjs:void 0,isCurrent:void 0,selected:void 0,renderText:void 0,timestamp:void 0};a.type=`normal`;let o=n*4+e,s=r.date.startOf(`year`).month(o),c=r.rangeState.endDate||r.maxDate||r.rangeState.selecting&&r.minDate||null;a.inRange=!!(r.minDate&&s.isSameOrAfter(r.minDate,`month`)&&c&&s.isSameOrBefore(c,`month`))||!!(r.minDate&&s.isSameOrBefore(r.minDate,`month`)&&c&&s.isSameOrAfter(c,`month`)),r.minDate?.isSameOrAfter(c)?(a.start=!!(c&&s.isSame(c,`month`)),a.end=r.minDate&&s.isSame(r.minDate,`month`)):(a.start=!!(r.minDate&&s.isSame(r.minDate,`month`)),a.end=!!(c&&s.isSame(c,`month`))),t.isSame(s)&&(a.type=`today`);let l=s.toDate();a.text=o,a.disabled=r.disabledDate?.(l)||!1,a.date=l,a.customClass=r.cellClassName?.(l),a.dayjs=s,a.timestamp=s.valueOf(),a.isSelected=x(a)}}return e}),y=()=>{d.value?.focus()},b=e=>{let t={},n=r.date.year(),i=new Date,a=e.text;return t.disabled=r.disabled||(r.disabledDate?iu(r.date,n,a,c.value).every(r.disabledDate):!1),t.current=un(r.parsedValue).some(e=>pl.default.isDayjs(e)&&e.year()===n&&e.month()===a),t.today=i.getFullYear()===n&&i.getMonth()===a,e.customClass&&(t[e.customClass]=!0),e.inRange&&(t[`in-range`]=!0,e.start&&(t[`start-date`]=!0),e.end&&(t[`end-date`]=!0)),t},x=e=>{let t=r.date.year(),n=e.text;return un(r.date).some(e=>e.year()===t&&e.month()===n)},S=e=>{if(!r.rangeState.selecting)return;let t=e.target;if(t.tagName===`SPAN`&&(t=t.parentNode?.parentNode),t.tagName===`DIV`&&(t=t.parentNode),t.tagName!==`TD`)return;let n=t.parentNode.rowIndex,i=t.cellIndex;v.value[n][i].disabled||(n!==h.value||i!==g.value)&&(h.value=n,g.value=i,a(`changerange`,{selecting:!0,endDate:r.date.startOf(`year`).month(n*4+i)}))},C=e=>{if(r.disabled)return;let t=e.target?.closest(`td`);if(t?.tagName!==`TD`||w(t,`disabled`))return;let n=t.cellIndex,i=t.parentNode.rowIndex*4+n,o=r.date.startOf(`year`).month(i);if(r.selectionMode===`months`){if(e.type===`keydown`){a(`pick`,un(r.parsedValue),!1);return}let n=au(r.date,r.date.year(),i,c.value,r.disabledDate);a(`pick`,w(t,`current`)?un(r.parsedValue).filter(e=>e?.year()!==n.year()||e?.month()!==n.month()):un(r.parsedValue).concat([(0,pl.default)(n)]))}else r.selectionMode===`range`?r.rangeState.selecting?(r.minDate&&o>=r.minDate?a(`pick`,{minDate:r.minDate,maxDate:o}):a(`pick`,{minDate:o,maxDate:r.minDate}),a(`select`,!1)):(a(`pick`,{minDate:o,maxDate:null}),a(`select`,!0)):a(`pick`,i)};return F(()=>r.date,async()=>{u.value?.contains(document.activeElement)&&(await _(),d.value?.focus())}),t({focus:y}),(e,t)=>(A(),i(`table`,{role:`grid`,"aria-label":L(s)(`el.datepicker.monthTablePrompt`),class:N(L(o).b()),onClick:C,onMousemove:S},[l(`tbody`,{ref_key:`tbodyRef`,ref:u},[(A(!0),i(V,null,I(v.value,(e,t)=>(A(),i(`tr`,{key:t},[(A(!0),i(V,null,I(e,(e,t)=>(A(),i(`td`,{key:t,ref_for:!0,ref:t=>e.isSelected&&(d.value=t),class:N(b(e)),"aria-selected":!!e.isSelected,"aria-label":L(s)(`el.datepicker.month${+e.text+1}`),tabindex:e.isSelected?0:-1,onKeydown:[We(qe(C,[`prevent`,`stop`]),[`space`]),We(qe(C,[`prevent`,`stop`]),[`enter`])]},[D(L(pu),{cell:{...e,renderText:L(s)(`el.datepicker.months.`+f.value[e.text])}},null,8,[`cell`])],42,bu))),128))]))),128))],512)],42,yu))}}),Su=be({...Xl,selectionMode:$l(`year`)}),Cu=[`aria-label`],wu=[`aria-selected`,`aria-label`,`tabindex`,`onKeydown`],Tu=k({__name:`basic-year-table`,props:Su,emits:[`changerange`,`pick`,`select`],setup(e,{expose:t,emit:n}){let r=(e,t)=>{let n=(0,pl.default)(String(e)).locale(t).startOf(`year`);return hl(n.endOf(`year`).dayOfYear()).map(e=>n.add(e,`day`).toDate())},a=e,o=n,s=ee(`year-table`),{t:c,lang:u}=te(),d=j(),f=j(),m=p(()=>Math.floor(a.date.year()/10)*10),h=j([[],[],[]]),g=j(),v=j(),y=p(()=>{let e=h.value,t=(0,pl.default)().locale(u.value).startOf(`year`);for(let n=0;n<3;n++){let r=e[n];for(let e=0;e<4&&!(n*4+e>=10);e++){let i=r[e];i||={row:n,column:e,type:`normal`,inRange:!1,start:!1,end:!1,text:-1,disabled:!1,isSelected:!1,customClass:void 0,date:void 0,dayjs:void 0,isCurrent:void 0,selected:void 0,renderText:void 0,timestamp:void 0},i.type=`normal`;let o=n*4+e+m.value,s=(0,pl.default)().year(o),c=a.rangeState.endDate||a.maxDate||a.rangeState.selecting&&a.minDate||null;i.inRange=!!(a.minDate&&s.isSameOrAfter(a.minDate,`year`)&&c&&s.isSameOrBefore(c,`year`))||!!(a.minDate&&s.isSameOrBefore(a.minDate,`year`)&&c&&s.isSameOrAfter(c,`year`)),a.minDate?.isSameOrAfter(c)?(i.start=!!(c&&s.isSame(c,`year`)),i.end=!!(a.minDate&&s.isSame(a.minDate,`year`))):(i.start=!!(a.minDate&&s.isSame(a.minDate,`year`)),i.end=!!(c&&s.isSame(c,`year`))),t.isSame(s)&&(i.type=`today`),i.text=o;let l=s.toDate();i.disabled=a.disabledDate?.(l)||!1,i.date=l,i.customClass=a.cellClassName?.(l),i.dayjs=s,i.timestamp=s.valueOf(),i.isSelected=S(i),r[e]=i}}return e}),b=()=>{f.value?.focus()},x=e=>{let t={},n=(0,pl.default)().locale(u.value),i=e.text;return t.disabled=a.disabled||(a.disabledDate?r(i,u.value).every(a.disabledDate):!1),t.today=n.year()===i,t.current=un(a.parsedValue).some(e=>e.year()===i),e.customClass&&(t[e.customClass]=!0),e.inRange&&(t[`in-range`]=!0,e.start&&(t[`start-date`]=!0),e.end&&(t[`end-date`]=!0)),t},S=e=>{let t=e.text;return un(a.date).some(e=>e.year()===t)},C=e=>{if(a.disabled)return;let t=e.target?.closest(`td`);if(!t||!t.textContent||w(t,`disabled`))return;let n=t.cellIndex,r=t.parentNode.rowIndex*4+n+m.value,i=(0,pl.default)().year(r);if(a.selectionMode===`range`)a.rangeState.selecting?(a.minDate&&i>=a.minDate?o(`pick`,{minDate:a.minDate,maxDate:i}):o(`pick`,{minDate:i,maxDate:a.minDate}),o(`select`,!1)):(o(`pick`,{minDate:i,maxDate:null}),o(`select`,!0));else if(a.selectionMode===`years`){if(e.type===`keydown`){o(`pick`,un(a.parsedValue),!1);return}let n=ou(i.startOf(`year`),u.value,a.disabledDate);o(`pick`,w(t,`current`)?un(a.parsedValue).filter(e=>e?.year()!==r):un(a.parsedValue).concat([n]))}else o(`pick`,r)},T=e=>{if(!a.rangeState.selecting)return;let t=e.target?.closest(`td`);if(!t)return;let n=t.parentNode.rowIndex,r=t.cellIndex;y.value[n][r].disabled||(n!==g.value||r!==v.value)&&(g.value=n,v.value=r,o(`changerange`,{selecting:!0,endDate:(0,pl.default)().year(m.value).add(n*4+r,`year`)}))};return F(()=>a.date,async()=>{d.value?.contains(document.activeElement)&&(await _(),f.value?.focus())}),t({focus:b}),(e,t)=>(A(),i(`table`,{role:`grid`,"aria-label":L(c)(`el.datepicker.yearTablePrompt`),class:N(L(s).b()),onClick:C,onMousemove:T},[l(`tbody`,{ref_key:`tbodyRef`,ref:d},[(A(!0),i(V,null,I(y.value,(e,t)=>(A(),i(`tr`,{key:t},[(A(!0),i(V,null,I(e,(e,n)=>(A(),i(`td`,{key:`${t}_${n}`,ref_for:!0,ref:t=>e.isSelected&&(f.value=t),class:N([`available`,x(e)]),"aria-selected":e.isSelected,"aria-label":String(e.text),tabindex:e.isSelected?0:-1,onKeydown:[We(qe(C,[`prevent`,`stop`]),[`space`]),We(qe(C,[`prevent`,`stop`]),[`enter`])]},[D(L(pu),{cell:e},null,8,[`cell`])],42,wu))),128))]))),128))],512)],42,Cu))}}),Eu=[`disabled`,`onClick`],Du=[`aria-label`,`disabled`],Ou=[`aria-label`,`disabled`],ku=[`tabindex`,`aria-disabled`],Au=[`tabindex`,`aria-disabled`],ju=[`aria-label`,`disabled`],Mu=[`aria-label`,`disabled`],Nu=k({__name:`panel-date-pick`,props:eu,emits:[`pick`,`set-picker-option`,`panel-change`],setup(e,{emit:t}){let n=(e,t,n)=>!0,r=e,a=t,o=ee(`picker-panel`),s=ee(`date-picker`),u=Pe(),d=Re(),{t:f,lang:m}=te(),h=Xe(sl),v=Xe(Jl,void 0),{shortcuts:y,disabledDate:b,cellClassName:x,defaultTime:S}=h.props,w=c(h.props,`defaultValue`),T=j(),ne=j((0,pl.default)().locale(m.value)),re=j(!1),k=!1,ae=p(()=>(0,pl.default)(S).locale(m.value)),M=p(()=>ne.value.month()),oe=p(()=>ne.value.year()),se=j([]),ce=j(null),le=j(null),de=e=>se.value.length>0?n(e,se.value,r.format||`HH:mm:ss`):!0,pe=e=>S&&!Ke.value&&!re.value&&!k?ae.value.year(e.year()).month(e.month()).date(e.date()):Me.value?e.millisecond(0):e.startOf(`day`),me=(e,...t)=>{e?C(e)?a(`pick`,e.map(pe),...t):a(`pick`,pe(e),...t):a(`pick`,e,...t),ce.value=null,le.value=null,re.value=!1,k=!1},he=async(e,t)=>{if(Ce.value===`date`&&pl.default.isDayjs(e)){let n=Yn(r.parsedValue),i=n?n.year(e.year()).month(e.month()).date(e.date()):e;de(i)||(i=se.value[0][0].year(e.year()).month(e.month()).date(e.date())),ne.value=i,me(i,Me.value||t)}else Ce.value===`week`?me(e.date):Ce.value===`dates`&&me(e,!0)},_e=e=>{let t=e?`add`:`subtract`;ne.value=ne.value[t](1,`month`),H(`month`)},P=e=>{let t=ne.value,n=e?`add`:`subtract`;ne.value=ye.value===`year`?t[n](10,`year`):t[n](1,`year`),H(`year`)},ye=j(`date`),be=p(()=>{let e=f(`el.datepicker.year`);if(ye.value===`year`){let t=Math.floor(oe.value/10)*10;return e?`${t} ${e} - ${t+9} ${e}`:`${t} - ${t+9}`}return`${oe.value} ${e}`}),Se=e=>{let t=Ye(e.value)?e.value():e.value;if(t){k=!0,me((0,pl.default)(t).locale(m.value));return}e.onClick&&e.onClick({attrs:u,slots:d,emit:a})},Ce=p(()=>{let{type:e}=r;return[`week`,`month`,`months`,`year`,`years`,`dates`].includes(e)?e:`date`}),we=p(()=>Ce.value===`dates`||Ce.value===`months`||Ce.value===`years`),Te=p(()=>Ce.value===`date`?ye.value:Ce.value),Ee=p(()=>!!y.length),De=async(e,t)=>{Ce.value===`month`?(ne.value=au(ne.value,ne.value.year(),e,m.value,b),me(ne.value,!1)):Ce.value===`months`?me(e,t??!0):(ne.value=au(ne.value,ne.value.year(),e,m.value,b),ye.value=`date`,[`month`,`year`,`date`,`week`].includes(Ce.value)&&(me(ne.value,!0),await _(),ot())),H(`month`)},ke=async(e,t)=>{Ce.value===`year`?(ne.value=ou(ne.value.startOf(`year`).year(e),m.value,b),me(ne.value,!1)):Ce.value===`years`?me(e,t??!0):(ne.value=ou(ne.value.year(e),m.value,b),ye.value=`month`,[`month`,`year`,`date`,`week`].includes(Ce.value)&&(me(ne.value,!0),await _(),ot())),H(`year`)},Ae=ie(),je=async e=>{Ae.value||(ye.value=e,await _(),ot())},Me=p(()=>r.type===`datetime`||r.type===`datetimerange`),Ne=p(()=>{let e=Me.value||Ce.value===`dates`,t=Ce.value===`years`,n=Ce.value===`months`,r=ye.value===`date`,i=ye.value===`year`,a=ye.value===`month`;return e&&r||t&&i||n&&a}),Ie=p(()=>!we.value&&r.showNow||r.showConfirm),Le=p(()=>b?r.parsedValue?C(r.parsedValue)?b(r.parsedValue[0].toDate()):b(r.parsedValue.toDate()):!0:!1),ze=()=>{if(we.value)me(r.parsedValue);else{let e=Yn(r.parsedValue);if(!e){let t=(0,pl.default)(S).locale(m.value),n=at();e=t.year(n.year()).month(n.month()).date(n.date())}ne.value=e,me(e)}},Ve=p(()=>b?b((0,pl.default)().locale(m.value).toDate()):!1),He=()=>{let e=(0,pl.default)().locale(m.value).toDate();re.value=!0,(!b||!b(e))&&de(e)&&(ne.value=(0,pl.default)().locale(m.value),me(ne.value))},Ue=p(()=>r.timeFormat||_l(r.format)||`HH:mm:ss`),Ge=p(()=>r.dateFormat||gl(r.format)||`YYYY-MM-DD`),Ke=p(()=>{if(le.value)return le.value;if(!(!r.parsedValue&&!w.value))return(Yn(r.parsedValue)||ne.value).format(Ue.value)}),qe=p(()=>{if(ce.value)return ce.value;if(!(!r.parsedValue&&!w.value))return(Yn(r.parsedValue)||ne.value).format(Ge.value)}),Je=j(!1),Ze=()=>{Je.value=!0},Qe=()=>{Je.value=!1},$e=e=>({hour:e.hour(),minute:e.minute(),second:e.second(),year:e.year(),month:e.month(),date:e.date()}),et=(e,t,n)=>{let{hour:i,minute:a,second:o}=$e(e),s=Yn(r.parsedValue);ne.value=s?s.hour(i).minute(a).second(o):e,me(ne.value,!0),n||(Je.value=t)},tt=e=>{let t=(0,pl.default)(e,Ue.value).locale(m.value);if(t.isValid()&&de(t)){let{year:e,month:n,date:r}=$e(ne.value);ne.value=t.year(e).month(n).date(r),le.value=null,Je.value=!1,me(ne.value,!0)}},nt=e=>{let t=su(e,Ge.value,m.value,v);if(t.isValid()){if(b&&b(t.toDate()))return;let{hour:e,minute:n,second:r}=$e(ne.value);ne.value=t.hour(e).minute(n).second(r),ce.value=null,me(ne.value,!0)}},rt=e=>pl.default.isDayjs(e)&&e.isValid()&&(!b||!b(e.toDate())),it=e=>su(e,r.format,m.value,v),at=()=>{let e=(0,pl.default)(w.value).locale(m.value);if(!w.value){let e=ae.value;return(0,pl.default)().hour(e.hour()).minute(e.minute()).second(e.second()).locale(m.value)}return e},ot=()=>{[`week`,`month`,`year`,`date`].includes(Ce.value)&&T.value?.focus()},st=()=>{ot(),Ce.value===`week`&<(qn.down)},ct=e=>{let t=Cr(e);[qn.up,qn.down,qn.left,qn.right,qn.home,qn.end,qn.pageUp,qn.pageDown].includes(t)&&(lt(t),e.stopPropagation(),e.preventDefault()),[qn.enter,qn.space,qn.numpadEnter].includes(t)&&ce.value===null&&le.value===null&&(e.preventDefault(),me(ne.value,!1))},lt=e=>{let{up:t,down:n,left:r,right:i,home:o,end:s,pageUp:c,pageDown:l}=qn,u={year:{[t]:-4,[n]:4,[r]:-1,[i]:1,offset:(e,t)=>e.setFullYear(e.getFullYear()+t)},month:{[t]:-4,[n]:4,[r]:-1,[i]:1,offset:(e,t)=>e.setMonth(e.getMonth()+t)},week:{[t]:-1,[n]:1,[r]:-1,[i]:1,offset:(e,t)=>e.setDate(e.getDate()+t*7)},date:{[t]:-7,[n]:7,[r]:-1,[i]:1,[o]:e=>-e.getDay(),[s]:e=>-e.getDay()+6,[c]:e=>-new Date(e.getFullYear(),e.getMonth(),0).getDate(),[l]:e=>new Date(e.getFullYear(),e.getMonth()+1,0).getDate(),offset:(e,t)=>e.setDate(e.getDate()+t)}},d=ne.value.toDate();for(;Math.abs(ne.value.diff(d,`year`,!0))<1;){let t=u[Te.value];if(!t)return;if(t.offset(d,Ye(t[e])?t[e](d):t[e]??0),b&&b(d))break;let n=(0,pl.default)(d).locale(m.value);ne.value=n,a(`pick`,n,!0);break}},H=e=>{a(`panel-change`,ne.value.toDate(),e,ye.value)};return F(()=>Ce.value,e=>{if([`month`,`year`].includes(e)){ye.value=e;return}else if(e===`years`){ye.value=`year`;return}else if(e===`months`){ye.value=`month`;return}ye.value=`date`},{immediate:!0}),F(()=>w.value,e=>{e&&(ne.value=at())},{immediate:!0}),F(()=>r.parsedValue,e=>{if(e){if(we.value||C(e))return;ne.value=e}else ne.value=at()},{immediate:!0}),a(`set-picker-option`,[`isValidValue`,rt]),a(`set-picker-option`,[`parseUserInput`,it]),a(`set-picker-option`,[`handleFocusPicker`,st]),(e,t)=>(A(),i(`div`,{class:N([L(o).b(),L(s).b(),L(o).is(`border`,e.border),L(o).is(`disabled`,L(Ae)),{"has-sidebar":e.$slots.sidebar||Ee.value,"has-time":Me.value}])},[l(`div`,{class:N(L(o).e(`body-wrapper`))},[Be(e.$slots,`sidebar`,{class:N(L(o).e(`sidebar`))}),Ee.value?(A(),i(`div`,{key:0,class:N(L(o).e(`sidebar`))},[(A(!0),i(V,null,I(L(y),(e,t)=>(A(),i(`button`,{key:t,type:`button`,disabled:L(Ae),class:N(L(o).e(`shortcut`)),onClick:t=>Se(e)},z(e.text),11,Eu))),128))],2)):R(`v-if`,!0),l(`div`,{class:N(L(o).e(`body`))},[Me.value?(A(),i(`div`,{key:0,class:N(L(s).e(`time-header`))},[l(`span`,{class:N(L(s).e(`editor-wrap`))},[D(L(U),{placeholder:L(f)(`el.datepicker.selectDate`),"model-value":qe.value,size:`small`,"validate-event":!1,disabled:L(Ae),readonly:!e.editable,onInput:t[0]||=e=>ce.value=e,onChange:nt},null,8,[`placeholder`,`model-value`,`disabled`,`readonly`])],2),xe((A(),i(`span`,{class:N(L(s).e(`editor-wrap`))},[D(L(U),{placeholder:L(f)(`el.datepicker.selectTime`),"model-value":Ke.value,size:`small`,"validate-event":!1,disabled:L(Ae),readonly:!e.editable,onFocus:Ze,onInput:t[1]||=e=>le.value=e,onChange:tt},null,8,[`placeholder`,`model-value`,`disabled`,`readonly`]),D(L(Ul),{visible:Je.value,format:Ue.value,"parsed-value":ne.value,onPick:et},null,8,[`visible`,`format`,`parsed-value`])],2)),[[L(St),Qe]])],2)):R(`v-if`,!0),xe(l(`div`,{class:N([L(s).e(`header`),(ye.value===`year`||ye.value===`month`)&&L(s).em(`header`,`bordered`)])},[l(`span`,{class:N(L(s).e(`prev-btn`))},[l(`button`,{type:`button`,"aria-label":L(f)(`el.datepicker.prevYear`),class:N([`d-arrow-left`,L(o).e(`icon-btn`)]),disabled:L(Ae),onClick:t[2]||=e=>P(!1)},[Be(e.$slots,`prev-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ve))]),_:1})])],10,Du),xe(l(`button`,{type:`button`,"aria-label":L(f)(`el.datepicker.prevMonth`),class:N([L(o).e(`icon-btn`),`arrow-left`]),disabled:L(Ae),onClick:t[3]||=e=>_e(!1)},[Be(e.$slots,`prev-month`,{},()=>[D(L(g),null,{default:B(()=>[D(L(fe))]),_:1})])],10,Ou),[[ge,ye.value===`date`]])],2),l(`span`,{role:`button`,class:N(L(s).e(`header-label`)),"aria-live":`polite`,tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,onKeydown:t[4]||=We(e=>je(`year`),[`enter`]),onClick:t[5]||=e=>je(`year`)},z(be.value),43,ku),xe(l(`span`,{role:`button`,"aria-live":`polite`,tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,class:N([L(s).e(`header-label`),{active:ye.value===`month`}]),onKeydown:t[6]||=We(e=>je(`month`),[`enter`]),onClick:t[7]||=e=>je(`month`)},z(L(f)(`el.datepicker.month${M.value+1}`)),43,Au),[[ge,ye.value===`date`]]),l(`span`,{class:N(L(s).e(`next-btn`))},[xe(l(`button`,{type:`button`,"aria-label":L(f)(`el.datepicker.nextMonth`),class:N([L(o).e(`icon-btn`),`arrow-right`]),disabled:L(Ae),onClick:t[8]||=e=>_e(!0)},[Be(e.$slots,`next-month`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ue))]),_:1})])],10,ju),[[ge,ye.value===`date`]]),l(`button`,{type:`button`,"aria-label":L(f)(`el.datepicker.nextYear`),class:N([L(o).e(`icon-btn`),`d-arrow-right`]),disabled:L(Ae),onClick:t[9]||=e=>P(!0)},[Be(e.$slots,`next-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(Fe))]),_:1})])],10,Mu)],2)],2),[[ge,ye.value!==`time`]]),l(`div`,{class:N(L(o).e(`content`)),onKeydown:ct},[ye.value===`date`?(A(),O(_u,{key:0,ref_key:`currentViewRef`,ref:T,"selection-mode":Ce.value,date:ne.value,"parsed-value":e.parsedValue,"disabled-date":L(b),disabled:L(Ae),"cell-class-name":L(x),"show-week-number":e.showWeekNumber,onPick:he},null,8,[`selection-mode`,`date`,`parsed-value`,`disabled-date`,`disabled`,`cell-class-name`,`show-week-number`])):R(`v-if`,!0),ye.value===`year`?(A(),O(Tu,{key:1,ref_key:`currentViewRef`,ref:T,"selection-mode":Ce.value,date:ne.value,"disabled-date":L(b),disabled:L(Ae),"parsed-value":e.parsedValue,"cell-class-name":L(x),onPick:ke},null,8,[`selection-mode`,`date`,`disabled-date`,`disabled`,`parsed-value`,`cell-class-name`])):R(`v-if`,!0),ye.value===`month`?(A(),O(xu,{key:2,ref_key:`currentViewRef`,ref:T,"selection-mode":Ce.value,date:ne.value,"parsed-value":e.parsedValue,"disabled-date":L(b),disabled:L(Ae),"cell-class-name":L(x),onPick:De},null,8,[`selection-mode`,`date`,`parsed-value`,`disabled-date`,`disabled`,`cell-class-name`])):R(`v-if`,!0)],34)],2)],2),e.showFooter&&Ne.value&&Ie.value?(A(),i(`div`,{key:0,class:N(L(o).e(`footer`))},[xe(D(L(Oe),{text:``,size:`small`,class:N(L(o).e(`link-btn`)),disabled:Ve.value,onClick:He},{default:B(()=>[E(z(L(f)(`el.datepicker.now`)),1)]),_:1},8,[`class`,`disabled`]),[[ge,!we.value&&e.showNow]]),e.showConfirm?(A(),O(L(Oe),{key:0,plain:``,size:`small`,class:N(L(o).e(`link-btn`)),disabled:Le.value,onClick:ze},{default:B(()=>[E(z(L(f)(`el.datepicker.confirm`)),1)]),_:1},8,[`class`,`disabled`])):R(`v-if`,!0)],2)):R(`v-if`,!0)],2))}}),Pu=be({...Zl,...Ql}),Fu=e=>{let{emit:t}=m(),n=Pe(),r=Re();return i=>{let a=Ye(i.value)?i.value():i.value;if(a){t(`pick`,[(0,pl.default)(a[0]).locale(e.value),(0,pl.default)(a[1]).locale(e.value)]);return}i.onClick&&i.onClick({attrs:n,slots:r,emit:t})}},Iu=(e,{defaultValue:t,defaultTime:n,leftDate:r,rightDate:i,step:a,unit:o,sortDates:s})=>{let{emit:c}=m(),{pickerNs:l}=Xe(ql),u=ee(`date-range-picker`),{t:d,lang:f}=te(),p=Fu(f),h=j(),g=j(),_=j({endDate:null,selecting:!1}),v=e=>{_.value=e},y=(e=!1)=>{let t=L(h),n=L(g);tu([t,n])&&c(`pick`,[t,n],e)},b=e=>{_.value.selecting=e,e||(_.value.endDate=null)},x=e=>{if(C(e)&&e.length===2){let[t,n]=e;h.value=t,r.value=t,g.value=n,s(L(h),L(g))}else S()},S=()=>{let[s,c]=nu(L(t),{lang:L(f),step:a,unit:o,unlinkPanels:e.unlinkPanels}),l=e=>e.diff(e.startOf(`d`),`ms`),u=L(n);if(u){let e=0,t=0;if(C(u)){let[n,r]=u.map(pl.default);e=l(n),t=l(r)}else{let n=l((0,pl.default)(u));e=n,t=n}s=s.startOf(`d`).add(e,`ms`),c=c.startOf(`d`).add(t,`ms`)}h.value=void 0,g.value=void 0,r.value=s,i.value=c};return F(t,e=>{e&&S()},{immediate:!0}),F(()=>e.parsedValue,e=>{(!e?.length||!Ke(e,[h.value,g.value]))&&x(e)},{immediate:!0}),F(()=>e.visible,()=>{e.visible&&x(e.parsedValue)},{immediate:!0}),{minDate:h,maxDate:g,rangeState:_,lang:f,ppNs:l,drpNs:u,handleChangeRange:v,handleRangeConfirm:y,handleShortcutClick:p,onSelect:b,parseValue:x,t:d}},Lu=(e,t,n,r)=>{let i=j(`date`),a=j(),o=j(`date`),s=j(),{disabledDate:c}=Xe(sl).props,{t:l,lang:u}=te(),d=p(()=>n.value.year()),f=p(()=>n.value.month()),m=p(()=>r.value.year()),h=p(()=>r.value.month());function g(e,t){let n=l(`el.datepicker.year`);if(e.value===`year`){let e=Math.floor(t.value/10)*10;return n?`${e} ${n} - ${e+9} ${n}`:`${e} - ${e+9}`}return`${t.value} ${n}`}function v(e){e?.focus()}async function y(t,n){if(e.disabled)return;let r=t===`left`?i:o,c=t===`left`?a:s;r.value=n,await _(),v(c.value)}async function b(t,l,d){if(e.disabled)return;let f=l===`left`,p=f?n:r,m=f?r:n,h=f?i:o,g=f?a:s;t===`year`&&(p.value=ou(p.value.year(d),u.value,c)),t===`month`&&(p.value=au(p.value,p.value.year(),d,u.value,c)),e.unlinkPanels||(m.value=l===`left`?p.value.add(1,`month`):p.value.subtract(1,`month`)),h.value=t===`year`?`month`:`date`,await _(),v(g.value),x(t)}function x(e){t(`panel-change`,[n.value.toDate(),r.value.toDate()],e)}function S(e,t,n){let r=n?`add`:`subtract`;return e===`year`?t[r](10,`year`):t[r](1,`year`)}return{leftCurrentView:i,rightCurrentView:o,leftCurrentViewRef:a,rightCurrentViewRef:s,leftYear:d,rightYear:m,leftMonth:f,rightMonth:h,leftYearLabel:p(()=>g(i,d)),rightYearLabel:p(()=>g(o,m)),showLeftPicker:e=>y(`left`,e),showRightPicker:e=>y(`right`,e),handleLeftYearPick:e=>b(`year`,`left`,e),handleRightYearPick:e=>b(`year`,`right`,e),handleLeftMonthPick:e=>b(`month`,`left`,e),handleRightMonthPick:e=>b(`month`,`right`,e),handlePanelChange:x,adjustDateByView:S}},Ru=[`disabled`,`onClick`],zu=[`aria-label`,`disabled`],Bu=[`aria-label`,`disabled`],Vu=[`disabled`,`aria-label`],Hu=[`disabled`,`aria-label`],Uu=[`tabindex`,`aria-disabled`],Wu=[`tabindex`,`aria-disabled`],Gu=[`disabled`,`aria-label`],Ku=[`disabled`,`aria-label`],qu=[`aria-label`,`disabled`],Ju=[`disabled`,`aria-label`],Yu=[`tabindex`,`aria-disabled`],Xu=[`tabindex`,`aria-disabled`],Zu=`month`,Qu=k({__name:`panel-date-range`,props:Pu,emits:[`pick`,`set-picker-option`,`calendar-change`,`panel-change`,`clear`],setup(e,{emit:t}){let n=e,r=t,a=Xe(sl),o=Xe(Jl,void 0),{disabledDate:s,cellClassName:u,defaultTime:d,clearable:f}=a.props,m=c(a.props,`format`),h=c(a.props,`shortcuts`),v=c(a.props,`defaultValue`),{lang:y}=te(),b=j((0,pl.default)().locale(y.value)),x=j((0,pl.default)().locale(y.value).add(1,Zu)),{minDate:S,maxDate:C,rangeState:w,ppNs:T,drpNs:ee,handleChangeRange:ne,handleRangeConfirm:re,handleShortcutClick:k,onSelect:ae,parseValue:M,t:oe}=Iu(n,{defaultValue:v,defaultTime:d,leftDate:b,rightDate:x,unit:Zu,sortDates:_t});F(()=>n.visible,e=>{!e&&w.value.selecting&&(M(n.parsedValue),ae(!1))});let se=j({min:null,max:null}),ce=j({min:null,max:null}),{leftCurrentView:le,rightCurrentView:de,leftCurrentViewRef:pe,rightCurrentViewRef:me,leftYear:he,rightYear:_e,leftMonth:P,rightMonth:ye,leftYearLabel:be,rightYearLabel:Se,showLeftPicker:Ce,showRightPicker:we,handleLeftYearPick:Te,handleRightYearPick:Ee,handleLeftMonthPick:De,handleRightMonthPick:ke,handlePanelChange:Ae,adjustDateByView:je}=Lu(n,r,b,x),Me=p(()=>!!h.value.length),Ne=p(()=>se.value.min===null?S.value?S.value.format(ze.value):``:se.value.min),Pe=p(()=>se.value.max===null?C.value||S.value?(C.value||S.value).format(ze.value):``:se.value.max),Ie=p(()=>ce.value.min===null?S.value?S.value.format(Re.value):``:ce.value.min),Le=p(()=>ce.value.max===null?C.value||S.value?(C.value||S.value).format(Re.value):``:ce.value.max),Re=p(()=>n.timeFormat||_l(m.value||``)||`HH:mm:ss`),ze=p(()=>n.dateFormat||gl(m.value||``)||`YYYY-MM-DD`),Ve=e=>tu(e)&&(!s||!s(e[0].toDate())&&!s(e[1].toDate())),He=()=>{b.value=je(le.value,b.value,!1),n.unlinkPanels||(x.value=b.value.add(1,`month`)),Ae(`year`)},Ue=()=>{b.value=b.value.subtract(1,`month`),n.unlinkPanels||(x.value=b.value.add(1,`month`)),Ae(`month`)},Ge=()=>{n.unlinkPanels?x.value=je(de.value,x.value,!0):(b.value=je(de.value,b.value,!0),x.value=b.value.add(1,`month`)),Ae(`year`)},Ke=()=>{n.unlinkPanels?x.value=x.value.add(1,`month`):(b.value=b.value.add(1,`month`),x.value=b.value.add(1,`month`)),Ae(`month`)},qe=()=>{b.value=je(le.value,b.value,!0),Ae(`year`)},Je=()=>{b.value=b.value.add(1,`month`),Ae(`month`)},Ye=()=>{x.value=je(de.value,x.value,!1),Ae(`year`)},Ze=()=>{x.value=x.value.subtract(1,`month`),Ae(`month`)},Qe=p(()=>{let e=(P.value+1)%12,t=+(P.value+1>=12);return n.unlinkPanels&&new Date(he.value+t,e)<new Date(_e.value,ye.value)}),$e=p(()=>n.unlinkPanels&&_e.value*12+ye.value-(he.value*12+P.value+1)>=12),et=ie(),tt=p(()=>!(S.value&&C.value&&!w.value.selecting&&tu([S.value,C.value])&&!et.value)),nt=p(()=>n.type===`datetime`||n.type===`datetimerange`),rt=(e,t)=>{if(e)return d?(0,pl.default)(d[t]||d).locale(y.value).year(e.year()).month(e.month()).date(e.date()):e},it=(e,t=!0)=>{let n=e.minDate,i=e.maxDate,a=rt(n,0),o=rt(i,1);C.value===o&&S.value===a||(r(`calendar-change`,[n.toDate(),i&&i.toDate()]),C.value=o,S.value=a,!nt.value&&t&&(t=!a||!o),re(t))},at=j(!1),ot=j(!1),st=()=>{at.value=!1},ct=()=>{ot.value=!1},lt=(e,t)=>{se.value[t]=e;let r=(0,pl.default)(e,ze.value).locale(y.value);if(r.isValid()){if(s&&s(r.toDate()))return;t===`min`?(b.value=r,S.value=(S.value||b.value).year(r.year()).month(r.month()).date(r.date()),!n.unlinkPanels&&(!C.value||C.value.isBefore(S.value))&&(x.value=r.add(1,`month`),C.value=S.value.add(1,`month`))):(x.value=r,C.value=(C.value||x.value).year(r.year()).month(r.month()).date(r.date()),!n.unlinkPanels&&(!S.value||S.value.isAfter(C.value))&&(b.value=r.subtract(1,`month`),S.value=C.value.subtract(1,`month`))),_t(S.value,C.value),re(!0)}},H=(e,t)=>{se.value[t]=null},ut=(e,t)=>{ce.value[t]=e;let n=(0,pl.default)(e,Re.value).locale(y.value);n.isValid()&&(t===`min`?(at.value=!0,S.value=(S.value||b.value).hour(n.hour()).minute(n.minute()).second(n.second()),b.value=S.value):(ot.value=!0,C.value=(C.value||x.value).hour(n.hour()).minute(n.minute()).second(n.second()),x.value=C.value))},dt=(e,t)=>{ce.value[t]=null,t===`min`?(b.value=S.value,at.value=!1,(!C.value||C.value.isBefore(S.value))&&(C.value=S.value)):(x.value=C.value,ot.value=!1,C.value&&C.value.isBefore(S.value)&&(S.value=C.value)),re(!0)},ft=(e,t,r)=>{ce.value.min||(e&&(S.value=(S.value||b.value).hour(e.hour()).minute(e.minute()).second(e.second())),r||(at.value=t),(!C.value||C.value.isBefore(S.value))&&(C.value=S.value,x.value=e,_(()=>{M(n.parsedValue)})),re(!0))},pt=(e,t,n)=>{ce.value.max||(e&&(C.value=(C.value||x.value).hour(e.hour()).minute(e.minute()).second(e.second())),n||(ot.value=t),C.value&&C.value.isBefore(S.value)&&(S.value=C.value),re(!0))},mt=()=>{ht(),r(`clear`)},ht=()=>{let e=null;a?.emptyValues&&(e=a.emptyValues.valueOnClear.value),b.value=nu(L(v),{lang:L(y),unit:`month`,unlinkPanels:n.unlinkPanels})[0],x.value=b.value.add(1,`month`),C.value=void 0,S.value=void 0,re(!0),r(`pick`,e)},gt=e=>su(e,m.value||``,y.value,o);function _t(e,t){if(n.unlinkPanels&&t){let n=e?.year()||0,r=e?.month()||0,i=t.year(),a=t.month();x.value=n===i&&r===a?t.add(1,Zu):t}else x.value=b.value.add(1,Zu),t&&(x.value=x.value.hour(t.hour()).minute(t.minute()).second(t.second()))}return r(`set-picker-option`,[`isValidValue`,Ve]),r(`set-picker-option`,[`parseUserInput`,gt]),r(`set-picker-option`,[`handleClear`,ht]),(e,t)=>(A(),i(`div`,{class:N([L(T).b(),L(ee).b(),L(T).is(`border`,e.border),L(T).is(`disabled`,L(et)),{"has-sidebar":e.$slots.sidebar||Me.value,"has-time":nt.value}])},[l(`div`,{class:N(L(T).e(`body-wrapper`))},[Be(e.$slots,`sidebar`,{class:N(L(T).e(`sidebar`))}),Me.value?(A(),i(`div`,{key:0,class:N(L(T).e(`sidebar`))},[(A(!0),i(V,null,I(h.value,(e,t)=>(A(),i(`button`,{key:t,type:`button`,disabled:L(et),class:N(L(T).e(`shortcut`)),onClick:t=>L(k)(e)},z(e.text),11,Ru))),128))],2)):R(`v-if`,!0),l(`div`,{class:N(L(T).e(`body`))},[nt.value?(A(),i(`div`,{key:0,class:N(L(ee).e(`time-header`))},[l(`span`,{class:N(L(ee).e(`editors-wrap`))},[l(`span`,{class:N(L(ee).e(`time-picker-wrap`))},[D(L(U),{size:`small`,disabled:L(w).selecting||L(et),placeholder:L(oe)(`el.datepicker.startDate`),class:N(L(ee).e(`editor`)),"model-value":Ne.value,"validate-event":!1,readonly:!e.editable,onInput:t[0]||=e=>lt(e,`min`),onChange:t[1]||=e=>H(e,`min`)},null,8,[`disabled`,`placeholder`,`class`,`model-value`,`readonly`])],2),xe((A(),i(`span`,{class:N(L(ee).e(`time-picker-wrap`))},[D(L(U),{size:`small`,class:N(L(ee).e(`editor`)),disabled:L(w).selecting||L(et),placeholder:L(oe)(`el.datepicker.startTime`),"model-value":Ie.value,"validate-event":!1,readonly:!e.editable,onFocus:t[2]||=e=>at.value=!0,onInput:t[3]||=e=>ut(e,`min`),onChange:t[4]||=e=>dt(e,`min`)},null,8,[`class`,`disabled`,`placeholder`,`model-value`,`readonly`]),D(L(Ul),{visible:at.value,format:Re.value,"datetime-role":`start`,"parsed-value":L(S)||b.value,onPick:ft},null,8,[`visible`,`format`,`parsed-value`])],2)),[[L(St),st]])],2),l(`span`,null,[D(L(g),null,{default:B(()=>[D(L(ue))]),_:1})]),l(`span`,{class:N([L(ee).e(`editors-wrap`),`is-right`])},[l(`span`,{class:N(L(ee).e(`time-picker-wrap`))},[D(L(U),{size:`small`,class:N(L(ee).e(`editor`)),disabled:L(w).selecting||L(et),placeholder:L(oe)(`el.datepicker.endDate`),"model-value":Pe.value,readonly:!L(S)||!e.editable,"validate-event":!1,onInput:t[5]||=e=>lt(e,`max`),onChange:t[6]||=e=>H(e,`max`)},null,8,[`class`,`disabled`,`placeholder`,`model-value`,`readonly`])],2),xe((A(),i(`span`,{class:N(L(ee).e(`time-picker-wrap`))},[D(L(U),{size:`small`,class:N(L(ee).e(`editor`)),disabled:L(w).selecting||L(et),placeholder:L(oe)(`el.datepicker.endTime`),"model-value":Le.value,readonly:!L(S)||!e.editable,"validate-event":!1,onFocus:t[7]||=e=>L(S)&&(ot.value=!0),onInput:t[8]||=e=>ut(e,`max`),onChange:t[9]||=e=>dt(e,`max`)},null,8,[`class`,`disabled`,`placeholder`,`model-value`,`readonly`]),D(L(Ul),{"datetime-role":`end`,visible:ot.value,format:Re.value,"parsed-value":L(C)||x.value,onPick:pt},null,8,[`visible`,`format`,`parsed-value`])],2)),[[L(St),ct]])],2)],2)):R(`v-if`,!0),l(`div`,{class:N([[L(T).e(`content`),L(ee).e(`content`)],`is-left`])},[l(`div`,{class:N(L(ee).e(`header`))},[l(`button`,{type:`button`,class:N([L(T).e(`icon-btn`),`d-arrow-left`]),"aria-label":L(oe)(`el.datepicker.prevYear`),disabled:L(et),onClick:He},[Be(e.$slots,`prev-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ve))]),_:1})])],10,zu),xe(l(`button`,{type:`button`,class:N([L(T).e(`icon-btn`),`arrow-left`]),"aria-label":L(oe)(`el.datepicker.prevMonth`),disabled:L(et),onClick:Ue},[Be(e.$slots,`prev-month`,{},()=>[D(L(g),null,{default:B(()=>[D(L(fe))]),_:1})])],10,Bu),[[ge,L(le)===`date`]]),e.unlinkPanels?(A(),i(`button`,{key:0,type:`button`,disabled:!$e.value||L(et),class:N([[L(T).e(`icon-btn`),L(T).is(`disabled`,!$e.value||L(et))],`d-arrow-right`]),"aria-label":L(oe)(`el.datepicker.nextYear`),onClick:qe},[Be(e.$slots,`next-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(Fe))]),_:1})])],10,Vu)):R(`v-if`,!0),e.unlinkPanels&&L(le)===`date`?(A(),i(`button`,{key:1,type:`button`,disabled:!Qe.value||L(et),class:N([[L(T).e(`icon-btn`),L(T).is(`disabled`,!Qe.value||L(et))],`arrow-right`]),"aria-label":L(oe)(`el.datepicker.nextMonth`),onClick:Je},[Be(e.$slots,`next-month`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ue))]),_:1})])],10,Hu)):R(`v-if`,!0),l(`div`,null,[l(`span`,{role:`button`,class:N(L(ee).e(`header-label`)),"aria-live":`polite`,tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,onKeydown:t[10]||=We(e=>L(Ce)(`year`),[`enter`]),onClick:t[11]||=e=>L(Ce)(`year`)},z(L(be)),43,Uu),xe(l(`span`,{role:`button`,"aria-live":`polite`,tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,class:N([L(ee).e(`header-label`),{active:L(le)===`month`}]),onKeydown:t[12]||=We(e=>L(Ce)(`month`),[`enter`]),onClick:t[13]||=e=>L(Ce)(`month`)},z(L(oe)(`el.datepicker.month${b.value.month()+1}`)),43,Wu),[[ge,L(le)===`date`]])])],2),L(le)===`date`?(A(),O(_u,{key:0,ref_key:`leftCurrentViewRef`,ref:pe,"selection-mode":`range`,date:b.value,"min-date":L(S),"max-date":L(C),"range-state":L(w),"disabled-date":L(s),"cell-class-name":L(u),"show-week-number":e.showWeekNumber,disabled:L(et),onChangerange:L(ne),onPick:it,onSelect:L(ae)},null,8,[`date`,`min-date`,`max-date`,`range-state`,`disabled-date`,`cell-class-name`,`show-week-number`,`disabled`,`onChangerange`,`onSelect`])):R(`v-if`,!0),L(le)===`year`?(A(),O(Tu,{key:1,ref_key:`leftCurrentViewRef`,ref:pe,"selection-mode":`year`,date:b.value,"disabled-date":L(s),"parsed-value":e.parsedValue,disabled:L(et),onPick:L(Te)},null,8,[`date`,`disabled-date`,`parsed-value`,`disabled`,`onPick`])):R(`v-if`,!0),L(le)===`month`?(A(),O(xu,{key:2,ref_key:`leftCurrentViewRef`,ref:pe,"selection-mode":`month`,date:b.value,"parsed-value":e.parsedValue,"disabled-date":L(s),disabled:L(et),onPick:L(De)},null,8,[`date`,`parsed-value`,`disabled-date`,`disabled`,`onPick`])):R(`v-if`,!0)],2),l(`div`,{class:N([[L(T).e(`content`),L(ee).e(`content`)],`is-right`])},[l(`div`,{class:N(L(ee).e(`header`))},[e.unlinkPanels?(A(),i(`button`,{key:0,type:`button`,disabled:!$e.value||L(et),class:N([[L(T).e(`icon-btn`),L(T).is(`disabled`,!$e.value||L(et))],`d-arrow-left`]),"aria-label":L(oe)(`el.datepicker.prevYear`),onClick:Ye},[Be(e.$slots,`prev-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ve))]),_:1})])],10,Gu)):R(`v-if`,!0),e.unlinkPanels&&L(de)===`date`?(A(),i(`button`,{key:1,type:`button`,disabled:!Qe.value||L(et),class:N([[L(T).e(`icon-btn`),L(T).is(`disabled`,!Qe.value||L(et))],`arrow-left`]),"aria-label":L(oe)(`el.datepicker.prevMonth`),onClick:Ze},[Be(e.$slots,`prev-month`,{},()=>[D(L(g),null,{default:B(()=>[D(L(fe))]),_:1})])],10,Ku)):R(`v-if`,!0),l(`button`,{type:`button`,"aria-label":L(oe)(`el.datepicker.nextYear`),class:N([L(T).e(`icon-btn`),`d-arrow-right`]),disabled:L(et),onClick:Ge},[Be(e.$slots,`next-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(Fe))]),_:1})])],10,qu),xe(l(`button`,{type:`button`,class:N([L(T).e(`icon-btn`),`arrow-right`]),disabled:L(et),"aria-label":L(oe)(`el.datepicker.nextMonth`),onClick:Ke},[Be(e.$slots,`next-month`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ue))]),_:1})])],10,Ju),[[ge,L(de)===`date`]]),l(`div`,null,[l(`span`,{role:`button`,class:N(L(ee).e(`header-label`)),"aria-live":`polite`,tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,onKeydown:t[14]||=We(e=>L(we)(`year`),[`enter`]),onClick:t[15]||=e=>L(we)(`year`)},z(L(Se)),43,Yu),xe(l(`span`,{role:`button`,"aria-live":`polite`,tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,class:N([L(ee).e(`header-label`),{active:L(de)===`month`}]),onKeydown:t[16]||=We(e=>L(we)(`month`),[`enter`]),onClick:t[17]||=e=>L(we)(`month`)},z(L(oe)(`el.datepicker.month${x.value.month()+1}`)),43,Xu),[[ge,L(de)===`date`]])])],2),L(de)===`date`?(A(),O(_u,{key:0,ref_key:`rightCurrentViewRef`,ref:me,"selection-mode":`range`,date:x.value,"min-date":L(S),"max-date":L(C),"range-state":L(w),"disabled-date":L(s),"cell-class-name":L(u),"show-week-number":e.showWeekNumber,disabled:L(et),onChangerange:L(ne),onPick:it,onSelect:L(ae)},null,8,[`date`,`min-date`,`max-date`,`range-state`,`disabled-date`,`cell-class-name`,`show-week-number`,`disabled`,`onChangerange`,`onSelect`])):R(`v-if`,!0),L(de)===`year`?(A(),O(Tu,{key:1,ref_key:`rightCurrentViewRef`,ref:me,"selection-mode":`year`,date:x.value,"disabled-date":L(s),"parsed-value":e.parsedValue,disabled:L(et),onPick:L(Ee)},null,8,[`date`,`disabled-date`,`parsed-value`,`disabled`,`onPick`])):R(`v-if`,!0),L(de)===`month`?(A(),O(xu,{key:2,ref_key:`rightCurrentViewRef`,ref:me,"selection-mode":`month`,date:x.value,"parsed-value":e.parsedValue,"disabled-date":L(s),disabled:L(et),onPick:L(ke)},null,8,[`date`,`parsed-value`,`disabled-date`,`disabled`,`onPick`])):R(`v-if`,!0)],2)],2)],2),e.showFooter&&nt.value&&(e.showConfirm||L(f))?(A(),i(`div`,{key:0,class:N(L(T).e(`footer`))},[L(f)?(A(),O(L(Oe),{key:0,text:``,size:`small`,class:N(L(T).e(`link-btn`)),onClick:mt},{default:B(()=>[E(z(L(oe)(`el.datepicker.clear`)),1)]),_:1},8,[`class`])):R(`v-if`,!0),e.showConfirm?(A(),O(L(Oe),{key:1,plain:``,size:`small`,class:N(L(T).e(`link-btn`)),disabled:tt.value,onClick:t[18]||=e=>L(re)(!1)},{default:B(()=>[E(z(L(oe)(`el.datepicker.confirm`)),1)]),_:1},8,[`class`,`disabled`])):R(`v-if`,!0)],2)):R(`v-if`,!0)],2))}}),$u=be({...Ql}),ed=[`pick`,`set-picker-option`,`calendar-change`],td=({unlinkPanels:e,leftDate:t,rightDate:n})=>{let{t:r}=te();return{leftPrevYear:()=>{t.value=t.value.subtract(1,`year`),e.value||(n.value=n.value.subtract(1,`year`))},rightNextYear:()=>{e.value||(t.value=t.value.add(1,`year`)),n.value=n.value.add(1,`year`)},leftNextYear:()=>{t.value=t.value.add(1,`year`)},rightPrevYear:()=>{n.value=n.value.subtract(1,`year`)},leftLabel:p(()=>`${t.value.year()} ${r(`el.datepicker.year`)}`),rightLabel:p(()=>`${n.value.year()} ${r(`el.datepicker.year`)}`),leftYear:p(()=>t.value.year()),rightYear:p(()=>n.value.year()===t.value.year()?t.value.year()+1:n.value.year())}},nd=[`disabled`,`onClick`],rd=[`disabled`],id=[`disabled`],ad=[`disabled`],od=[`disabled`],sd=`year`,cd=k({name:`DatePickerMonthRange`,__name:`panel-month-range`,props:$u,emits:ed,setup(e,{emit:t}){let n=e,r=t,{lang:a}=te(),o=Xe(sl),s=Xe(Jl,void 0),{shortcuts:u,disabledDate:d,cellClassName:f}=o.props,m=c(o.props,`format`),h=c(o.props,`defaultValue`),_=j((0,pl.default)().locale(a.value)),v=j((0,pl.default)().locale(a.value).add(1,sd)),{minDate:y,maxDate:b,rangeState:x,ppNs:S,drpNs:C,handleChangeRange:w,handleRangeConfirm:T,handleShortcutClick:E,onSelect:ee,parseValue:ne}=Iu(n,{defaultValue:h,leftDate:_,rightDate:v,unit:sd,sortDates:me}),re=p(()=>!!u.length),{leftPrevYear:O,rightNextYear:k,leftNextYear:ae,rightPrevYear:M,leftLabel:oe,rightLabel:se,leftYear:ce,rightYear:le}=td({unlinkPanels:c(n,`unlinkPanels`),leftDate:_,rightDate:v}),ue=p(()=>n.unlinkPanels&&le.value>ce.value+1),de=(e,t=!0)=>{let n=e.minDate,i=e.maxDate;b.value===i&&y.value===n||(r(`calendar-change`,[n.toDate(),i&&i.toDate()]),b.value=i,y.value=n,t&&T())},fe=()=>{let e=null;o?.emptyValues&&(e=o.emptyValues.valueOnClear.value),_.value=nu(L(h),{lang:L(a),unit:`year`,unlinkPanels:n.unlinkPanels})[0],v.value=_.value.add(1,`year`),r(`pick`,e)},pe=e=>su(e,m.value,a.value,s);function me(e,t){n.unlinkPanels&&t?v.value=(e?.year()||0)===t.year()?t.add(1,sd):t:v.value=_.value.add(1,sd)}let he=ie();return F(()=>n.visible,e=>{!e&&x.value.selecting&&(ne(n.parsedValue),ee(!1))}),r(`set-picker-option`,[`isValidValue`,tu]),r(`set-picker-option`,[`parseUserInput`,pe]),r(`set-picker-option`,[`handleClear`,fe]),(e,t)=>(A(),i(`div`,{class:N([L(S).b(),L(C).b(),L(S).is(`border`,e.border),L(S).is(`disabled`,L(he)),{"has-sidebar":!!e.$slots.sidebar||re.value}])},[l(`div`,{class:N(L(S).e(`body-wrapper`))},[Be(e.$slots,`sidebar`,{class:N(L(S).e(`sidebar`))}),re.value?(A(),i(`div`,{key:0,class:N(L(S).e(`sidebar`))},[(A(!0),i(V,null,I(L(u),(e,t)=>(A(),i(`button`,{key:t,type:`button`,class:N(L(S).e(`shortcut`)),disabled:L(he),onClick:t=>L(E)(e)},z(e.text),11,nd))),128))],2)):R(`v-if`,!0),l(`div`,{class:N(L(S).e(`body`))},[l(`div`,{class:N([[L(S).e(`content`),L(C).e(`content`)],`is-left`])},[l(`div`,{class:N(L(C).e(`header`))},[l(`button`,{type:`button`,class:N([L(S).e(`icon-btn`),`d-arrow-left`]),disabled:L(he),onClick:t[0]||=(...e)=>L(O)&&L(O)(...e)},[Be(e.$slots,`prev-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ve))]),_:1})])],10,rd),e.unlinkPanels?(A(),i(`button`,{key:0,type:`button`,disabled:!ue.value||L(he),class:N([[L(S).e(`icon-btn`),L(S).is(`disabled`,!ue.value||L(he))],`d-arrow-right`]),onClick:t[1]||=(...e)=>L(ae)&&L(ae)(...e)},[Be(e.$slots,`next-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(Fe))]),_:1})])],10,id)):R(`v-if`,!0),l(`div`,null,z(L(oe)),1)],2),D(xu,{"selection-mode":`range`,date:_.value,"min-date":L(y),"max-date":L(b),"range-state":L(x),"disabled-date":L(d),disabled:L(he),"cell-class-name":L(f),onChangerange:L(w),onPick:de,onSelect:L(ee)},null,8,[`date`,`min-date`,`max-date`,`range-state`,`disabled-date`,`disabled`,`cell-class-name`,`onChangerange`,`onSelect`])],2),l(`div`,{class:N([[L(S).e(`content`),L(C).e(`content`)],`is-right`])},[l(`div`,{class:N(L(C).e(`header`))},[e.unlinkPanels?(A(),i(`button`,{key:0,type:`button`,disabled:!ue.value||L(he),class:N([[L(S).e(`icon-btn`),L(S).is(`disabled`,!ue.value||L(he))],`d-arrow-left`]),onClick:t[2]||=(...e)=>L(M)&&L(M)(...e)},[Be(e.$slots,`prev-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ve))]),_:1})])],10,ad)):R(`v-if`,!0),l(`button`,{type:`button`,class:N([L(S).e(`icon-btn`),`d-arrow-right`]),disabled:L(he),onClick:t[3]||=(...e)=>L(k)&&L(k)(...e)},[Be(e.$slots,`next-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(Fe))]),_:1})])],10,od),l(`div`,null,z(L(se)),1)],2),D(xu,{"selection-mode":`range`,date:v.value,"min-date":L(y),"max-date":L(b),"range-state":L(x),"disabled-date":L(d),disabled:L(he),"cell-class-name":L(f),onChangerange:L(w),onPick:de,onSelect:L(ee)},null,8,[`date`,`min-date`,`max-date`,`range-state`,`disabled-date`,`disabled`,`cell-class-name`,`onChangerange`,`onSelect`])],2)],2)],2)],2))}}),ld=be({...Ql}),ud=[`pick`,`set-picker-option`,`calendar-change`],dd=({unlinkPanels:e,leftDate:t,rightDate:n})=>({leftPrevYear:()=>{t.value=t.value.subtract(10,`year`),e.value||(n.value=n.value.subtract(10,`year`))},rightNextYear:()=>{e.value||(t.value=t.value.add(10,`year`)),n.value=n.value.add(10,`year`)},leftNextYear:()=>{t.value=t.value.add(10,`year`)},rightPrevYear:()=>{n.value=n.value.subtract(10,`year`)},leftLabel:p(()=>{let e=Math.floor(t.value.year()/10)*10;return`${e}-${e+9}`}),rightLabel:p(()=>{let e=Math.floor(n.value.year()/10)*10;return`${e}-${e+9}`}),leftYear:p(()=>Math.floor(t.value.year()/10)*10+9),rightYear:p(()=>Math.floor(n.value.year()/10)*10)}),fd=[`disabled`,`onClick`],pd=[`disabled`],md=[`disabled`],hd=[`disabled`],gd=[`disabled`],_d=10,vd=`year`,yd=k({name:`DatePickerYearRange`,__name:`panel-year-range`,props:ld,emits:ud,setup(e,{emit:t}){let n=e,r=t,{lang:a}=te(),o=j((0,pl.default)().locale(a.value)),s=j((0,pl.default)().locale(a.value).add(_d,vd)),u=Xe(Jl,void 0),d=Xe(sl),{shortcuts:f,disabledDate:m,cellClassName:h}=d.props,_=c(d.props,`format`),v=c(d.props,`defaultValue`),{minDate:y,maxDate:b,rangeState:x,ppNs:S,drpNs:C,handleChangeRange:w,handleRangeConfirm:T,handleShortcutClick:E,onSelect:ee,parseValue:ne}=Iu(n,{defaultValue:v,leftDate:o,rightDate:s,step:_d,unit:vd,sortDates:ye}),{leftPrevYear:re,rightNextYear:O,leftNextYear:k,rightPrevYear:ae,leftLabel:M,rightLabel:oe,leftYear:se,rightYear:ce}=dd({unlinkPanels:c(n,`unlinkPanels`),leftDate:o,rightDate:s}),le=ie(),ue=p(()=>!!f.length),de=p(()=>[S.b(),C.b(),S.is(`border`,n.border),S.is(`disabled`,le.value),{"has-sidebar":!!Re().sidebar||ue.value}]),fe=p(()=>({content:[S.e(`content`),C.e(`content`),`is-left`],arrowLeftBtn:[S.e(`icon-btn`),`d-arrow-left`],arrowRightBtn:[S.e(`icon-btn`),S.is(`disabled`,!me.value||le.value),`d-arrow-right`]})),pe=p(()=>({content:[S.e(`content`),C.e(`content`),`is-right`],arrowLeftBtn:[S.e(`icon-btn`),S.is(`disabled`,!me.value||le.value),`d-arrow-left`],arrowRightBtn:[S.e(`icon-btn`),`d-arrow-right`]})),me=p(()=>n.unlinkPanels&&ce.value>se.value+1),he=(e,t=!0)=>{let n=e.minDate,i=e.maxDate;b.value===i&&y.value===n||(r(`calendar-change`,[n.toDate(),i&&i.toDate()]),b.value=i,y.value=n,t&&T())},ge=e=>su(e,_.value,a.value,u),_e=e=>tu(e)&&(!m||!m(e[0].toDate())&&!m(e[1].toDate())),P=()=>{let e=null;d?.emptyValues&&(e=d.emptyValues.valueOnClear.value);let t=nu(L(v),{lang:L(a),step:_d,unit:vd,unlinkPanels:n.unlinkPanels});o.value=t[0],s.value=t[1],r(`pick`,e)};function ye(e,t){if(n.unlinkPanels&&t){let n=e?.year()||0,r=t.year();s.value=n+_d>r?t.add(_d,vd):t}else s.value=o.value.add(_d,vd)}return F(()=>n.visible,e=>{!e&&x.value.selecting&&(ne(n.parsedValue),ee(!1))}),r(`set-picker-option`,[`isValidValue`,_e]),r(`set-picker-option`,[`parseUserInput`,ge]),r(`set-picker-option`,[`handleClear`,P]),(e,t)=>(A(),i(`div`,{class:N(de.value)},[l(`div`,{class:N(L(S).e(`body-wrapper`))},[Be(e.$slots,`sidebar`,{class:N(L(S).e(`sidebar`))}),ue.value?(A(),i(`div`,{key:0,class:N(L(S).e(`sidebar`))},[(A(!0),i(V,null,I(L(f),(e,t)=>(A(),i(`button`,{key:t,type:`button`,class:N(L(S).e(`shortcut`)),disabled:L(le),onClick:t=>L(E)(e)},z(e.text),11,fd))),128))],2)):R(`v-if`,!0),l(`div`,{class:N(L(S).e(`body`))},[l(`div`,{class:N(fe.value.content)},[l(`div`,{class:N(L(C).e(`header`))},[l(`button`,{type:`button`,class:N(fe.value.arrowLeftBtn),disabled:L(le),onClick:t[0]||=(...e)=>L(re)&&L(re)(...e)},[Be(e.$slots,`prev-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ve))]),_:1})])],10,pd),e.unlinkPanels?(A(),i(`button`,{key:0,type:`button`,disabled:!me.value||L(le),class:N(fe.value.arrowRightBtn),onClick:t[1]||=(...e)=>L(k)&&L(k)(...e)},[Be(e.$slots,`next-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(Fe))]),_:1})])],10,md)):R(`v-if`,!0),l(`div`,null,z(L(M)),1)],2),D(Tu,{"selection-mode":`range`,date:o.value,"min-date":L(y),"max-date":L(b),"range-state":L(x),"disabled-date":L(m),disabled:L(le),"cell-class-name":L(h),onChangerange:L(w),onPick:he,onSelect:L(ee)},null,8,[`date`,`min-date`,`max-date`,`range-state`,`disabled-date`,`disabled`,`cell-class-name`,`onChangerange`,`onSelect`])],2),l(`div`,{class:N(pe.value.content)},[l(`div`,{class:N(L(C).e(`header`))},[e.unlinkPanels?(A(),i(`button`,{key:0,type:`button`,disabled:!me.value||L(le),class:N(pe.value.arrowLeftBtn),onClick:t[2]||=(...e)=>L(ae)&&L(ae)(...e)},[Be(e.$slots,`prev-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(ve))]),_:1})])],10,hd)):R(`v-if`,!0),l(`button`,{type:`button`,class:N(pe.value.arrowRightBtn),disabled:L(le),onClick:t[3]||=(...e)=>L(O)&&L(O)(...e)},[Be(e.$slots,`next-year`,{},()=>[D(L(g),null,{default:B(()=>[D(L(Fe))]),_:1})])],10,gd),l(`div`,null,z(L(oe)),1)],2),D(Tu,{"selection-mode":`range`,date:s.value,"min-date":L(y),"max-date":L(b),"range-state":L(x),"disabled-date":L(m),disabled:L(le),"cell-class-name":L(h),onChangerange:L(w),onPick:he,onSelect:L(ee)},null,8,[`date`,`min-date`,`max-date`,`range-state`,`disabled-date`,`disabled`,`cell-class-name`,`onChangerange`,`onSelect`])],2)],2)],2)],2))}}),bd=function(e){switch(e){case`daterange`:case`datetimerange`:return Qu;case`monthrange`:return cd;case`yearrange`:return yd;default:return Nu}},xd=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_advancedFormat=r()})(e,(function(){return function(e,t){var n=t.prototype,r=n.format;n.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return r.bind(this)(e);var i=this.$utils(),a=(e||`YYYY-MM-DDTHH:mm:ssZ`).replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case`Q`:return Math.ceil((t.$M+1)/3);case`Do`:return n.ordinal(t.$D);case`gggg`:return t.weekYear();case`GGGG`:return t.isoWeekYear();case`wo`:return n.ordinal(t.week(),`W`);case`w`:case`ww`:return i.s(t.week(),e===`w`?1:2,`0`);case`W`:case`WW`:return i.s(t.isoWeek(),e===`W`?1:2,`0`);case`k`:case`kk`:return i.s(String(t.$H===0?24:t.$H),e===`k`?1:2,`0`);case`X`:return Math.floor(t.$d.getTime()/1e3);case`x`:return t.$d.getTime();case`z`:return`[`+t.offsetName()+`]`;case`zzz`:return`[`+t.offsetName(`long`)+`]`;default:return e}}));return r.bind(this)(a)}}}))})),Sd=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_weekOfYear=r()})(e,(function(){var e=`week`,t=`year`;return function(n,r,i){var a=r.prototype;a.week=function(n){if(n===void 0&&(n=null),n!==null)return this.add(7*(n-this.week()),`day`);var r=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var a=i(this).startOf(t).add(1,t).date(r),o=i(this).endOf(e);if(a.isBefore(o))return 1}var s=i(this).startOf(t).date(r).startOf(e).subtract(1,`millisecond`),c=this.diff(s,e,!0);return c<0?i(this).startOf(`week`).week():Math.ceil(c)},a.weeks=function(e){return e===void 0&&(e=null),this.week(e)}}}))})),Cd=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_weekYear=r()})(e,(function(){return function(e,t){t.prototype.weekYear=function(){var e=this.month(),t=this.week(),n=this.year();return t===1&&e===11?n+1:e===0&&t>=52?n-1:n}}}))})),wd=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_dayOfYear=r()})(e,(function(){return function(e,t,n){t.prototype.dayOfYear=function(e){var t=Math.round((n(this).startOf(`day`)-n(this).startOf(`year`))/864e5)+1;return e==null?t:this.add(e-t,`day`)}}}))})),Td=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_isSameOrAfter=r()})(e,(function(){return function(e,t){t.prototype.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)}}}))})),Ed=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_isSameOrBefore=r()})(e,(function(){return function(e,t){t.prototype.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)}}}))})),Dd=e(Wl(),1),Od=e(Gl(),1),kd=e(xd(),1),Ad=e(Sd(),1),jd=e(Cd(),1),Md=e(wd(),1),Nd=e(Td(),1),Pd=e(Ed(),1);function Fd(e){return typeof e==`function`||Object.prototype.toString.call(e)===`[object Object]`&&!a(e)}pl.default.extend(Od.default),pl.default.extend(kd.default),pl.default.extend(Dd.default),pl.default.extend(Ad.default),pl.default.extend(jd.default),pl.default.extend(Md.default),pl.default.extend(Nd.default),pl.default.extend(Pd.default);var Id=ye(k({name:`ElDatePickerPanel`,install:null,inheritAttrs:!1,props:Kl,emits:[lr,`calendar-change`,`panel-change`,`visible-change`,`clear`],setup(e,{slots:t,emit:n,attrs:i}){let a=ee(`picker-panel`);Ue(Xe(`EP_PICKER_BASE`,void 0))&&r(sl,{props:P({...re(e)})}),r(ql,{slots:t,pickerNs:a});let{parsedValue:o,onCalendarChange:s,onPanelChange:c,onSetPickerOption:l,onPick:u}=Xe(ll,()=>Ol(e,n),!0);return()=>D(bd(e.type),ce(Fr(i,`onPick`),e,{parsedValue:o.value,"onSet-picker-option":l,"onCalendar-change":s,"onPanel-change":c,onClear:()=>n(`clear`),onPick:u}),Fd(t)?t:{default:()=>[t]})}})),Ld=be({...El,type:{type:Ae(String),default:`date`}});function Rd(e){return typeof e==`function`||Object.prototype.toString.call(e)===`[object Object]`&&!a(e)}var zd=ye(k({name:`ElDatePicker`,install:null,props:Ld,emits:[lr],setup(e,{expose:t,emit:n,slots:i}){r(Jl,p(()=>!e.format)),r(cl,P(c(e,`popperOptions`)));let a=j();t({focus:()=>{a.value?.focus()},blur:()=>{a.value?.blur()},handleOpen:()=>{a.value?.handleOpen()},handleClose:()=>{a.value?.handleClose()}});let o=e=>{n(lr,e)};return()=>D(Ml,ce(e,{format:e.format??(fl[e.type]||`YYYY-MM-DD`),type:e.type,ref:a,"onUpdate:modelValue":o}),{default:t=>D(Id,ce({disabled:e.disabled,editable:e.editable,border:!1},t),Rd(i)?i:{default:()=>[i]}),"range-separator":i[`range-separator`]})}})),Bd={invalid_type:`invalid_type`,too_big:`too_big`,too_small:`too_small`,invalid_format:`invalid_format`,not_multiple_of:`not_multiple_of`,unrecognized_keys:`unrecognized_keys`,invalid_union:`invalid_union`,invalid_key:`invalid_key`,invalid_element:`invalid_element`,invalid_value:`invalid_value`,custom:`custom`},Vd;Vd||={};var Hd=1e4,Ud=e=>typeof e.auth==`object`&&e.auth!==null?e.auth.token:void 0,Wd=e=>{e.connected&&e.disconnect(),e.auth={}},Gd=(e,t,n)=>new Promise(r=>{let i,a=t=>{clearTimeout(l),clearTimeout(i),e.off(`connect`,o),e.off(`connect_error`,c),e.off(`disconnect`,s),r(t)},o=()=>{i=setTimeout(()=>a(!0),n)},s=()=>a(!1),c=()=>a(!1),l=setTimeout(()=>a(!1),t);e.on(`connect`,o),e.on(`connect_error`,c),e.on(`disconnect`,s)}),Kd=async(e,t,n)=>{if(t.isExpired()&&!await t.refresh().catch(()=>!1))return Wd(e),!1;let r=t.accessToken();if(r===null)return Wd(e),!1;if(e.connected&&Ud(e)===r)return!0;e.connected&&e.disconnect(),e.auth={token:r};let i=Gd(e,n?.timeout??Hd,n?.authGrace??500);return e.connect(),i},qd=e=>{let{socket:t,session:n,onReconnected:r,onFailure:i,timeout:a,authGrace:o}=e,s={...a===void 0?{}:{timeout:a},...o===void 0?{}:{authGrace:o}},c=!1,l=!1,u=!1,d=async()=>{if(!(l||t.connected)&&n.accessToken()!==null){l=!0;try{await Kd(t,n,s)||i?.()}catch{i?.()}finally{l=!1}}},f=()=>{d()},p=()=>{document.visibilityState===`visible`&&f()},m=e=>{e===`io server disconnect`&&!l&&i?.()},h=()=>{if(!u){u=!0;return}setTimeout(()=>{t.connected&&r?.()},o??500)};return{start:()=>{c||(c=!0,document.addEventListener(`visibilitychange`,p),window.addEventListener(`focus`,f),window.addEventListener(`online`,f),t.on(`connect`,h),t.on(`disconnect`,m))},stop:()=>{c&&(c=!1,document.removeEventListener(`visibilitychange`,p),window.removeEventListener(`focus`,f),window.removeEventListener(`online`,f),t.off(`connect`,h),t.off(`disconnect`,m))}}},Jd=k({name:`AppMain`,__name:`app.main`,setup(e){let t=ia(),n=j(!1),r,a=()=>{n.value=!1,window.clearTimeout(r),r=void 0},o=e=>{typeof e==`number`?(window.clearTimeout(r),r=window.setTimeout(a,e*1e3),n.value=!0):typeof e==`boolean`?(window.clearTimeout(r),r=void 0,n.value=e):n.value=!n.value};return le(()=>{t.register(`loadingOverlay`,o)}),h(()=>{t.unregister(`loadingOverlay`,o),window.clearTimeout(r)}),$e({title:`SmartPanel`,meta:[{charset:`utf-8`},{name:`viewport`,content:`width=device-width,initial-scale=1.0`},{hid:`description`,name:`description`,content:`Powerful application for administrating and integrating the FastyBird IoT Smart Panel`}],link:[{rel:`icon`,type:`image/x-icon`,href:`/favicon.ico`}],htmlAttrs:{lang:`en`}}),(e,t)=>{let r=Me(`metainfo`),a=Me(`router-view`);return A(),i(V,null,[D(r,null,{title:B(({content:e})=>[E(z(e?`${e} | FastyBird SmartPanel`:`FastyBird SmartPanel`),1)]),_:1}),xe(D(a,null,null,512),[[L(Fi),n.value]])],64)}}}),Yd={install:(e,t)=>{let n=pn(e),r=tr(t.store);e.provide(fr,r),n.addStore(fr,r)}},Xd=yn(),Zd={"cs-CZ":{meta:{sign:{in:{title:`Přihlášení`},up:{title:`Registrace`}},lock:{screen:{title:`Zamknutá obrazovka`}},profile:{general:{title:`Obecné`},security:{title:`Zabezpečení`}}},breadcrumbs:{homepage:`úvodní stránka`,profile:`profil`,general:`obecné`,security:`zabezpečení`},headings:{signIn:`Přihlášení`,signUp:`Registrace`,lockScreen:`Obrazovka zamčena`,profileGeneral:`Obecné nastavení`,profileSecurity:`Nastavení zabezpečení`,yourProfile:`Váš profil`},messages:{requestError:`Něco se pokazilo, zkuste to prosím později.`,invalidPassword:`Zadané heslo je nesprávné.`,profileEdited:`Váš profil byl úspěšně aktualizován.`,profileNotEdited:`Váš profil se nepodařilo upravit.`,passwordEdited:`Vaše heslo bylo úspěšně aktualizováno.`,passwordNotEdited:`Vaše heslo se nepodařilo změnit.`},texts:{processing:`Zpracování požadavku...`},tabs:{general:`Obecné`,security:`Zabezpečení`},fields:{username:{title:`Uživatelské jméno`,validation:{required:`Vyplňte prosím své uživatelské jméno`}},password:{title:`Heslo`,validation:{required:`Vyplňte prosím své heslo`}},email:{title:`E-mail`,placeholder:`např. jan{'@'}novak.cz`,validation:{required:`Vyplňte prosím svou e-mailovou adresu`,email:`Zadejte prosím platnou e-mailovou adresu`}},firstName:{title:`Jméno`,placeholder:`např. Jan`,validation:{required:`Vyplňte prosím jméno`}},lastName:{title:`Příjmení`,placeholder:`např. Novák`,validation:{required:`Vyplňte prosím příjmení`}},language:{title:`Jazyk`,placeholder:`Použít výchozí jazyk prohlížeče`},currentPassword:{title:`Aktuální heslo`,help:`Vaše aktuální heslo`,validation:{required:`Vyplňte prosím své aktuální heslo`}},newPassword:{title:`Nové heslo`,help:`Vaše nové heslo`,validation:{required:`Vyplňte prosím své nové heslo`}},repeatPassword:{title:`Zopakujte nové heslo`,help:`Potvrďte své nové heslo`,validation:{required:`Zopakujte prosím své nové heslo`,different:`Zadaná nová hesla se neshodují`}}},buttons:{signIn:{title:`Přihlásit se`},signUp:{title:`Zaregistrovat se`},unlock:{title:`Odemknout`},signOut:{title:`Odhlásit se`},backToSignIn:{title:`Zpět na přihlášení`},save:{title:`Uložit`},close:{title:`Zavřít`}},tokens:{title:`Osobní přístupové tokeny`,create:`Vytvořit token`,revoke:`Odvolat`,never:`Nikdy`,description:`Osobní přístupové tokeny umožňují externím aplikacím autentifikovat se v API vaším jménem.`,noTokens:`Zatím nebyly vytvořeny žádné osobní přístupové tokeny.`,columns:{name:`Název`,created:`Vytvořeno`,lastUsed:`Naposledy použito`,expires:`Vyprší`,actions:`Akce`},createDialog:{title:`Vytvořit osobní přístupový token`,name:`Název tokenu`,namePlaceholder:`např. CI/CD Pipeline, Home Assistant`,nameRequired:`Název tokenu je povinný`,description:`Popis (volitelné)`,descriptionPlaceholder:`K čemu se tento token používá?`,expiry:`Vypršení`,expiry30:`30 dní`,expiry90:`90 dní`,expiry365:`1 rok`,expiryNever:`Bez vypršení`,cancel:`Zrušit`,submit:`Vytvořit token`},createdDialog:{title:`Token úspěšně vytvořen`,warning:`Zkopírujte tento token nyní. Znovu ho neuvidíte.`,copy:`Kopírovat`,copied:`Zkopírováno!`,done:`Hotovo`},revokeDialog:{title:`Odvolat token`,message:`Opravdu chcete tento token odvolat? Tuto akci nelze vrátit zpět.`,confirm:`Odvolat`,cancel:`Zrušit`},messages:{created:`Osobní přístupový token byl úspěšně vytvořen.`,createError:`Nepodařilo se vytvořit osobní přístupový token.`,revoked:`Token byl úspěšně odvolán.`,revokeError:`Nepodařilo se odvolat token.`,copyError:`Nepodařilo se zkopírovat token do schránky.`}}},"de-DE":{meta:{sign:{in:{title:`Anmelden`},up:{title:`Registrieren`}},lock:{screen:{title:`Bildschirmsperre`}},profile:{general:{title:`Allgemein`},security:{title:`Sicherheit`}}},breadcrumbs:{homepage:`Startseite`,profile:`Profil`,general:`Allgemein`,security:`Sicherheit`},headings:{signIn:`Anmelden`,signUp:`Registrieren`,lockScreen:`Bildschirm gesperrt`,profileGeneral:`Allgemeine Einstellungen`,profileSecurity:`Sicherheitseinstellungen`,yourProfile:`Ihr Profil`},messages:{requestError:`Etwas ist schiefgelaufen, bitte versuchen Sie es später erneut.`,invalidPassword:`Das eingegebene Passwort ist falsch.`,profileEdited:`Ihr Profil wurde erfolgreich aktualisiert.`,profileNotEdited:`Ihr Profil konnte nicht bearbeitet werden.`,passwordEdited:`Ihr Passwort wurde erfolgreich aktualisiert.`,passwordNotEdited:`Ihr Passwort konnte nicht geändert werden.`},texts:{processing:`Anfrage wird verarbeitet...`},tabs:{general:`Allgemein`,security:`Sicherheit`},fields:{username:{title:`Benutzername`,validation:{required:`Bitte geben Sie Ihren Benutzernamen ein`}},password:{title:`Passwort`,validation:{required:`Bitte geben Sie Ihr Passwort ein`}},email:{title:`E-Mail`,placeholder:`z.B. max{'@'}mustermann.de`,validation:{required:`Bitte geben Sie Ihre E-Mail-Adresse ein`,email:`Bitte geben Sie eine gültige E-Mail-Adresse ein`}},firstName:{title:`Vorname`,placeholder:`z.B. Max`,validation:{required:`Bitte geben Sie den Vornamen ein`}},lastName:{title:`Nachname`,placeholder:`z.B. Mustermann`,validation:{required:`Bitte geben Sie den Nachnamen ein`}},language:{title:`Sprache`,placeholder:`Standard-Browsersprache verwenden`},currentPassword:{title:`Aktuelles Passwort`,help:`Ihr aktuelles Passwort`,validation:{required:`Bitte geben Sie Ihr aktuelles Passwort ein`}},newPassword:{title:`Neues Passwort`,help:`Ihr neues Passwort`,validation:{required:`Bitte geben Sie Ihr neues Passwort ein`}},repeatPassword:{title:`Neues Passwort wiederholen`,help:`Bestätigen Sie Ihr neues Passwort`,validation:{required:`Bitte wiederholen Sie Ihr neues Passwort`,different:`Die eingegebenen neuen Passwörter stimmen nicht überein`}}},buttons:{signIn:{title:`Anmelden`},signUp:{title:`Registrieren`},unlock:{title:`Entsperren`},signOut:{title:`Abmelden`},backToSignIn:{title:`Zurück zur Anmeldung`},save:{title:`Speichern`},close:{title:`Schließen`}},tokens:{title:`Persönliche Zugriffstoken`,create:`Token erstellen`,revoke:`Widerrufen`,never:`Nie`,description:`Persönliche Zugriffstoken ermöglichen externen Anwendungen, sich in Ihrem Namen mit der API zu authentifizieren.`,noTokens:`Noch keine persönlichen Zugriffstoken.`,columns:{name:`Name`,created:`Erstellt`,lastUsed:`Zuletzt verwendet`,expires:`Läuft ab`,actions:`Aktionen`},createDialog:{title:`Persönlichen Zugriffstoken erstellen`,name:`Token-Name`,namePlaceholder:`z. B. CI/CD-Pipeline, Home Assistant`,nameRequired:`Token-Name ist erforderlich`,description:`Beschreibung (optional)`,descriptionPlaceholder:`Wofür wird dieses Token verwendet?`,expiry:`Ablauf`,expiry30:`30 Tage`,expiry90:`90 Tage`,expiry365:`1 Jahr`,expiryNever:`Kein Ablauf`,cancel:`Abbrechen`,submit:`Token erstellen`},createdDialog:{title:`Token erfolgreich erstellt`,warning:`Kopieren Sie dieses Token jetzt. Sie können es später nicht mehr sehen.`,copy:`Kopieren`,copied:`Kopiert!`,done:`Fertig`},revokeDialog:{title:`Token widerrufen`,message:`Möchten Sie diesen Token wirklich widerrufen? Diese Aktion kann nicht rückgängig gemacht werden.`,confirm:`Widerrufen`,cancel:`Abbrechen`},messages:{created:`Persönlicher Zugriffstoken erfolgreich erstellt.`,createError:`Fehler beim Erstellen des persönlichen Zugriffstokens.`,revoked:`Token erfolgreich widerrufen.`,revokeError:`Fehler beim Widerrufen des Tokens.`,copyError:`Fehler beim Kopieren des Tokens in die Zwischenablage.`}}},"en-US":{meta:{sign:{in:{title:`Sign in`},up:{title:`Sign up`}},lock:{screen:{title:`Lock screen`}},profile:{general:{title:`General`},security:{title:`Security`}}},breadcrumbs:{homepage:`homepage`,profile:`profile`,general:`general`,security:`security`},headings:{signIn:`Sign in`,signUp:`Sign up`,lockScreen:`Screen locked`,profileGeneral:`General settings`,profileSecurity:`Security settings`,yourProfile:`Your profile`},messages:{requestError:`Something went wrong, please try again later.`,invalidPassword:`The password you entered is incorrect.`,profileEdited:`Your profile has been updated successfully.`,profileNotEdited:`Your profile couldn't be edited.`,passwordEdited:`Your password has been updated successfully.`,passwordNotEdited:`Your password couldn't be changed.`},texts:{processing:`Processing request...`},tabs:{general:`General`,security:`Security`},fields:{username:{title:`Username`,validation:{required:`Please fill in your username`}},password:{title:`Password`,validation:{required:`Please fill in your password`}},email:{title:`Email`,placeholder:`eg. john{'@'}doe.com`,validation:{required:`Please fill in your email address`,email:`Please provide valid email address`}},firstName:{title:`First name`,placeholder:`eg. John`,validation:{required:`Please fill in first name`}},lastName:{title:`Last name`,placeholder:`eg. Doe`,validation:{required:`Please fill in last name`}},language:{title:`Language`,placeholder:`Use browser default`},currentPassword:{title:`Current password`,help:`Your actual password`,validation:{required:`Please fill in your current password`}},newPassword:{title:`New password`,help:`Your new password`,validation:{required:`Please fill in your new password`}},repeatPassword:{title:`Repeat new password`,help:`Confirm your new password`,validation:{required:`Please repeat your new password`,different:`Entered new passwords are not same`}}},tokens:{title:`Personal Access Tokens`,create:`Create Token`,revoke:`Revoke`,never:`Never`,description:`Personal access tokens allow external applications to authenticate with the API on your behalf.`,noTokens:`No personal access tokens yet.`,columns:{name:`Name`,created:`Created`,lastUsed:`Last Used`,expires:`Expires`,actions:`Actions`},createDialog:{title:`Create Personal Access Token`,name:`Token Name`,namePlaceholder:`e.g. CI/CD Pipeline, Home Assistant`,nameRequired:`Token name is required`,description:`Description (optional)`,descriptionPlaceholder:`What is this token used for?`,expiry:`Expiration`,expiry30:`30 days`,expiry90:`90 days`,expiry365:`1 year`,expiryNever:`No expiration`,cancel:`Cancel`,submit:`Create Token`},createdDialog:{title:`Token Created Successfully`,warning:`Copy this token now. You won't be able to see it again.`,copy:`Copy`,copied:`Copied!`,done:`Done`},revokeDialog:{title:`Revoke Token`,message:`Are you sure you want to revoke this token? This action cannot be undone.`,confirm:`Revoke`,cancel:`Cancel`},messages:{created:`Personal access token created successfully.`,createError:`Failed to create personal access token.`,revoked:`Token revoked successfully.`,revokeError:`Failed to revoke token.`,copyError:`Failed to copy token to clipboard.`}},buttons:{signIn:{title:`Sign in`},signUp:{title:`Sign up`},unlock:{title:`Unlock`},signOut:{title:`Sign out`},backToSignIn:{title:`Back to sign in`},save:{title:`Save`},close:{title:`Close`}}},"es-ES":{meta:{sign:{in:{title:`Iniciar sesión`},up:{title:`Registrarse`}},lock:{screen:{title:`Pantalla bloqueada`}},profile:{general:{title:`General`},security:{title:`Seguridad`}}},breadcrumbs:{homepage:`inicio`,profile:`perfil`,general:`General`,security:`seguridad`},headings:{signIn:`Iniciar sesión`,signUp:`Registrarse`,lockScreen:`Pantalla bloqueada`,profileGeneral:`Configuración general`,profileSecurity:`Configuración de seguridad`,yourProfile:`Tu perfil`},messages:{requestError:`Algo salió mal, por favor inténtalo de nuevo más tarde.`,invalidPassword:`La contraseña que ingresaste es incorrecta.`,profileEdited:`Tu perfil ha sido actualizado correctamente.`,profileNotEdited:`No se pudo editar tu perfil.`,passwordEdited:`Tu contraseña ha sido actualizada correctamente.`,passwordNotEdited:`No se pudo cambiar tu contraseña.`},texts:{processing:`Procesando solicitud...`},tabs:{general:`General`,security:`Seguridad`},fields:{username:{title:`Nombre de usuario`,validation:{required:`Por favor ingresa tu nombre de usuario`}},password:{title:`Contraseña`,validation:{required:`Por favor ingresa tu contraseña`}},email:{title:`Correo electrónico`,placeholder:`ej. juan{'@'}ejemplo.com`,validation:{required:`Por favor ingresa tu dirección de correo electrónico`,email:`Por favor proporciona una dirección de correo electrónico válida`}},firstName:{title:`Nombre`,placeholder:`ej. Juan`,validation:{required:`Por favor ingresa el nombre`}},lastName:{title:`Apellido`,placeholder:`ej. García`,validation:{required:`Por favor ingresa el apellido`}},language:{title:`Idioma`,placeholder:`Usar idioma predeterminado del navegador`},currentPassword:{title:`Contraseña actual`,help:`Tu contraseña actual`,validation:{required:`Por favor ingresa tu contraseña actual`}},newPassword:{title:`Nueva contraseña`,help:`Tu nueva contraseña`,validation:{required:`Por favor ingresa tu nueva contraseña`}},repeatPassword:{title:`Repetir nueva contraseña`,help:`Confirma tu nueva contraseña`,validation:{required:`Por favor repite tu nueva contraseña`,different:`Las nuevas contraseñas ingresadas no coinciden`}}},buttons:{signIn:{title:`Iniciar sesión`},signUp:{title:`Registrarse`},unlock:{title:`Desbloquear`},signOut:{title:`Cerrar sesión`},backToSignIn:{title:`Volver a iniciar sesión`},save:{title:`Guardar`},close:{title:`Cerrar`}},tokens:{title:`Tokens de acceso personal`,create:`Crear token`,revoke:`Revocar`,never:`Nunca`,description:`Los tokens de acceso personal permiten que aplicaciones externas se autentiquen con la API en su nombre.`,noTokens:`Aún no hay tokens de acceso personal.`,columns:{name:`Nombre`,created:`Creado`,lastUsed:`Último uso`,expires:`Caduca`,actions:`Acciones`},createDialog:{title:`Crear token de acceso personal`,name:`Nombre del token`,namePlaceholder:`p. ej. CI/CD Pipeline, Home Assistant`,nameRequired:`El nombre del token es obligatorio`,description:`Descripción (opcional)`,descriptionPlaceholder:`¿Para qué se usa este token?`,expiry:`Expiración`,expiry30:`30 días`,expiry90:`90 días`,expiry365:`1 año`,expiryNever:`Sin expiración`,cancel:`Cancelar`,submit:`Crear token`},createdDialog:{title:`Token creado correctamente`,warning:`Copia este token ahora. No podrá verlo de nuevo.`,copy:`Copiar`,copied:`¡Copiado!`,done:`Listo`},revokeDialog:{title:`Revocar token`,message:`¿Seguro que quieres revocar este token? Esta acción no se puede deshacer.`,confirm:`Revocar`,cancel:`Cancelar`},messages:{created:`Token de acceso personal creado correctamente.`,createError:`No se pudo crear el token de acceso personal.`,revoked:`Token revocado correctamente.`,revokeError:`No se pudo revocar el token.`,copyError:`No se pudo copiar el token al portapapeles.`}}},"pl-PL":{meta:{sign:{in:{title:`Logowanie`},up:{title:`Rejestracja`}},lock:{screen:{title:`Zablokowany ekran`}},profile:{general:{title:`Ogólne`},security:{title:`Bezpieczeństwo`}}},breadcrumbs:{homepage:`strona główna`,profile:`profil`,general:`ogólne`,security:`bezpieczeństwo`},headings:{signIn:`Logowanie`,signUp:`Rejestracja`,lockScreen:`Ekran zablokowany`,profileGeneral:`Ustawienia ogólne`,profileSecurity:`Ustawienia bezpieczeństwa`,yourProfile:`Twój profil`},messages:{requestError:`Coś poszło nie tak, spróbuj ponownie później.`,invalidPassword:`Wprowadzone hasło jest nieprawidłowe.`,profileEdited:`Twój profil został pomyślnie zaktualizowany.`,profileNotEdited:`Nie udało się edytować Twojego profilu.`,passwordEdited:`Twoje hasło zostało pomyślnie zaktualizowane.`,passwordNotEdited:`Nie udało się zmienić Twojego hasła.`},texts:{processing:`Przetwarzanie żądania...`},tabs:{general:`Ogólne`,security:`Bezpieczeństwo`},fields:{username:{title:`Nazwa użytkownika`,validation:{required:`Proszę podać nazwę użytkownika`}},password:{title:`Hasło`,validation:{required:`Proszę podać hasło`}},email:{title:`E-mail`,placeholder:`np. jan{'@'}kowalski.pl`,validation:{required:`Proszę podać adres e-mail`,email:`Proszę podać prawidłowy adres e-mail`}},firstName:{title:`Imię`,placeholder:`np. Jan`,validation:{required:`Proszę podać imię`}},lastName:{title:`Nazwisko`,placeholder:`np. Kowalski`,validation:{required:`Proszę podać nazwisko`}},language:{title:`Język`,placeholder:`Użyj domyślnego języka przeglądarki`},currentPassword:{title:`Obecne hasło`,help:`Twoje aktualne hasło`,validation:{required:`Proszę podać obecne hasło`}},newPassword:{title:`Nowe hasło`,help:`Twoje nowe hasło`,validation:{required:`Proszę podać nowe hasło`}},repeatPassword:{title:`Powtórz nowe hasło`,help:`Potwierdź nowe hasło`,validation:{required:`Proszę powtórzyć nowe hasło`,different:`Wprowadzone nowe hasła nie są identyczne`}}},buttons:{signIn:{title:`Zaloguj się`},signUp:{title:`Zarejestruj się`},unlock:{title:`Odblokuj`},signOut:{title:`Wyloguj się`},backToSignIn:{title:`Powrót do logowania`},save:{title:`Zapisz`},close:{title:`Zamknij`}},tokens:{title:`Tokeny dostępu osobistego`,create:`Utwórz token`,revoke:`Cofnij`,never:`Nigdy`,description:`Tokeny dostępu osobistego pozwalają zewnętrznym aplikacjom uwierzytelniać się w API w Twoim imieniu.`,noTokens:`Brak jeszcze tokenów dostępu osobistego.`,columns:{name:`Nazwa`,created:`Utworzony`,lastUsed:`Ostatnio używany`,expires:`Wygasa`,actions:`Akcje`},createDialog:{title:`Utwórz token dostępu osobistego`,name:`Nazwa tokena`,namePlaceholder:`np. CI/CD Pipeline, Home Assistant`,nameRequired:`Nazwa tokena jest wymagana`,description:`Opis (opcjonalnie)`,descriptionPlaceholder:`Do czego służy ten token?`,expiry:`Wygasa`,expiry30:`30 dni`,expiry90:`90 dni`,expiry365:`1 rok`,expiryNever:`Bez wygaśnięcia`,cancel:`Anuluj`,submit:`Utwórz token`},createdDialog:{title:`Token utworzony pomyślnie`,warning:`Skopiuj teraz ten token. Nie będzie można go ponownie wyświetlić.`,copy:`Kopiuj`,copied:`Skopiowano!`,done:`Gotowe`},revokeDialog:{title:`Cofnij token`,message:`Czy na pewno chcesz cofnąć ten token? Tej operacji nie można cofnąć.`,confirm:`Cofnij`,cancel:`Anuluj`},messages:{created:`Token dostępu osobistego utworzony pomyślnie.`,createError:`Nie udało się utworzyć tokena dostępu osobistego.`,revoked:`Token pomyślnie cofnięty.`,revokeError:`Nie udało się cofnąć tokena.`,copyError:`Nie udało się skopiować tokena do schowka.`}}},"sk-SK":{meta:{sign:{in:{title:`Prihlásenie`},up:{title:`Registrácia`}},lock:{screen:{title:`Uzamknutá obrazovka`}},profile:{general:{title:`Všeobecné`},security:{title:`Bezpečnosť`}}},breadcrumbs:{homepage:`domovská stránka`,profile:`profil`,general:`všeobecné`,security:`bezpečnosť`},headings:{signIn:`Prihlásiť sa`,signUp:`Zaregistrovať sa`,lockScreen:`Obrazovka uzamknutá`,profileGeneral:`Všeobecné nastavenia`,profileSecurity:`Bezpečnostné nastavenia`,yourProfile:`Váš profil`},messages:{requestError:`Niečo sa pokazilo, skúste to prosím neskôr.`,invalidPassword:`Zadané heslo je nesprávne.`,profileEdited:`Váš profil bol úspešne aktualizovaný.`,profileNotEdited:`Váš profil sa nepodarilo upraviť.`,passwordEdited:`Vaše heslo bolo úspešne aktualizované.`,passwordNotEdited:`Vaše heslo sa nepodarilo zmeniť.`},texts:{processing:`Spracovanie požiadavky...`},tabs:{general:`Všeobecné`,security:`Bezpečnosť`},fields:{username:{title:`Používateľské meno`,validation:{required:`Prosím vyplňte svoje používateľské meno`}},password:{title:`Heslo`,validation:{required:`Prosím vyplňte svoje heslo`}},email:{title:`E-mail`,placeholder:`napr. jan{'@'}novak.sk`,validation:{required:`Prosím vyplňte svoju emailovú adresu`,email:`Prosím zadajte platnú emailovú adresu`}},firstName:{title:`Meno`,placeholder:`napr. Ján`,validation:{required:`Prosím vyplňte meno`}},lastName:{title:`Priezvisko`,placeholder:`napr. Novák`,validation:{required:`Prosím vyplňte priezvisko`}},language:{title:`Jazyk`,placeholder:`Použiť predvolený jazyk prehliadača`},currentPassword:{title:`Aktuálne heslo`,help:`Vaše aktuálne heslo`,validation:{required:`Prosím vyplňte svoje aktuálne heslo`}},newPassword:{title:`Nové heslo`,help:`Vaše nové heslo`,validation:{required:`Prosím vyplňte svoje nové heslo`}},repeatPassword:{title:`Zopakujte nové heslo`,help:`Potvrďte svoje nové heslo`,validation:{required:`Prosím zopakujte svoje nové heslo`,different:`Zadané nové heslá sa nezhodujú`}}},buttons:{signIn:{title:`Prihlásiť sa`},signUp:{title:`Zaregistrovať sa`},unlock:{title:`Odomknúť`},signOut:{title:`Odhlásiť sa`},backToSignIn:{title:`Späť na prihlásenie`},save:{title:`Uložiť`},close:{title:`Zavrieť`}},tokens:{title:`Osobné prístupové tokeny`,create:`Vytvoriť token`,revoke:`Zrušiť`,never:`Nikdy`,description:`Osobné prístupové tokeny umožňujú externým aplikáciám autentifikovať sa v API vo vašom mene.`,noTokens:`Zatiaľ nie sú žiadne osobné prístupové tokeny.`,columns:{name:`Názov`,created:`Vytvorené`,lastUsed:`Naposledy použité`,expires:`Uplynie`,actions:`Akcie`},createDialog:{title:`Vytvoriť osobný prístupový token`,name:`Názov tokenu`,namePlaceholder:`napr. CI/CD Pipeline, Home Assistant`,nameRequired:`Názov tokenu je povinný`,description:`Popis (voliteľné)`,descriptionPlaceholder:`Na čo sa tento token používa?`,expiry:`Vypršanie`,expiry30:`30 dní`,expiry90:`90 dní`,expiry365:`1 rok`,expiryNever:`Žiadne vypršanie`,cancel:`Zrušiť`,submit:`Vytvoriť token`},createdDialog:{title:`Token bol úspešne vytvorený`,warning:`Skopírujte tento token teraz. Už ho nebudete môcť znovu vidieť.`,copy:`Kopírovať`,copied:`Skopírované!`,done:`Hotovo`},revokeDialog:{title:`Zrušiť token`,message:`Ste si istí, že chcete tento token zrušiť? Túto akciu nemožno vrátiť späť.`,confirm:`Zrušiť`,cancel:`Zrušiť`},messages:{created:`Osobný prístupový token bol úspešne vytvorený.`,createError:`Nepodarilo sa vytvoriť osobný prístupový token.`,revoked:`Token bol úspešne zrušený.`,revokeError:`Nepodarilo sa zrušiť token.`,copyError:`Nepodarilo sa skopírovať token do schránky.`}}}},Qd=(e,t)=>{let n=e.getStore(ha),r=t.meta&&`guards`in t.meta?t.meta.guards:[];return n.isSignedIn()&&r&&(Array.isArray(r)&&r.includes(`anonymous`)||typeof r==`object`&&`anonymous`in r)?(`query`in t&&typeof t.query==`object`&&t.query!==null&&`redirect`in t.query&&typeof t.query.redirect==`string`&&t.query.redirect.startsWith(`/mcp-oauth-consent?`)?t.query.redirect:null)||{name:Te.ROOT}:!0},$d=(e,t)=>{let n=e.getStore(ha),r=t.meta&&`guards`in t.meta?t.meta.guards:[];if(!n.isSignedIn()&&r&&(Array.isArray(r)&&r.includes(`authenticated`)||typeof r==`object`&&`authenticated`in r)){let e=`fullPath`in t&&typeof t.fullPath==`string`?t.fullPath:void 0;return{name:ua.SIGN_IN,...e?.startsWith(`/mcp-oauth-consent?`)?{query:{redirect:e}}:{}}}return!0},ef=(e,t)=>{if(!e)return!0;let n=e.isLocked.value,r=e.isSignedIn.value,i=t.name===ua.LOCK||t.name===ua.LOCK_SCREEN;return n&&!r?(e.unlock?.(),!0):n&&r&&!i?{name:ua.LOCK_SCREEN}:!n&&i?{name:Te.ROOT}:!0},tf=typeof __SENTRY_DEBUG__>`u`||__SENTRY_DEBUG__,nf=globalThis,rf=`10.43.0`;function af(){return of(nf),nf}function of(e){let t=e.__SENTRY__=e.__SENTRY__||{};return t.version=t.version||`10.43.0`,t[rf]=t[`10.43.0`]||{}}function sf(e,t,n=nf){let r=n.__SENTRY__=n.__SENTRY__||{},i=r[rf]=r[`10.43.0`]||{};return i[e]||(i[e]=t())}var cf=`Sentry Logger `,lf={};function uf(e){if(!(`console`in nf))return e();let t=nf.console,n={},r=Object.keys(lf);r.forEach(e=>{let r=lf[e];n[e]=t[e],t[e]=r});try{return e()}finally{r.forEach(e=>{t[e]=n[e]})}}function df(){vf().enabled=!0}function ff(){vf().enabled=!1}function pf(){return vf().enabled}function mf(...e){_f(`log`,...e)}function hf(...e){_f(`warn`,...e)}function gf(...e){_f(`error`,...e)}function _f(e,...t){tf&&pf()&&uf(()=>{nf.console[e](`${cf}[${e}]:`,...t)})}function vf(){return tf?sf(`loggerSettings`,()=>({enabled:!1})):{enabled:!1}}var yf={enable:df,disable:ff,isEnabled:pf,log:mf,warn:hf,error:gf},bf=Object.prototype.toString;function xf(e,t){return bf.call(e)===`[object ${t}]`}function Sf(e){return xf(e,`Object`)}function Cf(e){return!!(e?.then&&typeof e.then==`function`)}function wf(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0})}catch{tf&&yf.log(`Failed to add non-enumerable property "${t}" to object`,e)}}var Tf;function Ef(e){if(Tf!==void 0)return Tf?Tf(e):e();let t=Symbol.for(`__SENTRY_SAFE_RANDOM_ID_WRAPPER__`),n=nf;return t in n&&typeof n[t]==`function`?(Tf=n[t],Tf(e)):(Tf=null,e())}function Df(){return Ef(()=>Math.random())}function Of(){return Ef(()=>Date.now())}function kf(e,t=0){return typeof e!=`string`||t===0||e.length<=t?e:`${e.slice(0,t)}...`}function Af(){let e=nf;return e.crypto||e.msCrypto}var jf;function Mf(){return Df()*16}function Nf(e=Af()){try{if(e?.randomUUID)return Ef(()=>e.randomUUID()).replace(/-/g,``)}catch{}return jf||=`10000000100040008000100000000000`,jf.replace(/[018]/g,e=>(e^(Mf()&15)>>e/4).toString(16))}var Pf=1e3;function Ff(){return Of()/Pf}function If(){let{performance:e}=nf;if(!e?.now||!e.timeOrigin)return Ff;let t=e.timeOrigin;return()=>(t+Ef(()=>e.now()))/Pf}var Lf;function Rf(){return(Lf??=If())()}function zf(e,t={}){if(t.user&&(!e.ipAddress&&t.user.ip_address&&(e.ipAddress=t.user.ip_address),!e.did&&!t.did&&(e.did=t.user.id||t.user.email||t.user.username)),e.timestamp=t.timestamp||Rf(),t.abnormal_mechanism&&(e.abnormal_mechanism=t.abnormal_mechanism),t.ignoreDuration&&(e.ignoreDuration=t.ignoreDuration),t.sid&&(e.sid=t.sid.length===32?t.sid:Nf()),t.init!==void 0&&(e.init=t.init),!e.did&&t.did&&(e.did=`${t.did}`),typeof t.started==`number`&&(e.started=t.started),e.ignoreDuration)e.duration=void 0;else if(typeof t.duration==`number`)e.duration=t.duration;else{let t=e.timestamp-e.started;e.duration=t>=0?t:0}t.release&&(e.release=t.release),t.environment&&(e.environment=t.environment),!e.ipAddress&&t.ipAddress&&(e.ipAddress=t.ipAddress),!e.userAgent&&t.userAgent&&(e.userAgent=t.userAgent),typeof t.errors==`number`&&(e.errors=t.errors),t.status&&(e.status=t.status)}function Bf(e,t,n=2){if(!t||typeof t!=`object`||n<=0)return t;if(e&&Object.keys(t).length===0)return e;let r={...e};for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=Bf(r[e],t[e],n-1));return r}function Vf(){return Nf()}var Hf=`_sentrySpan`;function Uf(e,t){t?wf(e,Hf,t):delete e[Hf]}function Wf(e){return e[Hf]}var Gf=100,Kf=class e{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._attributes={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext={traceId:Vf(),sampleRand:Df()}}clone(){let t=new e;return t._breadcrumbs=[...this._breadcrumbs],t._tags={...this._tags},t._attributes={...this._attributes},t._extra={...this._extra},t._contexts={...this._contexts},this._contexts.flags&&(t._contexts.flags={values:[...this._contexts.flags.values]}),t._user=this._user,t._level=this._level,t._session=this._session,t._transactionName=this._transactionName,t._fingerprint=this._fingerprint,t._eventProcessors=[...this._eventProcessors],t._attachments=[...this._attachments],t._sdkProcessingMetadata={...this._sdkProcessingMetadata},t._propagationContext={...this._propagationContext},t._client=this._client,t._lastEventId=this._lastEventId,t._conversationId=this._conversationId,Uf(t,Wf(this)),t}setClient(e){this._client=e}setLastEventId(e){this._lastEventId=e}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&zf(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}setConversationId(e){return this._conversationId=e||void 0,this._notifyScopeListeners(),this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,t){return this.setTags({[e]:t})}setAttributes(e){return this._attributes={...this._attributes,...e},this._notifyScopeListeners(),this}setAttribute(e,t){return this.setAttributes({[e]:t})}removeAttribute(e){return e in this._attributes&&(delete this._attributes[e],this._notifyScopeListeners()),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,t){return this._extra={...this._extra,[e]:t},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,t){return t===null?delete this._contexts[e]:this._contexts[e]=t,this._notifyScopeListeners(),this}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(t){if(!t)return this;let n=typeof t==`function`?t(this):t,{tags:r,attributes:i,extra:a,user:o,contexts:s,level:c,fingerprint:l=[],propagationContext:u,conversationId:d}=(n instanceof e?n.getScopeData():Sf(n)?t:void 0)||{};return this._tags={...this._tags,...r},this._attributes={...this._attributes,...i},this._extra={...this._extra,...a},this._contexts={...this._contexts,...s},o&&Object.keys(o).length&&(this._user=o),c&&(this._level=c),l.length&&(this._fingerprint=l),u&&(this._propagationContext=u),d&&(this._conversationId=d),this}clear(){return this._breadcrumbs=[],this._tags={},this._attributes={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._session=void 0,this._conversationId=void 0,Uf(this,void 0),this._attachments=[],this.setPropagationContext({traceId:Vf(),sampleRand:Df()}),this._notifyScopeListeners(),this}addBreadcrumb(e,t){let n=typeof t==`number`?t:Gf;if(n<=0)return this;let r={timestamp:Ff(),...e,message:e.message?kf(e.message,2048):e.message};return this._breadcrumbs.push(r),this._breadcrumbs.length>n&&(this._breadcrumbs=this._breadcrumbs.slice(-n),this._client?.recordDroppedEvent(`buffer_overflow`,`log_item`)),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,attributes:this._attributes,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,span:Wf(this),conversationId:this._conversationId}}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata=Bf(this._sdkProcessingMetadata,e,2),this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,t){let n=t?.event_id||Nf();if(!this._client)return tf&&yf.warn(`No client configured on scope - will not capture exception!`),n;let r=Error(`Sentry syntheticException`);return this._client.captureException(e,{originalException:e,syntheticException:r,...t,event_id:n},this),n}captureMessage(e,t,n){let r=n?.event_id||Nf();if(!this._client)return tf&&yf.warn(`No client configured on scope - will not capture message!`),r;let i=n?.syntheticException??Error(e);return this._client.captureMessage(e,t,{originalException:e,syntheticException:i,...n,event_id:r},this),r}captureEvent(e,t){let n=e.event_id||t?.event_id||Nf();return this._client?(this._client.captureEvent(e,{...t,event_id:n},this),n):(tf&&yf.warn(`No client configured on scope - will not capture event!`),n)}_notifyScopeListeners(){this._notifyingListeners||=(this._notifyingListeners=!0,this._scopeListeners.forEach(e=>{e(this)}),!1)}};function qf(){return sf(`defaultCurrentScope`,()=>new Kf)}function Jf(){return sf(`defaultIsolationScope`,()=>new Kf)}var Yf=class{constructor(e,t){let n;n=e||new Kf;let r;r=t||new Kf,this._stack=[{scope:n}],this._isolationScope=r}withScope(e){let t=this._pushScope(),n;try{n=e(t)}catch(e){throw this._popScope(),e}return Cf(n)?n.then(e=>(this._popScope(),e),e=>{throw this._popScope(),e}):(this._popScope(),n)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){let e=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:e}),e}_popScope(){return this._stack.length<=1?!1:!!this._stack.pop()}};function Xf(){let e=of(af());return e.stack=e.stack||new Yf(qf(),Jf())}function Zf(e){return Xf().withScope(e)}function Qf(e,t){let n=Xf();return n.withScope(()=>(n.getStackTop().scope=e,t(e)))}function $f(e){return Xf().withScope(()=>e(Xf().getIsolationScope()))}function ep(){return{withIsolationScope:$f,withScope:Zf,withSetScope:Qf,withSetIsolationScope:(e,t)=>$f(t),getCurrentScope:()=>Xf().getScope(),getIsolationScope:()=>Xf().getIsolationScope()}}function tp(e){let t=of(e);return t.acs?t.acs:ep()}function np(){return tp(af()).getCurrentScope()}function rp(){return tp(af()).getIsolationScope()}function ip(e){if(e)return ap(e)||sp(e)?{captureContext:e}:e}function ap(e){return e instanceof Kf||typeof e==`function`}var op=[`user`,`level`,`extra`,`contexts`,`tags`,`fingerprint`,`propagationContext`];function sp(e){return Object.keys(e).some(e=>op.includes(e))}function cp(e,t){return np().captureException(e,ip(t))}function lp(e){rp().setUser(e)}var up=e=>{let t=e.getStore(ha);t.profile!==null&&lp({id:t.profile.id,email:t.profile.email??`unknown@user.com`})},dp=class extends Error{};dp.prototype.name=`InvalidTokenError`;function fp(e){return decodeURIComponent(atob(e).replace(/(.)/g,(e,t)=>{let n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n=`0`+n),`%`+n}))}function pp(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`);switch(t.length%4){case 0:break;case 2:t+=`==`;break;case 3:t+=`=`;break;default:throw Error(`base64 string is not of the correct length`)}try{return fp(t)}catch{return atob(t)}}function mp(e,t){if(typeof e!=`string`)throw new dp(`Invalid token specified: must be a string`);t||={};let n=t.header===!0?0:1,r=e.split(`.`)[n];if(typeof r!=`string`)throw new dp(`Invalid token specified: missing part #${n+1}`);let i;try{i=pp(r)}catch(e){throw new dp(`Invalid token specified: invalid base64 for part #${n+1} (${e.message})`)}try{return JSON.parse(i)}catch(e){throw new dp(`Invalid token specified: invalid json for part #${n+1} (${e.message})`)}}var hp=async(e,t)=>{let n=e.getStore(ha);try{await n.initialize()}catch(e){n.clear(),cp(e);return}if(n.accessToken()&&n.refreshToken()){let e=mp(n.accessToken()),r=mp(n.refreshToken());if(new Date().getTime()/1e3>=new Date(r.exp*1e3).getTime()/1e3){n.clear(),t.debug(`ROUTE GUARD: Refresh token is expired`);return}if(new Date().getTime()/1e3>=new Date(e.exp*1e3).getTime()/1e3)try{if(!await n.refresh()){n.clear(),t.debug(`ROUTE GUARD: Session refresh failed`);return}}catch(e){n.clear(),cp(e);return}if(n.profile===null)try{if(!await n.get()){n.clear(),t.debug(`ROUTE GUARD: User fetch failed`);return}}catch(e){n.clear(),cp(e)}}else if(n.refreshToken()!==null)try{if(!await n.refresh()){n.clear(),t.debug(`ROUTE GUARD: Session refresh failed`);return}}catch(e){n.clear(),cp(e)}else n.clear()},gp=[{path:`/sign`,name:ua.SIGN,component:()=>hr(()=>import(`./layout-sign-lJc9My5g.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),meta:{guards:[`anonymous`],title:`Sign`,icon:`mdi:user-key`},redirect:()=>({name:ua.SIGN_IN}),children:[{path:`in`,name:ua.SIGN_IN,component:()=>hr(()=>import(`./view-sign-in-CZRERL0Y.js`),__vite__mapDeps([10,3,2,4,11,5,6,12,9,13,14,15,16,17,18,19,20,21,22,23,24,25,26])),meta:{guards:[`anonymous`],title:`Sign in`,icon:`mdi:login`}},{path:`up`,name:ua.SIGN_UP,component:()=>hr(()=>import(`./view-sign-up-CrUHPweO.js`),__vite__mapDeps([27,3,2,4,11,5,6,12,9,13,14,15,16,17,18,19,20,21,22,23,24,25,26])),meta:{guards:[`anonymous`],title:`Sign up`,icon:`mdi:logout`}}]}],_p=[{path:`/lock`,name:ua.LOCK,component:()=>hr(()=>import(`./layout-lock-CoJt4ng5.js`),__vite__mapDeps([28,2,3,4,5,6,7,8])),meta:{title:`Lock screen`,icon:`mdi:lock`},redirect:()=>({name:ua.LOCK_SCREEN}),children:[{path:`screen`,name:ua.LOCK_SCREEN,component:()=>hr(()=>import(`./view-lock-screen-CvMhzPRT.js`),__vite__mapDeps([29,3,2,4,11,5,6,12,9,13,14,15,16,17,18,19,20,21,22,23,24,25,26])),meta:{title:`Lock screen`,icon:`mdi:lock`}}]}],vp=[{path:`profile`,name:ua.PROFILE,component:()=>hr(()=>import(`./layout-profile-BH6_ndbj.js`),__vite__mapDeps([30,31,2,3,4,5,6,32,17,15,21,33,9,25])),meta:{guards:[`authenticated`],title:`Your profile`,icon:`mdi:user`},redirect:()=>({name:ua.PROFILE_GENERAL}),children:[{path:`general`,name:ua.PROFILE_GENERAL,component:()=>hr(()=>import(`./view-profile-general-D_6x0Tyu.js`),__vite__mapDeps([34,2,3,4,11,5,6,7,9,13,14,15,16,17,18,19,20,21,22,23,24,25,26,35])),meta:{guards:[`authenticated`],title:`General settings`,icon:`mdi:user-edit`}},{path:`security`,name:ua.PROFILE_SECURITY,component:()=>hr(()=>import(`./view-profile-security-BgZi5Vkz.js`),__vite__mapDeps([36,2,3,4,11,5,6,7,9,13,14,15,16,17,18,19,20,21,22,23,24,25,26,35])),meta:{guards:[`authenticated`],title:`Security settings`,icon:`mdi:user-lock`}}]}],yp={"cs-CZ":{menu:{title:`Uživatelé`},meta:{users:{list:{title:`Seznam uživatelů`},edit:{title:`Upravit uživatele: {user}`},add:{title:`Přidat uživatele`}}},breadcrumbs:{users:`uživatelé`,addUser:`přidat uživatele`,editUser:`upravit uživatele`},headings:{users:`Uživatelé`,addUser:`Přidat uživatele`,editUser:`Upravit uživatele`,remove:`Odebrat uživatele?`,removeBulk:`Odebrat uživatele?`,discard:`Zahodit změny?`,changeUsername:`Změnit uživatelské jméno`,changePassword:`Změnit heslo`},subHeadings:{users:`Správa uživatelských účtů smart panelu`,addUser:`Přidat nového uživatele smart panelu`},messages:{requestError:`Něco se pokazilo, zkuste to prosím znovu později.`,created:`Nový uživatel byl úspěšně přidán.`,notCreated:`Něco se pokazilo. Uživatele se nepodařilo vytvořit.`,edited:`Změny uloženy! Uživatel: {user} byl aktualizován.`,notEdited:`Něco se pokazilo. Aktualizace uživatele nebyla úspěšná.`,notFound:`Uživatel, kterého hledáte, neexistuje nebo byl odebrán.`,removed:`Uživatel: {user} byl úspěšně odebrán.`,removeCanceled:`Odebrání uživatele: {user} bylo zrušeno.`,notRemoved:`Něco se pokazilo a uživatel: {user} nebyl odebrán.`,deletedWhileEditing:`Tento uživatel byl smazán a již není k dispozici.`,usernameEdited:`Uživatelské jméno bylo úspěšně aktualizováno.`,usernameNotEdited:`Nepodařilo se aktualizovat uživatelské jméno. Zkuste to prosím znovu.`,passwordEdited:`Heslo uživatele bylo úspěšně aktualizováno.`,passwordNotEdited:`Nepodařilo se aktualizovat heslo uživatele. Zkuste to prosím znovu.`,bulkRemoved:`{count} uživatel(ů) bylo odebráno.`,bulkRemoveFailed:`Nepodařilo se odebrat {count} uživatel(ů).`,bulkRemoveCanceled:`Hromadné odebrání uživatelů bylo zrušeno.`},texts:{confirmRemove:`Opravdu chcete odebrat uživatele: {user}? Tuto akci nelze vrátit zpět.`,confirmBulkRemove:`Opravdu chcete odebrat {count} uživatel(ů)? Tuto akci nelze vrátit zpět.`,misc:{noUsers:`Nemáte nakonfigurovaného žádného uživatele`,noFilteredUsers:`Nebyli nalezeni žádní uživatelé odpovídající aktivním kritériím filtru`,loadingUsers:`Načítání uživatelů...`,loadingUser:`Načítání uživatele...`,confirmDiscard:`Máte neuložené změny. Opravdu je chcete zahodit?`}},fields:{search:{placeholder:`Hledat uživatele...`},role:{title:`Role uživatele`,placeholder:`Vyberte roli`,validation:{required:`Vyberte prosím roli uživatele`},options:{user:`Uživatel`,admin:`Administrátor`,owner:`Vlastník`}},username:{title:`Uživatelské jméno`,validation:{required:`Vyplňte prosím své uživatelské jméno`}},newUsername:{title:`Nové uživatelské jméno`,validation:{required:`Vyplňte prosím nové uživatelské jméno`}},password:{title:`Heslo`,validation:{required:`Vyplňte prosím své heslo`}},repeatPassword:{title:`Potvrzení hesla`,validation:{required:`Potvrďte prosím své nové heslo`,different:`Hesla se neshodují`}},newPassword:{title:`Nové heslo`,validation:{required:`Vyplňte prosím nové heslo`}},newRepeatPassword:{title:`Potvrzení hesla`,validation:{required:`Potvrďte prosím nové heslo`,different:`Hesla se neshodují`}},email:{title:`E-mail`,placeholder:`např. jan{'@'}novak.cz`,validation:{email:`Zadejte prosím platnou e-mailovou adresu`}},firstName:{title:`Jméno`,placeholder:`např. Jan`},lastName:{title:`Příjmení`,placeholder:`např. Novák`}},table:{columns:{username:{title:`Uživatelské jméno`},firstName:{title:`Jméno`},lastName:{title:`Příjmení`},email:{title:`E-mail`},role:{title:`Role`}}},role:{user:`Uživatel`,admin:`Administrátor`,owner:`Vlastník`,display:`Displej`},buttons:{add:{title:`Přidat`},edit:{title:`Upravit`},detail:{title:`Detail`},discard:{title:`Zahodit`},cancel:{title:`Zrušit`},close:{title:`Zavřít`},save:{title:`Uložit`},change:{title:`Změnit`},remove:{title:`Odebrat`},resetFilters:{title:`Resetovat filtry`},yes:{title:`Ano`},no:{title:`Ne`}}},"de-DE":{menu:{title:`Benutzer`},meta:{users:{list:{title:`Benutzer auflisten`},edit:{title:`Benutzer bearbeiten: {user}`},add:{title:`Benutzer hinzufügen`}}},breadcrumbs:{users:`Benutzer`,addUser:`Benutzer hinzufügen`,editUser:`Benutzer bearbeiten`},headings:{users:`Benutzer`,addUser:`Benutzer hinzufügen`,editUser:`Benutzer bearbeiten`,remove:`Benutzer entfernen?`,removeBulk:`Benutzer entfernen?`,discard:`Änderungen verwerfen?`,changeUsername:`Benutzernamen ändern`,changePassword:`Passwort ändern`},subHeadings:{users:`Smart Panel Benutzerkonten verwalten`,addUser:`Neuen Smart Panel Benutzer hinzufügen`},messages:{requestError:`Etwas ist schiefgelaufen, bitte versuchen Sie es später erneut.`,created:`Neuer Benutzer erfolgreich hinzugefügt.`,notCreated:`Etwas ist schiefgelaufen. Der Benutzer konnte nicht erstellt werden.`,edited:`Änderungen gespeichert! Der Benutzer: {user} wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Benutzeraktualisierung war nicht erfolgreich.`,notFound:`Der gesuchte Benutzer existiert nicht oder wurde entfernt.`,removed:`Der Benutzer: {user} wurde erfolgreich entfernt.`,removeCanceled:`Entfernung von Benutzer: {user} wurde abgebrochen.`,notRemoved:`Etwas ist schiefgelaufen, der Benutzer: {user} wurde nicht entfernt.`,deletedWhileEditing:`Dieser Benutzer wurde gelöscht und ist nicht mehr verfügbar.`,usernameEdited:`Benutzername wurde erfolgreich aktualisiert.`,usernameNotEdited:`Aktualisierung des Benutzernamens fehlgeschlagen. Bitte versuchen Sie es erneut.`,passwordEdited:`Benutzerpasswort wurde erfolgreich aktualisiert.`,passwordNotEdited:`Änderung des Benutzerpassworts fehlgeschlagen. Bitte versuchen Sie es erneut.`,bulkRemoved:`{count} Benutzer wurden entfernt.`,bulkRemoveFailed:`Entfernung von {count} Benutzern fehlgeschlagen.`,bulkRemoveCanceled:`Massenentfernung von Benutzern wurde abgebrochen.`},texts:{confirmRemove:`Sind Sie sicher, dass Sie den Benutzer: {user} entfernen möchten? Dies kann nicht rückgängig gemacht werden.`,confirmBulkRemove:`Sind Sie sicher, dass Sie {count} Benutzer entfernen möchten? Diese Aktion kann nicht rückgängig gemacht werden.`,misc:{noUsers:`Sie haben noch keine Benutzer konfiguriert`,noFilteredUsers:`Keine Benutzer gefunden, die den aktiven Filterkriterien entsprechen`,loadingUsers:`Benutzer werden geladen...`,loadingUser:`Benutzer wird geladen...`,confirmDiscard:`Sie haben ungespeicherte Änderungen. Möchten Sie diese wirklich verwerfen?`}},fields:{search:{placeholder:`Benutzer suchen...`},role:{title:`Benutzerrolle`,placeholder:`Rolle auswählen`,validation:{required:`Bitte wählen Sie eine Benutzerrolle`},options:{user:`Benutzer`,admin:`Administrator`,owner:`Besitzer`}},username:{title:`Benutzername`,validation:{required:`Bitte geben Sie Ihren Benutzernamen ein`}},newUsername:{title:`Neuer Benutzername`,validation:{required:`Bitte geben Sie den neuen Benutzernamen ein`}},password:{title:`Passwort`,validation:{required:`Bitte geben Sie Ihr Passwort ein`}},repeatPassword:{title:`Passwort bestätigen`,validation:{required:`Bitte bestätigen Sie Ihr neues Passwort`,different:`Passwörter stimmen nicht überein`}},newPassword:{title:`Neues Passwort`,validation:{required:`Bitte geben Sie ein neues Passwort ein`}},newRepeatPassword:{title:`Passwort bestätigen`,validation:{required:`Bitte bestätigen Sie das neue Passwort`,different:`Passwörter stimmen nicht überein`}},email:{title:`E-Mail`,placeholder:`z.B. max{'@'}mustermann.de`,validation:{email:`Bitte geben Sie eine gültige E-Mail-Adresse ein`}},firstName:{title:`Vorname`,placeholder:`z.B. Max`},lastName:{title:`Nachname`,placeholder:`z.B. Mustermann`}},table:{columns:{username:{title:`Benutzername`},firstName:{title:`Vorname`},lastName:{title:`Nachname`},email:{title:`E-Mail`},role:{title:`Rolle`}}},role:{user:`Benutzer`,admin:`Administrator`,owner:`Besitzer`,display:`Anzeige`},buttons:{add:{title:`Hinzufügen`},edit:{title:`Bearbeiten`},detail:{title:`Details`},discard:{title:`Verwerfen`},cancel:{title:`Abbrechen`},close:{title:`Schließen`},save:{title:`Speichern`},change:{title:`Ändern`},remove:{title:`Entfernen`},resetFilters:{title:`Filter zurücksetzen`},yes:{title:`Ja`},no:{title:`Nein`}}},"en-US":{menu:{title:`Users`},meta:{users:{list:{title:`List users`},edit:{title:`Edit user: {user}`},add:{title:`Add user`}}},breadcrumbs:{users:`users`,addUser:`add user`,editUser:`edit user`},headings:{users:`Users`,addUser:`Add user`,editUser:`Edit user`,remove:`Remove user?`,removeBulk:`Remove users?`,discard:`Discard changes?`,changeUsername:`Change username`,changePassword:`Change password`},subHeadings:{users:`Manage smart panel user accounts`,addUser:`Add new smart panel user`},messages:{requestError:`Something went wrong, please try again later.`,created:`New user added successfully.`,notCreated:`Something went wrong. Unable to create the user.`,edited:`Changes saved! The user: {user} has been updated.`,notEdited:`Something went wrong. User update was not successful.`,notFound:`The user you are looking for doesn’t exist or may have been removed.`,removed:`The user: {user} was successfully removed.`,removeCanceled:`User: {user} removal has been canceled.`,notRemoved:`Something went wrong, and the user: {user} was not removed.`,deletedWhileEditing:`This user was deleted and is no longer available.`,usernameEdited:`User username has been successfully updated.`,usernameNotEdited:`Failed to update user username. Please try again.`,passwordEdited:`User password has been successfully updated.`,passwordNotEdited:`Failed to update user password. Please try again.`,bulkRemoved:`{count} user(s) have been removed.`,bulkRemoveFailed:`Failed to remove {count} user(s).`,bulkRemoveCanceled:`Bulk user removal has been canceled.`},texts:{confirmRemove:`Are you sure you want to remove user: {user}? This cannot be reversed.`,confirmBulkRemove:`Are you sure you want to remove {count} user(s)? This action cannot be undone.`,misc:{noUsers:`You don't have configured any user`,noFilteredUsers:`No users found matching the active filter criteria`,loadingUsers:`Loading users...`,loadingUser:`Loading user...`,confirmDiscard:`You have unsaved changes. Are you sure you want to discard them?`}},fields:{search:{placeholder:`Search users...`},role:{title:`User role`,placeholder:`Select role`,validation:{required:`Please select user role`},options:{user:`User`,admin:`Admin`,owner:`Owner`}},username:{title:`Username`,validation:{required:`Please fill in your username`}},newUsername:{title:`New username`,validation:{required:`Please fill in new username`}},password:{title:`Password`,validation:{required:`Please fill in your password`}},repeatPassword:{title:`Confirm password`,validation:{required:`Please confirm your new password`,different:`Passwords are not same`}},newPassword:{title:`New password`,validation:{required:`Please fill in new password`}},newRepeatPassword:{title:`Confirm password`,validation:{required:`Please confirm new password`,different:`Passwords are not same`}},email:{title:`Email`,placeholder:`eg. john{'@'}doe.com`,validation:{email:`Please provide valid email address`}},firstName:{title:`First name`,placeholder:`eg. John`},lastName:{title:`Last name`,placeholder:`eg. Doe`}},table:{columns:{username:{title:`Username`},firstName:{title:`First name`},lastName:{title:`Last name`},email:{title:`Email`},role:{title:`Role`}}},role:{user:`User`,admin:`Admin`,owner:`Owner`,display:`Display`},buttons:{add:{title:`Add`},edit:{title:`Edit`},detail:{title:`Detail`},discard:{title:`Discard`},cancel:{title:`Cancel`},close:{title:`Close`},save:{title:`Save`},change:{title:`Change`},remove:{title:`Remove`},resetFilters:{title:`Reset filters`},yes:{title:`Yes`},no:{title:`No`}}},"es-ES":{menu:{title:`Usuarios`},meta:{users:{list:{title:`Listar usuarios`},edit:{title:`Editar usuario: {user}`},add:{title:`Añadir usuario`}}},breadcrumbs:{users:`usuarios`,addUser:`añadir usuario`,editUser:`editar usuario`},headings:{users:`Usuarios`,addUser:`Añadir usuario`,editUser:`Editar usuario`,remove:`¿Eliminar usuario?`,removeBulk:`¿Eliminar usuarios?`,discard:`¿Descartar cambios?`,changeUsername:`Cambiar nombre de usuario`,changePassword:`Cambiar contraseña`},subHeadings:{users:`Gestionar cuentas de usuario del panel inteligente`,addUser:`Añadir nuevo usuario del panel inteligente`},messages:{requestError:`Algo salió mal, por favor inténtalo de nuevo más tarde.`,created:`Nuevo usuario añadido correctamente.`,notCreated:`Algo salió mal. No se pudo crear el usuario.`,edited:`¡Cambios guardados! El usuario: {user} ha sido actualizado.`,notEdited:`Algo salió mal. La actualización del usuario no fue exitosa.`,notFound:`El usuario que buscas no existe o puede haber sido eliminado.`,removed:`El usuario: {user} fue eliminado correctamente.`,removeCanceled:`La eliminación del usuario: {user} ha sido cancelada.`,notRemoved:`Algo salió mal y el usuario: {user} no fue eliminado.`,deletedWhileEditing:`Este usuario fue eliminado y ya no está disponible.`,usernameEdited:`El nombre de usuario ha sido actualizado correctamente.`,usernameNotEdited:`Error al actualizar el nombre de usuario. Por favor, inténtalo de nuevo.`,passwordEdited:`La contraseña del usuario ha sido actualizada correctamente.`,passwordNotEdited:`Error al actualizar la contraseña del usuario. Por favor, inténtalo de nuevo.`,bulkRemoved:`{count} usuario(s) han sido eliminados.`,bulkRemoveFailed:`Error al eliminar {count} usuario(s).`,bulkRemoveCanceled:`La eliminación masiva de usuarios ha sido cancelada.`},texts:{confirmRemove:`¿Estás seguro de que deseas eliminar al usuario: {user}? Esto no se puede revertir.`,confirmBulkRemove:`¿Estás seguro de que deseas eliminar {count} usuario(s)? Esta acción no se puede deshacer.`,misc:{noUsers:`No tienes ningún usuario configurado`,noFilteredUsers:`No se encontraron usuarios que coincidan con los criterios de filtro activos`,loadingUsers:`Cargando usuarios...`,loadingUser:`Cargando usuario...`,confirmDiscard:`Tienes cambios sin guardar. ¿Estás seguro de que deseas descartarlos?`}},fields:{search:{placeholder:`Buscar usuarios...`},role:{title:`Rol del usuario`,placeholder:`Seleccionar rol`,validation:{required:`Por favor selecciona el rol del usuario`},options:{user:`Usuario`,admin:`Administrador`,owner:`Propietario`}},username:{title:`Nombre de usuario`,validation:{required:`Por favor introduce tu nombre de usuario`}},newUsername:{title:`Nuevo nombre de usuario`,validation:{required:`Por favor introduce el nuevo nombre de usuario`}},password:{title:`Contraseña`,validation:{required:`Por favor introduce tu contraseña`}},repeatPassword:{title:`Confirmar contraseña`,validation:{required:`Por favor confirma tu nueva contraseña`,different:`Las contraseñas no coinciden`}},newPassword:{title:`Nueva contraseña`,validation:{required:`Por favor introduce la nueva contraseña`}},newRepeatPassword:{title:`Confirmar contraseña`,validation:{required:`Por favor confirma la nueva contraseña`,different:`Las contraseñas no coinciden`}},email:{title:`Correo electrónico`,placeholder:`ej. juan{'@'}ejemplo.com`,validation:{email:`Por favor proporciona una dirección de correo electrónico válida`}},firstName:{title:`Nombre`,placeholder:`ej. Juan`},lastName:{title:`Apellido`,placeholder:`ej. García`}},table:{columns:{username:{title:`Nombre de usuario`},firstName:{title:`Nombre`},lastName:{title:`Apellido`},email:{title:`Correo electrónico`},role:{title:`Rol`}}},role:{user:`Usuario`,admin:`Administrador`,owner:`Propietario`,display:`Pantalla`},buttons:{add:{title:`Añadir`},edit:{title:`Editar`},detail:{title:`Detalle`},discard:{title:`Descartar`},cancel:{title:`Cancelar`},close:{title:`Cerrar`},save:{title:`Guardar`},change:{title:`Cambiar`},remove:{title:`Eliminar`},resetFilters:{title:`Restablecer filtros`},yes:{title:`Sí`},no:{title:`No`}}},"pl-PL":{menu:{title:`Użytkownicy`},meta:{users:{list:{title:`Lista użytkowników`},edit:{title:`Edytuj użytkownika: {user}`},add:{title:`Dodaj użytkownika`}}},breadcrumbs:{users:`użytkownicy`,addUser:`dodaj użytkownika`,editUser:`edytuj użytkownika`},headings:{users:`Użytkownicy`,addUser:`Dodaj użytkownika`,editUser:`Edytuj użytkownika`,remove:`Usunąć użytkownika?`,removeBulk:`Usunąć użytkowników?`,discard:`Odrzucić zmiany?`,changeUsername:`Zmień nazwę użytkownika`,changePassword:`Zmień hasło`},subHeadings:{users:`Zarządzaj kontami użytkowników smart panelu`,addUser:`Dodaj nowego użytkownika smart panelu`},messages:{requestError:`Coś poszło nie tak, spróbuj ponownie później.`,created:`Nowy użytkownik został pomyślnie dodany.`,notCreated:`Coś poszło nie tak. Nie udało się utworzyć użytkownika.`,edited:`Zmiany zapisane! Użytkownik: {user} został zaktualizowany.`,notEdited:`Coś poszło nie tak. Aktualizacja użytkownika nie powiodła się.`,notFound:`Użytkownik, którego szukasz, nie istnieje lub mógł zostać usunięty.`,removed:`Użytkownik: {user} został pomyślnie usunięty.`,removeCanceled:`Usunięcie użytkownika: {user} zostało anulowane.`,notRemoved:`Coś poszło nie tak i użytkownik: {user} nie został usunięty.`,deletedWhileEditing:`Ten użytkownik został usunięty i nie jest już dostępny.`,usernameEdited:`Nazwa użytkownika została pomyślnie zaktualizowana.`,usernameNotEdited:`Nie udało się zaktualizować nazwy użytkownika. Spróbuj ponownie.`,passwordEdited:`Hasło użytkownika zostało pomyślnie zaktualizowane.`,passwordNotEdited:`Nie udało się zmienić hasła użytkownika. Spróbuj ponownie.`,bulkRemoved:`Usunięto {count} użytkowników.`,bulkRemoveFailed:`Nie udało się usunąć {count} użytkowników.`,bulkRemoveCanceled:`Masowe usuwanie użytkowników zostało anulowane.`},texts:{confirmRemove:`Czy na pewno chcesz usunąć użytkownika: {user}? Tej operacji nie można cofnąć.`,confirmBulkRemove:`Czy na pewno chcesz usunąć {count} użytkowników? Tej operacji nie można cofnąć.`,misc:{noUsers:`Nie masz skonfigurowanych żadnych użytkowników`,noFilteredUsers:`Nie znaleziono użytkowników pasujących do aktywnych kryteriów filtra`,loadingUsers:`Ładowanie użytkowników...`,loadingUser:`Ładowanie użytkownika...`,confirmDiscard:`Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?`}},fields:{search:{placeholder:`Szukaj użytkowników...`},role:{title:`Rola użytkownika`,placeholder:`Wybierz rolę`,validation:{required:`Proszę wybrać rolę użytkownika`},options:{user:`Użytkownik`,admin:`Administrator`,owner:`Właściciel`}},username:{title:`Nazwa użytkownika`,validation:{required:`Proszę podać nazwę użytkownika`}},newUsername:{title:`Nowa nazwa użytkownika`,validation:{required:`Proszę podać nową nazwę użytkownika`}},password:{title:`Hasło`,validation:{required:`Proszę podać hasło`}},repeatPassword:{title:`Potwierdź hasło`,validation:{required:`Proszę potwierdzić nowe hasło`,different:`Hasła nie są identyczne`}},newPassword:{title:`Nowe hasło`,validation:{required:`Proszę podać nowe hasło`}},newRepeatPassword:{title:`Potwierdź hasło`,validation:{required:`Proszę potwierdzić nowe hasło`,different:`Hasła nie są identyczne`}},email:{title:`E-mail`,placeholder:`np. jan{'@'}kowalski.pl`,validation:{email:`Proszę podać prawidłowy adres e-mail`}},firstName:{title:`Imię`,placeholder:`np. Jan`},lastName:{title:`Nazwisko`,placeholder:`np. Kowalski`}},table:{columns:{username:{title:`Nazwa użytkownika`},firstName:{title:`Imię`},lastName:{title:`Nazwisko`},email:{title:`E-mail`},role:{title:`Rola`}}},role:{user:`Użytkownik`,admin:`Administrator`,owner:`Właściciel`,display:`Wyświetlacz`},buttons:{add:{title:`Dodaj`},edit:{title:`Edytuj`},detail:{title:`Szczegóły`},discard:{title:`Odrzuć`},cancel:{title:`Anuluj`},close:{title:`Zamknij`},save:{title:`Zapisz`},change:{title:`Zmień`},remove:{title:`Usuń`},resetFilters:{title:`Resetuj filtry`},yes:{title:`Tak`},no:{title:`Nie`}}},"sk-SK":{menu:{title:`Používatelia`},meta:{users:{list:{title:`Zoznam používateľov`},edit:{title:`Upraviť používateľa: {user}`},add:{title:`Pridať používateľa`}}},breadcrumbs:{users:`používatelia`,addUser:`pridať používateľa`,editUser:`upraviť používateľa`},headings:{users:`Používatelia`,addUser:`Pridať používateľa`,editUser:`Upraviť používateľa`,remove:`Odstrániť používateľa?`,removeBulk:`Odstrániť používateľov?`,discard:`Zahodiť zmeny?`,changeUsername:`Zmeniť používateľské meno`,changePassword:`Zmeniť heslo`},subHeadings:{users:`Spravujte používateľské účty smart panelu`,addUser:`Pridať nového používateľa smart panelu`},messages:{requestError:`Niečo sa pokazilo, skúste to prosím neskôr.`,created:`Nový používateľ bol úspešne pridaný.`,notCreated:`Niečo sa pokazilo. Nepodarilo sa vytvoriť používateľa.`,edited:`Zmeny uložené! Používateľ: {user} bol aktualizovaný.`,notEdited:`Niečo sa pokazilo. Aktualizácia používateľa nebola úspešná.`,notFound:`Používateľ, ktorého hľadáte, neexistuje alebo bol odstránený.`,removed:`Používateľ: {user} bol úspešne odstránený.`,removeCanceled:`Odstránenie používateľa: {user} bolo zrušené.`,notRemoved:`Niečo sa pokazilo a používateľ: {user} nebol odstránený.`,deletedWhileEditing:`Tento používateľ bol odstránený a už nie je dostupný.`,usernameEdited:`Používateľské meno bolo úspešne aktualizované.`,usernameNotEdited:`Nepodarilo sa aktualizovať používateľské meno. Skúste to prosím znova.`,passwordEdited:`Heslo používateľa bolo úspešne aktualizované.`,passwordNotEdited:`Nepodarilo sa aktualizovať heslo používateľa. Skúste to prosím znova.`,bulkRemoved:`{count} používateľov bolo odstránených.`,bulkRemoveFailed:`Nepodarilo sa odstrániť {count} používateľov.`,bulkRemoveCanceled:`Hromadné odstránenie používateľov bolo zrušené.`},texts:{confirmRemove:`Naozaj chcete odstrániť používateľa: {user}? Toto sa nedá vrátiť.`,confirmBulkRemove:`Naozaj chcete odstrániť {count} používateľov? Túto akciu nie je možné vrátiť.`,misc:{noUsers:`Nemáte nakonfigurovaného žiadneho používateľa`,noFilteredUsers:`Neboli nájdení žiadni používatelia zodpovedajúci aktívnym filtrom`,loadingUsers:`Načítavanie používateľov...`,loadingUser:`Načítavanie používateľa...`,confirmDiscard:`Máte neuložené zmeny. Naozaj ich chcete zahodiť?`}},fields:{search:{placeholder:`Vyhľadať používateľov...`},role:{title:`Rola používateľa`,placeholder:`Vyberte rolu`,validation:{required:`Prosím vyberte rolu používateľa`},options:{user:`Používateľ`,admin:`Administrátor`,owner:`Vlastník`}},username:{title:`Používateľské meno`,validation:{required:`Prosím vyplňte svoje používateľské meno`}},newUsername:{title:`Nové používateľské meno`,validation:{required:`Prosím vyplňte nové používateľské meno`}},password:{title:`Heslo`,validation:{required:`Prosím vyplňte svoje heslo`}},repeatPassword:{title:`Potvrdiť heslo`,validation:{required:`Prosím potvrďte svoje nové heslo`,different:`Heslá sa nezhodujú`}},newPassword:{title:`Nové heslo`,validation:{required:`Prosím vyplňte nové heslo`}},newRepeatPassword:{title:`Potvrdiť heslo`,validation:{required:`Prosím potvrďte nové heslo`,different:`Heslá sa nezhodujú`}},email:{title:`Email`,placeholder:`napr. jan{'@'}novak.sk`,validation:{email:`Prosím zadajte platnú emailovú adresu`}},firstName:{title:`Meno`,placeholder:`napr. Ján`},lastName:{title:`Priezvisko`,placeholder:`napr. Novák`}},table:{columns:{username:{title:`Používateľské meno`},firstName:{title:`Meno`},lastName:{title:`Priezvisko`},email:{title:`Email`},role:{title:`Rola`}}},role:{user:`Používateľ`,admin:`Administrátor`,owner:`Vlastník`,display:`Displej`},buttons:{add:{title:`Pridať`},edit:{title:`Upraviť`},detail:{title:`Detail`},discard:{title:`Zahodiť`},cancel:{title:`Zrušiť`},close:{title:`Zavrieť`},save:{title:`Uložiť`},change:{title:`Zmeniť`},remove:{title:`Odstrániť`},resetFilters:{title:`Resetovať filtre`},yes:{title:`Áno`},no:{title:`Nie`}}}},bp=(e,t)=>{let n=t.meta&&`guards`in t.meta?t.meta.guards:[];return n&&typeof n==`object`&&`roles`in n&&Array.isArray(n.roles)&&n.roles.length>0?e!==void 0&&n.roles.includes(e.role)?!0:{name:Te.ROOT}:!0},xp=[{path:`users`,name:Sa.USERS,component:()=>hr(()=>import(`./view-users-DKrdtOjY.js`),__vite__mapDeps([37,2,3,4,11,5,6,38,23,39,40,35,25,26,9,41,14,15,16,17,18,20,21,7,8,42,24])),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`usersModule.menu.title`),icon:`mdi:users-group`,menu:1e3},children:[{path:`add`,name:Sa.USER_ADD,component:()=>hr(()=>import(`./view-user-add-MWHxy3nf.js`),__vite__mapDeps([43,2,3,4,11,5,6,44,39,40,45,18,15,20,21,22,23,35,25,26,9,41,14,16,17,7,8,42,24])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]}}},{path:`:id`,name:Sa.USER_EDIT,component:()=>hr(()=>import(`./view-user-edit-BJeiBIOb.js`),__vite__mapDeps([46,2,3,4,11,5,6,24,44,39,40,45,18,15,20,21,22,23,35,25,26,9,41,14,16,17,7,8,42])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]}}}]}],Sp=X().uuid(),Cp=K({id:Sp,draft:J().default(!1),isHidden:J().default(!1),username:X().trim().nonempty(),password:X().trim().optional(),email:X().email().nullable().default(null),firstName:X().nullable().default(null),lastName:X().nullable().default(null),role:G(H).default(H.user),language:G(tt).nullable().default(null),createdAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)});K({fetching:K({items:J().default(!1),item:W(Sp)}),creating:W(Sp),updating:W(Sp),deleting:W(Sp)}),K({id:Sp,data:Sn({})}),K({id:Sp,data:K({username:X().trim().nonempty(),email:X().email().trim().transform(e=>e===``?null:e).nullable(),firstName:X().trim().transform(e=>e===``?null:e).nullable(),lastName:X().trim().transform(e=>e===``?null:e).nullable(),role:G(H).default(H.user),language:G(tt).nullable().optional()})}),K({id:Sp}),K({id:Sp});var wp=K({id:Sp.optional().default(cn()),draft:J().optional().default(!1),data:K({username:X().trim().nonempty(),password:X().trim().nonempty(),email:X().email().trim().transform(e=>e===``?null:e).nullable().optional(),firstName:X().trim().transform(e=>e===``?null:e).nullable().optional(),lastName:X().trim().transform(e=>e===``?null:e).nullable().optional(),role:G(H).default(H.user),language:G(tt).nullable().optional()})}),Tp=K({id:Sp,data:K({username:X().trim().optional(),password:X().trim().optional(),email:X().email().trim().transform(e=>e===``?null:e).nullable().optional(),firstName:X().trim().transform(e=>e===``?null:e).nullable().optional(),lastName:X().trim().transform(e=>e===``?null:e).nullable().optional(),role:G(H).optional(),language:G(tt).nullable().optional()})});K({id:Sp}),K({ids:W(Sp).nonempty()});var Ep=K({succeeded:W(X()),failed:W(K({id:X(),reason:X()}))});K({id:Sp});var Dp=K({id:X().uuid().optional(),username:X().trim().nonempty(),password:X().trim().nonempty(),email:X().email().trim().transform(e=>e===``?null:e).nullable().optional(),first_name:X().trim().transform(e=>e===``?null:e).nullable().optional(),last_name:X().trim().transform(e=>e===``?null:e).nullable().optional(),role:G(H).optional(),language:G(tt).optional()}),Op=K({username:X().trim().nonempty().optional(),password:X().trim().nonempty().optional(),email:X().email().trim().transform(e=>e===``?null:e).nullable().optional(),first_name:X().trim().transform(e=>e===``?null:e).nullable().optional(),last_name:X().trim().transform(e=>e===``?null:e).nullable().optional(),role:G(H).optional(),language:G(tt).optional()});K({id:X().uuid(),username:X().trim().nonempty(),email:X().email().trim().nullable(),first_name:X().trim().nullable(),last_name:X().trim().nullable(),is_hidden:J(),role:G(H),language:G(tt).nullable(),created_at:X(),updated_at:X().nullable().optional()});var kp=e=>{let t=Cp.safeParse({id:e.id,username:e.username,email:e.email,firstName:e.first_name,lastName:e.last_name,isHidden:e.is_hidden,role:e.role,language:e.language??null,createdAt:e.created_at,updatedAt:e.updated_at});if(!t.success)throw new Ca(`Failed to validate received user data.`);return t.data},Ap=e=>{let t=Dp.safeParse({id:e.id,username:e.username,password:e.password,email:e.email,first_name:e.firstName,last_name:e.lastName,role:e.role,language:e.language??void 0});if(!t.success)throw new Ca(`Failed to validate create user request.`);return t.data},jp=e=>{let t=Op.safeParse({username:e.username,password:e.password,email:e.email,first_name:e.firstName,last_name:e.lastName,role:e.role,language:e.language??void 0});if(!t.success)throw new Ca(`Failed to validate update user request.`);return t.data},Mp={fetching:{items:!1,item:[]},creating:[],updating:[],deleting:[]},Np=jn(`users_module-users`,()=>{let e=Zn(),t=On(),n=j(Mp),r=j(!1),i=j({}),a=()=>r.value,o=e=>n.value.fetching.item.includes(e),s=()=>n.value.fetching.items,c=()=>Object.values(i.value),l=e=>i.value[e]??null,u=e=>d({id:e.id,data:kp(e.data)}),d=e=>{if(e.id&&i.value&&e.id in i.value){let n=Cp.safeParse({...i.value[e.id],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new Ca(`Failed to insert user.`);return i.value[n.data.id]=n.data}let n=Cp.safeParse({...e.data,id:e.id});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new Ca(`Failed to insert user.`);return i.value=i.value??{},i.value[n.data.id]=n.data},f=e=>{i.value&&delete i.value[e.id]},p=async t=>{if(n.value.fetching.item.includes(t.id))throw new _a(`Already fetching user.`);n.value.fetching.item.push(t.id);try{let{data:n,error:r,response:a}=await e.client.GET(`/${je}/${ga}/users/{id}`,{params:{path:{id:t.id}}});if(n!==void 0){let e=kp(n.data);return i.value[e.id]=e,e}let o=`Failed to fetch user.`;throw r&&(o=Kn(r,o)),new _a(o,a.status)}finally{n.value.fetching.item=n.value.fetching.item.filter(e=>e!==t.id)}},m=async()=>{if(n.value.fetching.items)throw new _a(`Already fetching users.`);n.value.fetching.items=!0;try{let{data:t,error:n,response:a}=await e.client.GET(`/${je}/${ga}/users`);if(t!==void 0)return i.value=Object.fromEntries(t.data.map(e=>{let t=kp(e);return[t.id,t]})),r.value=!0,Object.values(i.value);let o=`Failed to fetch users.`;throw n&&(o=Kn(n,o)),new _a(o,a.status)}finally{n.value.fetching.items=!1}};return{isLoaded:()=>a()||c().length>0,refresh:()=>m(),semaphore:n,firstLoad:r,data:i,firstLoadFinished:a,getting:o,fetching:s,findAll:c,findById:l,onEvent:u,set:d,unset:f,get:p,fetch:m,add:async r=>{let a=wp.safeParse(r);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new Ca(`Failed to add user.`);let o=Cp.safeParse({...a.data.data,id:a.data.id,draft:a.data.draft,createdAt:new Date});if(!o.success)throw t.error(`Schema validation failed with:`,o.error),new Ca(`Failed to add user.`);if(n.value.creating.push(o.data.id),i.value[o.data.id]=o.data,o.data.draft)return n.value.creating=n.value.creating.filter(e=>e!==o.data.id),o.data;{let t=o.data.password;if(t===void 0)throw new Ca(`Failed to add user.`);try{let{data:n,error:a,response:s}=await e.client.POST(`/${je}/${ga}/users`,{body:{data:Ap({...o.data,id:r.id,password:t})}});if(n!==void 0&&n.data.id===r.id){let e=kp(n.data);return i.value[e.id]=e,e}delete i.value[o.data.id];let c=`Failed to create user.`;throw a&&(c=Kn(a,c)),new _a(c,s.status)}finally{n.value.creating=n.value.creating.filter(e=>e!==o.data.id)}}},edit:async r=>{let a=Tp.safeParse(r);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new Ca(`Failed to edit user.`);if(n.value.updating.includes(r.id))throw new xa(`User is already being updated.`);if(!(r.id in i.value))throw new xa(`Failed to get user data to update.`);let o=Cp.safeParse({...i.value[r.id],...(0,Xd.omitBy)(a.data.data,Xd.isUndefined)});if(!o.success)throw t.error(`Schema validation failed with:`,o.error),new Ca(`Failed to edit user.`);if(n.value.updating.push(r.id),i.value[o.data.id]=o.data,o.data.draft)return n.value.updating=n.value.updating.filter(e=>e!==o.data.id),o.data;try{let{data:t,error:n,response:a}=await e.client.PATCH(`/${je}/${ga}/users/{id}`,{params:{path:{id:r.id}},body:{data:jp(o.data)}});if(t!==void 0){let e=kp(t.data);return i.value[e.id]=e,e}await p({id:r.id});let s=`Failed to update user.`;throw n&&(s=Kn(n,s)),new _a(s,a.status)}finally{n.value.updating=n.value.updating.filter(e=>e!==r.id)}},save:async r=>{if(n.value.updating.includes(r.id))throw new xa(`User is already being saved.`);if(!(r.id in i.value))throw new xa(`Failed to get user data to save.`);let a=Cp.safeParse(i.value[r.id]);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new Ca(`Failed to save user.`);n.value.updating.push(r.id);let o=a.data.password;if(o===void 0)throw new Ca(`Failed to add user.`);try{let{data:t,error:n,response:s}=await e.client.POST(`/${je}/${ga}/users`,{body:{data:Ap({...a.data,id:r.id,password:o})}});if(t!==void 0&&t.data.id===r.id){let e=kp(t.data);return i.value[e.id]=e,e}let c=`Failed to create user.`;throw n&&(c=Kn(n,c)),new _a(c,s.status)}finally{n.value.updating=n.value.updating.filter(e=>e!==r.id)}},remove:async t=>{if(n.value.deleting.includes(t.id))throw new xa(`User is already being removed.`);if(!Object.keys(i.value).includes(t.id))return!0;n.value.deleting.push(t.id);let r=i.value[t.id];if(delete i.value[t.id],r?.draft)n.value.deleting=n.value.deleting.filter(e=>e!==t.id);else try{let{error:n,response:r}=await e.client.DELETE(`/${je}/${ga}/users/{id}`,{params:{path:{id:t.id}}});if(r.status===204)return!0;await p({id:t.id});let i=`Remove account failed.`;throw n&&(i=Kn(n,i)),new _a(i,r.status)}finally{n.value.deleting=n.value.deleting.filter(e=>e!==t.id)}return!0},bulkRemove:async t=>{let r=[],a=[];for(let e of t.ids){let t=i.value[e];t!==void 0&&(t.draft?r:a).push(e)}for(let e of r)f({id:e});if(a.length===0)return{succeeded:r,failed:[]};n.value.deleting.push(...a);try{let{data:t,error:n}=await e.client.POST(`/${je}/${ga}/users/bulk-remove`,{body:{data:{ids:a}}});if(n!==void 0||t===void 0)throw new _a(`Received unexpected response.`);let i=Ep.parse(t.data);for(let e of i.succeeded)f({id:e});return{succeeded:[...r,...i.succeeded],failed:i.failed}}catch(e){throw new _a(`Failed to remove users.`,null,e)}finally{n.value.deleting=n.value.deleting.filter(e=>!a.includes(e))}}}}),Pp=e=>Np(e),Fp=Symbol(`FB-Module-Users`),Ip={install:(e,t)=>{let n=pn(e),r=fn(e),i=ut(e),a=_r(e),o=ea(e),s=Hi(e);for(let[e,n]of Object.entries(yp)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{usersModule:n});t.i18n.global.setLocaleMessage(e,r)}let c=Pp(t.store);e.provide(va,c),n.addStore(va,c),o.addModule(Fp,{type:ba,name:`Users`,description:`Create and manage user accounts and their profiles.`,elements:[]}),r.register((e,t)=>bp(e,t)),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&xp.forEach(e=>{t.router.addRoute(Te.ROOT,e)}),s.register(Fp,()=>Ii([c])),i.on(`event`,e=>{if(e?.event?.startsWith(`UsersModule.`)&&!(e.payload===null||typeof e.payload!=`object`||!(`id`in e.payload)||typeof e.payload.id!=`string`))switch(e.event){case ya.USER_CREATED:case ya.USER_UPDATED:c.onEvent({id:e.payload.id,data:e.payload});break;case ya.USER_DELETED:c.unset({id:e.payload.id});break;default:a.warn(`Unhandled users module event:`,e.event)}})}},Lp=class extends Error{exception;constructor(e,t=null){super(e),this.name=`AuthException`,this.exception=t}},Rp=class extends Lp{constructor(e,t=null){super(e,t),this.name=`AuthApiException`}},zp=class extends Lp{constructor(e,t=null){super(e,t),this.name=`AuthValidationException`}};K({sub:X().uuid(),role:G(H),exp:q(),iat:q(),jti:X().uuid()});var Bp=K({accessToken:X().trim().min(1),refreshToken:X().trim().min(1),expiration:Er([X(),q(),sr(),Pn()]).transform(e=>e?new Date(e):null),type:G(la)});K({fetching:J().default(!1),creating:J().default(!1),registering:J().default(!1),updating:J().default(!1)}),K({data:K({username:X().trim().min(1),password:X().trim().min(1)})}),K({id:X().uuid(),data:K({firstName:X().nullable().optional(),lastName:X().nullable().optional(),email:X().nullable().optional(),language:X().nullable().optional(),password:K({current:X().trim().min(1),new:X().trim().min(1)}).optional()})}),K({id:X().uuid().optional(),data:K({username:X().trim().min(1),password:X().trim().min(1),firstName:X().nullable().optional(),lastName:X().nullable().optional(),email:X().nullable().optional()})}),K({username:X().trim().min(1),password:X().trim().min(1)}),K({access_token:X().trim().min(1),refresh_token:X().trim().min(1),type:G(la),expiration:X().date()});var Vp=e=>{let t=Bp.safeParse({accessToken:e.access_token,refreshToken:e.refresh_token,expiration:e.expiration,type:e.type});if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new zp(`Failed to validate received token pair data.`);return t.data},Hp={fetching:!1,creating:!1,registering:!1,updating:!1},Up=jn(`auth_module-session`,()=>{let e=Zn(),t=On(),{cookies:n}=Di(),r=j(Hp),i=j(null),a=j(null),o=()=>i.value?.accessToken??null,s=()=>i.value?.refreshToken??null,c=()=>i.value!==null&&a.value!==null,l=()=>{if(i.value===null)return!1;let e=i.value.expiration;return e===null||e.getTime()<new Date().getTime()},u,d,f=async()=>{if(i.value!==null)return!1;let e=y(ma),n=y(ca);if(n===null)return p(),!1;if(e!==null){let r=mp(e),a=Bp.safeParse({accessToken:e,refreshToken:n,expiration:r.exp?r.exp*1e3:null,type:la.BEARER});if(a.success)i.value=a.data;else return t.error(`Schema validation failed with:`,a.error),p(),!1}else try{if(!await v())return p(),!1}catch(e){throw p(),e instanceof Rp?e:new Lp(`Failed to initialize session.`,e instanceof Error?e:void 0)}try{return await m(),!0}catch(e){throw e instanceof Rp?e:new Lp(`Failed to initialize session.`,e instanceof Error?e:void 0)}},p=()=>{r.value=Hp,i.value=null,a.value=null,x(ma),x(ca)},m=async()=>{if(u!==void 0)return u;let t=(async()=>{if(r.value.fetching)throw new Lp(`Already fetching profile.`);r.value.fetching=!0;try{let{data:t,error:n}=await e.client.GET(`/${je}/${pa}/auth/profile`);if(t!==void 0)return a.value=kp(t.data),a.value;let r=`Failed to get profile.`;throw n&&(r=Kn(n,r)),new Lp(r)}finally{r.value.fetching=!1}})();u=t;try{return await t}finally{u=void 0}},h=async t=>{if(r.value.creating)throw new Lp(`Already creating session.`);r.value.creating=!0;try{let{data:n,error:r}=await e.client.POST(`/${je}/${pa}/auth/login`,{body:{data:{username:t.data.username,password:t.data.password}}});if(n!==void 0)return i.value=Vp(n.data),b(ma,n.data.access_token),b(ca,n.data.refresh_token),await m();let a=`Failed to create user session.`;throw r&&(a=Kn(r,a)),new Lp(a)}finally{r.value.creating=!1}},g=async t=>{if(r.value.updating)throw new Lp(`Profile is already being updated.`);if(a.value===null||a.value.id!==t.id)throw new Lp(`Cannot edit profile for a different user.`);r.value.updating=!0;try{let n={};t.data.firstName!==void 0&&(n.first_name=t.data.firstName),t.data.lastName!==void 0&&(n.last_name=t.data.lastName),t.data.email!==void 0&&(n.email=t.data.email),t.data.language!==void 0&&(n.language=t.data.language),t.data.password!==void 0&&(n.password=t.data.password.new,n.current_password=t.data.password.current);let{data:r,error:i}=await e.client.PATCH(`/${je}/${ga}/users/{id}`,{params:{path:{id:t.id}},body:{data:n}});if(r!==void 0)return a.value=kp(r.data),!0;let o=`Failed to update profile.`;throw i&&(o=Kn(i,o)),new Rp(o)}finally{r.value.updating=!1}},_=async t=>{if(r.value.registering)throw new Lp(`Registration is already in progress.`);r.value.registering=!0;try{let{error:n,response:r}=await e.client.POST(`/${je}/${pa}/auth/register`,{body:{data:{username:t.data.username,password:t.data.password,first_name:t.data.firstName??void 0,last_name:t.data.lastName??void 0,email:t.data.email??void 0}}});if(r.ok)return!0;let i=`Failed to register user.`;throw n&&(i=Kn(n,i)),new Rp(i)}finally{r.value.registering=!1}},v=async()=>{if(d!==void 0)return d;let t=(async()=>{if(r.value.updating)return!1;x(ma);let t=y(ca);if(t===null)return x(ca),!1;r.value.updating=!0;try{let{data:n}=await e.client.POST(`/${je}/${pa}/auth/refresh`,{body:{data:{token:t}}});return n===void 0?(x(ca),!1):(i.value=Vp(n.data),b(ma,n.data.access_token),b(ca,n.data.refresh_token),!0)}finally{r.value.updating=!1}})();d=t;try{return await t}finally{d=void 0}},y=e=>n.get(e)!==null&&n.get(e)!==void 0&&n.get(e)!==``?n.get(e):null,b=(e,t)=>{let r=mp(t);n.set(e,t,new Date(r.exp*1e3).toUTCString(),`/`)},x=e=>{n.remove(e)};return{semaphore:r,tokenPair:i,profile:a,accessToken:o,refreshToken:s,isSignedIn:c,isExpired:l,initialize:f,clear:p,get:m,create:h,edit:g,register:_,refresh:v}}),Wp=e=>Up(e),Gp=Symbol(`FB-Module-Auth`),Kp={install:(e,t)=>{let n=pn(e),r=fn(e),i=vt(e),a=ut(e),o=_r(e),s=ea(e),c=Hi(e),l=Tn();for(let[e,n]of Object.entries(Zd)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{authModule:n});t.i18n.global.setLocaleMessage(e,r)}let u=Wp(t.store);i.use({async onRequest({request:e}){return u.tokenPair!==null&&u.isExpired()&&(await u.refresh()||u.clear()),u.tokenPair!==null&&e.headers.set(`Authorization`,`Bearer ${u.tokenPair.accessToken}`),e},async onResponse({request:e,response:t}){if(t.status!==401)return;let n=e.headers instanceof Headers?e.headers:new Headers(e.headers);if(n.get(`X-Retried`)!==null)return;if(u.tokenPair&&u.isExpired())await u.refresh()||u.clear();else if((n.get(`Authorization`)||``).startsWith(`Bearer`))return;if(u.tokenPair===null)return;let r=new Headers(n);r.set(`X-Retried`,`1`),r.set(`Authorization`,`Bearer ${u.tokenPair.accessToken}`);let i=new Request(e,{headers:r});return fetch(i)}}),e.provide(ha,u),n.addStore(ha,u),s.addModule(Gp,{type:da,name:`Sign‑in & Security`,description:`Sign in, secure your account, and manage your personal profile.`,elements:[]}),t.router.beforeEach(async()=>await hp(n,o)),t.router.beforeEach(()=>up(n)),t.router.beforeEach(()=>(Kd(a,u),!0)),qd({socket:a,session:u,onReconnected:()=>c.refreshAll(),onFailure:()=>{l.error($t.global.t(`application.messages.connectionRecoveryFailed`))}}).start(),r.register((e,t)=>Qd(n,t)),r.register((e,t)=>$d(n,t)),gp.forEach(e=>{t.router.addRoute(e)}),_p.forEach(e=>{t.router.addRoute(e)}),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&vp.forEach(e=>{t.router.addRoute(Te.ROOT,e)});let d=j(localStorage.getItem(fa)===`true`),f={isSignedIn:p(()=>u.isSignedIn()),isLocked:p(()=>d.value),details:p(()=>{let e=u.profile;return e===null?null:{id:e.id,username:e.username,name:e.firstName||e.lastName?`${e.firstName} ${e.lastName}`:null,email:e.email??null,role:e.role}}),signIn:async e=>{try{return await u.create({data:{username:e.username,password:e.password}}),d.value=!1,localStorage.removeItem(fa),!0}catch{return!1}},signOut:async()=>{try{return d.value=!1,localStorage.removeItem(fa),Tt(),u.clear(),!0}catch{return!1}},lock:()=>(d.value=!0,localStorage.setItem(fa,`true`),Promise.resolve(!0)),unlock:()=>(d.value=!1,localStorage.removeItem(fa),Promise.resolve(!0)),canAccess:()=>Promise.resolve(!0),routes:{edit:ua.PROFILE_GENERAL,security:ua.PROFILE_SECURITY,signIn:ua.SIGN_IN,signUp:ua.SIGN_UP,lock:ua.LOCK_SCREEN}};vn(e,f),F(()=>u.profile,e=>{if(e?.language){let n=Ct[e.language];n&&(t.i18n.global.locale.value=n,bt(n))}else if(e&&!e.language){let e=jt();t.i18n.global.locale.value=e,Tt(),Dr(e)}},{immediate:!0}),st(e).on(Bt,e=>{let n=u.profile;n&&typeof e==`string`&&u.edit({id:n.id,data:{language:e.split(`-`)[0]}}).catch(()=>{if(n.language){let e=Ct[n.language];e&&(t.i18n.global.locale.value=e,bt(e))}else{let e=jt();t.i18n.global.locale.value=e,Tt(),Dr(e)}})}),r.register((e,t)=>ef(f,t))}},qp={class:`w-full`},Jp={key:1,class:`flex items-center justify-between gap-2 mt-1`},Yp={key:0,class:`text-xs text-danger`},Xp={key:1,class:`text-xs text-gray-500`},Zp=k({name:`ConfigSecretInput`,__name:`config-secret-input`,props:{modelValue:{default:void 0},configured:{type:Boolean,default:!1},type:{default:`password`},rows:{default:3},placeholder:{default:void 0},name:{default:void 0},disabled:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=p(()=>n.modelValue===null),s=e=>{r(`update:modelValue`,e===``?void 0:e)},c=()=>{r(`update:modelValue`,null)},l=()=>{r(`update:modelValue`,void 0)};return(t,n)=>(A(),i(`div`,qp,[o.value?R(``,!0):(A(),O(L(U),{key:0,"model-value":e.modelValue??``,placeholder:e.placeholder,name:e.name,type:e.type,rows:e.type===`textarea`?e.rows:void 0,"show-password":e.type===`password`,disabled:e.disabled,"onUpdate:modelValue":s},null,8,[`model-value`,`placeholder`,`name`,`type`,`rows`,`show-password`,`disabled`])),e.configured||o.value?(A(),i(`div`,Jp,[o.value?(A(),i(`span`,Yp,z(L(a)(`configModule.texts.secret.willBeRemoved`)),1)):(A(),i(`span`,Xp,z(L(a)(`configModule.texts.secret.stored`)),1)),o.value?(A(),O(L(Oe),{key:2,link:``,type:`primary`,size:`small`,name:e.name?`${e.name}-keep`:void 0,onClick:l},{default:B(()=>[E(z(L(a)(`configModule.buttons.keepSecret.title`)),1)]),_:1},8,[`name`])):(A(),O(L(Oe),{key:3,link:``,type:`danger`,size:`small`,disabled:e.disabled,name:e.name?`${e.name}-remove`:void 0,onClick:c},{default:B(()=>[E(z(L(a)(`configModule.buttons.removeSecret.title`)),1)]),_:1},8,[`disabled`,`name`]))])):R(``,!0)]))}}),Qp=()=>{let{t:e}=M(),t=Zn(),n=j(``),r=j(!1),i=j(null);return{personalityContent:n,personalityLoading:r,personalityError:i,fetchPersonality:async()=>{r.value=!0,i.value=null;try{let{data:r,error:a,response:o}=await t.client.GET(`/${je}/${yi}/personality`);if(o?.status===503){i.value=e(`buddyModule.messages.errors.providerUnavailable`);return}if(a||!r){i.value=e(`buddyModule.messages.errors.loadPersonality`);return}n.value=r.data.content}catch{i.value=e(`buddyModule.messages.errors.loadPersonality`)}finally{r.value=!1}},savePersonality:async a=>{r.value=!0,i.value=null;try{let{data:r,error:o,response:s}=await t.client.PATCH(`/${je}/${yi}/personality`,{body:{data:{content:a}}});return s?.status===503?(i.value=e(`buddyModule.messages.errors.providerUnavailable`),!1):o||!r?(i.value=e(`buddyModule.messages.errors.savePersonality`),!1):(n.value=r.data.content,!0)}catch{return i.value=e(`buddyModule.messages.errors.savePersonality`),!1}finally{r.value=!1}}}},$p=k({name:`BuddyConfigForm`,__name:`buddy-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),{providerStatuses:s,providerFetchFailed:c,fetchProviderStatuses:u}=wi(),{sttProviderStatuses:d,sttProviderFetchFailed:f,fetchSttProviderStatuses:m}=vi(),{ttsProviderStatuses:h,ttsProviderFetchFailed:g,fetchTtsProviderStatuses:_}=Si(),{personalityContent:v,personalityError:y,fetchPersonality:b,savePersonality:x}=Qp();le(async()=>{await Promise.all([u(),m(),_(),b()])});let{formEl:S,model:C,formChanged:w,submit:T,formResult:ee}=Ui({config:n.config,messages:{success:a(`buddyModule.messages.config.edited`),error:a(`buddyModule.messages.config.notEdited`)}}),te=j(``),ne=j(``),re=p(()=>te.value!==ne.value);F(v,e=>{re.value||(te.value=e,ne.value=e)},{immediate:!0});let k=p(()=>{let e=[{value:Ci,label:a(`buddyModule.fields.config.provider.options.none`),disabled:!1,tag:a(`buddyModule.fields.config.provider.tags.ruleBasedOnly`),tagType:`info`}];for(let t of s.value){let n,r;t.enabled&&!t.configured&&(n=a(`buddyModule.fields.config.provider.notConfigured`),r=`warning`),e.push({value:t.type,label:t.name,disabled:!t.enabled,tag:n,tagType:r})}return c.value&&C.provider&&C.provider!==`none`&&(e.some(e=>e.value===C.provider)||e.push({value:C.provider,label:C.provider,disabled:!1})),e}),ie=p(()=>{let e=[{value:bi,label:a(`buddyModule.fields.config.sttPlugin.options.none`),disabled:!1,tag:a(`buddyModule.fields.config.sttPlugin.tags.disabled`),tagType:`info`}];for(let t of d.value){let n,r;t.enabled&&!t.configured&&(n=a(`buddyModule.fields.config.sttPlugin.notConfigured`),r=`warning`),e.push({value:t.type,label:t.name,disabled:!t.enabled,tag:n,tagType:r})}return f.value&&C.sttPlugin&&C.sttPlugin!==`none`&&(e.some(e=>e.value===C.sttPlugin)||e.push({value:C.sttPlugin,label:C.sttPlugin,disabled:!1})),e}),ae=p(()=>{let e=[{value:xi,label:a(`buddyModule.fields.config.ttsPlugin.options.none`),disabled:!1,tag:a(`buddyModule.fields.config.ttsPlugin.tags.disabled`),tagType:`info`}];for(let t of h.value){let n,r;t.enabled&&!t.configured&&(n=a(`buddyModule.fields.config.ttsPlugin.notConfigured`),r=`warning`),e.push({value:t.type,label:t.name,disabled:!t.enabled,tag:n,tagType:r})}return g.value&&C.ttsPlugin&&C.ttsPlugin!==`none`&&(e.some(e=>e.value===C.ttsPlugin)||e.push({value:C.ttsPlugin,label:C.ttsPlugin,disabled:!1})),e}),oe=P({}),se=p(()=>te.value.length>2e3);return F(()=>ee.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{if(e){r(`update:remote-form-submit`,!1);try{await T()}catch{return}re.value&&!se.value&&(await x(te.value)?(ne.value=v.value,te.value=v.value):(o.error(a(`buddyModule.messages.errors.savePersonality`)),r(`update:remote-form-result`,Aa.ERROR)))}}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!S.value)return;S.value.resetFields(),te.value=ne.value}}),F(()=>w.value||re.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:S,model:L(C),rules:oe,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`buddyModule.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(C).enabled,"onUpdate:modelValue":t[0]||=e=>L(C).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyModule.fields.config.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(C).name,"onUpdate:modelValue":t[1]||=e=>L(C).name=e,placeholder:L(a)(`buddyModule.fields.config.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(c)?(A(),O(L(Q),{key:0,type:`warning`,"show-icon":``,closable:!1,style:{"margin-bottom":`18px`}},{default:B(()=>[E(z(L(a)(`buddyModule.texts.providersFetchFailed`)),1)]),_:1})):R(``,!0),D(L(Z),{label:L(a)(`buddyModule.fields.config.provider.title`),prop:`provider`},{default:B(()=>[D(L(ei),{modelValue:L(C).provider,"onUpdate:modelValue":t[2]||=e=>L(C).provider=e,placeholder:L(a)(`buddyModule.fields.config.provider.placeholder`),name:`provider`},{default:B(()=>[(A(!0),i(V,null,I(k.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value,disabled:e.disabled},{default:B(()=>[l(`span`,null,z(e.label),1),e.tag?(A(),O(L(Xt),{key:0,size:`small`,type:e.tagType,effect:`light`,style:{"margin-left":`8px`}},{default:B(()=>[E(z(e.tag),1)]),_:2},1032,[`type`])):R(``,!0)]),_:2},1032,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`buddyModule.fields.config.personality.title`),error:se.value?L(a)(`buddyModule.fields.config.personality.validation.maxLength`):L(y)??void 0},{default:B(()=>[D(L(U),{modelValue:te.value,"onUpdate:modelValue":t[3]||=e=>te.value=e,type:`textarea`,rows:5,maxlength:2e3,"show-word-limit":``,placeholder:L(a)(`buddyModule.fields.config.personality.placeholder`),name:`personality`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`error`]),D(L(Q),{type:`info`,"show-icon":``,closable:!1,style:{"margin-bottom":`18px`}},{default:B(()=>[E(z(L(a)(`buddyModule.fields.config.personality.description`)),1)]),_:1}),D(L(Vt)),D(L(Z),{label:L(a)(`buddyModule.fields.config.voiceEnabled.title`),prop:`voiceEnabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(C).voiceEnabled,"onUpdate:modelValue":t[4]||=e=>L(C).voiceEnabled=e,name:`voiceEnabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Q),{type:`info`,"show-icon":``,closable:!1,style:{"margin-bottom":`18px`}},{default:B(()=>[E(z(L(a)(`buddyModule.fields.config.voiceEnabled.description`)),1)]),_:1}),L(f)?(A(),O(L(Q),{key:1,type:`warning`,"show-icon":``,closable:!1,style:{"margin-bottom":`18px`}},{default:B(()=>[E(z(L(a)(`buddyModule.texts.sttProvidersFetchFailed`)),1)]),_:1})):R(``,!0),D(L(Z),{label:L(a)(`buddyModule.fields.config.sttPlugin.title`),prop:`sttPlugin`},{default:B(()=>[D(L(ei),{modelValue:L(C).sttPlugin,"onUpdate:modelValue":t[5]||=e=>L(C).sttPlugin=e,placeholder:L(a)(`buddyModule.fields.config.sttPlugin.placeholder`),name:`sttPlugin`},{default:B(()=>[(A(!0),i(V,null,I(ie.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value,disabled:e.disabled},{default:B(()=>[l(`span`,null,z(e.label),1),e.tag?(A(),O(L(Xt),{key:0,size:`small`,type:e.tagType,effect:`light`,style:{"margin-left":`8px`}},{default:B(()=>[E(z(e.tag),1)]),_:2},1032,[`type`])):R(``,!0)]),_:2},1032,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt)),L(g)?(A(),O(L(Q),{key:2,type:`warning`,"show-icon":``,closable:!1,style:{"margin-bottom":`18px`}},{default:B(()=>[E(z(L(a)(`buddyModule.texts.ttsProvidersFetchFailed`)),1)]),_:1})):R(``,!0),D(L(Z),{label:L(a)(`buddyModule.fields.config.ttsPlugin.title`),prop:`ttsPlugin`},{default:B(()=>[D(L(ei),{modelValue:L(C).ttsPlugin,"onUpdate:modelValue":t[6]||=e=>L(C).ttsPlugin=e,placeholder:L(a)(`buddyModule.fields.config.ttsPlugin.placeholder`),name:`ttsPlugin`},{default:B(()=>[(A(!0),i(V,null,I(ae.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value,disabled:e.disabled},{default:B(()=>[l(`span`,null,z(e.label),1),e.tag?(A(),O(L(Xt),{key:0,size:`small`,type:e.tagType,effect:`light`,style:{"margin-left":`8px`}},{default:B(()=>[E(z(e.tag),1)]),_:2},1032,[`type`])):R(``,!0)]),_:2},1032,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),em={"cs-CZ":{menu:{title:`Kamarád`},headings:{settings:`Kamarád`,chat:`Buddy Chat`,chats:`Konverzace`,aboutBuddy:`Konfigurace AI Buddy`},subHeadings:{settings:`Konfigurace nastavení AI buddy asistenta`,chat:`Chatujte se svým AI buddy asistentem`},messages:{loadError:`Nepodařilo se načíst konfiguraci buddy`,config:{edited:`Konfigurace buddy byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci buddy`},errors:{unexpectedError:`Došlo k neočekávané chybě`,loadConversations:`Nepodařilo se načíst konverzace`,createConversation:`Nepodařilo se vytvořit konverzaci`,loadMessages:`Nepodařilo se načíst zprávy`,providerUnavailable:`AI poskytovatel je dočasně nedostupný. Zkuste to prosím později.`,sendMessage:`Nepodařilo se odeslat zprávu`,deleteConversation:`Nepodařilo se smazat konverzaci`,audioPlayback:`Nepodařilo se přehrát zvuk`,loadPersonality:`Nepodařilo se načíst osobnost`,savePersonality:`Nepodařilo se uložit osobnost`}},buttons:{save:{title:`Uložit`},back:{title:`Zpět`},retry:{title:`Opakovat`},newChat:{title:`Nový chat`},delete:{title:`Smazat`},cancel:{title:`Zrušit`},configure:{title:`Konfigurovat poskytovatele`},goToSettings:{title:`Přejít do nastavení`},setupWizard:{title:`Průvodce nastavením`}},fields:{config:{enabled:{title:`Povolit modul`},name:{title:`Jméno buddy`,placeholder:`Zadejte jméno buddy`},provider:{title:`Plugin AI poskytovatele`,placeholder:`Vyberte plugin AI poskytovatele`,notConfigured:`nenakonfigurováno`,tags:{ruleBasedOnly:`pouze na základě pravidel`},options:{none:`Žádný`}},voiceEnabled:{title:`Hlasové rozhraní`,description:`Povolte rozpoznávání řeči a hlasovou syntézu pro hands-free interakci s asistentem`},sttPlugin:{title:`Poskytovatel rozpoznávání řeči (Speech-to-Text)`,placeholder:`Vyberte poskytovatele rozpoznávání řeči`,notConfigured:`nenakonfigurováno`,options:{none:`Žádný`},tags:{disabled:`zakázáno`}},ttsPlugin:{title:`Poskytovatel hlasové syntézy (Text-to-Speech)`,placeholder:`Vyberte poskytovatele hlasové syntézy`,notConfigured:`nenakonfigurováno`,options:{none:`Žádný`},tags:{disabled:`zakázáno`}},personality:{title:`Osobnost`,description:`Definujte tón, styl a osobnost buddy. Tento text je zahrnut v systémovém promptu AI.`,placeholder:`Jsi nápomocný asistent chytré domácnosti. Buď stručný, přátelský a praktický.
|
|
3
|
+
Zaměř se na realizovatelné návrhy. Používej jednoduchý jazyk.`,validation:{maxLength:`Text osobnosti nesmí přesáhnout 2000 znaků`}}},message:{placeholder:`Napište zprávu...`}},texts:{loadingConfig:`Načítání konfigurace buddy...`,loadingConversations:`Načítání konverzací...`,aboutBuddy:`Nakonfigurujte AI buddy asistenta, který sleduje vaše akce, učí se vaše vzorce a navrhuje automatizace. Vyberte plugin AI poskytovatele pro povolení chatovací funkce. Nastavení specifická pro poskytovatele (API klíč, model) se konfigurují na stránce nastavení pluginu. Bez poskytovatele budou nadále fungovat návrhy založené na pravidlech.`,emptyChat:`Vyberte nebo vytvořte konverzaci pro zahájení chatu`,startConversation:`Zeptejte se mě na cokoli ohledně vaší domácnosti!`,thinking:`Přemýšlím...`,newConversation:`Nová konverzace`,confirmDelete:`Smazat tuto konverzaci?`,providerNotConfigured:`AI poskytovatel není nakonfigurován`,providerNotConfiguredHint:`Nakonfigurujte plugin AI poskytovatele pro zahájení chatu s vaším buddy.`,noProviderSelected:`Není vybrán žádný AI poskytovatel`,noProviderSelectedHint:`Vyberte a nakonfigurujte AI poskytovatele pro začátek. Použijte Průvodce nastavením pro řízenou konfiguraci.`,providerNotEnabled:`Poskytovatel {name} není povolen`,providerNotEnabledHint:`Povolte ho v konfiguraci pluginu.`,providerMissingConfig:`Poskytovatel {name} vyžaduje konfiguraci`,providerMissingConfigHint:`Nastavte požadovaný API klíč nebo OAuth připojení.`,availableProviders:`Dostupní poskytovatelé`,configured:`Nakonfigurováno`,notConfigured:`Nenakonfigurováno`,justNow:`právě teď`,minutesAgo:`před {n}m`,hoursAgo:`před {n}h`,daysAgo:`před {n}d`,noSpace:`Žádný prostor`,noActiveConversation:`Není vybrána žádná konverzace`,providersFetchFailed:`Nepodařilo se načíst dostupné poskytovatele. Seznam poskytovatelů může být neúplný.`,sttProvidersFetchFailed:`Nepodařilo se načíst dostupné poskytovatele rozpoznávání řeči. Seznam poskytovatelů může být neúplný.`,ttsProvidersFetchFailed:`Nepodařilo se načíst dostupné poskytovatele hlasové syntézy. Seznam poskytovatelů může být neúplný.`,moduleDisabled:`Modul Buddy je zakázán`,moduleDisabledHint:`Modul AI buddy je aktuálně zakázán. Povolte ho v konfiguraci systému pro použití chatu a návrhů.`},wizard:{title:`Průvodce nastavením Buddy`,steps:{provider:`AI poskytovatel`,voice:`Hlas`,messaging:`Zprávy`,done:`Hotovo`},providerDescription:`Vyberte AI poskytovatele pro napájení chatovacích schopností vašeho buddy. Každý poskytovatel vyžaduje vlastní API klíč nebo přihlašovací údaje.`,voiceDescription:`Volitelně nakonfigurujte hlasové schopnosti. Text-to-Speech umožňuje buddy číst odpovědi nahlas. Speech-to-Text umožňuje hlasový vstup.`,messagingDescription:`Volitelně připojte chatovací platformy pro vzdálenou komunikaci s buddy přes Telegram, Discord, WhatsApp nebo jiné služby.`,noProvidersAvailable:`Nejsou nainstalovány žádné pluginy AI poskytovatelů. Nainstalujte plugin poskytovatele (např. Claude, OpenAI, Ollama) pro povolení AI chatu.`,configureProvider:`Konfigurovat {name}`,configured:`Nakonfigurováno`,needsSetup:`Vyžaduje nastavení`,disabled:`Zakázáno`,configRequired:`Vyžadována konfigurace`,configSaved:`Konfigurace úspěšně uložena`,saveError:`Nepodařilo se uložit konfiguraci`,doneTitle:`Nastavení dokončeno`,doneDescription:`Váš buddy je připraven k použití. Tato nastavení můžete kdykoli změnit na stránce konfigurace.`,summaryLlm:`AI poskytovatel: {name}`,summaryLlmSkipped:`AI poskytovatel nebyl vybrán`,summaryVoice:`Hlas: {summary}`,summaryVoiceSkipped:`Hlas přeskočen`,summaryMessaging:`Zprávy: {name}`,summaryMessagingSkipped:`Zprávy přeskočeny`,notSelected:`Nevybráno`,skipped:`Přeskočeno`,ttsHeading:`Převod textu na řeč (TTS)`,sttHeading:`Převod řeči na text (STT)`,buttons:{back:`Zpět`,next:`Další`,skip:`Přeskočit`,configure:`Konfigurovat`,saveConfig:`Uložit konfiguraci`,startChatting:`Začít chatovat`}},meta:{settings:{title:`Nastavení Buddy`},chat:{title:`Buddy Chat`}}},"de-DE":{menu:{title:`Kumpel`},headings:{settings:`Kumpel`,chat:`Buddy-Chat`,chats:`Chats`,aboutBuddy:`KI-Buddy-Konfiguration`},subHeadings:{settings:`KI-Buddy-Assistenten-Einstellungen konfigurieren`,chat:`Mit Ihrem KI-Buddy-Assistenten chatten`},messages:{loadError:`Buddy-Konfiguration konnte nicht geladen werden`,config:{edited:`Buddy-Konfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der Buddy-Konfiguration fehlgeschlagen`},errors:{unexpectedError:`Ein unerwarteter Fehler ist aufgetreten`,loadConversations:`Konversationen konnten nicht geladen werden`,createConversation:`Konversation konnte nicht erstellt werden`,loadMessages:`Nachrichten konnten nicht geladen werden`,providerUnavailable:`Der KI-Anbieter ist vorübergehend nicht verfügbar. Bitte versuchen Sie es später erneut.`,sendMessage:`Nachricht konnte nicht gesendet werden`,deleteConversation:`Konversation konnte nicht gelöscht werden`,audioPlayback:`Audiowiedergabe fehlgeschlagen`,loadPersonality:`Persönlichkeit konnte nicht geladen werden`,savePersonality:`Persönlichkeit konnte nicht gespeichert werden`}},buttons:{save:{title:`Speichern`},back:{title:`Zurück`},retry:{title:`Wiederholen`},newChat:{title:`Neuer Chat`},delete:{title:`Löschen`},cancel:{title:`Abbrechen`},configure:{title:`Anbieter konfigurieren`},goToSettings:{title:`Zu Einstellungen`},setupWizard:{title:`Einrichtungsassistent`}},fields:{config:{enabled:{title:`Modul aktivieren`},name:{title:`Buddy-Name`,placeholder:`Buddy-Namen eingeben`},provider:{title:`KI-Anbieter-Plugin`,placeholder:`KI-Anbieter-Plugin auswählen`,notConfigured:`nicht konfiguriert`,tags:{ruleBasedOnly:`nur regelbasiert`},options:{none:`Keiner`}},voiceEnabled:{title:`Sprachschnittstelle`,description:`Spracherkennung und Sprachsynthese für freihändige Interaktion mit dem Assistenten aktivieren`},sttPlugin:{title:`Spracherkennungsanbieter (Speech-to-Text)`,placeholder:`Spracherkennungsanbieter auswählen`,notConfigured:`nicht konfiguriert`,options:{none:`Keiner`},tags:{disabled:`deaktiviert`}},ttsPlugin:{title:`Sprachsynthesenanbieter (Text-to-Speech)`,placeholder:`Sprachsynthesenanbieter auswählen`,notConfigured:`nicht konfiguriert`,options:{none:`Keiner`},tags:{disabled:`deaktiviert`}},personality:{title:`Persönlichkeit`,description:`Definieren Sie Ton, Stil und Persönlichkeit des Buddys. Dieser Text wird in den KI-Systemprompt eingefügt.`,placeholder:`Du bist ein hilfreicher Smart-Home-Assistent. Sei prägnant, freundlich und praktisch.
|
|
4
|
+
Konzentriere dich auf umsetzbare Vorschläge. Verwende einfache Sprache.`,validation:{maxLength:`Der Persönlichkeitstext darf 2000 Zeichen nicht überschreiten`}}},message:{placeholder:`Nachricht eingeben...`}},texts:{loadingConfig:`Buddy-Konfiguration wird geladen...`,loadingConversations:`Konversationen werden geladen...`,aboutBuddy:`Konfigurieren Sie den KI-Buddy-Assistenten, der Ihre Aktionen beobachtet, Ihre Muster lernt und Automatisierungen vorschlägt. Wählen Sie ein KI-Anbieter-Plugin, um die Chat-Funktionalität zu aktivieren. Anbieterspezifische Einstellungen (API-Schlüssel, Modell) werden auf der Einstellungsseite des jeweiligen Plugins konfiguriert. Ohne Anbieter funktionieren regelbasierte Vorschläge weiterhin.`,emptyChat:`Wählen Sie eine Konversation aus oder erstellen Sie eine neue, um zu chatten`,startConversation:`Fragen Sie mich alles über Ihr Zuhause!`,thinking:`Denkt nach...`,newConversation:`Neue Konversation`,confirmDelete:`Diese Konversation löschen?`,providerNotConfigured:`KI-Anbieter nicht konfiguriert`,providerNotConfiguredHint:`Konfigurieren Sie ein KI-Anbieter-Plugin, um mit Ihrem Buddy zu chatten.`,noProviderSelected:`Kein KI-Anbieter ausgewählt`,noProviderSelectedHint:`Wählen und konfigurieren Sie einen KI-Anbieter, um zu beginnen. Verwenden Sie den Einrichtungsassistenten für eine geführte Konfiguration.`,providerNotEnabled:`Der Anbieter {name} ist nicht aktiviert`,providerNotEnabledHint:`Aktivieren Sie ihn in der Plugin-Konfiguration.`,providerMissingConfig:`Der Anbieter {name} muss konfiguriert werden`,providerMissingConfigHint:`Richten Sie den erforderlichen API-Schlüssel oder die OAuth-Verbindung ein.`,availableProviders:`Verfügbare Anbieter`,configured:`Konfiguriert`,notConfigured:`Nicht konfiguriert`,justNow:`gerade eben`,minutesAgo:`vor {n}m`,hoursAgo:`vor {n}h`,daysAgo:`vor {n}T`,noSpace:`Kein Raum`,noActiveConversation:`Keine Konversation ausgewählt`,providersFetchFailed:`Verfügbare Anbieter konnten nicht geladen werden. Die Anbieterliste ist möglicherweise unvollständig.`,sttProvidersFetchFailed:`Verfügbare Spracherkennungsanbieter konnten nicht geladen werden. Die Anbieterliste ist möglicherweise unvollständig.`,ttsProvidersFetchFailed:`Verfügbare Sprachsyntheseanbieter konnten nicht geladen werden. Die Anbieterliste ist möglicherweise unvollständig.`,moduleDisabled:`Buddy-Modul ist deaktiviert`,moduleDisabledHint:`Das KI-Buddy-Modul ist derzeit deaktiviert. Aktivieren Sie es in der Systemkonfiguration, um Chat und Vorschläge zu nutzen.`},wizard:{title:`Buddy-Einrichtungsassistent`,steps:{provider:`KI-Anbieter`,voice:`Sprache`,messaging:`Nachrichten`,done:`Fertig`},providerDescription:`Wählen Sie einen KI-Anbieter für die Chat-Funktionen Ihres Buddys. Jeder Anbieter benötigt eigene API-Schlüssel oder Anmeldedaten.`,voiceDescription:`Konfigurieren Sie optional Sprachfunktionen. Text-to-Speech lässt den Buddy Antworten vorlesen. Speech-to-Text ermöglicht Spracheingabe.`,messagingDescription:`Verbinden Sie optional Messaging-Plattformen, um von unterwegs per Telegram, Discord, WhatsApp oder anderen Diensten mit Ihrem Buddy zu chatten.`,noProvidersAvailable:`Keine KI-Anbieter-Plugins installiert. Installieren Sie ein Anbieter-Plugin (z.B. Claude, OpenAI, Ollama), um den KI-Chat zu aktivieren.`,configureProvider:`{name} konfigurieren`,configured:`Konfiguriert`,needsSetup:`Einrichtung erforderlich`,disabled:`Deaktiviert`,configRequired:`Konfiguration erforderlich`,configSaved:`Konfiguration erfolgreich gespeichert`,saveError:`Konfiguration konnte nicht gespeichert werden`,doneTitle:`Einrichtung abgeschlossen`,doneDescription:`Ihr Buddy ist einsatzbereit. Sie können diese Einstellungen jederzeit auf der Konfigurationsseite ändern.`,summaryLlm:`KI-Anbieter: {name}`,summaryLlmSkipped:`KI-Anbieter nicht ausgewählt`,summaryVoice:`Sprache: {summary}`,summaryVoiceSkipped:`Sprache übersprungen`,summaryMessaging:`Messaging: {name}`,summaryMessagingSkipped:`Messaging übersprungen`,notSelected:`Nicht ausgewählt`,skipped:`Übersprungen`,ttsHeading:`Text-to-Speech (TTS)`,sttHeading:`Speech-to-Text (STT)`,buttons:{back:`Zurück`,next:`Weiter`,skip:`Überspringen`,configure:`Konfigurieren`,saveConfig:`Konfiguration speichern`,startChatting:`Chat starten`}},meta:{settings:{title:`Buddy-Einstellungen`},chat:{title:`Buddy-Chat`}}},"en-US":{menu:{title:`Buddy`},headings:{settings:`Buddy`,chat:`Buddy Chat`,chats:`Chats`,aboutBuddy:`AI Buddy Configuration`},subHeadings:{settings:`Configure AI buddy assistant settings`,chat:`Chat with your AI buddy assistant`},messages:{loadError:`Failed to load buddy configuration`,config:{edited:`Buddy configuration has been successfully updated`,notEdited:`Failed to update buddy configuration`},errors:{unexpectedError:`An unexpected error occurred`,loadConversations:`Failed to load conversations`,createConversation:`Failed to create conversation`,loadMessages:`Failed to load messages`,providerUnavailable:`The AI provider is temporarily unavailable. Please try again later.`,sendMessage:`Failed to send message`,deleteConversation:`Failed to delete conversation`,audioPlayback:`Failed to play audio`,loadPersonality:`Failed to load personality`,savePersonality:`Failed to save personality`}},buttons:{save:{title:`Save`},back:{title:`Back`},retry:{title:`Retry`},newChat:{title:`New Chat`},delete:{title:`Delete`},cancel:{title:`Cancel`},configure:{title:`Configure Provider`},goToSettings:{title:`Go to Settings`},setupWizard:{title:`Setup Wizard`}},fields:{config:{enabled:{title:`Enable module`},name:{title:`Buddy name`,placeholder:`Enter buddy name`},provider:{title:`AI Provider Plugin`,placeholder:`Select an AI provider plugin`,notConfigured:`not configured`,tags:{ruleBasedOnly:`rule-based only`},options:{none:`None`}},voiceEnabled:{title:`Voice Interface`,description:`Enable speech recognition and voice synthesis for hands-free interaction with the assistant`},sttPlugin:{title:`Speech Recognition Provider (Speech-to-Text)`,placeholder:`Select a speech recognition provider`,notConfigured:`not configured`,options:{none:`None`},tags:{disabled:`disabled`}},ttsPlugin:{title:`Voice Synthesis Provider (Text-to-Speech)`,placeholder:`Select a voice synthesis provider`,notConfigured:`not configured`,options:{none:`None`},tags:{disabled:`disabled`}},personality:{title:`Personality`,description:`Define the buddy's tone, style, and personality. This text is included in the AI system prompt.`,placeholder:`You are a helpful smart home assistant. Be concise, friendly, and practical.
|
|
5
|
+
Focus on actionable suggestions. Use simple language.`,validation:{maxLength:`Personality text must not exceed 2000 characters`}}},message:{placeholder:`Type a message...`}},texts:{loadingConfig:`Loading buddy configuration...`,loadingConversations:`Loading conversations...`,aboutBuddy:`Configure the AI buddy assistant that observes your actions, learns your patterns, and suggests automations. Select an AI provider plugin to enable chat functionality. Provider-specific settings (API key, model) are configured in the plugin's own settings page. Without a provider, rule-based suggestions will still work.`,emptyChat:`Select or create a conversation to start chatting`,startConversation:`Ask me anything about your home!`,thinking:`Thinking...`,newConversation:`New conversation`,confirmDelete:`Delete this conversation?`,providerNotConfigured:`AI provider not configured`,providerNotConfiguredHint:`Configure an AI provider plugin to start chatting with your buddy.`,noProviderSelected:`No AI provider is selected`,noProviderSelectedHint:`Select and configure an AI provider to get started. Use the Setup Wizard for guided configuration.`,providerNotEnabled:`The provider {name} is not enabled`,providerNotEnabledHint:`Enable it in the plugin configuration.`,providerMissingConfig:`The provider {name} needs configuration`,providerMissingConfigHint:`Set up the required API key or OAuth connection.`,availableProviders:`Available providers`,configured:`Configured`,notConfigured:`Not configured`,justNow:`just now`,minutesAgo:`{n}m ago`,hoursAgo:`{n}h ago`,daysAgo:`{n}d ago`,noSpace:`No space`,noActiveConversation:`No conversation selected`,providersFetchFailed:`Failed to load available providers. The provider list may be incomplete.`,sttProvidersFetchFailed:`Failed to load available speech recognition providers. The provider list may be incomplete.`,ttsProvidersFetchFailed:`Failed to load available voice synthesis providers. The provider list may be incomplete.`,moduleDisabled:`Buddy module is disabled`,moduleDisabledHint:`The AI buddy module is currently disabled. Enable it in the system configuration to use chat and suggestions.`},wizard:{title:`Buddy Setup Wizard`,steps:{provider:`AI Provider`,voice:`Voice`,messaging:`Messaging`,done:`Done`},providerDescription:`Choose an AI provider to power your buddy's chat capabilities. Each provider requires its own API key or credentials.`,voiceDescription:`Optionally configure voice capabilities. Text-to-Speech lets the buddy read responses aloud. Speech-to-Text enables voice input.`,messagingDescription:`Optionally connect messaging platforms to chat with your buddy remotely via Telegram, Discord, WhatsApp, or other services.`,noProvidersAvailable:`No AI provider plugins are installed. Install a provider plugin (e.g., Claude, OpenAI, Ollama) to enable AI chat.`,configureProvider:`Configure {name}`,configured:`Configured`,needsSetup:`Needs setup`,disabled:`Disabled`,configRequired:`Configuration required`,configSaved:`Configuration saved successfully`,saveError:`Failed to save configuration`,doneTitle:`Setup Complete`,doneDescription:`Your buddy is ready to use. You can always change these settings later in the configuration page.`,summaryLlm:`AI Provider: {name}`,summaryLlmSkipped:`AI Provider not selected`,summaryVoice:`Voice: {summary}`,summaryVoiceSkipped:`Voice skipped`,summaryMessaging:`Messaging: {name}`,summaryMessagingSkipped:`Messaging skipped`,notSelected:`Not selected`,skipped:`Skipped`,ttsHeading:`Text-to-Speech (TTS)`,sttHeading:`Speech-to-Text (STT)`,buttons:{back:`Back`,next:`Next`,skip:`Skip`,configure:`Configure`,saveConfig:`Save Configuration`,startChatting:`Start Chatting`}},meta:{settings:{title:`Buddy Settings`},chat:{title:`Buddy Chat`}}},"es-ES":{menu:{title:`Compañero`},headings:{settings:`Compañero`,chat:`Chat de Buddy`,chats:`Charlas`,aboutBuddy:`Configuración del Buddy IA`},subHeadings:{settings:`Configurar los ajustes del asistente Buddy IA`,chat:`Chatea con tu asistente Buddy IA`},messages:{loadError:`Error al cargar la configuración de Buddy`,config:{edited:`La configuración de Buddy se ha actualizado correctamente`,notEdited:`Error al actualizar la configuración de Buddy`},errors:{unexpectedError:`Se produjo un error inesperado`,loadConversations:`Error al cargar las conversaciones`,createConversation:`Error al crear la conversación`,loadMessages:`Error al cargar los mensajes`,providerUnavailable:`El proveedor de IA no está disponible temporalmente. Por favor, inténtalo de nuevo más tarde.`,sendMessage:`Error al enviar el mensaje`,deleteConversation:`Error al eliminar la conversación`,audioPlayback:`Error al reproducir el audio`,loadPersonality:`Error al cargar la personalidad`,savePersonality:`Error al guardar la personalidad`}},buttons:{save:{title:`Guardar`},back:{title:`Atrás`},retry:{title:`Reintentar`},newChat:{title:`Nuevo chat`},delete:{title:`Eliminar`},cancel:{title:`Cancelar`},configure:{title:`Configurar proveedor`},goToSettings:{title:`Ir a configuración`},setupWizard:{title:`Asistente de configuración`}},fields:{config:{enabled:{title:`Activar módulo`},name:{title:`Nombre del Buddy`,placeholder:`Ingresa el nombre del Buddy`},provider:{title:`Plugin de proveedor de IA`,placeholder:`Selecciona un plugin de proveedor de IA`,notConfigured:`no configurado`,tags:{ruleBasedOnly:`solo basado en reglas`},options:{none:`Ninguno`}},voiceEnabled:{title:`Interfaz de voz`,description:`Activa el reconocimiento de voz y la síntesis de voz para interactuar con el asistente manos libres`},sttPlugin:{title:`Proveedor de reconocimiento de voz (Speech-to-Text)`,placeholder:`Selecciona un proveedor de reconocimiento de voz`,notConfigured:`no configurado`,options:{none:`Ninguno`},tags:{disabled:`desactivado`}},ttsPlugin:{title:`Proveedor de síntesis de voz (Text-to-Speech)`,placeholder:`Selecciona un proveedor de síntesis de voz`,notConfigured:`no configurado`,options:{none:`Ninguno`},tags:{disabled:`desactivado`}},personality:{title:`Personalidad`,description:`Define el tono, estilo y personalidad del Buddy. Este texto se incluye en el prompt del sistema de IA.`,placeholder:`Eres un asistente útil para el hogar inteligente. Sé conciso, amigable y práctico.
|
|
6
|
+
Céntrate en sugerencias prácticas. Usa un lenguaje sencillo.`,validation:{maxLength:`El texto de personalidad no debe exceder los 2000 caracteres`}}},message:{placeholder:`Escribe un mensaje...`}},texts:{loadingConfig:`Cargando configuración de Buddy...`,loadingConversations:`Cargando conversaciones...`,aboutBuddy:`Configura el asistente Buddy IA que observa tus acciones, aprende tus patrones y sugiere automatizaciones. Selecciona un plugin de proveedor de IA para habilitar la funcionalidad de chat. Los ajustes específicos del proveedor (clave API, modelo) se configuran en la página de configuración del plugin. Sin un proveedor, las sugerencias basadas en reglas seguirán funcionando.`,emptyChat:`Selecciona o crea una conversación para comenzar a chatear`,startConversation:`¡Pregúntame lo que quieras sobre tu hogar!`,thinking:`Pensando...`,newConversation:`Nueva conversación`,confirmDelete:`¿Eliminar esta conversación?`,providerNotConfigured:`Proveedor de IA no configurado`,providerNotConfiguredHint:`Configura un plugin de proveedor de IA para comenzar a chatear con tu Buddy.`,noProviderSelected:`No se ha seleccionado un proveedor de IA`,noProviderSelectedHint:`Selecciona y configura un proveedor de IA para comenzar. Usa el asistente de configuración para una configuración guiada.`,providerNotEnabled:`El proveedor {name} no está activado`,providerNotEnabledHint:`Actívalo en la configuración del plugin.`,providerMissingConfig:`El proveedor {name} necesita configuración`,providerMissingConfigHint:`Configura la clave API requerida o la conexión OAuth.`,availableProviders:`Proveedores disponibles`,configured:`Configurado`,notConfigured:`No configurado`,justNow:`ahora mismo`,minutesAgo:`hace {n}m`,hoursAgo:`hace {n}h`,daysAgo:`hace {n}d`,noSpace:`Sin espacio`,noActiveConversation:`Ninguna conversación seleccionada`,providersFetchFailed:`Error al cargar los proveedores disponibles. La lista de proveedores puede estar incompleta.`,sttProvidersFetchFailed:`Error al cargar los proveedores de reconocimiento de voz disponibles. La lista de proveedores puede estar incompleta.`,ttsProvidersFetchFailed:`Error al cargar los proveedores de síntesis de voz disponibles. La lista de proveedores puede estar incompleta.`,moduleDisabled:`El módulo Buddy está desactivado`,moduleDisabledHint:`El módulo Buddy IA está actualmente desactivado. Actívalo en la configuración del sistema para usar el chat y las sugerencias.`},wizard:{title:`Asistente de configuración de Buddy`,steps:{provider:`Proveedor de IA`,voice:`Voz`,messaging:`Mensajería`,done:`Listo`},providerDescription:`Elige un proveedor de IA para potenciar las capacidades de chat de tu Buddy. Cada proveedor requiere su propia clave API o credenciales.`,voiceDescription:`Opcionalmente configura las capacidades de voz. Text-to-Speech permite al Buddy leer las respuestas en voz alta. Speech-to-Text habilita la entrada de voz.`,messagingDescription:`Opcionalmente conecta plataformas de mensajería para chatear con tu Buddy de forma remota a través de Telegram, Discord, WhatsApp u otros servicios.`,noProvidersAvailable:`No hay plugins de proveedores de IA instalados. Instala un plugin de proveedor (ej. Claude, OpenAI, Ollama) para habilitar el chat con IA.`,configureProvider:`Configurar {name}`,configured:`Configurado`,needsSetup:`Necesita configuración`,disabled:`Desactivado`,configRequired:`Configuración requerida`,configSaved:`Configuración guardada correctamente`,saveError:`Error al guardar la configuración`,doneTitle:`Configuración completa`,doneDescription:`Tu Buddy está listo para usar. Siempre puedes cambiar estos ajustes más tarde en la página de configuración.`,summaryLlm:`Proveedor de IA: {name}`,summaryLlmSkipped:`Proveedor de IA no seleccionado`,summaryVoice:`Voz: {summary}`,summaryVoiceSkipped:`Voz omitida`,summaryMessaging:`Mensajería: {name}`,summaryMessagingSkipped:`Mensajería omitida`,notSelected:`No seleccionado`,skipped:`Omitido`,ttsHeading:`Texto a voz (TTS)`,sttHeading:`Voz a texto (STT)`,buttons:{back:`Atrás`,next:`Siguiente`,skip:`Omitir`,configure:`Configurar`,saveConfig:`Guardar configuración`,startChatting:`Comenzar a chatear`}},meta:{settings:{title:`Configuración de Buddy`},chat:{title:`Chat de Buddy`}}},"pl-PL":{menu:{title:`Kumpel`},headings:{settings:`Kumpel`,chat:`Czat Buddy`,chats:`Czaty`,aboutBuddy:`Konfiguracja AI Buddy`},subHeadings:{settings:`Skonfiguruj ustawienia asystenta AI Buddy`,chat:`Rozmawiaj ze swoim asystentem AI Buddy`},messages:{loadError:`Nie udało się wczytać konfiguracji buddy`,config:{edited:`Konfiguracja buddy została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji buddy`},errors:{unexpectedError:`Wystąpił nieoczekiwany błąd`,loadConversations:`Nie udało się wczytać konwersacji`,createConversation:`Nie udało się utworzyć konwersacji`,loadMessages:`Nie udało się wczytać wiadomości`,providerUnavailable:`Dostawca AI jest tymczasowo niedostępny. Spróbuj ponownie później.`,sendMessage:`Nie udało się wysłać wiadomości`,deleteConversation:`Nie udało się usunąć konwersacji`,audioPlayback:`Nie udało się odtworzyć audio`,loadPersonality:`Nie udało się wczytać osobowości`,savePersonality:`Nie udało się zapisać osobowości`}},buttons:{save:{title:`Zapisz`},back:{title:`Wstecz`},retry:{title:`Ponów`},newChat:{title:`Nowy czat`},delete:{title:`Usuń`},cancel:{title:`Anuluj`},configure:{title:`Skonfiguruj dostawcę`},goToSettings:{title:`Przejdź do ustawień`},setupWizard:{title:`Kreator konfiguracji`}},fields:{config:{enabled:{title:`Włącz moduł`},name:{title:`Nazwa buddy`,placeholder:`Wprowadź nazwę buddy`},provider:{title:`Wtyczka dostawcy AI`,placeholder:`Wybierz wtyczkę dostawcy AI`,notConfigured:`nie skonfigurowano`,tags:{ruleBasedOnly:`tylko oparte na regułach`},options:{none:`Brak`}},voiceEnabled:{title:`Interfejs głosowy`,description:`Włącz rozpoznawanie mowy i syntezę głosu do bezręcznej interakcji z asystentem`},sttPlugin:{title:`Dostawca rozpoznawania mowy (Speech-to-Text)`,placeholder:`Wybierz dostawcę rozpoznawania mowy`,notConfigured:`nie skonfigurowano`,options:{none:`Brak`},tags:{disabled:`wyłączony`}},ttsPlugin:{title:`Dostawca syntezy mowy (Text-to-Speech)`,placeholder:`Wybierz dostawcę syntezy mowy`,notConfigured:`nie skonfigurowano`,options:{none:`Brak`},tags:{disabled:`wyłączony`}},personality:{title:`Osobowość`,description:`Zdefiniuj ton, styl i osobowość buddy. Ten tekst jest dołączany do systemowego promptu AI.`,placeholder:`Jesteś pomocnym asystentem inteligentnego domu. Bądź zwięzły, przyjazny i praktyczny.
|
|
7
|
+
Skup się na praktycznych sugestiach. Używaj prostego języka.`,validation:{maxLength:`Tekst osobowości nie może przekraczać 2000 znaków`}}},message:{placeholder:`Wpisz wiadomość...`}},texts:{loadingConfig:`Ładowanie konfiguracji buddy...`,loadingConversations:`Ładowanie konwersacji...`,aboutBuddy:`Skonfiguruj asystenta AI buddy, który obserwuje Twoje działania, uczy się Twoich wzorców i sugeruje automatyzacje. Wybierz wtyczkę dostawcy AI, aby włączyć funkcję czatu. Ustawienia specyficzne dla dostawcy (klucz API, model) konfiguruje się na stronie ustawień wtyczki. Bez dostawcy sugestie oparte na regułach nadal będą działać.`,emptyChat:`Wybierz lub utwórz konwersację, aby rozpocząć czat`,startConversation:`Zapytaj mnie o cokolwiek dotyczącego Twojego domu!`,thinking:`Myślę...`,newConversation:`Nowa konwersacja`,confirmDelete:`Usunąć tę konwersację?`,providerNotConfigured:`Dostawca AI nie jest skonfigurowany`,providerNotConfiguredHint:`Skonfiguruj wtyczkę dostawcy AI, aby rozpocząć czat z buddy.`,noProviderSelected:`Nie wybrano dostawcy AI`,noProviderSelectedHint:`Wybierz i skonfiguruj dostawcę AI, aby rozpocząć. Użyj kreatora konfiguracji dla wspomaganych instrukcji.`,providerNotEnabled:`Dostawca {name} nie jest włączony`,providerNotEnabledHint:`Włącz go w konfiguracji wtyczki.`,providerMissingConfig:`Dostawca {name} wymaga konfiguracji`,providerMissingConfigHint:`Ustaw wymagany klucz API lub połączenie OAuth.`,availableProviders:`Dostępni dostawcy`,configured:`Skonfigurowany`,notConfigured:`Nie skonfigurowany`,justNow:`właśnie teraz`,minutesAgo:`{n}min temu`,hoursAgo:`{n}godz. temu`,daysAgo:`{n}dn. temu`,noSpace:`Brak przestrzeni`,noActiveConversation:`Nie wybrano konwersacji`,providersFetchFailed:`Nie udało się wczytać dostępnych dostawców. Lista dostawców może być niekompletna.`,sttProvidersFetchFailed:`Nie udało się wczytać dostępnych dostawców rozpoznawania mowy. Lista dostawców może być niekompletna.`,ttsProvidersFetchFailed:`Nie udało się wczytać dostępnych dostawców syntezy mowy. Lista dostawców może być niekompletna.`,moduleDisabled:`Moduł Buddy jest wyłączony`,moduleDisabledHint:`Moduł AI buddy jest aktualnie wyłączony. Włącz go w konfiguracji systemu, aby korzystać z czatu i sugestii.`},wizard:{title:`Kreator konfiguracji Buddy`,steps:{provider:`Dostawca AI`,voice:`Głos`,messaging:`Wiadomości`,done:`Gotowe`},providerDescription:`Wybierz dostawcę AI, aby zasilić możliwości czatu buddy. Każdy dostawca wymaga własnego klucza API lub danych uwierzytelniających.`,voiceDescription:`Opcjonalnie skonfiguruj możliwości głosowe. Text-to-Speech pozwala buddy odczytywać odpowiedzi na głos. Speech-to-Text włącza wprowadzanie głosowe.`,messagingDescription:`Opcjonalnie podłącz platformy komunikacyjne, aby czatować z buddy zdalnie przez Telegram, Discord, WhatsApp lub inne usługi.`,noProvidersAvailable:`Nie zainstalowano żadnych wtyczek dostawców AI. Zainstaluj wtyczkę dostawcy (np. Claude, OpenAI, Ollama), aby włączyć czat AI.`,configureProvider:`Skonfiguruj {name}`,configured:`Skonfigurowany`,needsSetup:`Wymaga konfiguracji`,disabled:`Wyłączony`,configRequired:`Wymagana konfiguracja`,configSaved:`Konfiguracja została pomyślnie zapisana`,saveError:`Nie udało się zapisać konfiguracji`,doneTitle:`Konfiguracja zakończona`,doneDescription:`Twój buddy jest gotowy do użycia. Zawsze możesz zmienić te ustawienia później na stronie konfiguracji.`,summaryLlm:`Dostawca AI: {name}`,summaryLlmSkipped:`Nie wybrano dostawcy AI`,summaryVoice:`Głos: {summary}`,summaryVoiceSkipped:`Głos pominięty`,summaryMessaging:`Wiadomości: {name}`,summaryMessagingSkipped:`Wiadomości pominięte`,notSelected:`Nie wybrano`,skipped:`Pominięto`,ttsHeading:`Zamiana tekstu na mowę (TTS)`,sttHeading:`Zamiana mowy na tekst (STT)`,buttons:{back:`Wstecz`,next:`Dalej`,skip:`Pomiń`,configure:`Skonfiguruj`,saveConfig:`Zapisz konfigurację`,startChatting:`Rozpocznij czat`}},meta:{settings:{title:`Ustawienia Buddy`},chat:{title:`Czat Buddy`}}},"sk-SK":{menu:{title:`Kamarát`},headings:{settings:`Kamarát`,chat:`Buddy Chat`,chats:`Chaty`,aboutBuddy:`Konfigurácia AI Buddy`},subHeadings:{settings:`Konfigurácia nastavení AI buddy asistenta`,chat:`Chatujte so svojím AI buddy asistentom`},messages:{loadError:`Nepodarilo sa načítať konfiguráciu buddy`,config:{edited:`Konfigurácia buddy bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu buddy`},errors:{unexpectedError:`Vyskytla sa neočakávaná chyba`,loadConversations:`Nepodarilo sa načítať konverzácie`,createConversation:`Nepodarilo sa vytvoriť konverzáciu`,loadMessages:`Nepodarilo sa načítať správy`,providerUnavailable:`Poskytovateľ AI je dočasne nedostupný. Skúste to prosím neskôr.`,sendMessage:`Nepodarilo sa odoslať správu`,deleteConversation:`Nepodarilo sa odstrániť konverzáciu`,audioPlayback:`Nepodarilo sa prehrať zvuk`,loadPersonality:`Nepodarilo sa načítať osobnosť`,savePersonality:`Nepodarilo sa uložiť osobnosť`}},buttons:{save:{title:`Uložiť`},back:{title:`Späť`},retry:{title:`Skúsiť znova`},newChat:{title:`Nový chat`},delete:{title:`Odstrániť`},cancel:{title:`Zrušiť`},configure:{title:`Konfigurovať poskytovateľa`},goToSettings:{title:`Prejsť do nastavení`},setupWizard:{title:`Sprievodca nastavením`}},fields:{config:{enabled:{title:`Povoliť modul`},name:{title:`Meno buddy`,placeholder:`Zadajte meno buddy`},provider:{title:`Plugin poskytovateľa AI`,placeholder:`Vyberte plugin poskytovateľa AI`,notConfigured:`nie je nakonfigurovaný`,tags:{ruleBasedOnly:`iba pravidlové`},options:{none:`Žiadny`}},voiceEnabled:{title:`Hlasové rozhranie`,description:`Povoliť rozpoznávanie reči a hlasovú syntézu pre interakciu s asistentom bez použitia rúk`},sttPlugin:{title:`Poskytovateľ rozpoznávania reči (Speech-to-Text)`,placeholder:`Vyberte poskytovateľa rozpoznávania reči`,notConfigured:`nie je nakonfigurovaný`,options:{none:`Žiadny`},tags:{disabled:`zakázaný`}},ttsPlugin:{title:`Poskytovateľ hlasovej syntézy (Text-to-Speech)`,placeholder:`Vyberte poskytovateľa hlasovej syntézy`,notConfigured:`nie je nakonfigurovaný`,options:{none:`Žiadny`},tags:{disabled:`zakázaný`}},personality:{title:`Osobnosť`,description:`Definujte tón, štýl a osobnosť buddy. Tento text je zahrnutý v systémovom prompte AI.`,placeholder:`Ste užitočný asistent inteligentnej domácnosti. Buďte struční, priateľskí a praktickí.
|
|
8
|
+
Zamerajte sa na použiteľné návrhy. Používajte jednoduchý jazyk.`,validation:{maxLength:`Text osobnosti nesmie presiahnuť 2000 znakov`}}},message:{placeholder:`Napíšte správu...`}},texts:{loadingConfig:`Načítavanie konfigurácie buddy...`,loadingConversations:`Načítavanie konverzácií...`,aboutBuddy:`Nakonfigurujte AI buddy asistenta, ktorý sleduje vaše akcie, učí sa vaše vzorce a navrhuje automatizácie. Vyberte plugin poskytovateľa AI na povolenie funkcie chatu. Nastavenia špecifické pre poskytovateľa (API kľúč, model) sa konfigurujú na stránke nastavení pluginu. Bez poskytovateľa budú stále fungovať pravidlové návrhy.`,emptyChat:`Vyberte alebo vytvorte konverzáciu na začatie chatovania`,startConversation:`Opýtajte sa ma čokoľvek o vašej domácnosti!`,thinking:`Premýšľam...`,newConversation:`Nová konverzácia`,confirmDelete:`Odstrániť túto konverzáciu?`,providerNotConfigured:`Poskytovateľ AI nie je nakonfigurovaný`,providerNotConfiguredHint:`Nakonfigurujte plugin poskytovateľa AI na začatie chatovania s vaším buddy.`,noProviderSelected:`Nie je vybraný žiadny poskytovateľ AI`,noProviderSelectedHint:`Vyberte a nakonfigurujte poskytovateľa AI na začatie. Použite Sprievodcu nastavením pre riadenú konfiguráciu.`,providerNotEnabled:`Poskytovateľ {name} nie je povolený`,providerNotEnabledHint:`Povoľte ho v konfigurácii pluginu.`,providerMissingConfig:`Poskytovateľ {name} potrebuje konfiguráciu`,providerMissingConfigHint:`Nastavte požadovaný API kľúč alebo OAuth pripojenie.`,availableProviders:`Dostupní poskytovatelia`,configured:`Nakonfigurovaný`,notConfigured:`Nie je nakonfigurovaný`,justNow:`práve teraz`,minutesAgo:`pred {n}m`,hoursAgo:`pred {n}h`,daysAgo:`pred {n}d`,noSpace:`Žiadny priestor`,noActiveConversation:`Žiadna konverzácia nie je vybraná`,providersFetchFailed:`Nepodarilo sa načítať dostupných poskytovateľov. Zoznam poskytovateľov môže byť neúplný.`,sttProvidersFetchFailed:`Nepodarilo sa načítať dostupných poskytovateľov rozpoznávania reči. Zoznam poskytovateľov môže byť neúplný.`,ttsProvidersFetchFailed:`Nepodarilo sa načítať dostupných poskytovateľov hlasovej syntézy. Zoznam poskytovateľov môže byť neúplný.`,moduleDisabled:`Modul Buddy je zakázaný`,moduleDisabledHint:`Modul AI buddy je momentálne zakázaný. Povoľte ho v konfigurácii systému na používanie chatu a návrhov.`},wizard:{title:`Sprievodca nastavením Buddy`,steps:{provider:`Poskytovateľ AI`,voice:`Hlas`,messaging:`Správy`,done:`Hotovo`},providerDescription:`Vyberte poskytovateľa AI na poháňanie chatových schopností vášho buddy. Každý poskytovateľ vyžaduje vlastný API kľúč alebo prihlasovacie údaje.`,voiceDescription:`Voliteľne nakonfigurujte hlasové schopnosti. Text-to-Speech umožní buddy čítať odpovede nahlas. Speech-to-Text povolí hlasový vstup.`,messagingDescription:`Voliteľne pripojte komunikačné platformy na chatovanie s vaším buddy na diaľku cez Telegram, Discord, WhatsApp alebo iné služby.`,noProvidersAvailable:`Nie sú nainštalované žiadne pluginy poskytovateľov AI. Nainštalujte plugin poskytovateľa (napr. Claude, OpenAI, Ollama) na povolenie AI chatu.`,configureProvider:`Konfigurovať {name}`,configured:`Nakonfigurovaný`,needsSetup:`Vyžaduje nastavenie`,disabled:`Zakázaný`,configRequired:`Vyžaduje sa konfigurácia`,configSaved:`Konfigurácia bola úspešne uložená`,saveError:`Nepodarilo sa uložiť konfiguráciu`,doneTitle:`Nastavenie dokončené`,doneDescription:`Váš buddy je pripravený na použitie. Tieto nastavenia môžete kedykoľvek zmeniť na konfiguračnej stránke.`,summaryLlm:`Poskytovateľ AI: {name}`,summaryLlmSkipped:`Poskytovateľ AI nebol vybraný`,summaryVoice:`Hlas: {summary}`,summaryVoiceSkipped:`Hlas preskočený`,summaryMessaging:`Správy: {name}`,summaryMessagingSkipped:`Správy preskočené`,notSelected:`Nevybraný`,skipped:`Preskočený`,ttsHeading:`prevod textu na reč (TTS)`,sttHeading:`prevod reči na text (STT)`,buttons:{back:`Späť`,next:`Ďalej`,skip:`Preskočiť`,configure:`Konfigurovať`,saveConfig:`Uložiť konfiguráciu`,startChatting:`Začať chatovať`}},meta:{settings:{title:`Nastavenia Buddy`},chat:{title:`Buddy Chat`}}}},tm=[{path:`buddy`,name:Ei.BUDDY,component:()=>hr(()=>import(`./view-buddy-chat-DpaYzexP.js`),__vite__mapDeps([47,2,3,4,11,5,6,7,48,19,49,17,15,22,23,50,51,33,24,52,40,53,54,55,56])),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`buddyModule.menu.title`),icon:`mdi:robot-happy`,menu:1e4,module:Ti}}],nm=Li.extend({name:X().optional().default(`Buddy`),provider:X().optional().default(`none`),sttPlugin:X().optional().default(`none`),ttsPlugin:X().optional().default(`none`),voiceEnabled:J().optional().default(!1)}),rm=Bi.extend({type:Y(Ti),name:X().optional().default(`Buddy`),provider:X().optional().default(`none`),sttPlugin:X().optional().default(`none`),ttsPlugin:X().optional().default(`none`),voiceEnabled:J().optional().default(!1)}),im=qi.and(K({type:Y(Ti),name:X().optional(),provider:X().optional(),stt_plugin:X().optional(),tts_plugin:X().optional(),voice_enabled:J().optional()}));zi.and(K({type:Y(Ti),name:X().optional(),provider:X().optional(),stt_plugin:X().optional(),tts_plugin:X().optional(),voice_enabled:J().optional()}));var am=Symbol(`FB-Module-Buddy`),om={install:(e,t)=>{let n=ea(e);for(let[e,n]of Object.entries(em)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyModule:n});t.i18n.global.setLocaleMessage(e,r)}n.addModule(am,{type:Ti,name:`Buddy`,description:`AI assistant that observes actions, learns patterns, and suggests automations.`,elements:[{type:Oa,components:{moduleConfigEditForm:$p},schemas:{moduleConfigSchema:rm,moduleConfigEditFormSchema:nm,moduleConfigUpdateReqSchema:im},modules:[ka]}],modules:[ka],isCore:!0}),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&tm.forEach(e=>{t.router.addRoute(Te.ROOT,e)})}},sm=`energy-module`,cm=Symbol(`FB-Module-Energy`),lm={install:(e,t)=>{ea(e).addModule(cm,{type:sm,name:`Energy`,description:`Energy consumption and production monitoring with per-space tracking and historical analysis`,elements:[],isCore:!0})}},um={"cs-CZ":{menu:{title:`Rozšíření`},meta:{extensions:{list:{title:`Seznam rozšíření`},detail:{title:`Rozšíření: {extension}`}}},headings:{list:`Rozšíření`,detail:`Detail rozšíření`,adjustFilters:`Upravit filtry`,bulkEnable:`Povolit rozšíření`,bulkDisable:`Zakázat rozšíření`},subHeadings:{list:`Spravujte moduly a pluginy aplikace`,detail:`Zobrazit informace a konfiguraci rozšíření`,adjustFilters:`Filtrovat rozšíření podle různých kritérií`},breadcrumbs:{extensions:{list:`rozšíření`,detail:`rozšíření: {extension}`}},tabs:{all:`Všechna rozšíření`,modules:`Moduly`,plugins:`Pluginy`,services:`Služby`},labels:{module:`Modul`,plugin:`Plugin`,core:`Jádro`,addon:`Doplněk`,enabled:`Povoleno`,disabled:`Zakázáno`,version:`Verze`,author:`Autor`,type:`Typ`,kind:`Druh`,source:`Zdroj`,status:`Stav`,configuration:`Konfigurace`,description:`Popis`,details:`Podrobnosti`,links:`Odkazy`,readme:`O rozšíření`,documentation:`Dokumentace`,logs:`Protokoly`,live:`Živě`},fields:{search:{placeholder:`Hledat rozšíření...`}},filters:{kind:{title:`Druh`},enabled:{title:`Stav`},type:{title:`Typ`}},states:{all:`Vše`},table:{columns:{name:{title:`Název`},type:{title:`Typ`},kind:{title:`Druh`},version:{title:`Verze`},core:{title:`Jádro`},enabled:{title:`Povoleno`}}},texts:{loadingExtensions:`Načítání rozšíření...`,noExtensions:`Žádná rozšíření nejsou nainstalována`,noFilteredExtensions:`Žádná rozšíření neodpovídají aktuálním filtrům`,logs:{noLogs:`Žádné protokoly nejsou k dispozici`,noLogsDescription:`Toto rozšíření dosud nevytvořilo žádné záznamy`,noFilteredLogs:`Žádné protokoly neodpovídají aktuálním filtrům`,noMessage:`Žádná zpráva`,noMoreEntries:`Žádné další záznamy`,allLevels:`Všechny úrovně`,timeRange:{all:`Celé období`,"1h":`Poslední 1 hodina`,"6h":`Posledních 6 hodin`,"24h":`Posledních 24 hodin`,"7d":`Posledních 7 dní`},detail:`Podrobnosti protokolu`}},buttons:{actions:`Akce`,documentation:`Dokumentace`,repository:`Repozitář`,issues:`Problémy`,enable:`Povolit`,disable:`Zakázat`,remove:`Odebrat`,configure:`Konfigurovat`,viewDetails:`Zobrazit podrobnosti`,refresh:`Obnovit`,loadMore:`Načíst další`,detail:{title:`Detail`},reset:{title:`Resetovat filtry`},resetFilters:{title:`Resetovat filtry`},yes:`Ano`,no:`Ne`},tooltips:{coreCannotBeRemoved:`Rozšíření jádra nelze odebrat`,coreModuleCannotBeDisabled:`Moduly jádra nelze zakázat`,removeNotSupported:`Odebrání rozšíření zatím není podporováno`,cannotToggleEnabled:`Toto rozšíření nelze povolit/zakázat`,openConfiguration:`Otevřít konfiguraci rozšíření`},messages:{noExtensions:`Žádná rozšíření nebyla nalezena`,noDescription:`Popis není k dispozici`,extensionEnabled:`Rozšíření bylo povoleno`,extensionDisabled:`Rozšíření bylo zakázáno`,updateError:`Nepodařilo se aktualizovat rozšíření`,coreExtensionError:`Rozšíření jádra nelze upravovat`,notConfigurableError:`Toto rozšíření nepodporuje povolení/zakázání`,loadError:`Nepodařilo se načíst rozšíření`,noMatchingExtensions:`Žádná rozšíření neodpovídají vašim filtrům`,confirmBulkEnable:`Opravdu chcete povolit {count} rozšíření?`,confirmBulkDisable:`Opravdu chcete zakázat {count} rozšíření?`,bulkEnabled:`{count} rozšíření bylo povoleno`,bulkDisabled:`{count} rozšíření bylo zakázáno`,bulkEnableFailed:`Nepodařilo se povolit {count} rozšíření`,bulkDisableFailed:`Nepodařilo se zakázat {count} rozšíření`,bulkEnableCanceled:`Hromadné povolení bylo zrušeno`,bulkDisableCanceled:`Hromadné zakázání bylo zrušeno`,noExtensionsToEnable:`Žádná rozšíření k povolení (všechna vybraná jsou již povolena nebo je nelze přepnout)`,noExtensionsToDisable:`Žádná rozšíření k zakázání (všechna vybraná jsou již zakázána nebo je nelze přepnout)`},actions:{labels:{tab:`Akce`,category:{general:`Obecné`,simulation:`Simulace`,data:`Data`,diagnostics:`Diagnostika`,maintenance:`Údržba`},required:`Povinné`,dangerous:`Nebezpečné`,comingSoon:`Již brzy`,history:`Historie ({count})`},buttons:{run:`Spustit`,confirm:`Potvrdit`,cancel:`Zrušit`},messages:{success:`Akce byla úspěšně dokončena`,error:`Akce selhala`,confirmDangerous:`Tato akce může mít významné dopady. Opravdu chcete pokračovat?`,noActions:`Pro toto rozšíření nejsou k dispozici žádné akce`,interactiveNotAvailable:`Interaktivní akce budou dostupné v budoucí aktualizaci`,insufficientPermissions:`Nemáte oprávnění ke spouštění této akce`,loading:`Načítání akcí...`}},services:{headings:{list:`Spravované služby`,subHeading:`Monitorujte a ovládejte služby modulů a pluginů`,modules:`Moduly`,plugins:`Pluginy`},labels:{pluginName:`Plugin`,serviceId:`Služba`,state:`Stav`,enabled:`Povoleno`,disabled:`Zakázáno`,healthy:`V pořádku`,unhealthy:`Nefunkční`,uptime:`Doba běhu`,startCount:`Počet spuštění`,lastStarted:`Naposledy spuštěno`,lastStopped:`Naposledy zastaveno`,lastError:`Poslední chyba`,desiredState:`Požadovaný stav`},activationPolicies:{always:`Vždy aktivní`},desiredStates:{started:`Spuštěno`,stopped:`Zastaveno`},states:{stopped:`Zastaveno`,starting:`Spouštění`,started:`Běží`,stopping:`Zastavování`,error:`Chyba`},buttons:{start:`Spustit`,stop:`Zastavit`,restart:`Restartovat`,refresh:`Obnovit`},messages:{started:`Služba byla spuštěna`,serviceStarting:`Služba se spouští — může chvíli trvat, než bude plně připravena`,stopped:`Služba byla zastavena`,restarted:`Služba byla restartována`,startError:`Nepodařilo se spustit službu`,stopError:`Nepodařilo se zastavit službu`,restartError:`Nepodařilo se restartovat službu`,loadError:`Nepodařilo se načíst služby`,noServices:`Žádné služby nejsou k dispozici`},tooltips:{disabledExtension:`Rozšíření je zakázáno`,transitioning:`Služba přechází do jiného stavu`,startService:`Spustit tuto službu`,stopService:`Zastavit tuto službu`,restartService:`Restartovat tuto službu`},texts:{loadingServices:`Načítání služeb...`,noServices:`Nebyly nalezeny žádné spravované služby`,extensionDisabled:`Rozšíření zakázáno`,alwaysActiveDescription:`Vždy aktivní služby zůstávají spuštěné i při zakázaném rozšíření, aby zůstalo dostupné vyhledávání a nastavení.`}}},"de-DE":{menu:{title:`Erweiterungen`},meta:{extensions:{list:{title:`Erweiterungen auflisten`},detail:{title:`Erweiterung: {extension}`}}},headings:{list:`Erweiterungen`,detail:`Erweiterungsdetails`,adjustFilters:`Filter anpassen`,bulkEnable:`Erweiterungen aktivieren`,bulkDisable:`Erweiterungen deaktivieren`},subHeadings:{list:`Anwendungsmodule und -plugins verwalten`,detail:`Erweiterungsinformationen und -konfiguration anzeigen`,adjustFilters:`Erweiterungen nach verschiedenen Kriterien filtern`},breadcrumbs:{extensions:{list:`Erweiterungen`,detail:`Erweiterung: {extension}`}},tabs:{all:`Alle Erweiterungen`,modules:`Module`,plugins:`Plugins`,services:`Dienste`},labels:{module:`Modul`,plugin:`Plugin`,core:`Kern`,addon:`Erweiterung`,enabled:`Aktiviert`,disabled:`Deaktiviert`,version:`Version`,author:`Autor`,type:`Typ`,kind:`Art`,source:`Quelle`,status:`Status`,configuration:`Konfiguration`,description:`Beschreibung`,details:`Einzelheiten`,links:`Links`,readme:`Über`,documentation:`Dokumentation`,logs:`Protokolle`,live:`Live`},fields:{search:{placeholder:`Erweiterungen suchen...`}},filters:{kind:{title:`Art`},enabled:{title:`Status`},type:{title:`Typ`}},states:{all:`Alle`},table:{columns:{name:{title:`Name`},type:{title:`Typ`},kind:{title:`Art`},version:{title:`Version`},core:{title:`Kern`},enabled:{title:`Aktiviert`}}},texts:{loadingExtensions:`Erweiterungen werden geladen...`,noExtensions:`Keine Erweiterungen installiert`,noFilteredExtensions:`Keine Erweiterungen entsprechen Ihren aktuellen Filtern`,logs:{noLogs:`Keine Protokolle verfügbar`,noLogsDescription:`Diese Erweiterung hat noch keine Protokolleinträge erzeugt`,noFilteredLogs:`Keine Protokolle entsprechen Ihren aktuellen Filtern`,noMessage:`Keine Nachricht`,noMoreEntries:`Keine weiteren Protokolleinträge`,allLevels:`Alle Stufen`,timeRange:{all:`Gesamte Zeit`,"1h":`Letzte 1 Stunde`,"6h":`Letzte 6 Stunden`,"24h":`Letzte 24 Stunden`,"7d":`Letzte 7 Tage`},detail:`Protokoll-Detail`}},buttons:{actions:`Aktionen`,documentation:`Doku`,repository:`Repository`,issues:`Probleme`,enable:`Aktivieren`,disable:`Deaktivieren`,remove:`Entfernen`,configure:`Konfigurieren`,viewDetails:`Details anzeigen`,refresh:`Aktualisieren`,loadMore:`Mehr laden`,detail:{title:`Details`},reset:{title:`Filter zurücksetzen`},resetFilters:{title:`Filter zurücksetzen`},yes:`Ja`,no:`Nein`},tooltips:{coreCannotBeRemoved:`Kernerweiterungen können nicht entfernt werden`,coreModuleCannotBeDisabled:`Kernmodule können nicht deaktiviert werden`,removeNotSupported:`Entfernung von Erweiterungen wird noch nicht unterstützt`,cannotToggleEnabled:`Diese Erweiterung kann nicht aktiviert/deaktiviert werden`,openConfiguration:`Erweiterungskonfiguration öffnen`},messages:{noExtensions:`Keine Erweiterungen gefunden`,noDescription:`Keine Beschreibung verfügbar`,extensionEnabled:`Erweiterung wurde aktiviert`,extensionDisabled:`Erweiterung wurde deaktiviert`,updateError:`Aktualisierung der Erweiterung fehlgeschlagen`,coreExtensionError:`Kernerweiterungen können nicht geändert werden`,notConfigurableError:`Diese Erweiterung unterstützt kein Aktivieren/Deaktivieren`,loadError:`Erweiterungen konnten nicht geladen werden`,noMatchingExtensions:`Keine Erweiterungen entsprechen Ihren Filtern`,confirmBulkEnable:`Sind Sie sicher, dass Sie {count} Erweiterung(en) aktivieren möchten?`,confirmBulkDisable:`Sind Sie sicher, dass Sie {count} Erweiterung(en) deaktivieren möchten?`,bulkEnabled:`{count} Erweiterung(en) wurden aktiviert`,bulkDisabled:`{count} Erweiterung(en) wurden deaktiviert`,bulkEnableFailed:`Aktivierung von {count} Erweiterung(en) fehlgeschlagen`,bulkDisableFailed:`Deaktivierung von {count} Erweiterung(en) fehlgeschlagen`,bulkEnableCanceled:`Massenaktivierung wurde abgebrochen`,bulkDisableCanceled:`Massendeaktivierung wurde abgebrochen`,noExtensionsToEnable:`Keine Erweiterungen zum Aktivieren (alle ausgewählten sind bereits aktiviert oder können nicht umgeschaltet werden)`,noExtensionsToDisable:`Keine Erweiterungen zum Deaktivieren (alle ausgewählten sind bereits deaktiviert oder können nicht umgeschaltet werden)`},actions:{labels:{tab:`Aktionen`,category:{general:`Allgemein`,simulation:`Simulation`,data:`Daten`,diagnostics:`Diagnose`,maintenance:`Wartung`},required:`Erforderlich`,dangerous:`Gefährlich`,comingSoon:`Demnächst`,history:`Verlauf ({count})`},buttons:{run:`Ausführen`,confirm:`Bestätigen`,cancel:`Abbrechen`},messages:{success:`Aktion erfolgreich abgeschlossen`,error:`Aktion fehlgeschlagen`,confirmDangerous:`Diese Aktion kann erhebliche Auswirkungen haben. Sind Sie sicher, dass Sie fortfahren möchten?`,noActions:`Keine Aktionen für diese Erweiterung verfügbar`,interactiveNotAvailable:`Interaktive Aktionen werden in einem zukünftigen Update verfügbar sein`,insufficientPermissions:`Sie haben keine Berechtigung, diese Aktion auszuführen`,loading:`Aktionen werden geladen...`}},services:{headings:{list:`Verwaltete Dienste`,subHeading:`Modul- und Plugin-Dienste überwachen und steuern`,modules:`Module`,plugins:`Plugins`},labels:{pluginName:`Plugin`,serviceId:`Dienst`,state:`Status`,enabled:`Aktiviert`,disabled:`Deaktiviert`,healthy:`Gesund`,unhealthy:`Fehlerhaft`,uptime:`Betriebszeit`,startCount:`Beginnt`,lastStarted:`Zuletzt gestartet`,lastStopped:`Zuletzt gestoppt`,lastError:`Letzter Fehler`,desiredState:`Gewünschter Status`},activationPolicies:{always:`Immer aktiv`},desiredStates:{started:`Aktiv`,stopped:`Gestoppt`},states:{stopped:`Gestoppt`,starting:`Startet`,started:`Aktiv`,stopping:`Stoppt`,error:`Fehler`},buttons:{start:`Starten`,stop:`Stoppen`,restart:`Neustarten`,refresh:`Aktualisieren`},messages:{started:`Dienst wurde gestartet`,serviceStarting:`Dienst wird gestartet — es kann einen Moment dauern, bis er vollständig bereit ist`,stopped:`Dienst wurde gestoppt`,restarted:`Dienst wurde neu gestartet`,startError:`Dienst konnte nicht gestartet werden`,stopError:`Dienst konnte nicht gestoppt werden`,restartError:`Dienst konnte nicht neu gestartet werden`,loadError:`Dienste konnten nicht geladen werden`,noServices:`Keine Dienste verfügbar`},tooltips:{disabledExtension:`Erweiterung ist deaktiviert`,transitioning:`Dienst wechselt den Zustand`,startService:`Diesen Dienst starten`,stopService:`Diesen Dienst stoppen`,restartService:`Diesen Dienst neu starten`},texts:{loadingServices:`Dienste werden geladen...`,noServices:`Keine verwalteten Dienste gefunden`,extensionDisabled:`Erweiterung deaktiviert`,alwaysActiveDescription:`Immer aktive Dienste laufen weiter, auch wenn ihre Erweiterung deaktiviert ist, damit Erkennung und Einrichtung verfügbar bleiben.`}}},"en-US":{menu:{title:`Extensions`},meta:{extensions:{list:{title:`List extensions`},detail:{title:`Extension: {extension}`}}},headings:{list:`Extensions`,detail:`Extension Detail`,adjustFilters:`Adjust Filters`,bulkEnable:`Enable extensions`,bulkDisable:`Disable extensions`},subHeadings:{list:`Manage your application modules and plugins`,detail:`View extension information and configuration`,adjustFilters:`Filter extensions by various criteria`},breadcrumbs:{extensions:{list:`extensions`,detail:`extension: {extension}`}},tabs:{all:`All Extensions`,modules:`Modules`,plugins:`Plugins`,services:`Services`},labels:{module:`Module`,plugin:`Plugin`,core:`Core`,addon:`Add-on`,enabled:`Enabled`,disabled:`Disabled`,version:`Version`,author:`Author`,type:`Type`,kind:`Kind`,source:`Source`,status:`Status`,configuration:`Configuration`,description:`Description`,details:`Details`,links:`Links`,readme:`About`,documentation:`Documentation`,logs:`Logs`,live:`Live`},fields:{search:{placeholder:`Search extensions...`}},filters:{kind:{title:`Kind`},enabled:{title:`Status`},type:{title:`Type`}},states:{all:`All`},table:{columns:{name:{title:`Name`},type:{title:`Type`},kind:{title:`Kind`},version:{title:`Version`},core:{title:`Core`},enabled:{title:`Enabled`}}},texts:{loadingExtensions:`Loading extensions...`,noExtensions:`No extensions installed`,noFilteredExtensions:`No extensions match your current filters`,logs:{detail:`Log detail`,noLogs:`No logs available`,noLogsDescription:`This extension has not produced any log entries yet`,noFilteredLogs:`No logs match your current filters`,noMessage:`No message`,noMoreEntries:`No more log entries`,allLevels:`All levels`,timeRange:{all:`All time`,"1h":`Last 1 hour`,"6h":`Last 6 hours`,"24h":`Last 24 hours`,"7d":`Last 7 days`}}},buttons:{actions:`Actions`,documentation:`Docs`,repository:`Repository`,issues:`Issues`,enable:`Enable`,disable:`Disable`,remove:`Remove`,configure:`Configure`,viewDetails:`View Details`,refresh:`Refresh`,loadMore:`Load More`,detail:{title:`Detail`},reset:{title:`Reset Filters`},resetFilters:{title:`Reset Filters`},yes:`Yes`,no:`No`},tooltips:{coreCannotBeRemoved:`Core extensions cannot be removed`,coreModuleCannotBeDisabled:`Core modules cannot be disabled`,removeNotSupported:`Extension removal is not yet supported`,cannotToggleEnabled:`This extension cannot be enabled/disabled`,openConfiguration:`Open extension configuration`},messages:{noExtensions:`No extensions found`,noDescription:`No description available`,extensionEnabled:`Extension has been enabled`,extensionDisabled:`Extension has been disabled`,updateError:`Failed to update extension`,coreExtensionError:`Core extensions cannot be modified`,notConfigurableError:`This extension does not support enable/disable`,loadError:`Failed to load extensions`,noMatchingExtensions:`No extensions match your filters`,confirmBulkEnable:`Are you sure you want to enable {count} extension(s)?`,confirmBulkDisable:`Are you sure you want to disable {count} extension(s)?`,bulkEnabled:`{count} extension(s) have been enabled`,bulkDisabled:`{count} extension(s) have been disabled`,bulkEnableFailed:`Failed to enable {count} extension(s)`,bulkDisableFailed:`Failed to disable {count} extension(s)`,bulkEnableCanceled:`Bulk enable was canceled`,bulkDisableCanceled:`Bulk disable was canceled`,noExtensionsToEnable:`No extensions to enable (all selected are already enabled or cannot be toggled)`,noExtensionsToDisable:`No extensions to disable (all selected are already disabled or cannot be toggled)`},actions:{labels:{tab:`Actions`,category:{general:`General`,simulation:`Simulation`,data:`Data`,diagnostics:`Diagnostics`,maintenance:`Maintenance`},required:`Required`,dangerous:`Dangerous`,comingSoon:`Coming soon`,history:`History ({count})`},buttons:{run:`Run`,confirm:`Confirm`,cancel:`Cancel`},messages:{success:`Action completed successfully`,error:`Action failed`,confirmDangerous:`This action may have significant effects. Are you sure you want to proceed?`,noActions:`No actions available for this extension`,interactiveNotAvailable:`Interactive actions will be available in a future update`,insufficientPermissions:`You don't have permission to execute this action`,loading:`Loading actions...`}},services:{headings:{list:`Managed Services`,subHeading:`Monitor and control module and plugin services`,modules:`Modules`,plugins:`Plugins`},labels:{pluginName:`Plugin`,serviceId:`Service`,state:`State`,enabled:`Enabled`,disabled:`Disabled`,healthy:`Healthy`,unhealthy:`Unhealthy`,uptime:`Uptime`,startCount:`Starts`,lastStarted:`Last Started`,lastStopped:`Last Stopped`,lastError:`Last Error`,desiredState:`Desired state`},activationPolicies:{always:`Always active`},desiredStates:{started:`Running`,stopped:`Stopped`},states:{stopped:`Stopped`,starting:`Starting`,started:`Running`,stopping:`Stopping`,error:`Error`},buttons:{start:`Start`,stop:`Stop`,restart:`Restart`,refresh:`Refresh`},messages:{started:`Service has been started`,serviceStarting:`Service is starting up — it may take a moment to become fully ready`,stopped:`Service has been stopped`,restarted:`Service has been restarted`,startError:`Failed to start service`,stopError:`Failed to stop service`,restartError:`Failed to restart service`,loadError:`Failed to load services`,noServices:`No services available`},tooltips:{disabledExtension:`Extension is disabled`,transitioning:`Service is transitioning`,startService:`Start this service`,stopService:`Stop this service`,restartService:`Restart this service`},texts:{loadingServices:`Loading services...`,noServices:`No managed services found`,extensionDisabled:`Extension disabled`,alwaysActiveDescription:`Always-active services keep running even when their owning extension is disabled, so discovery and setup remain available.`}}},"es-ES":{menu:{title:`Extensiones`},meta:{extensions:{list:{title:`Listar extensiones`},detail:{title:`Extensión: {extension}`}}},headings:{list:`Extensiones`,detail:`Detalle de extensión`,adjustFilters:`Ajustar filtros`,bulkEnable:`Activar extensiones`,bulkDisable:`Desactivar extensiones`},subHeadings:{list:`Gestiona los módulos y complementos de tu aplicación`,detail:`Ver información y configuración de la extensión`,adjustFilters:`Filtra extensiones por varios criterios`},breadcrumbs:{extensions:{list:`extensiones`,detail:`extensión: {extension}`}},tabs:{all:`Todas las extensiones`,modules:`Módulos`,plugins:`Complementos`,services:`Servicios`},labels:{module:`Módulo`,plugin:`Complemento`,core:`Núcleo`,addon:`Complemento`,enabled:`Activado`,disabled:`Desactivado`,version:`Versión`,author:`Autor`,type:`Tipo`,kind:`Clase`,source:`Origen`,status:`Estado`,configuration:`Configuración`,description:`Descripción`,details:`Detalles`,links:`Enlaces`,readme:`Acerca de`,documentation:`Documentación`,logs:`Registros`,live:`En vivo`},fields:{search:{placeholder:`Buscar extensiones...`}},filters:{kind:{title:`Clase`},enabled:{title:`Estado`},type:{title:`Tipo`}},states:{all:`Todos`},table:{columns:{name:{title:`Nombre`},type:{title:`Tipo`},kind:{title:`Clase`},version:{title:`Versión`},core:{title:`Núcleo`},enabled:{title:`Activado`}}},texts:{loadingExtensions:`Cargando extensiones...`,noExtensions:`No hay extensiones instaladas`,noFilteredExtensions:`Ninguna extensión coincide con los filtros actuales`,logs:{noLogs:`No hay registros disponibles`,noLogsDescription:`Esta extensión aún no ha producido ninguna entrada de registro`,noFilteredLogs:`Ningún registro coincide con los filtros actuales`,noMessage:`Sin mensaje`,noMoreEntries:`No hay más entradas de registro`,allLevels:`Todos los niveles`,timeRange:{all:`Todo el tiempo`,"1h":`Última hora`,"6h":`Últimas 6 horas`,"24h":`Últimas 24 horas`,"7d":`Últimos 7 días`},detail:`Detalle del registro`}},buttons:{actions:`Acciones`,documentation:`Documentos`,repository:`Repositorio`,issues:`Incidencias`,enable:`Activar`,disable:`Desactivar`,remove:`Eliminar`,configure:`Configurar`,viewDetails:`Ver detalles`,refresh:`Actualizar`,loadMore:`Cargar más`,detail:{title:`Detalle`},reset:{title:`Restablecer filtros`},resetFilters:{title:`Restablecer filtros`},yes:`Sí`,no:`No`},tooltips:{coreCannotBeRemoved:`Las extensiones del núcleo no se pueden eliminar`,coreModuleCannotBeDisabled:`Los módulos del núcleo no se pueden desactivar`,removeNotSupported:`La eliminación de extensiones aún no está disponible`,cannotToggleEnabled:`Esta extensión no se puede activar/desactivar`,openConfiguration:`Abrir configuración de la extensión`},messages:{noExtensions:`No se encontraron extensiones`,noDescription:`No hay descripción disponible`,extensionEnabled:`La extensión ha sido activada`,extensionDisabled:`La extensión ha sido desactivada`,updateError:`Error al actualizar la extensión`,coreExtensionError:`Las extensiones del núcleo no se pueden modificar`,notConfigurableError:`Esta extensión no admite activar/desactivar`,loadError:`Error al cargar las extensiones`,noMatchingExtensions:`Ninguna extensión coincide con los filtros`,confirmBulkEnable:`¿Estás seguro de que deseas activar {count} extensión(es)?`,confirmBulkDisable:`¿Estás seguro de que deseas desactivar {count} extensión(es)?`,bulkEnabled:`{count} extensión(es) han sido activadas`,bulkDisabled:`{count} extensión(es) han sido desactivadas`,bulkEnableFailed:`Error al activar {count} extensión(es)`,bulkDisableFailed:`Error al desactivar {count} extensión(es)`,bulkEnableCanceled:`La activación masiva ha sido cancelada`,bulkDisableCanceled:`La desactivación masiva ha sido cancelada`,noExtensionsToEnable:`No hay extensiones para activar (todas las seleccionadas ya están activadas o no se pueden cambiar)`,noExtensionsToDisable:`No hay extensiones para desactivar (todas las seleccionadas ya están desactivadas o no se pueden cambiar)`},actions:{labels:{tab:`Acciones`,category:{general:`General`,simulation:`Simulación`,data:`Datos`,diagnostics:`Diagnósticos`,maintenance:`Mantenimiento`},required:`Requerido`,dangerous:`Peligroso`,comingSoon:`Próximamente`,history:`Historial ({count})`},buttons:{run:`Ejecutar`,confirm:`Confirmar`,cancel:`Cancelar`},messages:{success:`Acción completada correctamente`,error:`La acción falló`,confirmDangerous:`Esta acción puede tener efectos significativos. ¿Estás seguro de que deseas continuar?`,noActions:`No hay acciones disponibles para esta extensión`,interactiveNotAvailable:`Las acciones interactivas estarán disponibles en una futura actualización`,insufficientPermissions:`No tiene permisos para ejecutar esta acción`,loading:`Cargando acciones...`}},services:{headings:{list:`Servicios gestionados`,subHeading:`Supervisa y controla los servicios de módulos y complementos`,modules:`Módulos`,plugins:`Complementos`},labels:{pluginName:`Complemento`,serviceId:`Servicio`,state:`Estado`,enabled:`Activado`,disabled:`Desactivado`,healthy:`Saludable`,unhealthy:`No saludable`,uptime:`Tiempo activo`,startCount:`Inicios`,lastStarted:`Último inicio`,lastStopped:`Última detención`,lastError:`Último error`,desiredState:`Estado deseado`},activationPolicies:{always:`Siempre activo`},desiredStates:{started:`En ejecución`,stopped:`Detenido`},states:{stopped:`Detenido`,starting:`Iniciando`,started:`En ejecución`,stopping:`Deteniéndose`,error:`Error`},buttons:{start:`Iniciar`,stop:`Detener`,restart:`Reiniciar`,refresh:`Actualizar`},messages:{started:`El servicio ha sido iniciado`,serviceStarting:`El servicio está iniciándose — puede tardar un momento en estar completamente listo`,stopped:`El servicio ha sido detenido`,restarted:`El servicio ha sido reiniciado`,startError:`Error al iniciar el servicio`,stopError:`Error al detener el servicio`,restartError:`Error al reiniciar el servicio`,loadError:`Error al cargar los servicios`,noServices:`No hay servicios disponibles`},tooltips:{disabledExtension:`La extensión está desactivada`,transitioning:`El servicio está en transición`,startService:`Iniciar este servicio`,stopService:`Detener este servicio`,restartService:`Reiniciar este servicio`},texts:{loadingServices:`Cargando servicios...`,noServices:`No se encontraron servicios gestionados`,extensionDisabled:`Extensión desactivada`,alwaysActiveDescription:`Los servicios siempre activos siguen funcionando aunque su extensión esté desactivada, para mantener disponibles el descubrimiento y la configuración.`}}},"pl-PL":{menu:{title:`Rozszerzenia`},meta:{extensions:{list:{title:`Lista rozszerzeń`},detail:{title:`Rozszerzenie: {extension}`}}},headings:{list:`Rozszerzenia`,detail:`Szczegóły rozszerzenia`,adjustFilters:`Dostosuj filtry`,bulkEnable:`Włącz rozszerzenia`,bulkDisable:`Wyłącz rozszerzenia`},subHeadings:{list:`Zarządzaj modułami i wtyczkami aplikacji`,detail:`Wyświetl informacje i konfigurację rozszerzenia`,adjustFilters:`Filtruj rozszerzenia według różnych kryteriów`},breadcrumbs:{extensions:{list:`rozszerzenia`,detail:`rozszerzenie: {extension}`}},tabs:{all:`Wszystkie rozszerzenia`,modules:`Moduły`,plugins:`Wtyczki`,services:`Usługi`},labels:{module:`Moduł`,plugin:`Wtyczka`,core:`Rdzeń`,addon:`Dodatek`,enabled:`Włączony`,disabled:`Wyłączony`,version:`Wersja`,author:`Autor`,type:`Typ`,kind:`Rodzaj`,source:`Źródło`,status:`Status`,configuration:`Konfiguracja`,description:`Opis`,details:`Szczegóły`,links:`Łącza`,readme:`O rozszerzeniu`,documentation:`Dokumentacja`,logs:`Logi`,live:`Na żywo`},fields:{search:{placeholder:`Szukaj rozszerzeń...`}},filters:{kind:{title:`Rodzaj`},enabled:{title:`Status`},type:{title:`Typ`}},states:{all:`Wszystkie`},table:{columns:{name:{title:`Nazwa`},type:{title:`Typ`},kind:{title:`Rodzaj`},version:{title:`Wersja`},core:{title:`Rdzeń`},enabled:{title:`Włączony`}}},texts:{loadingExtensions:`Ładowanie rozszerzeń...`,noExtensions:`Brak zainstalowanych rozszerzeń`,noFilteredExtensions:`Żadne rozszerzenia nie pasują do bieżących filtrów`,logs:{noLogs:`Brak dostępnych logów`,noLogsDescription:`To rozszerzenie nie wygenerowało jeszcze żadnych wpisów w logach`,noFilteredLogs:`Żadne logi nie pasują do bieżących filtrów`,noMessage:`Brak wiadomości`,noMoreEntries:`Brak więcej wpisów w logach`,allLevels:`Wszystkie poziomy`,timeRange:{all:`Cały czas`,"1h":`Ostatnia 1 godzina`,"6h":`Ostatnie 6 godzin`,"24h":`Ostatnie 24 godziny`,"7d":`Ostatnie 7 dni`},detail:`Szczegóły dziennika`}},buttons:{actions:`Akcje`,documentation:`Dokumentacja`,repository:`Repozytorium`,issues:`Problemy`,enable:`Włącz`,disable:`Wyłącz`,remove:`Usuń`,configure:`Skonfiguruj`,viewDetails:`Pokaż szczegóły`,refresh:`Odśwież`,loadMore:`Załaduj więcej`,detail:{title:`Szczegóły`},reset:{title:`Resetuj filtry`},resetFilters:{title:`Resetuj filtry`},yes:`Tak`,no:`Nie`},tooltips:{coreCannotBeRemoved:`Rozszerzenia rdzenne nie mogą być usunięte`,coreModuleCannotBeDisabled:`Moduły rdzenne nie mogą być wyłączone`,removeNotSupported:`Usuwanie rozszerzeń nie jest jeszcze obsługiwane`,cannotToggleEnabled:`To rozszerzenie nie może być włączone/wyłączone`,openConfiguration:`Otwórz konfigurację rozszerzenia`},messages:{noExtensions:`Nie znaleziono rozszerzeń`,noDescription:`Brak dostępnego opisu`,extensionEnabled:`Rozszerzenie zostało włączone`,extensionDisabled:`Rozszerzenie zostało wyłączone`,updateError:`Nie udało się zaktualizować rozszerzenia`,coreExtensionError:`Rozszerzenia rdzenne nie mogą być modyfikowane`,notConfigurableError:`To rozszerzenie nie obsługuje włączania/wyłączania`,loadError:`Nie udało się wczytać rozszerzeń`,noMatchingExtensions:`Żadne rozszerzenia nie pasują do filtrów`,confirmBulkEnable:`Czy na pewno chcesz włączyć {count} rozszerzeń?`,confirmBulkDisable:`Czy na pewno chcesz wyłączyć {count} rozszerzeń?`,bulkEnabled:`Włączono {count} rozszerzeń`,bulkDisabled:`Wyłączono {count} rozszerzeń`,bulkEnableFailed:`Nie udało się włączyć {count} rozszerzeń`,bulkDisableFailed:`Nie udało się wyłączyć {count} rozszerzeń`,bulkEnableCanceled:`Masowe włączanie zostało anulowane`,bulkDisableCanceled:`Masowe wyłączanie zostało anulowane`,noExtensionsToEnable:`Brak rozszerzeń do włączenia (wszystkie zaznaczone są już włączone lub nie można ich przełączyć)`,noExtensionsToDisable:`Brak rozszerzeń do wyłączenia (wszystkie zaznaczone są już wyłączone lub nie można ich przełączyć)`},actions:{labels:{tab:`Akcje`,category:{general:`Ogólne`,simulation:`Symulacja`,data:`Dane`,diagnostics:`Diagnostyka`,maintenance:`Konserwacja`},required:`Wymagane`,dangerous:`Niebezpieczne`,comingSoon:`Wkrótce`,history:`Historia ({count})`},buttons:{run:`Uruchom`,confirm:`Potwierdź`,cancel:`Anuluj`},messages:{success:`Akcja zakończona pomyślnie`,error:`Akcja nie powiodła się`,confirmDangerous:`Ta akcja może mieć znaczące konsekwencje. Czy na pewno chcesz kontynuować?`,noActions:`Brak dostępnych akcji dla tego rozszerzenia`,interactiveNotAvailable:`Akcje interaktywne będą dostępne w przyszłej aktualizacji`,insufficientPermissions:`Nie masz uprawnień do wykonania tej akcji`,loading:`Ładowanie akcji...`}},services:{headings:{list:`Zarządzane usługi`,subHeading:`Monitoruj i kontroluj usługi modułów i wtyczek`,modules:`Moduły`,plugins:`Wtyczki`},labels:{pluginName:`Wtyczka`,serviceId:`Usługa`,state:`Stan`,enabled:`Włączony`,disabled:`Wyłączony`,healthy:`Sprawny`,unhealthy:`Niesprawny`,uptime:`Czas pracy`,startCount:`Uruchomienia`,lastStarted:`Ostatnio uruchomiony`,lastStopped:`Ostatnio zatrzymany`,lastError:`Ostatni błąd`,desiredState:`Stan docelowy`},activationPolicies:{always:`Zawsze aktywna`},desiredStates:{started:`Działa`,stopped:`Zatrzymana`},states:{stopped:`Zatrzymany`,starting:`Uruchamianie`,started:`Działa`,stopping:`Zatrzymywanie`,error:`Błąd`},buttons:{start:`Uruchom`,stop:`Zatrzymaj`,restart:`Uruchom ponownie`,refresh:`Odśwież`},messages:{started:`Usługa została uruchomiona`,serviceStarting:`Usługa się uruchamia — może to chwilę potrwać zanim będzie w pełni gotowa`,stopped:`Usługa została zatrzymana`,restarted:`Usługa została uruchomiona ponownie`,startError:`Nie udało się uruchomić usługi`,stopError:`Nie udało się zatrzymać usługi`,restartError:`Nie udało się uruchomić ponownie usługi`,loadError:`Nie udało się wczytać usług`,noServices:`Brak dostępnych usług`},tooltips:{disabledExtension:`Rozszerzenie jest wyłączone`,transitioning:`Usługa jest w trakcie przejścia`,startService:`Uruchom tę usługę`,stopService:`Zatrzymaj tę usługę`,restartService:`Uruchom ponownie tę usługę`},texts:{loadingServices:`Ładowanie usług...`,noServices:`Nie znaleziono zarządzanych usług`,extensionDisabled:`Rozszerzenie wyłączone`,alwaysActiveDescription:`Usługi zawsze aktywne działają nadal, gdy ich rozszerzenie jest wyłączone, aby wykrywanie i konfiguracja pozostały dostępne.`}}},"sk-SK":{menu:{title:`Rozšírenia`},meta:{extensions:{list:{title:`Zoznam rozšírení`},detail:{title:`Rozšírenie: {extension}`}}},headings:{list:`Rozšírenia`,detail:`Detail rozšírenia`,adjustFilters:`Upraviť filtre`,bulkEnable:`Povoliť rozšírenia`,bulkDisable:`Zakázať rozšírenia`},subHeadings:{list:`Spravujte moduly a pluginy aplikácie`,detail:`Zobraziť informácie a konfiguráciu rozšírenia`,adjustFilters:`Filtrovať rozšírenia podľa rôznych kritérií`},breadcrumbs:{extensions:{list:`rozšírenia`,detail:`rozšírenie: {extension}`}},tabs:{all:`Všetky rozšírenia`,modules:`Moduly`,plugins:`Pluginy`,services:`Služby`},labels:{module:`Modul`,plugin:`Plugin`,core:`Jadro`,addon:`Doplnok`,enabled:`Povolené`,disabled:`Zakázané`,version:`Verzia`,author:`Autor`,type:`Typ`,kind:`Druh`,source:`Zdroj`,status:`Stav`,configuration:`Konfigurácia`,description:`Popis`,details:`Detaily`,links:`Odkazy`,readme:`O rozšírení`,documentation:`Dokumentácia`,logs:`Logy`,live:`Naživo`},fields:{search:{placeholder:`Vyhľadať rozšírenia...`}},filters:{kind:{title:`Druh`},enabled:{title:`Stav`},type:{title:`Typ`}},states:{all:`Všetky`},table:{columns:{name:{title:`Názov`},type:{title:`Typ`},kind:{title:`Druh`},version:{title:`Verzia`},core:{title:`Jadro`},enabled:{title:`Povolené`}}},texts:{loadingExtensions:`Načítavanie rozšírení...`,noExtensions:`Žiadne rozšírenia nie sú nainštalované`,noFilteredExtensions:`Žiadne rozšírenia nezodpovedajú aktuálnym filtrom`,logs:{noLogs:`Žiadne logy nie sú dostupné`,noLogsDescription:`Toto rozšírenie zatiaľ nevytvorilo žiadne záznamy logov`,noFilteredLogs:`Žiadne logy nezodpovedajú aktuálnym filtrom`,noMessage:`Žiadna správa`,noMoreEntries:`Žiadne ďalšie záznamy logov`,allLevels:`Všetky úrovne`,timeRange:{all:`Celý čas`,"1h":`Posledná 1 hodina`,"6h":`Posledných 6 hodín`,"24h":`Posledných 24 hodín`,"7d":`Posledných 7 dní`},detail:`Podrobnosti protokolu`}},buttons:{actions:`Akcie`,documentation:`Dokumentácia`,repository:`Repozitár`,issues:`Problémy`,enable:`Povoliť`,disable:`Zakázať`,remove:`Odstrániť`,configure:`Konfigurovať`,viewDetails:`Zobraziť detaily`,refresh:`Obnoviť`,loadMore:`Načítať viac`,detail:{title:`Detail`},reset:{title:`Resetovať filtre`},resetFilters:{title:`Resetovať filtre`},yes:`Áno`,no:`Nie`},tooltips:{coreCannotBeRemoved:`Jadrové rozšírenia nie je možné odstrániť`,coreModuleCannotBeDisabled:`Jadrové moduly nie je možné zakázať`,removeNotSupported:`Odstránenie rozšírení zatiaľ nie je podporované`,cannotToggleEnabled:`Toto rozšírenie nie je možné povoliť/zakázať`,openConfiguration:`Otvoriť konfiguráciu rozšírenia`},messages:{noExtensions:`Neboli nájdené žiadne rozšírenia`,noDescription:`Popis nie je dostupný`,extensionEnabled:`Rozšírenie bolo povolené`,extensionDisabled:`Rozšírenie bolo zakázané`,updateError:`Nepodarilo sa aktualizovať rozšírenie`,coreExtensionError:`Jadrové rozšírenia nie je možné upravovať`,notConfigurableError:`Toto rozšírenie nepodporuje povolenie/zakázanie`,loadError:`Nepodarilo sa načítať rozšírenia`,noMatchingExtensions:`Žiadne rozšírenia nezodpovedajú vašim filtrom`,confirmBulkEnable:`Naozaj chcete povoliť {count} rozšírení?`,confirmBulkDisable:`Naozaj chcete zakázať {count} rozšírení?`,bulkEnabled:`{count} rozšírení bolo povolených`,bulkDisabled:`{count} rozšírení bolo zakázaných`,bulkEnableFailed:`Nepodarilo sa povoliť {count} rozšírení`,bulkDisableFailed:`Nepodarilo sa zakázať {count} rozšírení`,bulkEnableCanceled:`Hromadné povolenie bolo zrušené`,bulkDisableCanceled:`Hromadné zakázanie bolo zrušené`,noExtensionsToEnable:`Žiadne rozšírenia na povolenie (všetky vybrané sú už povolené alebo ich nie je možné prepnúť)`,noExtensionsToDisable:`Žiadne rozšírenia na zakázanie (všetky vybrané sú už zakázané alebo ich nie je možné prepnúť)`},actions:{labels:{tab:`Akcie`,category:{general:`Všeobecné`,simulation:`Simulácia`,data:`Dáta`,diagnostics:`Diagnostika`,maintenance:`Údržba`},required:`Povinné`,dangerous:`Nebezpečné`,comingSoon:`Čoskoro`,history:`História ({count})`},buttons:{run:`Spustiť`,confirm:`Potvrdiť`,cancel:`Zrušiť`},messages:{success:`Akcia bola úspešne dokončená`,error:`Akcia zlyhala`,confirmDangerous:`Táto akcia môže mať významné dôsledky. Naozaj chcete pokračovať?`,noActions:`Pre toto rozšírenie nie sú dostupné žiadne akcie`,interactiveNotAvailable:`Interaktívne akcie budú dostupné v budúcej aktualizácii`,insufficientPermissions:`Nemáte oprávnenie na spustenie tejto akcie`,loading:`Načítavanie akcií...`}},services:{headings:{list:`Spravované služby`,subHeading:`Monitorovať a ovládať služby modulov a pluginov`,modules:`Moduly`,plugins:`Pluginy`},labels:{pluginName:`Plugin`,serviceId:`Služba`,state:`Stav`,enabled:`Povolené`,disabled:`Zakázané`,healthy:`Zdravé`,unhealthy:`Nezdravé`,uptime:`Doba behu`,startCount:`Počet štartov`,lastStarted:`Naposledy spustené`,lastStopped:`Naposledy zastavené`,lastError:`Posledná chyba`,desiredState:`Požadovaný stav`},activationPolicies:{always:`Vždy aktívna`},desiredStates:{started:`Spustená`,stopped:`Zastavená`},states:{stopped:`Zastavené`,starting:`Spúšťanie`,started:`Beží`,stopping:`Zastavovanie`,error:`Chyba`},buttons:{start:`Spustiť`,stop:`Zastaviť`,restart:`Reštartovať`,refresh:`Obnoviť`},messages:{started:`Služba bola spustená`,serviceStarting:`Služba sa spúšťa — môže chvíľu trvať, kým bude plne pripravená`,stopped:`Služba bola zastavená`,restarted:`Služba bola reštartovaná`,startError:`Nepodarilo sa spustiť službu`,stopError:`Nepodarilo sa zastaviť službu`,restartError:`Nepodarilo sa reštartovať službu`,loadError:`Nepodarilo sa načítať služby`,noServices:`Žiadne služby nie sú dostupné`},tooltips:{disabledExtension:`Rozšírenie je zakázané`,transitioning:`Služba prechádza medzi stavmi`,startService:`Spustiť túto službu`,stopService:`Zastaviť túto službu`,restartService:`Reštartovať túto službu`},texts:{loadingServices:`Načítavanie služieb...`,noServices:`Neboli nájdené žiadne spravované služby`,extensionDisabled:`Rozšírenie zakázané`,alwaysActiveDescription:`Vždy aktívne služby zostávajú spustené aj pri zakázanom rozšírení, aby bolo vyhľadávanie a nastavenie naďalej dostupné.`}}}},dm=[{path:`extensions`,name:Ns.EXTENSIONS,component:()=>hr(()=>import(`./view-extensions-BEUE9DZM.js`),__vite__mapDeps([57,2,3,4,11,5,6,38,23,32,17,15,21,33,58,40,59,60,61,62,63,14,16,18,64,19,65,20,7,49,66,50,42,67,68,69,22,8,24,70,71,53,52,72,73,74,75,9,76,25,56,77,78,79,80,81])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`extensionsModule.menu.title`),icon:`mdi:puzzle`,menu:3e3}},{path:`extensions/:type`,name:Ns.EXTENSION_DETAIL,component:()=>hr(()=>import(`./view-extension-detail-BzdALouU.js`),__vite__mapDeps([82,2,3,4,11,5,6,64,7,32,17,15,21,33,71,40,53,52,58,59,60,61,62,63,14,16,18,19,65,20,49,66,38,23,50,42,67,68,69,22,8,24,70,72,73,74,75,9,76,25,56,77,78,79,80,81,83])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Extension Detail`}}],fm=X(),pm=K({name:fm,kind:G(at),surface:G(mn),displayName:X(),description:X().nullable(),version:X().nullable(),source:G(wr)}),mm=Er([pm.extend({remoteUrl:X()}),pm.extend({routePrefix:X()})]);K({fetching:K({items:J().default(!1),item:W(fm)})}),K({name:fm}),Er([K({name:X(),kind:G(at),surface:G(mn),display_name:X(),description:X().nullable(),version:X().nullable(),source:G(wr),remote_url:X(),type:Y(`admin`)}),K({name:X(),kind:G(at),surface:G(mn),display_name:X(),description:X().nullable(),version:X().nullable(),source:G(wr),route_prefix:X(),type:Y(`backend`)})]);var hm=e=>{let t=mm.safeParse({name:e.name,kind:e.kind,surface:e.surface,displayName:e.display_name,description:e.description,version:e.version,source:e.source,routePrefix:`route_prefix`in e?e.route_prefix:void 0,remoteUrl:`remote_url`in e?e.remote_url:void 0});if(!t.success)throw new xt(`Failed to validate received discovered extension data.`);return t.data},gm={fetching:{items:!1,item:[]}},_m=jn(`extensions_module-discovered`,()=>{let e=Zn(),t=j(gm),n=j(!1),r=j({}),i=()=>n.value,a=e=>t.value.fetching.item.includes(e),o=()=>t.value.fetching.items,s=()=>Object.values(r.value),c=e=>r.value[e]??null,l={},u={};return{semaphore:t,firstLoad:n,data:r,firstLoadFinished:i,getting:a,fetching:o,findAll:s,findByName:c,get:async n=>{let i=l[n.name];if(i)return i;let a=(async()=>{if(t.value.fetching.item.includes(n.name))throw new Rt(`Already fetching discovered extension.`);t.value.fetching.item.push(n.name);try{let{data:t,response:i}=await e.client.GET(`/modules/extensions/discovered/{name}`,{params:{path:{name:n.name}}});if(t?.data){let e={};e[n.name]={};for(let n of t.data){let t=hm(n);if(!Object.prototype.hasOwnProperty.call(e,t.name))throw new Rt(`Received extension name is different`);let r=e[t.name];r&&(t.surface===`admin`?r.admin=t:r.backend=t)}return r.value={...r.value,...e},e[n.name]??{admin:void 0,backend:void 0}}throw new Rt(`Failed to fetch discovered extension.`,i.status)}finally{t.value.fetching.item=t.value.fetching.item.filter(e=>e!==n.name)}})();l[n.name]=a;try{return await a}finally{delete l[n.name]}},fetch:async()=>{let i=u.all;if(i)return i;let a=(async()=>{if(t.value.fetching.items)throw new Rt(`Already fetching discovered extensions.`);t.value.fetching.items=!0;try{let{data:t,response:i}=await e.client.GET(`/modules/extensions/discovered`);if(t?.data){let e={};for(let n of t.data){let t=hm(n);Object.prototype.hasOwnProperty.call(e,t.name)||(e[t.name]={});let r=e[t.name];r&&(t.surface===`admin`?r.admin=t:t.surface===`backend`&&(r.backend=t))}return r.value=e,n.value=!0,Object.values(r.value)}throw new Rt(`Failed to fetch discovered extensions.`,i.status)}finally{t.value.fetching.items=!1}})();u.all=a;try{return await a}finally{delete u.all}}}}),vm=e=>_m(e),ym=K({documentation:X().optional(),devDocumentation:X().optional(),bugsTracking:X().optional(),repository:X().optional(),homepage:X().optional()}),bm=K({type:X(),kind:G(at),name:X(),description:X().optional(),version:X().optional(),author:X().optional(),enabled:J(),isCore:J(),canToggleEnabled:J(),links:ym.optional()});K({types:W(X()).nonempty(),enabled:J()});var xm=K({succeeded:W(X()),failed:W(K({id:X(),reason:X()}))}),Sm=K({type:X(),data:K({enabled:J()})}),Cm=e=>{let t=e.version??(e.is_core?`1.1.0-alpha.2`:void 0);return{type:e.type,kind:e.kind===`module`?at.module:at.plugin,name:e.name,description:e.description,version:t,author:e.author,readme:e.readme,docs:e.docs,enabled:e.enabled,isCore:e.is_core,canToggleEnabled:e.can_toggle_enabled,links:e.links?{documentation:e.links.documentation,devDocumentation:e.links.dev_documentation,bugsTracking:e.links.bugs_tracking,repository:e.links.repository,homepage:e.links.homepage}:void 0}},wm=e=>({enabled:e.enabled}),Tm={fetching:{items:!1,item:[]},updating:[]},Em=jn(`extensions_module-extensions`,()=>{let e=Zn(),t=On(),n=j(Tm),r=j(!1),i=j({}),a={},o={},s=()=>r.value,c=e=>n.value.fetching.item.includes(e),l=()=>n.value.fetching.items,u=()=>Object.values(i.value),d=e=>Object.values(i.value).filter(t=>t.kind===e),f=e=>i.value[e]??null,p=e=>{if(e.type&&i.value&&e.type in i.value){let n=bm.safeParse({...i.value[e.type],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new xt(`Failed to update extension.`);return i.value[n.data.type]=n.data}let n=bm.safeParse({...e.data,type:e.type});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new xt(`Failed to insert extension.`);return i.value=i.value??{},i.value[n.data.type]=n.data},m=async t=>{let r=a[t.type];if(r)return r;let o=(async()=>{if(n.value.fetching.item.includes(t.type))throw new Rt(`Already fetching extension.`);n.value.fetching.item.push(t.type);try{let{data:n,error:r,response:a}=await e.client.GET(`/modules/extensions/extensions/{type}`,{params:{path:{type:t.type}}});if(n!==void 0){let e=Cm(n.data);return i.value[e.type]=e,e}let o=`Failed to fetch extension.`;throw r&&(o=Kn(r,o)),new Rt(o,a.status)}finally{n.value.fetching.item=n.value.fetching.item.filter(e=>e!==t.type)}})();a[t.type]=o;try{return await o}finally{delete a[t.type]}};return{semaphore:n,firstLoad:r,data:i,firstLoadFinished:s,getting:c,fetching:l,findAll:u,findByKind:d,findByType:f,set:p,get:m,fetch:async t=>{let a=t?.kind??`all`,s=o[a];if(s)return s;let c=(async()=>{if(n.value.fetching.items)throw new Rt(`Already fetching extensions.`);n.value.fetching.items=!0;try{let n,a,o;if(t?.kind===at.module?{data:n,error:a,response:o}=await e.client.GET(`/modules/extensions/extensions/modules`):t?.kind===at.plugin?{data:n,error:a,response:o}=await e.client.GET(`/modules/extensions/extensions/plugins`):{data:n,error:a,response:o}=await e.client.GET(`/modules/extensions/extensions`),n?.data){let e=n.data.map(e=>Cm(e));for(let t of e)i.value[t.type]=t;return r.value=!0,e}let s=`Failed to fetch extensions.`;throw a&&(s=Kn(a,s)),new Rt(s,o?.status)}finally{n.value.fetching.items=!1}})();o[a]=c;try{return await c}finally{delete o[a]}},update:async r=>{let a=Sm.safeParse(r);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new xt(`Failed to update extension.`);if(n.value.updating.includes(r.type))throw new Rt(`Extension is already being updated.`);n.value.updating.push(r.type);try{let{data:t,error:n,response:o}=await e.client.PATCH(`/modules/extensions/extensions/{type}`,{params:{path:{type:r.type}},body:{data:wm(a.data.data)}});if(t!==void 0){let e=Cm(t.data);return i.value[e.type]=e,e}await m({type:r.type});let s=`Failed to update extension.`;throw n&&(s=Kn(n,s)),new Rt(s,o.status)}finally{n.value.updating=n.value.updating.filter(e=>e!==r.type)}},bulkSetEnabled:async t=>{let r=t.types.filter(e=>i.value[e]!==void 0);if(r.length===0)return{succeeded:[],failed:[]};n.value.updating.push(...r);try{let{data:n,error:a}=await e.client.POST(`/modules/extensions/extensions/bulk-update`,{body:{data:{types:r,enabled:t.enabled}}});if(a!==void 0||n===void 0)throw new Rt(`Received unexpected response.`);let o=xm.parse(n.data);for(let e of o.succeeded){let n=i.value[e];n!==void 0&&(i.value[e]={...n,enabled:t.enabled})}return o}finally{n.value.updating=n.value.updating.filter(e=>!r.includes(e))}}}}),Dm=e=>Em(e),Om=K({extensionKind:G(at),extensionType:X(),serviceId:X(),activationPolicy:G(br),state:G(ft),desiredState:G(Kt),enabled:J(),healthy:J().optional(),lastStartedAt:X().optional(),lastStoppedAt:X().optional(),lastError:X().optional(),startCount:q(),uptimeMs:q().optional()}),km=e=>({extensionKind:e.extension_kind,extensionType:e.extension_type,serviceId:e.service_id,activationPolicy:e.activation_policy,state:e.state,desiredState:e.desired_state,enabled:e.enabled,healthy:e.healthy,lastStartedAt:e.last_started_at,lastStoppedAt:e.last_stopped_at,lastError:e.last_error,startCount:e.start_count,uptimeMs:e.uptime_ms}),Am={fetching:{items:!1,item:[]},acting:[]},jm=jn(`extensions_module-services`,()=>{let e=Zn(),t=On(),n=j(Am),r=j(!1),i=j({}),a={},o={};return{semaphore:n,firstLoad:r,data:i,firstLoadFinished:()=>r.value,getting:(e,t,r)=>n.value.fetching.item.includes(Ps(e,t,r)),fetching:()=>n.value.fetching.items,acting:(e,t,r)=>n.value.acting.includes(Ps(e,t,r)),findAll:()=>Object.values(i.value),findByKey:(e,t,n)=>{let r=Ps(e,t,n);return i.value[r]??null},set:e=>{let n=Ps(e.extensionKind,e.extensionType,e.serviceId);if(n in i.value){let r=Om.safeParse({...i.value[n],...e.data});if(!r.success)throw t.error(`Schema validation failed with:`,r.error),new xt(`Failed to update service.`);return i.value[n]=r.data}let r=Om.safeParse(e.data);if(!r.success)throw t.error(`Schema validation failed with:`,r.error),new xt(`Failed to insert service.`);return i.value=i.value??{},i.value[n]=r.data},get:async t=>{let r=Ps(t.extensionKind,t.extensionType,t.serviceId),o=a[r];if(o)return o;let s=(async()=>{if(n.value.fetching.item.includes(r))throw new Rt(`Already fetching service.`);n.value.fetching.item.push(r);try{let{data:n,error:a,response:o}=await e.client.GET(`/modules/extensions/services/{extensionKind}/{extensionType}/{serviceId}`,{params:{path:{extensionKind:t.extensionKind,extensionType:t.extensionType,serviceId:t.serviceId}}});if(n!==void 0){let e=km(n.data);return i.value[r]=e,e}let s=`Failed to fetch service.`;throw a&&(s=Kn(a,s)),new Rt(s,o.status)}finally{n.value.fetching.item=n.value.fetching.item.filter(e=>e!==r)}})();a[r]=s;try{return await s}finally{delete a[r]}},fetch:async()=>{if(`all`in o)return o.all;let t=(async()=>{if(n.value.fetching.items)throw new Rt(`Already fetching services.`);n.value.fetching.items=!0;try{let{data:t,error:n,response:a}=await e.client.GET(`/modules/extensions/services`);if(t?.data){let e=t.data.map(e=>km(e));for(let t of e){let e=Ps(t.extensionKind,t.extensionType,t.serviceId);i.value[e]=t}return r.value=!0,e}let o=`Failed to fetch services.`;throw n&&(o=Kn(n,o)),new Rt(o,a?.status)}finally{n.value.fetching.items=!1}})();o.all=t;try{return await t}finally{delete o.all}},start:async t=>{let r=Ps(t.extensionKind,t.extensionType,t.serviceId);if(n.value.acting.includes(r))throw new Rt(`Action is already in progress for this service.`);n.value.acting.push(r);try{let{data:n,error:a,response:o}=await e.client.POST(`/modules/extensions/services/{extensionKind}/{extensionType}/{serviceId}/start`,{params:{path:{extensionKind:t.extensionKind,extensionType:t.extensionType,serviceId:t.serviceId}}});if(n!==void 0){let e=km(n.data);return i.value[r]=e,e}let s=`Failed to start service.`;throw a&&(s=Kn(a,s)),new Rt(s,o.status)}finally{n.value.acting=n.value.acting.filter(e=>e!==r)}},stop:async t=>{let r=Ps(t.extensionKind,t.extensionType,t.serviceId);if(n.value.acting.includes(r))throw new Rt(`Action is already in progress for this service.`);n.value.acting.push(r);try{let{data:n,error:a,response:o}=await e.client.POST(`/modules/extensions/services/{extensionKind}/{extensionType}/{serviceId}/stop`,{params:{path:{extensionKind:t.extensionKind,extensionType:t.extensionType,serviceId:t.serviceId}}});if(n!==void 0){let e=km(n.data);return i.value[r]=e,e}let s=`Failed to stop service.`;throw a&&(s=Kn(a,s)),new Rt(s,o.status)}finally{n.value.acting=n.value.acting.filter(e=>e!==r)}},restart:async t=>{let r=Ps(t.extensionKind,t.extensionType,t.serviceId);if(n.value.acting.includes(r))throw new Rt(`Action is already in progress for this service.`);n.value.acting.push(r);try{let{data:n,error:a,response:o}=await e.client.POST(`/modules/extensions/services/{extensionKind}/{extensionType}/{serviceId}/restart`,{params:{path:{extensionKind:t.extensionKind,extensionType:t.extensionType,serviceId:t.serviceId}}});if(n!==void 0){let e=km(n.data);return i.value[r]=e,e}let s=`Failed to restart service.`;throw a&&(s=Kn(a,s)),new Rt(s,o.status)}finally{n.value.acting=n.value.acting.filter(e=>e!==r)}}}}),Mm=e=>jm(e),Nm=Symbol(`FB-Module-Extensions`),Pm={install:(e,t)=>{let n=pn(e),r=_r(e),i=ea(e);for(let[e,n]of Object.entries(um)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{extensionsModule:n});t.i18n.global.setLocaleMessage(e,r)}let a=Dm(t.store);e.provide(Ln,a),n.addStore(Ln,a);let o=vm(t.store);e.provide(ot,o),n.addStore(ot,o);let s=Mm(t.store);e.provide(Ft,s),n.addStore(Ft,s),i.addModule(Nm,{type:Fs,name:`Extensions`,description:`Manage application modules and plugins`,elements:[],isCore:!0}),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&dm.forEach(e=>{t.router.addRoute(Te.ROOT,e)}),r.info(`Extensions module has been installed`)}},Fm=(e,t,n,r,i)=>{for(let a of i){if(r.has(a.name))continue;let i=a.module;if(typeof i==`function`){i(e,n),r.add(a.name);continue}if(i&&typeof i.install==`function`){i.install(e,n),r.add(a.name);continue}t.error(`Static extension ${a.name} is not a valid Vue plugin export.`)}},Im=e=>typeof e==`object`&&!!e&&`install`in e&&typeof e.install==`function`,Lm=e=>typeof e==`function`,Rm=e=>{let t=e?.default??e;return Im(t)||Lm(t)?t:null},zm=async(e,t,n,r,i)=>{let{data:a,response:o}=await t.GET(`/modules/extensions/discovered`,{params:{query:{surface:Bn.admin}}});if(a?.data&&Array.isArray(a.data)){let t=a.data;for(let a of t)if(a.surface===`admin`)try{let t=`remote_url`in a?a.remote_url:void 0;if(!t)continue;let o=Rm(await hr(()=>import(t),[]));if(o){if(i?.has(a.name))continue;Lm(o)?o(e,r):o.install(e,r),i?.add(a.name)}else n.error(`The ${a.name} is not a valid Vue plugin export.`)}catch(e){let t=e instanceof Error?e.message:String(e),r=`remote_url`in a?a.remote_url:`unknown`;n.error(`Failed to import ${a.name} from ${r}: ${t}`)}return}n.error(`Failed to fetch extensions assets.${o?.status?` (HTTP ${o.status})`:``}`)},Bm=`intents-module`,Vm=function(e){return e.INTENT_CREATED=`IntentsModule.Intent.Created`,e.INTENT_COMPLETED=`IntentsModule.Intent.Completed`,e.INTENT_EXPIRED=`IntentsModule.Intent.Expired`,e}({}),Hm=function(e){return e.PENDING=`pending`,e.COMPLETED_SUCCESS=`completed_success`,e.COMPLETED_PARTIAL=`completed_partial`,e.COMPLETED_FAILED=`completed_failed`,e.EXPIRED=`expired`,e}({}),Um=function(e){return e.SUCCESS=`success`,e.FAILED=`failed`,e.TIMEOUT=`timeout`,e.SKIPPED=`skipped`,e}({}),Wm=function(e){return e.LIGHT_TOGGLE=`light.toggle`,e.LIGHT_SET_BRIGHTNESS=`light.setBrightness`,e.LIGHT_SET_COLOR=`light.setColor`,e.LIGHT_SET_COLOR_TEMP=`light.setColorTemp`,e.LIGHT_SET_WHITE=`light.setWhite`,e.DEVICE_SET_PROPERTY=`device.setProperty`,e.SCENE_RUN=`scene.run`,e.SPACE_LIGHTING_ON=`space.lighting.on`,e.SPACE_LIGHTING_OFF=`space.lighting.off`,e.SPACE_LIGHTING_SET_MODE=`space.lighting.setMode`,e.SPACE_LIGHTING_BRIGHTNESS_DELTA=`space.lighting.brightnessDelta`,e.SPACE_LIGHTING_ROLE_ON=`space.lighting.roleOn`,e.SPACE_LIGHTING_ROLE_OFF=`space.lighting.roleOff`,e.SPACE_LIGHTING_ROLE_BRIGHTNESS=`space.lighting.roleBrightness`,e.SPACE_LIGHTING_ROLE_COLOR=`space.lighting.roleColor`,e.SPACE_LIGHTING_ROLE_COLOR_TEMP=`space.lighting.roleColorTemp`,e.SPACE_LIGHTING_ROLE_WHITE=`space.lighting.roleWhite`,e.SPACE_LIGHTING_ROLE_SET=`space.lighting.roleSet`,e.SPACE_CLIMATE_SET_MODE=`space.climate.setMode`,e.SPACE_CLIMATE_SETPOINT_SET=`space.climate.setpointSet`,e.SPACE_CLIMATE_SETPOINT_DELTA=`space.climate.setpointDelta`,e.SPACE_CLIMATE_SET=`space.climate.set`,e.SPACE_COVERS_OPEN=`space.covers.open`,e.SPACE_COVERS_CLOSE=`space.covers.close`,e.SPACE_COVERS_STOP=`space.covers.stop`,e.SPACE_COVERS_SET_POSITION=`space.covers.setPosition`,e.SPACE_COVERS_POSITION_DELTA=`space.covers.positionDelta`,e.SPACE_COVERS_ROLE_POSITION=`space.covers.rolePosition`,e.SPACE_COVERS_SET_MODE=`space.covers.setMode`,e.SPACE_MEDIA_ACTIVATE=`space.media.activate`,e.SPACE_MEDIA_DEACTIVATE=`space.media.deactivate`,e}({}),Gm=[`panel.system.room`,`panel.system.master`,`panel.system.entry`,`panel.dashboard.tiles`,`panel.dashboard.cards`,`panel.device`,`panel.scenes`,`panel.spaces`,`admin`,`api`],Km=Symbol(`FB-Module-Intents-IntentsStore`),qm=class extends Error{exception;constructor(e,t=null){super(e),this.name=`IntentsException`,this.exception=t}},Jm=class extends qm{constructor(e,t=null){super(e,t),this.name=`IntentsValidationException`}},Ym=K({deviceId:X().uuid().nullable(),channelId:X().uuid().nullable(),propertyId:X().uuid().nullable(),sceneId:X().uuid().nullable()}),Xm=K({deviceId:X().uuid().nullable(),channelId:X().uuid().nullable(),propertyId:X().uuid().nullable(),sceneId:X().uuid().nullable(),status:G(Um),error:X().nullable()}),Zm=K({origin:ir(Gm).nullable(),displayId:X().uuid().nullable(),spaceId:X().uuid().nullable(),roleKey:X().nullable()}),Qm=kn(e=>e==null||e===``?null:e,Qn().nullable()),$m=K({id:X().uuid(),requestId:X().uuid().nullable(),type:G(Wm),context:Zm,targets:W(Ym),value:hn().transform(e=>e??null),status:G(Hm),ttlMs:q(),createdAt:Qn(),expiresAt:Qn(),completedAt:Qm,results:W(Xm).nullish().transform(e=>e??null)}),eh=e=>(0,Xd.transform)(e,(e,t,n)=>{let r=(0,Xd.camelCase)(n);(0,Xd.isArray)(t)?e[r]=t.map(e=>(0,Xd.isObject)(e)?eh(e):e):(0,Xd.isObject)(t)&&t!==null?e[r]=eh(t):e[r]=t}),th=e=>{let t=eh({...e,id:e.intent_id});delete t.intentId,t.requestId=t.requestId??null;let n=t.context;t.context={origin:n?.origin??null,displayId:n?.displayId??null,spaceId:n?.spaceId??null,roleKey:n?.roleKey??null};let r=$m.safeParse(t);if(!r.success)throw console.error(`[INTENTS] Schema validation failed:`,r.error),Error(`Failed to transform intent response`);return r.data},nh=()=>({fetching:!1}),rh=jn(`intents_module-intents`,()=>{let e=On(),t=j(nh()),n=j(new Map),r=()=>Array.from(n.value.values()),i=e=>n.value.get(e)??null,a=()=>Array.from(n.value.values()).filter(e=>e.status===Hm.PENDING),o=e=>s({id:e.id,data:th(e.data)}),s=t=>{let r=n.value.get(t.id);if(r){let i=$m.safeParse({...r,...t.data});if(!i.success)throw e.error(`[INTENTS] Schema validation failed:`,i.error),new Jm(`Failed to update intent.`);let a=i.data;return n.value.set(a.id,a),a}let i=$m.safeParse({...t.data,id:t.id});if(!i.success)throw e.error(`[INTENTS] Schema validation failed:`,i.error),new Jm(`Failed to insert intent.`);let a=i.data;return n.value.set(a.id,a),a};return{data:n,semaphore:t,findAll:r,findById:i,findPending:a,onEvent:o,set:s,unset:e=>{n.value.delete(e.id)},clear:()=>{n.value.clear()}}}),ih=e=>rh(e),ah=Symbol(`FB-Module-Intents`),oh={install:(e,t)=>{let n=pn(e),r=ut(e),i=ea(e),a=ih(t.store);e.provide(Km,a),n.addStore(Km,a),i.addModule(ah,{type:Bm,name:`Intents`,description:`Intent orchestration for UI anti-jitter and optimistic updates`,elements:[],isCore:!0}),r.on(`event`,e=>{if(!e?.event?.startsWith(`IntentsModule.`)||e.payload===null||typeof e.payload!=`object`)return;let t=e.payload;if(!(!(`intent_id`in t)||typeof t.intent_id!=`string`))try{switch(e.event){case Vm.INTENT_CREATED:a.onEvent({id:t.intent_id,data:t});break;case Vm.INTENT_COMPLETED:case Vm.INTENT_EXPIRED:a.unset({id:t.intent_id});break;default:break}}catch(t){console.warn(`[INTENTS] Failed to process ${e.event} event:`,t)}}),r.on(`disconnect`,()=>{a.clear()})}},sh={"cs-CZ":{menu:{title:`Vzdálený přístup`},headings:{remoteAccess:`Vzdálený přístup`,accessUrls:`Přístupové URL`,internalUrl:`Interní přístup`,externalUrls:`Externí přístup`},tabs:{providers:`Poskytovatelé`,advisories:`Upozornění`},subHeadings:{remoteAccess:`Přístup k této instalaci mimo lokální síť`},breadcrumbs:{remoteAccess:`vzdálený přístup`},meta:{remoteAccess:{title:`Vzdálený přístup`}},messages:{requestError:`Při načítání stavu vzdáleného přístupu došlo k chybě`,urlCopied:`URL bylo zkopírováno do schránky`,copyFailed:`Nepodařilo se zkopírovat URL do schránky`,qrFailed:`Nepodařilo se vygenerovat QR kód`,config:{edited:`Konfigurace vzdáleného přístupu byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci vzdáleného přístupu`}},buttons:{copy:{title:`Kopírovat`},showQr:{title:`Zobrazit QR kód`}},texts:{loadingStatus:`Načítání stavu vzdáleného přístupu...`,primary:`Primární`,https:`HTTPS`,http:`HTTP`,public:`Veřejné`,private:`Soukromé`,noExternalUrls:`Zatím není nakonfigurován žádný externí přístup. Nastavte poskytovatele nebo přidejte ruční externí URL v nastavení.`,noProviders:`Není povolen žádný poskytovatel vzdáleného přístupu. Povolte jej na stránce Rozšíření.`,noEndpoints:`Tento poskytovatel zatím nezveřejňuje žádné koncové body.`,noAdvisories:`Žádná upozornění. Stav vzdáleného přístupu vypadá dobře.`,moduleSource:`Modul`,qrAlt:`QR kód kódující tuto URL`},severity:{critical:`Kritická`,warning:`Varování`,info:`Informace`},status:{unsupported:`Nepodporováno`,"not-installed":`Není nainstalováno`,"setup-required":`Vyžadováno nastavení`,"pending-auth":`Čeká se na přihlášení`,"pending-approval":`Čeká se na schválení`,connecting:`Připojování`,connected:`Připojeno`,disconnected:`Odpojeno`,error:`Chyba`,banner:{disabledTitle:`Vzdálený přístup je vypnutý`,disabledDescription:`Modul vzdáleného přístupu povolte na stránce Rozšíření, abyste mohli nastavit poskytovatele a externí URL.`,okTitle:`Vzdálený přístup je v pořádku`,okDescription:`Nebyla nahlášena žádná upozornění na stav zabezpečení.`,advisoriesTitle:`Jedno upozornění | {count} upozornění`,advisoriesDescription:`Zkontrolujte upozornění níže.`}},config:{about:{title:`Přístupové URL`,description:`Interní a externí origin, na kterých je tato instalace dostupná. Ponechte interní URL prázdné, pokud se má odvodit ze sítě; externí URL nastavte pouze pro ručně sestavenou reverzní proxy nebo hostitele DDNS. Samotný modul povolíte nebo zakážete na stránce Rozšíření.`},proxyTrust:{title:`Důvěra k proxy`,description:`Předané adresy klientů se berou v úvahu pouze tehdy, když požadavek přichází od některé z důvěryhodných proxy uvedených zde. Poskytovatelé jako Tailscale Serve přidávají svou proxy automaticky.`}},fields:{advisory:{severity:`Závažnost`,message:`Zpráva`,provider:`Poskytovatel`,code:`Kód`},config:{internalUrl:{title:`Interní URL`,placeholder:`např. http://panel.local:3000`,description:`Přepsání absolutního originu pro interní URL. Ponechte prázdné pro automatické odvození.`,invalid:`Musí se jednat o normalizovaný absolutní HTTP(S) origin bez cesty, přihlašovacích údajů, dotazu nebo fragmentu.`},externalUrl:{title:`Externí URL`,placeholder:`např. https://panel.example.com`,description:`Ručně nastavený externí origin, například za vlastní reverzní proxy nebo DDNS hostitelem.`,invalid:`Musí se jednat o normalizovaný absolutní HTTP(S) origin bez cesty, přihlašovacích údajů, dotazu nebo fragmentu.`},trustForwardedHeaders:{title:`Důvěřovat předaným hlavičkám`,description:`Důvěřovat hlavičkám X-Forwarded-For, X-Real-IP a CF-Connecting-IP od důvěryhodných proxy uvedených níže.`},trustedProxies:{title:`Důvěryhodné proxy`,placeholder:`Přidejte adresu IPv4/IPv6 nebo rozsah CIDR a stiskněte Enter`,description:`Adresy IPv4/IPv6 nebo rozsahy CIDR, které smí předkládat hlavičky s identitou předanou dál.`,invalid:`Každá položka musí být platná adresa IPv4/IPv6 nebo rozsah CIDR.`}}}},"de-DE":{menu:{title:`Fernzugriff`},headings:{remoteAccess:`Fernzugriff`,accessUrls:`Zugriffs-URLs`,internalUrl:`Interner Zugriff`,externalUrls:`Externer Zugriff`},tabs:{providers:`Anbieter`,advisories:`Hinweise`},subHeadings:{remoteAccess:`Auf diese Installation von außerhalb des lokalen Netzwerks zugreifen`},breadcrumbs:{remoteAccess:`Fernzugriff`},meta:{remoteAccess:{title:`Fernzugriff`}},messages:{requestError:`Beim Laden des Fernzugriffsstatus ist ein Fehler aufgetreten`,urlCopied:`URL wurde in die Zwischenablage kopiert`,copyFailed:`URL konnte nicht in die Zwischenablage kopiert werden`,qrFailed:`QR-Code konnte nicht erzeugt werden`,config:{edited:`Die Fernzugriffskonfiguration wurde erfolgreich aktualisiert`,notEdited:`Die Fernzugriffskonfiguration konnte nicht aktualisiert werden`}},buttons:{copy:{title:`Kopieren`},showQr:{title:`QR-Code anzeigen`}},texts:{loadingStatus:`Fernzugriffsstatus wird geladen...`,primary:`Primär`,https:`HTTPS`,http:`HTTP`,public:`Öffentlich`,private:`Privat`,noExternalUrls:`Es ist noch kein externer Zugriff konfiguriert. Richten Sie einen Anbieter ein oder fügen Sie in den Einstellungen eine manuelle externe URL hinzu.`,noProviders:`Es ist kein Fernzugriffsanbieter aktiviert. Aktivieren Sie einen auf der Seite Erweiterungen.`,noEndpoints:`Dieser Anbieter veröffentlicht noch keine Endpunkte.`,noAdvisories:`Keine Hinweise. Der Status des Fernzugriffs sieht gut aus.`,moduleSource:`Modul`,qrAlt:`QR-Code, der diese URL codiert`},severity:{critical:`Kritisch`,warning:`Warnung`,info:`Info`},status:{unsupported:`Nicht unterstützt`,"not-installed":`Nicht installiert`,"setup-required":`Einrichtung erforderlich`,"pending-auth":`Warten auf Anmeldung`,"pending-approval":`Warten auf Genehmigung`,connecting:`Verbindung wird hergestellt`,connected:`Verbunden`,disconnected:`Getrennt`,error:`Fehler`,banner:{disabledTitle:`Fernzugriff ist deaktiviert`,disabledDescription:`Aktivieren Sie das Fernzugriffsmodul auf der Seite Erweiterungen, um Anbieter und externe URLs zu konfigurieren.`,okTitle:`Fernzugriff ist in Ordnung`,okDescription:`Es wurden keine Sicherheitshinweise gemeldet.`,advisoriesTitle:`Ein Hinweis | {count} Hinweise`,advisoriesDescription:`Überprüfen Sie die unten stehenden Hinweise.`}},config:{about:{title:`Zugriffs-URLs`,description:`Interner und externer Origin, unter dem diese Installation erreichbar ist. Lassen Sie die interne URL leer, damit sie aus dem Netzwerk abgeleitet wird; setzen Sie die externe URL nur für einen selbst eingerichteten Reverse-Proxy oder DDNS-Host. Das Modul selbst wird auf der Seite Erweiterungen aktiviert oder deaktiviert.`},proxyTrust:{title:`Proxy-Vertrauen`,description:`Weitergeleitete Client-Adressen werden nur berücksichtigt, wenn die Anfrage von einem der hier aufgeführten vertrauenswürdigen Proxys stammt. Anbieter wie Tailscale Serve fügen ihren eigenen Proxy automatisch hinzu.`}},fields:{advisory:{severity:`Schweregrad`,message:`Nachricht`,provider:`Anbieter`,code:`Code`},config:{internalUrl:{title:`Interne URL`,placeholder:`z. B. http://panel.local:3000`,description:`Überschreibt den absoluten Origin für die interne URL. Leer lassen, um ihn automatisch abzuleiten.`,invalid:`Muss ein normalisierter absoluter HTTP(S)-Origin ohne Pfad, Anmeldedaten, Abfrage oder Fragment sein.`},externalUrl:{title:`Externe URL`,placeholder:`z. B. https://panel.example.com`,description:`Manuell konfigurierter externer Origin, z. B. hinter einem selbst eingerichteten Reverse-Proxy oder DDNS-Host.`,invalid:`Muss ein normalisierter absoluter HTTP(S)-Origin ohne Pfad, Anmeldedaten, Abfrage oder Fragment sein.`},trustForwardedHeaders:{title:`Weitergeleiteten Headern vertrauen`,description:`X-Forwarded-For, X-Real-IP und CF-Connecting-IP von den unten aufgeführten vertrauenswürdigen Proxys vertrauen.`},trustedProxies:{title:`Vertrauenswürdige Proxys`,placeholder:`IPv4-/IPv6-Adresse oder CIDR-Bereich hinzufügen und Eingabetaste drücken`,description:`IPv4-/IPv6-Adressen oder CIDR-Bereiche, die weitergeleitete Identitäts-Header präsentieren dürfen.`,invalid:`Jeder Eintrag muss eine gültige IPv4-/IPv6-Adresse oder ein gültiger CIDR-Bereich sein.`}}}},"en-US":{menu:{title:`Remote access`},headings:{remoteAccess:`Remote access`,accessUrls:`Access URLs`,internalUrl:`Internal access`,externalUrls:`External access`},tabs:{providers:`Providers`,advisories:`Advisories`},subHeadings:{remoteAccess:`Reach this installation from outside the local network`},breadcrumbs:{remoteAccess:`remote access`},meta:{remoteAccess:{title:`Remote Access`}},messages:{requestError:`An error occurred while loading remote access status`,urlCopied:`URL has been copied to the clipboard`,copyFailed:`Failed to copy the URL to the clipboard`,qrFailed:`Failed to generate the QR code`,config:{edited:`Remote access configuration has been successfully updated`,notEdited:`Failed to update remote access configuration`}},buttons:{copy:{title:`Copy`},showQr:{title:`Show QR code`}},texts:{loadingStatus:`Loading remote access status...`,primary:`Primary`,https:`HTTPS`,http:`HTTP`,public:`Public`,private:`Private`,noExternalUrls:`No external access is configured yet. Set up a provider or add a manual external URL in the settings.`,noProviders:`No remote access provider is enabled. Enable one on the Extensions page.`,noEndpoints:`This provider is not publishing any endpoints yet.`,noAdvisories:`No advisories. Your remote access posture looks good.`,moduleSource:`Module`,qrAlt:`QR code encoding this URL`},severity:{critical:`Critical`,warning:`Warning`,info:`Info`},status:{unsupported:`Unsupported`,"not-installed":`Not installed`,"setup-required":`Setup required`,"pending-auth":`Waiting for sign-in`,"pending-approval":`Waiting for approval`,connecting:`Connecting`,connected:`Connected`,disconnected:`Disconnected`,error:`Error`,banner:{disabledTitle:`Remote access is disabled`,disabledDescription:`Enable the Remote access module from the Extensions page to configure providers and external URLs.`,okTitle:`Remote access is healthy`,okDescription:`No posture advisories were reported.`,advisoriesTitle:`One advisory | {count} advisories`,advisoriesDescription:`Review the advisories below.`}},config:{about:{title:`Access URLs`,description:`Internal and external origins this installation is reachable at. Leave the internal URL empty to derive it from the network; set the external URL only for a hand-built reverse proxy or DDNS host. Enable or disable the module itself from the Extensions page.`},proxyTrust:{title:`Proxy trust`,description:`Forwarded client addresses are honoured only when the request comes from one of the trusted proxies listed here. Providers such as Tailscale Serve add their own proxy automatically.`}},fields:{advisory:{severity:`Severity`,message:`Message`,provider:`Provider`,code:`Code`},config:{internalUrl:{title:`Internal URL`,placeholder:`e.g. http://panel.local:3000`,description:`Absolute origin override for the internal URL. Leave empty to derive it automatically.`,invalid:`Must be a normalized absolute HTTP(S) origin without a path, credentials, query, or fragment.`},externalUrl:{title:`External URL`,placeholder:`e.g. https://panel.example.com`,description:`Manually configured external origin, e.g. behind a hand-built reverse proxy or DDNS host.`,invalid:`Must be a normalized absolute HTTP(S) origin without a path, credentials, query, or fragment.`},trustForwardedHeaders:{title:`Trust forwarded headers`,description:`Trust X-Forwarded-For, X-Real-IP and CF-Connecting-IP from the trusted proxies listed below.`},trustedProxies:{title:`Trusted proxies`,placeholder:`Add an IPv4/IPv6 address or CIDR range and press enter`,description:`IPv4/IPv6 addresses or CIDR ranges allowed to present forwarded-identity headers.`,invalid:`Each entry must be a valid IPv4/IPv6 address or CIDR range.`}}}},"es-ES":{menu:{title:`Acceso remoto`},headings:{remoteAccess:`Acceso remoto`,accessUrls:`URL de acceso`,internalUrl:`Acceso interno`,externalUrls:`Acceso externo`},tabs:{providers:`Proveedores`,advisories:`Avisos`},subHeadings:{remoteAccess:`Accede a esta instalación desde fuera de la red local`},breadcrumbs:{remoteAccess:`acceso remoto`},meta:{remoteAccess:{title:`Acceso remoto`}},messages:{requestError:`Se produjo un error al cargar el estado del acceso remoto`,urlCopied:`La URL se ha copiado al portapapeles`,copyFailed:`No se pudo copiar la URL al portapapeles`,qrFailed:`No se pudo generar el código QR`,config:{edited:`La configuración de acceso remoto se ha actualizado correctamente`,notEdited:`No se pudo actualizar la configuración de acceso remoto`}},buttons:{copy:{title:`Copiar`},showQr:{title:`Mostrar código QR`}},texts:{loadingStatus:`Cargando el estado del acceso remoto...`,primary:`Principal`,https:`HTTPS`,http:`HTTP`,public:`Público`,private:`Privado`,noExternalUrls:`Aún no hay acceso externo configurado. Configura un proveedor o añade una URL externa manual en los ajustes.`,noProviders:`No hay ningún proveedor de acceso remoto habilitado. Habilite uno en la página Extensiones.`,noEndpoints:`Este proveedor todavía no publica ningún punto de conexión.`,noAdvisories:`No hay avisos. El estado del acceso remoto parece correcto.`,moduleSource:`Módulo`,qrAlt:`Código QR que codifica esta URL`},severity:{critical:`Crítica`,warning:`Advertencia`,info:`Información`},status:{unsupported:`No compatible`,"not-installed":`No instalado`,"setup-required":`Configuración necesaria`,"pending-auth":`Esperando inicio de sesión`,"pending-approval":`Esperando aprobación`,connecting:`Conectando`,connected:`Conectado`,disconnected:`Desconectado`,error:`Error`,banner:{disabledTitle:`El acceso remoto está deshabilitado`,disabledDescription:`Habilita el módulo de acceso remoto desde la página Extensiones para configurar proveedores y URL externas.`,okTitle:`El acceso remoto está en buen estado`,okDescription:`No se ha notificado ningún aviso de seguridad.`,advisoriesTitle:`Un aviso | {count} avisos`,advisoriesDescription:`Revisa los avisos a continuación.`}},config:{about:{title:`URL de acceso`,description:`Orígenes interno y externo en los que esta instalación es accesible. Deja la URL interna vacía para deducirla de la red; configura la URL externa solo para un proxy inverso propio o un host DDNS. El módulo en sí se habilita o deshabilita desde la página Extensiones.`},proxyTrust:{title:`Confianza en proxies`,description:`Las direcciones de cliente reenviadas solo se tienen en cuenta cuando la solicitud procede de uno de los proxies de confianza indicados aquí. Proveedores como Tailscale Serve añaden su propio proxy automáticamente.`}},fields:{advisory:{severity:`Gravedad`,message:`Mensaje`,provider:`Proveedor`,code:`Código`},config:{internalUrl:{title:`URL interna`,placeholder:`p. ej. http://panel.local:3000`,description:`Anula el origen absoluto de la URL interna. Déjalo vacío para deducirlo automáticamente.`,invalid:`Debe ser un origen HTTP(S) absoluto normalizado, sin ruta, credenciales, consulta ni fragmento.`},externalUrl:{title:`URL externa`,placeholder:`p. ej. https://panel.example.com`,description:`Origen externo configurado manualmente, por ejemplo, detrás de un proxy inverso propio o un host DDNS.`,invalid:`Debe ser un origen HTTP(S) absoluto normalizado, sin ruta, credenciales, consulta ni fragmento.`},trustForwardedHeaders:{title:`Confiar en las cabeceras reenviadas`,description:`Confiar en X-Forwarded-For, X-Real-IP y CF-Connecting-IP de los proxies de confianza indicados a continuación.`},trustedProxies:{title:`Proxies de confianza`,placeholder:`Añade una dirección IPv4/IPv6 o un rango CIDR y pulsa Intro`,description:`Direcciones IPv4/IPv6 o rangos CIDR autorizados a presentar cabeceras de identidad reenviadas.`,invalid:`Cada entrada debe ser una dirección IPv4/IPv6 o un rango CIDR válidos.`}}}},"pl-PL":{menu:{title:`Dostęp zdalny`},headings:{remoteAccess:`Dostęp zdalny`,accessUrls:`Adresy URL dostępu`,internalUrl:`Dostęp wewnętrzny`,externalUrls:`Dostęp zewnętrzny`},tabs:{providers:`Dostawcy`,advisories:`Powiadomienia`},subHeadings:{remoteAccess:`Uzyskaj dostęp do tej instalacji spoza sieci lokalnej`},breadcrumbs:{remoteAccess:`dostęp zdalny`},meta:{remoteAccess:{title:`Dostęp zdalny`}},messages:{requestError:`Wystąpił błąd podczas wczytywania stanu dostępu zdalnego`,urlCopied:`Adres URL został skopiowany do schowka`,copyFailed:`Nie udało się skopiować adresu URL do schowka`,qrFailed:`Nie udało się wygenerować kodu QR`,config:{edited:`Konfiguracja dostępu zdalnego została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji dostępu zdalnego`}},buttons:{copy:{title:`Kopiuj`},showQr:{title:`Pokaż kod QR`}},texts:{loadingStatus:`Wczytywanie stanu dostępu zdalnego...`,primary:`Podstawowy`,https:`HTTPS`,http:`HTTP`,public:`Publiczny`,private:`Prywatny`,noExternalUrls:`Nie skonfigurowano jeszcze żadnego dostępu zewnętrznego. Skonfiguruj dostawcę lub dodaj ręczny zewnętrzny adres URL w ustawieniach.`,noProviders:`Żaden dostawca dostępu zdalnego nie jest włączony. Włącz go na stronie Rozszerzenia.`,noEndpoints:`Ten dostawca nie publikuje jeszcze żadnych punktów końcowych.`,noAdvisories:`Brak powiadomień. Stan dostępu zdalnego wygląda dobrze.`,moduleSource:`Moduł`,qrAlt:`Kod QR kodujący ten adres URL`},severity:{critical:`Krytyczna`,warning:`Ostrzeżenie`,info:`Informacja`},status:{unsupported:`Nieobsługiwane`,"not-installed":`Niezainstalowane`,"setup-required":`Wymagana konfiguracja`,"pending-auth":`Oczekiwanie na logowanie`,"pending-approval":`Oczekiwanie na zatwierdzenie`,connecting:`Łączenie`,connected:`Połączono`,disconnected:`Rozłączono`,error:`Błąd`,banner:{disabledTitle:`Dostęp zdalny jest wyłączony`,disabledDescription:`Włącz moduł dostępu zdalnego na stronie Rozszerzenia, aby skonfigurować dostawców i zewnętrzne adresy URL.`,okTitle:`Dostęp zdalny działa prawidłowo`,okDescription:`Nie zgłoszono żadnych powiadomień dotyczących stanu zabezpieczeń.`,advisoriesTitle:`Jedno powiadomienie | {count} powiadomień`,advisoriesDescription:`Sprawdź poniższe powiadomienia.`}},config:{about:{title:`Adresy URL dostępu`,description:`Wewnętrzny i zewnętrzny origin, pod którym dostępna jest ta instalacja. Pozostaw wewnętrzny adres URL pusty, aby wyznaczyć go z sieci; zewnętrzny adres URL ustaw tylko dla ręcznie skonfigurowanego serwera proxy typu reverse lub hosta DDNS. Sam moduł włącza się i wyłącza na stronie Rozszerzenia.`},proxyTrust:{title:`Zaufanie do proxy`,description:`Przekazywane adresy klientów są uwzględniane tylko wtedy, gdy żądanie pochodzi od jednego z zaufanych serwerów proxy wymienionych tutaj. Dostawcy tacy jak Tailscale Serve dodają własny serwer proxy automatycznie.`}},fields:{advisory:{severity:`Ważność`,message:`Wiadomość`,provider:`Dostawca`,code:`Kod`},config:{internalUrl:{title:`Wewnętrzny adres URL`,placeholder:`np. http://panel.local:3000`,description:`Zastąpienie bezwzględnego originu dla wewnętrznego adresu URL. Pozostaw puste, aby wyznaczyć go automatycznie.`,invalid:`Musi to być znormalizowany, bezwzględny origin HTTP(S) bez ścieżki, danych uwierzytelniających, zapytania ani fragmentu.`},externalUrl:{title:`Zewnętrzny adres URL`,placeholder:`np. https://panel.example.com`,description:`Ręcznie skonfigurowany zewnętrzny origin, np. za własnym serwerem proxy typu reverse lub hostem DDNS.`,invalid:`Musi to być znormalizowany, bezwzględny origin HTTP(S) bez ścieżki, danych uwierzytelniających, zapytania ani fragmentu.`},trustForwardedHeaders:{title:`Ufaj przekazywanym nagłówkom`,description:`Ufaj nagłówkom X-Forwarded-For, X-Real-IP i CF-Connecting-IP od zaufanych serwerów proxy wymienionych poniżej.`},trustedProxies:{title:`Zaufane serwery proxy`,placeholder:`Dodaj adres IPv4/IPv6 lub zakres CIDR i naciśnij Enter`,description:`Adresy IPv4/IPv6 lub zakresy CIDR uprawnione do przedstawiania przekazanych nagłówków tożsamości.`,invalid:`Każdy wpis musi być prawidłowym adresem IPv4/IPv6 lub zakresem CIDR.`}}}},"sk-SK":{menu:{title:`Vzdialený prístup`},headings:{remoteAccess:`Vzdialený prístup`,accessUrls:`Prístupové URL`,internalUrl:`Interný prístup`,externalUrls:`Externý prístup`},tabs:{providers:`Poskytovatelia`,advisories:`Upozornenia`},subHeadings:{remoteAccess:`Prístup k tejto inštalácii mimo lokálnej siete`},breadcrumbs:{remoteAccess:`vzdialený prístup`},meta:{remoteAccess:{title:`Vzdialený prístup`}},messages:{requestError:`Pri načítaní stavu vzdialeného prístupu došlo k chybe`,urlCopied:`URL bola skopírovaná do schránky`,copyFailed:`Nepodarilo sa skopírovať URL do schránky`,qrFailed:`Nepodarilo sa vygenerovať QR kód`,config:{edited:`Konfigurácia vzdialeného prístupu bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu vzdialeného prístupu`}},buttons:{copy:{title:`Kopírovať`},showQr:{title:`Zobraziť QR kód`}},texts:{loadingStatus:`Načítava sa stav vzdialeného prístupu...`,primary:`Primárna`,https:`HTTPS`,http:`HTTP`,public:`Verejné`,private:`Súkromné`,noExternalUrls:`Zatiaľ nie je nakonfigurovaný žiadny externý prístup. Nastavte poskytovateľa alebo pridajte manuálnu externú URL v nastaveniach.`,noProviders:`Nie je povolený žiadny poskytovateľ vzdialeného prístupu. Povoľte ho na stránke Rozšírenia.`,noEndpoints:`Tento poskytovateľ zatiaľ nezverejňuje žiadne koncové body.`,noAdvisories:`Žiadne upozornenia. Stav vzdialeného prístupu vyzerá dobre.`,moduleSource:`Modul`,qrAlt:`QR kód kódujúci túto URL`},severity:{critical:`Kritická`,warning:`Varovanie`,info:`Informácia`},status:{unsupported:`Nepodporované`,"not-installed":`Nenainštalované`,"setup-required":`Vyžaduje sa nastavenie`,"pending-auth":`Čaká sa na prihlásenie`,"pending-approval":`Čaká sa na schválenie`,connecting:`Pripája sa`,connected:`Pripojené`,disconnected:`Odpojené`,error:`Chyba`,banner:{disabledTitle:`Vzdialený prístup je vypnutý`,disabledDescription:`Povoľte modul vzdialeného prístupu na stránke Rozšírenia, aby ste mohli nastaviť poskytovateľov a externé URL.`,okTitle:`Vzdialený prístup je v poriadku`,okDescription:`Neboli nahlásené žiadne upozornenia na stav zabezpečenia.`,advisoriesTitle:`Jedno upozornenie | {count} upozornení`,advisoriesDescription:`Skontrolujte upozornenia nižšie.`}},config:{about:{title:`Prístupové URL`,description:`Interný a externý origin, na ktorých je táto inštalácia dostupná. Internú URL ponechajte prázdnu, aby sa odvodila zo siete; externú URL nastavte iba pre ručne zostavený reverzný proxy alebo hostiteľa DDNS. Samotný modul povolíte alebo zakážete na stránke Rozšírenia.`},proxyTrust:{title:`Dôvera k proxy`,description:`Preposielané adresy klientov sa zohľadňujú iba vtedy, keď požiadavka prichádza od jednej z dôveryhodných proxy uvedených tu. Poskytovatelia ako Tailscale Serve pridávajú svoju proxy automaticky.`}},fields:{advisory:{severity:`Závažnosť`,message:`Správa`,provider:`Poskytovateľ`,code:`Kód`},config:{internalUrl:{title:`Interná URL`,placeholder:`napr. http://panel.local:3000`,description:`Prepísanie absolútneho originu pre internú URL. Ponechajte prázdne pre automatické odvodenie.`,invalid:`Musí ísť o normalizovaný absolútny HTTP(S) origin bez cesty, prihlasovacích údajov, dotazu alebo fragmentu.`},externalUrl:{title:`Externá URL`,placeholder:`napr. https://panel.example.com`,description:`Manuálne nastavený externý origin, napríklad za vlastným reverzným proxy alebo DDNS hostiteľom.`,invalid:`Musí ísť o normalizovaný absolútny HTTP(S) origin bez cesty, prihlasovacích údajov, dotazu alebo fragmentu.`},trustForwardedHeaders:{title:`Dôverovať preposielaným hlavičkám`,description:`Dôverovať hlavičkám X-Forwarded-For, X-Real-IP a CF-Connecting-IP od dôveryhodných proxy uvedených nižšie.`},trustedProxies:{title:`Dôveryhodné proxy`,placeholder:`Pridajte adresu IPv4/IPv6 alebo rozsah CIDR a stlačte Enter`,description:`Adresy IPv4/IPv6 alebo rozsahy CIDR, ktoré smú predkladať preposielané hlavičky identity.`,invalid:`Každá položka musí byť platná adresa IPv4/IPv6 alebo rozsah CIDR.`}}}}},ch=[{path:`remote-access`,name:Ls.REMOTE_ACCESS,component:()=>hr(()=>import(`./view-remote-access-DtZM_sYV.js`),__vite__mapDeps([84,2,3,4,11,5,6,7,32,17,15,21,33,24,85,14,16,18,19,20,70,71,40,53,52,72,73,74,86,87])),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`remoteAccessModule.menu.title`),icon:`mdi:cloud-lock-outline`,menu:3500}}],lh=Bi.extend({type:Y(Is),internalUrl:X().nullable().default(null),externalUrl:X().nullable().default(null),trustForwardedHeaders:J().default(!1),trustedProxies:W(X()).default([])}),uh=qi.and(K({type:Y(Is),internal_url:X().nullable().optional(),external_url:X().nullable().optional(),trust_forwarded_headers:J().optional(),trusted_proxies:W(X()).optional()}));zi.and(K({type:Y(Is),internal_url:X().nullable().optional(),external_url:X().nullable().optional(),trust_forwarded_headers:J(),trusted_proxies:W(X())}));var dh=class extends Error{exception;constructor(e,t=null){super(e),this.name=`RemoteAccessException`,this.exception=t}},fh=class extends dh{code;constructor(e,t=null,n=null){super(e,n),this.name=`RemoteAccessApiException`,this.code=t}},ph=class extends dh{constructor(e,t=null){super(e,t),this.name=`RemoteAccessValidationException`}},mh=K({url:X(),scope:G(Et),https:J(),label:X()}),hh=K({code:X(),severity:G(It),message:X(),provider:X().nullable().optional()}),gh=K({https:J(),publicUrl:J(),identityHeaders:J(),ssh:J()}),_h=K({type:X(),kind:G(Mt),capabilities:gh,state:G(Wt),endpoints:W(mh),message:X().nullable().optional(),details:sn(X(),hn()),proxyAddresses:W(X()),advisories:W(hh),updatedAt:X()}),vh=K({internal:X(),candidates:W(X()),external:W(mh),primary:X().nullable().optional()}),yh=K({enabled:J(),providers:W(_h),urls:vh,advisories:W(hh)});K({getting:J()}),K({event:X(),data:Sn({})}),K({data:Sn({})});var bh=K({type:X(),state:G(Wt),endpoints:W(mh),message:X().nullable().optional(),details:sn(X(),hn()),proxyAddresses:W(X()),advisories:W(hh),updatedAt:X()}),xh=K({internal:X(),external:W(mh),primaryExternalUrl:X().nullable()}),Sh=K({url:X(),scope:G(Et),https:J(),label:X()}),Ch=K({code:X(),severity:G(It),message:X(),provider:X().nullable().optional()}),wh=K({https:J(),public_url:J(),identity_headers:J(),ssh:J()}),Th=K({type:X(),kind:G(Mt),capabilities:wh,state:G(Wt),endpoints:W(Sh),message:X().nullable().optional(),details:sn(X(),hn()),proxy_addresses:W(X()),advisories:W(Ch),updated_at:X()}),Eh=K({internal:X(),candidates:W(X()),external:W(Sh),primary:X().nullable().optional()});K({enabled:J(),providers:W(Th),urls:Eh,advisories:W(Ch)});var Dh=e=>{let t=yh.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new ph(`Failed to validate received remote access status data.`);return t.data},Oh=(e,t)=>{let n=bh.safeParse(Un(t));if(!n.success)throw cr.error(`Schema validation failed with:`,n.error),new ph(`Failed to validate received remote access provider status event.`);let r=n.data,i=e.providers.findIndex(e=>e.type===r.type);if(i===-1)return cr.warn(`Received a remote access status event for an unknown provider "${r.type}"; ignoring until the next fetch.`),e;let a=[...e.providers];a[i]={...a[i],state:r.state,endpoints:r.endpoints,message:r.message??null,details:r.details,proxyAddresses:r.proxyAddresses,advisories:r.advisories,updatedAt:r.updatedAt};let o=[...e.advisories.filter(e=>e.provider!==r.type),...r.advisories.map(e=>({...e,provider:e.provider??r.type}))];return{...e,providers:a,advisories:o}},kh=(e,t)=>{let n=xh.safeParse(Un(t));if(!n.success)throw cr.error(`Schema validation failed with:`,n.error),new ph(`Failed to validate received remote access URLs changed event.`);let r=n.data;return{...e,urls:{...e.urls,internal:r.internal,external:r.external,primary:r.primaryExternalUrl}}},Ah=()=>({getting:!1}),jh=jn(`remote_access_module-status`,()=>{let e=Zn(),t=On(),n=j(Ah()),r=j(!1),i=j(null),a=()=>r.value,o=()=>n.value.getting,s=null,c=e=>{if(i.value===null)return t.warn(`Received a remote access "${e.event}" event before the initial status fetch; ignoring.`),null;switch(e.event){case Ws.PROVIDER_STATUS:return i.value=Oh(i.value,e.data);case Ws.URLS_CHANGED:return i.value=kh(i.value,e.data);default:return t.warn(`Unhandled remote access status event: ${e.event}`),i.value}},l=e=>{let n=yh.safeParse(e.data);if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new ph(`Failed to insert remote access status.`);return i.value=n.data},u=async()=>{if(s)return s;let t=(async()=>{if(n.value.getting)throw new fh(`Already getting remote access status.`);n.value.getting=!0;try{let{data:t,error:n,response:a}=await e.client.GET(`/${je}/${Hs}/status`),o=a;if(t!==void 0)return i.value=Dh(t.data),r.value=!0,i.value;let s=`Failed to fetch remote access status.`;throw n&&(s=Kn(n,s)),new fh(s,o.status)}finally{n.value.getting=!1}})();s=t;try{return await t}finally{s=null}};return{isLoaded:()=>i.value!==null,refresh:()=>u(),semaphore:n,firstLoad:r,data:i,firstLoadFinished:a,getting:o,onEvent:c,set:l,get:u}}),Mh=e=>jh(e),Nh=Symbol(`FB-Module-RemoteAccess`),Ph={install:(e,t)=>{let n=pn(e),r=ut(e),i=_r(e),a=ea(e),o=Hi(e);for(let[e,n]of Object.entries(sh)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{remoteAccessModule:n});t.i18n.global.setLocaleMessage(e,r)}let s=Mh(t.store);e.provide(Us,s),n.addStore(Us,s),a.addModule(Nh,{type:Is,name:`Remote access`,description:`Reach this installation from outside the local network through Tailscale and other providers.`,elements:[{type:Oa,components:{moduleConfigEditForm:Bs},schemas:{moduleConfigSchema:lh,moduleConfigEditFormSchema:zs,moduleConfigUpdateReqSchema:uh},modules:[ka]}],modules:[ka],isCore:!0}),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&ch.forEach(e=>{t.router.addRoute(Te.ROOT,e)}),o.register(Nh,()=>Ii([s])),r.on(`event`,e=>{if(e?.event?.startsWith(`RemoteAccessModule.`)&&!(typeof e.payload!=`object`||e.payload===null))switch(e.event){case Ws.PROVIDER_STATUS:case Ws.URLS_CHANGED:s.onEvent({event:e.event,data:e.payload});break;default:i.warn(`Unhandled remote access module event:`,e.event)}})}},Fh=X().trim().refine(e=>{try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&t.origin===e&&t.username===``&&t.password===``}catch{return!1}},{message:`Origin must be an absolute HTTP(S) origin without a path, query, fragment, or credentials.`}),Ih=X().trim().refine(e=>{try{let t=new URL(e),n=`${t.origin}${t.pathname===`/`?``:t.pathname}`;return t.protocol===`https:`&&t.hostname!==``&&t.username===``&&t.password===``&&t.search===``&&t.hash===``&&(t.pathname===`/`||!t.pathname.endsWith(`/`))&&n===e}catch{return!1}},{message:`OAuth public base URL must be an absolute HTTPS URL without credentials, query, fragment, or trailing slash.`}),Lh=kn(e=>e===``?null:e,Er([Ih,Pn()])),Rh=Li.extend({oauthEnabled:J().default(!1),oauthPublicBaseUrl:Lh.default(null),capabilities:W(G(Ks)).default([Ks.read]),allowedOrigins:W(Fh).default([])}).superRefine((e,t)=>{e.enabled&&e.oauthEnabled&&e.oauthPublicBaseUrl===null&&t.addIssue({code:`custom`,path:[`oauthPublicBaseUrl`],message:`Configure the OAuth public base URL before enabling OAuth.`})}),zh={class:`text-sm text-gray-500 mt-1`},Bh={class:`text-sm text-gray-500 mt-1`},Vh={class:`w-full text-sm text-gray-500 mt-1`},Hh={class:`text-sm text-gray-500 ml-6`},Uh={class:`w-full flex flex-col gap-2`},Wh={class:`text-sm text-gray-500 mt-1`},Gh=k({name:`McpConfigForm`,__name:`mcp-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),c=Ys(window.location),u=Object.values(Ks),{formEl:d,model:f,formChanged:m,submit:h,formResult:g}=Ui({config:n.config,messages:{success:a(`mcpModule.messages.configSaved`),error:a(`mcpModule.messages.configSaveFailed`)}}),_=P({oauthPublicBaseUrl:[{validator:(e,t,n)=>{let r=f.enabled&&f.oauthEnabled;n((t===null||t===``?!r:Ih.safeParse(t).success)?void 0:Error(a(`mcpModule.config.oauth.publicBaseUrlInvalid`)))},trigger:`change`}],allowedOrigins:[{validator:(e,t,n)=>{n(Array.isArray(t)&&t.every(e=>Fh.safeParse(e).success)?void 0:Error(a(`mcpModule.config.allowedOrigins.invalid`)))},trigger:`change`}]}),v=()=>{f.allowedOrigins.push(``)},y=e=>{f.allowedOrigins.splice(e,1)},b=async()=>{try{await navigator.clipboard.writeText(c),o.success(a(`mcpModule.messages.endpointCopied`))}catch{o.error(a(`mcpModule.messages.copyFailed`))}},{primary:x,fetchUrls:S}=Rs(),C=p(()=>{let e=x.value;if(!e)return null;try{return new URL(e).protocol===`https:`?e:null}catch{return null}}),w=()=>{C.value!==null&&(f.oauthPublicBaseUrl=C.value)};return pe(()=>{S().catch(()=>void 0)}),F(g,e=>r(`update:remote-form-result`,e)),F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),h().catch(()=>void 0))}),F(()=>n.remoteFormReset,e=>{r(`update:remote-form-reset`,!1),e&&d.value?.resetFields()}),F(m,e=>r(`update:remote-form-changed`,e)),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:d,model:L(f),rules:_,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`mcpModule.config.about.title`),description:L(a)(`mcpModule.config.about.description`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`mcpModule.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(f).enabled,"onUpdate:modelValue":t[0]||=e=>L(f).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`mcpModule.config.endpoint.title`)},{default:B(()=>[D(L(U),{"model-value":L(c),readonly:``,name:`endpoint`},{append:B(()=>[D(L(Oe),{"aria-label":L(a)(`mcpModule.actions.copyEndpoint`),onClick:b},{default:B(()=>[D(L(s),{icon:`mdi:content-copy`})]),_:1},8,[`aria-label`])]),_:1},8,[`model-value`]),l(`div`,zh,z(L(a)(`mcpModule.config.endpoint.description`)),1)]),_:1},8,[`label`]),D(L(Vt)),D(L(Q),{type:`warning`,title:L(a)(`mcpModule.config.oauth.warningTitle`),description:L(a)(`mcpModule.config.oauth.warningDescription`),closable:!1,"show-icon":``,class:`mb-4`},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`mcpModule.config.oauth.publicBaseUrlTitle`),prop:`oauthPublicBaseUrl`},{default:B(()=>[D(L(U),{modelValue:L(f).oauthPublicBaseUrl,"onUpdate:modelValue":t[1]||=e=>L(f).oauthPublicBaseUrl=e,placeholder:L(a)(`mcpModule.config.oauth.publicBaseUrlPlaceholder`),name:`oauthPublicBaseUrl`,clearable:``},null,8,[`modelValue`,`placeholder`]),C.value?(A(),O(L(Oe),{key:0,plain:``,class:`mt-2`,onClick:w},{default:B(()=>[D(L(s),{icon:`mdi:cloud-lock-outline`}),E(` `+z(L(a)(`mcpModule.config.oauth.useRemoteAccessUrl`)),1)]),_:1})):R(``,!0),l(`div`,Bh,z(L(a)(`mcpModule.config.oauth.publicBaseUrlDescription`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`mcpModule.config.oauth.enabledTitle`),prop:`oauthEnabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(f).oauthEnabled,"onUpdate:modelValue":t[2]||=e=>L(f).oauthEnabled=e,name:`oauthEnabled`,disabled:!L(f).enabled},null,8,[`modelValue`,`disabled`]),l(`div`,Vh,z(L(a)(`mcpModule.config.oauth.enabledDescription`)),1)]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`mcpModule.config.capabilities.title`),prop:`capabilities`},{default:B(()=>[D(L(ri),{modelValue:L(f).capabilities,"onUpdate:modelValue":t[3]||=e=>L(f).capabilities=e},{default:B(()=>[(A(!0),i(V,null,I(L(u),e=>(A(),i(`div`,{key:e,class:`mb-3`},[D(L(ii),{value:e,name:`capability-${e}`},{default:B(()=>[E(z(L(a)(`mcpModule.capabilities.${e}.title`)),1)]),_:2},1032,[`value`,`name`]),l(`div`,Hh,z(L(a)(`mcpModule.capabilities.${e}.description`)),1)]))),128))]),_:1},8,[`modelValue`])]),_:1},8,[`label`]),D(L(Q),{type:`warning`,title:L(a)(`mcpModule.config.capabilities.warningTitle`),description:L(a)(`mcpModule.config.capabilities.warningDescription`),closable:!1,"show-icon":``,class:`mb-4`},null,8,[`title`,`description`]),D(L(Vt)),D(L(Z),{label:L(a)(`mcpModule.config.allowedOrigins.title`),prop:`allowedOrigins`},{default:B(()=>[l(`div`,Uh,[(A(!0),i(V,null,I(L(f).allowedOrigins,(e,t)=>(A(),i(`div`,{key:t,class:`flex gap-2`},[D(L(U),{modelValue:L(f).allowedOrigins[t],"onUpdate:modelValue":e=>L(f).allowedOrigins[t]=e,placeholder:L(a)(`mcpModule.config.allowedOrigins.placeholder`),name:`allowedOrigin-${t}`},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`,`name`]),D(L(Oe),{type:`danger`,plain:``,"aria-label":L(a)(`mcpModule.actions.removeOrigin`),onClick:e=>y(t)},{default:B(()=>[D(L(s),{icon:`mdi:delete-outline`})]),_:1},8,[`aria-label`,`onClick`])]))),128)),D(L(Oe),{plain:``,class:`self-start`,onClick:v},{default:B(()=>[D(L(s),{icon:`mdi:plus`}),E(` `+z(L(a)(`mcpModule.actions.addOrigin`)),1)]),_:1})]),l(`div`,Wh,z(L(a)(`mcpModule.config.allowedOrigins.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Kh={"cs-CZ":{menu:{clients:`Klienti MCP`,oauth:`MCP OAuth přístup`},actions:{create:`Vytvořit klienta`,edit:`Upravit`,save:`Uložit`,rotate:`Obnovit`,revoke:`Odvolat`,delete:`Smazat`,cancel:`Zrušit`,done:`Hotovo`,addOrigin:`Přidat zdroj`,removeOrigin:`Odebrat zdroj`,copyEndpoint:`Kopírovat koncový bod`,resetFilters:`Zrušit filtry`,add:`Přidat`,close:`Zavřít`,discard:`Zahodit`,yes:`Ano`,no:`Ne`,retry:`Zkusit znovu`},capabilities:{read:{title:`Čtení`,description:`Čtení omezeného kontextu domácnosti, zařízení, počasí, energie a zabezpečení.`},write:{title:`Zápis`,description:`Přímé nastavování podporovaných vlastností zařízení. Může ovlivnit fyzická zařízení.`},trigger:{title:`Spouštění`,description:`Spouštění scén a akcí osvětlení v prostoru. Může ovlivnit fyzická zařízení.`}},config:{about:{title:`Bezpečný přístup pro agenty`,description:`MCP zpřístupňuje místním klientům pouze vybraný katalog. Nejde o obecný proxy přístup k OpenAPI.`},enabled:{title:`Povolit koncový bod MCP`},endpoint:{title:`Koncový bod MCP této instalace`,description:`Použijte tuto adresu URL s důvěryhodným klientem MCP a jednorázově zobrazenými přihlašovacími údaji.`},oauth:{warningTitle:`Autorizace dostupná z internetu`,warningDescription:`OAuth zpřístupňuje autorizační trasy pod nastavenou veřejnou identitou. Před povolením použijte důvěryhodný reverzní proxy server a platný certifikát HTTPS.`,publicBaseUrlTitle:`Veřejná základní URL OAuth`,publicBaseUrlDescription:`Kanonická externí HTTPS URL používaná jako identita OAuth. Její změna odvolá veškerý přístup OAuth a zachová statické klienty MCP.`,publicBaseUrlPlaceholder:`https://panel.example.com`,publicBaseUrlInvalid:`Použijte absolutní HTTPS URL bez přihlašovacích údajů, parametrů, fragmentu a koncového lomítka.`,useRemoteAccessUrl:`Použít URL vzdáleného přístupu`,enabledTitle:`Povolit MCP OAuth`,enabledDescription:`Před otevřením všech tras OAuth ověří připravenost zabezpečení. Vypnutí odvolá všechna oprávnění a tokeny OAuth a uzavře pouze odběry OAuth.`},capabilities:{title:`Limit oprávnění instalace`,warningTitle:`Přístup k fyzickým zařízením`,warningDescription:`Oprávnění k zápisu a spouštění mohou měnit stav fyzických zařízení. Každému klientovi udělte jen nezbytná oprávnění.`},allowedOrigins:{title:`Další povolené zdroje prohlížeče`,description:`Volitelné normalizované zdroje pro klienty MCP v prohlížeči. Klienti v místní síti je obvykle nepotřebují.`,placeholder:`https://agent.example.com`,invalid:`Použijte absolutní zdroj HTTP(S) bez cesty, parametrů, fragmentu a přihlašovacích údajů.`}},clients:{title:`Klienti MCP`,subtitle:`Vytvářejte a spravujte přihlašovací údaje agentů pro tuto instalaci.`,securityTitle:`Používejte důvěryhodné sítě`,securityDescription:`Upřednostněte přístup přes LAN nebo VPN a HTTPS. Přihlašovací údaje se zobrazí pouze jednou a později je nelze načíst.`,columns:{name:`Klient`,status:`Stav`,capabilities:`Oprávnění`,expires:`Platnost do`,lastUsed:`Naposledy použito`,actions:`Akce`},empty:`Dosud nebyli vytvořeni žádní klienti MCP.`,none:`Žádné`,never:`Nikdy`,noDescription:`Bez popisu`,loading:`Načítání MCP klientů…`,noFilteredResults:`Žádný MCP klient neodpovídá zvoleným filtrům.`,searchPlaceholder:`Hledat podle názvu nebo popisu`,filterAll:`Vše`},clientForm:{createTitle:`Vytvořit klienta MCP`,editTitle:`Upravit klienta MCP`,name:`Název`,nameRequired:`Zadejte název klienta.`,description:`Popis`,enabled:`Povoleno`,capabilities:`Oprávnění klienta`,ceilingHint:`Udělit lze pouze oprávnění povolená v konfiguraci modulu.`,expiresInDays:`Platnost přihlašovacích údajů (dny)`,expiryRequired:`Zvolte konečnou dobu platnosti přihlašovacích údajů.`,formSubtitle:`Pojmenujte agenta a zvolte, k čemu smí přistupovat.`},rotate:{title:`Obnovit přihlašovací údaje`,warning:`Aktuální přihlašovací údaje budou okamžitě odvolány. Připojené klienty je nutné aktualizovat novým tokenem.`},token:{title:`Nyní zkopírujte přihlašovací údaje MCP`,warningTitle:`Zobrazí se pouze jednou`,warningDescription:`Uložte přihlašovací údaje klienta {name} do bezpečného správce hesel. Po zavření tohoto dialogu je již nelze načíst.`,copy:`Kopírovat přihlašovací údaje`,copied:`Zkopírováno`},status:{active:`Aktivní`,disabled:`Zakázáno`,revoked:`Odvoláno`,expired:`Platnost vypršela`},confirm:{revoke:`Odvolat aktuální přihlašovací údaje klienta {name}? Připojení klienti okamžitě ztratí přístup.`,delete:`Smazat klienta {name}? Jeho přihlašovací údaje budou odvolány a záznam klienta nebude možné obnovit.`,bulkRevoke:`Odvolat pověření pro {count} vybraných klientů?`,bulkDelete:`Smazat {count} vybraných klientů?`,discard:`Zahodit neuložené změny?`},oauthConsent:{title:`Povolit přístup MCP`,subtitle:`Před schválením zkontrolujte, co přesně může vzdálený klient dělat.`,installation:`Instalace`,client:`Žádající klient`,redirect:`Cíl přesměrování`,scopes:`Požadovaný přístup`,grantExpiry:`Platnost oprávnění (dny)`,accessExpiry:`Přístupové tokeny vyprší za {minutes} minut.`,offlineAccess:`Obnovovací tokeny umožňují pokračovat v přístupu nejvýše 30 dní, i když oprávnění platí déle.`,physicalWarningTitle:`Tento klient může ovlivnit fyzická zařízení`,physicalWarning:`Přístup pro zápis nebo spouštění může změnit stav zařízení, spouštět scény a ovlivnit osoby v instalaci.`,approve:`Povolit přístup`,deny:`Zamítnout`,loading:`Načítání žádosti o autorizaci…`,invalid:`Tato žádost o autorizaci je neplatná, vypršela nebo již není dostupná.`,scopeRequired:`Povolte alespoň jedno oprávnění MCP, nebo žádost zamítněte.`,scope:{"mcp:read":`Číst kontext instalace a podporovaný stav zařízení`,"mcp:write":`Měnit podporované vlastnosti fyzických zařízení`,"mcp:trigger":`Spouštět scény a vyšší fyzické akce`,offline_access:`Obnovovat přístup bez dalšího dotazu nejvýše 30 dní`}},messages:{configSaved:`Konfigurace MCP byla uložena.`,configSaveFailed:`Konfiguraci MCP se nepodařilo uložit.`,endpointCopied:`Koncový bod MCP byl zkopírován.`,copyFailed:`Hodnotu se nepodařilo zkopírovat.`,capabilitiesOutsideCeiling:`Oprávnění klienta musí zůstat v rámci limitu oprávnění modulu.`,loadFailed:`Klienty MCP se nepodařilo načíst.`,created:`Klient MCP byl vytvořen.`,createFailed:`Klienta MCP se nepodařilo vytvořit.`,updated:`Klient MCP byl aktualizován.`,updateFailed:`Klienta MCP se nepodařilo aktualizovat.`,rotated:`Přihlašovací údaje MCP byly obnoveny.`,rotateFailed:`Přihlašovací údaje MCP se nepodařilo obnovit.`,revoked:`Klient MCP byl odvolán.`,revokeFailed:`Klienta MCP se nepodařilo odvolat.`,deleted:`Klient MCP byl smazán.`,deleteFailed:`Klienta MCP se nepodařilo smazat.`,bulkFailed:`{count} klientů se nepodařilo aktualizovat.`,bulkSucceeded:`{count} klientů bylo aktualizováno.`},oauthManagement:{title:`MCP OAuth přístup`,subtitle:`Předem zaregistrujte vzdálené klienty a zrušte jejich povolení a tokeny.`,securityTitle:`Tajemství OAuth se nikdy nezobrazují`,securityDescription:`Tato stránka zobrazuje pouze neveřejné identifikátory pro správu. Odvolání okamžitě uzavře odpovídající odběry MCP. Resetování hesla Smart Panel neodvolává přístup OAuth.`,tabs:{clients:`Klienti`,grants:`Oprávnění`,accessTokens:`Přístupové tokeny`,refreshFamilies:`Obnovovací skupiny`},columns:{client:`Klient`,status:`Stav`,scopes:`Rozsahy`,expires:`Vyprší`,activeTokens:`Aktivní tokeny`,actions:`Akce`},empty:{clients:`Nebyl předem zaregistrován žádný OAuth klient.`,grants:`Nebyly schváleny žádné OAuth granty.`,accessTokens:`Žádné aktivní OAuth přístupové tokeny.`,refreshFamilies:`Žádné aktivní OAuth skupiny obnovy.`},clientId:`ID klienta`,grantId:`ID grantu`,familyId:`ID rodiny`,redirectUris:`URI pro přesměrování`,createClient:`Předem zaregistrovat klienta OAuth`,revokeAll:`Odvolat veškerý OAuth přístup`,editClient:`Upravit klienta OAuth`,editGrant:`Omezit rozsahy grantu OAuth`,name:`Název`,nameRequired:`Zadejte název klienta.`,redirectRequired:`Přidejte alespoň jedno přesné URI přesměrování.`,scopesRequired:`Vyberte alespoň jeden maximální rozsah.`,grantScopesRequired:`Ponechte alespoň jeden schválený rozsah.`,grantReductionNotice:`Rozsahy schopností je možné jen odebrat. Přidání přístupu vyžaduje nové schválení; pro odebrání offline přístupu odvolejte grant.`,addRedirect:`Přidat URI přesměrování`,physicalWarning:`Rozsahy zápisu nebo spuštění mohou ovlivnit fyzická zařízení.`,status:{active:`Aktivní`,disabled:`Zakázaný`,inactive:`Neaktivní`,revoked:`Odvolaný`,expired:`Vypršelo`,enabled:`Povoleno`},scope:{"mcp:read":`Čtení`,"mcp:write":`Zápis`,"mcp:trigger":`Spuštění`,offline_access:`Offline přístup`},confirm:{all:`Odvolat každý MCP OAuth grant a token a zavřít každé OAuth předplatné? Statické MCP přihlašovací údaje a streamy zůstávají aktivní. Použijte tuto explicitní akci obnovení, protože resetování hesla Smart Panel neodvolává OAuth přístup.`,client:`Vypnout {name}, odvolat všechny jeho granty a tokeny a zavřít jeho OAuth předplatná?`,grant:`Odvolat tento grant pro {name}, jeho tokeny a odpovídající předplatná?`,accessToken:`Odvolat tento přístupový token pro {name} a zavřít odpovídající předplatné?`,refreshFamily:`Odvolat tuto skupinu obnovy pro {name}, všechny z ní vydané přístupové tokeny a odpovídající předplatná?`},messages:{loadFailed:`Data autorizace OAuth se nepodařilo načíst.`,created:`OAuth klient byl předem zaregistrován.`,createFailed:`Nepodařilo se vytvořit klienta OAuth.`,updated:`Klient OAuth byl aktualizován.`,updateFailed:`Klienta OAuth se nepodařilo aktualizovat.`,clientRevoked:`Klient OAuth byl deaktivován a odvolán.`,grantRevoked:`OAuth grant byl odvolán.`,grantUpdated:`Rozsahy OAuth grantu byly sníženy.`,grantUpdateFailed:`Rozsahy OAuth grantu se nepodařilo aktualizovat.`,accessTokenRevoked:`Přístupový token OAuth byl odvolán.`,refreshFamilyRevoked:`Skupina obnovy OAuth byla odvolána.`,allRevoked:`Veškerý MCP OAuth přístup byl odvolán.`,revokeFailed:`Nepodařilo se odvolat OAuth autorizaci.`},clientFormSubtitle:`Zadejte přesměrovací URI a strop oprávnění pro tohoto klienta.`,grantFormSubtitle:`Zužte oprávnění, která toto udělení již má.`,searchPlaceholder:`Hledat podle názvu klienta`},headings:{discard:`Zahodit změny`}},"de-DE":{menu:{clients:`MCP-Clients`,oauth:`MCP OAuth-Zugriff`},actions:{create:`Client erstellen`,edit:`Bearbeiten`,save:`Speichern`,rotate:`Erneuern`,revoke:`Widerrufen`,delete:`Löschen`,cancel:`Abbrechen`,done:`Fertig`,addOrigin:`Origin hinzufügen`,removeOrigin:`Origin entfernen`,copyEndpoint:`Endpunkt kopieren`,resetFilters:`Filter zurücksetzen`,add:`Hinzufügen`,close:`Schließen`,discard:`Verwerfen`,yes:`Ja`,no:`Nein`,retry:`Erneut versuchen`},capabilities:{read:{title:`Lesen`,description:`Begrenzte Informationen zu Zuhause, Geräten, Wetter, Energie und Sicherheit lesen.`},write:{title:`Schreiben`,description:`Unterstützte Geräteeigenschaften direkt setzen. Dies kann physische Geräte beeinflussen.`},trigger:{title:`Auslösen`,description:`Szenen und übergeordnete Beleuchtungsaktionen ausführen. Dies kann physische Geräte beeinflussen.`}},config:{about:{title:`Sicherer Agentenzugriff`,description:`MCP stellt lokalen Clients nur einen kuratierten Katalog bereit. Es ist kein allgemeiner OpenAPI-Proxy.`},enabled:{title:`MCP-Endpunkt aktivieren`},endpoint:{title:`MCP-Endpunkt der Installation`,description:`Verwenden Sie diese URL mit einem vertrauenswürdigen MCP-Client und den einmalig angezeigten Zugangsdaten.`},oauth:{warningTitle:`Öffentlich erreichbare Autorisierung`,warningDescription:`OAuth stellt Autorisierungsrouten unter der konfigurierten öffentlichen Identität bereit. Verwenden Sie vor der Aktivierung einen vertrauenswürdigen Reverse-Proxy und ein gültiges HTTPS-Zertifikat.`,publicBaseUrlTitle:`Öffentliche OAuth-Basis-URL`,publicBaseUrlDescription:`Kanonische externe HTTPS-URL für die OAuth-Identität. Eine Änderung widerruft alle OAuth-Zugriffe, während statische MCP-Clients erhalten bleiben.`,publicBaseUrlPlaceholder:`https://panel.example.com`,publicBaseUrlInvalid:`Verwenden Sie eine absolute HTTPS-URL ohne Zugangsdaten, Abfrage, Fragment oder abschließenden Schrägstrich.`,useRemoteAccessUrl:`Fernzugriffs-URL verwenden`,enabledTitle:`MCP OAuth aktivieren`,enabledDescription:`Prüft vor dem Öffnen aller OAuth-Routen die Sicherheitsbereitschaft. Beim Deaktivieren werden alle OAuth-Berechtigungen und Tokens widerrufen und nur OAuth-Abonnements geschlossen.`},capabilities:{title:`Berechtigungsgrenze der Installation`,warningTitle:`Zugriff auf physische Geräte`,warningDescription:`Schreib- und Auslöseberechtigungen können den Zustand physischer Geräte ändern. Gewähren Sie jedem Client nur die erforderlichen Berechtigungen.`},allowedOrigins:{title:`Zusätzlich erlaubte Browser-Origins`,description:`Optionale normalisierte Origins für browserbasierte MCP-Clients. Clients im lokalen Netzwerk benötigen sie normalerweise nicht.`,placeholder:`https://agent.example.com`,invalid:`Verwenden Sie eine absolute HTTP(S)-Origin ohne Pfad, Abfrage, Fragment oder Zugangsdaten.`}},clients:{title:`MCP-Clients`,subtitle:`Lokale Agentenzugangsdaten dieser Installation erstellen und verwalten.`,securityTitle:`Vertrauenswürdige Netzwerke verwenden`,securityDescription:`Bevorzugen Sie LAN- oder VPN-Zugriff und HTTPS. Zugangsdaten werden nur einmal angezeigt und können später nicht erneut abgerufen werden.`,columns:{name:`Kunde`,status:`Status`,capabilities:`Berechtigungen`,expires:`Gültig bis`,lastUsed:`Zuletzt verwendet`,actions:`Aktionen`},empty:`Es wurden noch keine MCP-Clients erstellt.`,none:`Keine`,never:`Nie`,noDescription:`Keine Beschreibung`,loading:`MCP-Clients werden geladen…`,noFilteredResults:`Kein MCP-Client entspricht den aktuellen Filtern.`,searchPlaceholder:`Nach Name oder Beschreibung suchen`,filterAll:`Alle`},clientForm:{createTitle:`MCP-Client erstellen`,editTitle:`MCP-Client bearbeiten`,name:`Name`,nameRequired:`Geben Sie einen Client-Namen ein.`,description:`Beschreibung`,enabled:`Aktiviert`,capabilities:`Client-Berechtigungen`,ceilingHint:`Es können nur in der Modulkonfiguration aktivierte Berechtigungen gewährt werden.`,expiresInDays:`Gültigkeitsdauer der Zugangsdaten (Tage)`,expiryRequired:`Wählen Sie eine begrenzte Gültigkeitsdauer.`,formSubtitle:`Benennen Sie den Agenten und wählen Sie, worauf er zugreifen darf.`},rotate:{title:`Zugangsdaten erneuern`,warning:`Die aktuellen Zugangsdaten werden sofort widerrufen. Verbundene Clients müssen mit dem neuen Token aktualisiert werden.`},token:{title:`MCP-Zugangsdaten jetzt kopieren`,warningTitle:`Wird nur einmal angezeigt`,warningDescription:`Speichern Sie die Zugangsdaten für {name} in einem sicheren Passwortmanager. Nach dem Schließen dieses Dialogs können sie nicht erneut abgerufen werden.`,copy:`Zugangsdaten kopieren`,copied:`Kopiert`},status:{active:`Aktiv`,disabled:`Deaktiviert`,revoked:`Widerrufen`,expired:`Abgelaufen`},confirm:{revoke:`Aktuelle Zugangsdaten für {name} widerrufen? Verbundene Clients verlieren sofort den Zugriff.`,delete:`{name} löschen? Die Zugangsdaten werden widerrufen und der Client-Datensatz kann nicht wiederhergestellt werden.`,bulkRevoke:`Anmeldedaten für {count} ausgewählte Clients widerrufen?`,bulkDelete:`{count} ausgewählte Clients löschen?`,discard:`Nicht gespeicherte Änderungen verwerfen?`},oauthConsent:{title:`MCP-Zugriff autorisieren`,subtitle:`Prüfen Sie genau, was dieser Remote-Client tun darf, bevor Sie den Zugriff genehmigen.`,installation:`Installation`,client:`Anfragender Client`,redirect:`Weiterleitungsziel`,scopes:`Angeforderter Zugriff`,grantExpiry:`Gültigkeit der Freigabe (Tage)`,accessExpiry:`Zugriffstoken laufen nach {minutes} Minuten ab.`,offlineAccess:`Refresh-Token ermöglichen höchstens 30 Tage lang fortlaufenden Zugriff, auch wenn die Freigabe länger gilt.`,physicalWarningTitle:`Dieser Client kann physische Geräte beeinflussen`,physicalWarning:`Schreib- oder Ausführungszugriff kann Gerätezustände ändern, Szenen starten und Personen in der Installation betreffen.`,approve:`Zugriff genehmigen`,deny:`Ablehnen`,loading:`Autorisierungsanfrage wird geladen…`,invalid:`Diese Autorisierungsanfrage ist ungültig, abgelaufen oder nicht mehr verfügbar.`,scopeRequired:`Genehmigen Sie mindestens eine MCP-Berechtigung oder lehnen Sie die Anfrage ab.`,scope:{"mcp:read":`Installationskontext und unterstützte Gerätezustände lesen`,"mcp:write":`Unterstützte Eigenschaften physischer Geräte ändern`,"mcp:trigger":`Szenen und übergeordnete physische Aktionen ausführen`,offline_access:`Zugriff bis zu 30 Tage ohne erneute Nachfrage aktualisieren`}},messages:{configSaved:`MCP-Konfiguration wurde gespeichert.`,configSaveFailed:`MCP-Konfiguration konnte nicht gespeichert werden.`,endpointCopied:`MCP-Endpunkt wurde kopiert.`,copyFailed:`Der Wert konnte nicht kopiert werden.`,capabilitiesOutsideCeiling:`Client-Berechtigungen müssen innerhalb der Berechtigungsgrenze des Moduls liegen.`,loadFailed:`MCP-Clients konnten nicht geladen werden.`,created:`MCP-Client wurde erstellt.`,createFailed:`MCP-Client konnte nicht erstellt werden.`,updated:`MCP-Client wurde aktualisiert.`,updateFailed:`MCP-Client konnte nicht aktualisiert werden.`,rotated:`MCP-Zugangsdaten wurden erneuert.`,rotateFailed:`MCP-Zugangsdaten konnten nicht erneuert werden.`,revoked:`MCP-Client wurde widerrufen.`,revokeFailed:`MCP-Client konnte nicht widerrufen werden.`,deleted:`MCP-Client wurde gelöscht.`,deleteFailed:`MCP-Client konnte nicht gelöscht werden.`,bulkFailed:`{count} Clients konnten nicht aktualisiert werden.`,bulkSucceeded:`{count} Clients wurden aktualisiert.`},oauthManagement:{title:`MCP OAuth-Zugriff`,subtitle:`Registrieren Sie entfernte Clients vorab und widerrufen Sie deren Berechtigungen und Token.`,securityTitle:`OAuth-Geheimnisse werden niemals angezeigt`,securityDescription:`Diese Seite zeigt nur nicht-geheime Verwaltungskennungen an. Ein Widerruf schließt sofort passende MCP-Abonnements. Das Zurücksetzen eines Smart-Panel-Passworts entzieht keinen OAuth-Zugriff.`,tabs:{clients:`Kunden`,grants:`Berechtigungen`,accessTokens:`Zugriffstoken`,refreshFamilies:`Aktualisierungsfamilien`},columns:{client:`Kunde`,status:`Status`,scopes:`Bereiche`,expires:`Läuft ab`,activeTokens:`Aktive Token`,actions:`Aktionen`},empty:{clients:`Es wurden keine OAuth-Clients vorab registriert.`,grants:`Es wurden keine OAuth-Berechtigungen genehmigt.`,accessTokens:`Keine aktiven OAuth-Zugriffstoken.`,refreshFamilies:`Keine aktiven OAuth-Refresh-Familien.`},clientId:`Client-ID`,grantId:`Grant-ID`,familyId:`Familien-ID`,redirectUris:`Redirect-URIs`,createClient:`OAuth-Client vorab registrieren`,revokeAll:`Gesamten OAuth-Zugriff widerrufen`,editClient:`OAuth-Client bearbeiten`,editGrant:`OAuth-Grant-Berechtigungen reduzieren`,name:`Name`,nameRequired:`Geben Sie einen Client-Namen ein.`,redirectRequired:`Fügen Sie mindestens eine exakte Redirect-URI hinzu.`,scopesRequired:`Wählen Sie mindestens einen maximalen Scope.`,grantScopesRequired:`Mindestens einen genehmigten Scope beibehalten.`,grantReductionNotice:`Berechtigungsscopes können nur entfernt werden. Für neuen Zugriff ist eine neue Genehmigung nötig; widerrufen Sie den Grant, um Offline-Zugriff zu entfernen.`,addRedirect:`Redirect-URI hinzufügen`,physicalWarning:`Schreib- oder Trigger-Scopes können physische Geräte beeinflussen.`,status:{active:`Aktiv`,disabled:`Deaktiviert`,inactive:`Inaktiv`,revoked:`Widerrufen`,expired:`Abgelaufen`,enabled:`Aktiviert`},scope:{"mcp:read":`Lesen`,"mcp:write":`Schreiben`,"mcp:trigger":`Auslösen`,offline_access:`Offline-Zugriff`},confirm:{all:`Jeden MCP-OAuth-Grant und alle Token widerrufen und jedes OAuth-Abonnement schließen? Statische MCP-Anmeldedaten und Streams bleiben aktiv. Verwenden Sie diese explizite Wiederherstellungsaktion, da das Zurücksetzen des Smart-Panel-Passworts keinen OAuth-Zugriff widerruft.`,client:`{name} deaktivieren, alle Grants und Token widerrufen und dessen OAuth-Abonnements schließen?`,grant:`Diesen Grant für {name}, seine Token und passende Abonnements widerrufen?`,accessToken:`Diesen Zugriffstoken für {name} widerrufen und das passende Abonnement schließen?`,refreshFamily:`Diese Refresh-Familie für {name}, alle daraus ausgestellten Zugriffstoken und passende Abonnements widerrufen?`},messages:{loadFailed:`OAuth-Autorisierungsdaten konnten nicht geladen werden.`,created:`OAuth-Client vorab registriert.`,createFailed:`OAuth-Client konnte nicht erstellt werden.`,updated:`OAuth-Client aktualisiert.`,updateFailed:`OAuth-Client konnte nicht aktualisiert werden.`,clientRevoked:`OAuth-Client deaktiviert und widerrufen.`,grantRevoked:`OAuth-Grant widerrufen.`,grantUpdated:`OAuth-Grant-Berechtigungen reduziert.`,grantUpdateFailed:`OAuth-Grant-Berechtigungen konnten nicht aktualisiert werden.`,accessTokenRevoked:`OAuth-Zugriffstoken widerrufen.`,refreshFamilyRevoked:`OAuth-Refresh-Familie widerrufen.`,allRevoked:`Gesamter MCP-OAuth-Zugriff widerrufen.`,revokeFailed:`OAuth-Autorisierung konnte nicht widerrufen werden.`},clientFormSubtitle:`Legen Sie Redirect-URIs und die Berechtigungsobergrenze fest.`,grantFormSubtitle:`Schränken Sie die bereits erteilten Berechtigungen ein.`,searchPlaceholder:`Nach Client-Namen suchen`},headings:{discard:`Änderungen verwerfen`}},"en-US":{menu:{clients:`MCP clients`,oauth:`MCP OAuth access`},actions:{create:`Create client`,edit:`Edit`,save:`Save`,rotate:`Rotate`,revoke:`Revoke`,delete:`Delete`,cancel:`Cancel`,done:`Done`,addOrigin:`Add origin`,removeOrigin:`Remove origin`,copyEndpoint:`Copy endpoint`,resetFilters:`Reset filters`,add:`Add`,close:`Close`,discard:`Discard`,yes:`Yes`,no:`No`,retry:`Retry`},capabilities:{read:{title:`Read`,description:`Read bounded home, device, weather, energy, and security context.`},write:{title:`Write`,description:`Set supported device properties directly. This can affect physical devices.`},trigger:{title:`Trigger`,description:`Run scenes and higher-level space lighting actions. This can affect physical devices.`}},config:{about:{title:`Secure agent access`,description:`MCP exposes only a curated catalog to installation-local clients. It is not a generic OpenAPI proxy.`},enabled:{title:`Enable MCP endpoint`},endpoint:{title:`Installation MCP endpoint`,description:`Use this URL with a trusted MCP client and the one-time bearer credential.`},oauth:{warningTitle:`Internet-facing authorization`,warningDescription:`OAuth exposes authorization routes at the configured public identity. Use a trusted reverse proxy and valid HTTPS certificate before enabling it.`,publicBaseUrlTitle:`OAuth public base URL`,publicBaseUrlDescription:`Canonical external HTTPS URL used as the OAuth identity. Changing it revokes all OAuth access while preserving static MCP clients.`,publicBaseUrlPlaceholder:`https://panel.example.com`,publicBaseUrlInvalid:`Use an absolute HTTPS URL without credentials, query, fragment, or trailing slash.`,useRemoteAccessUrl:`Use remote access URL`,enabledTitle:`Enable MCP OAuth`,enabledDescription:`Runs readiness checks before opening the complete OAuth route set. Disabling revokes every OAuth grant and token and closes only OAuth subscriptions.`},capabilities:{title:`Installation capability ceiling`,warningTitle:`Physical device access`,warningDescription:`Write and trigger capabilities can change physical device state. Grant only what each client needs.`},allowedOrigins:{title:`Additional allowed browser origins`,description:`Optional normalized origins for browser-based MCP clients. LAN server clients usually do not need this.`,placeholder:`https://agent.example.com`,invalid:`Use an absolute HTTP(S) origin without a path, query, fragment, or credentials.`}},clients:{title:`MCP clients`,subtitle:`Create and manage installation-local agent credentials.`,securityTitle:`Use trusted networks`,securityDescription:`Prefer LAN or VPN access and HTTPS. Credentials are shown once and cannot be retrieved later.`,columns:{name:`Client`,status:`Status`,capabilities:`Capabilities`,expires:`Expires`,lastUsed:`Last used`,actions:`Actions`},empty:`No MCP clients have been created.`,none:`None`,never:`Never`,noDescription:`No description`,loading:`Loading MCP clients…`,noFilteredResults:`No MCP client matches the current filters.`,searchPlaceholder:`Search by name or description`,filterAll:`All`},clientForm:{createTitle:`Create MCP client`,editTitle:`Edit MCP client`,name:`Name`,nameRequired:`Enter a client name.`,description:`Description`,enabled:`Enabled`,capabilities:`Client capabilities`,ceilingHint:`Only capabilities enabled in the module configuration can be granted.`,expiresInDays:`Credential lifetime (days)`,expiryRequired:`Choose a finite credential lifetime.`,formSubtitle:`Give the agent a name and choose what it may access.`},rotate:{title:`Rotate credential`,warning:`The current credential is revoked immediately. Connected clients must be updated with the new token.`},token:{title:`Copy the MCP credential now`,warningTitle:`Shown only once`,warningDescription:`Save the credential for {name} in a secure password manager. It cannot be retrieved after this dialog closes.`,copy:`Copy credential`,copied:`Copied`},status:{active:`Active`,disabled:`Disabled`,revoked:`Revoked`,expired:`Expired`},confirm:{revoke:`Revoke the current credential for {name}? Connected clients will lose access immediately.`,delete:`Delete {name}? Its credential will be revoked and the client record cannot be recovered.`,bulkRevoke:`Revoke credentials for {count} selected clients?`,bulkDelete:`Delete {count} selected clients?`,discard:`Discard the unsaved changes?`},oauthConsent:{title:`Authorize MCP access`,subtitle:`Review exactly what this remote client may do before approving access.`,installation:`Installation`,client:`Requesting client`,redirect:`Redirect destination`,scopes:`Requested access`,grantExpiry:`Grant lifetime (days)`,accessExpiry:`Access tokens expire after {minutes} minutes.`,offlineAccess:`Refresh tokens allow continued access for at most 30 days, even when the grant lasts longer.`,physicalWarningTitle:`This client can affect physical devices`,physicalWarning:`Write or trigger access can change device state, run scenes, and affect people in the installation.`,approve:`Approve access`,deny:`Deny`,loading:`Loading authorization request…`,invalid:`This authorization request is invalid, expired, or no longer available.`,scopeRequired:`Approve at least one MCP capability or deny the request.`,scope:{"mcp:read":`Read installation context and supported device state`,"mcp:write":`Change supported physical-device properties`,"mcp:trigger":`Run scenes and higher-level physical actions`,offline_access:`Refresh access without asking again for up to 30 days`}},oauthManagement:{title:`MCP OAuth access`,subtitle:`Pre-register remote clients and revoke their grants and tokens.`,securityTitle:`OAuth secrets are never displayed`,securityDescription:`This page exposes only non-secret management identifiers. Revocation immediately closes matching MCP subscriptions. Resetting a Smart Panel password does not revoke OAuth access.`,tabs:{clients:`Clients`,grants:`Grants`,accessTokens:`Access tokens`,refreshFamilies:`Refresh families`},columns:{client:`Client`,status:`Status`,scopes:`Scopes`,expires:`Expires`,activeTokens:`Active tokens`,actions:`Actions`},empty:{clients:`No OAuth clients have been pre-registered.`,grants:`No OAuth grants have been approved.`,accessTokens:`No active OAuth access tokens.`,refreshFamilies:`No active OAuth refresh families.`},clientId:`Client ID`,grantId:`Grant ID`,familyId:`Family ID`,redirectUris:`Redirect URIs`,createClient:`Pre-register OAuth client`,revokeAll:`Revoke all OAuth access`,editClient:`Edit OAuth client`,editGrant:`Reduce OAuth grant scopes`,name:`Name`,nameRequired:`Enter a client name.`,redirectRequired:`Add at least one exact redirect URI.`,scopesRequired:`Select at least one maximum scope.`,grantScopesRequired:`Keep at least one approved scope.`,grantReductionNotice:`Capability scopes can only be removed. Adding access requires a new approval; revoke the grant to remove offline access.`,addRedirect:`Add redirect URI`,physicalWarning:`Write or trigger scopes can affect physical devices.`,status:{active:`Active`,disabled:`Disabled`,inactive:`Inactive`,revoked:`Revoked`,expired:`Expired`,enabled:`Enabled`},scope:{"mcp:read":`Read`,"mcp:write":`Write`,"mcp:trigger":`Trigger`,offline_access:`Offline access`},confirm:{all:`Revoke every MCP OAuth grant and token and close every OAuth subscription? Static MCP credentials and streams remain active. Use this explicit recovery action because resetting a Smart Panel password does not revoke OAuth access.`,client:`Disable {name}, revoke all of its grants and tokens, and close its OAuth subscriptions?`,grant:`Revoke this grant for {name}, its tokens, and matching subscriptions?`,accessToken:`Revoke this access token for {name} and close its matching subscription?`,refreshFamily:`Revoke this refresh family for {name}, all access tokens issued from it, and matching subscriptions?`},messages:{loadFailed:`OAuth authorization data could not be loaded.`,created:`OAuth client pre-registered.`,createFailed:`OAuth client could not be created.`,updated:`OAuth client updated.`,updateFailed:`OAuth client could not be updated.`,clientRevoked:`OAuth client disabled and revoked.`,grantRevoked:`OAuth grant revoked.`,grantUpdated:`OAuth grant scopes reduced.`,grantUpdateFailed:`OAuth grant scopes could not be updated.`,accessTokenRevoked:`OAuth access token revoked.`,refreshFamilyRevoked:`OAuth refresh family revoked.`,allRevoked:`All MCP OAuth access revoked.`,revokeFailed:`OAuth authorization could not be revoked.`},clientFormSubtitle:`Register the redirect URIs and the scope ceiling for this client.`,grantFormSubtitle:`Narrow the scopes this grant already holds.`,searchPlaceholder:`Search by client name`},messages:{configSaved:`MCP configuration saved.`,configSaveFailed:`MCP configuration could not be saved.`,endpointCopied:`MCP endpoint copied.`,copyFailed:`The value could not be copied.`,capabilitiesOutsideCeiling:`Client capabilities must stay within the module capability ceiling.`,loadFailed:`MCP clients could not be loaded.`,created:`MCP client created.`,createFailed:`MCP client could not be created.`,updated:`MCP client updated.`,updateFailed:`MCP client could not be updated.`,rotated:`MCP credential rotated.`,rotateFailed:`MCP credential could not be rotated.`,revoked:`MCP client revoked.`,revokeFailed:`MCP client could not be revoked.`,deleted:`MCP client deleted.`,deleteFailed:`MCP client could not be deleted.`,bulkFailed:`{count} clients could not be updated.`,bulkSucceeded:`{count} clients were updated.`},headings:{discard:`Discard changes`}},"es-ES":{menu:{clients:`Clientes MCP`,oauth:`Acceso OAuth de MCP`},actions:{create:`Crear cliente`,edit:`Editar`,save:`Guardar`,rotate:`Rotar`,revoke:`Revocar`,delete:`Eliminar`,cancel:`Cancelar`,done:`Listo`,addOrigin:`Añadir origen`,removeOrigin:`Eliminar origen`,copyEndpoint:`Copiar endpoint`,resetFilters:`Restablecer filtros`,add:`Añadir`,close:`Cerrar`,discard:`Descartar`,yes:`Sí`,no:`No`,retry:`Reintentar`},capabilities:{read:{title:`Lectura`,description:`Leer información limitada del hogar, dispositivos, tiempo, energía y seguridad.`},write:{title:`Escritura`,description:`Establecer directamente propiedades compatibles de dispositivos. Esto puede afectar a dispositivos físicos.`},trigger:{title:`Activación`,description:`Ejecutar escenas y acciones generales de iluminación. Esto puede afectar a dispositivos físicos.`}},config:{about:{title:`Acceso seguro para agentes`,description:`MCP solo expone un catálogo seleccionado a clientes locales de la instalación. No es un proxy genérico de OpenAPI.`},enabled:{title:`Habilitar endpoint MCP`},endpoint:{title:`Endpoint MCP de la instalación`,description:`Utiliza esta URL con un cliente MCP de confianza y la credencial mostrada una sola vez.`},oauth:{warningTitle:`Autorización expuesta a Internet`,warningDescription:`OAuth expone rutas de autorización en la identidad pública configurada. Usa un proxy inverso de confianza y un certificado HTTPS válido antes de habilitarlo.`,publicBaseUrlTitle:`URL base pública de OAuth`,publicBaseUrlDescription:`URL HTTPS externa canónica usada como identidad OAuth. Cambiarla revoca todo el acceso OAuth y conserva los clientes MCP estáticos.`,publicBaseUrlPlaceholder:`https://panel.example.com`,publicBaseUrlInvalid:`Utiliza una URL HTTPS absoluta sin credenciales, consulta, fragmento ni barra final.`,useRemoteAccessUrl:`Usar URL de acceso remoto`,enabledTitle:`Habilitar MCP OAuth`,enabledDescription:`Comprueba la preparación de seguridad antes de abrir todas las rutas OAuth. Al deshabilitarlo se revocan todas las concesiones y tokens OAuth y solo se cierran las suscripciones OAuth.`},capabilities:{title:`Límite de capacidades de la instalación`,warningTitle:`Acceso a dispositivos físicos`,warningDescription:`Las capacidades de escritura y activación pueden cambiar el estado de dispositivos físicos. Concede a cada cliente solo lo necesario.`},allowedOrigins:{title:`Orígenes adicionales permitidos en el navegador`,description:`Orígenes normalizados opcionales para clientes MCP en el navegador. Los clientes de la red local normalmente no los necesitan.`,placeholder:`https://agent.example.com`,invalid:`Utiliza un origen HTTP(S) absoluto sin ruta, consulta, fragmento ni credenciales.`}},clients:{title:`Clientes MCP`,subtitle:`Crea y administra credenciales de agentes locales para esta instalación.`,securityTitle:`Utiliza redes de confianza`,securityDescription:`Da prioridad al acceso por LAN o VPN y a HTTPS. Las credenciales se muestran una sola vez y no pueden recuperarse después.`,columns:{name:`Cliente`,status:`Estado`,capabilities:`Capacidades`,expires:`Caduca`,lastUsed:`Último uso`,actions:`Acciones`},empty:`Todavía no se ha creado ningún cliente MCP.`,none:`Ninguna`,never:`Nunca`,noDescription:`Sin descripción`,loading:`Cargando clientes MCP…`,noFilteredResults:`Ningún cliente MCP coincide con los filtros actuales.`,searchPlaceholder:`Buscar por nombre o descripción`,filterAll:`Todos`},clientForm:{createTitle:`Crear cliente MCP`,editTitle:`Editar cliente MCP`,name:`Nombre`,nameRequired:`Introduce un nombre para el cliente.`,description:`Descripción`,enabled:`Habilitado`,capabilities:`Capacidades del cliente`,ceilingHint:`Solo se pueden conceder las capacidades habilitadas en la configuración del módulo.`,expiresInDays:`Duración de la credencial (días)`,expiryRequired:`Elige una duración finita para la credencial.`,formSubtitle:`Asigne un nombre al agente y elija a qué puede acceder.`},rotate:{title:`Rotar credencial`,warning:`La credencial actual se revoca de inmediato. Los clientes conectados deben actualizarse con el nuevo token.`},token:{title:`Copia ahora la credencial MCP`,warningTitle:`Solo se muestra una vez`,warningDescription:`Guarda la credencial de {name} en un gestor de contraseñas seguro. No podrá recuperarse después de cerrar este diálogo.`,copy:`Copiar credencial`,copied:`Copiada`},status:{active:`Activo`,disabled:`Deshabilitado`,revoked:`Revocado`,expired:`Caducado`},confirm:{revoke:`¿Revocar la credencial actual de {name}? Los clientes conectados perderán el acceso inmediatamente.`,delete:`¿Eliminar {name}? Su credencial se revocará y el registro del cliente no podrá recuperarse.`,bulkRevoke:`¿Revocar las credenciales de {count} clientes seleccionados?`,bulkDelete:`¿Eliminar {count} clientes seleccionados?`,discard:`¿Descartar los cambios sin guardar?`},oauthConsent:{title:`Autorizar acceso MCP`,subtitle:`Revisa exactamente lo que este cliente remoto podrá hacer antes de aprobar el acceso.`,installation:`Instalación`,client:`Cliente solicitante`,redirect:`Destino de redirección`,scopes:`Acceso solicitado`,grantExpiry:`Duración de la autorización (días)`,accessExpiry:`Los tokens de acceso caducan después de {minutes} minutos.`,offlineAccess:`Los tokens de actualización permiten mantener el acceso durante un máximo de 30 días, aunque la autorización dure más.`,physicalWarningTitle:`Este cliente puede afectar a dispositivos físicos`,physicalWarning:`El acceso de escritura o ejecución puede cambiar el estado de dispositivos, ejecutar escenas y afectar a personas en la instalación.`,approve:`Aprobar acceso`,deny:`Denegar`,loading:`Cargando solicitud de autorización…`,invalid:`Esta solicitud de autorización no es válida, ha caducado o ya no está disponible.`,scopeRequired:`Aprueba al menos una capacidad MCP o deniega la solicitud.`,scope:{"mcp:read":`Leer el contexto de la instalación y el estado compatible de dispositivos`,"mcp:write":`Cambiar propiedades compatibles de dispositivos físicos`,"mcp:trigger":`Ejecutar escenas y acciones físicas de nivel superior`,offline_access:`Actualizar el acceso sin volver a preguntar durante un máximo de 30 días`}},messages:{configSaved:`La configuración de MCP se ha guardado.`,configSaveFailed:`No se pudo guardar la configuración de MCP.`,endpointCopied:`Endpoint MCP copiado.`,copyFailed:`No se pudo copiar el valor.`,capabilitiesOutsideCeiling:`Las capacidades del cliente deben respetar el límite de capacidades del módulo.`,loadFailed:`No se pudieron cargar los clientes MCP.`,created:`Cliente MCP creado.`,createFailed:`No se pudo crear el cliente MCP.`,updated:`Cliente MCP actualizado.`,updateFailed:`No se pudo actualizar el cliente MCP.`,rotated:`Credencial MCP rotada.`,rotateFailed:`No se pudo rotar la credencial MCP.`,revoked:`Cliente MCP revocado.`,revokeFailed:`No se pudo revocar el cliente MCP.`,deleted:`Cliente MCP eliminado.`,deleteFailed:`No se pudo eliminar el cliente MCP.`,bulkFailed:`No se pudieron actualizar {count} clientes.`,bulkSucceeded:`Se actualizaron {count} clientes.`},oauthManagement:{title:`Acceso OAuth de MCP`,subtitle:`Pre-registre clientes remotos y revoque sus permisos y tokens.`,securityTitle:`Los secretos de OAuth nunca se muestran`,securityDescription:`Esta página solo expone identificadores de gestión no secretos. La revocación cierra inmediatamente las suscripciones MCP coincidentes. Restablecer la contraseña de Smart Panel no revoca el acceso OAuth.`,tabs:{clients:`Clientes`,grants:`Permisos`,accessTokens:`Tokens de acceso`,refreshFamilies:`Familias de actualización`},columns:{client:`Cliente`,status:`Estado`,scopes:`Ámbitos`,expires:`Caduca`,activeTokens:`Tokens activos`,actions:`Acciones`},empty:{clients:`No se han preregistrado clientes OAuth.`,grants:`No se han aprobado permisos OAuth.`,accessTokens:`No hay tokens de acceso OAuth activos.`,refreshFamilies:`No hay familias de actualización OAuth activas.`},clientId:`ID de cliente`,grantId:`ID de permiso`,familyId:`ID de familia`,redirectUris:`URI de redirección`,createClient:`Pre-registrar cliente OAuth`,revokeAll:`Revocar todo el acceso OAuth`,editClient:`Editar cliente OAuth`,editGrant:`Reducir ámbitos de permiso OAuth`,name:`Nombre`,nameRequired:`Ingrese un nombre de cliente.`,redirectRequired:`Añada al menos una URI de redirección exacta.`,scopesRequired:`Seleccione al menos un ámbito máximo.`,grantScopesRequired:`Conserve al menos un ámbito aprobado.`,grantReductionNotice:`Los ámbitos de capacidad solo se pueden eliminar. Para añadir acceso se requiere una aprobación nueva; revoque el permiso para quitar el acceso sin conexión.`,addRedirect:`Agregar URI de redirección`,physicalWarning:`Los ámbitos de escritura o activación pueden afectar a dispositivos físicos.`,status:{active:`Activo`,disabled:`Desactivado`,inactive:`Inactivo`,revoked:`Revocado`,expired:`Caducado`,enabled:`Habilitado`},scope:{"mcp:read":`Lectura`,"mcp:write":`Escritura`,"mcp:trigger":`Activación`,offline_access:`Acceso sin conexión`},confirm:{all:`¿Revocar todos los permisos y tokens OAuth de MCP y cerrar cada suscripción OAuth? Las credenciales y flujos estáticos de MCP permanecen activos. Use esta acción de recuperación explícita porque restablecer la contraseña de Smart Panel no revoca el acceso OAuth.`,client:`¿Deshabilitar {name}, revocar todos sus permisos y tokens y cerrar sus suscripciones OAuth?`,grant:`¿Revocar este permiso para {name}, sus tokens y sus suscripciones coincidentes?`,accessToken:`¿Revocar este token de acceso para {name} y cerrar su suscripción coincidente?`,refreshFamily:`¿Revocar esta familia de refresco para {name}, todos los tokens de acceso emitidos desde ella y las suscripciones coincidentes?`},messages:{loadFailed:`No se pudieron cargar los datos de autorización OAuth.`,created:`Cliente OAuth preregistrado.`,createFailed:`No se pudo crear el cliente OAuth.`,updated:`Cliente OAuth actualizado.`,updateFailed:`No se pudo actualizar el cliente OAuth.`,clientRevoked:`Cliente OAuth deshabilitado y revocado.`,grantRevoked:`Permiso OAuth revocado.`,grantUpdated:`Ámbitos de permiso OAuth reducidos.`,grantUpdateFailed:`No se pudieron actualizar los ámbitos de permiso OAuth.`,accessTokenRevoked:`Token de acceso OAuth revocado.`,refreshFamilyRevoked:`Familia de actualización OAuth revocada.`,allRevoked:`Todo el acceso OAuth de MCP revocado.`,revokeFailed:`No se pudo revocar la autorización OAuth.`},clientFormSubtitle:`Registre las URI de redirección y el límite de permisos del cliente.`,grantFormSubtitle:`Reduzca los permisos que ya tiene esta concesión.`,searchPlaceholder:`Buscar por nombre de cliente`},headings:{discard:`Descartar cambios`}},"pl-PL":{menu:{clients:`Klienci MCP`,oauth:`Dostęp OAuth MCP`},actions:{create:`Utwórz klienta`,edit:`Edytuj`,save:`Zapisz`,rotate:`Odnów`,revoke:`Unieważnij`,delete:`Usuń`,cancel:`Anuluj`,done:`Gotowe`,addOrigin:`Dodaj źródło`,removeOrigin:`Usuń źródło`,copyEndpoint:`Kopiuj endpoint`,resetFilters:`Resetuj filtry`,add:`Dodaj`,close:`Zamknij`,discard:`Odrzuć`,yes:`Tak`,no:`Nie`,retry:`Ponów`},capabilities:{read:{title:`Odczyt`,description:`Odczyt ograniczonych informacji o domu, urządzeniach, pogodzie, energii i bezpieczeństwie.`},write:{title:`Zapis`,description:`Bezpośrednie ustawianie obsługiwanych właściwości urządzeń. Może to wpływać na urządzenia fizyczne.`},trigger:{title:`Uruchamianie`,description:`Uruchamianie scen i nadrzędnych akcji oświetlenia. Może to wpływać na urządzenia fizyczne.`}},config:{about:{title:`Bezpieczny dostęp agentów`,description:`MCP udostępnia lokalnym klientom tylko wybrany katalog. Nie jest ogólnym proxy OpenAPI.`},enabled:{title:`Włącz endpoint MCP`},endpoint:{title:`Endpoint MCP instalacji`,description:`Użyj tego adresu URL z zaufanym klientem MCP i poświadczeniem wyświetlanym tylko raz.`},oauth:{warningTitle:`Autoryzacja dostępna z Internetu`,warningDescription:`OAuth udostępnia trasy autoryzacji pod skonfigurowaną publiczną tożsamością. Przed włączeniem użyj zaufanego reverse proxy i prawidłowego certyfikatu HTTPS.`,publicBaseUrlTitle:`Publiczny bazowy adres URL OAuth`,publicBaseUrlDescription:`Kanoniczny zewnętrzny adres HTTPS używany jako tożsamość OAuth. Jego zmiana unieważnia cały dostęp OAuth, zachowując statycznych klientów MCP.`,publicBaseUrlPlaceholder:`https://panel.example.com`,publicBaseUrlInvalid:`Użyj bezwzględnego adresu HTTPS bez poświadczeń, zapytania, fragmentu ani końcowego ukośnika.`,useRemoteAccessUrl:`Użyj adresu URL zdalnego dostępu`,enabledTitle:`Włącz MCP OAuth`,enabledDescription:`Przed otwarciem wszystkich tras OAuth sprawdza gotowość zabezpieczeń. Wyłączenie unieważnia wszystkie granty i tokeny OAuth oraz zamyka tylko subskrypcje OAuth.`},capabilities:{title:`Limit uprawnień instalacji`,warningTitle:`Dostęp do urządzeń fizycznych`,warningDescription:`Uprawnienia zapisu i uruchamiania mogą zmieniać stan urządzeń fizycznych. Przyznawaj klientom tylko niezbędne uprawnienia.`},allowedOrigins:{title:`Dodatkowe dozwolone źródła przeglądarki`,description:`Opcjonalne znormalizowane źródła dla klientów MCP w przeglądarce. Klienci w sieci lokalnej zwykle ich nie potrzebują.`,placeholder:`https://agent.example.com`,invalid:`Użyj bezwzględnego źródła HTTP(S) bez ścieżki, zapytania, fragmentu ani poświadczeń.`}},clients:{title:`Klienci MCP`,subtitle:`Twórz i zarządzaj lokalnymi poświadczeniami agentów dla tej instalacji.`,securityTitle:`Korzystaj z zaufanych sieci`,securityDescription:`Preferuj dostęp przez LAN lub VPN oraz HTTPS. Poświadczenia są wyświetlane tylko raz i nie można ich później odzyskać.`,columns:{name:`Klient`,status:`Stan`,capabilities:`Uprawnienia`,expires:`Wygasa`,lastUsed:`Ostatnio użyto`,actions:`Akcje`},empty:`Nie utworzono jeszcze żadnych klientów MCP.`,none:`Brak`,never:`Nigdy`,noDescription:`Bez opisu`,loading:`Ładowanie klientów MCP…`,noFilteredResults:`Żaden klient MCP nie pasuje do bieżących filtrów.`,searchPlaceholder:`Szukaj według nazwy lub opisu`,filterAll:`Wszystkie`},clientForm:{createTitle:`Utwórz klienta MCP`,editTitle:`Edytuj klienta MCP`,name:`Nazwa`,nameRequired:`Wprowadź nazwę klienta.`,description:`Opis`,enabled:`Włączony`,capabilities:`Uprawnienia klienta`,ceilingHint:`Można przyznać tylko uprawnienia włączone w konfiguracji modułu.`,expiresInDays:`Okres ważności poświadczenia (dni)`,expiryRequired:`Wybierz ograniczony okres ważności poświadczenia.`,formSubtitle:`Nazwij agenta i wybierz, do czego ma dostęp.`},rotate:{title:`Odnów poświadczenie`,warning:`Bieżące poświadczenie zostanie natychmiast unieważnione. Połączone klienty trzeba zaktualizować przy użyciu nowego tokenu.`},token:{title:`Skopiuj teraz poświadczenie MCP`,warningTitle:`Wyświetlane tylko raz`,warningDescription:`Zapisz poświadczenie klienta {name} w bezpiecznym menedżerze haseł. Po zamknięciu tego okna nie będzie można go odzyskać.`,copy:`Kopiuj poświadczenie`,copied:`Skopiowano`},status:{active:`Aktywny`,disabled:`Wyłączony`,revoked:`Unieważniony`,expired:`Wygasły`},confirm:{revoke:`Unieważnić bieżące poświadczenie klienta {name}? Połączeni klienci natychmiast utracą dostęp.`,delete:`Usunąć klienta {name}? Jego poświadczenie zostanie unieważnione, a rekordu klienta nie będzie można odzyskać.`,bulkRevoke:`Unieważnić poświadczenia dla {count} wybranych klientów?`,bulkDelete:`Usunąć {count} wybranych klientów?`,discard:`Odrzucić niezapisane zmiany?`},oauthConsent:{title:`Autoryzuj dostęp MCP`,subtitle:`Przed zatwierdzeniem sprawdź dokładnie, co będzie mógł robić ten zdalny klient.`,installation:`Instalacja`,client:`Klient żądający dostępu`,redirect:`Cel przekierowania`,scopes:`Żądany dostęp`,grantExpiry:`Okres ważności zgody (dni)`,accessExpiry:`Tokeny dostępu wygasają po {minutes} minutach.`,offlineAccess:`Tokeny odświeżania umożliwiają ciągły dostęp przez maksymalnie 30 dni, nawet jeśli zgoda jest ważna dłużej.`,physicalWarningTitle:`Ten klient może wpływać na urządzenia fizyczne`,physicalWarning:`Dostęp do zapisu lub uruchamiania może zmieniać stan urządzeń, uruchamiać sceny i wpływać na osoby w instalacji.`,approve:`Zatwierdź dostęp`,deny:`Odrzuć`,loading:`Wczytywanie żądania autoryzacji…`,invalid:`To żądanie autoryzacji jest nieprawidłowe, wygasło lub nie jest już dostępne.`,scopeRequired:`Zatwierdź co najmniej jedno uprawnienie MCP albo odrzuć żądanie.`,scope:{"mcp:read":`Odczytuj kontekst instalacji i obsługiwany stan urządzeń`,"mcp:write":`Zmieniaj obsługiwane właściwości urządzeń fizycznych`,"mcp:trigger":`Uruchamiaj sceny i nadrzędne akcje fizyczne`,offline_access:`Odświeżaj dostęp bez ponownego pytania przez maksymalnie 30 dni`}},messages:{configSaved:`Konfiguracja MCP została zapisana.`,configSaveFailed:`Nie udało się zapisać konfiguracji MCP.`,endpointCopied:`Endpoint MCP został skopiowany.`,copyFailed:`Nie udało się skopiować wartości.`,capabilitiesOutsideCeiling:`Uprawnienia klienta muszą mieścić się w limicie uprawnień modułu.`,loadFailed:`Nie udało się wczytać klientów MCP.`,created:`Klient MCP został utworzony.`,createFailed:`Nie udało się utworzyć klienta MCP.`,updated:`Klient MCP został zaktualizowany.`,updateFailed:`Nie udało się zaktualizować klienta MCP.`,rotated:`Poświadczenie MCP zostało odnowione.`,rotateFailed:`Nie udało się odnowić poświadczenia MCP.`,revoked:`Klient MCP został unieważniony.`,revokeFailed:`Nie udało się unieważnić klienta MCP.`,deleted:`Klient MCP został usunięty.`,deleteFailed:`Nie udało się usunąć klienta MCP.`,bulkFailed:`Nie udało się zaktualizować {count} klientów.`,bulkSucceeded:`Zaktualizowano {count} klientów.`},oauthManagement:{title:`Dostęp OAuth MCP`,subtitle:`Przedrejestruj zdalnych klientów i cofnij ich uprawnienia i tokeny.`,securityTitle:`Sekrety OAuth nigdy nie są wyświetlane`,securityDescription:`Ta strona ujawnia wyłącznie niejawne identyfikatory zarządzania. Cofnięcie natychmiast zamyka pasujące subskrypcje MCP. Zresetowanie hasła Smart Panel nie cofa dostępu OAuth.`,tabs:{clients:`Klienci`,grants:`Uprawnienia`,accessTokens:`Tokeny dostępu`,refreshFamilies:`Grupy odświeżania`},columns:{client:`Klient`,status:`Status`,scopes:`Zakresy`,expires:`Wygasa`,activeTokens:`Aktywne tokeny`,actions:`Akcje`},empty:{clients:`Nie zarejestrowano jeszcze żadnych klientów OAuth.`,grants:`Nie zatwierdzono żadnych uprawnień OAuth.`,accessTokens:`Brak aktywnych tokenów dostępu OAuth.`,refreshFamilies:`Brak aktywnych rodzin odświeżania OAuth.`},clientId:`ID klienta`,grantId:`ID przyznania`,familyId:`ID rodziny`,redirectUris:`URI przekierowania`,createClient:`Przedrejestruj klienta OAuth`,revokeAll:`Cofnij cały dostęp OAuth`,editClient:`Edytuj klienta OAuth`,editGrant:`Ogranicz zakresy uprawnień OAuth`,name:`Nazwa`,nameRequired:`Wprowadź nazwę klienta.`,redirectRequired:`Dodaj co najmniej jedno dokładne URI przekierowania.`,scopesRequired:`Wybierz co najmniej jeden maksymalny zakres.`,grantScopesRequired:`Pozostaw co najmniej jeden zatwierdzony zakres.`,grantReductionNotice:`Zakresy możliwości można jedynie usunąć. Dodanie dostępu wymaga nowej zgody; cofnij przyznanie, aby usunąć dostęp offline.`,addRedirect:`Dodaj URI przekierowania`,physicalWarning:`Zakresy zapisu lub uruchamiania mogą wpływać na urządzenia fizyczne.`,status:{active:`Aktywne`,disabled:`Wyłączone`,inactive:`Nieaktywne`,revoked:`Cofnięte`,expired:`Wygasłe`,enabled:`Włączony`},scope:{"mcp:read":`Odczyt`,"mcp:write":`Zapis`,"mcp:trigger":`Wyzwalanie`,offline_access:`Dostęp offline`},confirm:{all:`Cofnąć każde uprawnienie OAuth MCP i token oraz zamknąć każdą subskrypcję OAuth? Statyczne dane uwierzytelniające MCP i strumienie pozostają aktywne. Użyj tej jawnej akcji odzyskiwania, ponieważ reset hasła Smart Panel nie cofa dostępu OAuth.`,client:`Wyłącz {name}, cofnij wszystkie jego uprawnienia i tokeny oraz zamknij subskrypcje OAuth?`,grant:`Cofnąć to uprawnienie dla {name}, jego tokeny i pasujące subskrypcje?`,accessToken:`Cofnąć ten token dostępu dla {name} i zamknąć pasującą subskrypcję?`,refreshFamily:`Cofnąć tę rodzinę odświeżania dla {name}, wszystkie wydane z niej tokeny dostępu i pasujące subskrypcje?`},messages:{loadFailed:`Nie udało się wczytać danych autoryzacji OAuth.`,created:`Klient OAuth został przedrejestrowany.`,createFailed:`Nie udało się utworzyć klienta OAuth.`,updated:`Klient OAuth został zaktualizowany.`,updateFailed:`Nie udało się zaktualizować klienta OAuth.`,clientRevoked:`Klient OAuth wyłączony i cofnięty.`,grantRevoked:`Uprawnienie OAuth cofnięte.`,grantUpdated:`Zakresy uprawnień OAuth zostały ograniczone.`,grantUpdateFailed:`Nie udało się zaktualizować zakresów uprawnień OAuth.`,accessTokenRevoked:`Token dostępu OAuth cofnięty.`,refreshFamilyRevoked:`Rodzina odświeżania OAuth cofnięta.`,allRevoked:`Cofnięto cały dostęp OAuth MCP.`,revokeFailed:`Nie można było cofnąć autoryzacji OAuth.`},clientFormSubtitle:`Podaj identyfikatory URI przekierowania i limit uprawnień klienta.`,grantFormSubtitle:`Zawęź uprawnienia, które już posiada to nadanie.`,searchPlaceholder:`Szukaj według nazwy klienta`},headings:{discard:`Odrzuć zmiany`}},"sk-SK":{menu:{clients:`Klienti MCP`,oauth:`Prístup MCP OAuth`},actions:{create:`Vytvoriť klienta`,edit:`Upraviť`,save:`Uložiť`,rotate:`Obnoviť`,revoke:`Odvolať`,delete:`Odstrániť`,cancel:`Zrušiť`,done:`Hotovo`,addOrigin:`Pridať zdroj`,removeOrigin:`Odobrať zdroj`,copyEndpoint:`Kopírovať koncový bod`,resetFilters:`Zrušiť filtre`,add:`Pridať`,close:`Zavrieť`,discard:`Zahodiť`,yes:`Áno`,no:`Nie`,retry:`Skúsiť znova`},capabilities:{read:{title:`Čítanie`,description:`Čítanie obmedzeného kontextu domácnosti, zariadení, počasia, energie a zabezpečenia.`},write:{title:`Zápis`,description:`Priame nastavovanie podporovaných vlastností zariadení. Môže ovplyvniť fyzické zariadenia.`},trigger:{title:`Spúšťanie`,description:`Spúšťanie scén a nadradených akcií osvetlenia. Môže ovplyvniť fyzické zariadenia.`}},config:{about:{title:`Bezpečný prístup pre agentov`,description:`MCP sprístupňuje lokálnym klientom iba vybraný katalóg. Nie je všeobecným proxy rozhraním OpenAPI.`},enabled:{title:`Povoliť koncový bod MCP`},endpoint:{title:`Koncový bod MCP tejto inštalácie`,description:`Použite túto adresu URL s dôveryhodným klientom MCP a jednorazovo zobrazenými prihlasovacími údajmi.`},oauth:{warningTitle:`Autorizácia dostupná z internetu`,warningDescription:`OAuth sprístupňuje autorizačné trasy pod nastavenou verejnou identitou. Pred povolením použite dôveryhodný reverzný proxy server a platný certifikát HTTPS.`,publicBaseUrlTitle:`Verejná základná URL OAuth`,publicBaseUrlDescription:`Kanonická externá HTTPS URL používaná ako identita OAuth. Jej zmena odvolá všetok prístup OAuth a zachová statických klientov MCP.`,publicBaseUrlPlaceholder:`https://panel.example.com`,publicBaseUrlInvalid:`Použite absolútnu HTTPS URL bez prihlasovacích údajov, parametrov, fragmentu a koncovej lomky.`,useRemoteAccessUrl:`Použiť URL vzdialeného prístupu`,enabledTitle:`Povoliť MCP OAuth`,enabledDescription:`Pred otvorením všetkých trás OAuth overí pripravenosť zabezpečenia. Vypnutie odvolá všetky oprávnenia a tokeny OAuth a uzavrie iba odbery OAuth.`},capabilities:{title:`Limit oprávnení inštalácie`,warningTitle:`Prístup k fyzickým zariadeniam`,warningDescription:`Oprávnenia na zápis a spúšťanie môžu meniť stav fyzických zariadení. Každému klientovi udeľte iba potrebné oprávnenia.`},allowedOrigins:{title:`Ďalšie povolené zdroje prehliadača`,description:`Voliteľné normalizované zdroje pre klientov MCP v prehliadači. Klienti v lokálnej sieti ich zvyčajne nepotrebujú.`,placeholder:`https://agent.example.com`,invalid:`Použite absolútny zdroj HTTP(S) bez cesty, parametrov, fragmentu a prihlasovacích údajov.`}},clients:{title:`Klienti MCP`,subtitle:`Vytvárajte a spravujte lokálne prihlasovacie údaje agentov pre túto inštaláciu.`,securityTitle:`Používajte dôveryhodné siete`,securityDescription:`Uprednostnite prístup cez LAN alebo VPN a HTTPS. Prihlasovacie údaje sa zobrazia iba raz a neskôr ich nemožno získať.`,columns:{name:`Klient`,status:`Stav`,capabilities:`Oprávnenia`,expires:`Platnosť do`,lastUsed:`Naposledy použité`,actions:`Akcie`},empty:`Zatiaľ neboli vytvorení žiadni klienti MCP.`,none:`Žiadne`,never:`Nikdy`,noDescription:`Bez popisu`,loading:`Načítavanie MCP klientov…`,noFilteredResults:`Žiadny MCP klient nezodpovedá zvoleným filtrom.`,searchPlaceholder:`Hľadať podľa názvu alebo popisu`,filterAll:`Všetko`},clientForm:{createTitle:`Vytvoriť klienta MCP`,editTitle:`Upraviť klienta MCP`,name:`Názov`,nameRequired:`Zadajte názov klienta.`,description:`Popis`,enabled:`Povolené`,capabilities:`Oprávnenia klienta`,ceilingHint:`Udeliť možno iba oprávnenia povolené v konfigurácii modulu.`,expiresInDays:`Platnosť prihlasovacích údajov (dni)`,expiryRequired:`Vyberte konečnú dobu platnosti prihlasovacích údajov.`,formSubtitle:`Pomenujte agenta a zvoľte, k čomu môže pristupovať.`},rotate:{title:`Obnoviť prihlasovacie údaje`,warning:`Aktuálne prihlasovacie údaje budú okamžite odvolané. Pripojených klientov treba aktualizovať novým tokenom.`},token:{title:`Teraz skopírujte prihlasovacie údaje MCP`,warningTitle:`Zobrazia sa iba raz`,warningDescription:`Uložte prihlasovacie údaje klienta {name} do bezpečného správcu hesiel. Po zatvorení tohto dialógu ich už nemožno získať.`,copy:`Kopírovať prihlasovacie údaje`,copied:`Skopírované`},status:{active:`Aktívny`,disabled:`Zakázaný`,revoked:`Odvolaný`,expired:`Platnosť vypršala`},confirm:{revoke:`Odvolať aktuálne prihlasovacie údaje klienta {name}? Pripojení klienti okamžite stratia prístup.`,delete:`Odstrániť klienta {name}? Jeho prihlasovacie údaje budú odvolané a záznam klienta nebude možné obnoviť.`,bulkRevoke:`Odvolať poverenia pre {count} vybraných klientov?`,bulkDelete:`Odstrániť {count} vybraných klientov?`,discard:`Zahodiť neuložené zmeny?`},oauthConsent:{title:`Povoliť prístup MCP`,subtitle:`Pred schválením skontrolujte, čo presne môže vzdialený klient robiť.`,installation:`Inštalácia`,client:`Žiadajúci klient`,redirect:`Cieľ presmerovania`,scopes:`Požadovaný prístup`,grantExpiry:`Platnosť oprávnenia (dni)`,accessExpiry:`Prístupové tokeny vypršia po {minutes} minútach.`,offlineAccess:`Obnovovacie tokeny umožňujú pokračovať v prístupe najviac 30 dní, aj keď oprávnenie platí dlhšie.`,physicalWarningTitle:`Tento klient môže ovplyvniť fyzické zariadenia`,physicalWarning:`Prístup na zápis alebo spúšťanie môže meniť stav zariadení, spúšťať scény a ovplyvniť osoby v inštalácii.`,approve:`Povoliť prístup`,deny:`Zamietnuť`,loading:`Načítava sa žiadosť o autorizáciu…`,invalid:`Táto žiadosť o autorizáciu je neplatná, vypršala alebo už nie je dostupná.`,scopeRequired:`Povoľte aspoň jedno oprávnenie MCP alebo žiadosť zamietnite.`,scope:{"mcp:read":`Čítať kontext inštalácie a podporovaný stav zariadení`,"mcp:write":`Meniť podporované vlastnosti fyzických zariadení`,"mcp:trigger":`Spúšťať scény a nadradené fyzické akcie`,offline_access:`Obnovovať prístup bez ďalšieho potvrdenia najviac 30 dní`}},messages:{configSaved:`Konfigurácia MCP bola uložená.`,configSaveFailed:`Konfiguráciu MCP sa nepodarilo uložiť.`,endpointCopied:`Koncový bod MCP bol skopírovaný.`,copyFailed:`Hodnotu sa nepodarilo skopírovať.`,capabilitiesOutsideCeiling:`Oprávnenia klienta musia zostať v rámci limitu oprávnení modulu.`,loadFailed:`Klientov MCP sa nepodarilo načítať.`,created:`Klient MCP bol vytvorený.`,createFailed:`Klienta MCP sa nepodarilo vytvoriť.`,updated:`Klient MCP bol aktualizovaný.`,updateFailed:`Klienta MCP sa nepodarilo aktualizovať.`,rotated:`Prihlasovacie údaje MCP boli obnovené.`,rotateFailed:`Prihlasovacie údaje MCP sa nepodarilo obnoviť.`,revoked:`Klient MCP bol odvolaný.`,revokeFailed:`Klienta MCP sa nepodarilo odvolať.`,deleted:`Klient MCP bol odstránený.`,deleteFailed:`Klienta MCP sa nepodarilo odstrániť.`,bulkFailed:`{count} klientov sa nepodarilo aktualizovať.`,bulkSucceeded:`{count} klientov bolo aktualizovaných.`},oauthManagement:{title:`Prístup MCP OAuth`,subtitle:`Predregistrovať vzdialené klienty a odobrať ich povolenia a tokeny.`,securityTitle:`OAuth tajomstvá sa nikdy nezobrazujú`,securityDescription:`Táto stránka zobrazuje iba nesekretné identifikátory správy. Odvolanie okamžite uzavrie zodpovedajúce MCP odbery. Obnovenie hesla Smart Panel neodvolá prístup OAuth.`,tabs:{clients:`Klienti`,grants:`Povolenia`,accessTokens:`Prístupové tokeny`,refreshFamilies:`Obnovovacie rodiny`},columns:{client:`Klient`,status:`Stav`,scopes:`Rozsahy`,expires:`Uplynie`,activeTokens:`Aktívne tokeny`,actions:`Akcie`},empty:{clients:`Žiadni klienti OAuth zatiaľ neboli vopred zaregistrovaní.`,grants:`Nebol schválený žiadny OAuth grant.`,accessTokens:`Žiadne aktívne tokeny prístupu OAuth.`,refreshFamilies:`Žiadne aktívne OAuth refresh rodiny.`},clientId:`ID klienta`,grantId:`ID povolenia`,familyId:`ID rodiny`,redirectUris:`URI presmerovania`,createClient:`Predregistrovať OAuth klienta`,revokeAll:`Odobrať celý prístup OAuth`,editClient:`Upraviť klienta OAuth`,editGrant:`Znížiť rozsahy OAuth povolenia`,name:`Názov`,nameRequired:`Zadajte názov klienta.`,redirectRequired:`Pridajte aspoň jedno presné URI presmerovania.`,scopesRequired:`Vyberte aspoň jeden maximálny rozsah.`,grantScopesRequired:`Ponechajte aspoň jeden schválený rozsah.`,grantReductionNotice:`Rozsahy schopností je možné iba odobrať. Pridanie prístupu vyžaduje nové schválenie; odoberte povolenie pre zrušenie offline prístupu.`,addRedirect:`Pridať URI presmerovania`,physicalWarning:`Rozsahy zápisu alebo spúšťania môžu ovplyvniť fyzické zariadenia.`,status:{active:`Aktívny`,disabled:`Zakázaný`,inactive:`Neaktívny`,revoked:`Zrušený`,expired:`Vypršal`,enabled:`Povolené`},scope:{"mcp:read":`Čítanie`,"mcp:write":`Zápis`,"mcp:trigger":`Spustenie`,offline_access:`Offline prístup`},confirm:{all:`Odobrať každý MCP OAuth grant a token a zatvoriť každé OAuth predplatné? Statické MCP prihlasovacie údaje a toky zostávajú aktívne. Použite túto explicitnú obnovovaciu akciu, pretože obnovenie hesla Smart Panel neodoberá prístup OAuth.`,client:`Vypnúť {name}, odobrať všetky jeho granty a tokeny a zatvoriť jeho OAuth predplatné?`,grant:`Odobrať tento grant pre {name}, jeho tokeny a zodpovedajúce predplatné?`,accessToken:`Odobrať tento prístupový token pre {name} a zatvoriť zodpovedajúce predplatné?`,refreshFamily:`Odobrať túto refresh rodinu pre {name}, všetky vydané prístupové tokeny z nej a zodpovedajúce predplatné?`},messages:{loadFailed:`Nepodarilo sa načítať údaje OAuth autorizácie.`,created:`OAuth klient bol vopred zaregistrovaný.`,createFailed:`Nepodarilo sa vytvoriť klienta OAuth.`,updated:`Klient OAuth bol aktualizovaný.`,updateFailed:`Nepodarilo sa aktualizovať klienta OAuth.`,clientRevoked:`Klient OAuth bol deaktivovaný a odobratý.`,grantRevoked:`OAuth grant odobratý.`,grantUpdated:`OAuth grantové rozsahy boli znížené.`,grantUpdateFailed:`Nepodarilo sa aktualizovať rozsahy OAuth grantu.`,accessTokenRevoked:`Prístupový token OAuth odobratý.`,refreshFamilyRevoked:`OAuth refresh rodina odobratá.`,allRevoked:`Odobratý celý MCP OAuth prístup.`,revokeFailed:`Nepodarilo sa odobrať OAuth autorizáciu.`},clientFormSubtitle:`Zadajte presmerovacie URI a strop oprávnení pre tohto klienta.`,grantFormSubtitle:`Zúžte oprávnenia, ktoré toto udelenie už má.`,searchPlaceholder:`Hľadať podľa názvu klienta`},headings:{discard:`Zahodiť zmeny`}}},qh=[{path:`mcp-clients`,name:qs.CLIENTS,component:()=>hr(()=>import(`./view-mcp-clients-CXdQQbgy.js`),__vite__mapDeps([88,2,3,4,5,6,14,15,16,17,18,19,65,20,21,7,49,22,23,38,42,24,40,73,89,90,91])),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`mcpModule.menu.clients`),icon:`mdi:robot-outline`,menu:6500,module:Js}},{path:`mcp-oauth`,name:qs.OAUTH_MANAGEMENT,component:()=>hr(()=>import(`./view-mcp-oauth-management-u-zf8VgR.js`),__vite__mapDeps([92,2,3,4,5,6,14,15,16,17,18,19,20,21,7,38,23,32,33,24,89,93])),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`mcpModule.menu.oauth`),icon:`mdi:shield-key-outline`,menu:6510,module:Js,moduleFlag:`oauthEnabled`}},{path:`mcp-oauth-consent`,name:qs.OAUTH_CONSENT,component:()=>hr(()=>import(`./view-mcp-oauth-consent-CdSzhX8Z.js`),__vite__mapDeps([94,3,2,4,11,5,6,89,95])),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`mcpModule.oauthConsent.title`)}}],Jh=[qs.OAUTH_MANAGEMENT,qs.OAUTH_CONSENT],Yh=e=>(t,n)=>{if(typeof n.name!=`string`||!Jh.includes(n.name))return!0;let r=e();return r===null||r.oauthEnabled===!0||{name:Te.ROOT}},Xh=Bi.extend({type:Y(Js),oauthEnabled:J().default(!1),oauthPublicBaseUrl:X().nullable().default(null),capabilities:W(G(Ks)).default([Ks.read]),allowedOrigins:W(X()).default([])}),Zh=qi.and(K({type:Y(Js),oauth_enabled:J().optional(),oauth_public_base_url:X().nullable().optional(),capabilities:W(G(Ks)).optional(),allowed_origins:W(X()).optional()}));zi.and(K({type:Y(Js),oauth_enabled:J(),oauth_public_base_url:X().nullable(),capabilities:W(G(Ks)),allowed_origins:W(X())}));var Qh=Symbol(`FB-Module-MCP`),$h={install:(e,t)=>{let n=ea(e);for(let[e,n]of Object.entries(Kh)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{mcpModule:n});t.i18n.global.setLocaleMessage(e,r)}n.addModule(Qh,{type:Js,name:`Model Context Protocol`,description:`Manage curated, capability-scoped agent access to this Smart Panel installation.`,elements:[{type:Oa,components:{moduleConfigEditForm:Gh},schemas:{moduleConfigSchema:Xh,moduleConfigEditFormSchema:Rh,moduleConfigUpdateReqSchema:Zh},modules:[ka]}],modules:[ka],isCore:!0});let r=pn(e);fn(e).register(Yh(()=>r.getStore(xn).findByType(Js))),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&qh.forEach(e=>{t.router.addRoute(Te.ROOT,e)})}},eg=k({name:`MdnsConfigForm`,__name:`mdns-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:l}=Ui({config:n.config,messages:{success:i(`mdnsModule.messages.config.edited`),error:i(`mdnsModule.messages.config.notEdited`)}}),u=P({serviceName:[{required:!0,message:i(`mdnsModule.fields.config.serviceName.validation.required`),trigger:`change`}],serviceType:[{required:!0,message:i(`mdnsModule.fields.config.serviceType.validation.required`),trigger:`change`}]});return F(()=>l.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:u,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`mdnsModule.headings.aboutServiceAdvertisement`),description:L(i)(`mdnsModule.texts.aboutServiceAdvertisement`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`mdnsModule.fields.config.serviceName.title`),prop:`serviceName`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(o).serviceName,"onUpdate:modelValue":t[0]||=e=>L(o).serviceName=e,placeholder:L(i)(`mdnsModule.fields.config.serviceName.placeholder`),name:`serviceName`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`mdnsModule.fields.config.serviceType.title`),prop:`serviceType`},{default:B(()=>[D(L(U),{modelValue:L(o).serviceType,"onUpdate:modelValue":t[1]||=e=>L(o).serviceType=e,placeholder:L(i)(`mdnsModule.fields.config.serviceType.placeholder`),name:`serviceType`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),tg=`mdns-module`,ng={"cs-CZ":{headings:{aboutServiceAdvertisement:`Nastavení inzerce služby`},messages:{config:{edited:`Konfigurace mDNS byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci mDNS`}},texts:{aboutServiceAdvertisement:`Nakonfigurujte, jak Smart Panel inzeruje svou přítomnost v místní síti pomocí mDNS (Multicast DNS). To umožňuje automatické objevení zařízeními a klienty bez nutnosti znát IP adresu.`},fields:{config:{serviceName:{title:`Název služby`,placeholder:`Inteligentní panel FastyBird`,validation:{required:`Název služby je povinný`}},serviceType:{title:`Typ služby`,placeholder:`fastybird-panel`,validation:{required:`Typ služby je povinný`}}}}},"de-DE":{headings:{aboutServiceAdvertisement:`Dienstankündigungs-Einstellungen`},messages:{config:{edited:`mDNS-Konfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der mDNS-Konfiguration fehlgeschlagen`}},texts:{aboutServiceAdvertisement:`Konfigurieren Sie, wie sich das Smart Panel über mDNS (Multicast DNS) im lokalen Netzwerk ankündigt. Dies ermöglicht die automatische Erkennung durch Geräte und Clients, ohne die IP-Adresse kennen zu müssen.`},fields:{config:{serviceName:{title:`Dienstname`,placeholder:`FastyBird Smart Panel`,validation:{required:`Dienstname ist erforderlich`}},serviceType:{title:`Diensttyp`,placeholder:`Fastybird-Panel`,validation:{required:`Diensttyp ist erforderlich`}}}}},"en-US":{headings:{aboutServiceAdvertisement:`Service Advertisement Settings`},messages:{config:{edited:`mDNS configuration has been successfully updated`,notEdited:`Failed to update mDNS configuration`}},texts:{aboutServiceAdvertisement:`Configure how the Smart Panel advertises itself on the local network using mDNS (Multicast DNS). This enables automatic discovery by devices and clients without needing to know the IP address.`},fields:{config:{serviceName:{title:`Service Name`,placeholder:`FastyBird Smart Panel`,validation:{required:`Service name is required`}},serviceType:{title:`Service Type`,placeholder:`fastybird-panel`,validation:{required:`Service type is required`}}}}},"es-ES":{headings:{aboutServiceAdvertisement:`Configuración de anuncio de servicio`},messages:{config:{edited:`La configuración de mDNS se ha actualizado correctamente`,notEdited:`Error al actualizar la configuración de mDNS`}},texts:{aboutServiceAdvertisement:`Configura cómo el Smart Panel se anuncia en la red local usando mDNS (Multicast DNS). Esto permite el descubrimiento automático por dispositivos y clientes sin necesidad de conocer la dirección IP.`},fields:{config:{serviceName:{title:`Nombre del servicio`,placeholder:`Panel inteligente FastyBird`,validation:{required:`El nombre del servicio es obligatorio`}},serviceType:{title:`Tipo de servicio`,placeholder:`panel-fastybird`,validation:{required:`El tipo de servicio es obligatorio`}}}}},"pl-PL":{headings:{aboutServiceAdvertisement:`Ustawienia rozgłaszania usługi`},messages:{config:{edited:`Konfiguracja mDNS została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji mDNS`}},texts:{aboutServiceAdvertisement:`Skonfiguruj, jak Smart Panel rozgłasza się w sieci lokalnej za pomocą mDNS (Multicast DNS). Umożliwia to automatyczne wykrywanie przez urządzenia i klientów bez konieczności znajomości adresu IP.`},fields:{config:{serviceName:{title:`Nazwa usługi`,placeholder:`Inteligentny panel FastyBird`,validation:{required:`Nazwa usługi jest wymagana`}},serviceType:{title:`Typ usługi`,placeholder:`panel fastybird`,validation:{required:`Typ usługi jest wymagany`}}}}},"sk-SK":{headings:{aboutServiceAdvertisement:`Nastavenia inzercie služby`},messages:{config:{edited:`Konfigurácia mDNS bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu mDNS`}},texts:{aboutServiceAdvertisement:`Nakonfigurujte, ako Smart Panel inzeruje sám seba na lokálnej sieti pomocou mDNS (Multicast DNS). To umožňuje automatické objavenie zariadeniami a klientmi bez potreby znalosti IP adresy.`},fields:{config:{serviceName:{title:`Názov služby`,placeholder:`Inteligentný panel FastyBird`,validation:{required:`Názov služby je povinný`}},serviceType:{title:`Typ služby`,placeholder:`fastybird-panel`,validation:{required:`Typ služby je povinný`}}}}}},rg=Li.extend({serviceName:X().min(1),serviceType:X().min(1)}),ig=Bi.extend({type:Y(tg),serviceName:X(),serviceType:X()}),ag=qi.and(K({type:Y(tg),service_name:X().optional(),service_type:X().optional()}));zi.and(K({type:Y(tg),service_name:X(),service_type:X()}));var og=Symbol(`FB-Module-Mdns`),sg={install:(e,t)=>{let n=ea(e);for(let[e,n]of Object.entries(ng)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{mdnsModule:n});t.i18n.global.setLocaleMessage(e,r)}n.addModule(og,{type:tg,name:`mDNS`,description:`Network discovery of Smart Panel service on local network`,elements:[{type:Oa,components:{moduleConfigEditForm:eg},schemas:{moduleConfigSchema:ig,moduleConfigEditFormSchema:rg,moduleConfigUpdateReqSchema:ag},modules:[ka]}],modules:[ka],isCore:!0})}},cg={"cs-CZ":{menu:{title:`Oznámení`},breadcrumbs:{notifications:{list:`oznámení`}},meta:{notifications:{list:{title:`Oznámení`}}},severity:{info:`Info`,warning:`Varování`,error:`Chyba`,critical:`Kritická`},headings:{notifications:{list:`Oznámení`,dismiss:`Skrýt oznámení`,remove:`Odebrat oznámení`,bulkRemove:`Odebrat oznámení`,data:`Data`,lifecycle:`Životní cyklus`,adjustFilters:`Filtrovat oznámení`},aboutConfig:`O nastavení oznámení`},subHeadings:{notifications:{list:`Stavy systému a události, které vyžadují vaši pozornost`,adjustFilters:`Upravit filtry zobrazení`}},texts:{bell:{title:`Oznámení`,empty:`Žádná aktivní oznámení`},notifications:{confirmDismiss:`Skrýt "{title}"?`,confirmRemove:`Odebrat "{title}"? Tuto akci nelze vrátit zpět.`,confirmBulkRemove:`Odebrat {count} oznámení? Tuto akci nelze vrátit zpět.`,loading:`Načítání oznámení...`,noNotifications:`Zatím nejsou žádná oznámení`,noFilteredNotifications:`Nebyla nalezena žádná oznámení odpovídající aktivním kritériím filtru`},actions:{confirmDangerous:`"{title}" chce spustit "{label}". Tato akce může být nebezpečná - pokračovat?`,confirmStop:`Zastavit službu pro "{title}"?`,confirmRestart:`Restartovat službu pro "{title}"?`},aboutConfig:`Oznámení jsou uchovávána po omezenou dobu a seznam aktivních je omezen limitem, takže administrátor nikdy neprochází neomezenou historií.`},messages:{notifications:{dismissed:`Oznámení bylo skryto.`,dismissCanceled:`Skrytí zrušeno.`,notDismissed:`Oznámení se nepodařilo skrýt.`,notMarkedRead:`Oznámení se nepodařilo aktualizovat.`,removed:`Oznámení bylo odebráno.`,removeCanceled:`Odebrání zrušeno.`,notRemoved:`Oznámení se nepodařilo odebrat.`,bulkRemoved:`{count} oznámení bylo odebráno.`,bulkRemoveFailed:`{count} oznámení se nepodařilo odebrat.`,notAllMarkedRead:`Některá oznámení se nepodařilo označit jako přečtená.`,notFetched:`Některá oznámení se nepodařilo načíst.`,notAllDismissed:`Některá oznámení se nepodařilo skrýt.`,notAllMarkedUnread:`Některá oznámení se nepodařilo označit jako nepřečtená.`},actions:{invalidLink:`Tento odkaz se nepodařilo otevřít.`,notFound:`Tato akce již není k dispozici.`,failed:`Akci se nepodařilo dokončit.`},config:{edited:`Nastavení oznámení bylo uloženo.`,notEdited:`Nastavení oznámení se nepodařilo uložit.`}},fields:{filters:{status:{title:`Stav`,options:{all:`Vše`,active:`Aktivní`,dismissed:`Skrytá`,resolved:`Vyřešené`}},severity:{title:`Závažnost`},source:{title:`Zdroj`,placeholder:`Libovolný zdroj`},unread:{title:`Pouze nepřečtené`}},notifications:{occurrences:{title:`Počet výskytů`},createdAt:{title:`Vytvořeno`},updatedAt:{title:`Aktualizováno`},readAt:{title:`Přečteno`,no:`Nepřečteno`},dismissedAt:{title:`Skryto`,no:`Neskryto`},resolvedAt:{title:`Vyřešeno`,no:`Nevyřešeno`}},config:{retentionDays:{title:`Doba uchovávání`,placeholder:`30`,unit:`dní`,validation:{required:`Doba uchovávání je povinná.`,range:`Doba uchovávání musí být mezi 1 a 365 dny.`}},maxNotifications:{title:`Maximální počet aktivních oznámení`,placeholder:`500`,validation:{required:`Maximální počet aktivních oznámení je povinný.`,range:`Maximální počet aktivních oznámení musí být mezi 50 a 5000.`},unit:`oznámení`}}},filters:{notifications:{severity:{title:`Filtrovat podle závažnosti`},source:{title:`Filtrovat podle zdroje`}}},table:{columns:{severity:{title:`Závažnost`},title:{title:`Název`},source:{title:`Zdroj`},occurrences:{title:`Počet`},time:{title:`Čas`},actions:{title:`Akce`}}},buttons:{yes:{title:`Ano`},no:{title:`Ne`},dismiss:{title:`Skrýt`},markAllRead:{title:`Označit vše jako přečtené`},markRead:{title:`Označit jako přečtené`},markUnread:{title:`Označit jako nepřečtené`},viewAll:{title:`Zobrazit vše`},loadMore:{title:`Načíst další`},close:{title:`Zavřít`},detail:{title:`Detail`},resetFilters:{title:`Resetovat filtry`},reset:{title:`Resetovat`}}},"de-DE":{menu:{title:`Benachrichtigungen`},breadcrumbs:{notifications:{list:`Benachrichtigungen`}},meta:{notifications:{list:{title:`Benachrichtigungen`}}},severity:{info:`Info`,warning:`Warnung`,error:`Fehler`,critical:`Kritisch`},headings:{notifications:{list:`Benachrichtigungen`,dismiss:`Benachrichtigung ausblenden`,remove:`Benachrichtigung entfernen`,bulkRemove:`Benachrichtigungen entfernen`,data:`Daten`,lifecycle:`Lebenszyklus`,adjustFilters:`Benachrichtigungen filtern`},aboutConfig:`Über die Benachrichtigungseinstellungen`},subHeadings:{notifications:{list:`Systemzustände und Ereignisse, die Ihre Aufmerksamkeit erfordern`,adjustFilters:`Anzeigefilter anpassen`}},texts:{bell:{title:`Benachrichtigungen`,empty:`Keine aktiven Benachrichtigungen`},notifications:{confirmDismiss:`"{title}" ausblenden?`,confirmRemove:`"{title}" entfernen? Diese Aktion kann nicht rückgängig gemacht werden.`,confirmBulkRemove:`{count} Benachrichtigungen entfernen? Diese Aktion kann nicht rückgängig gemacht werden.`,loading:`Benachrichtigungen werden geladen...`,noNotifications:`Es gibt noch keine Benachrichtigungen`,noFilteredNotifications:`Keine Benachrichtigungen gefunden, die den aktiven Filterkriterien entsprechen`},actions:{confirmDangerous:`"{title}" möchte "{label}" ausführen. Diese Aktion ist möglicherweise gefährlich - fortfahren?`,confirmStop:`Dienst für "{title}" stoppen?`,confirmRestart:`Dienst für "{title}" neu starten?`},aboutConfig:`Benachrichtigungen werden nur für begrenzte Zeit aufbewahrt und die Liste aktiver Benachrichtigungen ist begrenzt, sodass der Administrator nie einen unbegrenzten Verlauf durchsuchen muss.`},messages:{notifications:{dismissed:`Benachrichtigung wurde ausgeblendet.`,dismissCanceled:`Ausblenden abgebrochen.`,notDismissed:`Benachrichtigung konnte nicht ausgeblendet werden.`,notMarkedRead:`Benachrichtigung konnte nicht aktualisiert werden.`,removed:`Benachrichtigung wurde entfernt.`,removeCanceled:`Entfernen abgebrochen.`,notRemoved:`Benachrichtigung konnte nicht entfernt werden.`,bulkRemoved:`{count} Benachrichtigungen wurden entfernt.`,bulkRemoveFailed:`{count} Benachrichtigungen konnten nicht entfernt werden.`,notAllMarkedRead:`Einige Benachrichtigungen konnten nicht als gelesen markiert werden.`,notFetched:`Benachrichtigungen konnten nicht geladen werden.`,notAllDismissed:`Einige Benachrichtigungen konnten nicht ausgeblendet werden.`,notAllMarkedUnread:`Einige Benachrichtigungen konnten nicht als ungelesen markiert werden.`},actions:{invalidLink:`Dieser Link konnte nicht geöffnet werden.`,notFound:`Diese Aktion ist nicht mehr verfügbar.`,failed:`Die Aktion konnte nicht abgeschlossen werden.`},config:{edited:`Benachrichtigungseinstellungen wurden gespeichert.`,notEdited:`Benachrichtigungseinstellungen konnten nicht gespeichert werden.`}},fields:{filters:{status:{title:`Status`,options:{all:`Alle`,active:`Aktiv`,dismissed:`Ausgeblendet`,resolved:`Gelöst`}},severity:{title:`Schweregrad`},source:{title:`Quelle`,placeholder:`Beliebige Quelle`},unread:{title:`Nur ungelesen`}},notifications:{occurrences:{title:`Vorkommen`},createdAt:{title:`Erstellt`},updatedAt:{title:`Aktualisiert`},readAt:{title:`Gelesen`,no:`Ungelesen`},dismissedAt:{title:`Ausgeblendet`,no:`Nicht ausgeblendet`},resolvedAt:{title:`Gelöst`,no:`Nicht gelöst`}},config:{retentionDays:{title:`Aufbewahrungsdauer`,placeholder:`30`,unit:`Tage`,validation:{required:`Aufbewahrungsdauer ist erforderlich.`,range:`Die Aufbewahrungsdauer muss zwischen 1 und 365 Tagen liegen.`}},maxNotifications:{title:`Maximale aktive Benachrichtigungen`,placeholder:`500`,validation:{required:`Maximale aktive Benachrichtigungen sind erforderlich.`,range:`Maximale aktive Benachrichtigungen müssen zwischen 50 und 5000 liegen.`},unit:`Benachrichtigungen`}}},filters:{notifications:{severity:{title:`Nach Schweregrad filtern`},source:{title:`Nach Quelle filtern`}}},table:{columns:{severity:{title:`Schweregrad`},title:{title:`Titel`},source:{title:`Quelle`},occurrences:{title:`Anzahl`},time:{title:`Zeit`},actions:{title:`Aktionen`}}},buttons:{yes:{title:`Ja`},no:{title:`Nein`},dismiss:{title:`Ausblenden`},markAllRead:{title:`Alle als gelesen markieren`},markRead:{title:`Als gelesen markieren`},markUnread:{title:`Als ungelesen markieren`},viewAll:{title:`Alle anzeigen`},loadMore:{title:`Mehr laden`},close:{title:`Schließen`},detail:{title:`Details`},resetFilters:{title:`Filter zurücksetzen`},reset:{title:`Zurücksetzen`}}},"en-US":{menu:{title:`Notifications`},breadcrumbs:{notifications:{list:`notifications`}},meta:{notifications:{list:{title:`Notifications`}}},severity:{info:`Info`,warning:`Warning`,error:`Error`,critical:`Critical`},headings:{notifications:{list:`Notifications`,dismiss:`Dismiss notification`,remove:`Remove notification`,bulkRemove:`Remove notifications`,data:`Data`,lifecycle:`Lifecycle`,adjustFilters:`Filter notifications`},aboutConfig:`About notification settings`},texts:{bell:{title:`Notifications`,empty:`No active notifications`},notifications:{confirmDismiss:`Dismiss "{title}"?`,confirmRemove:`Remove "{title}"? This cannot be undone.`,confirmBulkRemove:`Remove {count} notifications? This cannot be undone.`,loading:`Loading notifications...`,noNotifications:`There are no notifications yet`,noFilteredNotifications:`No notifications found matching the active filter criteria`},actions:{confirmDangerous:`"{title}" wants to run "{label}". This action is potentially dangerous - continue?`,confirmStop:`Stop the service for "{title}"?`,confirmRestart:`Restart the service for "{title}"?`},aboutConfig:`Notifications are kept for a limited time and the active list is capped, so the admin never has to scroll through an unbounded history.`},messages:{notifications:{notFetched:`Notifications could not be loaded.`,dismissed:`Notification dismissed.`,dismissCanceled:`Dismiss canceled.`,notDismissed:`Notification could not be dismissed.`,notAllDismissed:`Some notifications could not be dismissed.`,notMarkedRead:`Notification could not be updated.`,notAllMarkedRead:`Some notifications could not be marked as read.`,notAllMarkedUnread:`Some notifications could not be marked as unread.`,removed:`Notification removed.`,removeCanceled:`Remove canceled.`,notRemoved:`Notification could not be removed.`,bulkRemoved:`{count} notifications removed.`,bulkRemoveFailed:`{count} notifications could not be removed.`},actions:{invalidLink:`This link could not be opened.`,notFound:`This action is no longer available.`,failed:`The action could not be completed.`},config:{edited:`Notification settings saved.`,notEdited:`Notification settings could not be saved.`}},buttons:{yes:{title:`Yes`},no:{title:`No`},dismiss:{title:`Dismiss`},markAllRead:{title:`Mark all as read`},viewAll:{title:`View all`},markRead:{title:`Mark read`},markUnread:{title:`Mark unread`},loadMore:{title:`Load more`},close:{title:`Close`},detail:{title:`Detail`},resetFilters:{title:`Reset filters`},reset:{title:`Reset`}},subHeadings:{notifications:{list:`System conditions and events that need your attention`,adjustFilters:`Adjust display filters`}},fields:{filters:{status:{title:`Status`,options:{all:`All`,active:`Active`,dismissed:`Dismissed`,resolved:`Resolved`}},severity:{title:`Severity`},source:{title:`Source`,placeholder:`Any source`},unread:{title:`Unread only`}},notifications:{occurrences:{title:`Occurrences`},createdAt:{title:`Created`},updatedAt:{title:`Updated`},readAt:{title:`Read`,no:`Unread`},dismissedAt:{title:`Dismissed`,no:`Not dismissed`},resolvedAt:{title:`Resolved`,no:`Not resolved`}},config:{retentionDays:{title:`Retention period`,placeholder:`30`,unit:`days`,validation:{required:`Retention period is required.`,range:`Retention period must be between 1 and 365 days.`}},maxNotifications:{title:`Maximum active notifications`,placeholder:`500`,unit:`notifications`,validation:{required:`Maximum active notifications is required.`,range:`Maximum active notifications must be between 50 and 5000.`}}}},filters:{notifications:{severity:{title:`Filter by severity`},source:{title:`Filter by source`}}},table:{columns:{severity:{title:`Severity`},title:{title:`Title`},source:{title:`Source`},occurrences:{title:`Count`},time:{title:`Time`},actions:{title:`Actions`}}}},"es-ES":{menu:{title:`Notificaciones`},breadcrumbs:{notifications:{list:`notificaciones`}},meta:{notifications:{list:{title:`Notificaciones`}}},severity:{info:`Información`,warning:`Advertencia`,error:`Error`,critical:`Crítico`},headings:{notifications:{list:`Notificaciones`,dismiss:`Descartar notificación`,remove:`Eliminar notificación`,bulkRemove:`Eliminar notificaciones`,data:`Datos`,lifecycle:`Ciclo de vida`,adjustFilters:`Filtrar notificaciones`},aboutConfig:`Acerca de la configuración de notificaciones`},subHeadings:{notifications:{list:`Estados del sistema y eventos que requieren tu atención`,adjustFilters:`Ajustar filtros de visualización`}},texts:{bell:{title:`Notificaciones`,empty:`No hay notificaciones activas`},notifications:{confirmDismiss:`¿Descartar "{title}"?`,confirmRemove:`¿Eliminar "{title}"? Esta acción no se puede deshacer.`,confirmBulkRemove:`¿Eliminar {count} notificaciones? Esta acción no se puede deshacer.`,loading:`Cargando notificaciones...`,noNotifications:`Todavía no hay notificaciones`,noFilteredNotifications:`No se encontraron notificaciones que coincidan con los criterios de filtro activos`},actions:{confirmDangerous:`"{title}" quiere ejecutar "{label}". Esta acción es potencialmente peligrosa. ¿Continuar?`,confirmStop:`¿Detener el servicio de "{title}"?`,confirmRestart:`¿Reiniciar el servicio de "{title}"?`},aboutConfig:`Las notificaciones se conservan durante un tiempo limitado y la lista de activas tiene un límite máximo, de modo que el administrador nunca tiene que desplazarse por un historial ilimitado.`},messages:{notifications:{dismissed:`Notificación descartada.`,dismissCanceled:`Descarte cancelado.`,notDismissed:`No se pudo descartar la notificación.`,notMarkedRead:`No se pudo actualizar la notificación.`,removed:`Notificación eliminada.`,removeCanceled:`Eliminación cancelada.`,notRemoved:`No se pudo eliminar la notificación.`,bulkRemoved:`{count} notificaciones eliminadas.`,bulkRemoveFailed:`No se pudieron eliminar {count} notificaciones.`,notAllMarkedRead:`Algunas notificaciones no se pudieron marcar como leídas.`,notFetched:`No se pudieron cargar las notificaciones.`,notAllDismissed:`Algunas notificaciones no se pudieron descartar.`,notAllMarkedUnread:`Algunas notificaciones no se pudieron marcar como no leídas.`},actions:{invalidLink:`No se pudo abrir este enlace.`,notFound:`Esta acción ya no está disponible.`,failed:`No se pudo completar la acción.`},config:{edited:`Configuración de notificaciones guardada.`,notEdited:`No se pudo guardar la configuración de notificaciones.`}},fields:{filters:{status:{title:`Estado`,options:{all:`Todos`,active:`Activo`,dismissed:`Descartado`,resolved:`Resuelto`}},severity:{title:`Gravedad`},source:{title:`Origen`,placeholder:`Cualquier origen`},unread:{title:`Solo no leídas`}},notifications:{occurrences:{title:`Ocurrencias`},createdAt:{title:`Creado`},updatedAt:{title:`Actualizado`},readAt:{title:`Leído`,no:`No leído`},dismissedAt:{title:`Descartado`,no:`No descartado`},resolvedAt:{title:`Resuelto`,no:`No resuelto`}},config:{retentionDays:{title:`Período de retención`,placeholder:`30`,unit:`días`,validation:{required:`El período de retención es obligatorio.`,range:`El período de retención debe estar entre 1 y 365 días.`}},maxNotifications:{title:`Máximo de notificaciones activas`,placeholder:`500`,validation:{required:`El máximo de notificaciones activas es obligatorio.`,range:`El máximo de notificaciones activas debe estar entre 50 y 5000.`},unit:`notificaciones`}}},filters:{notifications:{severity:{title:`Filtrar por gravedad`},source:{title:`Filtrar por origen`}}},table:{columns:{severity:{title:`Gravedad`},title:{title:`Título`},source:{title:`Origen`},occurrences:{title:`Cantidad`},time:{title:`Hora`},actions:{title:`Acciones`}}},buttons:{yes:{title:`Sí`},no:{title:`No`},dismiss:{title:`Descartar`},markAllRead:{title:`Marcar todo como leído`},markRead:{title:`Marcar como leído`},markUnread:{title:`Marcar como no leído`},viewAll:{title:`Ver todas`},loadMore:{title:`Cargar más`},close:{title:`Cerrar`},detail:{title:`Detalle`},resetFilters:{title:`Restablecer filtros`},reset:{title:`Restablecer`}}},"pl-PL":{menu:{title:`Powiadomienia`},breadcrumbs:{notifications:{list:`powiadomienia`}},meta:{notifications:{list:{title:`Powiadomienia`}}},severity:{info:`Informacje`,warning:`Ostrzeżenie`,error:`Błąd`,critical:`Krytyczny`},headings:{notifications:{list:`Powiadomienia`,dismiss:`Ukryj powiadomienie`,remove:`Usuń powiadomienie`,bulkRemove:`Usuń powiadomienia`,data:`Dane`,lifecycle:`Cykl życia`,adjustFilters:`Filtruj powiadomienia`},aboutConfig:`O ustawieniach powiadomień`},subHeadings:{notifications:{list:`Stany systemu i zdarzenia, które wymagają Twojej uwagi`,adjustFilters:`Dostosuj filtry wyświetlania`}},texts:{bell:{title:`Powiadomienia`,empty:`Brak aktywnych powiadomień`},notifications:{confirmDismiss:`Ukryć "{title}"?`,confirmRemove:`Usunąć "{title}"? Tej operacji nie można cofnąć.`,confirmBulkRemove:`Usunąć {count} powiadomień? Tej operacji nie można cofnąć.`,loading:`Ładowanie powiadomień...`,noNotifications:`Nie ma jeszcze żadnych powiadomień`,noFilteredNotifications:`Nie znaleziono powiadomień pasujących do aktywnych kryteriów filtra`},actions:{confirmDangerous:`"{title}" chce uruchomić "{label}". Ta czynność może być niebezpieczna - kontynuować?`,confirmStop:`Zatrzymać usługę dla "{title}"?`,confirmRestart:`Uruchomić ponownie usługę dla "{title}"?`},aboutConfig:`Powiadomienia są przechowywane przez ograniczony czas, a lista aktywnych powiadomień ma limit, dzięki czemu administrator nigdy nie musi przewijać nieograniczonej historii.`},messages:{notifications:{dismissed:`Powiadomienie zostało ukryte.`,dismissCanceled:`Ukrywanie anulowane.`,notDismissed:`Nie udało się ukryć powiadomienia.`,notMarkedRead:`Nie udało się zaktualizować powiadomienia.`,removed:`Powiadomienie zostało usunięte.`,removeCanceled:`Usuwanie anulowane.`,notRemoved:`Nie udało się usunąć powiadomienia.`,bulkRemoved:`Usunięto {count} powiadomień.`,bulkRemoveFailed:`Nie udało się usunąć {count} powiadomień.`,notAllMarkedRead:`Niektórych powiadomień nie udało się oznaczyć jako przeczytanych.`,notFetched:`Nie udało się wczytać powiadomień.`,notAllDismissed:`Niektórych powiadomień nie udało się ukryć.`,notAllMarkedUnread:`Niektórych powiadomień nie udało się oznaczyć jako nieprzeczytane.`},actions:{invalidLink:`Nie udało się otworzyć tego łącza.`,notFound:`Ta akcja nie jest już dostępna.`,failed:`Nie udało się ukończyć akcji.`},config:{edited:`Ustawienia powiadomień zostały zapisane.`,notEdited:`Nie udało się zapisać ustawień powiadomień.`}},fields:{filters:{status:{title:`Status`,options:{all:`Wszystkie`,active:`Aktywne`,dismissed:`Ukryte`,resolved:`Rozwiązane`}},severity:{title:`Ważność`},source:{title:`Źródło`,placeholder:`Dowolne źródło`},unread:{title:`Tylko nieprzeczytane`}},notifications:{occurrences:{title:`Wystąpienia`},createdAt:{title:`Utworzono`},updatedAt:{title:`Zaktualizowano`},readAt:{title:`Przeczytano`,no:`Nie przeczytano`},dismissedAt:{title:`Ukryto`,no:`Nie ukryto`},resolvedAt:{title:`Rozwiązano`,no:`Nie rozwiązano`}},config:{retentionDays:{title:`Okres przechowywania`,placeholder:`30`,unit:`dni`,validation:{required:`Okres przechowywania jest wymagany.`,range:`Okres przechowywania musi wynosić od 1 do 365 dni.`}},maxNotifications:{title:`Maksymalna liczba aktywnych powiadomień`,placeholder:`500`,validation:{required:`Maksymalna liczba aktywnych powiadomień jest wymagana.`,range:`Maksymalna liczba aktywnych powiadomień musi wynosić od 50 do 5000.`},unit:`powiadomień`}}},filters:{notifications:{severity:{title:`Filtruj według ważności`},source:{title:`Filtruj według źródła`}}},table:{columns:{severity:{title:`Ważność`},title:{title:`Tytuł`},source:{title:`Źródło`},occurrences:{title:`Liczba`},time:{title:`Czas`},actions:{title:`Akcje`}}},buttons:{yes:{title:`Tak`},no:{title:`Nie`},dismiss:{title:`Ukryj`},markAllRead:{title:`Oznacz wszystkie jako przeczytane`},markRead:{title:`Oznacz jako przeczytane`},markUnread:{title:`Oznacz jako nieprzeczytane`},viewAll:{title:`Wyświetl wszystkie`},loadMore:{title:`Załaduj więcej`},close:{title:`Zamknij`},detail:{title:`Szczegóły`},resetFilters:{title:`Resetuj filtry`},reset:{title:`Resetuj`}}},"sk-SK":{menu:{title:`Upozornenia`},breadcrumbs:{notifications:{list:`upozornenia`}},meta:{notifications:{list:{title:`Upozornenia`}}},severity:{info:`Info`,warning:`Varovanie`,error:`Chyba`,critical:`Kritická`},headings:{notifications:{list:`Upozornenia`,dismiss:`Skryť upozornenie`,remove:`Odstrániť upozornenie`,bulkRemove:`Odstrániť upozornenia`,data:`Dáta`,lifecycle:`Životný cyklus`,adjustFilters:`Filtrovať upozornenia`},aboutConfig:`O nastaveniach upozornení`},subHeadings:{notifications:{list:`Stavy systému a udalosti, ktoré si vyžadujú vašu pozornosť`,adjustFilters:`Upraviť filtre zobrazenia`}},texts:{bell:{title:`Upozornenia`,empty:`Žiadne aktívne upozornenia`},notifications:{confirmDismiss:`Skryť "{title}"?`,confirmRemove:`Odstrániť "{title}"? Túto akciu nie je možné vrátiť.`,confirmBulkRemove:`Odstrániť {count} upozornení? Túto akciu nie je možné vrátiť.`,loading:`Načítavanie upozornení...`,noNotifications:`Zatiaľ nie sú žiadne upozornenia`,noFilteredNotifications:`Neboli nájdené žiadne upozornenia zodpovedajúce aktívnym filtrom`},actions:{confirmDangerous:`"{title}" chce spustiť "{label}". Táto akcia môže byť nebezpečná - pokračovať?`,confirmStop:`Zastaviť službu pre "{title}"?`,confirmRestart:`Reštartovať službu pre "{title}"?`},aboutConfig:`Upozornenia sú uchovávané po obmedzenú dobu a zoznam aktívnych upozornení má stanovený limit, takže administrátor nikdy neprechádza neobmedzenou históriou.`},messages:{notifications:{dismissed:`Upozornenie bolo skryté.`,dismissCanceled:`Skrytie zrušené.`,notDismissed:`Upozornenie sa nepodarilo skryť.`,notMarkedRead:`Upozornenie sa nepodarilo aktualizovať.`,removed:`Upozornenie bolo odstránené.`,removeCanceled:`Odstránenie zrušené.`,notRemoved:`Upozornenie sa nepodarilo odstrániť.`,bulkRemoved:`{count} upozornení bolo odstránených.`,bulkRemoveFailed:`{count} upozornení sa nepodarilo odstrániť.`,notAllMarkedRead:`Niektoré upozornenia sa nepodarilo označiť ako prečítané.`,notFetched:`Oznámenia sa nepodarilo načítať.`,notAllDismissed:`Niektoré upozornenia sa nepodarilo skryť.`,notAllMarkedUnread:`Niektoré oznámenia sa nepodarilo označiť ako neprečítané.`},actions:{invalidLink:`Tento odkaz sa nepodarilo otvoriť.`,notFound:`Táto akcia už nie je k dispozícii.`,failed:`Akciu sa nepodarilo dokončiť.`},config:{edited:`Nastavenia upozornení boli uložené.`,notEdited:`Nastavenia upozornení sa nepodarilo uložiť.`}},fields:{filters:{status:{title:`Stav`,options:{all:`Všetky`,active:`Aktívne`,dismissed:`Skryté`,resolved:`Vyriešené`}},severity:{title:`Závažnosť`},source:{title:`Zdroj`,placeholder:`Akýkoľvek zdroj`},unread:{title:`Len neprečítané`}},notifications:{occurrences:{title:`Počet výskytov`},createdAt:{title:`Vytvorené`},updatedAt:{title:`Aktualizované`},readAt:{title:`Prečítané`,no:`Neprečítané`},dismissedAt:{title:`Skryté`,no:`Neskryté`},resolvedAt:{title:`Vyriešené`,no:`Nevyriešené`}},config:{retentionDays:{title:`Doba uchovávania`,placeholder:`30`,unit:`dní`,validation:{required:`Doba uchovávania je povinná.`,range:`Doba uchovávania musí byť medzi 1 a 365 dňami.`}},maxNotifications:{title:`Maximálny počet aktívnych upozornení`,placeholder:`500`,validation:{required:`Maximálny počet aktívnych upozornení je povinný.`,range:`Maximálny počet aktívnych upozornení musí byť medzi 50 a 5000.`},unit:`oznámení`}}},filters:{notifications:{severity:{title:`Filtrovať podľa závažnosti`},source:{title:`Filtrovať podľa zdroja`}}},table:{columns:{severity:{title:`Závažnosť`},title:{title:`Názov`},source:{title:`Zdroj`},occurrences:{title:`Počet`},time:{title:`Čas`},actions:{title:`Akcie`}}},buttons:{yes:{title:`Áno`},no:{title:`Nie`},dismiss:{title:`Skryť`},markAllRead:{title:`Označiť všetko ako prečítané`},markRead:{title:`Označiť ako prečítané`},markUnread:{title:`Označiť ako neprečítané`},viewAll:{title:`Zobraziť všetky`},loadMore:{title:`Načítať viac`},close:{title:`Zavrieť`},detail:{title:`Detail`},resetFilters:{title:`Resetovať filtre`},reset:{title:`Resetovať`}}}},lg=[{path:`notifications`,name:Yt.NOTIFICATIONS,component:()=>hr(()=>import(`./view-notifications-Cg2TL1DH.js`),__vite__mapDeps([96,2,3,4,11,5,6,38,23,97,68,14,15,16,17,18,19,65,20,21,7,49,66,8,24,70,71,40,53,52,72,73,74,62,98])),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`notificationsModule.menu.title`),icon:`mdi:bell-outline`,menu:500}}],ug=1,dg=365,fg=50,pg=5e3,mg=Bi.extend({type:Y(pt),retentionDays:q().int().min(ug).max(dg),maxNotifications:q().int().min(fg).max(pg)}),hg=Li.extend({retentionDays:q().int().min(ug).max(dg),maxNotifications:q().int().min(fg).max(pg)}),gg=qi.and(K({type:Y(pt),retention_days:q().int().min(ug).max(dg).optional(),max_notifications:q().int().min(fg).max(pg).optional()}));zi.and(K({type:Y(pt),retention_days:q(),max_notifications:q()}));var _g=Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)),vg=_g.optional().nullable().default(null),yg=K({type:G(ht),label:X(),primary:J().optional(),url:X().optional(),extensionType:X().optional(),actionId:X().optional(),params:sn(X(),Er([X(),q(),J()])).optional(),extensionKind:G(at).optional(),serviceId:X().optional(),operation:G(yt).optional()}),bg=K({id:X().uuid(),source:X(),kind:G(Fn),key:X().nullable().default(null),severity:G(Nt),title:X(),message:X().nullable().default(null),actions:W(yg).default([]),data:sn(X(),Er([X(),q(),J(),Pn()])).nullable().default(null),persistent:J().default(!1),occurrences:q().int().default(1),readAt:vg,dismissedAt:vg,resolvedAt:vg,createdAt:_g,updatedAt:vg});K({fetching:K({items:J().default(!1),item:W(X())}),updating:W(X()),deleting:W(X())});var xg=K({succeeded:W(X()),failed:W(K({id:X(),reason:X()}))}),Sg=K({type:G(ht),label:X(),primary:J().optional(),url:X().optional(),extension_type:X().optional(),action_id:X().optional(),params:sn(X(),hn()).optional(),extension_kind:G(at).optional(),service_id:X().optional(),operation:G(yt).optional()});K({id:X().uuid(),created_at:X(),updated_at:X().nullable().optional(),source:X(),kind:G(Fn),key:X().nullable().optional(),severity:G(Nt),title:X(),message:X().nullable().optional(),actions:W(Sg),data:sn(X(),hn()).nullable().optional(),persistent:J(),occurrences:q(),read_at:X().nullable().optional(),dismissed_at:X().nullable().optional(),resolved_at:X().nullable().optional()});var Cg=(e,t)=>{switch(t.status??`active`){case`dismissed`:if(e.dismissedAt===null)return!1;break;case`resolved`:if(e.resolvedAt===null)return!1;break;case`all`:break;default:if(e.dismissedAt!==null||e.resolvedAt!==null)return!1}return!(t.severity&&t.severity.length>0&&!t.severity.includes(e.severity)||t.source&&e.source!==t.source||t.kind&&e.kind!==t.kind||t.unread!==void 0&&e.readAt===null!==t.unread)},wg={fetching:{items:!1,item:[]},updating:[],deleting:[]},Tg=e=>{let{params:t,...n}=e;return{...Un(n),params:t}},Eg=e=>{let{data:t,actions:n,...r}=e,i=bg.safeParse({...Un(r),data:t,actions:(n??[]).map(Tg)});if(!i.success)throw cr.error(`Schema validation failed with:`,i.error),new Zs(`Failed to validate received notification data.`);return i.data},Dg=jn(`notifications_module-notifications`,()=>{let e=Zn(),t=j(wg),n=j(!1),r=j({}),i=j([]),a=null,o=0,s=j(!1),c=j(void 0),l=()=>Object.values(r.value),u=e=>r.value[e]??null,d=()=>i.value.map(e=>r.value[e]).filter(e=>e!==void 0),f=()=>l().filter(e=>e.dismissedAt===null&&e.resolvedAt===null),p=()=>f().filter(e=>e.readAt===null).length,m=()=>{let e=f();return e.length===0?null:e.reduce((e,t)=>_t[t.severity]>_t[e]?t.severity:e,e[0].severity)},h=0,g={},_={},v=(e,{read:t=!1}={})=>(g[e.id]=++h,t||(_[e.id]=g[e.id]),r.value[e.id]=e),y=e=>{g[e]=++h,_[e]=g[e],delete r.value[e],i.value=i.value.filter(t=>t!==e)},b=e=>{if(e.id in r.value){let t=(0,Xd.omitBy)(e.data,Xd.isUndefined),n=bg.safeParse({...r.value[e.id],...t});if(!n.success)throw cr.error(`Schema validation failed with:`,n.error),new Zs(`Failed to insert notification.`);return v(n.data)}let t=bg.safeParse({...e.data,id:e.id});if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new Zs(`Failed to insert notification.`);return v(t.data)},x=e=>{y(e.id)},S=e=>b({id:e.id,data:Eg(e.data)}),C={},w=async n=>{let r=C[n.id];if(r)return r;let o=(async()=>{if(t.value.fetching.item.includes(n.id))throw new Qs(`Already fetching notification.`);t.value.fetching.item.push(n.id);let r=h;try{let{data:t,error:o,response:s}=await e.client.GET(`/${je}/${vr}/notifications/{id}`,{params:{path:{id:n.id}}});if(t!==void 0){let e=Eg(t.data);return(g[n.id]??0)>r?e:(v(e,{read:!0}),a!==null&&!i.value.includes(e.id)&&Cg(e,a)&&(i.value=[e.id,...i.value]),e)}let c=`Failed to fetch notification.`;throw o&&(c=Kn(o,c)),new Qs(c,s.status)}finally{t.value.fetching.item=t.value.fetching.item.filter(e=>e!==n.id)}})();C[n.id]=o;try{return await o}finally{delete C[n.id]}},T=0,E=async l=>{let u=l?.append?o:++o;T+=1,t.value.fetching.items=!0;let d=h;try{let{data:t,error:f,response:p}=await e.client.GET(`/${je}/${vr}/notifications`,{params:{query:{status:l?.status,severity:l?.severity,source:l?.source,kind:l?.kind,unread:l?.unread,after_id:l?.afterId}}});if(t!==void 0){let e=[];for(let n of t.data){let t=Eg(n);if((g[t.id]??0)>d){r.value[t.id]&&e.push(t.id);continue}v(t,{read:!0}),e.push(t.id)}return u===o&&(i.value=l?.append?[...i.value,...e.filter(e=>!i.value.includes(e))]:e,l?.append||(a={status:l?.status,severity:l?.severity,source:l?.source,kind:l?.kind,unread:l?.unread}),s.value=t.metadata.has_more,c.value=t.metadata.next_cursor),n.value=!0,e.map(e=>r.value[e]).filter(e=>e!==void 0)}let m=`Failed to fetch notifications.`;throw f&&(m=Kn(f,m)),new Qs(m,p.status)}finally{--T,T===0&&(t.value.fetching.items=!1)}};return{items:r,listIds:i,hasMore:s,nextCursor:c,semaphore:t,firstLoad:n,findAll:l,findById:u,list:d,active:f,unreadCount:p,highestActiveSeverity:m,onEvent:S,set:b,unset:x,get:w,fetch:E,markRead:async n=>{t.value.updating.push(n.id);try{let{data:t,error:r,response:i}=await e.client.PATCH(`/${je}/${vr}/notifications/{id}`,{params:{path:{id:n.id}},body:{data:{read:n.read}}});if(t!==void 0)return v(Eg(t.data));let a=`Failed to update notification.`;throw r&&(a=Kn(r,a)),new Qs(a,i.status)}finally{t.value.updating=t.value.updating.filter(e=>e!==n.id)}},dismiss:async n=>{t.value.updating.push(n.id);try{let{data:t,error:r,response:i}=await e.client.PATCH(`/${je}/${vr}/notifications/{id}`,{params:{path:{id:n.id}},body:{data:{dismissed:n.dismissed}}});if(t!==void 0)return v(Eg(t.data));let a=`Failed to update notification.`;throw r&&(a=Kn(r,a)),new Qs(a,i.status)}finally{t.value.updating=t.value.updating.filter(e=>e!==n.id)}},remove:async n=>{t.value.deleting.push(n.id);try{let{error:t,response:r}=await e.client.DELETE(`/${je}/${vr}/notifications/{id}`,{params:{path:{id:n.id}}});if(r.status===204){y(n.id);return}let i=`Failed to remove notification.`;throw t&&(i=Kn(t,i)),new Qs(i,r.status)}finally{t.value.deleting=t.value.deleting.filter(e=>e!==n.id)}},bulkUpdate:async n=>{if(n.ids.length===0)return{succeeded:[],failed:[]};t.value.updating.push(...n.ids);let i=new Map(n.ids.map(e=>[e,_[e]??0]));try{let{data:t,error:a,response:o}=await e.client.POST(`/${je}/${vr}/notifications/bulk-update`,{body:{data:{ids:n.ids,read:n.read,dismissed:n.dismissed}}});if(t===void 0||!o.ok){let e=`Failed to update notifications.`;throw a&&(e=Kn(a,e)),new Qs(e,o.status)}let s=xg.parse(t.data);for(let e of s.succeeded){let t=r.value[e];t!==void 0&&(_[e]??0)===i.get(e)&&v({...t,...n.read===void 0?{}:{readAt:n.read?new Date:null},...n.dismissed===void 0?{}:{dismissedAt:n.dismissed?new Date:null}})}return s}finally{t.value.updating=t.value.updating.filter(e=>!n.ids.includes(e))}},bulkRemove:async n=>{if(n.ids.length===0)return{succeeded:[],failed:[]};t.value.deleting.push(...n.ids);try{let{data:t,error:r,response:i}=await e.client.POST(`/${je}/${vr}/notifications/bulk-remove`,{body:{data:{ids:n.ids}}});if(t===void 0||!i.ok){let e=`Failed to remove notifications.`;throw r&&(e=Kn(r,e)),new Qs(e,i.status)}let a=xg.parse(t.data);for(let e of a.succeeded)y(e);return a}finally{t.value.deleting=t.value.deleting.filter(e=>!n.ids.includes(e))}},isLoaded:()=>n.value||l().length>0,refresh:async()=>{await E({status:`active`})}}}),Og=e=>Dg(e),kg=Symbol(`FB-Module-Notifications`),Ag={install:(e,t)=>{let n=pn(e),r=ut(e),i=_r(e),a=ea(e),o=Hi(e);for(let[e,n]of Object.entries(cg)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{notificationsModule:n});t.i18n.global.setLocaleMessage(e,r)}let s=Og(t.store);e.provide(kr,s),n.addStore(kr,s),a.addModule(kg,{type:pt,name:`Notifications`,description:`System notifications - conditions and events the system wants the administrator to see.`,elements:[{type:Oa,components:{moduleConfigEditForm:Xs},schemas:{moduleConfigSchema:mg,moduleConfigEditFormSchema:hg,moduleConfigUpdateReqSchema:gg},modules:[ka]}],modules:[ka],isCore:!0}),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&lg.forEach(e=>{t.router.addRoute(Te.ROOT,e)}),o.register(kg,()=>Ii([s]));let c=Tn();r.on(`event`,e=>{if(!e?.event?.startsWith(`NotificationsModule.`)||e.payload===null||typeof e.payload!=`object`||!(`id`in e.payload)||typeof e.payload.id!=`string`)return;let t=e.payload.id;switch(e.event){case xr.NOTIFICATION_CREATED:{let n=`severity`in e.payload?e.payload.severity:void 0,r=n===Nt.error||n===Nt.critical;s.get({id:t}).then(e=>{r&&c.error(e.title)}).catch(e=>{i.error(`Failed to fetch a created notification:`,e)});break}case xr.NOTIFICATION_UPDATED:s.get({id:t}).catch(e=>{i.error(`Failed to fetch an updated notification:`,e)});break;case xr.NOTIFICATION_DELETED:s.unset({id:t});break;default:i.warn(`Unhandled notifications module event:`,e.event)}})}},jg={"cs-CZ":{wizard:{title:`Nastavení Smart Panelu`,steps:{welcome:`Vítejte`,account:`Účet`,location:`Lokace`,spaces:`Prostory`,integrations:`Integrace`,complete:`Dokončení`},buttons:{getStarted:`Začít`,next:`Další`,back:`Zpět`,skip:`Přeskočit`,finishSetup:`Dokončit nastavení`}},welcome:{title:`Vítejte ve Smart Panelu`,description:`Pojďme nastavit vaši chytrou domácnost. Tento průvodce vás provede počáteční konfigurací.`,steps:{account:`Vytvořit účet`,accountDescription:`Nastavte svůj administrátorský účet`,location:`Nastavit lokaci`,locationDescription:`Nakonfigurujte svou lokaci pro data o počasí`,spaces:`Vytvořit prostory`,spacesDescription:`Přidejte místnosti a oblasti pro organizaci vašich zařízení`,integrations:`Povolit integrace`,integrationsDescription:`Připojte své platformy chytré domácnosti`,finish:`Začít používat`,finishDescription:`Váš smart panel je připraven k použití`}},account:{description:`Vytvořte svůj administrátorský účet. Tento účet bude vlastníkem smart panelu.`,created:`Účet byl úspěšně vytvořen! Nyní jste přihlášeni.`,fields:{firstName:`Jméno`,lastName:`Příjmení`,email:`E-mail`,username:`Uživatelské jméno`,password:`Heslo`,confirmPassword:`Potvrzení hesla`},placeholders:{firstName:`Zadejte své jméno`,lastName:`Zadejte své příjmení`,email:`Zadejte svou e-mailovou adresu`,username:`Zvolte uživatelské jméno`,password:`Zvolte heslo`,confirmPassword:`Zopakujte heslo`},validation:{firstNameRequired:`Jméno je povinné`,lastNameRequired:`Příjmení je povinné`,emailRequired:`E-mail je povinný`,emailInvalid:`Zadejte prosím platnou e-mailovou adresu`,usernameRequired:`Uživatelské jméno je povinné`,passwordRequired:`Heslo je povinné`,confirmPasswordRequired:`Potvrzení hesla je povinné`,passwordMismatch:`Hesla se neshodují`},messages:{created:`Váš účet byl vytvořen a nyní jste přihlášeni.`,error:`Nepodařilo se vytvořit účet. Zkuste to prosím znovu.`}},location:{description:`Nastavte svou lokaci pro informace o počasí a další funkce založené na poloze. Tento krok můžete přeskočit a nakonfigurovat později.`,fields:{citySearch:`Hledat město`,latitude:`Zeměpisná šířka`,longitude:`Zeměpisná délka`},placeholders:{citySearch:`Začněte psát název města...`,latitude:`např. 50.0755`,longitude:`např. 14.4378`},buttons:{myLocation:`Moje poloha`},orEnterManually:`Nebo zadejte souřadnice ručně`,hint:`Svou lokaci můžete nakonfigurovat později v nastavení Počasí.`,messages:{error:`Nepodařilo se uložit lokaci.`,geolocationNotSupported:`Geolokace není podporována vaším prohlížečem.`,geolocationDenied:`Přístup k poloze byl zamítnut. Povolte prosím přístup k poloze v nastavení prohlížeče.`,geolocationUnavailable:`Informace o poloze jsou momentálně nedostupné.`,geolocationTimeout:`Požadavek na zjištění polohy vypršel. Zkuste to prosím znovu.`,geolocationError:`Při zjišťování vaší polohy došlo k chybě.`}},spaces:{description:`Vytvořte místnosti a oblasti pro organizaci vašich zařízení. Další prostory můžete přidat později.`,quickAdd:`Rychlé přidání běžných místností`,orAddCustom:`Nebo přidejte vlastní místnost`,fields:{name:`Název místnosti`},placeholders:{name:`např. Hlavní ložnice`},buttons:{add:`Přidat`},roomsToCreate:`Místnosti k vytvoření ({count})`,categories:{livingRoom:`Obývací pokoj`,bedroom:`Ložnice`,kitchen:`Kuchyně`,bathroom:`Koupelna`,toilet:`Toaleta`,office:`Kancelář`,hallway:`Chodba`,entryway:`Předsíň`,garage:`Garáž`,diningRoom:`Jídelna`,laundry:`Prádelna`,nursery:`Dětský pokoj`,guestRoom:`Pokoj pro hosty`,storage:`Sklad`,workshop:`Dílna`},devices:{title:`Přiřadit zařízení k místnostem`,count:`zařízení`,unassigned:`Nepřiřazená zařízení ({count})`,assigned:`Přiřazená zařízení ({count})`,selected:`{count} vybráno`,assignTo:`Přiřadit k místnosti...`,assign:`Přiřadit`,clearSelection:`Vymazat`,selectSpace:`Vyberte místnost...`},hint:`Prostory můžete přidávat, přejmenovávat nebo reorganizovat později v nastavení Prostory.`,messages:{error:`Nepodařilo se vytvořit prostory.`,assignmentError:`Nepodařilo se přiřadit zařízení k prostorům.`}},integrations:{description:`Povolte integrace zařízení pro připojení vašich platforem chytré domácnosti. Zapněte ty, které používáte, a nakonfigurujte jejich nastavení připojení.`,noPlugins:`Žádné integrace zařízení nejsou k dispozici.`,hint:`Integrace můžete povolit nebo zakázat později v nastavení Rozšíření.`,searching:`Vyhledávání zařízení...`,devicesFound:`{count} zařízení nalezeno | {count} zařízení nalezeno | {count} zařízení nalezeno`,noDevicesYet:`Zatím nebyla nalezena žádná zařízení - nakonfigurujte připojení pro vyhledání zařízení`,noDevicesFound:`Zatím nebyla nalezena žádná zařízení`,enabled:`Integrace povolena`,configure:`Konfigurovat`,configRequired:`Pro připojení je vyžadována konfigurace`,setupNow:`Nastavit nyní`,stopScan:`Zastavit`,summary:`{count} integrace povolena | {count} integrace povolena | {count} integrací povoleno`,totalDevices:`{count} zařízení nalezeno | {count} zařízení nalezeno | {count} zařízení nalezeno`,configDialog:{title:`Konfigurovat {name}`,noConfig:`Pro tuto integraci nejsou k dispozici žádné možnosti konfigurace.`,buttons:{cancel:`Zrušit`,validate:`Ověřit`,save:`Uložit`},messages:{saved:`Konfigurace byla úspěšně uložena.`,validationSuccess:`Konfigurace je platná.`,validationFailed:`Ověření konfigurace selhalo.`,validationError:`Nelze ověřit konfiguraci.`}},messages:{error:`Nepodařilo se aktualizovat integrace.`}},complete:{title:`Vše je připraveno!`,description:`Váš Smart Panel je nakonfigurován a připraven k použití. Nyní můžete začít přidávat zařízení, vytvářet prostory a přizpůsobovat svůj panel.`,summary:{accountCreated:`Administrátorský účet vytvořen`,locationConfigured:`Meteorologická lokace nakonfigurována`,locationSkipped:`Meteorologická lokace přeskočena (lze nakonfigurovat později)`,spacesCreated:`{count} místnost(í) bude vytvořeno | {count} místnost bude vytvořena | {count} místností bude vytvořeno`,spacesSkipped:`Nebyly přidány žádné místnosti (lze vytvořit později)`,devicesAssigned:`{count} zařízení přiřazeno k místnostem | {count} zařízení přiřazeno k místnosti | {count} zařízení přiřazeno k místnostem`,devicesSkipped:`Žádná zařízení nebyla přiřazena k místnostem`,integrationsEnabled:`{count} integrace povolena | {count} integrace povolena | {count} integrací povoleno`,integrationsSkipped:`Žádné integrace nebyly povoleny (lze nakonfigurovat později)`},messages:{finished:`Nastavení dokončeno! Vítejte ve Smart Panelu.`,error:`Nepodařilo se dokončit úvodní nastavení.`}}},"de-DE":{wizard:{title:`Smart Panel Einrichtung`,steps:{welcome:`Willkommen`,account:`Konto`,location:`Standort`,spaces:`Räume`,integrations:`Integrationen`,complete:`Abgeschlossen`},buttons:{getStarted:`Loslegen`,next:`Weiter`,back:`Zurück`,skip:`Überspringen`,finishSetup:`Einrichtung abschließen`}},welcome:{title:`Willkommen bei Smart Panel`,description:`Lassen Sie uns Ihr Smart Home einrichten. Dieser Assistent führt Sie durch die Erstkonfiguration.`,steps:{account:`Konto erstellen`,accountDescription:`Richten Sie Ihr Administratorkonto ein`,location:`Standort festlegen`,locationDescription:`Konfigurieren Sie Ihren Standort für Wetterdaten`,spaces:`Räume erstellen`,spacesDescription:`Fügen Sie Räume und Bereiche hinzu, um Ihre Geräte zu organisieren`,integrations:`Integrationen aktivieren`,integrationsDescription:`Verbinden Sie Ihre Smart-Home-Plattformen`,finish:`Starten`,finishDescription:`Ihr Smart Panel ist einsatzbereit`}},account:{description:`Erstellen Sie Ihr Administratorkonto. Dieses wird der Besitzer des Smart Panels sein.`,created:`Konto erfolgreich erstellt! Sie sind jetzt angemeldet.`,fields:{firstName:`Vorname`,lastName:`Nachname`,email:`E-Mail`,username:`Benutzername`,password:`Passwort`,confirmPassword:`Passwort bestätigen`},placeholders:{firstName:`Geben Sie Ihren Vornamen ein`,lastName:`Geben Sie Ihren Nachnamen ein`,email:`Geben Sie Ihre E-Mail-Adresse ein`,username:`Wählen Sie einen Benutzernamen`,password:`Wählen Sie ein Passwort`,confirmPassword:`Passwort wiederholen`},validation:{firstNameRequired:`Vorname ist erforderlich`,lastNameRequired:`Nachname ist erforderlich`,emailRequired:`E-Mail ist erforderlich`,emailInvalid:`Bitte geben Sie eine gültige E-Mail-Adresse ein`,usernameRequired:`Benutzername ist erforderlich`,passwordRequired:`Passwort ist erforderlich`,confirmPasswordRequired:`Bitte bestätigen Sie Ihr Passwort`,passwordMismatch:`Passwörter stimmen nicht überein`},messages:{created:`Ihr Konto wurde erstellt und Sie sind jetzt angemeldet.`,error:`Kontoerstellung fehlgeschlagen. Bitte versuchen Sie es erneut.`}},location:{description:`Legen Sie Ihren Standort für Wetterinformationen und andere standortbasierte Funktionen fest. Sie können diesen Schritt überspringen und später konfigurieren.`,fields:{citySearch:`Stadt suchen`,latitude:`Breitengrad`,longitude:`Längengrad`},placeholders:{citySearch:`Geben Sie einen Stadtnamen ein...`,latitude:`z.B. 50.0755`,longitude:`z.B. 14.4378`},buttons:{myLocation:`Mein Standort`},orEnterManually:`Oder Koordinaten manuell eingeben`,hint:`Sie können Ihren Standort später in den Wetter-Einstellungen konfigurieren.`,messages:{error:`Standort konnte nicht gespeichert werden.`,geolocationNotSupported:`Geolokalisierung wird von Ihrem Browser nicht unterstützt.`,geolocationDenied:`Standortzugriff wurde verweigert. Bitte erlauben Sie den Standortzugriff in Ihren Browser-Einstellungen.`,geolocationUnavailable:`Standortinformationen sind derzeit nicht verfügbar.`,geolocationTimeout:`Standortanfrage hat das Zeitlimit überschritten. Bitte versuchen Sie es erneut.`,geolocationError:`Beim Abrufen Ihres Standorts ist ein Fehler aufgetreten.`}},spaces:{description:`Erstellen Sie Räume und Bereiche, um Ihre Geräte zu organisieren. Sie können später weitere Räume hinzufügen.`,quickAdd:`Häufige Räume schnell hinzufügen`,orAddCustom:`Oder benutzerdefinierten Raum hinzufügen`,fields:{name:`Raumname`},placeholders:{name:`z.B. Hauptschlafzimmer`},buttons:{add:`Hinzufügen`},roomsToCreate:`Zu erstellende Räume ({count})`,categories:{livingRoom:`Wohnzimmer`,bedroom:`Schlafzimmer`,kitchen:`Küche`,bathroom:`Badezimmer`,toilet:`Toilette`,office:`Büro`,hallway:`Flur`,entryway:`Eingangsbereich`,garage:`Garage`,diningRoom:`Esszimmer`,laundry:`Waschküche`,nursery:`Kinderzimmer`,guestRoom:`Gästezimmer`,storage:`Abstellraum`,workshop:`Werkstatt`},devices:{title:`Geräte Räumen zuweisen`,count:`Geräte`,unassigned:`Nicht zugewiesene Geräte ({count})`,assigned:`Zugewiesene Geräte ({count})`,selected:`{count} ausgewählt`,assignTo:`Raum zuweisen...`,assign:`Zuweisen`,clearSelection:`Löschen`,selectSpace:`Raum auswählen...`},hint:`Sie können Räume später in den Raum-Einstellungen hinzufügen, umbenennen oder neu organisieren.`,messages:{error:`Räume konnten nicht erstellt werden.`,assignmentError:`Geräte konnten den Räumen nicht zugewiesen werden.`}},integrations:{description:`Aktivieren Sie Geräteintegrationen, um Ihre Smart-Home-Plattformen zu verbinden. Aktivieren Sie die gewünschten und konfigurieren Sie deren Verbindungseinstellungen.`,noPlugins:`Keine Geräteintegrationen verfügbar.`,hint:`Sie können Integrationen später in den Erweiterungseinstellungen aktivieren oder deaktivieren.`,searching:`Suche nach Geräten...`,devicesFound:`{count} Gerät gefunden | {count} Gerät gefunden | {count} Geräte gefunden`,noDevicesYet:`Noch keine Geräte gefunden - konfigurieren Sie die Verbindung, um Geräte zu entdecken`,noDevicesFound:`Noch keine Geräte gefunden`,enabled:`Integration aktiviert`,configure:`Konfigurieren`,configRequired:`Konfiguration erforderlich zum Verbinden`,setupNow:`Jetzt einrichten`,stopScan:`Stoppen`,summary:`{count} Integration aktiviert | {count} Integration aktiviert | {count} Integrationen aktiviert`,totalDevices:`{count} Gerät gefunden | {count} Gerät gefunden | {count} Geräte gefunden`,configDialog:{title:`{name} konfigurieren`,noConfig:`Für diese Integration sind keine Konfigurationsoptionen verfügbar.`,buttons:{cancel:`Abbrechen`,validate:`Validieren`,save:`Speichern`},messages:{saved:`Konfiguration erfolgreich gespeichert.`,validationSuccess:`Konfiguration ist gültig.`,validationFailed:`Konfigurationsvalidierung fehlgeschlagen.`,validationError:`Konfiguration konnte nicht validiert werden.`}},messages:{error:`Integrationen konnten nicht aktualisiert werden.`}},complete:{title:`Alles fertig!`,description:`Ihr Smart Panel ist konfiguriert und einsatzbereit. Sie können jetzt Geräte hinzufügen, Räume erstellen und Ihr Dashboard anpassen.`,summary:{accountCreated:`Administratorkonto erstellt`,locationConfigured:`Wetterstandort konfiguriert`,locationSkipped:`Wetterstandort übersprungen (kann später konfiguriert werden)`,spacesCreated:`{count} Raum/Räume werden erstellt | {count} Raum wird erstellt | {count} Räume werden erstellt`,spacesSkipped:`Keine Räume hinzugefügt (können später erstellt werden)`,devicesAssigned:`{count} Gerät(e) Räumen zugewiesen | {count} Gerät einem Raum zugewiesen | {count} Geräte Räumen zugewiesen`,devicesSkipped:`Keine Geräte Räumen zugewiesen`,integrationsEnabled:`{count} Integration(en) aktiviert | {count} Integration aktiviert | {count} Integrationen aktiviert`,integrationsSkipped:`Keine Integrationen aktiviert (können später konfiguriert werden)`},messages:{finished:`Einrichtung abgeschlossen! Willkommen bei Smart Panel.`,error:`Einrichtung konnte nicht abgeschlossen werden.`}}},"en-US":{wizard:{title:`Smart Panel Setup`,steps:{welcome:`Welcome`,account:`Account`,location:`Location`,spaces:`Spaces`,integrations:`Integrations`,complete:`Complete`},buttons:{getStarted:`Get Started`,next:`Next`,back:`Back`,skip:`Skip`,finishSetup:`Finish Setup`}},welcome:{title:`Welcome to Smart Panel`,description:`Let's set up your smart home. This wizard will guide you through the initial configuration.`,steps:{account:`Create Account`,accountDescription:`Set up your administrator account`,location:`Set Location`,locationDescription:`Configure your location for weather data`,spaces:`Create Spaces`,spacesDescription:`Add rooms and areas to organize your devices`,integrations:`Enable Integrations`,integrationsDescription:`Connect your smart home platforms`,finish:`Start Using`,finishDescription:`Your smart panel is ready to go`}},account:{description:`Create your administrator account. This will be the owner of the smart panel.`,created:`Account created successfully! You are now logged in.`,fields:{firstName:`First Name`,lastName:`Last Name`,email:`Email`,username:`Username`,password:`Password`,confirmPassword:`Confirm Password`},placeholders:{firstName:`Enter your first name`,lastName:`Enter your last name`,email:`Enter your email address`,username:`Choose a username`,password:`Choose a password`,confirmPassword:`Repeat your password`},validation:{firstNameRequired:`First name is required`,lastNameRequired:`Last name is required`,emailRequired:`Email is required`,emailInvalid:`Please enter a valid email address`,usernameRequired:`Username is required`,passwordRequired:`Password is required`,confirmPasswordRequired:`Please confirm your password`,passwordMismatch:`Passwords do not match`},messages:{created:`Your account has been created and you are now logged in.`,error:`Failed to create account. Please try again.`}},location:{description:`Set your location for weather information and other location-based features. You can skip this step and configure it later.`,fields:{citySearch:`Search City`,latitude:`Latitude`,longitude:`Longitude`},placeholders:{citySearch:`Type a city name to search...`,latitude:`e.g. 50.0755`,longitude:`e.g. 14.4378`},buttons:{myLocation:`My Location`},orEnterManually:`Or enter coordinates manually`,hint:`You can configure your location later in the Weather settings.`,messages:{error:`Failed to save location.`,geolocationNotSupported:`Geolocation is not supported by your browser.`,geolocationDenied:`Location access was denied. Please allow location access in your browser settings.`,geolocationUnavailable:`Location information is currently unavailable.`,geolocationTimeout:`Location request timed out. Please try again.`,geolocationError:`An error occurred while getting your location.`}},spaces:{description:`Create rooms and areas to organize your devices. You can add more spaces later.`,quickAdd:`Quick add common rooms`,orAddCustom:`Or add custom room`,fields:{name:`Room Name`},placeholders:{name:`e.g. Master Bedroom`},buttons:{add:`Add`},roomsToCreate:`Rooms to create ({count})`,categories:{livingRoom:`Living Room`,bedroom:`Bedroom`,kitchen:`Kitchen`,bathroom:`Bathroom`,toilet:`Toilet`,office:`Office`,hallway:`Hallway`,entryway:`Entryway`,garage:`Garage`,diningRoom:`Dining Room`,laundry:`Laundry`,nursery:`Nursery`,guestRoom:`Guest Room`,storage:`Storage`,workshop:`Workshop`},devices:{title:`Assign devices to rooms`,count:`devices`,unassigned:`Unassigned devices ({count})`,assigned:`Assigned devices ({count})`,selected:`{count} selected`,assignTo:`Assign to room...`,assign:`Assign`,clearSelection:`Clear`,selectSpace:`Select room...`},hint:`You can add, rename, or reorganize spaces later in the Spaces settings.`,messages:{error:`Failed to create spaces.`,assignmentError:`Failed to assign devices to spaces.`}},integrations:{description:`Enable device integrations to connect your smart home platforms. Toggle on the ones you use and configure their connection settings.`,noPlugins:`No device integrations available.`,hint:`You can enable or disable integrations later in the Extensions settings.`,searching:`Searching for devices...`,devicesFound:`{count} device found | {count} device found | {count} devices found`,noDevicesYet:`No devices found yet - configure connection to discover devices`,noDevicesFound:`No devices found yet`,enabled:`Integration enabled`,configure:`Configure`,configRequired:`Configuration required to connect`,setupNow:`Set up now`,stopScan:`Stop`,summary:`{count} integration enabled | {count} integration enabled | {count} integrations enabled`,totalDevices:`{count} device found | {count} device found | {count} devices found`,configDialog:{title:`Configure {name}`,noConfig:`No configuration options available for this integration.`,buttons:{cancel:`Cancel`,validate:`Validate`,save:`Save`},messages:{saved:`Configuration saved successfully.`,validationSuccess:`Configuration is valid.`,validationFailed:`Configuration validation failed.`,validationError:`Unable to validate configuration.`}},messages:{error:`Failed to update integrations.`}},complete:{title:`You're All Set!`,description:`Your Smart Panel is configured and ready to use. You can now start adding devices, creating spaces, and customizing your dashboard.`,summary:{accountCreated:`Administrator account created`,locationConfigured:`Weather location configured`,locationSkipped:`Weather location skipped (can be configured later)`,spacesCreated:`{count} room(s) will be created | {count} room will be created | {count} rooms will be created`,spacesSkipped:`No rooms added (can be created later)`,devicesAssigned:`{count} device(s) assigned to rooms | {count} device assigned to a room | {count} devices assigned to rooms`,devicesSkipped:`No devices assigned to rooms`,integrationsEnabled:`{count} integration(s) enabled | {count} integration enabled | {count} integrations enabled`,integrationsSkipped:`No integrations enabled (can be configured later)`},messages:{finished:`Setup complete! Welcome to Smart Panel.`,error:`Failed to complete onboarding.`}}},"es-ES":{wizard:{title:`Configuración del panel inteligente`,steps:{welcome:`Bienvenida`,account:`Cuenta`,location:`Ubicación`,spaces:`Espacios`,integrations:`Integraciones`,complete:`Completado`},buttons:{getStarted:`Comenzar`,next:`Siguiente`,back:`Atrás`,skip:`Omitir`,finishSetup:`Finalizar configuración`}},welcome:{title:`Bienvenido al panel inteligente`,description:`Configuremos tu hogar inteligente. Este asistente te guiará a través de la configuración inicial.`,steps:{account:`Crear cuenta`,accountDescription:`Configura tu cuenta de administrador`,location:`Establecer ubicación`,locationDescription:`Configura tu ubicación para datos meteorológicos`,spaces:`Crear espacios`,spacesDescription:`Añade habitaciones y áreas para organizar tus dispositivos`,integrations:`Habilitar integraciones`,integrationsDescription:`Conecta tus plataformas de hogar inteligente`,finish:`Comenzar a usar`,finishDescription:`Tu panel inteligente está listo para funcionar`}},account:{description:`Crea tu cuenta de administrador. Este será el propietario del panel inteligente.`,created:`¡Cuenta creada correctamente! Ya has iniciado sesión.`,fields:{firstName:`Nombre`,lastName:`Apellido`,email:`Correo electrónico`,username:`Nombre de usuario`,password:`Contraseña`,confirmPassword:`Confirmar contraseña`},placeholders:{firstName:`Ingresa tu nombre`,lastName:`Ingresa tu apellido`,email:`Ingresa tu dirección de correo electrónico`,username:`Elige un nombre de usuario`,password:`Elige una contraseña`,confirmPassword:`Repita su contraseña`},validation:{firstNameRequired:`El nombre es obligatorio`,lastNameRequired:`El apellido es obligatorio`,emailRequired:`El correo electrónico es obligatorio`,emailInvalid:`Por favor ingresa una dirección de correo electrónico válida`,usernameRequired:`El nombre de usuario es obligatorio`,passwordRequired:`La contraseña es obligatoria`,confirmPasswordRequired:`Por favor confirme su contraseña`,passwordMismatch:`Las contraseñas no coinciden`},messages:{created:`Tu cuenta ha sido creada y ya has iniciado sesión.`,error:`No se pudo crear la cuenta. Por favor, inténtalo de nuevo.`}},location:{description:`Establece tu ubicación para información meteorológica y otras funciones basadas en la ubicación. Puedes omitir este paso y configurarlo más tarde.`,fields:{citySearch:`Buscar ciudad`,latitude:`Latitud`,longitude:`Longitud`},placeholders:{citySearch:`Escribe un nombre de ciudad para buscar...`,latitude:`ej. 50.0755`,longitude:`ej. 14.4378`},buttons:{myLocation:`Mi ubicación`},orEnterManually:`O ingresa las coordenadas manualmente`,hint:`Puedes configurar tu ubicación más tarde en los ajustes del clima.`,messages:{error:`No se pudo guardar la ubicación.`,geolocationNotSupported:`La geolocalización no es compatible con tu navegador.`,geolocationDenied:`Se denegó el acceso a la ubicación. Por favor, permite el acceso a la ubicación en la configuración de tu navegador.`,geolocationUnavailable:`La información de ubicación no está disponible en este momento.`,geolocationTimeout:`La solicitud de ubicación ha expirado. Por favor, inténtalo de nuevo.`,geolocationError:`Ocurrió un error al obtener tu ubicación.`}},spaces:{description:`Crea habitaciones y áreas para organizar tus dispositivos. Puedes añadir más espacios más tarde.`,quickAdd:`Añadir habitaciones comunes rápidamente`,orAddCustom:`O añadir habitación personalizada`,fields:{name:`Nombre de la habitación`},placeholders:{name:`ej. Dormitorio principal`},buttons:{add:`Añadir`},roomsToCreate:`Habitaciones a crear ({count})`,categories:{livingRoom:`Sala de estar`,bedroom:`Dormitorio`,kitchen:`Cocina`,bathroom:`Baño`,toilet:`Aseo`,office:`Oficina`,hallway:`Pasillo`,entryway:`Entrada`,garage:`Garaje`,diningRoom:`Comedor`,laundry:`Lavandería`,nursery:`Cuarto infantil`,guestRoom:`Habitación de invitados`,storage:`Almacén`,workshop:`Taller`},devices:{title:`Asignar dispositivos a habitaciones`,count:`dispositivos`,unassigned:`Dispositivos sin asignar ({count})`,assigned:`Dispositivos asignados ({count})`,selected:`{count} seleccionados`,assignTo:`Asignar a habitación...`,assign:`Asignar`,clearSelection:`Limpiar`,selectSpace:`Seleccionar habitación...`},hint:`Puedes añadir, renombrar o reorganizar espacios más tarde en los ajustes de Espacios.`,messages:{error:`No se pudieron crear los espacios.`,assignmentError:`No se pudieron asignar los dispositivos a los espacios.`}},integrations:{description:`Habilita las integraciones de dispositivos para conectar tus plataformas de hogar inteligente. Activa las que uses y configura sus ajustes de conexión.`,noPlugins:`No hay integraciones de dispositivos disponibles.`,hint:`Puedes habilitar o deshabilitar integraciones más tarde en los ajustes de Extensiones.`,searching:`Buscando dispositivos...`,devicesFound:`{count} dispositivo encontrado | {count} dispositivo encontrado | {count} dispositivos encontrados`,noDevicesYet:`Aún no se encontraron dispositivos — configura la conexión para descubrir dispositivos`,noDevicesFound:`Aún no se encontraron dispositivos`,enabled:`Integración habilitada`,configure:`Configurar`,configRequired:`Se requiere configuración para conectar`,setupNow:`Configurar ahora`,stopScan:`Detener`,summary:`{count} integración habilitada | {count} integración habilitada | {count} integraciones habilitadas`,totalDevices:`{count} dispositivo encontrado | {count} dispositivo encontrado | {count} dispositivos encontrados`,configDialog:{title:`Configurar {name}`,noConfig:`No hay opciones de configuración disponibles para esta integración.`,buttons:{cancel:`Cancelar`,validate:`Validar`,save:`Guardar`},messages:{saved:`Configuración guardada correctamente.`,validationSuccess:`La configuración es válida.`,validationFailed:`La validación de la configuración falló.`,validationError:`No se pudo validar la configuración.`}},messages:{error:`No se pudieron actualizar las integraciones.`}},complete:{title:`¡Todo listo!`,description:`Tu panel inteligente está configurado y listo para usar. Ahora puedes comenzar a añadir dispositivos, crear espacios y personalizar tu panel de control.`,summary:{accountCreated:`Cuenta de administrador creada`,locationConfigured:`Ubicación meteorológica configurada`,locationSkipped:`Ubicación meteorológica omitida (se puede configurar más tarde)`,spacesCreated:`{count} habitación(es) serán creadas | {count} habitación será creada | {count} habitaciones serán creadas`,spacesSkipped:`No se añadieron habitaciones (se pueden crear más tarde)`,devicesAssigned:`{count} dispositivo(s) asignados a habitaciones | {count} dispositivo asignado a una habitación | {count} dispositivos asignados a habitaciones`,devicesSkipped:`No se asignaron dispositivos a habitaciones`,integrationsEnabled:`{count} integración(es) habilitadas | {count} integración habilitada | {count} integraciones habilitadas`,integrationsSkipped:`No se habilitaron integraciones (se pueden configurar más tarde)`},messages:{finished:`¡Configuración completada! Bienvenido al panel inteligente.`,error:`No se pudo completar la configuración inicial.`}}},"pl-PL":{wizard:{title:`Konfiguracja Smart Panel`,steps:{welcome:`Witamy`,account:`Konto`,location:`Lokalizacja`,spaces:`Przestrzenie`,integrations:`Integracje`,complete:`Zakończenie`},buttons:{getStarted:`Rozpocznij`,next:`Dalej`,back:`Wstecz`,skip:`Pomiń`,finishSetup:`Zakończ konfigurację`}},welcome:{title:`Witamy w Smart Panel`,description:`Skonfigurujmy Twój inteligentny dom. Ten kreator przeprowadzi Cię przez początkową konfigurację.`,steps:{account:`Utwórz konto`,accountDescription:`Skonfiguruj konto administratora`,location:`Ustaw lokalizację`,locationDescription:`Skonfiguruj lokalizację dla danych pogodowych`,spaces:`Utwórz przestrzenie`,spacesDescription:`Dodaj pokoje i strefy, aby uporządkować urządzenia`,integrations:`Włącz integracje`,integrationsDescription:`Połącz platformy inteligentnego domu`,finish:`Zacznij korzystać`,finishDescription:`Twój smart panel jest gotowy do użycia`}},account:{description:`Utwórz konto administratora. To będzie właściciel smart panelu.`,created:`Konto zostało pomyślnie utworzone! Jesteś teraz zalogowany.`,fields:{firstName:`Imię`,lastName:`Nazwisko`,email:`E-mail`,username:`Nazwa użytkownika`,password:`Hasło`,confirmPassword:`Potwierdź hasło`},placeholders:{firstName:`Wprowadź swoje imię`,lastName:`Wprowadź swoje nazwisko`,email:`Wprowadź adres e-mail`,username:`Wybierz nazwę użytkownika`,password:`Wybierz hasło`,confirmPassword:`Powtórz hasło`},validation:{firstNameRequired:`Imię jest wymagane`,lastNameRequired:`Nazwisko jest wymagane`,emailRequired:`E-mail jest wymagany`,emailInvalid:`Proszę podać prawidłowy adres e-mail`,usernameRequired:`Nazwa użytkownika jest wymagana`,passwordRequired:`Hasło jest wymagane`,confirmPasswordRequired:`Potwierdzenie hasła jest wymagane`,passwordMismatch:`Hasła nie są takie same`},messages:{created:`Twoje konto zostało utworzone i jesteś teraz zalogowany.`,error:`Nie udało się utworzyć konta. Spróbuj ponownie.`}},location:{description:`Ustaw lokalizację dla informacji pogodowych i innych funkcji opartych na lokalizacji. Możesz pominąć ten krok i skonfigurować go później.`,fields:{citySearch:`Wyszukaj miasto`,latitude:`Szerokość geograficzna`,longitude:`Długość geograficzna`},placeholders:{citySearch:`Wpisz nazwę miasta, aby wyszukać...`,latitude:`np. 52.2297`,longitude:`np. 21.0122`},buttons:{myLocation:`Moja lokalizacja`},orEnterManually:`Lub wprowadź współrzędne ręcznie`,hint:`Lokalizację możesz skonfigurować później w ustawieniach pogody.`,messages:{error:`Nie udało się zapisać lokalizacji.`,geolocationNotSupported:`Geolokalizacja nie jest obsługiwana przez Twoją przeglądarkę.`,geolocationDenied:`Dostęp do lokalizacji został odmówiony. Proszę zezwolić na dostęp do lokalizacji w ustawieniach przeglądarki.`,geolocationUnavailable:`Informacje o lokalizacji są obecnie niedostępne.`,geolocationTimeout:`Żądanie lokalizacji przekroczyło limit czasu. Spróbuj ponownie.`,geolocationError:`Wystąpił błąd podczas pobierania lokalizacji.`}},spaces:{description:`Utwórz pokoje i strefy, aby uporządkować urządzenia. Więcej przestrzeni możesz dodać później.`,quickAdd:`Szybkie dodawanie typowych pokoi`,orAddCustom:`Lub dodaj niestandardowy pokój`,fields:{name:`Nazwa pokoju`},placeholders:{name:`np. Sypialnia główna`},buttons:{add:`Dodaj`},roomsToCreate:`Pokoje do utworzenia ({count})`,categories:{livingRoom:`Salon`,bedroom:`Sypialnia`,kitchen:`Kuchnia`,bathroom:`Łazienka`,toilet:`Toaleta`,office:`Biuro`,hallway:`Korytarz`,entryway:`Przedsionek`,garage:`Garaż`,diningRoom:`Jadalnia`,laundry:`Pralnia`,nursery:`Pokój dziecięcy`,guestRoom:`Pokój gościnny`,storage:`Magazyn`,workshop:`Warsztat`},devices:{title:`Przypisz urządzenia do pokoi`,count:`urządzenia`,unassigned:`Nieprzypisane urządzenia ({count})`,assigned:`Przypisane urządzenia ({count})`,selected:`{count} zaznaczonych`,assignTo:`Przypisz do pokoju...`,assign:`Przypisz`,clearSelection:`Wyczyść`,selectSpace:`Wybierz pokój...`},hint:`Przestrzenie możesz dodawać, zmieniać nazwy lub reorganizować później w ustawieniach przestrzeni.`,messages:{error:`Nie udało się utworzyć przestrzeni.`,assignmentError:`Nie udało się przypisać urządzeń do przestrzeni.`}},integrations:{description:`Włącz integracje urządzeń, aby połączyć platformy inteligentnego domu. Włącz te, których używasz, i skonfiguruj ustawienia połączenia.`,noPlugins:`Brak dostępnych integracji urządzeń.`,hint:`Integracje możesz włączać lub wyłączać później w ustawieniach rozszerzeń.`,searching:`Wyszukiwanie urządzeń...`,devicesFound:`Znaleziono {count} urządzenie | Znaleziono {count} urządzenie | Znaleziono {count} urządzeń`,noDevicesYet:`Nie znaleziono jeszcze urządzeń — skonfiguruj połączenie, aby wykryć urządzenia`,noDevicesFound:`Nie znaleziono jeszcze urządzeń`,enabled:`Integracja włączona`,configure:`Skonfiguruj`,configRequired:`Wymagana konfiguracja połączenia`,setupNow:`Skonfiguruj teraz`,stopScan:`Zatrzymaj`,summary:`Włączono {count} integrację | Włączono {count} integrację | Włączono {count} integracji`,totalDevices:`Znaleziono {count} urządzenie | Znaleziono {count} urządzenie | Znaleziono {count} urządzeń`,configDialog:{title:`Skonfiguruj {name}`,noConfig:`Brak opcji konfiguracji dla tej integracji.`,buttons:{cancel:`Anuluj`,validate:`Sprawdź`,save:`Zapisz`},messages:{saved:`Konfiguracja została pomyślnie zapisana.`,validationSuccess:`Konfiguracja jest prawidłowa.`,validationFailed:`Walidacja konfiguracji nie powiodła się.`,validationError:`Nie udało się sprawdzić konfiguracji.`}},messages:{error:`Nie udało się zaktualizować integracji.`}},complete:{title:`Wszystko gotowe!`,description:`Twój Smart Panel jest skonfigurowany i gotowy do użycia. Możesz teraz zacząć dodawać urządzenia, tworzyć przestrzenie i dostosowywać pulpit.`,summary:{accountCreated:`Konto administratora zostało utworzone`,locationConfigured:`Lokalizacja pogody skonfigurowana`,locationSkipped:`Lokalizacja pogody pominięta (można skonfigurować później)`,spacesCreated:`Zostanie utworzonych {count} pokoi | Zostanie utworzony {count} pokój | Zostanie utworzonych {count} pokoi`,spacesSkipped:`Nie dodano pokoi (można utworzyć później)`,devicesAssigned:`Przypisano {count} urządzeń do pokoi | Przypisano {count} urządzenie do pokoju | Przypisano {count} urządzeń do pokoi`,devicesSkipped:`Nie przypisano urządzeń do pokoi`,integrationsEnabled:`Włączono {count} integracji | Włączono {count} integrację | Włączono {count} integracji`,integrationsSkipped:`Nie włączono integracji (można skonfigurować później)`},messages:{finished:`Konfiguracja zakończona! Witamy w Smart Panel.`,error:`Nie udało się zakończyć wstępnej konfiguracji.`}}},"sk-SK":{wizard:{title:`Nastavenie Smart Panelu`,steps:{welcome:`Vitajte`,account:`Účet`,location:`Poloha`,spaces:`Priestory`,integrations:`Integrácie`,complete:`Dokončenie`},buttons:{getStarted:`Začať`,next:`Ďalej`,back:`Späť`,skip:`Preskočiť`,finishSetup:`Dokončiť nastavenie`}},welcome:{title:`Vitajte v Smart Paneli`,description:`Poďme nastaviť vašu inteligentnú domácnosť. Tento sprievodca vás prevedie počiatočnou konfiguráciou.`,steps:{account:`Vytvoriť účet`,accountDescription:`Nastavte si účet administrátora`,location:`Nastaviť polohu`,locationDescription:`Nakonfigurujte svoju polohu pre údaje o počasí`,spaces:`Vytvoriť priestory`,spacesDescription:`Pridajte miestnosti a oblasti na organizáciu zariadení`,integrations:`Povoliť integrácie`,integrationsDescription:`Pripojte platformy inteligentnej domácnosti`,finish:`Začať používať`,finishDescription:`Váš smart panel je pripravený`}},account:{description:`Vytvorte si účet administrátora. Tento bude vlastníkom smart panelu.`,created:`Účet bol úspešne vytvorený! Teraz ste prihlásení.`,fields:{firstName:`Meno`,lastName:`Priezvisko`,email:`Email`,username:`Používateľské meno`,password:`Heslo`,confirmPassword:`Potvrdenie hesla`},placeholders:{firstName:`Zadajte svoje meno`,lastName:`Zadajte svoje priezvisko`,email:`Zadajte svoju emailovú adresu`,username:`Zvoľte si používateľské meno`,password:`Zvoľte si heslo`,confirmPassword:`Zopakujte heslo`},validation:{firstNameRequired:`Meno je povinné`,lastNameRequired:`Priezvisko je povinné`,emailRequired:`Email je povinný`,emailInvalid:`Prosím zadajte platnú emailovú adresu`,usernameRequired:`Používateľské meno je povinné`,passwordRequired:`Heslo je povinné`,confirmPasswordRequired:`Potvrdenie hesla je povinné`,passwordMismatch:`Heslá sa nezhodujú`},messages:{created:`Váš účet bol vytvorený a teraz ste prihlásení.`,error:`Nepodarilo sa vytvoriť účet. Skúste to prosím znova.`}},location:{description:`Nastavte svoju polohu pre informácie o počasí a ďalšie funkcie založené na polohe. Tento krok môžete preskočiť a nakonfigurovať neskôr.`,fields:{citySearch:`Vyhľadať mesto`,latitude:`Zemepisná šírka`,longitude:`Zemepisná dĺžka`},placeholders:{citySearch:`Zadajte názov mesta na vyhľadanie...`,latitude:`napr. 50.0755`,longitude:`napr. 14.4378`},buttons:{myLocation:`Moja poloha`},orEnterManually:`Alebo zadajte súradnice manuálne`,hint:`Svoju polohu môžete nakonfigurovať neskôr v nastaveniach Počasia.`,messages:{error:`Nepodarilo sa uložiť polohu.`,geolocationNotSupported:`Geolokácia nie je podporovaná vaším prehliadačom.`,geolocationDenied:`Prístup k polohe bol zamietnutý. Prosím povoľte prístup k polohe v nastaveniach prehliadača.`,geolocationUnavailable:`Informácie o polohe sú momentálne nedostupné.`,geolocationTimeout:`Požiadavka na polohu vypršala. Skúste to prosím znova.`,geolocationError:`Pri získavaní vašej polohy sa vyskytla chyba.`}},spaces:{description:`Vytvorte miestnosti a oblasti na organizáciu zariadení. Ďalšie priestory môžete pridať neskôr.`,quickAdd:`Rýchle pridanie bežných miestností`,orAddCustom:`Alebo pridajte vlastnú miestnosť`,fields:{name:`Názov miestnosti`},placeholders:{name:`napr. Hlavná spálňa`},buttons:{add:`Pridať`},roomsToCreate:`Miestnosti na vytvorenie ({count})`,categories:{livingRoom:`Obývacia izba`,bedroom:`Spálňa`,kitchen:`Kuchyňa`,bathroom:`Kúpeľňa`,toilet:`Toaleta`,office:`Kancelária`,hallway:`Chodba`,entryway:`Vstupná hala`,garage:`Garáž`,diningRoom:`Jedáleň`,laundry:`Práčovňa`,nursery:`Detská izba`,guestRoom:`Hosťovská izba`,storage:`Sklad`,workshop:`Dielňa`},devices:{title:`Priradiť zariadenia k miestnostiam`,count:`zariadení`,unassigned:`Nepriradené zariadenia ({count})`,assigned:`Priradené zariadenia ({count})`,selected:`{count} vybraných`,assignTo:`Priradiť do miestnosti...`,assign:`Priradiť`,clearSelection:`Zrušiť`,selectSpace:`Vyberte miestnosť...`},hint:`Priestory môžete pridávať, premenovávať alebo reorganizovať neskôr v nastaveniach Priestorov.`,messages:{error:`Nepodarilo sa vytvoriť priestory.`,assignmentError:`Nepodarilo sa priradiť zariadenia k priestorom.`}},integrations:{description:`Povoľte integrácie zariadení na pripojenie platforiem inteligentnej domácnosti. Zapnite tie, ktoré používate, a nakonfigurujte ich nastavenia pripojenia.`,noPlugins:`Nie sú dostupné žiadne integrácie zariadení.`,hint:`Integrácie môžete povoliť alebo zakázať neskôr v nastaveniach Rozšírení.`,searching:`Vyhľadávanie zariadení...`,devicesFound:`{count} zariadenie nájdené | {count} zariadenie nájdené | {count} zariadení nájdených`,noDevicesYet:`Zatiaľ neboli nájdené žiadne zariadenia - nakonfigurujte pripojenie na objavenie zariadení`,noDevicesFound:`Zatiaľ neboli nájdené žiadne zariadenia`,enabled:`Integrácia povolená`,configure:`Konfigurovať`,configRequired:`Na pripojenie je potrebná konfigurácia`,setupNow:`Nastaviť teraz`,stopScan:`Zastaviť`,summary:`{count} integrácia povolená | {count} integrácia povolená | {count} integrácií povolených`,totalDevices:`{count} zariadenie nájdené | {count} zariadenie nájdené | {count} zariadení nájdených`,configDialog:{title:`Konfigurovať {name}`,noConfig:`Pre túto integráciu nie sú dostupné žiadne konfiguračné možnosti.`,buttons:{cancel:`Zrušiť`,validate:`Overiť`,save:`Uložiť`},messages:{saved:`Konfigurácia bola úspešne uložená.`,validationSuccess:`Konfigurácia je platná.`,validationFailed:`Overenie konfigurácie zlyhalo.`,validationError:`Konfiguráciu sa nepodarilo overiť.`}},messages:{error:`Nepodarilo sa aktualizovať integrácie.`}},complete:{title:`Všetko je pripravené!`,description:`Váš Smart Panel je nakonfigurovaný a pripravený na použitie. Teraz môžete začať pridávať zariadenia, vytvárať priestory a prispôsobovať dashboard.`,summary:{accountCreated:`Účet administrátora vytvorený`,locationConfigured:`Poloha počasia nakonfigurovaná`,locationSkipped:`Poloha počasia preskočená (možno nakonfigurovať neskôr)`,spacesCreated:`{count} miestností bude vytvorených | {count} miestnosť bude vytvorená | {count} miestností bude vytvorených`,spacesSkipped:`Žiadne miestnosti neboli pridané (možno vytvoriť neskôr)`,devicesAssigned:`{count} zariadení priradených k miestnostiam | {count} zariadenie priradené k miestnosti | {count} zariadení priradených k miestnostiam`,devicesSkipped:`Žiadne zariadenia neboli priradené k miestnostiam`,integrationsEnabled:`{count} integrácií povolených | {count} integrácia povolená | {count} integrácií povolených`,integrationsSkipped:`Žiadne integrácie neboli povolené (možno nakonfigurovať neskôr)`},messages:{finished:`Nastavenie dokončené! Vitajte v Smart Paneli.`,error:`Nepodarilo sa dokončiť úvodné nastavenie.`}}}},Mg=(e,t)=>{let{needsOnboarding:n,isOnboardingCompleted:r,fetchStatus:i}=As();i();let a=t.name===ks.ONBOARDING;return n.value&&!a?{name:ks.ONBOARDING}:!n.value&&a&&r.value?{name:`app-root`}:!0},Ng=[{path:`/onboarding`,name:ks.ONBOARDING,component:()=>hr(()=>import(`./view-onboarding-DTDmluyn.js`),__vite__mapDeps([99,2,3,4,5,6,18,15,19,100,101,20,21,7,16,17,51,33,24,52,40,53,54,22,23,50,102,78,103,70,71,72,73,74,76,25,56,77,104])),meta:{guards:[`onboarding`],title:`Setup`}}],Pg={install:(e,t)=>{let n=fn(e);for(let[e,n]of Object.entries(jg)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{onboardingModule:n});t.i18n.global.setLocaleMessage(e,r)}t.router.beforeEach(async()=>{let{isOnboardingCompleted:e,fetchStatus:t}=As();if(!e.value)try{await t()}catch{}}),n.register(Mg),Ng.forEach(e=>{t.router.addRoute(e)})}},Fg={"cs-CZ":{scenes:{menu:{title:`Scény`},headings:{list:`Scény`,add:`Přidat scénu`,edit:`Upravit scénu`,delete:`Smazat scénu`,discard:`Zahodit změny`,adjustFilters:`Upravit filtry`,bulkRemove:`Smazat scény`,bulkEnable:`Povolit scény`,bulkDisable:`Zakázat scény`},subHeadings:{list:`Správa automatizačních scén pro vaši chytrou domácnost`,adjustFilters:`Filtrovat scény podle různých kritérií`},breadcrumbs:{scenes:`Scény`},filters:{allSpaces:`Všechny prostory`,enabled:{title:`Stav`,values:{enabled:`Povoleno`,disabled:`Zakázáno`,all:`Vše`}},category:{title:`Kategorie`,placeholder:`Vyberte kategorie`},space:{title:`Prostor`,placeholder:`Všechny prostory`}},fields:{name:`Název`,category:`Kategorie`,space:`Prostor`,enabled:`Povoleno`,actions:`Akce`,unknownSpace:`Neznámý prostor`,wholeHome:`Celý dům`,lastTriggered:`Naposledy spuštěno`,neverTriggered:`Nikdy`,search:{placeholder:`Hledat scény...`},config:{executionTimeoutMs:{title:`Časový limit provedení (ms)`,alertTitle:`Časový limit provedení`,hint:`Maximální čas povolený pro provedení scény, než je považována za neúspěšnou. Pokud je dosažen časový limit, zbývající akce mohou být zrušeny v závislosti na zpracování chyb.`,validation:{range:`Časový limit provedení musí být mezi 1000 a 300000 ms`}},maxConcurrentExecutions:{title:`Maximální počet souběžných provedení`,alertTitle:`Maximální počet souběžných provedení`,hint:`Omezuje, kolik provedení scény může běžet současně. Pomáhá předcházet přetížení při opakovaném nebo paralelním spouštění scén.`,validation:{range:`Maximální počet souběžných provedení musí být mezi 1 a 100`}},continueOnActionFailure:{title:`Pokračovat při selhání akce`,alertTitle:`Pokračovat při selhání akce`,hint:`Je-li povoleno, scéna bude pokračovat v provádění zbývajících akcí, i když jedna akce selže. Je-li zakázáno, scéna se okamžitě zastaví při prvním selhání.`}}},texts:{loadingScenes:`Načítání scén...`,noScenes:`Nemáte nakonfigurovanou žádnou scénu`,noFilteredScenes:`Žádné scény neodpovídají vašim filtrům`,confirmDiscard:`Máte neuložené změny. Opravdu je chcete zahodit?`,confirmBulkRemove:`Opravdu chcete smazat {count} vybraných scén?`,confirmBulkEnable:`Opravdu chcete povolit {count} vybraných scén?`,confirmBulkDisable:`Opravdu chcete zakázat {count} vybraných scén?`,actionsCount:`Žádné akce | {count} akce | {count} akcí`,lastTriggered:`Naposledy spuštěno`,order:`#`},edit:{sections:{general:{title:`Obecné`,hint:`<strong>Scény jsou ruční předvolby</strong>, které aplikují více akcí zařízení najednou. Nikdy se nespouštějí automaticky a nemají podmínky.`},actions:{title:`Akce`,emptyTitle:`Zatím nebyly přidány žádné akce`,emptyDescription:`Přidejte jednu nebo více akcí zařízení, které se spustí při aktivaci této scény.`,helperText:`Můžete ovládat světla, vypínače, klimatizační zařízení a další.`}}},form:{space:`Prostor`,selectSpace:`Celý dům`,spaceGroups:{rooms:`Místnosti`,zones:`Zóny`},name:`Název scény`,namePlaceholder:`Zadejte název scény`,nameRequired:`Název scény je povinný`,category:`Kategorie`,categoryRequired:`Kategorie je povinná`,description:`Popis`,descriptionPlaceholder:`Volitelný popis pro tuto scénu`,icon:`Ikona`,iconPlaceholder:`Vyberte ikonu (volitelné)`,actionsSection:`Akce scény`,noActions:`Nejsou definovány žádné akce. Přidejte akce pro ovládání zařízení při spuštění této scény.`,actionsRequired:`Je vyžadována alespoň jedna akce`,actionNumber:`Akce {number}`,device:`Zařízení`,selectDevice:`Vyberte zařízení`,deviceRequired:`Zařízení je povinné`,actionDeviceRequired:`Akce {number}: Zařízení je povinné`,channel:`Kanál`,selectChannel:`Vyberte kanál`,actionChannelRequired:`Akce {number}: Kanál je povinný`,property:`Vlastnost`,selectProperty:`Vyberte vlastnost`,propertyRequired:`Vlastnost je povinná`,actionPropertyRequired:`Akce {number}: Vlastnost je povinná`,value:`Hodnota`,valuePlaceholder:`Zadejte hodnotu`,valueRequired:`Hodnota je povinná`,actionValueRequired:`Akce {number}: Hodnota je povinná`,addAction:`Přidat akci`,editAction:`Upravit akci`},buttons:{add:{title:`Přidat scénu`},delete:{title:`Smazat`},cancel:{title:`Zrušit`},save:{title:`Uložit`},yes:{title:`Ano`},no:{title:`Ne`},close:{title:`Zavřít`},discard:{title:`Zahodit`},backToList:{title:`Zpět na seznam`},resetFilters:{title:`Resetovat filtry`}},messages:{config:{edited:`Konfigurace modulu scén byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci modulu scén`},triggered:`Scéna "{name}" byla úspěšně spuštěna`,triggerFailed:`Nepodařilo se spustit scénu`,confirmDelete:`Opravdu chcete smazat scénu "{name}"?`,deleted:`Scéna byla úspěšně smazána`,deleteFailed:`Nepodařilo se smazat scénu`,created:`Scéna byla úspěšně vytvořena`,createFailed:`Nepodařilo se vytvořit scénu`,edited:`Scéna "{scene}" byla úspěšně aktualizována`,editFailed:`Nepodařilo se aktualizovat scénu "{scene}"`,notFound:`Scéna nebyla nalezena`,duplicateAction:`Akce pro tuto vlastnost již v této scéně existuje`,addFormPlaceholder:`Formulář pro přidání scény bude implementován zde`,editFormPlaceholder:`Formulář pro úpravu scény bude implementován zde`,requestError:`Při zpracování vašeho požadavku došlo k chybě`,bulkRemoved:`Úspěšně smazáno {count} scén`,bulkRemoveFailed:`Nepodařilo se smazat {count} scén`,bulkEnabled:`Úspěšně povoleno {count} scén`,bulkEnableFailed:`Nepodařilo se povolit {count} scén`,bulkEnableCanceled:`Operace povolení zrušena`,bulkDisabled:`Úspěšně zakázáno {count} scén`,bulkDisableFailed:`Nepodařilo se zakázat {count} scén`,bulkDisableCanceled:`Operace zakázání zrušena`},categories:{generic:`Obecná`,lighting:`Osvětlení`,climate:`Klima`,media:`Média`,work:`Práce`,relax:`Odpočinek`,night:`Noc`,morning:`Ráno`,party:`Párty`,movie:`Film`,away:`Mimo domov`,home:`Doma`,security:`Zabezpečení`,energy:`Energie`,custom:`Vlastní`}}},"de-DE":{scenes:{menu:{title:`Szenen`},headings:{list:`Szenen`,add:`Szene hinzufügen`,edit:`Szene bearbeiten`,delete:`Szene löschen`,discard:`Änderungen verwerfen`,adjustFilters:`Filter anpassen`,bulkRemove:`Szenen löschen`,bulkEnable:`Szenen aktivieren`,bulkDisable:`Szenen deaktivieren`},subHeadings:{list:`Automatisierungsszenen für Ihr Smart Home verwalten`,adjustFilters:`Szenen nach verschiedenen Kriterien filtern`},breadcrumbs:{scenes:`Szenen`},filters:{allSpaces:`Alle Räume`,enabled:{title:`Status`,values:{enabled:`Aktiviert`,disabled:`Deaktiviert`,all:`Alle`}},category:{title:`Kategorie`,placeholder:`Kategorien auswählen`},space:{title:`Raum`,placeholder:`Alle Räume`}},fields:{name:`Name`,category:`Kategorie`,space:`Raum`,enabled:`Aktiviert`,actions:`Aktionen`,unknownSpace:`Unbekannter Raum`,wholeHome:`Ganzes Haus`,lastTriggered:`Zuletzt ausgelöst`,neverTriggered:`Nie`,search:{placeholder:`Szenen suchen...`},config:{executionTimeoutMs:{title:`Ausführungszeitlimit (ms)`,alertTitle:`Ausführungszeitlimit`,hint:`Maximale Zeit für eine Szenenausführung, bevor sie als fehlgeschlagen gilt. Bei Erreichen des Zeitlimits können verbleibende Aktionen je nach Fehlerbehandlung abgebrochen werden.`,validation:{range:`Ausführungszeitlimit muss zwischen 1000 und 300000 ms liegen`}},maxConcurrentExecutions:{title:`Max. gleichzeitige Ausführungen`,alertTitle:`Max. gleichzeitige Ausführungen`,hint:`Begrenzt, wie viele Szenenausführungen gleichzeitig laufen können. Hilft, Überlastung zu vermeiden, wenn Szenen wiederholt oder parallel ausgelöst werden.`,validation:{range:`Max. gleichzeitige Ausführungen müssen zwischen 1 und 100 liegen`}},continueOnActionFailure:{title:`Bei Aktionsfehler fortfahren`,alertTitle:`Bei Aktionsfehler fortfahren`,hint:`Wenn aktiviert, führt die Szene verbleibende Aktionen auch dann aus, wenn eine Aktion fehlschlägt. Wenn deaktiviert, stoppt die Szene sofort beim ersten Fehler.`}}},texts:{loadingScenes:`Szenen werden geladen...`,noScenes:`Sie haben noch keine Szenen konfiguriert`,noFilteredScenes:`Keine Szenen entsprechen Ihren Filtern`,confirmDiscard:`Sie haben ungespeicherte Änderungen. Möchten Sie diese wirklich verwerfen?`,confirmBulkRemove:`Sind Sie sicher, dass Sie {count} ausgewählte Szene(n) löschen möchten?`,confirmBulkEnable:`Sind Sie sicher, dass Sie {count} ausgewählte Szene(n) aktivieren möchten?`,confirmBulkDisable:`Sind Sie sicher, dass Sie {count} ausgewählte Szene(n) deaktivieren möchten?`,actionsCount:`Keine Aktionen | {count} Aktion | {count} Aktionen`,lastTriggered:`Zuletzt ausgelöst`,order:`#`},edit:{sections:{general:{title:`Allgemein`,hint:`<strong>Szenen sind manuelle Voreinstellungen</strong>, die mehrere Geräteaktionen gleichzeitig anwenden. Sie laufen nie automatisch ab und haben keine Bedingungen.`},actions:{title:`Aktionen`,emptyTitle:`Noch keine Aktionen hinzugefügt`,emptyDescription:`Fügen Sie eine oder mehrere Geräteaktionen hinzu, die ausgeführt werden, wenn diese Szene aktiviert wird.`,helperText:`Sie können Lichter, Schalter, Klimageräte und mehr steuern.`}}},form:{space:`Raum`,selectSpace:`Ganzes Haus`,spaceGroups:{rooms:`Räume`,zones:`Zonen`},name:`Szenenname`,namePlaceholder:`Szenennamen eingeben`,nameRequired:`Szenenname ist erforderlich`,category:`Kategorie`,categoryRequired:`Kategorie ist erforderlich`,description:`Beschreibung`,descriptionPlaceholder:`Optionale Beschreibung für diese Szene`,icon:`Symbol`,iconPlaceholder:`Symbol auswählen (optional)`,actionsSection:`Szenenaktionen`,noActions:`Keine Aktionen definiert. Fügen Sie Aktionen hinzu, um Geräte zu steuern, wenn diese Szene ausgelöst wird.`,actionsRequired:`Mindestens eine Aktion ist erforderlich`,actionNumber:`Aktion {number}`,device:`Gerät`,selectDevice:`Gerät auswählen`,deviceRequired:`Gerät ist erforderlich`,actionDeviceRequired:`Aktion {number}: Gerät ist erforderlich`,channel:`Kanal`,selectChannel:`Kanal auswählen`,actionChannelRequired:`Aktion {number}: Kanal ist erforderlich`,property:`Eigenschaft`,selectProperty:`Eigenschaft auswählen`,propertyRequired:`Eigenschaft ist erforderlich`,actionPropertyRequired:`Aktion {number}: Eigenschaft ist erforderlich`,value:`Wert`,valuePlaceholder:`Wert eingeben`,valueRequired:`Wert ist erforderlich`,actionValueRequired:`Aktion {number}: Wert ist erforderlich`,addAction:`Aktion hinzufügen`,editAction:`Aktion bearbeiten`},buttons:{add:{title:`Szene hinzufügen`},delete:{title:`Löschen`},cancel:{title:`Abbrechen`},save:{title:`Speichern`},yes:{title:`Ja`},no:{title:`Nein`},close:{title:`Schließen`},discard:{title:`Verwerfen`},backToList:{title:`Zurück zur Liste`},resetFilters:{title:`Filter zurücksetzen`}},messages:{config:{edited:`Szenenmodul-Konfiguration erfolgreich aktualisiert`,notEdited:`Aktualisierung der Szenenmodul-Konfiguration fehlgeschlagen`},triggered:`Szene "{name}" erfolgreich ausgelöst`,triggerFailed:`Auslösen der Szene fehlgeschlagen`,confirmDelete:`Sind Sie sicher, dass Sie die Szene "{name}" löschen möchten?`,deleted:`Szene erfolgreich gelöscht`,deleteFailed:`Löschen der Szene fehlgeschlagen`,created:`Szene erfolgreich erstellt`,createFailed:`Erstellen der Szene fehlgeschlagen`,edited:`Szene "{scene}" erfolgreich aktualisiert`,editFailed:`Aktualisierung der Szene "{scene}" fehlgeschlagen`,notFound:`Szene nicht gefunden`,duplicateAction:`Eine Aktion für diese Eigenschaft existiert bereits in dieser Szene`,addFormPlaceholder:`Szenen-Hinzufügen-Formular wird hier implementiert`,editFormPlaceholder:`Szenen-Bearbeiten-Formular wird hier implementiert`,requestError:`Bei der Verarbeitung Ihrer Anfrage ist ein Fehler aufgetreten`,bulkRemoved:`{count} Szene(n) erfolgreich gelöscht`,bulkRemoveFailed:`Löschen von {count} Szene(n) fehlgeschlagen`,bulkEnabled:`{count} Szene(n) erfolgreich aktiviert`,bulkEnableFailed:`Aktivieren von {count} Szene(n) fehlgeschlagen`,bulkEnableCanceled:`Aktivierungsvorgang abgebrochen`,bulkDisabled:`{count} Szene(n) erfolgreich deaktiviert`,bulkDisableFailed:`Deaktivieren von {count} Szene(n) fehlgeschlagen`,bulkDisableCanceled:`Deaktivierungsvorgang abgebrochen`},categories:{generic:`Allgemein`,lighting:`Beleuchtung`,climate:`Klima`,media:`Medien`,work:`Arbeit`,relax:`Entspannung`,night:`Nacht`,morning:`Morgen`,party:`Party`,movie:`Film`,away:`Abwesend`,home:`Zuhause`,security:`Sicherheit`,energy:`Energie`,custom:`Benutzerdefiniert`}}},"en-US":{scenes:{menu:{title:`Scenes`},headings:{list:`Scenes`,add:`Add scene`,edit:`Edit scene`,delete:`Delete scene`,discard:`Discard changes`,adjustFilters:`Adjust filters`,bulkRemove:`Delete scenes`,bulkEnable:`Enable scenes`,bulkDisable:`Disable scenes`},subHeadings:{list:`Manage automation scenes for your smart home`,adjustFilters:`Filter scenes by various criteria`},breadcrumbs:{scenes:`Scenes`},filters:{allSpaces:`All Spaces`,enabled:{title:`Status`,values:{enabled:`Enabled`,disabled:`Disabled`,all:`All`}},category:{title:`Category`,placeholder:`Select categories`},space:{title:`Space`,placeholder:`All spaces`}},fields:{name:`Name`,category:`Category`,space:`Space`,enabled:`Enabled`,actions:`Actions`,unknownSpace:`Unknown Space`,wholeHome:`Whole home`,lastTriggered:`Last Triggered`,neverTriggered:`Never`,search:{placeholder:`Search scenes...`},config:{executionTimeoutMs:{title:`Execution timeout (ms)`,alertTitle:`Execution timeout`,hint:`Maximum time allowed for a scene execution before it is considered failed. If the timeout is reached, remaining actions may be cancelled depending on failure handling.`,validation:{range:`Execution timeout must be between 1000 and 300000 ms`}},maxConcurrentExecutions:{title:`Max concurrent executions`,alertTitle:`Max concurrent executions`,hint:`Limits how many scene executions can run at the same time. Helps prevent overload when scenes are triggered repeatedly or in parallel.`,validation:{range:`Max concurrent executions must be between 1 and 100`}},continueOnActionFailure:{title:`Continue on action failure`,alertTitle:`Continue on action failure`,hint:`When enabled, the scene will continue executing remaining actions even if one action fails. When disabled, the scene stops immediately on the first failure.`}}},texts:{loadingScenes:`Loading scenes...`,noScenes:`You don't have configured any scene`,noFilteredScenes:`No scenes match your filters`,confirmDiscard:`You have unsaved changes. Are you sure you want to discard them?`,confirmBulkRemove:`Are you sure you want to delete {count} selected scene(s)?`,confirmBulkEnable:`Are you sure you want to enable {count} selected scene(s)?`,confirmBulkDisable:`Are you sure you want to disable {count} selected scene(s)?`,actionsCount:`No actions | {count} action | {count} actions`,lastTriggered:`Last Triggered`,order:`#`},edit:{sections:{general:{title:`General`,hint:`<strong>Scenes are manual presets</strong> that apply multiple device actions at once. They never run automatically and have no conditions.`},actions:{title:`Actions`,emptyTitle:`No actions added yet`,emptyDescription:`Add one or more device actions that will run when this scene is activated.`,helperText:`You can control lights, switches, climate devices, and more.`}}},form:{space:`Space`,selectSpace:`Whole home`,spaceGroups:{rooms:`Rooms`,zones:`Zones`},name:`Scene name`,namePlaceholder:`Enter scene name`,nameRequired:`Scene name is required`,category:`Category`,categoryRequired:`Category is required`,description:`Description`,descriptionPlaceholder:`Optional description for this scene`,icon:`Icon`,iconPlaceholder:`Select an icon (optional)`,actionsSection:`Scene actions`,noActions:`No actions defined. Add actions to control devices when this scene is triggered.`,actionsRequired:`At least one action is required`,actionNumber:`Action {number}`,device:`Device`,selectDevice:`Select a device`,deviceRequired:`Device is required`,actionDeviceRequired:`Action {number}: Device is required`,channel:`Channel`,selectChannel:`Select a channel`,actionChannelRequired:`Action {number}: Channel is required`,property:`Property`,selectProperty:`Select a property`,propertyRequired:`Property is required`,actionPropertyRequired:`Action {number}: Property is required`,value:`Value`,valuePlaceholder:`Enter value`,valueRequired:`Value is required`,actionValueRequired:`Action {number}: Value is required`,addAction:`Add action`,editAction:`Edit action`},buttons:{add:{title:`Add scene`},delete:{title:`Delete`},cancel:{title:`Cancel`},save:{title:`Save`},yes:{title:`Yes`},no:{title:`No`},close:{title:`Close`},discard:{title:`Discard`},backToList:{title:`Back to list`},resetFilters:{title:`Reset filters`}},messages:{config:{edited:`Scenes module configuration updated successfully`,notEdited:`Failed to update scenes module configuration`},triggered:`Scene "{name}" triggered successfully`,triggerFailed:`Failed to trigger scene`,confirmDelete:`Are you sure you want to delete scene "{name}"?`,deleted:`Scene deleted successfully`,deleteFailed:`Failed to delete scene`,created:`Scene created successfully`,createFailed:`Failed to create scene`,edited:`Scene "{scene}" updated successfully`,editFailed:`Failed to update scene "{scene}"`,notFound:`Scene not found`,duplicateAction:`An action for this property already exists in this scene`,addFormPlaceholder:`Scene add form will be implemented here`,editFormPlaceholder:`Scene edit form will be implemented here`,requestError:`An error occurred while processing your request`,bulkRemoved:`Successfully deleted {count} scene(s)`,bulkRemoveFailed:`Failed to delete {count} scene(s)`,bulkEnabled:`Successfully enabled {count} scene(s)`,bulkEnableFailed:`Failed to enable {count} scene(s)`,bulkEnableCanceled:`Enable operation canceled`,bulkDisabled:`Successfully disabled {count} scene(s)`,bulkDisableFailed:`Failed to disable {count} scene(s)`,bulkDisableCanceled:`Disable operation canceled`},categories:{generic:`Generic`,lighting:`Lighting`,climate:`Climate`,media:`Media`,work:`Work`,relax:`Relax`,night:`Night`,morning:`Morning`,party:`Party`,movie:`Movie`,away:`Away`,home:`Home`,security:`Security`,energy:`Energy`,custom:`Custom`}}},"es-ES":{scenes:{menu:{title:`Escenas`},headings:{list:`Escenas`,add:`Añadir escena`,edit:`Editar escena`,delete:`Eliminar escena`,discard:`Descartar cambios`,adjustFilters:`Ajustar filtros`,bulkRemove:`Eliminar escenas`,bulkEnable:`Activar escenas`,bulkDisable:`Desactivar escenas`},subHeadings:{list:`Gestiona las escenas de automatización de tu hogar inteligente`,adjustFilters:`Filtra escenas por varios criterios`},breadcrumbs:{scenes:`Escenas`},filters:{allSpaces:`Todos los espacios`,enabled:{title:`Estado`,values:{enabled:`Activada`,disabled:`Desactivada`,all:`Todas`}},category:{title:`Categoría`,placeholder:`Seleccionar categorías`},space:{title:`Espacio`,placeholder:`Todos los espacios`}},fields:{name:`Nombre`,category:`Categoría`,space:`Espacio`,enabled:`Activada`,actions:`Acciones`,unknownSpace:`Espacio desconocido`,wholeHome:`Toda la casa`,lastTriggered:`Última activación`,neverTriggered:`Nunca`,search:{placeholder:`Buscar escenas...`},config:{executionTimeoutMs:{title:`Tiempo límite de ejecución (ms)`,alertTitle:`Tiempo límite de ejecución`,hint:`Tiempo máximo permitido para la ejecución de una escena antes de considerarla fallida. Si se alcanza el tiempo límite, las acciones restantes pueden cancelarse dependiendo del manejo de errores.`,validation:{range:`El tiempo límite de ejecución debe estar entre 1000 y 300000 ms`}},maxConcurrentExecutions:{title:`Máximo de ejecuciones simultáneas`,alertTitle:`Máximo de ejecuciones simultáneas`,hint:`Limita cuántas ejecuciones de escenas pueden ejecutarse al mismo tiempo. Ayuda a prevenir sobrecargas cuando las escenas se activan repetidamente o en paralelo.`,validation:{range:`El máximo de ejecuciones simultáneas debe estar entre 1 y 100`}},continueOnActionFailure:{title:`Continuar si falla una acción`,alertTitle:`Continuar si falla una acción`,hint:`Cuando está activado, la escena continuará ejecutando las acciones restantes incluso si una acción falla. Cuando está desactivado, la escena se detiene inmediatamente en el primer fallo.`}}},texts:{loadingScenes:`Cargando escenas...`,noScenes:`No tienes ninguna escena configurada`,noFilteredScenes:`Ninguna escena coincide con los filtros`,confirmDiscard:`Tienes cambios sin guardar. ¿Estás seguro de que deseas descartarlos?`,confirmBulkRemove:`¿Estás seguro de que deseas eliminar {count} escena(s) seleccionada(s)?`,confirmBulkEnable:`¿Estás seguro de que deseas activar {count} escena(s) seleccionada(s)?`,confirmBulkDisable:`¿Estás seguro de que deseas desactivar {count} escena(s) seleccionada(s)?`,actionsCount:`Sin acciones | {count} acción | {count} acciones`,lastTriggered:`Última activación`,order:`#`},edit:{sections:{general:{title:`General`,hint:`<strong>Las escenas son preajustes manuales</strong> que aplican múltiples acciones de dispositivos a la vez. Nunca se ejecutan automáticamente y no tienen condiciones.`},actions:{title:`Acciones`,emptyTitle:`Aún no se han añadido acciones`,emptyDescription:`Añade una o más acciones de dispositivo que se ejecutarán cuando se active esta escena.`,helperText:`Puedes controlar luces, interruptores, dispositivos de climatización y más.`}}},form:{space:`Espacio`,selectSpace:`Toda la casa`,spaceGroups:{rooms:`Habitaciones`,zones:`Zonas`},name:`Nombre de la escena`,namePlaceholder:`Introduce el nombre de la escena`,nameRequired:`El nombre de la escena es obligatorio`,category:`Categoría`,categoryRequired:`La categoría es obligatoria`,description:`Descripción`,descriptionPlaceholder:`Descripción opcional para esta escena`,icon:`Icono`,iconPlaceholder:`Seleccionar un icono (opcional)`,actionsSection:`Acciones de la escena`,noActions:`No hay acciones definidas. Añade acciones para controlar dispositivos cuando se active esta escena.`,actionsRequired:`Se requiere al menos una acción`,actionNumber:`Acción {number}`,device:`Dispositivo`,selectDevice:`Seleccionar un dispositivo`,deviceRequired:`El dispositivo es obligatorio`,actionDeviceRequired:`Acción {number}: El dispositivo es obligatorio`,channel:`Canal`,selectChannel:`Seleccionar un canal`,actionChannelRequired:`Acción {number}: El canal es obligatorio`,property:`Propiedad`,selectProperty:`Seleccionar una propiedad`,propertyRequired:`La propiedad es obligatoria`,actionPropertyRequired:`Acción {number}: La propiedad es obligatoria`,value:`Valor`,valuePlaceholder:`Introduce un valor`,valueRequired:`El valor es obligatorio`,actionValueRequired:`Acción {number}: El valor es obligatorio`,addAction:`Añadir acción`,editAction:`Editar acción`},buttons:{add:{title:`Añadir escena`},delete:{title:`Eliminar`},cancel:{title:`Cancelar`},save:{title:`Guardar`},yes:{title:`Sí`},no:{title:`No`},close:{title:`Cerrar`},discard:{title:`Descartar`},backToList:{title:`Volver a la lista`},resetFilters:{title:`Restablecer filtros`}},messages:{config:{edited:`Configuración del módulo de escenas actualizada correctamente`,notEdited:`Error al actualizar la configuración del módulo de escenas`},triggered:`Escena "{name}" activada correctamente`,triggerFailed:`Error al activar la escena`,confirmDelete:`¿Estás seguro de que deseas eliminar la escena "{name}"?`,deleted:`Escena eliminada correctamente`,deleteFailed:`Error al eliminar la escena`,created:`Escena creada correctamente`,createFailed:`Error al crear la escena`,edited:`Escena "{scene}" actualizada correctamente`,editFailed:`Error al actualizar la escena "{scene}"`,notFound:`Escena no encontrada`,duplicateAction:`Ya existe una acción para esta propiedad en esta escena`,addFormPlaceholder:`El formulario para añadir escenas se implementará aquí`,editFormPlaceholder:`El formulario para editar escenas se implementará aquí`,requestError:`Ocurrió un error al procesar tu solicitud`,bulkRemoved:`{count} escena(s) eliminada(s) correctamente`,bulkRemoveFailed:`Error al eliminar {count} escena(s)`,bulkEnabled:`{count} escena(s) activada(s) correctamente`,bulkEnableFailed:`Error al activar {count} escena(s)`,bulkEnableCanceled:`Operación de activación cancelada`,bulkDisabled:`{count} escena(s) desactivada(s) correctamente`,bulkDisableFailed:`Error al desactivar {count} escena(s)`,bulkDisableCanceled:`Operación de desactivación cancelada`},categories:{generic:`Genérica`,lighting:`Iluminación`,climate:`Climatización`,media:`Multimedia`,work:`Trabajo`,relax:`Relajación`,night:`Noche`,morning:`Mañana`,party:`Fiesta`,movie:`Película`,away:`Ausente`,home:`En casa`,security:`Seguridad`,energy:`Energía`,custom:`Personalizada`}}},"pl-PL":{scenes:{menu:{title:`Sceny`},headings:{list:`Sceny`,add:`Dodaj scenę`,edit:`Edytuj scenę`,delete:`Usuń scenę`,discard:`Odrzuć zmiany`,adjustFilters:`Dostosuj filtry`,bulkRemove:`Usuń sceny`,bulkEnable:`Włącz sceny`,bulkDisable:`Wyłącz sceny`},subHeadings:{list:`Zarządzaj scenami automatyzacji inteligentnego domu`,adjustFilters:`Filtruj sceny według różnych kryteriów`},breadcrumbs:{scenes:`Sceny`},filters:{allSpaces:`Wszystkie przestrzenie`,enabled:{title:`Status`,values:{enabled:`Włączona`,disabled:`Wyłączona`,all:`Wszystkie`}},category:{title:`Kategoria`,placeholder:`Wybierz kategorie`},space:{title:`Przestrzeń`,placeholder:`Wszystkie przestrzenie`}},fields:{name:`Nazwa`,category:`Kategoria`,space:`Przestrzeń`,enabled:`Włączona`,actions:`Akcje`,unknownSpace:`Nieznana przestrzeń`,wholeHome:`Cały dom`,lastTriggered:`Ostatnio uruchomiona`,neverTriggered:`Nigdy`,search:{placeholder:`Szukaj scen...`},config:{executionTimeoutMs:{title:`Limit czasu wykonania (ms)`,alertTitle:`Limit czasu wykonania`,hint:`Maksymalny czas dozwolony na wykonanie sceny zanim zostanie uznana za nieudaną. Po osiągnięciu limitu pozostałe akcje mogą zostać anulowane w zależności od obsługi błędów.`,validation:{range:`Limit czasu wykonania musi wynosić od 1000 do 300000 ms`}},maxConcurrentExecutions:{title:`Maks. równoczesnych wykonań`,alertTitle:`Maks. równoczesnych wykonań`,hint:`Ogranicza liczbę wykonań scen, które mogą działać jednocześnie. Pomaga zapobiegać przeciążeniu, gdy sceny są uruchamiane wielokrotnie lub równolegle.`,validation:{range:`Maks. równoczesnych wykonań musi wynosić od 1 do 100`}},continueOnActionFailure:{title:`Kontynuuj przy błędzie akcji`,alertTitle:`Kontynuuj przy błędzie akcji`,hint:`Po włączeniu scena będzie kontynuować wykonywanie pozostałych akcji nawet jeśli jedna z nich się nie powiedzie. Po wyłączeniu scena zatrzyma się natychmiast przy pierwszym błędzie.`}}},texts:{loadingScenes:`Ładowanie scen...`,noScenes:`Nie masz skonfigurowanych żadnych scen`,noFilteredScenes:`Żadne sceny nie pasują do filtrów`,confirmDiscard:`Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?`,confirmBulkRemove:`Czy na pewno chcesz usunąć {count} wybranych scen?`,confirmBulkEnable:`Czy na pewno chcesz włączyć {count} wybranych scen?`,confirmBulkDisable:`Czy na pewno chcesz wyłączyć {count} wybranych scen?`,actionsCount:`Brak akcji | {count} akcja | {count} akcji`,lastTriggered:`Ostatnio uruchomiona`,order:`#`},edit:{sections:{general:{title:`Ogólne`,hint:`<strong>Sceny to ręczne presety</strong>, które stosują wiele akcji urządzeń jednocześnie. Nigdy nie uruchamiają się automatycznie i nie mają warunków.`},actions:{title:`Akcje`,emptyTitle:`Nie dodano jeszcze żadnych akcji`,emptyDescription:`Dodaj jedną lub więcej akcji urządzenia, które zostaną wykonane po aktywacji tej sceny.`,helperText:`Możesz sterować oświetleniem, przełącznikami, urządzeniami klimatycznymi i innymi.`}}},form:{space:`Przestrzeń`,selectSpace:`Cały dom`,spaceGroups:{rooms:`Pokoje`,zones:`Strefy`},name:`Nazwa sceny`,namePlaceholder:`Wprowadź nazwę sceny`,nameRequired:`Nazwa sceny jest wymagana`,category:`Kategoria`,categoryRequired:`Kategoria jest wymagana`,description:`Opis`,descriptionPlaceholder:`Opcjonalny opis tej sceny`,icon:`Ikona`,iconPlaceholder:`Wybierz ikonę (opcjonalnie)`,actionsSection:`Akcje sceny`,noActions:`Nie zdefiniowano akcji. Dodaj akcje, aby sterować urządzeniami po uruchomieniu tej sceny.`,actionsRequired:`Wymagana jest co najmniej jedna akcja`,actionNumber:`Akcja {number}`,device:`Urządzenie`,selectDevice:`Wybierz urządzenie`,deviceRequired:`Urządzenie jest wymagane`,actionDeviceRequired:`Akcja {number}: Urządzenie jest wymagane`,channel:`Kanał`,selectChannel:`Wybierz kanał`,actionChannelRequired:`Akcja {number}: Kanał jest wymagany`,property:`Właściwość`,selectProperty:`Wybierz właściwość`,propertyRequired:`Właściwość jest wymagana`,actionPropertyRequired:`Akcja {number}: Właściwość jest wymagana`,value:`Wartość`,valuePlaceholder:`Wprowadź wartość`,valueRequired:`Wartość jest wymagana`,actionValueRequired:`Akcja {number}: Wartość jest wymagana`,addAction:`Dodaj akcję`,editAction:`Edytuj akcję`},buttons:{add:{title:`Dodaj scenę`},delete:{title:`Usuń`},cancel:{title:`Anuluj`},save:{title:`Zapisz`},yes:{title:`Tak`},no:{title:`Nie`},close:{title:`Zamknij`},discard:{title:`Odrzuć`},backToList:{title:`Powrót do listy`},resetFilters:{title:`Resetuj filtry`}},messages:{config:{edited:`Konfiguracja modułu scen została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji modułu scen`},triggered:`Scena "{name}" została pomyślnie uruchomiona`,triggerFailed:`Nie udało się uruchomić sceny`,confirmDelete:`Czy na pewno chcesz usunąć scenę "{name}"?`,deleted:`Scena została pomyślnie usunięta`,deleteFailed:`Nie udało się usunąć sceny`,created:`Scena została pomyślnie utworzona`,createFailed:`Nie udało się utworzyć sceny`,edited:`Scena "{scene}" została pomyślnie zaktualizowana`,editFailed:`Nie udało się zaktualizować sceny "{scene}"`,notFound:`Scena nie znaleziona`,duplicateAction:`Akcja dla tej właściwości już istnieje w tej scenie`,addFormPlaceholder:`Formularz dodawania sceny zostanie zaimplementowany tutaj`,editFormPlaceholder:`Formularz edycji sceny zostanie zaimplementowany tutaj`,requestError:`Wystąpił błąd podczas przetwarzania żądania`,bulkRemoved:`Pomyślnie usunięto {count} scen`,bulkRemoveFailed:`Nie udało się usunąć {count} scen`,bulkEnabled:`Pomyślnie włączono {count} scen`,bulkEnableFailed:`Nie udało się włączyć {count} scen`,bulkEnableCanceled:`Operacja włączania została anulowana`,bulkDisabled:`Pomyślnie wyłączono {count} scen`,bulkDisableFailed:`Nie udało się wyłączyć {count} scen`,bulkDisableCanceled:`Operacja wyłączania została anulowana`},categories:{generic:`Ogólna`,lighting:`Oświetlenie`,climate:`Klimat`,media:`Głoska bezdźwięczna`,work:`Praca`,relax:`Relaks`,night:`Noc`,morning:`Poranek`,party:`Impreza`,movie:`Film`,away:`Poza domem`,home:`Dom`,security:`Bezpieczeństwo`,energy:`Energia`,custom:`Niestandardowa`}}},"sk-SK":{scenes:{menu:{title:`Scény`},headings:{list:`Scény`,add:`Pridať scénu`,edit:`Upraviť scénu`,delete:`Odstrániť scénu`,discard:`Zahodiť zmeny`,adjustFilters:`Upraviť filtre`,bulkRemove:`Odstrániť scény`,bulkEnable:`Povoliť scény`,bulkDisable:`Zakázať scény`},subHeadings:{list:`Spravujte automatizačné scény pre vašu inteligentnú domácnosť`,adjustFilters:`Filtrovať scény podľa rôznych kritérií`},breadcrumbs:{scenes:`Scény`},filters:{allSpaces:`Všetky priestory`,enabled:{title:`Stav`,values:{enabled:`Povolené`,disabled:`Zakázané`,all:`Všetky`}},category:{title:`Kategória`,placeholder:`Vyberte kategórie`},space:{title:`Priestor`,placeholder:`Všetky priestory`}},fields:{name:`Názov`,category:`Kategória`,space:`Priestor`,enabled:`Povolené`,actions:`Akcie`,unknownSpace:`Neznámy priestor`,wholeHome:`Celý dom`,lastTriggered:`Naposledy spustené`,neverTriggered:`Nikdy`,search:{placeholder:`Vyhľadať scény...`},config:{executionTimeoutMs:{title:`Časový limit vykonávania (ms)`,alertTitle:`Časový limit vykonávania`,hint:`Maximálny čas povolený na vykonanie scény pred tým, ako je považovaná za neúspešnú. Ak sa dosiahne časový limit, zostávajúce akcie môžu byť zrušené v závislosti od nastavenia spracovania chýb.`,validation:{range:`Časový limit vykonávania musí byť medzi 1000 a 300000 ms`}},maxConcurrentExecutions:{title:`Maximálny počet súbežných vykonaní`,alertTitle:`Maximálny počet súbežných vykonaní`,hint:`Obmedzuje počet vykonaní scén, ktoré môžu bežať súčasne. Pomáha predchádzať preťaženiu pri opakovanom alebo paralelnom spúšťaní scén.`,validation:{range:`Maximálny počet súbežných vykonaní musí byť medzi 1 a 100`}},continueOnActionFailure:{title:`Pokračovať pri zlyhaní akcie`,alertTitle:`Pokračovať pri zlyhaní akcie`,hint:`Keď je povolené, scéna bude pokračovať vo vykonávaní zostávajúcich akcií aj keď jedna akcia zlyhá. Keď je zakázané, scéna sa okamžite zastaví pri prvom zlyhaní.`}}},texts:{loadingScenes:`Načítavanie scén...`,noScenes:`Nemáte nakonfigurovanú žiadnu scénu`,noFilteredScenes:`Žiadne scény nezodpovedajú vašim filtrom`,confirmDiscard:`Máte neuložené zmeny. Naozaj ich chcete zahodiť?`,confirmBulkRemove:`Naozaj chcete odstrániť {count} vybraných scén?`,confirmBulkEnable:`Naozaj chcete povoliť {count} vybraných scén?`,confirmBulkDisable:`Naozaj chcete zakázať {count} vybraných scén?`,actionsCount:`Žiadne akcie | {count} akcia | {count} akcií`,lastTriggered:`Naposledy spustené`,order:`#`},edit:{sections:{general:{title:`Všeobecné`,hint:`<strong>Scény sú manuálne predvoľby</strong>, ktoré aplikujú viacero akcií zariadení naraz. Nikdy sa nespúšťajú automaticky a nemajú žiadne podmienky.`},actions:{title:`Akcie`,emptyTitle:`Zatiaľ neboli pridané žiadne akcie`,emptyDescription:`Pridajte jednu alebo viac akcií zariadení, ktoré sa vykonajú pri aktivácii tejto scény.`,helperText:`Môžete ovládať svetlá, prepínače, klimatizačné zariadenia a ďalšie.`}}},form:{space:`Priestor`,selectSpace:`Celý dom`,spaceGroups:{rooms:`Miestnosti`,zones:`Zóny`},name:`Názov scény`,namePlaceholder:`Zadajte názov scény`,nameRequired:`Názov scény je povinný`,category:`Kategória`,categoryRequired:`Kategória je povinná`,description:`Popis`,descriptionPlaceholder:`Voliteľný popis pre túto scénu`,icon:`Ikona`,iconPlaceholder:`Vyberte ikonu (voliteľné)`,actionsSection:`Akcie scény`,noActions:`Nie sú definované žiadne akcie. Pridajte akcie na ovládanie zariadení pri spustení tejto scény.`,actionsRequired:`Je vyžadovaná aspoň jedna akcia`,actionNumber:`Akcia {number}`,device:`Zariadenie`,selectDevice:`Vyberte zariadenie`,deviceRequired:`Zariadenie je povinné`,actionDeviceRequired:`Akcia {number}: Zariadenie je povinné`,channel:`Kanál`,selectChannel:`Vyberte kanál`,actionChannelRequired:`Akcia {number}: Kanál je povinný`,property:`Vlastnosť`,selectProperty:`Vyberte vlastnosť`,propertyRequired:`Vlastnosť je povinná`,actionPropertyRequired:`Akcia {number}: Vlastnosť je povinná`,value:`Hodnota`,valuePlaceholder:`Zadajte hodnotu`,valueRequired:`Hodnota je povinná`,actionValueRequired:`Akcia {number}: Hodnota je povinná`,addAction:`Pridať akciu`,editAction:`Upraviť akciu`},buttons:{add:{title:`Pridať scénu`},delete:{title:`Odstrániť`},cancel:{title:`Zrušiť`},save:{title:`Uložiť`},yes:{title:`Áno`},no:{title:`Nie`},close:{title:`Zavrieť`},discard:{title:`Zahodiť`},backToList:{title:`Späť na zoznam`},resetFilters:{title:`Resetovať filtre`}},messages:{config:{edited:`Konfigurácia modulu scén bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu modulu scén`},triggered:`Scéna "{name}" bola úspešne spustená`,triggerFailed:`Nepodarilo sa spustiť scénu`,confirmDelete:`Naozaj chcete odstrániť scénu "{name}"?`,deleted:`Scéna bola úspešne odstránená`,deleteFailed:`Nepodarilo sa odstrániť scénu`,created:`Scéna bola úspešne vytvorená`,createFailed:`Nepodarilo sa vytvoriť scénu`,edited:`Scéna "{scene}" bola úspešne aktualizovaná`,editFailed:`Nepodarilo sa aktualizovať scénu "{scene}"`,notFound:`Scéna nebola nájdená`,duplicateAction:`Akcia pre túto vlastnosť už v tejto scéne existuje`,addFormPlaceholder:`Formulár na pridanie scény bude implementovaný tu`,editFormPlaceholder:`Formulár na úpravu scény bude implementovaný tu`,requestError:`Pri spracovaní vašej požiadavky sa vyskytla chyba`,bulkRemoved:`Úspešne odstránených {count} scén`,bulkRemoveFailed:`Nepodarilo sa odstrániť {count} scén`,bulkEnabled:`Úspešne povolených {count} scén`,bulkEnableFailed:`Nepodarilo sa povoliť {count} scén`,bulkEnableCanceled:`Operácia povolenia bola zrušená`,bulkDisabled:`Úspešne zakázaných {count} scén`,bulkDisableFailed:`Nepodarilo sa zakázať {count} scén`,bulkDisableCanceled:`Operácia zakázania bola zrušená`},categories:{generic:`Všeobecné`,lighting:`Osvetlenie`,climate:`Klíma`,media:`Médiá`,work:`Práca`,relax:`Uvoľnite sa`,night:`Noc`,morning:`Ráno`,party:`Párty`,movie:`Film`,away:`Preč`,home:`Doma`,security:`Bezpečnosť`,energy:`Energia`,custom:`Vlastné`}}}},Ig=[{path:`scenes`,name:ec.SCENES,component:()=>hr(()=>import(`./view-scenes-DWbfoSPZ.js`),__vite__mapDeps([105,2,3,4,11,5,6,38,23,55,56,106,70,24,71,40,53,52,72,73,74,107,102,108,14,15,16,17,18,19,65,20,21,7,49,66,8,42,109,110,78,103,59,60,61,111,112,22,113,114,115,116])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:()=>$t.global.t(`scenes.menu.title`),icon:`mdi:play-box-multiple`,menu:5e3},children:[{path:`add`,name:ec.SCENES_ADD,component:()=>hr(()=>import(`./view-scene-add-LFcdVTaN.js`),__vite__mapDeps([117,2,3,4,5,6,55,56,106,70,24,71,40,53,52,72,73,74,107,102,111,112,18,15,19,20,21,7,66,22,23,113])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]}}},{path:`:id`,name:ec.SCENES_EDIT,component:()=>hr(()=>import(`./view-scene-edit-fX-u8fib.js`),__vite__mapDeps([118,2,3,4,5,6,55,56,106,70,24,71,40,53,52,72,73,74,107,102,111,114,18,15,19,20,21,7,66,22,23,115])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]}}}]}],Lg=Li.extend({executionTimeoutMs:q().int().min(1e3).max(3e5).default(3e4),maxConcurrentExecutions:q().int().min(1).max(100).default(10),continueOnActionFailure:J().default(!0)}),Rg=Bi.extend({type:Y(mc),executionTimeoutMs:q().int().min(1e3).max(3e5).default(3e4),maxConcurrentExecutions:q().int().min(1).max(100).default(10),continueOnActionFailure:J().default(!0)}),zg=qi.and(K({type:Y(mc),execution_timeout_ms:q().int().min(1e3).max(3e5).optional(),max_concurrent_executions:q().int().min(1).max(100).optional(),continue_on_action_failure:J().optional()}));zi.and(K({type:Y(mc),execution_timeout_ms:q().int().min(1e3).max(3e5),max_concurrent_executions:q().int().min(1).max(100),continue_on_action_failure:J()}));var Bg=X().uuid(),Vg=K({id:Bg,draft:J().default(!1),type:X().trim().nonempty(),scene:Bg,configuration:sn(X(),hn()).default({}),order:q().int().min(0).default(0),enabled:J().default(!0),createdAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().default(()=>new Date),updatedAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)}).catchall(hn());K({fetching:K({items:W(Bg).default([]),item:W(Bg)}),creating:W(Bg),updating:W(Bg),deleting:W(Bg)}),K({id:Bg,type:X().trim().nonempty(),data:Sn({}).catchall(hn())}),K({id:Bg,data:K({type:X().trim().nonempty(),scene:Bg,configuration:sn(X(),hn()).default({}),order:q().int().min(0).default(0),enabled:J().default(!0)}).catchall(hn())}),K({id:Bg.optional(),sceneId:Bg.optional()}),K({id:Bg,sceneId:Bg}),K({sceneId:Bg});var Hg=K({id:Bg.optional().default(()=>cn()),sceneId:Bg,draft:J().optional().default(!1),data:K({type:X().trim().nonempty(),configuration:sn(X(),hn()).default({}),order:q().int().min(0).optional().default(0),enabled:J().optional().default(!0)}).catchall(hn())}),Ug=K({id:Bg,sceneId:Bg,data:K({type:X().trim().nonempty(),configuration:sn(X(),hn()).optional(),order:q().int().min(0).optional(),enabled:J().optional()}).catchall(hn())});K({id:Bg,sceneId:Bg}),K({id:Bg,sceneId:Bg});var Wg=K({id:X().uuid().optional(),type:X().trim().nonempty(),configuration:sn(X(),hn()).optional(),order:q().int().min(0).optional(),enabled:J().optional()}).catchall(hn()),Gg=K({type:X().trim().nonempty(),configuration:sn(X(),hn()).optional(),order:q().int().min(0).optional(),enabled:J().optional()}).catchall(hn()),Kg=K({id:X().uuid(),type:X(),configuration:sn(X(),hn()).optional().default({}),order:q(),enabled:J(),scene:X().uuid(),created_at:X(),updated_at:X().nullable().optional()}).catchall(hn()),qg=e=>{let t=Kg.safeParse(e);if(!t.success)throw console.error(`Schema validation failed with:`,t.error),Error(`Failed to validate scene action response data`);let n=Un(e),r=Vg.safeParse({...n,draft:!1});if(!r.success)throw console.error(`Schema validation failed with:`,r.error),Error(`Failed to transform scene action response data`);return r.data},Jg=()=>({fetching:{items:[],item:[]},creating:[],updating:[],deleting:[]}),Yg=jn(`scenes_module-scenes_actions`,()=>{let e=Zn(),t=On(),n=j(Jg()),r=j([]),i=j({}),a=e=>r.value.includes(e),o=e=>n.value.fetching.item.includes(e),s=e=>n.value.fetching.items.includes(e),c=()=>Object.values(i.value),l=e=>Object.values(i.value??{}).filter(t=>t.scene===e).sort((e,t)=>e.order-t.order),u=e=>i.value[e]??null,d={},f={},p=e=>m({id:e.id,data:qg(e.data)}),m=e=>{if(e.id&&i.value&&e.id in i.value){let n=Vg.safeParse({...i.value[e.id],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new cc(`Failed to insert scene action.`);return i.value[n.data.id]=n.data}let n=Vg.safeParse({...e.data,id:e.id});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new cc(`Failed to insert scene action.`);return i.value=i.value??{},i.value[n.data.id]=n.data},h=e=>{if(i.value){if(e.sceneId!==void 0){let t=l(e.sceneId);for(let e of t)e.id in(i.value??{})&&delete(i.value??{})[e.id];return}else if(e.id!==void 0){delete i.value[e.id];return}throw new nc(`You have to provide at least scene or action id`)}},g=async t=>{let r=d[t.id];if(r)return r;let a=(async()=>{if(n.value.fetching.item.includes(t.id))throw new fc(`Already fetching scene action.`);n.value.fetching.item.push(t.id);try{let{data:n,error:r,response:a}=await e.client.GET(`/${je}/${tc}/scenes/{sceneId}/actions/{id}`,{params:{path:{sceneId:t.sceneId,id:t.id}}});if(n!==void 0){let e=qg(n.data);return i.value[e.id]=e,e}let o=`Failed to fetch scene action.`;throw r&&typeof r==`object`&&r&&`message`in r&&(o=String(r.message)),new fc(o,a.status)}finally{n.value.fetching.item=n.value.fetching.item.filter(e=>e!==t.id)}})();d[t.id]=a;try{return await a}finally{delete d[t.id]}};return{semaphore:n,firstLoad:r,data:i,firstLoadFinished:a,getting:o,fetching:s,findAll:c,findForScene:l,findById:u,onEvent:p,set:m,unset:h,get:g,fetch:async t=>{let a=f[t.sceneId];if(t.sceneId&&a)return a;let o=(async()=>{if(n.value.fetching.items.includes(t.sceneId))throw new fc(`Already fetching actions.`);n.value.fetching.items.push(t.sceneId),r.value=r.value.filter(e=>e!==t.sceneId),r.value=[...new Set(r.value)];try{let{data:n,error:a,response:o}=await e.client.GET(`/${je}/${tc}/scenes/{sceneId}/actions`,{params:{path:{sceneId:t.sceneId}}});if(n!==void 0){r.value.push(t.sceneId),r.value=[...new Set(r.value)];let e=Object.fromEntries(n.data.map(e=>{let t=qg(e);return[t.id,t]}));return i.value={...i.value,...e},l(t.sceneId)}let s=`Failed to fetch scene actions.`;throw a&&typeof a==`object`&&a&&`message`in a&&(s=String(a.message)),new fc(s,o.status)}finally{n.value.fetching.items=n.value.fetching.items.filter(e=>e!==t.sceneId)}})();f[t.sceneId]=o;try{return await o}finally{delete f[t.sceneId]}},add:async r=>{let a=Hg.safeParse(r);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new cc(`Failed to add action.`);let o=Vg.safeParse({...r.data,id:a.data.id,scene:a.data.sceneId,draft:a.data.draft,createdAt:new Date});if(!o.success)throw t.error(`Schema validation failed with:`,o.error),new cc(`Failed to add scene action.`);if(n.value.creating.push(o.data.id),i.value[o.data.id]=o.data,o.data.draft)return n.value.creating=n.value.creating.filter(e=>e!==o.data.id),o.data;try{let{data:t,error:n,response:a}=await e.client.POST(`/${je}/${tc}/scenes/{sceneId}/actions`,{params:{path:{sceneId:r.sceneId}},body:{data:$g(o.data)}});if(t!==void 0){let e=qg(t.data);return e.id!==o.data.id&&delete i.value[o.data.id],i.value[e.id]=e,e}delete i.value[o.data.id];let s=`Failed to create scene action.`;throw n&&typeof n==`object`&&n&&`message`in n&&(s=String(n.message)),new fc(s,a.status)}finally{n.value.creating=n.value.creating.filter(e=>e!==o.data.id)}},edit:async r=>{if(n.value.updating.includes(r.id))throw new nc(`Action is already being updated.`);if(!(r.id in i.value))throw new nc(`Failed to get scene action data to update.`);let a=Ug.safeParse(r);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new cc(`Failed to edit scene action.`);let o=Vg.safeParse({...i.value[r.id],...(0,Xd.omitBy)(r.data,Xd.isUndefined)});if(!o.success)throw t.error(`Schema validation failed with:`,o.error),new cc(`Failed to edit scene action.`);if(n.value.updating.push(r.id),i.value[o.data.id]=o.data,o.data.draft)return n.value.updating=n.value.updating.filter(e=>e!==o.data.id),o.data;try{let{data:t,error:n,response:a}=await e.client.PATCH(`/${je}/${tc}/scenes/{sceneId}/actions/{id}`,{params:{path:{sceneId:r.sceneId,id:r.id}},body:{data:e_(o.data)}});if(t!==void 0){let e=qg(t.data);return i.value[e.id]=e,e}await g({id:r.id,sceneId:r.sceneId});let s=`Failed to update scene action.`;throw n&&typeof n==`object`&&n&&`message`in n&&(s=String(n.message)),new fc(s,a.status)}finally{n.value.updating=n.value.updating.filter(e=>e!==r.id)}},save:async r=>{if(n.value.updating.includes(r.id))throw new nc(`Action is already being saved.`);if(!(r.id in i.value))throw new nc(`Failed to get scene action data to save.`);let a=Vg.safeParse(i.value[r.id]);if(!a.success)throw t.error(`Schema validation failed with:`,a.error),new cc(`Failed to save scene action.`);n.value.updating.push(r.id);try{let{data:t,error:n,response:o}=await e.client.POST(`/${je}/${tc}/scenes/{sceneId}/actions`,{params:{path:{sceneId:a.data.scene}},body:{data:$g(a.data)}});if(t!==void 0){let e=qg(t.data);return e.id!==r.id&&h({sceneId:a.data.scene,id:r.id}),i.value[e.id]=e,e}let s=`Failed to create scene action.`;throw n&&typeof n==`object`&&n&&`message`in n&&(s=String(n.message)),new fc(s,o.status)}finally{n.value.updating=n.value.updating.filter(e=>e!==r.id)}},remove:async t=>{if(n.value.deleting.includes(t.id))throw new nc(`Action is already being removed.`);if(!Object.keys(i.value).includes(t.id))return!0;n.value.deleting.push(t.id);let r=i.value[t.id];if(delete i.value[t.id],r?.draft)n.value.deleting=n.value.deleting.filter(e=>e!==t.id);else try{let{error:n,response:r}=await e.client.DELETE(`/${je}/${tc}/scenes/{sceneId}/actions/{id}`,{params:{path:{sceneId:t.sceneId,id:t.id}}});if(r.status===204)return!0;await g({id:t.id,sceneId:t.sceneId});let i=`Remove action failed.`;throw n&&typeof n==`object`&&n&&`message`in n&&(i=String(n.message)),new fc(i,r.status)}finally{n.value.deleting=n.value.deleting.filter(e=>e!==t.id)}return!0}}}),Xg=e=>Yg(e),Zg=new Set([`id`,`draft`,`scene`,`createdAt`,`updatedAt`]),Qg=e=>e.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`),$g=e=>{let t={};for(let[n,r]of Object.entries(e))!Zg.has(n)&&![`type`,`configuration`,`order`,`enabled`].includes(n)&&(t[Qg(n)]=r);let n=Wg.safeParse({id:e.id,type:e.type,configuration:e.configuration,order:e.order,enabled:e.enabled,...t});if(!n.success)throw new cc(`Failed to transform scene action create request.`);return n.data},e_=e=>{let t={};for(let[n,r]of Object.entries(e))!Zg.has(n)&&![`type`,`configuration`,`order`,`enabled`].includes(n)&&(t[Qg(n)]=r);let n=Gg.safeParse({type:e.type,configuration:e.configuration,order:e.order,enabled:e.enabled,...t});if(!n.success)throw new cc(`Failed to transform scene action update request.`);return n.data},t_=K({id:Bg,draft:J().default(!1),primarySpaceId:Bg.nullable().default(null),category:G(lt).default(lt.generic),name:X().trim().nonempty(),description:X().trim().nullable().default(null),icon:X().trim().nullable().default(null),order:q().int().min(0).default(0),enabled:J().default(!0),triggerable:J().default(!0),editable:J().default(!0),lastTriggeredAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).nullable().default(null),createdAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)});K({fetching:K({items:J().default(!1),item:W(Bg)}),creating:W(Bg),updating:W(Bg),deleting:W(Bg),triggering:W(Bg)}),K({id:Bg,data:Sn({})}),K({id:Bg,data:K({primarySpaceId:Bg.nullable(),category:G(lt).default(lt.generic),name:X().trim().nonempty(),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),icon:X().trim().nullable().optional(),order:q().int().min(0).optional(),enabled:J(),triggerable:J(),editable:J(),lastTriggeredAt:sr().nullable().optional()}).catchall(hn())}),K({id:Bg}),K({id:Bg});var n_=K({id:Bg.optional().default(()=>cn()),draft:J().optional().default(!1),data:K({primarySpaceId:Bg.nullable().optional(),category:G(lt).default(lt.generic),name:X().trim().nonempty(),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),icon:X().trim().nullable().optional(),order:q().int().min(0).optional(),enabled:J().optional()}).catchall(hn())}),r_=K({id:Bg,data:K({primarySpaceId:Bg.nullable().optional(),name:X().trim().optional(),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),icon:X().trim().nullable().optional(),order:q().int().min(0).optional(),enabled:J().optional()}).catchall(hn())});K({id:Bg}),K({ids:W(Bg).nonempty()}),K({ids:W(Bg).nonempty(),enabled:J()});var i_=K({succeeded:W(X()),failed:W(K({id:X(),reason:X()}))});K({id:Bg}),K({id:Bg,source:X().optional(),context:sn(X(),hn()).optional()});var a_=K({id:X().uuid().optional(),primary_space_id:X().uuid().nullable().optional(),category:G(lt).optional(),name:X().trim().nonempty(),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),icon:X().trim().nullable().optional(),order:q().int().min(0).optional(),enabled:J().optional(),triggerable:J().optional()}),o_=K({primary_space_id:X().uuid().nullable().optional(),category:G(lt).optional(),name:X().trim().nonempty().optional(),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),icon:X().trim().nullable().optional(),order:q().int().min(0).optional(),enabled:J().optional(),triggerable:J().optional()});K({id:X().uuid(),primary_space_id:X().uuid().nullable().optional(),category:G(lt),name:X().trim().nonempty(),description:X().trim().nullable().optional(),icon:X().trim().nullable().optional(),order:q().int().min(0),enabled:J(),triggerable:J(),editable:J(),last_triggered_at:X().nullable().optional(),created_at:X(),updated_at:X().nullable().optional(),actions:W(Kg)}),K({source:X().optional(),context:sn(X(),hn()).optional()}),K({scene_id:X().uuid(),status:G(Qt),triggered_at:X(),completed_at:X().nullable().optional(),triggered_by:X().nullable().optional(),total_actions:q(),successful_actions:q(),failed_actions:q(),action_results:W(K({action_id:X().uuid(),success:J(),error:X().nullable().optional(),execution_time_ms:q()})),error:X().nullable().optional()});var s_=(e,t)=>{let n=Un(e),r=t.safeParse(n);if(!r.success)throw cr.error(`Schema validation failed with:`,r.error),new cc(`Failed to validate received scene data.`);return r.data},c_=(e,t)=>{let n=t.safeParse(ar(e));if(!n.success)throw cr.error(`Schema validation failed with:`,n.error),new cc(`Failed to validate create scene request.`);return n.data},l_=(e,t)=>{let n=t.safeParse(ar(e));if(!n.success)throw cr.error(`Schema validation failed with:`,n.error),new cc(`Failed to validate update scene request.`);return n.data},u_=()=>({fetching:{items:!1,item:[]},creating:[],updating:[],deleting:[],triggering:[]}),d_=jn(`scenes_module-scenes`,()=>{let e=Zn(),t=Yg(),n=On(),{sendCommand:r}=An(),i=j(u_()),a=j(!1),o=j(new Map),s=()=>a.value,c=e=>i.value.fetching.item.includes(e),l=()=>i.value.fetching.items,u=()=>Array.from(o.value.values()),d=e=>o.value.get(e)??null,f=e=>Array.from(o.value.values()).filter(t=>t.primarySpaceId===e),p={},m={},h=e=>g({id:e.id,data:s_(e.data,t_)}),g=e=>{let t=o.value.get(e.id);if(t){let r=t_.safeParse({...t,...e.data});if(!r.success)throw n.error(`Schema validation failed with:`,r.error),new cc(`Failed to insert scene.`);return o.value.set(r.data.id,r.data),r.data}let r=t_.safeParse({...e.data,id:e.id});if(!r.success)throw n.error(`Schema validation failed with:`,r.error),new cc(`Failed to insert scene.`);return o.value.set(r.data.id,r.data),r.data},_=e=>{o.value.delete(e.id)},v=async r=>{let a=p[r.id];if(a)return a;let s=(async()=>{if(i.value.fetching.item.includes(r.id))throw new fc(`Already fetching scene.`);i.value.fetching.item.push(r.id);let a=o.value.get(r.id);try{let{data:i}=await e.client.GET(`/${je}/${tc}/scenes/{id}`,{params:{path:{id:r.id}}});if(i===void 0)throw new fc(`Received unexpected response.`);let a=i.data,o=s_(a,t_),s=g({id:o.id,data:o});if(a.actions&&Array.isArray(a.actions))for(let e of a.actions)try{let n=qg(e);t.set({id:n.id,data:n})}catch(e){n.error(`Failed to transform scene action:`,e)}return s}catch(e){if(a)return a;throw new fc(`Failed to get scene.`,null,e)}finally{i.value.fetching.item=i.value.fetching.item.filter(e=>e!==r.id)}})();p[r.id]=s;try{return await s}finally{delete p[r.id]}},y=async()=>{let r=m.all;if(r)return r;let s=(async()=>{if(i.value.fetching.items)throw new fc(`Already fetching scenes.`);i.value.fetching.items=!0;try{let{data:r}=await e.client.GET(`/${je}/${tc}/scenes`);if(r===void 0)throw new fc(`Received unexpected response.`);let i=[],s=new Set;for(let e of r.data){let r=s_(e,t_);if(g({id:r.id,data:r}),s.add(r.id),i.push(r),e.actions&&Array.isArray(e.actions))for(let r of e.actions)try{let e=qg(r);t.set({id:e.id,data:e})}catch(e){n.error(`Failed to transform scene action:`,e)}}for(let e of[...o.value.keys()])s.has(e)||o.value.delete(e);return a.value=!0,i}catch(e){throw new fc(`Failed to fetch scenes.`,null,e)}finally{i.value.fetching.items=!1}})();m.all=s;try{return await s}finally{delete m.all}};return{isLoaded:()=>s()||u().length>0,refresh:()=>y(),data:o,semaphore:i,firstLoad:a,firstLoadFinished:s,getting:c,fetching:l,findAll:u,findById:d,findBySpace:f,onEvent:h,set:g,unset:_,get:v,fetch:y,add:async t=>{let r=n_.safeParse(t);if(!r.success)throw n.error(`Schema validation failed with:`,r.error),new cc(`Failed to add scene.`);let{id:a,draft:o,data:s}=r.data,c=g({id:a,data:{...s,id:a,draft:o,primarySpaceId:s.primarySpaceId??null,enabled:s.enabled??!0,triggerable:!0,editable:!0,lastTriggeredAt:null,createdAt:new Date,updatedAt:null}});if(o)return c;i.value.creating.push(a);try{let t=c_(s,a_),{data:n}=await e.client.POST(`/${je}/${tc}/scenes`,{body:{data:t}});if(n===void 0)throw new fc(`Received unexpected response.`);let r=s_(n.data,t_);return r.id!==a&&_({id:a}),c=g({id:r.id,data:r}),c}catch(e){throw _({id:a}),new fc(`Failed to create scene.`,null,e)}finally{i.value.creating=i.value.creating.filter(e=>e!==a)}},edit:async t=>{let r=r_.safeParse(t);if(!r.success)throw n.error(`Schema validation failed with:`,r.error),new cc(`Failed to edit scene.`);let{id:a,data:s}=r.data,c=o.value.get(a);if(!c)throw new fc(`Scene not found.`);let l=g({id:a,data:{...c,...s}});if(c.draft)return l;i.value.updating.push(a);try{let t=l_(s,o_),{data:n}=await e.client.PATCH(`/${je}/${tc}/scenes/{id}`,{params:{path:{id:a}},body:{data:t}});if(n===void 0)throw new fc(`Received unexpected response.`);let r=s_(n.data,t_);return l=g({id:r.id,data:r}),l}catch(e){throw g({id:a,data:c}),new fc(`Failed to update scene.`,null,e)}finally{i.value.updating=i.value.updating.filter(e=>e!==a)}},save:async t=>{let n=o.value.get(t.id);if(!n)throw new fc(`Scene not found.`);if(!n.draft)throw new fc(`Scene is not a draft.`);i.value.creating.push(t.id);try{let r=c_(n,a_),{data:i}=await e.client.POST(`/${je}/${tc}/scenes`,{body:{data:r}});if(i===void 0)throw new fc(`Received unexpected response.`);let a=s_(i.data,t_);return a.id!==t.id&&_({id:t.id}),g({id:a.id,data:a})}catch(e){throw new fc(`Failed to save scene.`,null,e)}finally{i.value.creating=i.value.creating.filter(e=>e!==t.id)}},remove:async t=>{let n=o.value.get(t.id);if(n){if(n.draft){_({id:t.id});return}i.value.deleting.push(t.id);try{let{error:n}=await e.client.DELETE(`/${je}/${tc}/scenes/{id}`,{params:{path:{id:t.id}}});if(n!==void 0)throw new fc(`Received unexpected response.`);_({id:t.id})}catch(e){throw new fc(`Failed to remove scene.`,null,e)}finally{i.value.deleting=i.value.deleting.filter(e=>e!==t.id)}}},bulkRemove:async t=>{let n=[],r=[];for(let e of t.ids){let t=o.value.get(e);t!==void 0&&(t.draft?n:r).push(e)}for(let e of n)_({id:e});if(r.length===0)return{succeeded:n,failed:[]};i.value.deleting.push(...r);try{let{data:t,error:i}=await e.client.POST(`/${je}/${tc}/scenes/bulk-remove`,{body:{data:{ids:r}}});if(i!==void 0||t===void 0)throw new fc(`Received unexpected response.`);let a=i_.parse(t.data);for(let e of a.succeeded)_({id:e});return{succeeded:[...n,...a.succeeded],failed:a.failed}}catch(e){throw new fc(`Failed to remove scenes.`,null,e)}finally{i.value.deleting=i.value.deleting.filter(e=>!r.includes(e))}},bulkSetEnabled:async t=>{let n=t.ids.filter(e=>{let t=o.value.get(e);return t!==void 0&&!t.draft});if(n.length===0)return{succeeded:[],failed:[]};i.value.updating.push(...n);try{let{data:r,error:i}=await e.client.POST(`/${je}/${tc}/scenes/bulk-update`,{body:{data:{ids:n,enabled:t.enabled}}});if(i!==void 0||r===void 0)throw new fc(`Received unexpected response.`);let a=i_.parse(r.data);for(let e of a.succeeded){let n=o.value.get(e);n!==void 0&&o.value.set(e,{...n,enabled:t.enabled})}return a}catch(e){throw new fc(`Failed to update scenes.`,null,e)}finally{i.value.updating=i.value.updating.filter(e=>!n.includes(e))}},trigger:async e=>{let n=o.value.get(e.id);if(!n)throw new fc(`Scene not found.`);if(!n.triggerable)throw new fc(`Scene is not triggerable.`);i.value.triggering.push(e.id);try{let i=await r(lc.TRIGGER_SCENE,{sceneId:e.id},uc.TRIGGER_SCENE);if(i!==!0)throw new fc(typeof i==`string`?i:`Failed to trigger scene.`);g({id:e.id,data:{...n,lastTriggeredAt:new Date}});let a=t.findForScene(e.id);return{scene_id:e.id,status:Qt.completed,triggered_at:new Date().toISOString(),completed_at:new Date().toISOString(),triggered_by:e.source||`websocket`,total_actions:a.length,successful_actions:a.length,failed_actions:0,action_results:[],error:null}}catch(e){throw new fc(`Failed to trigger scene.`,null,e)}finally{i.value.triggering=i.value.triggering.filter(t=>t!==e.id)}}}}),f_=e=>d_(e),p_=Symbol(`FB-Module-Scenes`),m_={install:(e,t)=>{let n=pn(e),r=ut(e),i=ea(e),a=Hi(e);for(let[e,n]of Object.entries(Fg)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),n);t.i18n.global.setLocaleMessage(e,r)}let o=f_(t.store),s=Xg(t.store);e.provide(ic,o),n.addStore(ic,o),e.provide(rc,s),n.addStore(rc,s),i.addModule(p_,{type:mc,name:`Scenes`,description:`Manage automation scenes for your smart home.`,elements:[{type:Oa,components:{moduleConfigEditForm:$s},schemas:{moduleConfigSchema:Rg,moduleConfigEditFormSchema:Lg,moduleConfigUpdateReqSchema:zg},modules:[ka]}],modules:[ka],isCore:!0}),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&Ig.forEach(e=>{t.router.addRoute(Te.ROOT,e)}),a.register(p_,()=>Ii([o])),r.on(`event`,e=>{if(e?.event?.startsWith(`ScenesModule.`)&&!(e.payload===null||typeof e.payload!=`object`||!(`id`in e.payload)||typeof e.payload.id!=`string`))switch(e.event){case oc.SCENE_CREATED:case oc.SCENE_UPDATED:try{o.onEvent({id:e.payload.id,data:e.payload})}catch(t){console.warn(`Failed to process ${e.event} event:`,t)}break;case oc.SCENE_TRIGGERED:{let t=o.findById(e.payload.id);t&&o.set({id:e.payload.id,data:{...t,lastTriggeredAt:new Date}})}break;case oc.SCENE_DELETED:o.unset({id:e.payload.id});break;default:break}})}},h_=`security-module`,g_=Symbol(`FB-Module-Security`),__={install:(e,t)=>{ea(e).addModule(g_,{type:h_,name:`Security`,description:`Security monitoring with armed state, alarm state, and active alerts management`,elements:[],isCore:!0})}},v_={"cs-CZ":{menu:{title:`Přehled`},meta:{stats:{title:`Přehled aplikace`}},breadcrumbs:{stats:`přehled`},headings:{stats:`Přehled aplikace`,systemInformation:`Systémové informace`,applicationOverview:`Smart Panel`,quickLinks:`Rychlé odkazy`,cpu:`CPU`,memory:`Paměť`,uptime:`Doba běhu`,logs:`Logy`,dashboard:`Stránky Smart Panelu`,devices:`Připojená zařízení`,devicesCommunication:`Aktualizace dnes`,spaces:`Prostory Smart Panelu`},subHeadings:{stats:`Systémové statistiky Smart panelu`},fields:{systemInformation:{timezone:{title:`Časové pásmo`},operatingSystem:{title:`OS`},hostname:{title:`Název hostitele`},ipv4:{title:`IPv4`},ipv6:{title:`IPv6`},configPath:{title:`Cesta ke konfiguraci`,tooltip:`Cesta ke konfiguračnímu souboru:`}},applicationOverview:{version:{title:`Verze`},apip95:{title:`API p95 (5m)`,tooltip:`95. percentil doby odezvy API (posledních 5 minut). Ukazuje, jak rychle je zpracováno 95 % API požadavků.`},webSocket:{title:`WebSocket`,tooltip:`Dostupnost 5m: {wsAvailability5m} (aktualizováno {last})`,state:{connected:`Připojeno`,disconnected:`Odpojeno`}}},cpu:{temperature:{title:`Teplota {temperature} {unit}`}},memory:{total:{title:`z {total} {unit}`}},uptime:{process:{title:`Proces {uptime}`}},spaces:{rooms:`{count} místností`,zones:`{count} zón`}},texts:{updated:`Aktualizováno {time}`,noLogs:`Nebyly zaznamenány žádné aplikační logy.`,noFilteredLogs:`Nebyly nalezeny žádné aplikační logy odpovídající aktivním kritériím filtru`},buttons:{copy:{title:`Kopírovat`},spaces:{title:`Prostory`},pages:{title:`Stránky`},devices:{title:`Zařízení`},config:{title:`Konfigurace`},docs:{title:`Dokumentace`},resetFilters:{title:`Resetovat filtry`}}},"de-DE":{menu:{title:`Übersicht`},meta:{stats:{title:`Anwendungsübersicht`}},breadcrumbs:{stats:`Übersicht`},headings:{stats:`Anwendungsübersicht`,systemInformation:`Systeminformationen`,applicationOverview:`Smart Panel`,quickLinks:`Schnellzugriff`,cpu:`CPU`,memory:`Speicher`,uptime:`Betriebszeit`,logs:`Protokolle`,dashboard:`Smart Panel Seiten`,devices:`Verbundene Geräte`,devicesCommunication:`Updates heute`,spaces:`Smart Panel Räume`},subHeadings:{stats:`Smart Panel Systemstatistiken`},fields:{systemInformation:{timezone:{title:`Zeitzone`},operatingSystem:{title:`Betriebssystem`},hostname:{title:`Hostname`},ipv4:{title:`IPv4`},ipv6:{title:`IPv6`},configPath:{title:`Konfigurationspfad`,tooltip:`Konfigurationsdateipfad:`}},applicationOverview:{version:{title:`Version`},apip95:{title:`API p95 (5m)`,tooltip:`95. Perzentil der API-Antwortzeit (letzte 5 Minuten). Zeigt, wie schnell 95 % der API-Anfragen bearbeitet werden.`},webSocket:{title:`WebSocket`,tooltip:`Verfügb. 5m: {wsAvailability5m} (aktualisiert {last})`,state:{connected:`Verbunden`,disconnected:`Getrennt`}}},cpu:{temperature:{title:`Temp {temperature} {unit}`}},memory:{total:{title:`von {total} {unit}`}},uptime:{process:{title:`Prozess {uptime}`}},spaces:{rooms:`{count} Räume`,zones:`{count} Zonen`}},texts:{updated:`Aktualisiert {time}`,noLogs:`Es wurden keine Anwendungsprotokolle aufgezeichnet.`,noFilteredLogs:`Keine Anwendungsprotokolle gefunden, die den aktiven Filterkriterien entsprechen`},buttons:{copy:{title:`Kopieren`},spaces:{title:`Räume`},pages:{title:`Seiten`},devices:{title:`Geräte`},config:{title:`Konfiguration`},docs:{title:`Doku`},resetFilters:{title:`Filter zurücksetzen`}}},"en-US":{menu:{title:`Overview`},meta:{stats:{title:`Application overview`}},breadcrumbs:{stats:`overview`},headings:{stats:`Application overview`,systemInformation:`System Information`,applicationOverview:`Smart Panel`,quickLinks:`Quick Links`,cpu:`CPU`,memory:`Memory`,uptime:`Uptime`,logs:`Logs`,dashboard:`Smart Panel Pages`,devices:`Connected devices`,devicesCommunication:`Updates today`,spaces:`Smart Panel Spaces`},subHeadings:{stats:`Smart panel system statistics`},fields:{systemInformation:{timezone:{title:`Timezone`},operatingSystem:{title:`OS`},hostname:{title:`Hostname`},ipv4:{title:`IPv4`},ipv6:{title:`IPv6`},configPath:{title:`Config path`,tooltip:`Config file path:`}},applicationOverview:{version:{title:`Version`},apip95:{title:`API p95 (5m)`,tooltip:`95th percentile API response time (last 5 minutes). Shows how fast 95% of API requests are.`},webSocket:{title:`WebSocket`,tooltip:`Avail 5m: {wsAvailability5m} (updated {last})`,state:{connected:`Connected`,disconnected:`Disconnected`}}},cpu:{temperature:{title:`Temp {temperature} {unit}`}},memory:{total:{title:`of {total} {unit}`}},uptime:{process:{title:`Process {uptime}`}},spaces:{rooms:`{count} rooms`,zones:`{count} zones`}},texts:{updated:`Updated {time}`,noLogs:`No any application logs were recorded.`,noFilteredLogs:`No any application logs found matching the active filter criteria`},buttons:{copy:{title:`Copy`},spaces:{title:`Spaces`},pages:{title:`Pages`},devices:{title:`Devices`},config:{title:`Config`},docs:{title:`Docs`},resetFilters:{title:`Reset filters`}}},"es-ES":{menu:{title:`Resumen`},meta:{stats:{title:`Resumen de la aplicación`}},breadcrumbs:{stats:`resumen`},headings:{stats:`Resumen de la aplicación`,systemInformation:`Información del sistema`,applicationOverview:`Panel inteligente`,quickLinks:`Accesos rápidos`,cpu:`UPC`,memory:`Memoria`,uptime:`Tiempo activo`,logs:`Registros`,dashboard:`Páginas del Smart Panel`,devices:`Dispositivos conectados`,devicesCommunication:`Actualizaciones hoy`,spaces:`Espacios del Smart Panel`},subHeadings:{stats:`Estadísticas del sistema del panel inteligente`},fields:{systemInformation:{timezone:{title:`Zona horaria`},operatingSystem:{title:`SO`},hostname:{title:`Nombre de host`},ipv4:{title:`IPv4`},ipv6:{title:`IPv6`},configPath:{title:`Ruta de configuración`,tooltip:`Ruta del archivo de configuración:`}},applicationOverview:{version:{title:`Versión`},apip95:{title:`API p95 (5m)`,tooltip:`Tiempo de respuesta API en el percentil 95 (últimos 5 minutos). Muestra la velocidad del 95% de las solicitudes API.`},webSocket:{title:`WebSocket`,tooltip:`Disp. 5m: {wsAvailability5m} (actualizado {last})`,state:{connected:`Conectado`,disconnected:`Desconectado`}}},cpu:{temperature:{title:`Temp {temperature} {unit}`}},memory:{total:{title:`de {total} {unit}`}},uptime:{process:{title:`Proceso {uptime}`}},spaces:{rooms:`{count} habitaciones`,zones:`{count} zonas`}},texts:{updated:`Actualizado {time}`,noLogs:`No se han registrado registros de la aplicación.`,noFilteredLogs:`No se encontraron registros de la aplicación que coincidan con los criterios de filtro activos`},buttons:{copy:{title:`Copiar`},spaces:{title:`Espacios`},pages:{title:`Páginas`},devices:{title:`Dispositivos`},config:{title:`Configuración`},docs:{title:`Documentos`},resetFilters:{title:`Restablecer filtros`}}},"pl-PL":{menu:{title:`Przegląd`},meta:{stats:{title:`Przegląd aplikacji`}},breadcrumbs:{stats:`przegląd`},headings:{stats:`Przegląd aplikacji`,systemInformation:`Informacje o systemie`,applicationOverview:`Inteligentny panel`,quickLinks:`Szybkie łącza`,cpu:`Procesor`,memory:`Pamięć`,uptime:`Czas pracy`,logs:`Logi`,dashboard:`Strony Smart Panel`,devices:`Podłączone urządzenia`,devicesCommunication:`Aktualizacje dziś`,spaces:`Przestrzenie Smart Panel`},subHeadings:{stats:`Statystyki systemu smart panelu`},fields:{systemInformation:{timezone:{title:`Strefa czasowa`},operatingSystem:{title:`System operacyjny`},hostname:{title:`Nazwa hosta`},ipv4:{title:`IPv4`},ipv6:{title:`IPv6`},configPath:{title:`Ścieżka konfiguracji`,tooltip:`Ścieżka pliku konfiguracji:`}},applicationOverview:{version:{title:`Wersja`},apip95:{title:`API p95 (5m)`,tooltip:`95. percentyl czasu odpowiedzi API (ostatnie 5 minut). Pokazuje, jak szybko obsługiwanych jest 95% żądań API.`},webSocket:{title:`Gniazdo sieciowe`,tooltip:`Dostępność 5m: {wsAvailability5m} (zaktualizowano {last})`,state:{connected:`Połączony`,disconnected:`Rozłączony`}}},cpu:{temperature:{title:`Temp. {temperature} {unit}`}},memory:{total:{title:`z {total} {unit}`}},uptime:{process:{title:`Proces {uptime}`}},spaces:{rooms:`{count} pokoi`,zones:`{count} stref`}},texts:{updated:`Zaktualizowano {time}`,noLogs:`Nie zarejestrowano żadnych logów aplikacji.`,noFilteredLogs:`Nie znaleziono logów aplikacji pasujących do aktywnych kryteriów filtra`},buttons:{copy:{title:`Kopiuj`},spaces:{title:`Przestrzenie`},pages:{title:`Strony`},devices:{title:`Urządzenia`},config:{title:`Konfiguracja`},docs:{title:`Dokumentacja`},resetFilters:{title:`Resetuj filtry`}}},"sk-SK":{menu:{title:`Prehľad`},meta:{stats:{title:`Prehľad aplikácie`}},breadcrumbs:{stats:`prehľad`},headings:{stats:`Prehľad aplikácie`,systemInformation:`Systémové informácie`,applicationOverview:`Smart Panel`,quickLinks:`Rýchle odkazy`,cpu:`CPU`,memory:`Pamäť`,uptime:`Doba behu`,logs:`Logy`,dashboard:`Stránky Smart Panelu`,devices:`Pripojené zariadenia`,devicesCommunication:`Aktualizácie dnes`,spaces:`Priestory Smart Panelu`},subHeadings:{stats:`Štatistiky systému smart panelu`},fields:{systemInformation:{timezone:{title:`Časové pásmo`},operatingSystem:{title:`OS`},hostname:{title:`Názov hostiteľa`},ipv4:{title:`IPv4`},ipv6:{title:`IPv6`},configPath:{title:`Cesta ku konfigurácii`,tooltip:`Cesta ku konfiguračnému súboru:`}},applicationOverview:{version:{title:`Verzia`},apip95:{title:`API p95 (5 m)`,tooltip:`95. percentil odozvy API (posledných 5 minút). Zobrazuje, ako rýchlo je obslúžených 95% API požiadaviek.`},webSocket:{title:`WebSocket`,tooltip:`Dostupnosť 5m: {wsAvailability5m} (aktualizované {last})`,state:{connected:`Pripojený`,disconnected:`Odpojený`}}},cpu:{temperature:{title:`Teplota {temperature} {unit}`}},memory:{total:{title:`z {total} {unit}`}},uptime:{process:{title:`Proces {uptime}`}},spaces:{rooms:`{count} miestností`,zones:`{count} zón`}},texts:{updated:`Aktualizované {time}`,noLogs:`Neboli zaznamenané žiadne aplikačné logy.`,noFilteredLogs:`Neboli nájdené žiadne aplikačné logy zodpovedajúce aktívnym filtrom`},buttons:{copy:{title:`Kopírovať`},spaces:{title:`Priestory`},pages:{title:`Stránky`},devices:{title:`Zariadenia`},config:{title:`Konfigurácia`},docs:{title:`Dokumentácia`},resetFilters:{title:`Resetovať filtre`}}}},y_=[{path:`stats`,name:gc.STATS,component:()=>hr(()=>import(`./view-stats-sqy4OQw5.js`),__vite__mapDeps([119,2,3,4,11,5,6,7,69,67,68,14,15,16,17,18,19,20,21,66,22,23,8,32,33,24,70,71,40,53,52,72,73,74,75,9,59,76,25,56,77,78,79,80,61,60,120,121,122,123,124,125,110,126,127,128,129,65,42,107,130,131,49,132,133,55,106,102,134,135,136,137,138,139,140,141,142,143,144,145,146,147,38,51,109,103,148,149,150,151,152,153,154])),props:!0,meta:{guards:[`authenticated`],title:()=>$t.global.t(`statsModule.menu.title`),icon:`mdi:monitor-dashboard`,menu:15e3}}],b_=K({"api-module":K({reqPerMin:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),errorRate5m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),p95Ms5m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"websocket-module":K({clientsNow:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),availability5m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"system-module":K({cpuLoad1m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),memUsedPct:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),diskUsedPct:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),systemUptimeSec:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),processUptimeSec:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),temperatureCpu:K({value:q().nullable(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),temperatureGpu:K({value:q().nullable(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"dashboard-module":K({registeredPages:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),registeredTiles:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),registeredDataSources:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"devices-module":K({registeredDevices:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),registeredChannels:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),updatesPerMin:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),updatesToday:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),onlineNow:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional()});K({getting:J()}),K({data:Sn({})}),K({data:K({"api-module":K({reqPerMin:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),errorRate5m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),p95Ms5m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"websocket-module":K({clientsNow:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),availability5m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"system-module":K({cpuLoad1m:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),memUsedPct:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),diskUsedPct:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),systemUptimeSec:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),processUptimeSec:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),temperatureCpu:K({value:q().nullable(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),temperatureGpu:K({value:q().nullable(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"dashboard-module":K({registeredPages:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),registeredTiles:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),registeredDataSources:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional(),"devices-module":K({registeredDevices:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),registeredChannels:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),updatesPerMin:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),updatesToday:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))}),onlineNow:K({value:q(),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e))})}).optional()})});var x_=K({value:q().nullable(),last_updated:X().datetime({offset:!0})}),S_=sn(X(),x_);K({"websocket-module":S_.optional(),"system-module":S_.optional(),"api-module":S_.optional(),"dashboard-module":S_.optional(),"devices-module":S_.optional()}).catchall(S_);var C_=e=>typeof e==`object`&&!!e&&`error`in e&&e.error===!0,w_=e=>{let t={};for(let[n,r]of Object.entries(e))C_(r)||(t[n]=r);return t},T_=e=>{let t=w_(Un(e)),n=b_.safeParse(t);if(!n.success)throw cr.error(`Schema validation failed with:`,n.error),new Tc(`Failed to validate received stats data.`);return n.data},E_={getting:!1},D_=jn(`stats_module-stats`,()=>{let e=Zn(),t=On(),n=j(E_),r=j(!1),i=j(null),a=()=>r.value,o=()=>n.value.getting,s=null,c=e=>l({data:T_(e.data)}),l=e=>{let n=b_.safeParse(e.data);if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new Tc(`Failed to insert stats.`);return i.value=i.value??null,i.value=n.data},u=async()=>{if(s)return s;let t=(async()=>{if(n.value.getting)throw new vc(`Already getting stats.`);n.value.getting=!0;try{let{data:t,error:n,response:r}=await e.client.GET(`/${je}/${_c}/stats`);if(t!==void 0)return i.value=T_(t.data),i.value;let a=`Failed to fetch stats.`;throw n&&(a=Kn(n,a)),new vc(a,r.status)}finally{n.value.getting=!1}})();s=t;try{return await t}finally{s=null}};return{isLoaded:()=>i.value!==null,refresh:()=>u(),semaphore:n,firstLoad:r,data:i,firstLoadFinished:a,getting:o,onEvent:c,set:l,get:u}}),O_=e=>D_(e),k_=Symbol(`FB-Module-Stats`),A_={install:(e,t)=>{let n=pn(e),r=ut(e),i=_r(e),a=ea(e),o=Hi(e);for(let[e,n]of Object.entries(v_)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{statsModule:n});t.i18n.global.setLocaleMessage(e,r)}let s=O_(t.store);e.provide(yc,s),n.addStore(yc,s),t.router.getRoutes().find(e=>e.name===Te.ROOT)&&y_.forEach(e=>{t.router.addRoute(Te.ROOT,e)}),a.addModule(k_,{type:Cc,name:`Statistics`,description:`See how your system is performing and track key metrics over time.`,elements:[]}),o.register(k_,()=>Ii([s])),r.on(`event`,e=>{if(e?.event?.startsWith(`StatsModule.`)&&typeof e.payload==`object`)switch(e.event){case wc.STATS_INFO:s.onEvent({data:e.payload});break;default:i.warn(`Unhandled stats module event:`,e.event)}})}},j_=`storage-module`,M_=()=>{let e=ra(),{enabled:t}=Ji(),n=p(()=>wa(e.getPlugins().filter(e=>e.modules?.includes(j_)),[e=>e.name],[`asc`]));return{plugins:n,options:p(()=>n.value.map(e=>({value:e.type,label:e.name,disabled:!t(e.type)})))}},N_=k({name:`StorageConfigForm`,__name:`storage-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{options:o}=M_(),{formEl:s,model:c,formChanged:l,submit:u,formResult:d}=Ui({config:n.config,messages:{success:a(`storageModule.messages.config.edited`),error:a(`storageModule.messages.config.notEdited`)}}),f=P({primaryStorage:[{required:!0,message:a(`storageModule.fields.config.primaryStorage.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(c),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`storageModule.headings.aboutStorage`),description:L(a)(`storageModule.texts.aboutStorage`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`storageModule.fields.config.primaryStorage.title`),prop:`primaryStorage`,class:`mt-3`},{default:B(()=>[D(L(ei),{modelValue:L(c).primaryStorage,"onUpdate:modelValue":t[0]||=e=>L(c).primaryStorage=e,placeholder:L(a)(`storageModule.fields.config.primaryStorage.placeholder`)},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value,disabled:e.disabled},null,8,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`storageModule.fields.config.fallbackStorage.title`),prop:`fallbackStorage`},{default:B(()=>[D(L(ei),{modelValue:L(c).fallbackStorage,"onUpdate:modelValue":t[1]||=e=>L(c).fallbackStorage=e,placeholder:L(a)(`storageModule.fields.config.fallbackStorage.placeholder`)},{default:B(()=>[D(L(ti),{key:`none`,label:L(a)(`storageModule.fields.config.fallbackStorage.none`),value:``},null,8,[`label`]),(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value,disabled:e.disabled},null,8,[`label`,`value`,`disabled`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),P_={"cs-CZ":{headings:{aboutStorage:`Konfigurace úložiště`},messages:{config:{edited:`Konfigurace úložiště byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci úložiště`}},texts:{aboutStorage:`Nakonfigurujte backend datového úložiště pro ukládání časových řad, jako je historie vlastností zařízení a analytika.`},fields:{config:{primaryStorage:{title:`Primární úložiště`,placeholder:`Vyberte plugin primárního úložiště`,validation:{required:`Primární úložiště je povinné`}},fallbackStorage:{title:`Záložní úložiště`,placeholder:`Vyberte plugin záložního úložiště (volitelné)`,none:`Žádné`}}}},"de-DE":{headings:{aboutStorage:`Speicherkonfiguration`},messages:{config:{edited:`Speicherkonfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der Speicherkonfiguration fehlgeschlagen`}},texts:{aboutStorage:`Konfigurieren Sie das Datenspeicher-Backend für die Speicherung von Zeitreihendaten wie Geräteeigenschafts-Verlauf und Analysen.`},fields:{config:{primaryStorage:{title:`Primärspeicher`,placeholder:`Primärspeicher-Plugin auswählen`,validation:{required:`Primärspeicher ist erforderlich`}},fallbackStorage:{title:`Ausweichspeicher`,placeholder:`Ausweichspeicher-Plugin auswählen (optional)`,none:`Keiner`}}}},"en-US":{headings:{aboutStorage:`Storage Configuration`},messages:{config:{edited:`Storage configuration has been successfully updated`,notEdited:`Failed to update storage configuration`}},texts:{aboutStorage:`Configure the data storage backend for storing time-series data such as device property history and analytics.`},fields:{config:{primaryStorage:{title:`Primary Storage`,placeholder:`Select primary storage plugin`,validation:{required:`Primary storage is required`}},fallbackStorage:{title:`Fallback Storage`,placeholder:`Select fallback storage plugin (optional)`,none:`None`}}}},"es-ES":{headings:{aboutStorage:`Configuración de almacenamiento`},messages:{config:{edited:`La configuración de almacenamiento se ha actualizado correctamente`,notEdited:`Error al actualizar la configuración de almacenamiento`}},texts:{aboutStorage:`Configura el backend de almacenamiento de datos para almacenar datos de series temporales como el historial de propiedades de dispositivos y analíticas.`},fields:{config:{primaryStorage:{title:`Almacenamiento principal`,placeholder:`Seleccionar complemento de almacenamiento principal`,validation:{required:`El almacenamiento principal es obligatorio`}},fallbackStorage:{title:`Almacenamiento alternativo`,placeholder:`Seleccionar complemento de almacenamiento alternativo (opcional)`,none:`Ninguno`}}}},"pl-PL":{headings:{aboutStorage:`Konfiguracja magazynu danych`},messages:{config:{edited:`Konfiguracja magazynu danych została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji magazynu danych`}},texts:{aboutStorage:`Skonfiguruj backend magazynu danych do przechowywania danych szeregów czasowych, takich jak historia właściwości urządzeń i analityka.`},fields:{config:{primaryStorage:{title:`Magazyn główny`,placeholder:`Wybierz główną wtyczkę magazynu`,validation:{required:`Magazyn główny jest wymagany`}},fallbackStorage:{title:`Magazyn zapasowy`,placeholder:`Wybierz zapasową wtyczkę magazynu (opcjonalnie)`,none:`Brak`}}}},"sk-SK":{headings:{aboutStorage:`Konfigurácia úložiska`},messages:{config:{edited:`Konfigurácia úložiska bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu úložiska`}},texts:{aboutStorage:`Nakonfigurujte backend úložiska dát na ukladanie časových radov, ako sú história vlastností zariadení a analytika.`},fields:{config:{primaryStorage:{title:`Primárne úložisko`,placeholder:`Vyberte plugin primárneho úložiska`,validation:{required:`Primárne úložisko je povinné`}},fallbackStorage:{title:`Záložné úložisko`,placeholder:`Vyberte plugin záložného úložiska (voliteľné)`,none:`Žiadne`}}}}},F_=Li.extend({primaryStorage:X().min(1),fallbackStorage:X().optional()}),I_=Bi.extend({type:Y(j_),primaryStorage:X(),fallbackStorage:X().optional()}),L_=qi.and(K({type:Y(j_),primary_storage:X().optional(),fallback_storage:X().optional()}));zi.and(K({type:Y(j_),primary_storage:X(),fallback_storage:X()}));var R_=Symbol(`FB-Module-Storage`),z_={install:(e,t)=>{let n=ea(e);for(let[e,n]of Object.entries(P_)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{storageModule:n});t.i18n.global.setLocaleMessage(e,r)}n.addModule(R_,{type:j_,name:`Storage`,description:`Data storage configuration for device data history and analytics`,elements:[{type:Oa,components:{moduleConfigEditForm:N_},schemas:{moduleConfigSchema:I_,moduleConfigEditFormSchema:F_,moduleConfigUpdateReqSchema:L_},modules:[ka]}],modules:[ka],isCore:!0})}},B_=`buddy-claude-plugin`,V_=[`claude-opus-4-6`,`claude-sonnet-4-6`,`claude-haiku-4-5`,`claude-sonnet-4-5`,`claude-opus-4-5`],H_={class:`text-xs text-gray-500 mt-1`},U_={class:`text-xs text-gray-500 mt-1`},W_=k({name:`ClaudeConfigForm`,__name:`claude-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`buddyClaudePlugin.messages.config.edited`),error:a(`buddyClaudePlugin.messages.config.notEdited`)}}),f=V_,p=P({});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`buddyClaudePlugin.headings.aboutApiSettings`),description:L(a)(`buddyClaudePlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`buddyClaudePlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyClaudePlugin.fields.config.apiKey.title`),prop:`apiKey`},{default:B(()=>[D(L(Zp),{modelValue:L(s).apiKey,"onUpdate:modelValue":t[1]||=e=>L(s).apiKey=e,configured:L(s).apiKeyConfigured,placeholder:L(a)(`buddyClaudePlugin.fields.config.apiKey.placeholder`),name:`apiKey`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,H_,z(L(a)(`buddyClaudePlugin.fields.config.apiKey.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyClaudePlugin.fields.config.model.title`),prop:`model`},{default:B(()=>[D(L(ei),{modelValue:L(s).model,"onUpdate:modelValue":t[2]||=e=>L(s).model=e,placeholder:L(a)(`buddyClaudePlugin.fields.config.model.placeholder`),filterable:``,"allow-create":``,"default-first-option":``,class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),l(`div`,U_,z(L(a)(`buddyClaudePlugin.fields.config.model.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),G_={"cs-CZ":{headings:{aboutApiSettings:`Nastavení Claude API`},fields:{config:{enabled:{title:`Povoleno`},apiKey:{title:`API klíč`,placeholder:`Zadejte svůj Anthropic API klíč`,description:`Získejte svůj API klíč na console.anthropic.com`},model:{title:`Model`,placeholder:`např. claude-sonnet-4-20250514`,description:`Model Claude používaný pro generování odpovědí`}}},messages:{config:{edited:`Nastavení Claude bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Claude`}},texts:{aboutApiSettings:`Nakonfigurujte nastavení Anthropic Claude API. Pro použití modelů Claude jako poskytovatele LLM potřebujete platný API klíč.`}},"de-DE":{headings:{aboutApiSettings:`Claude API-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},apiKey:{title:`API-Schlüssel`,placeholder:`Geben Sie Ihren Anthropic API-Schlüssel ein`,description:`Holen Sie sich Ihren API-Schlüssel von console.anthropic.com`},model:{title:`Modell`,placeholder:`z.B. claude-sonnet-4-20250514`,description:`Das Claude-Modell, das für die Generierung von Antworten verwendet wird`}}},messages:{config:{edited:`Claude-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Claude-Einstellungen fehlgeschlagen`}},texts:{aboutApiSettings:`Konfigurieren Sie Ihre Anthropic Claude API-Einstellungen. Sie benötigen einen gültigen API-Schlüssel, um Claude-Modelle als Buddy-LLM-Anbieter zu verwenden.`}},"en-US":{headings:{aboutApiSettings:`Claude API settings`},fields:{config:{enabled:{title:`Enabled`},apiKey:{title:`API key`,placeholder:`Enter your Anthropic API key`,description:`Get your API key from console.anthropic.com`},model:{title:`Model`,placeholder:`e.g., claude-sonnet-4-20250514`,description:`The Claude model to use for generating responses`}}},messages:{config:{edited:`Claude settings have been updated`,notEdited:`Failed to update Claude settings`}},texts:{aboutApiSettings:`Configure your Anthropic Claude API settings. You need a valid API key to use Claude models as the buddy LLM provider.`}},"es-ES":{headings:{aboutApiSettings:`Configuración de la API de Claude`},fields:{config:{enabled:{title:`Habilitado`},apiKey:{title:`Clave API`,placeholder:`Introduzca su clave API de Anthropic`,description:`Obtenga su clave API en console.anthropic.com`},model:{title:`Modelo`,placeholder:`p. ej., claude-sonnet-4-20250514`,description:`El modelo de Claude a utilizar para generar respuestas`}}},messages:{config:{edited:`La configuración de Claude ha sido actualizada`,notEdited:`Error al actualizar la configuración de Claude`}},texts:{aboutApiSettings:`Configure los ajustes de la API de Anthropic Claude. Necesita una clave API válida para utilizar los modelos de Claude como proveedor LLM del asistente.`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia API Claude`},fields:{config:{enabled:{title:`Wlaczony`},apiKey:{title:`Klucz API`,placeholder:`Wprowadz klucz API Anthropic`,description:`Pobierz klucz API z console.anthropic.com`},model:{title:`Model`,placeholder:`np. claude-sonnet-4-20250514`,description:`Model Claude uzywany do generowania odpowiedzi`}}},messages:{config:{edited:`Ustawienia Claude zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien Claude`}},texts:{aboutApiSettings:`Skonfiguruj ustawienia API Anthropic Claude. Potrzebujesz prawidlowego klucza API, aby uzyc modeli Claude jako dostawcy LLM buddy.`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia API Claude`},fields:{config:{enabled:{title:`Povolený`},apiKey:{title:`API kľúč`,placeholder:`Zadajte svoj API kľúč Anthropic`,description:`Získajte svoj API kľúč z console.anthropic.com`},model:{title:`Model`,placeholder:`napr. claude-sonnet-4-20250514`,description:`Model Claude použitý na generovanie odpovedí`}}},messages:{config:{edited:`Nastavenia Claude boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Claude`}},texts:{aboutApiSettings:`Nakonfigurujte nastavenia API Anthropic Claude. Na používanie modelov Claude ako poskytovateľa LLM buddy potrebujete platný API kľúč.`}}},K_=Ki.extend({apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),model:X().nullable()}),q_=Wi.extend({apiKey:X().trim().nullable().optional(),apiKeyConfigured:J().default(!1),model:X().trim().nullable()}),J_=Zi.and(K({type:Y(B_),api_key:X().trim().nullable().optional(),model:X().trim().nullable().optional()}));Ri.and(K({type:Y(B_),api_key:X().trim().nullable().optional(),api_key_configured:J(),model:X().trim().nullable()}));var Y_=Symbol(`FB-Plugin-BuddyClaude`),X_={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(G_)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyClaudePlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Y_,{type:B_,source:`com.fastybird.smart-panel.plugin.buddy-claude`,name:`Claude`,description:`LLM provider plugin for Buddy module using Anthropic Claude API`,links:{documentation:`https://docs.anthropic.com`,devDocumentation:`https://docs.anthropic.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:W_},schemas:{pluginConfigSchema:q_,pluginConfigEditFormSchema:K_,pluginConfigUpdateReqSchema:J_},modules:[ka]}],modules:[ka],isCore:!0})}},Z_=`buddy-claude-setup-token-plugin`,Q_={class:`text-xs text-gray-500 mt-1`},$_=k({name:`ClaudeSetupTokenConfigForm`,__name:`claude-setup-token-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`buddyClaudeSetupTokenPlugin.messages.config.edited`),error:a(`buddyClaudeSetupTokenPlugin.messages.config.notEdited`)}}),f=V_,p=P({});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`buddyClaudeSetupTokenPlugin.headings.aboutApiSettings`),closable:!1},{default:B(()=>[E(z(L(a)(`buddyClaudeSetupTokenPlugin.texts.aboutApiSettings`)),1)]),_:1},8,[`title`]),D(L(Z),{label:L(a)(`buddyClaudeSetupTokenPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyClaudeSetupTokenPlugin.fields.config.accessToken.title`),prop:`accessToken`},{default:B(()=>[D(L(Zp),{modelValue:L(s).accessToken,"onUpdate:modelValue":t[1]||=e=>L(s).accessToken=e,configured:L(s).accessTokenConfigured,placeholder:L(a)(`buddyClaudeSetupTokenPlugin.fields.config.accessToken.placeholder`),name:`accessToken`},null,8,[`modelValue`,`configured`,`placeholder`])]),_:1},8,[`label`]),D(L(Q),{type:`info`,closable:!1,"show-icon":``,class:`mb-2!`},{default:B(()=>[E(z(L(a)(`buddyClaudeSetupTokenPlugin.fields.config.accessToken.howTo`))+` `,1),t[3]||=l(`code`,{class:`font-bold`},`claude setup-token`,-1),E(` `+z(L(a)(`buddyClaudeSetupTokenPlugin.fields.config.accessToken.howToSuffix`))+` `,1),t[4]||=l(`br`,null,null,-1),E(` `+z(L(a)(`buddyClaudeSetupTokenPlugin.fields.config.accessToken.machineNote`)),1)]),_:1}),D(L(Z),{label:L(a)(`buddyClaudeSetupTokenPlugin.fields.config.model.title`),prop:`model`},{default:B(()=>[D(L(ei),{modelValue:L(s).model,"onUpdate:modelValue":t[2]||=e=>L(s).model=e,placeholder:L(a)(`buddyClaudeSetupTokenPlugin.fields.config.model.placeholder`),filterable:``,"allow-create":``,"default-first-option":``,class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),l(`div`,Q_,z(L(a)(`buddyClaudeSetupTokenPlugin.fields.config.model.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),ev={"cs-CZ":{headings:{aboutApiSettings:`Nastavení tokenu pro nastavení Claude`},fields:{config:{enabled:{title:`Povoleno`},accessToken:{title:`Token pro nastavení`,placeholder:`Vložte svůj token pro nastavení zde`,howTo:`Spusťte`,howToSuffix:`ve svém terminálu a vložte vygenerovaný token sem.`,machineNote:`Příkaz lze spustit na jakémkoli počítači s nainstalovaným Claude CLI — nemusí to být stejný počítač, na kterém běží backend Smart Panelu.`},model:{title:`Model`,placeholder:`např. claude-sonnet-4-20250514`,description:`Model Claude používaný pro generování odpovědí`}}},messages:{config:{edited:`Nastavení tokenu pro nastavení Claude bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení tokenu pro nastavení Claude`}},texts:{aboutApiSettings:`Nakonfigurujte připojení k Anthropic Claude pomocí tokenu pro nastavení. Token pro nastavení autentizuje Smart Panel s vaším předplatným Claude — není vyžadován API klíč.`}},"de-DE":{headings:{aboutApiSettings:`Claude Setup-Token-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},accessToken:{title:`Setup-Token`,placeholder:`Fügen Sie hier Ihren Setup-Token ein`,howTo:`Ausführen`,howToSuffix:`in Ihrem Terminal und fügen Sie den generierten Token hier ein.`,machineNote:`Der Befehl kann auf jedem Computer mit installierter Claude CLI ausgeführt werden — es muss nicht derselbe Computer sein, auf dem das Smart Panel Backend läuft.`},model:{title:`Modell`,placeholder:`z.B. claude-sonnet-4-20250514`,description:`Das Claude-Modell, das für die Generierung von Antworten verwendet wird`}}},messages:{config:{edited:`Claude Setup-Token-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Claude Setup-Token-Einstellungen fehlgeschlagen`}},texts:{aboutApiSettings:`Konfigurieren Sie Ihre Anthropic Claude-Verbindung mit einem Setup-Token. Der Setup-Token authentifiziert das Smart Panel bei Ihrem Claude-Abonnement — kein API-Schlüssel erforderlich.`}},"en-US":{headings:{aboutApiSettings:`Claude setup token settings`},fields:{config:{enabled:{title:`Enabled`},accessToken:{title:`Setup token`,placeholder:`Paste your setup token here`,howTo:`Run`,howToSuffix:`in your terminal and paste the generated token here.`,machineNote:`The command can be run on any machine with the Claude CLI installed — it does not need to be the same machine running the Smart Panel backend.`},model:{title:`Model`,placeholder:`e.g., claude-sonnet-4-20250514`,description:`The Claude model to use for generating responses`}}},messages:{config:{edited:`Claude setup token settings have been updated`,notEdited:`Failed to update Claude setup token settings`}},texts:{aboutApiSettings:`Configure your Anthropic Claude connection using a setup token. The setup token authenticates the Smart Panel with your Claude subscription — no API key required.`}},"es-ES":{headings:{aboutApiSettings:`Configuración del token de configuración de Claude`},fields:{config:{enabled:{title:`Habilitado`},accessToken:{title:`Token de configuración`,placeholder:`Pegue su token de configuración aquí`,howTo:`Ejecute`,howToSuffix:`en su terminal y pegue el token generado aquí.`,machineNote:`El comando se puede ejecutar en cualquier máquina con la CLI de Claude instalada; no es necesario que sea la misma máquina que ejecuta el backend de Smart Panel.`},model:{title:`Modelo`,placeholder:`p. ej., claude-sonnet-4-20250514`,description:`El modelo de Claude a utilizar para generar respuestas`}}},messages:{config:{edited:`La configuración del token de configuración de Claude ha sido actualizada`,notEdited:`Error al actualizar la configuración del token de configuración de Claude`}},texts:{aboutApiSettings:`Configure su conexión con Anthropic Claude mediante un token de configuración. El token de configuración autentica el Smart Panel con su suscripción a Claude, sin necesidad de clave API.`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia tokenu konfiguracji Claude`},fields:{config:{enabled:{title:`Wlaczony`},accessToken:{title:`Token konfiguracji`,placeholder:`Wklej swoj token konfiguracji tutaj`,howTo:`Uruchom`,howToSuffix:`w terminalu i wklej wygenerowany token tutaj.`,machineNote:`Polecenie mozna uruchomic na dowolnej maszynie z zainstalowanym Claude CLI - nie musi to byc ta sama maszyna, na ktorej dziala backend Smart Panel.`},model:{title:`Model`,placeholder:`np. claude-sonnet-4-20250514`,description:`Model Claude uzywany do generowania odpowiedzi`}}},messages:{config:{edited:`Ustawienia tokenu konfiguracji Claude zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien tokenu konfiguracji Claude`}},texts:{aboutApiSettings:`Skonfiguruj polaczenie z Anthropic Claude za pomoca tokenu konfiguracji. Token konfiguracji uwierzytelnia Smart Panel z Twoja subskrypcja Claude - klucz API nie jest wymagany.`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia setup tokenu Claude`},fields:{config:{enabled:{title:`Povolený`},accessToken:{title:`Inštalačný token`,placeholder:`Vložte sem svoj setup token`,howTo:`Spustite`,howToSuffix:`vo svojom termináli a vložte vygenerovaný token sem.`,machineNote:`Príkaz je možné spustiť na akomkoľvek zariadení s nainštalovaným Claude CLI — nemusí to byť ten istý stroj, na ktorom beží Smart Panel backend.`},model:{title:`Model`,placeholder:`napr. claude-sonnet-4-20250514`,description:`Model Claude použitý na generovanie odpovedí`}}},messages:{config:{edited:`Nastavenia setup tokenu Claude boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia setup tokenu Claude`}},texts:{aboutApiSettings:`Nakonfigurujte pripojenie k Anthropic Claude pomocou setup tokenu. Setup token autentifikuje Smart Panel s vaším predplatným Claude — nie je potrebný API kľúč.`}}},tv=Ki.extend({accessToken:X().nullable().optional(),accessTokenConfigured:J().optional(),model:X().nullable()}),nv=Wi.extend({accessToken:X().trim().nullable().optional(),accessTokenConfigured:J().default(!1),model:X().trim().nullable()}),rv=Zi.and(K({type:Y(Z_),access_token:X().trim().nullable().optional(),model:X().trim().nullable().optional()}));Ri.and(K({type:Y(Z_),access_token:X().trim().nullable().optional(),access_token_configured:J(),model:X().trim().nullable()}));var iv=Symbol(`FB-Plugin-BuddyClaudeSetupToken`),av={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(ev)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyClaudeSetupTokenPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(iv,{type:Z_,source:`com.fastybird.smart-panel.plugin.buddy-claude-setup-token`,name:`Claude Setup Token`,description:`LLM provider plugin for Buddy module using Anthropic Claude with setup-token authentication`,links:{documentation:`https://docs.anthropic.com`,devDocumentation:`https://docs.anthropic.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:$_},schemas:{pluginConfigSchema:nv,pluginConfigEditFormSchema:tv,pluginConfigUpdateReqSchema:rv},modules:[ka]}],modules:[ka],isCore:!0})}},ov=`buddy-discord-plugin`,sv={class:`text-xs text-gray-500 mt-1`},cv={class:`text-xs text-gray-500 mt-1`},lv={class:`text-xs text-gray-500 mt-1`},uv={class:`w-full`},dv={class:`text-xs text-gray-500 mt-1`},fv={class:`text-xs text-gray-500 mt-1`},pv=k({name:`DiscordConfigForm`,__name:`discord-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:c,formChanged:u,submit:d,formResult:f}=Xi({config:n.config,messages:{success:a(`buddyDiscordPlugin.messages.config.edited`),error:a(`buddyDiscordPlugin.messages.config.notEdited`)}}),{spaces:p,fetchSpaces:m}=Oo(),h=P([]),g=()=>{let e=[];try{let t=JSON.parse(c.spaceChannelMappings||`{}`);for(let[n,r]of Object.entries(t))e.push({spaceId:n,channelId:r})}catch{}h.splice(0,h.length,...e)},_=()=>{let e={};for(let t of h)t.spaceId&&t.channelId&&(e[t.spaceId]=t.channelId);c.spaceChannelMappings=Object.keys(e).length>0?JSON.stringify(e):null},v=e=>{let t=h.filter((t,n)=>n!==e).map(e=>e.spaceId).filter(Boolean);return p.value.filter(e=>!t.includes(e.id))},y=()=>{h.push({spaceId:``,channelId:``})},b=e=>{h.splice(e,1),_()};g(),m(),F(h,_,{deep:!0});let x=P({});return F(()=>f.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),d().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields(),g()}}),F(()=>u.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(c),rules:x,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`buddyDiscordPlugin.headings.aboutDiscordSettings`),description:L(a)(`buddyDiscordPlugin.texts.aboutDiscordSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`buddyDiscordPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(c).enabled,"onUpdate:modelValue":t[0]||=e=>L(c).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyDiscordPlugin.fields.config.botToken.title`),prop:`botToken`},{default:B(()=>[D(L(Zp),{modelValue:L(c).botToken,"onUpdate:modelValue":t[1]||=e=>L(c).botToken=e,configured:L(c).botTokenConfigured,placeholder:L(a)(`buddyDiscordPlugin.fields.config.botToken.placeholder`),name:`botToken`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,sv,z(L(a)(`buddyDiscordPlugin.fields.config.botToken.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyDiscordPlugin.fields.config.guildId.title`),prop:`guildId`},{default:B(()=>[D(L(U),{modelValue:L(c).guildId,"onUpdate:modelValue":t[2]||=e=>L(c).guildId=e,placeholder:L(a)(`buddyDiscordPlugin.fields.config.guildId.placeholder`),name:`guildId`},null,8,[`modelValue`,`placeholder`]),l(`div`,cv,z(L(a)(`buddyDiscordPlugin.fields.config.guildId.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyDiscordPlugin.fields.config.generalChannelId.title`),prop:`generalChannelId`},{default:B(()=>[D(L(U),{modelValue:L(c).generalChannelId,"onUpdate:modelValue":t[3]||=e=>L(c).generalChannelId=e,placeholder:L(a)(`buddyDiscordPlugin.fields.config.generalChannelId.placeholder`),name:`generalChannelId`},null,8,[`modelValue`,`placeholder`]),l(`div`,lv,z(L(a)(`buddyDiscordPlugin.fields.config.generalChannelId.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyDiscordPlugin.fields.config.spaceChannelMappings.title`),prop:`spaceChannelMappings`},{default:B(()=>[l(`div`,uv,[(A(!0),i(V,null,I(h,(e,t)=>(A(),i(`div`,{key:t,class:`flex items-center gap-2 mb-2`},[D(L(ei),{modelValue:e.spaceId,"onUpdate:modelValue":t=>e.spaceId=t,placeholder:L(a)(`buddyDiscordPlugin.fields.config.spaceChannelMappings.selectSpace`),filterable:``,class:`flex-1`},{default:B(()=>[(A(!0),i(V,null,I(v(t),e=>(A(),O(L(ti),{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),D(L(U),{modelValue:e.channelId,"onUpdate:modelValue":t=>e.channelId=t,placeholder:L(a)(`buddyDiscordPlugin.fields.config.spaceChannelMappings.channelPlaceholder`),class:`flex-1`},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),D(L(Oe),{type:`danger`,plain:``,onClick:e=>b(t)},{icon:B(()=>[D(L(s),{icon:`mdi:trash`})]),_:1},8,[`onClick`])]))),128)),D(L(Oe),{type:`primary`,plain:``,size:`small`,onClick:y},{default:B(()=>[E(z(L(a)(`buddyDiscordPlugin.fields.config.spaceChannelMappings.add`)),1)]),_:1}),l(`div`,dv,z(L(a)(`buddyDiscordPlugin.fields.config.spaceChannelMappings.description`)),1)])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyDiscordPlugin.fields.config.allowedRoleId.title`),prop:`allowedRoleId`},{default:B(()=>[D(L(U),{modelValue:L(c).allowedRoleId,"onUpdate:modelValue":t[4]||=e=>L(c).allowedRoleId=e,placeholder:L(a)(`buddyDiscordPlugin.fields.config.allowedRoleId.placeholder`),name:`allowedRoleId`},null,8,[`modelValue`,`placeholder`]),l(`div`,fv,z(L(a)(`buddyDiscordPlugin.fields.config.allowedRoleId.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),mv={"cs-CZ":{headings:{aboutDiscordSettings:`Nastavení Discord bota`},fields:{config:{enabled:{title:`Povoleno`},botToken:{title:`Token bota`,placeholder:`Zadejte svůj Discord bot token`,description:`Získejte svůj bot token z Discord Developer Portal v nastavení Bot vaší aplikace.`},guildId:{title:`ID serveru (guild)`,placeholder:`např. 123456789012345678`,description:`ID Discord serveru. Povolte režim vývojáře v nastavení Discordu, poté klikněte pravým tlačítkem na server pro zkopírování jeho ID.`},generalChannelId:{title:`ID obecného kanálu`,placeholder:`např. 123456789012345678`,description:`Výchozí kanál pro dotazy napříč prostory a nesměrované návrhy. Klikněte pravým tlačítkem na kanál pro zkopírování jeho ID.`},spaceChannelMappings:{title:`Mapování prostor-kanál`,selectSpace:`Vyberte prostor`,channelPlaceholder:`ID Discord kanálu`,add:`Přidat mapování`,description:`Mapujte prostory chytré domácnosti na Discord kanály. Zprávy v mapovaném kanálu budou obsahovat kontext daného prostoru.`},allowedRoleId:{title:`ID povolené role`,placeholder:`např. 123456789012345678`,description:`ID Discord role vyžadované pro interakci s botem. Ponechte prázdné pro povolení všem členům serveru.`}}},messages:{config:{edited:`Nastavení Discord bota bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Discord bota`}},texts:{aboutDiscordSettings:`Nakonfigurujte integraci Discord bota. Vytvořte bota na Discord Developer Portal, povolte Message Content Intent a přidejte ho na svůj server. Mapujte Discord kanály na prostory chytré domácnosti pro kontextové konverzace.`}},"de-DE":{headings:{aboutDiscordSettings:`Discord-Bot-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},botToken:{title:`Bot-Token`,placeholder:`Geben Sie Ihren Discord-Bot-Token ein`,description:`Holen Sie sich Ihren Bot-Token vom Discord Developer Portal unter den Bot-Einstellungen Ihrer Anwendung.`},guildId:{title:`Guild (Server) ID`,placeholder:`z.B. 123456789012345678`,description:`Die Discord-Server-ID. Aktivieren Sie den Entwicklermodus in den Discord-Einstellungen, dann klicken Sie mit der rechten Maustaste auf den Server, um seine ID zu kopieren.`},generalChannelId:{title:`Allgemeiner Kanal-ID`,placeholder:`z.B. 123456789012345678`,description:`Der Standardkanal für raumübergreifende Anfragen und nicht zugeordnete Vorschläge. Rechtsklicken Sie auf einen Kanal, um seine ID zu kopieren.`},spaceChannelMappings:{title:`Raum-Kanal-Zuordnungen`,selectSpace:`Raum auswählen`,channelPlaceholder:`Discord-Kanal-ID`,add:`Zuordnung hinzufügen`,description:`Ordnen Sie Smart-Home-Räume Discord-Kanälen zu. Nachrichten in einem zugeordneten Kanal enthalten den Kontext dieses Raums.`},allowedRoleId:{title:`Erlaubte Rollen-ID`,placeholder:`z.B. 123456789012345678`,description:`Discord-Rollen-ID, die für die Interaktion mit dem Bot erforderlich ist. Leer lassen, um allen Servermitgliedern den Zugriff zu erlauben.`}}},messages:{config:{edited:`Discord-Bot-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Discord-Bot-Einstellungen fehlgeschlagen`}},texts:{aboutDiscordSettings:`Konfigurieren Sie Ihre Discord-Bot-Integration. Erstellen Sie einen Bot im Discord Developer Portal, aktivieren Sie den Message Content Intent und fügen Sie ihn Ihrem Server hinzu. Ordnen Sie Discord-Kanäle Smart-Home-Räumen zu für kontextbezogene Konversationen.`}},"en-US":{headings:{aboutDiscordSettings:`Discord bot settings`},fields:{config:{enabled:{title:`Enabled`},botToken:{title:`Bot token`,placeholder:`Enter your Discord bot token`,description:`Get your bot token from the Discord Developer Portal under your application's Bot settings.`},guildId:{title:`Guild (server) ID`,placeholder:`e.g., 123456789012345678`,description:`The Discord server ID. Enable Developer Mode in Discord settings, then right-click the server to copy its ID.`},generalChannelId:{title:`General channel ID`,placeholder:`e.g., 123456789012345678`,description:`The default channel for cross-space queries and unrouted suggestions. Right-click a channel to copy its ID.`},spaceChannelMappings:{title:`Space-channel mappings`,selectSpace:`Select a space`,channelPlaceholder:`Discord channel ID`,add:`Add mapping`,description:`Map smart home spaces to Discord channels. Messages in a mapped channel will include that space's context.`},allowedRoleId:{title:`Allowed role ID`,placeholder:`e.g., 123456789012345678`,description:`Discord role ID required to interact with the bot. Leave empty to allow all server members.`}}},messages:{config:{edited:`Discord bot settings have been updated`,notEdited:`Failed to update Discord bot settings`}},texts:{aboutDiscordSettings:`Configure your Discord bot integration. Create a bot at the Discord Developer Portal, enable the Message Content Intent, and add it to your server. Map Discord channels to smart home spaces for context-aware conversations.`}},"es-ES":{headings:{aboutDiscordSettings:`Configuración del bot de Discord`},fields:{config:{enabled:{title:`Habilitado`},botToken:{title:`Token del bot`,placeholder:`Introduzca el token de su bot de Discord`,description:`Obtenga el token de su bot en el Portal de Desarrolladores de Discord, en la configuración de Bot de su aplicación.`},guildId:{title:`ID del servidor (guild)`,placeholder:`p. ej., 123456789012345678`,description:`El ID del servidor de Discord. Active el Modo Desarrollador en la configuración de Discord, luego haga clic derecho en el servidor para copiar su ID.`},generalChannelId:{title:`ID del canal general`,placeholder:`p. ej., 123456789012345678`,description:`El canal predeterminado para consultas entre espacios y sugerencias sin enrutar. Haga clic derecho en un canal para copiar su ID.`},spaceChannelMappings:{title:`Asignaciones de espacio a canal`,selectSpace:`Seleccione un espacio`,channelPlaceholder:`ID del canal de Discord`,add:`Añadir asignación`,description:`Asigne espacios del hogar inteligente a canales de Discord. Los mensajes en un canal asignado incluirán el contexto de ese espacio.`},allowedRoleId:{title:`ID del rol permitido`,placeholder:`p. ej., 123456789012345678`,description:`ID del rol de Discord requerido para interactuar con el bot. Déjelo vacío para permitir a todos los miembros del servidor.`}}},messages:{config:{edited:`La configuración del bot de Discord ha sido actualizada`,notEdited:`Error al actualizar la configuración del bot de Discord`}},texts:{aboutDiscordSettings:`Configure la integración de su bot de Discord. Cree un bot en el Portal de Desarrolladores de Discord, habilite el Message Content Intent y añádalo a su servidor. Asigne canales de Discord a espacios del hogar inteligente para conversaciones con contexto.`}},"pl-PL":{headings:{aboutDiscordSettings:`Ustawienia bota Discord`},fields:{config:{enabled:{title:`Wlaczony`},botToken:{title:`Token bota`,placeholder:`Wprowadz token bota Discord`,description:`Pobierz token bota z portalu Discord Developer w ustawieniach Bot aplikacji.`},guildId:{title:`ID serwera (guild)`,placeholder:`np. 123456789012345678`,description:`ID serwera Discord. Wlacz tryb deweloperski w ustawieniach Discord, nastepnie kliknij prawym przyciskiem na serwer, aby skopiowac jego ID.`},generalChannelId:{title:`ID kanalu ogolnego`,placeholder:`np. 123456789012345678`,description:`Domyslny kanal dla zapytan miedzy przestrzeniami i nieprzekierowanych sugestii. Kliknij prawym przyciskiem na kanal, aby skopiowac jego ID.`},spaceChannelMappings:{title:`Mapowanie przestrzeni na kanaly`,selectSpace:`Wybierz przestrzen`,channelPlaceholder:`ID kanalu Discord`,add:`Dodaj mapowanie`,description:`Mapuj przestrzenie inteligentnego domu na kanaly Discord. Wiadomosci na zmapowanym kanale beda zawierac kontekst tej przestrzeni.`},allowedRoleId:{title:`ID dozwolonej roli`,placeholder:`np. 123456789012345678`,description:`ID roli Discord wymaganej do interakcji z botem. Pozostaw puste, aby zezwolic wszystkim czlonkom serwera.`}}},messages:{config:{edited:`Ustawienia bota Discord zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien bota Discord`}},texts:{aboutDiscordSettings:`Skonfiguruj integracje z botem Discord. Utworz bota w portalu Discord Developer, wlacz Message Content Intent i dodaj go do swojego serwera. Zmapuj kanaly Discord na przestrzenie inteligentnego domu, aby prowadzic rozmowy uwzgledniajace kontekst.`}},"sk-SK":{headings:{aboutDiscordSettings:`Nastavenia Discord bota`},fields:{config:{enabled:{title:`Povolený`},botToken:{title:`Token bota`,placeholder:`Zadajte token svojho Discord bota`,description:`Získajte token bota z Discord Developer Portal v nastaveniach Bot vašej aplikácie.`},guildId:{title:`ID guildu (servera)`,placeholder:`napr. 123456789012345678`,description:`ID Discord servera. Povoľte vývojársky režim v nastaveniach Discordu, potom kliknite pravým tlačidlom na server a skopírujte jeho ID.`},generalChannelId:{title:`ID všeobecného kanála`,placeholder:`napr. 123456789012345678`,description:`Predvolený kanál pre medzipriestorové dotazy a nesmerované návrhy. Kliknite pravým tlačidlom na kanál a skopírujte jeho ID.`},spaceChannelMappings:{title:`Mapovanie priestorov na kanály`,selectSpace:`Vyberte priestor`,channelPlaceholder:`ID Discord kanála`,add:`Pridať mapovanie`,description:`Namapujte priestory inteligentnej domácnosti na Discord kanály. Správy v namapovanom kanáli budú obsahovať kontext daného priestoru.`},allowedRoleId:{title:`ID povolenej roly`,placeholder:`napr. 123456789012345678`,description:`ID Discord roly potrebnej na interakciu s botom. Ponechajte prázdne na povolenie všetkých členov servera.`}}},messages:{config:{edited:`Nastavenia Discord bota boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Discord bota`}},texts:{aboutDiscordSettings:`Nakonfigurujte integráciu Discord bota. Vytvorte bota na Discord Developer Portal, povoľte Message Content Intent a pridajte ho na svoj server. Namapujte Discord kanály na priestory inteligentnej domácnosti pre kontextové konverzácie.`}}},hv=Ki.extend({botToken:X().nullable().optional(),botTokenConfigured:J().optional(),guildId:X().nullable(),generalChannelId:X().nullable(),spaceChannelMappings:X().nullable(),allowedRoleId:X().nullable()}),gv=Wi.extend({botToken:X().trim().nullable().optional(),botTokenConfigured:J().default(!1),guildId:X().trim().nullable().default(null),generalChannelId:X().trim().nullable().default(null),spaceChannelMappings:X().trim().nullable().default(null),allowedRoleId:X().trim().nullable().default(null)}),_v=Zi.and(K({type:Y(ov),bot_token:X().trim().nullable().optional(),guild_id:X().trim().nullable().optional(),general_channel_id:X().trim().nullable().optional(),space_channel_mappings:X().trim().nullable().optional(),allowed_role_id:X().trim().nullable().optional()})),vv=Symbol(`FB-Plugin-BuddyDiscord`),yv={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(mv)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyDiscordPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(vv,{type:ov,source:`com.fastybird.smart-panel.plugin.buddy-discord`,name:`Discord`,description:`Discord bot adapter plugin for Buddy module with multi-channel space mapping`,links:{documentation:`https://discord.com/developers/docs`,devDocumentation:`https://discord.com/developers/docs/intro`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:pv},schemas:{pluginConfigSchema:gv,pluginConfigEditFormSchema:hv,pluginConfigUpdateReqSchema:_v},modules:[ka]}],modules:[ka],isCore:!0})}},bv=`buddy-elevenlabs-plugin`,xv={class:`text-xs text-gray-500 mt-1`},Sv={class:`text-xs text-gray-500 mt-1`},Cv=k({name:`ElevenlabsConfigForm`,__name:`elevenlabs-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`buddyElevenlabsPlugin.messages.config.edited`),error:i(`buddyElevenlabsPlugin.messages.config.notEdited`)}}),d=P({});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`buddyElevenlabsPlugin.headings.aboutApiSettings`),description:L(i)(`buddyElevenlabsPlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`buddyElevenlabsPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyElevenlabsPlugin.fields.config.apiKey.title`),prop:`apiKey`},{default:B(()=>[D(L(Zp),{modelValue:L(o).apiKey,"onUpdate:modelValue":t[1]||=e=>L(o).apiKey=e,configured:L(o).apiKeyConfigured,placeholder:L(i)(`buddyElevenlabsPlugin.fields.config.apiKey.placeholder`),name:`apiKey`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,xv,z(L(i)(`buddyElevenlabsPlugin.fields.config.apiKey.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyElevenlabsPlugin.fields.config.voiceId.title`),prop:`voiceId`},{default:B(()=>[D(L(U),{modelValue:L(o).voiceId,"onUpdate:modelValue":t[2]||=e=>L(o).voiceId=e,placeholder:L(i)(`buddyElevenlabsPlugin.fields.config.voiceId.placeholder`),name:`voiceId`,clearable:``},null,8,[`modelValue`,`placeholder`]),l(`div`,Sv,z(L(i)(`buddyElevenlabsPlugin.fields.config.voiceId.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),wv={"cs-CZ":{headings:{aboutApiSettings:`Nastavení ElevenLabs API`},fields:{config:{enabled:{title:`Povoleno`},apiKey:{title:`API klíč`,placeholder:`Zadejte svůj ElevenLabs API klíč`,description:`Získejte svůj API klíč na elevenlabs.io/app/settings/api-keys`},voiceId:{title:`ID hlasu`,placeholder:`např. 21m00Tcm4TlvDq8ikWAM`,description:`ID hlasu ElevenLabs používaného pro syntézu řeči`}}},messages:{config:{edited:`Nastavení ElevenLabs bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení ElevenLabs`}},texts:{aboutApiSettings:`Nakonfigurujte nastavení ElevenLabs API. Pro použití ElevenLabs jako poskytovatele TTS potřebujete platný API klíč a ID hlasu.`}},"de-DE":{headings:{aboutApiSettings:`ElevenLabs API-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},apiKey:{title:`API-Schlüssel`,placeholder:`Geben Sie Ihren ElevenLabs API-Schlüssel ein`,description:`Holen Sie sich Ihren API-Schlüssel von elevenlabs.io/app/settings/api-keys`},voiceId:{title:`Stimmen-ID`,placeholder:`z.B. 21m00Tcm4TlvDq8ikWAM`,description:`Die ElevenLabs Stimmen-ID für die Sprachsynthese`}}},messages:{config:{edited:`ElevenLabs-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der ElevenLabs-Einstellungen fehlgeschlagen`}},texts:{aboutApiSettings:`Konfigurieren Sie Ihre ElevenLabs API-Einstellungen. Sie benötigen einen gültigen API-Schlüssel und eine Stimmen-ID, um ElevenLabs als Buddy-TTS-Anbieter zu verwenden.`}},"en-US":{headings:{aboutApiSettings:`ElevenLabs API settings`},fields:{config:{enabled:{title:`Enabled`},apiKey:{title:`API key`,placeholder:`Enter your ElevenLabs API key`,description:`Get your API key from elevenlabs.io/app/settings/api-keys`},voiceId:{title:`Voice ID`,placeholder:`e.g., 21m00Tcm4TlvDq8ikWAM`,description:`The ElevenLabs voice ID to use for speech synthesis`}}},messages:{config:{edited:`ElevenLabs settings have been updated`,notEdited:`Failed to update ElevenLabs settings`}},texts:{aboutApiSettings:`Configure your ElevenLabs API settings. You need a valid API key and voice ID to use ElevenLabs as the buddy TTS provider.`}},"es-ES":{headings:{aboutApiSettings:`Configuración de la API de ElevenLabs`},fields:{config:{enabled:{title:`Habilitado`},apiKey:{title:`Clave API`,placeholder:`Introduzca su clave API de ElevenLabs`,description:`Obtenga su clave API en elevenlabs.io/app/settings/api-keys`},voiceId:{title:`ID de voz`,placeholder:`p. ej., 21m00Tcm4TlvDq8ikWAM`,description:`El ID de voz de ElevenLabs a utilizar para la síntesis de voz`}}},messages:{config:{edited:`La configuración de ElevenLabs ha sido actualizada`,notEdited:`Error al actualizar la configuración de ElevenLabs`}},texts:{aboutApiSettings:`Configure los ajustes de la API de ElevenLabs. Necesita una clave API válida y un ID de voz para utilizar ElevenLabs como proveedor TTS del asistente.`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia API ElevenLabs`},fields:{config:{enabled:{title:`Wlaczony`},apiKey:{title:`Klucz API`,placeholder:`Wprowadz klucz API ElevenLabs`,description:`Pobierz klucz API z elevenlabs.io/app/settings/api-keys`},voiceId:{title:`ID glosu`,placeholder:`np. 21m00Tcm4TlvDq8ikWAM`,description:`ID glosu ElevenLabs uzywany do syntezy mowy`}}},messages:{config:{edited:`Ustawienia ElevenLabs zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien ElevenLabs`}},texts:{aboutApiSettings:`Skonfiguruj ustawienia API ElevenLabs. Potrzebujesz prawidlowego klucza API i ID glosu, aby uzyc ElevenLabs jako dostawcy TTS buddy.`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia API ElevenLabs`},fields:{config:{enabled:{title:`Povolený`},apiKey:{title:`API kľúč`,placeholder:`Zadajte svoj API kľúč ElevenLabs`,description:`Získajte svoj API kľúč z elevenlabs.io/app/settings/api-keys`},voiceId:{title:`ID hlasu`,placeholder:`napr. 21m00Tcm4TlvDq8ikWAM`,description:`ID hlasu ElevenLabs použitého na syntézu reči`}}},messages:{config:{edited:`Nastavenia ElevenLabs boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia ElevenLabs`}},texts:{aboutApiSettings:`Nakonfigurujte nastavenia API ElevenLabs. Na používanie ElevenLabs ako poskytovateľa TTS buddy potrebujete platný API kľúč a ID hlasu.`}}},Tv=Ki.extend({apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),voiceId:X().nullable()}),Ev=Wi.extend({apiKey:X().trim().nullable().optional(),apiKeyConfigured:J().default(!1),voiceId:X().trim().nullable()}),Dv=Zi.and(K({type:Y(bv),api_key:X().trim().nullable().optional(),voice_id:X().trim().nullable().optional()}));Ri.and(K({type:Y(bv),api_key:X().trim().nullable().optional(),api_key_configured:J(),voice_id:X().trim().nullable()}));var Ov=Symbol(`FB-Plugin-BuddyElevenlabs`),kv={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(wv)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyElevenlabsPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Ov,{type:bv,source:`com.fastybird.smart-panel.plugin.buddy-elevenlabs`,name:`ElevenLabs`,description:`TTS provider plugin for Buddy module using ElevenLabs API`,links:{documentation:`https://elevenlabs.io/docs`,devDocumentation:`https://elevenlabs.io/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:Cv},schemas:{pluginConfigSchema:Ev,pluginConfigEditFormSchema:Tv,pluginConfigUpdateReqSchema:Dv},modules:[ka]}],modules:[ka],isCore:!0})}},Av=`buddy-ollama-plugin`,jv={class:`text-xs text-gray-500 mt-1`},Mv={class:`text-xs text-gray-500 mt-1`},Nv=k({name:`OllamaConfigForm`,__name:`ollama-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`buddyOllamaPlugin.messages.config.edited`),error:i(`buddyOllamaPlugin.messages.config.notEdited`)}}),d=P({});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`buddyOllamaPlugin.headings.aboutApiSettings`),description:L(i)(`buddyOllamaPlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`buddyOllamaPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyOllamaPlugin.fields.config.model.title`),prop:`model`},{default:B(()=>[D(L(U),{modelValue:L(o).model,"onUpdate:modelValue":t[1]||=e=>L(o).model=e,placeholder:L(i)(`buddyOllamaPlugin.fields.config.model.placeholder`),name:`model`},null,8,[`modelValue`,`placeholder`]),l(`div`,jv,z(L(i)(`buddyOllamaPlugin.fields.config.model.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyOllamaPlugin.fields.config.baseUrl.title`),prop:`baseUrl`},{default:B(()=>[D(L(U),{modelValue:L(o).baseUrl,"onUpdate:modelValue":t[2]||=e=>L(o).baseUrl=e,placeholder:L(i)(`buddyOllamaPlugin.fields.config.baseUrl.placeholder`),name:`baseUrl`},null,8,[`modelValue`,`placeholder`]),l(`div`,Mv,z(L(i)(`buddyOllamaPlugin.fields.config.baseUrl.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Pv={"cs-CZ":{headings:{aboutApiSettings:`Nastavení Ollama`},fields:{config:{enabled:{title:`Povoleno`},model:{title:`Model`,placeholder:`např. llama3, mistral, codellama`,description:`Model Ollama používaný pro generování odpovědí`},baseUrl:{title:`Základní URL`,placeholder:`např. http://localhost:11434`,description:`URL vaší lokální instance Ollama`}}},messages:{config:{edited:`Nastavení Ollama bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Ollama`}},texts:{aboutApiSettings:`Nakonfigurujte nastavení vaší lokální instance Ollama. Ollama běží lokálně a nevyžaduje API klíč. Ujistěte se, že Ollama běží a je dostupná na nakonfigurované URL.`}},"de-DE":{headings:{aboutApiSettings:`Ollama-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},model:{title:`Modell`,placeholder:`z.B. llama3, mistral, codellama`,description:`Das Ollama-Modell, das für die Generierung von Antworten verwendet wird`},baseUrl:{title:`Basis-URL`,placeholder:`z.B. http://localhost:11434`,description:`Die URL Ihrer lokalen Ollama-Instanz`}}},messages:{config:{edited:`Ollama-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Ollama-Einstellungen fehlgeschlagen`}},texts:{aboutApiSettings:`Konfigurieren Sie Ihre lokale Ollama-Instanz. Ollama läuft lokal und benötigt keinen API-Schlüssel. Stellen Sie sicher, dass Ollama läuft und unter der konfigurierten URL erreichbar ist.`}},"en-US":{headings:{aboutApiSettings:`Ollama settings`},fields:{config:{enabled:{title:`Enabled`},model:{title:`Model`,placeholder:`e.g., llama3, mistral, codellama`,description:`The Ollama model to use for generating responses`},baseUrl:{title:`Base URL`,placeholder:`e.g., http://localhost:11434`,description:`The URL of your local Ollama instance`}}},messages:{config:{edited:`Ollama settings have been updated`,notEdited:`Failed to update Ollama settings`}},texts:{aboutApiSettings:`Configure your local Ollama instance settings. Ollama runs locally and does not require an API key. Make sure Ollama is running and accessible at the configured URL.`}},"es-ES":{headings:{aboutApiSettings:`Configuración de Ollama`},fields:{config:{enabled:{title:`Habilitado`},model:{title:`Modelo`,placeholder:`p. ej., llama3, mistral, codellama`,description:`El modelo de Ollama a utilizar para generar respuestas`},baseUrl:{title:`URL base`,placeholder:`p. ej., http://localhost:11434`,description:`La URL de su instancia local de Ollama`}}},messages:{config:{edited:`La configuración de Ollama ha sido actualizada`,notEdited:`Error al actualizar la configuración de Ollama`}},texts:{aboutApiSettings:`Configure los ajustes de su instancia local de Ollama. Ollama se ejecuta localmente y no requiere clave API. Asegúrese de que Ollama esté en ejecución y accesible en la URL configurada.`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia Ollama`},fields:{config:{enabled:{title:`Wlaczony`},model:{title:`Model`,placeholder:`np. llama3, mistral, codellama`,description:`Model Ollama uzywany do generowania odpowiedzi`},baseUrl:{title:`Bazowy URL`,placeholder:`np. http://localhost:11434`,description:`URL lokalnej instancji Ollama`}}},messages:{config:{edited:`Ustawienia Ollama zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien Ollama`}},texts:{aboutApiSettings:`Skonfiguruj ustawienia lokalnej instancji Ollama. Ollama dziala lokalnie i nie wymaga klucza API. Upewnij sie, ze Ollama jest uruchomiona i dostepna pod skonfigurowanym URL.`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia Ollama`},fields:{config:{enabled:{title:`Povolený`},model:{title:`Model`,placeholder:`napr. llama3, mistral, codellama`,description:`Model Ollama použitý na generovanie odpovedí`},baseUrl:{title:`Základná URL`,placeholder:`napr. http://localhost:11434`,description:`URL vašej lokálnej inštancie Ollama`}}},messages:{config:{edited:`Nastavenia Ollama boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Ollama`}},texts:{aboutApiSettings:`Nakonfigurujte nastavenia vašej lokálnej inštancie Ollama. Ollama beží lokálne a nevyžaduje API kľúč. Uistite sa, že Ollama beží a je dostupná na nakonfigurovanej URL.`}}},Fv=Ki.extend({model:X().nullable(),baseUrl:X().nullable()}),Iv=Wi.extend({model:X().trim().nullable(),baseUrl:X().trim().nullable()}),Lv=Zi.and(K({type:Y(Av),model:X().trim().nullable().optional(),base_url:X().trim().nullable().optional()}));Ri.and(K({type:Y(Av),model:X().trim().nullable(),base_url:X().trim().nullable()}));var Rv=Symbol(`FB-Plugin-BuddyOllama`),zv={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Pv)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyOllamaPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Rv,{type:Av,source:`com.fastybird.smart-panel.plugin.buddy-ollama`,name:`Ollama`,description:`LLM provider plugin for Buddy module using local Ollama inference`,links:{documentation:`https://ollama.com`,devDocumentation:`https://ollama.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:Nv},schemas:{pluginConfigSchema:Iv,pluginConfigEditFormSchema:Fv,pluginConfigUpdateReqSchema:Lv},modules:[ka]}],modules:[ka],isCore:!0})}},Bv=`buddy-openai-plugin`,Vv=[`gpt-5.2`,`gpt-5`,`gpt-5-mini`,`gpt-5-nano`,`gpt-4.1`,`o3`,`o3-pro`,`o3-mini`,`o4-mini`],Hv={class:`text-xs text-gray-500 mt-1`},Uv={class:`text-xs text-gray-500 mt-1`},Wv=k({name:`OpenAiConfigForm`,__name:`openai-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`buddyOpenaiPlugin.messages.config.edited`),error:a(`buddyOpenaiPlugin.messages.config.notEdited`)}}),f=Vv,p=P({});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`buddyOpenaiPlugin.headings.aboutApiSettings`),description:L(a)(`buddyOpenaiPlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`buddyOpenaiPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyOpenaiPlugin.fields.config.apiKey.title`),prop:`apiKey`},{default:B(()=>[D(L(Zp),{modelValue:L(s).apiKey,"onUpdate:modelValue":t[1]||=e=>L(s).apiKey=e,configured:L(s).apiKeyConfigured,placeholder:L(a)(`buddyOpenaiPlugin.fields.config.apiKey.placeholder`),name:`apiKey`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,Hv,z(L(a)(`buddyOpenaiPlugin.fields.config.apiKey.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyOpenaiPlugin.fields.config.model.title`),prop:`model`},{default:B(()=>[D(L(ei),{modelValue:L(s).model,"onUpdate:modelValue":t[2]||=e=>L(s).model=e,placeholder:L(a)(`buddyOpenaiPlugin.fields.config.model.placeholder`),filterable:``,"allow-create":``,"default-first-option":``,class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),l(`div`,Uv,z(L(a)(`buddyOpenaiPlugin.fields.config.model.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Gv={"cs-CZ":{headings:{aboutApiSettings:`Nastavení OpenAI API`},fields:{config:{enabled:{title:`Povoleno`},apiKey:{title:`API klíč`,placeholder:`Zadejte svůj OpenAI API klíč`,description:`Získejte svůj API klíč na platform.openai.com`},model:{title:`Model`,placeholder:`např. gpt-4o, gpt-4o-mini`,description:`Model OpenAI používaný pro generování odpovědí`}}},messages:{config:{edited:`Nastavení OpenAI bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení OpenAI`}},texts:{aboutApiSettings:`Nakonfigurujte nastavení OpenAI API. Pro použití modelů OpenAI jako poskytovatele LLM potřebujete platný API klíč.`}},"de-DE":{headings:{aboutApiSettings:`OpenAI API-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},apiKey:{title:`API-Schlüssel`,placeholder:`Geben Sie Ihren OpenAI API-Schlüssel ein`,description:`Holen Sie sich Ihren API-Schlüssel von platform.openai.com`},model:{title:`Modell`,placeholder:`z.B. gpt-4o, gpt-4o-mini`,description:`Das OpenAI-Modell, das für die Generierung von Antworten verwendet wird`}}},messages:{config:{edited:`OpenAI-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der OpenAI-Einstellungen fehlgeschlagen`}},texts:{aboutApiSettings:`Konfigurieren Sie Ihre OpenAI API-Einstellungen. Sie benötigen einen gültigen API-Schlüssel, um OpenAI-Modelle als Buddy-LLM-Anbieter zu verwenden.`}},"en-US":{headings:{aboutApiSettings:`OpenAI API settings`},fields:{config:{enabled:{title:`Enabled`},apiKey:{title:`API key`,placeholder:`Enter your OpenAI API key`,description:`Get your API key from platform.openai.com`},model:{title:`Model`,placeholder:`e.g., gpt-4o, gpt-4o-mini`,description:`The OpenAI model to use for generating responses`}}},messages:{config:{edited:`OpenAI settings have been updated`,notEdited:`Failed to update OpenAI settings`}},texts:{aboutApiSettings:`Configure your OpenAI API settings. You need a valid API key to use OpenAI models as the buddy LLM provider.`}},"es-ES":{headings:{aboutApiSettings:`Configuración de la API de OpenAI`},fields:{config:{enabled:{title:`Habilitado`},apiKey:{title:`Clave API`,placeholder:`Introduzca su clave API de OpenAI`,description:`Obtenga su clave API en platform.openai.com`},model:{title:`Modelo`,placeholder:`p. ej., gpt-4o, gpt-4o-mini`,description:`El modelo de OpenAI a utilizar para generar respuestas`}}},messages:{config:{edited:`La configuración de OpenAI ha sido actualizada`,notEdited:`Error al actualizar la configuración de OpenAI`}},texts:{aboutApiSettings:`Configure los ajustes de la API de OpenAI. Necesita una clave API válida para utilizar los modelos de OpenAI como proveedor LLM del asistente.`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia API OpenAI`},fields:{config:{enabled:{title:`Wlaczony`},apiKey:{title:`Klucz API`,placeholder:`Wprowadz klucz API OpenAI`,description:`Pobierz klucz API z platform.openai.com`},model:{title:`Model`,placeholder:`np. gpt-4o, gpt-4o-mini`,description:`Model OpenAI uzywany do generowania odpowiedzi`}}},messages:{config:{edited:`Ustawienia OpenAI zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien OpenAI`}},texts:{aboutApiSettings:`Skonfiguruj ustawienia API OpenAI. Potrzebujesz prawidlowego klucza API, aby uzyc modeli OpenAI jako dostawcy LLM buddy.`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia API OpenAI`},fields:{config:{enabled:{title:`Povolený`},apiKey:{title:`API kľúč`,placeholder:`Zadajte svoj API kľúč OpenAI`,description:`Získajte svoj API kľúč z platform.openai.com`},model:{title:`Model`,placeholder:`napr. gpt-4o, gpt-4o-mini`,description:`Model OpenAI použitý na generovanie odpovedí`}}},messages:{config:{edited:`Nastavenia OpenAI boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia OpenAI`}},texts:{aboutApiSettings:`Nakonfigurujte nastavenia API OpenAI. Na používanie modelov OpenAI ako poskytovateľa LLM buddy potrebujete platný API kľúč.`}}},Kv=Ki.extend({apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),model:X().nullable()}),qv=Wi.extend({apiKey:X().trim().nullable().optional(),apiKeyConfigured:J().default(!1),model:X().trim().nullable()}),Jv=Zi.and(K({type:Y(Bv),api_key:X().trim().nullable().optional(),model:X().trim().nullable().optional()}));Ri.and(K({type:Y(Bv),api_key:X().trim().nullable().optional(),api_key_configured:J(),model:X().trim().nullable()}));var Yv=Symbol(`FB-Plugin-BuddyOpenai`),Xv={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Gv)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyOpenaiPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Yv,{type:Bv,source:`com.fastybird.smart-panel.plugin.buddy-openai`,name:`OpenAI`,description:`LLM provider plugin for Buddy module using OpenAI API (GPT models)`,links:{documentation:`https://platform.openai.com/docs`,devDocumentation:`https://platform.openai.com/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:Wv},schemas:{pluginConfigSchema:qv,pluginConfigEditFormSchema:Kv,pluginConfigUpdateReqSchema:Jv},modules:[ka]}],modules:[ka],isCore:!0})}},Zv=`buddy-openai-codex`,Qv=`buddy-openai-codex-plugin`,$v=[`codex-mini-latest`,`gpt-5.3-codex`,`gpt-5.2-codex`,`gpt-5-codex`,`gpt-5-codex-mini`],ey={class:`mt-3 mb-4`},ty={class:`flex items-center gap-3`},ny={class:`list-decimal list-inside m-0 p-0 text-xs leading-relaxed`},ry={class:`mt-3`},iy={class:`mt-3`},ay={class:`mt-2`},oy={class:`text-xs text-gray-500 mt-1`},sy={class:`text-xs text-gray-500 mt-1`},cy=k({name:`OpenAiCodexConfigForm`,__name:`openai-codex-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),s=Zn(),c=pn().getStore(Dn),{formEl:u,model:d,formChanged:f,submit:m,formResult:h,markSaved:g}=Xi({config:n.config,messages:{success:a(`buddyOpenaiCodexPlugin.messages.config.edited`),error:a(`buddyOpenaiCodexPlugin.messages.config.notEdited`)}}),_=$v,v=P({}),y=j(null),b=j(``),x=j(!1),S=j(!1),C=p(()=>!!(d.accessTokenConfigured||d.refreshTokenConfigured||d.accessToken||d.refreshToken)),w=async()=>{let e=d.accessToken,t=d.refreshToken,n=d.accessTokenConfigured,r=d.refreshTokenConfigured;d.accessToken=null,d.refreshToken=null,d.accessTokenConfigured=!1,d.refreshTokenConfigured=!1,y.value=null,b.value=``;try{await m(),g()}catch{d.accessToken=e,d.refreshToken=t,d.accessTokenConfigured=n,d.refreshTokenConfigured=r}},T=async()=>{x.value=!0,y.value=null,b.value=``;try{if(!d.clientId){o.error(a(`buddyOpenaiCodexPlugin.messages.oauth.missingClientId`));return}let e=d.clientId,t=(await s.client.GET(`/${Ie}/${Zv}/oauth/authorize`,{params:{query:{client_id:e}}})).data;if(!t)throw Error(`Failed to get authorization URL`);y.value=t.data.authorize_url}catch(e){o.error(e instanceof Error?e.message:a(`buddyOpenaiCodexPlugin.messages.oauth.authorizeError`))}finally{x.value=!1}},ee=async()=>{if(y.value)try{await navigator.clipboard.writeText(y.value)}catch{}},te=()=>{y.value&&window.open(y.value,`_blank`)},ne=async()=>{if(b.value){S.value=!0;try{let e=(await s.client.POST(`/${Ie}/${Zv}/oauth/exchange`,{body:{callback_url:b.value}})).data;if(!e||!e.data.success)throw Error(e?.data?.error||a(`buddyOpenaiCodexPlugin.messages.oauth.exchangeError`));let t=await c.get({type:Qv});t&&(t.clientId&&(d.clientId=t.clientId),t.accessToken&&(d.accessToken=t.accessToken),t.refreshToken&&(d.refreshToken=t.refreshToken),typeof t.accessTokenConfigured==`boolean`&&(d.accessTokenConfigured=t.accessTokenConfigured),typeof t.refreshTokenConfigured==`boolean`&&(d.refreshTokenConfigured=t.refreshTokenConfigured)),await m(),g(),y.value=null,b.value=``}catch(e){o.error(e instanceof Error?e.message:a(`buddyOpenaiCodexPlugin.messages.oauth.exchangeError`))}finally{S.value=!1}}};return F(()=>h.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),m().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!u.value)return;u.value.resetFields()}}),F(()=>f.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:u,model:L(d),rules:v,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`buddyOpenaiCodexPlugin.headings.aboutApiSettings`),description:L(a)(`buddyOpenaiCodexPlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`buddyOpenaiCodexPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(d).enabled,"onUpdate:modelValue":t[0]||=e=>L(d).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),l(`div`,ey,[l(`div`,ty,[C.value?(A(),i(V,{key:1},[D(L(Oe),{type:`danger`,onClick:w},{default:B(()=>[E(z(L(a)(`buddyOpenaiCodexPlugin.buttons.disconnect`)),1)]),_:1}),D(L(Xt),{type:`success`,effect:`light`},{default:B(()=>[E(z(L(a)(`buddyOpenaiCodexPlugin.statuses.connected`)),1)]),_:1})],64)):(A(),i(V,{key:0},[D(L(Oe),{type:`primary`,loading:x.value,onClick:T},{default:B(()=>[E(z(L(a)(`buddyOpenaiCodexPlugin.buttons.getUrl`)),1)]),_:1},8,[`loading`]),D(L(Xt),{type:`info`,effect:`light`},{default:B(()=>[E(z(L(a)(`buddyOpenaiCodexPlugin.statuses.notConnected`)),1)]),_:1})],64))]),!C.value&&y.value?(A(),i(V,{key:0},[D(L(Q),{type:`info`,closable:!1,"show-icon":``,class:`mt-2!`},{default:B(()=>[l(`ol`,ny,[l(`li`,null,z(L(a)(`buddyOpenaiCodexPlugin.texts.oauthStep1`)),1),l(`li`,null,z(L(a)(`buddyOpenaiCodexPlugin.texts.oauthStep2`)),1),l(`li`,null,z(L(a)(`buddyOpenaiCodexPlugin.texts.oauthStep3`)),1),l(`li`,null,z(L(a)(`buddyOpenaiCodexPlugin.texts.oauthStep4`)),1)])]),_:1}),l(`div`,ry,[D(L(U),{"model-value":y.value,readonly:``},{append:B(()=>[D(L(Oe),{onClick:ee},{default:B(()=>[E(z(L(a)(`buddyOpenaiCodexPlugin.buttons.copyUrl`)),1)]),_:1}),D(L(Oe),{onClick:te},{default:B(()=>[E(z(L(a)(`buddyOpenaiCodexPlugin.buttons.openUrl`)),1)]),_:1})]),_:1},8,[`model-value`])]),l(`div`,iy,[D(L(U),{modelValue:b.value,"onUpdate:modelValue":t[1]||=e=>b.value=e,placeholder:L(a)(`buddyOpenaiCodexPlugin.fields.config.callbackUrl.placeholder`)},null,8,[`modelValue`,`placeholder`])]),l(`div`,ay,[D(L(Oe),{type:`success`,loading:S.value,disabled:!b.value,onClick:ne},{default:B(()=>[E(z(S.value?L(a)(`buddyOpenaiCodexPlugin.buttons.exchanging`):L(a)(`buddyOpenaiCodexPlugin.buttons.exchange`)),1)]),_:1},8,[`loading`,`disabled`])])],64)):R(``,!0)]),D(L(Z),{label:L(a)(`buddyOpenaiCodexPlugin.fields.config.clientId.title`),prop:`clientId`},{default:B(()=>[D(L(U),{modelValue:L(d).clientId,"onUpdate:modelValue":t[2]||=e=>L(d).clientId=e,placeholder:L(a)(`buddyOpenaiCodexPlugin.fields.config.clientId.placeholder`),name:`clientId`},null,8,[`modelValue`,`placeholder`]),l(`div`,oy,z(L(a)(`buddyOpenaiCodexPlugin.fields.config.clientId.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyOpenaiCodexPlugin.fields.config.model.title`),prop:`model`},{default:B(()=>[D(L(ei),{modelValue:L(d).model,"onUpdate:modelValue":t[3]||=e=>L(d).model=e,placeholder:L(a)(`buddyOpenaiCodexPlugin.fields.config.model.placeholder`),filterable:``,"allow-create":``,"default-first-option":``,class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(L(_),e=>(A(),O(L(ti),{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),l(`div`,sy,z(L(a)(`buddyOpenaiCodexPlugin.fields.config.model.description`)),1)]),_:1},8,[`label`]),D(L(ui),{class:`mt-3`},{default:B(()=>[D(L(li),{title:L(a)(`buddyOpenaiCodexPlugin.headings.advancedSettings`)},{default:B(()=>[D(L(Z),{label:L(a)(`buddyOpenaiCodexPlugin.fields.config.clientSecret.title`),prop:`clientSecret`},{default:B(()=>[D(L(Zp),{modelValue:L(d).clientSecret,"onUpdate:modelValue":t[4]||=e=>L(d).clientSecret=e,configured:L(d).clientSecretConfigured,placeholder:L(a)(`buddyOpenaiCodexPlugin.fields.config.clientSecret.placeholder`),name:`clientSecret`},null,8,[`modelValue`,`configured`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyOpenaiCodexPlugin.fields.config.accessToken.title`),prop:`accessToken`},{default:B(()=>[D(L(U),{modelValue:L(d).accessToken,"onUpdate:modelValue":t[5]||=e=>L(d).accessToken=e,placeholder:L(a)(`buddyOpenaiCodexPlugin.fields.config.accessToken.placeholder`),name:`accessToken`,type:`password`,"show-password":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`buddyOpenaiCodexPlugin.fields.config.refreshToken.title`),prop:`refreshToken`},{default:B(()=>[D(L(U),{modelValue:L(d).refreshToken,"onUpdate:modelValue":t[6]||=e=>L(d).refreshToken=e,placeholder:L(a)(`buddyOpenaiCodexPlugin.fields.config.refreshToken.placeholder`),name:`refreshToken`,type:`password`,"show-password":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`title`])]),_:1})]),_:1},8,[`model`,`rules`]))}}),ly={"cs-CZ":{headings:{aboutApiSettings:`Nastavení OpenAI Codex`,advancedSettings:`Pokročilá nastavení`},fields:{config:{enabled:{title:`Povoleno`},clientId:{title:`ID klienta`,placeholder:`Zadejte své OAuth ID klienta`,description:`OAuth ID klienta pro OpenAI Codex API`},clientSecret:{title:`Tajný klíč klienta`,placeholder:`Zadejte svůj OAuth tajný klíč klienta`},accessToken:{title:`Přístupový token`,placeholder:`Zadejte svůj přístupový token`},refreshToken:{title:`Obnovovací token`,placeholder:`Zadejte svůj obnovovací token`},model:{title:`Model`,placeholder:`např. codex-mini`,description:`Model OpenAI Codex používaný pro generování odpovědí`},callbackUrl:{placeholder:`Vložte URL přesměrování sem...`}}},buttons:{getUrl:`Získat autorizační URL`,copyUrl:`Kopírovat`,openUrl:`Otevřít v prohlížeči`,exchange:`Vyměnit token`,exchanging:`Probíhá výměna...`,disconnect:`Odpojit`},statuses:{connected:`Připojeno`,notConnected:`Nepřipojeno`},messages:{config:{edited:`Nastavení OpenAI Codex bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení OpenAI Codex`},oauth:{urlCopied:`URL zkopírována do schránky`,missingClientId:`Zadejte prosím ID klienta před zahájením OAuth procesu`,authorizeError:`Nepodařilo se získat autorizační URL`,exchangeSuccess:`Výměna tokenu úspěšná`,exchangeError:`Výměna tokenu selhala`}},texts:{aboutApiSettings:`Nakonfigurujte nastavení OAuth pro OpenAI Codex. Klikněte na "Získat autorizační URL" pro zahájení OAuth procesu, nebo rozbalte Pokročilá nastavení pro ruční zadání tokenů.`,oauthStep1:`Klikněte na "Získat autorizační URL" výše`,oauthStep2:`Otevřete URL v prohlížeči a autorizujte`,oauthStep3:`Zkopírujte URL přesměrování z prohlížeče po autorizaci`,oauthStep4:`Vložte ji níže a klikněte na "Vyměnit token"`}},"de-DE":{headings:{aboutApiSettings:`OpenAI Codex-Einstellungen`,advancedSettings:`Erweiterte Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},clientId:{title:`Client-ID`,placeholder:`Geben Sie Ihre OAuth Client-ID ein`,description:`Die OAuth Client-ID für die OpenAI Codex API`},clientSecret:{title:`Client-Geheimnis`,placeholder:`Geben Sie Ihr OAuth Client-Geheimnis ein`},accessToken:{title:`Zugriffstoken`,placeholder:`Geben Sie Ihren Zugriffstoken ein`},refreshToken:{title:`Aktualisierungstoken`,placeholder:`Geben Sie Ihren Aktualisierungstoken ein`},model:{title:`Modell`,placeholder:`z.B. codex-mini`,description:`Das OpenAI Codex-Modell, das für die Generierung von Antworten verwendet wird`},callbackUrl:{placeholder:`Fügen Sie hier die Weiterleitungs-URL ein...`}}},buttons:{getUrl:`Autorisierungs-URL abrufen`,copyUrl:`Kopieren`,openUrl:`Im Browser öffnen`,exchange:`Token austauschen`,exchanging:`Wird ausgetauscht...`,disconnect:`Trennen`},statuses:{connected:`Verbunden`,notConnected:`Nicht verbunden`},messages:{config:{edited:`OpenAI Codex-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der OpenAI Codex-Einstellungen fehlgeschlagen`},oauth:{urlCopied:`URL in Zwischenablage kopiert`,missingClientId:`Bitte geben Sie eine Client-ID ein, bevor Sie den OAuth-Ablauf starten`,authorizeError:`Autorisierungs-URL konnte nicht abgerufen werden`,exchangeSuccess:`Token-Austausch erfolgreich`,exchangeError:`Token-Austausch fehlgeschlagen`}},texts:{aboutApiSettings:`Konfigurieren Sie Ihre OpenAI Codex OAuth-Einstellungen. Klicken Sie auf "Autorisierungs-URL abrufen", um den OAuth-Ablauf zu starten, oder erweitern Sie die erweiterten Einstellungen, um Token manuell einzugeben.`,oauthStep1:`Klicken Sie oben auf "Autorisierungs-URL abrufen"`,oauthStep2:`Öffnen Sie die URL in Ihrem Browser und autorisieren Sie`,oauthStep3:`Kopieren Sie die Weiterleitungs-URL aus Ihrem Browser nach der Autorisierung`,oauthStep4:`Fügen Sie sie unten ein und klicken Sie auf "Token austauschen"`}},"en-US":{headings:{aboutApiSettings:`OpenAI Codex settings`,advancedSettings:`Advanced settings`},fields:{config:{enabled:{title:`Enabled`},clientId:{title:`Client ID`,placeholder:`Enter your OAuth client ID`,description:`The OAuth client ID for OpenAI Codex API`},clientSecret:{title:`Client secret`,placeholder:`Enter your OAuth client secret`},accessToken:{title:`Access token`,placeholder:`Enter your access token`},refreshToken:{title:`Refresh token`,placeholder:`Enter your refresh token`},model:{title:`Model`,placeholder:`e.g., codex-mini`,description:`The OpenAI Codex model to use for generating responses`},callbackUrl:{placeholder:`Paste the redirect URL here...`}}},buttons:{getUrl:`Get Authorization URL`,copyUrl:`Copy`,openUrl:`Open in Browser`,exchange:`Exchange Token`,exchanging:`Exchanging...`,disconnect:`Disconnect`},statuses:{connected:`Connected`,notConnected:`Not connected`},messages:{config:{edited:`OpenAI Codex settings have been updated`,notEdited:`Failed to update OpenAI Codex settings`},oauth:{urlCopied:`URL copied to clipboard`,missingClientId:`Please enter a Client ID before starting the OAuth flow`,authorizeError:`Failed to get authorization URL`,exchangeSuccess:`Token exchange successful`,exchangeError:`Token exchange failed`}},texts:{aboutApiSettings:`Configure your OpenAI Codex OAuth settings. Click "Get Authorization URL" to start the OAuth flow, or expand Advanced Settings to enter tokens manually.`,oauthStep1:`Click "Get Authorization URL" above`,oauthStep2:`Open the URL in your browser and authorize`,oauthStep3:`Copy the redirect URL from your browser after authorization`,oauthStep4:`Paste it below and click "Exchange Token"`}},"es-ES":{headings:{aboutApiSettings:`Configuración de OpenAI Codex`,advancedSettings:`Configuración avanzada`},fields:{config:{enabled:{title:`Habilitado`},clientId:{title:`ID de cliente`,placeholder:`Introduzca su ID de cliente OAuth`,description:`El ID de cliente OAuth para la API de OpenAI Codex`},clientSecret:{title:`Secreto de cliente`,placeholder:`Introduzca su secreto de cliente OAuth`},accessToken:{title:`Token de acceso`,placeholder:`Introduzca su token de acceso`},refreshToken:{title:`Token de actualización`,placeholder:`Introduzca su token de actualización`},model:{title:`Modelo`,placeholder:`p. ej., codex-mini`,description:`El modelo de OpenAI Codex a utilizar para generar respuestas`},callbackUrl:{placeholder:`Pegue la URL de redirección aquí...`}}},buttons:{getUrl:`Obtener URL de autorización`,copyUrl:`Copiar`,openUrl:`Abrir en el navegador`,exchange:`Intercambiar token`,exchanging:`Intercambiando...`,disconnect:`Desconectar`},statuses:{connected:`Conectado`,notConnected:`No conectado`},messages:{config:{edited:`La configuración de OpenAI Codex se ha actualizado`,notEdited:`No se pudo actualizar la configuración de OpenAI Codex`},oauth:{urlCopied:`URL copiada al portapapeles`,missingClientId:`Por favor, introduzca un ID de cliente antes de iniciar el flujo OAuth`,authorizeError:`No se pudo obtener la URL de autorización`,exchangeSuccess:`Intercambio de token exitoso`,exchangeError:`El intercambio de token falló`}},texts:{aboutApiSettings:`Configure los ajustes de OAuth de OpenAI Codex. Haga clic en "Obtener URL de autorización" para iniciar el flujo OAuth, o expanda la configuración avanzada para introducir los tokens manualmente.`,oauthStep1:`Haga clic en "Obtener URL de autorización" arriba`,oauthStep2:`Abra la URL en su navegador y autorice`,oauthStep3:`Copie la URL de redirección de su navegador después de la autorización`,oauthStep4:`Péguela a continuación y haga clic en "Intercambiar token"`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia OpenAI Codex`,advancedSettings:`Ustawienia zaawansowane`},fields:{config:{enabled:{title:`Wlaczony`},clientId:{title:`ID klienta`,placeholder:`Wprowadz ID klienta OAuth`,description:`ID klienta OAuth dla API OpenAI Codex`},clientSecret:{title:`Sekret klienta`,placeholder:`Wprowadz sekret klienta OAuth`},accessToken:{title:`Token dostepu`,placeholder:`Wprowadz token dostepu`},refreshToken:{title:`Token odswiezania`,placeholder:`Wprowadz token odswiezania`},model:{title:`Model`,placeholder:`np. codex-mini`,description:`Model OpenAI Codex uzywany do generowania odpowiedzi`},callbackUrl:{placeholder:`Wklej URL przekierowania tutaj...`}}},buttons:{getUrl:`Pobierz URL autoryzacji`,copyUrl:`Kopiuj`,openUrl:`Otworz w przegladarce`,exchange:`Wymien token`,exchanging:`Wymiana...`,disconnect:`Rozlacz`},statuses:{connected:`Polaczony`,notConnected:`Nie polaczony`},messages:{config:{edited:`Ustawienia OpenAI Codex zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien OpenAI Codex`},oauth:{urlCopied:`URL skopiowany do schowka`,missingClientId:`Prosze wprowadzic ID klienta przed rozpoczeciem procesu OAuth`,authorizeError:`Nie udalo sie pobrac URL autoryzacji`,exchangeSuccess:`Wymiana tokenu udana`,exchangeError:`Wymiana tokenu nie powiodla sie`}},texts:{aboutApiSettings:`Skonfiguruj ustawienia OAuth OpenAI Codex. Kliknij "Pobierz URL autoryzacji", aby rozpoczac proces OAuth, lub rozwin Ustawienia zaawansowane, aby wprowadzic tokeny recznie.`,oauthStep1:`Kliknij "Pobierz URL autoryzacji" powyzej`,oauthStep2:`Otworz URL w przegladarce i autoryzuj`,oauthStep3:`Skopiuj URL przekierowania z przegladarki po autoryzacji`,oauthStep4:`Wklej go ponizej i kliknij "Wymien token"`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia OpenAI Codex`,advancedSettings:`Pokročilé nastavenia`},fields:{config:{enabled:{title:`Povolený`},clientId:{title:`ID klienta`,placeholder:`Zadajte svoj OAuth client ID`,description:`OAuth client ID pre OpenAI Codex API`},clientSecret:{title:`Tajomstvo klienta`,placeholder:`Zadajte svoj OAuth client secret`},accessToken:{title:`Prístupový token`,placeholder:`Zadajte svoj prístupový token`},refreshToken:{title:`Obnovovací token`,placeholder:`Zadajte svoj obnovovací token`},model:{title:`Model`,placeholder:`napr. codex-mini`,description:`Model OpenAI Codex použitý na generovanie odpovedí`},callbackUrl:{placeholder:`Vložte sem URL presmerovanie...`}}},buttons:{getUrl:`Získať autorizačnú URL`,copyUrl:`Kopírovať`,openUrl:`Otvoriť v prehliadači`,exchange:`Vymeniť token`,exchanging:`Prebieha výmena...`,disconnect:`Odpojiť`},statuses:{connected:`Pripojený`,notConnected:`Nepripojený`},messages:{config:{edited:`Nastavenia OpenAI Codex boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia OpenAI Codex`},oauth:{urlCopied:`URL skopírovaná do schránky`,missingClientId:`Pred spustením OAuth procesu zadajte Client ID`,authorizeError:`Nepodarilo sa získať autorizačnú URL`,exchangeSuccess:`Výmena tokenu bola úspešná`,exchangeError:`Výmena tokenu zlyhala`}},texts:{aboutApiSettings:`Nakonfigurujte nastavenia OAuth OpenAI Codex. Kliknite na "Získať autorizačnú URL" na spustenie OAuth procesu, alebo rozbaľte Pokročilé nastavenia na manuálne zadanie tokenov.`,oauthStep1:`Kliknite na "Získať autorizačnú URL" vyššie`,oauthStep2:`Otvorte URL vo svojom prehliadači a autorizujte`,oauthStep3:`Po autorizácii skopírujte URL presmerovanie z prehliadača`,oauthStep4:`Vložte ju nižšie a kliknite na "Vymeniť token"`}}},uy=Ki.extend({clientId:X().nullable(),clientSecret:X().nullable().optional(),accessToken:X().nullable().optional(),refreshToken:X().nullable().optional(),clientSecretConfigured:J().optional(),accessTokenConfigured:J().optional(),refreshTokenConfigured:J().optional(),model:X().nullable()}),dy=Wi.extend({clientId:X().trim().nullable(),clientSecret:X().trim().nullable().optional(),clientSecretConfigured:J().default(!1),accessToken:X().trim().nullable().optional(),accessTokenConfigured:J().default(!1),refreshToken:X().trim().nullable().optional(),refreshTokenConfigured:J().default(!1),model:X().trim().nullable()}),fy=Zi.and(K({type:Y(Qv),client_id:X().trim().nullable().optional(),client_secret:X().trim().nullable().optional(),access_token:X().trim().nullable().optional(),refresh_token:X().trim().nullable().optional(),model:X().trim().nullable().optional()}));Ri.and(K({type:Y(Qv),client_id:X().trim().nullable(),client_secret:X().trim().nullable().optional(),client_secret_configured:J(),access_token:X().trim().nullable().optional(),access_token_configured:J(),refresh_token:X().trim().nullable().optional(),refresh_token_configured:J(),model:X().trim().nullable()}));var py=Symbol(`FB-Plugin-BuddyOpenaiCodex`),my={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(ly)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyOpenaiCodexPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(py,{type:Qv,source:`com.fastybird.smart-panel.plugin.buddy-openai-codex`,name:`OpenAI Codex`,description:`LLM provider plugin for Buddy module using OpenAI Codex with OAuth authentication`,links:{documentation:`https://platform.openai.com/docs`,devDocumentation:`https://platform.openai.com/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:cy},schemas:{pluginConfigSchema:dy,pluginConfigEditFormSchema:uy,pluginConfigUpdateReqSchema:fy},modules:[ka]}],modules:[ka],isCore:!0})}},hy=`buddy-stt-whisper-local-plugin`,gy={class:`text-xs text-gray-500 mt-1`},_y={class:`text-xs text-gray-500 mt-1`},vy=k({name:`SttWhisperLocalConfigForm`,__name:`stt-whisper-local-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`buddySttWhisperLocalPlugin.messages.config.edited`),error:i(`buddySttWhisperLocalPlugin.messages.config.notEdited`)}}),d=P({});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`buddySttWhisperLocalPlugin.headings.aboutSettings`),description:L(i)(`buddySttWhisperLocalPlugin.texts.aboutSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`buddySttWhisperLocalPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddySttWhisperLocalPlugin.fields.config.model.title`),prop:`model`},{default:B(()=>[D(L(U),{modelValue:L(o).model,"onUpdate:modelValue":t[1]||=e=>L(o).model=e,placeholder:L(i)(`buddySttWhisperLocalPlugin.fields.config.model.placeholder`),name:`model`,clearable:``},null,8,[`modelValue`,`placeholder`]),l(`div`,gy,z(L(i)(`buddySttWhisperLocalPlugin.fields.config.model.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddySttWhisperLocalPlugin.fields.config.language.title`),prop:`language`},{default:B(()=>[D(L(U),{modelValue:L(o).language,"onUpdate:modelValue":t[2]||=e=>L(o).language=e,placeholder:L(i)(`buddySttWhisperLocalPlugin.fields.config.language.placeholder`),name:`language`,clearable:``},null,8,[`modelValue`,`placeholder`]),l(`div`,_y,z(L(i)(`buddySttWhisperLocalPlugin.fields.config.language.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),yy={"cs-CZ":{headings:{aboutSettings:`Nastavení lokálního Whisper`},fields:{config:{enabled:{title:`Povoleno`},model:{title:`Model`,placeholder:`báze`,description:`Velikost modelu Whisper: tiny, base, small, medium nebo large`},language:{title:`Nápověda jazyka`,placeholder:`např. en, de, cs (volitelné)`,description:`Kód jazyka ISO 639-1 pro zlepšení přesnosti přepisu`}}},messages:{config:{edited:`Nastavení lokálního Whisper bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení lokálního Whisper`}},texts:{aboutSettings:`Nakonfigurujte lokální Whisper pro převod řeči na text. Není vyžadován API klíč. Příkaz whisper musí být nainstalován a dostupný v systémové PATH.`}},"de-DE":{headings:{aboutSettings:`Lokale Whisper-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},model:{title:`Modell`,placeholder:`Base`,description:`Whisper-Modellgröße: tiny, base, small, medium oder large`},language:{title:`Sprachhinweis`,placeholder:`z.B. en, de, cs (optional)`,description:`ISO 639-1 Sprachcode zur Verbesserung der Transkriptionsgenauigkeit`}}},messages:{config:{edited:`Lokale Whisper-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der lokalen Whisper-Einstellungen fehlgeschlagen`}},texts:{aboutSettings:`Konfigurieren Sie die lokale Whisper Speech-to-Text-Funktion. Kein API-Schlüssel erforderlich. Der whisper-Befehl muss installiert und im System-PATH verfügbar sein.`}},"en-US":{headings:{aboutSettings:`Local Whisper settings`},fields:{config:{enabled:{title:`Enabled`},model:{title:`Model`,placeholder:`base`,description:`Whisper model size: tiny, base, small, medium, or large`},language:{title:`Language hint`,placeholder:`e.g. en, de, cs (optional)`,description:`ISO 639-1 language code to improve transcription accuracy`}}},messages:{config:{edited:`Local Whisper settings have been updated`,notEdited:`Failed to update local Whisper settings`}},texts:{aboutSettings:`Configure local Whisper speech-to-text. No API key required. The whisper command must be installed and available in the system PATH.`}},"es-ES":{headings:{aboutSettings:`Configuración de Whisper local`},fields:{config:{enabled:{title:`Habilitado`},model:{title:`Modelo`,placeholder:`base`,description:`Tamaño del modelo Whisper: tiny, base, small, medium o large`},language:{title:`Indicación de idioma`,placeholder:`p. ej., en, de, cs (opcional)`,description:`Código de idioma ISO 639-1 para mejorar la precisión de la transcripción`}}},messages:{config:{edited:`La configuración de Whisper local ha sido actualizada`,notEdited:`Error al actualizar la configuración de Whisper local`}},texts:{aboutSettings:`Configure la conversión de voz a texto con Whisper local. No se requiere clave API. El comando whisper debe estar instalado y disponible en el PATH del sistema.`}},"pl-PL":{headings:{aboutSettings:`Ustawienia lokalnego Whisper`},fields:{config:{enabled:{title:`Wlaczony`},model:{title:`Model`,placeholder:`opierać`,description:`Rozmiar modelu Whisper: tiny, base, small, medium lub large`},language:{title:`Wskazowka jezyka`,placeholder:`np. en, de, pl (opcjonalnie)`,description:`Kod jezyka ISO 639-1 dla poprawy dokladnosci transkrypcji`}}},messages:{config:{edited:`Ustawienia lokalnego Whisper zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien lokalnego Whisper`}},texts:{aboutSettings:`Skonfiguruj lokalny Whisper speech-to-text. Klucz API nie jest wymagany. Polecenie whisper musi byc zainstalowane i dostepne w systemowym PATH.`}},"sk-SK":{headings:{aboutSettings:`Nastavenia lokálneho Whisper`},fields:{config:{enabled:{title:`Povolený`},model:{title:`Model`,placeholder:`základňu`,description:`Veľkosť modelu Whisper: tiny, base, small, medium alebo large`},language:{title:`Nápoveda jazyka`,placeholder:`napr. en, de, cs (voliteľné)`,description:`Kód jazyka ISO 639-1 na zlepšenie presnosti prepisu`}}},messages:{config:{edited:`Nastavenia lokálneho Whisper boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia lokálneho Whisper`}},texts:{aboutSettings:`Nakonfigurujte lokálny Whisper speech-to-text. Nie je potrebný API kľúč. Príkaz whisper musí byť nainštalovaný a dostupný v systémovom PATH.`}}},by=Ki.extend({model:X().nullable(),language:X().nullable()}),xy=Wi.extend({model:X().trim().nullable(),language:X().trim().nullable()}),Sy=Zi.and(K({type:Y(hy),model:X().trim().nullable().optional(),language:X().trim().nullable().optional()}));Ri.and(K({type:Y(hy),model:X().trim().nullable(),language:X().trim().nullable()}));var Cy=Symbol(`FB-Plugin-BuddySttWhisperLocal`),wy={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(yy)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddySttWhisperLocalPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Cy,{type:hy,source:`com.fastybird.smart-panel.plugin.buddy-stt-whisper-local`,name:`Whisper Local`,description:`STT provider plugin for Buddy module using locally installed Whisper`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:vy},schemas:{pluginConfigSchema:xy,pluginConfigEditFormSchema:by,pluginConfigUpdateReqSchema:Sy},modules:[ka]}],modules:[ka],isCore:!0})}},Ty=`buddy-system-tts-plugin`,Ey={class:`text-xs text-gray-500 mt-1`},Dy={class:`text-xs text-gray-500 mt-1`},Oy=k({name:`SystemTtsConfigForm`,__name:`system-tts-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`buddySystemTtsPlugin.messages.config.edited`),error:i(`buddySystemTtsPlugin.messages.config.notEdited`)}}),d=P({});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`buddySystemTtsPlugin.headings.aboutSettings`),description:L(i)(`buddySystemTtsPlugin.texts.aboutSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`buddySystemTtsPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddySystemTtsPlugin.fields.config.engine.title`),prop:`engine`},{default:B(()=>[D(L(U),{modelValue:L(o).engine,"onUpdate:modelValue":t[1]||=e=>L(o).engine=e,placeholder:L(i)(`buddySystemTtsPlugin.fields.config.engine.placeholder`),name:`engine`,clearable:``},null,8,[`modelValue`,`placeholder`]),l(`div`,Ey,z(L(i)(`buddySystemTtsPlugin.fields.config.engine.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddySystemTtsPlugin.fields.config.voice.title`),prop:`voice`},{default:B(()=>[D(L(U),{modelValue:L(o).voice,"onUpdate:modelValue":t[2]||=e=>L(o).voice=e,placeholder:L(i)(`buddySystemTtsPlugin.fields.config.voice.placeholder`),name:`voice`,clearable:``},null,8,[`modelValue`,`placeholder`]),l(`div`,Dy,z(L(i)(`buddySystemTtsPlugin.fields.config.voice.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),ky={"cs-CZ":{headings:{aboutSettings:`Nastavení systémového TTS`},fields:{config:{enabled:{title:`Povoleno`},engine:{title:`Motor`,placeholder:`piper nebo espeak (automatická detekce pokud prázdné)`,description:`TTS engine k použití. Ponechte prázdné pro automatickou detekci (preferuje piper, záloha espeak)`},voice:{title:`Hlas`,placeholder:`Název hlasu nebo kód (volitelné)`,description:`Název modelu piper nebo kód hlasu espeak. Ponechte prázdné pro výchozí hlas`}}},messages:{config:{edited:`Nastavení systémového TTS bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení systémového TTS`}},texts:{aboutSettings:`Nakonfigurujte lokální engine pro převod textu na řeč. Není vyžadován API klíč. Používá piper (neurální TTS) nebo espeak (základní TTS) nainstalovaný v systému.`}},"de-DE":{headings:{aboutSettings:`System-TTS-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},engine:{title:`Motor`,placeholder:`piper oder espeak (automatisch erkannt wenn leer)`,description:`Zu verwendende TTS-Engine. Leer lassen für automatische Erkennung (bevorzugt piper, fällt auf espeak zurück)`},voice:{title:`Stimme`,placeholder:`Stimmenname oder -code (optional)`,description:`Piper-Modellname oder espeak-Stimmencode. Leer lassen für die Standardstimme`}}},messages:{config:{edited:`System-TTS-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der System-TTS-Einstellungen fehlgeschlagen`}},texts:{aboutSettings:`Konfigurieren Sie die lokale Text-to-Speech-Engine. Kein API-Schlüssel erforderlich. Verwendet piper (neuronales TTS) oder espeak (einfaches TTS), die auf dem System installiert sind.`}},"en-US":{headings:{aboutSettings:`System TTS settings`},fields:{config:{enabled:{title:`Enabled`},engine:{title:`Engine`,placeholder:`piper or espeak (auto-detected if empty)`,description:`TTS engine to use. Leave empty to auto-detect (prefers piper, falls back to espeak)`},voice:{title:`Voice`,placeholder:`Voice name or code (optional)`,description:`Piper model name or espeak voice code. Leave empty for the default voice`}}},messages:{config:{edited:`System TTS settings have been updated`,notEdited:`Failed to update system TTS settings`}},texts:{aboutSettings:`Configure the local text-to-speech engine. No API key is required. Uses piper (neural TTS) or espeak (basic TTS) installed on the system.`}},"es-ES":{headings:{aboutSettings:`Configuración de TTS del sistema`},fields:{config:{enabled:{title:`Habilitado`},engine:{title:`Motor`,placeholder:`piper o espeak (autodetectado si está vacío)`,description:`Motor TTS a utilizar. Déjelo vacío para autodetección (prefiere piper, recurre a espeak)`},voice:{title:`Voz`,placeholder:`Nombre o código de voz (opcional)`,description:`Nombre del modelo de piper o código de voz de espeak. Déjelo vacío para la voz predeterminada`}}},messages:{config:{edited:`La configuración de TTS del sistema ha sido actualizada`,notEdited:`Error al actualizar la configuración de TTS del sistema`}},texts:{aboutSettings:`Configure el motor local de texto a voz. No se requiere clave API. Utiliza piper (TTS neuronal) o espeak (TTS básico) instalado en el sistema.`}},"pl-PL":{headings:{aboutSettings:`Ustawienia systemowego TTS`},fields:{config:{enabled:{title:`Wlaczony`},engine:{title:`Silnik`,placeholder:`piper lub espeak (automatyczne wykrywanie jesli puste)`,description:`Silnik TTS do uzycia. Pozostaw puste dla automatycznego wykrywania (preferuje piper, zapasowy espeak)`},voice:{title:`Glos`,placeholder:`Nazwa glosu lub kod (opcjonalnie)`,description:`Nazwa modelu piper lub kod glosu espeak. Pozostaw puste dla domyslnego glosu`}}},messages:{config:{edited:`Ustawienia systemowego TTS zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien systemowego TTS`}},texts:{aboutSettings:`Skonfiguruj lokalny silnik text-to-speech. Klucz API nie jest wymagany. Uzywa piper (neuronowy TTS) lub espeak (podstawowy TTS) zainstalowany w systemie.`}},"sk-SK":{headings:{aboutSettings:`Nastavenia systémového TTS`},fields:{config:{enabled:{title:`Povolený`},engine:{title:`Motor`,placeholder:`piper alebo espeak (automatická detekcia ak prázdne)`,description:`TTS engine na použitie. Ponechajte prázdne na automatickú detekciu (preferuje piper, záloha espeak)`},voice:{title:`Hlas`,placeholder:`Názov hlasu alebo kód (voliteľné)`,description:`Názov modelu piper alebo kód hlasu espeak. Ponechajte prázdne pre predvolený hlas`}}},messages:{config:{edited:`Nastavenia systémového TTS boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia systémového TTS`}},texts:{aboutSettings:`Nakonfigurujte lokálny text-to-speech engine. Nie je potrebný API kľúč. Používa piper (neurónové TTS) alebo espeak (základné TTS) nainštalované v systéme.`}}},Ay=Ki.extend({engine:X().nullable(),voice:X().nullable()}),jy=Wi.extend({engine:X().trim().nullable(),voice:X().trim().nullable()}),My=Zi.and(K({type:Y(Ty),engine:X().trim().nullable().optional(),voice:X().trim().nullable().optional()}));Ri.and(K({type:Y(Ty),engine:X().trim().nullable(),voice:X().trim().nullable()}));var Ny=Symbol(`FB-Plugin-BuddySystemTts`),Py={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(ky)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddySystemTtsPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Ny,{type:Ty,source:`com.fastybird.smart-panel.plugin.buddy-system-tts`,name:`System TTS`,description:`Local TTS provider plugin for Buddy module using piper or espeak`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:Oy},schemas:{pluginConfigSchema:jy,pluginConfigEditFormSchema:Ay,pluginConfigUpdateReqSchema:My},modules:[ka]}],modules:[ka],isCore:!0})}},Fy=`buddy-telegram-plugin`,Iy={class:`text-xs text-gray-500 mt-1`},Ly={class:`text-xs text-gray-500 mt-1`},Ry=k({name:`TelegramConfigForm`,__name:`telegram-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`buddyTelegramPlugin.messages.config.edited`),error:i(`buddyTelegramPlugin.messages.config.notEdited`)}}),d=P({});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`buddyTelegramPlugin.headings.aboutTelegramSettings`),description:L(i)(`buddyTelegramPlugin.texts.aboutTelegramSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`buddyTelegramPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyTelegramPlugin.fields.config.botToken.title`),prop:`botToken`},{default:B(()=>[D(L(Zp),{modelValue:L(o).botToken,"onUpdate:modelValue":t[1]||=e=>L(o).botToken=e,configured:L(o).botTokenConfigured,placeholder:L(i)(`buddyTelegramPlugin.fields.config.botToken.placeholder`),name:`botToken`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,Iy,z(L(i)(`buddyTelegramPlugin.fields.config.botToken.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyTelegramPlugin.fields.config.allowedUserIds.title`),prop:`allowedUserIds`},{default:B(()=>[D(L(U),{modelValue:L(o).allowedUserIds,"onUpdate:modelValue":t[2]||=e=>L(o).allowedUserIds=e,placeholder:L(i)(`buddyTelegramPlugin.fields.config.allowedUserIds.placeholder`),name:`allowedUserIds`},null,8,[`modelValue`,`placeholder`]),l(`div`,Ly,z(L(i)(`buddyTelegramPlugin.fields.config.allowedUserIds.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),zy={"cs-CZ":{headings:{aboutTelegramSettings:`Nastavení Telegram bota`},fields:{config:{enabled:{title:`Povoleno`},botToken:{title:`Token bota`,placeholder:`Zadejte svůj Telegram bot token`,description:`Získejte svůj bot token od {'@'}BotFather na Telegramu`},allowedUserIds:{title:`Povolená ID uživatelů`,placeholder:`např. 123456789,987654321`,description:`Čárkou oddělená ID Telegram uživatelů povolených k interakci s botem. Ponechte prázdné pro povolení všem uživatelům.`}}},messages:{config:{edited:`Nastavení Telegram bota bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Telegram bota`}},texts:{aboutTelegramSettings:`Nakonfigurujte integraci Telegram bota. Vytvořte bota pomocí {'@'}BotFather na Telegramu pro získání bot tokenu, poté volitelně omezte přístup na konkrétní ID uživatelů.`}},"de-DE":{headings:{aboutTelegramSettings:`Telegram-Bot-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},botToken:{title:`Bot-Token`,placeholder:`Geben Sie Ihren Telegram-Bot-Token ein`,description:`Holen Sie sich Ihren Bot-Token von {'@'}BotFather auf Telegram`},allowedUserIds:{title:`Erlaubte Benutzer-IDs`,placeholder:`z.B. 123456789,987654321`,description:`Kommagetrennte Telegram-Benutzer-IDs, die mit dem Bot interagieren dürfen. Leer lassen, um allen Benutzern den Zugriff zu erlauben.`}}},messages:{config:{edited:`Telegram-Bot-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Telegram-Bot-Einstellungen fehlgeschlagen`}},texts:{aboutTelegramSettings:`Konfigurieren Sie Ihre Telegram-Bot-Integration. Erstellen Sie einen Bot über {'@'}BotFather auf Telegram, um einen Bot-Token zu erhalten, und beschränken Sie optional den Zugriff auf bestimmte Benutzer-IDs.`}},"en-US":{headings:{aboutTelegramSettings:`Telegram bot settings`},fields:{config:{enabled:{title:`Enabled`},botToken:{title:`Bot token`,placeholder:`Enter your Telegram bot token`,description:`Get your bot token from {'@'}BotFather on Telegram`},allowedUserIds:{title:`Allowed user IDs`,placeholder:`e.g., 123456789,987654321`,description:`Comma-separated Telegram user IDs allowed to interact with the bot. Leave empty to allow all users.`}}},messages:{config:{edited:`Telegram bot settings have been updated`,notEdited:`Failed to update Telegram bot settings`}},texts:{aboutTelegramSettings:`Configure your Telegram bot integration. Create a bot via {'@'}BotFather on Telegram to get a bot token, then optionally restrict access to specific user IDs.`}},"es-ES":{headings:{aboutTelegramSettings:`Configuración del bot de Telegram`},fields:{config:{enabled:{title:`Habilitado`},botToken:{title:`Token del bot`,placeholder:`Introduzca el token de su bot de Telegram`,description:`Obtenga el token de su bot de {'@'}BotFather en Telegram`},allowedUserIds:{title:`IDs de usuarios permitidos`,placeholder:`p. ej., 123456789,987654321`,description:`IDs de usuario de Telegram separados por comas que pueden interactuar con el bot. Déjelo vacío para permitir a todos los usuarios.`}}},messages:{config:{edited:`La configuración del bot de Telegram ha sido actualizada`,notEdited:`Error al actualizar la configuración del bot de Telegram`}},texts:{aboutTelegramSettings:`Configure la integración de su bot de Telegram. Cree un bot a través de {'@'}BotFather en Telegram para obtener un token de bot y, opcionalmente, restrinja el acceso a IDs de usuario específicos.`}},"pl-PL":{headings:{aboutTelegramSettings:`Ustawienia bota Telegram`},fields:{config:{enabled:{title:`Wlaczony`},botToken:{title:`Token bota`,placeholder:`Wprowadz token bota Telegram`,description:`Pobierz token bota od {'@'}BotFather na Telegramie`},allowedUserIds:{title:`Dozwolone ID uzytkownikow`,placeholder:`np. 123456789,987654321`,description:`Rozdzielone przecinkami ID uzytkownikow Telegram uprawnionych do interakcji z botem. Pozostaw puste, aby zezwolic wszystkim uzytkownikom.`}}},messages:{config:{edited:`Ustawienia bota Telegram zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien bota Telegram`}},texts:{aboutTelegramSettings:`Skonfiguruj integracje z botem Telegram. Utworz bota przez {'@'}BotFather na Telegramie, aby uzyskac token bota, a nastepnie opcjonalnie ogranicz dostep do konkretnych ID uzytkownikow.`}},"sk-SK":{headings:{aboutTelegramSettings:`Nastavenia Telegram bota`},fields:{config:{enabled:{title:`Povolený`},botToken:{title:`Token bota`,placeholder:`Zadajte token svojho Telegram bota`,description:`Získajte token bota od {'@'}BotFather na Telegrame`},allowedUserIds:{title:`Povolené ID používateľov`,placeholder:`napr. 123456789,987654321`,description:`Čiarkami oddelené ID Telegram používateľov, ktorí môžu interagovať s botom. Ponechajte prázdne na povolenie všetkých používateľov.`}}},messages:{config:{edited:`Nastavenia Telegram bota boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Telegram bota`}},texts:{aboutTelegramSettings:`Nakonfigurujte integráciu Telegram bota. Vytvorte bota cez {'@'}BotFather na Telegrame na získanie tokenu bota, potom voliteľne obmedzíte prístup na konkrétne ID používateľov.`}}},By=Ki.extend({botToken:X().nullable().optional(),botTokenConfigured:J().optional(),allowedUserIds:X().nullable()}),Vy=Wi.extend({botToken:X().trim().nullable().optional(),botTokenConfigured:J().default(!1),allowedUserIds:X().trim().nullable().default(null)}),Hy=Zi.and(K({type:Y(Fy),bot_token:X().trim().nullable().optional(),allowed_user_ids:X().trim().nullable().optional()})),Uy=Symbol(`FB-Plugin-BuddyTelegram`),Wy={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(zy)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyTelegramPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Uy,{type:Fy,source:`com.fastybird.smart-panel.plugin.buddy-telegram`,name:`Telegram`,description:`Telegram bot adapter plugin for Buddy module`,links:{documentation:`https://core.telegram.org/bots`,devDocumentation:`https://core.telegram.org/bots/api`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:Ry},schemas:{pluginConfigSchema:Vy,pluginConfigEditFormSchema:By,pluginConfigUpdateReqSchema:Hy},modules:[ka]}],modules:[ka],isCore:!0})}},Gy=`buddy-voiceai-plugin`,Ky={class:`text-xs text-gray-500 mt-1`},qy={class:`text-xs text-gray-500 mt-1`},Jy=k({name:`VoiceaiConfigForm`,__name:`voiceai-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`buddyVoiceaiPlugin.messages.config.edited`),error:i(`buddyVoiceaiPlugin.messages.config.notEdited`)}}),d=P({});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`buddyVoiceaiPlugin.headings.aboutApiSettings`),description:L(i)(`buddyVoiceaiPlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`buddyVoiceaiPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyVoiceaiPlugin.fields.config.apiKey.title`),prop:`apiKey`},{default:B(()=>[D(L(Zp),{modelValue:L(o).apiKey,"onUpdate:modelValue":t[1]||=e=>L(o).apiKey=e,configured:L(o).apiKeyConfigured,placeholder:L(i)(`buddyVoiceaiPlugin.fields.config.apiKey.placeholder`),name:`apiKey`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,Ky,z(L(i)(`buddyVoiceaiPlugin.fields.config.apiKey.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`buddyVoiceaiPlugin.fields.config.voiceId.title`),prop:`voiceId`},{default:B(()=>[D(L(U),{modelValue:L(o).voiceId,"onUpdate:modelValue":t[2]||=e=>L(o).voiceId=e,placeholder:L(i)(`buddyVoiceaiPlugin.fields.config.voiceId.placeholder`),name:`voiceId`,clearable:``},null,8,[`modelValue`,`placeholder`]),l(`div`,qy,z(L(i)(`buddyVoiceaiPlugin.fields.config.voiceId.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Yy={"cs-CZ":{headings:{aboutApiSettings:`Nastavení Voice.ai API`},fields:{config:{enabled:{title:`Povoleno`},apiKey:{title:`API klíč`,placeholder:`Zadejte svůj Voice.ai API klíč`,description:`Získejte svůj API klíč z panelu Voice.ai`},voiceId:{title:`ID hlasu`,placeholder:`Zadejte ID hlasu Voice.ai`,description:`ID hlasu Voice.ai používaného pro syntézu řeči. Použijte Voice.ai API pro zobrazení dostupných hlasů`}}},messages:{config:{edited:`Nastavení Voice.ai bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Voice.ai`}},texts:{aboutApiSettings:`Nakonfigurujte nastavení Voice.ai API. Pro použití Voice.ai jako poskytovatele TTS potřebujete platný API klíč a ID hlasu.`}},"de-DE":{headings:{aboutApiSettings:`Voice.ai API-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},apiKey:{title:`API-Schlüssel`,placeholder:`Geben Sie Ihren Voice.ai API-Schlüssel ein`,description:`Holen Sie sich Ihren API-Schlüssel aus Ihrem Voice.ai-Dashboard`},voiceId:{title:`Stimmen-ID`,placeholder:`Geben Sie eine Voice.ai Stimmen-ID ein`,description:`Die Voice.ai Stimmen-ID für die Sprachsynthese. Verwenden Sie die Voice.ai API, um verfügbare Stimmen aufzulisten`}}},messages:{config:{edited:`Voice.ai-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Voice.ai-Einstellungen fehlgeschlagen`}},texts:{aboutApiSettings:`Konfigurieren Sie Ihre Voice.ai API-Einstellungen. Sie benötigen einen gültigen API-Schlüssel und eine Stimmen-ID, um Voice.ai als Buddy-TTS-Anbieter zu verwenden.`}},"en-US":{headings:{aboutApiSettings:`Voice.ai API settings`},fields:{config:{enabled:{title:`Enabled`},apiKey:{title:`API key`,placeholder:`Enter your Voice.ai API key`,description:`Get your API key from your Voice.ai dashboard`},voiceId:{title:`Voice ID`,placeholder:`Enter a Voice.ai voice ID`,description:`The Voice.ai voice ID to use for speech synthesis. Use the Voice.ai API to list available voices`}}},messages:{config:{edited:`Voice.ai settings have been updated`,notEdited:`Failed to update Voice.ai settings`}},texts:{aboutApiSettings:`Configure your Voice.ai API settings. You need a valid API key and voice ID to use Voice.ai as the buddy TTS provider.`}},"es-ES":{headings:{aboutApiSettings:`Configuración de la API de Voice.ai`},fields:{config:{enabled:{title:`Habilitado`},apiKey:{title:`Clave API`,placeholder:`Introduzca su clave API de Voice.ai`,description:`Obtenga su clave API en el panel de Voice.ai`},voiceId:{title:`ID de voz`,placeholder:`Introduzca un ID de voz de Voice.ai`,description:`El ID de voz de Voice.ai a utilizar para la síntesis de voz. Use la API de Voice.ai para ver las voces disponibles`}}},messages:{config:{edited:`La configuración de Voice.ai ha sido actualizada`,notEdited:`Error al actualizar la configuración de Voice.ai`}},texts:{aboutApiSettings:`Configure los ajustes de la API de Voice.ai. Necesita una clave API válida y un ID de voz para utilizar Voice.ai como proveedor TTS del asistente.`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia API Voice.ai`},fields:{config:{enabled:{title:`Wlaczony`},apiKey:{title:`Klucz API`,placeholder:`Wprowadz klucz API Voice.ai`,description:`Pobierz klucz API z panelu Voice.ai`},voiceId:{title:`ID glosu`,placeholder:`Wprowadz ID glosu Voice.ai`,description:`ID glosu Voice.ai uzywany do syntezy mowy. Uzyj API Voice.ai, aby wylistowac dostepne glosy`}}},messages:{config:{edited:`Ustawienia Voice.ai zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien Voice.ai`}},texts:{aboutApiSettings:`Skonfiguruj ustawienia API Voice.ai. Potrzebujesz prawidlowego klucza API i ID glosu, aby uzyc Voice.ai jako dostawcy TTS buddy.`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia API Voice.ai`},fields:{config:{enabled:{title:`Povolený`},apiKey:{title:`API kľúč`,placeholder:`Zadajte svoj API kľúč Voice.ai`,description:`Získajte svoj API kľúč z dashboardu Voice.ai`},voiceId:{title:`ID hlasu`,placeholder:`Zadajte ID hlasu Voice.ai`,description:`ID hlasu Voice.ai použitého na syntézu reči. Použite API Voice.ai na zobrazenie dostupných hlasov`}}},messages:{config:{edited:`Nastavenia Voice.ai boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Voice.ai`}},texts:{aboutApiSettings:`Nakonfigurujte nastavenia API Voice.ai. Na používanie Voice.ai ako poskytovateľa TTS buddy potrebujete platný API kľúč a ID hlasu.`}}},Xy=Ki.extend({apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),voiceId:X().nullable()}),Zy=Wi.extend({apiKey:X().trim().nullable().optional(),apiKeyConfigured:J().default(!1),voiceId:X().trim().nullable()}),Qy=Zi.and(K({type:Y(Gy),api_key:X().trim().nullable().optional(),voice_id:X().trim().nullable().optional()}));Ri.and(K({type:Y(Gy),api_key:X().trim().nullable().optional(),api_key_configured:J(),voice_id:X().trim().nullable()}));var $y=Symbol(`FB-Plugin-BuddyVoiceai`),eb={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Yy)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyVoiceaiPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin($y,{type:Gy,source:`com.fastybird.smart-panel.plugin.buddy-voiceai`,name:`Voice.ai`,description:`TTS provider plugin for Buddy module using Voice.ai API`,links:{documentation:`https://voice.ai/docs`,devDocumentation:`https://voice.ai/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:Jy},schemas:{pluginConfigSchema:Zy,pluginConfigEditFormSchema:Xy,pluginConfigUpdateReqSchema:Qy},modules:[ka]}],modules:[ka],isCore:!0})}},tb=`buddy-whatsapp`,nb=`buddy-whatsapp-plugin`,rb=e(Vs(),1),ib={key:0,class:`mb-4`},ab={class:`flex justify-center mt-3`},ob=[`src`],sb={class:`text-xs text-gray-500 mt-1`},cb=3e3,lb=15e3,ub=k({name:`WhatsappConfigForm`,__name:`whatsapp-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`buddyWhatsappPlugin.messages.config.edited`),error:a(`buddyWhatsappPlugin.messages.config.notEdited`)}}),f=P({}),p=Zn(),m=j(`disconnected`),g=j(null),_=null,v=async()=>{try{let{data:e}=await p.client.GET(`/${Ie}/${tb}/status`),t=e;t&&(m.value=t.data.status,t.data.qr?g.value=await rb.toDataURL(t.data.qr,{width:260,margin:2}):g.value=null)}catch{}},y=async()=>{try{await p.client.POST(`/${Ie}/${tb}/logout`),x()}catch{}},b=0,x=(e=cb)=>{_&&b===e||(S(),v(),b=e,_=setInterval(()=>{v()},e))},S=()=>{_&&=(clearInterval(_),null),b=0};return pe(()=>{s.enabled&&x()}),h(()=>{S()}),F(()=>s.enabled,e=>{e?x():(S(),m.value=`disconnected`,g.value=null)}),F(()=>m.value,e=>{!s.enabled||!_||x(e===`connected`?lb:cb)}),F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`buddyWhatsappPlugin.headings.aboutWhatsappSettings`),description:L(a)(`buddyWhatsappPlugin.texts.aboutWhatsappSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`buddyWhatsappPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),L(s).enabled?(A(),i(`div`,ib,[m.value===`connected`?(A(),O(L(Q),{key:0,type:`success`,title:L(a)(`buddyWhatsappPlugin.texts.status.connected`),closable:!1},{default:B(()=>[D(L(Oe),{type:`danger`,plain:``,size:`small`,class:`mt-2`,onClick:y},{default:B(()=>[E(z(L(a)(`buddyWhatsappPlugin.buttons.logout`)),1)]),_:1})]),_:1},8,[`title`])):m.value===`qr_ready`&&g.value?(A(),i(V,{key:1},[D(L(Q),{type:`warning`,title:L(a)(`buddyWhatsappPlugin.texts.status.qrReady`),closable:!1},null,8,[`title`]),l(`div`,ab,[l(`img`,{src:g.value,alt:`WhatsApp QR Code`,class:`rounded`,style:{width:`260px`,height:`260px`}},null,8,ob)])],64)):m.value===`connecting`?(A(),O(L(Q),{key:2,type:`info`,title:L(a)(`buddyWhatsappPlugin.texts.status.connecting`),closable:!1},null,8,[`title`])):(A(),O(L(Q),{key:3,type:`warning`,title:L(a)(`buddyWhatsappPlugin.texts.status.disconnected`),closable:!1},null,8,[`title`]))])):R(``,!0),D(L(Z),{label:L(a)(`buddyWhatsappPlugin.fields.config.allowedPhoneNumbers.title`),prop:`allowedPhoneNumbers`},{default:B(()=>[D(L(U),{modelValue:L(s).allowedPhoneNumbers,"onUpdate:modelValue":t[1]||=e=>L(s).allowedPhoneNumbers=e,placeholder:L(a)(`buddyWhatsappPlugin.fields.config.allowedPhoneNumbers.placeholder`),name:`allowedPhoneNumbers`},null,8,[`modelValue`,`placeholder`]),l(`div`,sb,z(L(a)(`buddyWhatsappPlugin.fields.config.allowedPhoneNumbers.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),db={"cs-CZ":{headings:{aboutWhatsappSettings:`Nastavení WhatsApp bota`},fields:{config:{enabled:{title:`Povoleno`},allowedPhoneNumbers:{title:`Povolená telefonní čísla`,placeholder:`např. 1234567890,9876543210`,description:`Čárkou oddělená telefonní čísla povolená k interakci s botem (s předponou '+' nebo bez ní). Ponechte prázdné pro povolení všech čísel.`}}},messages:{config:{edited:`Nastavení WhatsApp bota bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení WhatsApp bota`}},texts:{aboutWhatsappSettings:`Připojte vyhrazené WhatsApp číslo pro bota. Použijte druhou SIM, eSIM nebo virtuální číslo — nainstalujte WhatsApp (nebo WhatsApp Business) s tímto číslem a naskenujte QR kód níže. Uživatelé pak mohou posílat zprávy na číslo bota ze svého osobního WhatsAppu.`,status:{disconnected:`Nepřipojeno. Povolte plugin a počkejte na QR kód.`,connecting:`Připojování k WhatsAppu...`,qrReady:`Otevřete WhatsApp na telefonu bota (vyhrazené číslo) a naskenujte tento QR kód přes Nastavení > Propojená zařízení > Propojit zařízení.`,connected:`WhatsApp bot je připojen a běží. Uživatelé mohou posílat zprávy na číslo bota.`}},buttons:{logout:`Odpojit a znovu spárovat`}},"de-DE":{headings:{aboutWhatsappSettings:`WhatsApp-Bot-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},allowedPhoneNumbers:{title:`Erlaubte Telefonnummern`,placeholder:`z.B. 1234567890,9876543210`,description:`Kommagetrennte Telefonnummern, die mit dem Bot interagieren dürfen (mit oder ohne '+'-Präfix). Leer lassen, um alle Nummern zuzulassen.`}}},messages:{config:{edited:`WhatsApp-Bot-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der WhatsApp-Bot-Einstellungen fehlgeschlagen`}},texts:{aboutWhatsappSettings:`Verbinden Sie eine dedizierte WhatsApp-Nummer für den Bot. Verwenden Sie eine zweite SIM, eSIM oder virtuelle Nummer — installieren Sie WhatsApp (oder WhatsApp Business) mit dieser Nummer und scannen Sie den QR-Code unten. Benutzer können dann die Bot-Nummer von ihrem persönlichen WhatsApp aus anschreiben.`,status:{disconnected:`Nicht verbunden. Aktivieren Sie das Plugin und warten Sie auf den QR-Code.`,connecting:`Verbindung mit WhatsApp wird hergestellt...`,qrReady:`Öffnen Sie WhatsApp auf dem Telefon des Bots (die dedizierte Nummer) und scannen Sie diesen QR-Code über Einstellungen > Verknüpfte Geräte > Gerät verknüpfen.`,connected:`WhatsApp-Bot ist verbunden und aktiv. Benutzer können die Nummer des Bots anschreiben, um zu chatten.`}},buttons:{logout:`Trennen & neu koppeln`}},"en-US":{headings:{aboutWhatsappSettings:`WhatsApp bot settings`},fields:{config:{enabled:{title:`Enabled`},allowedPhoneNumbers:{title:`Allowed phone numbers`,placeholder:`e.g., 1234567890,9876543210`,description:`Comma-separated phone numbers allowed to interact with the bot (with or without '+' prefix). Leave empty to allow all numbers.`}}},messages:{config:{edited:`WhatsApp bot settings have been updated`,notEdited:`Failed to update WhatsApp bot settings`}},texts:{aboutWhatsappSettings:`Connect a dedicated WhatsApp number for the bot. Use a second SIM, eSIM, or virtual number — install WhatsApp (or WhatsApp Business) with that number and scan the QR code below. Users can then message the bot number from their personal WhatsApp.`,status:{disconnected:`Not connected. Enable the plugin and wait for the QR code.`,connecting:`Connecting to WhatsApp...`,qrReady:`Open WhatsApp on the bot's phone (the dedicated number) and scan this QR code via Settings > Linked Devices > Link a Device.`,connected:`WhatsApp bot is connected and running. Users can message the bot's number to chat.`}},buttons:{logout:`Disconnect & re-pair`}},"es-ES":{headings:{aboutWhatsappSettings:`Configuración del bot de WhatsApp`},fields:{config:{enabled:{title:`Habilitado`},allowedPhoneNumbers:{title:`Números de teléfono permitidos`,placeholder:`p. ej., 1234567890,9876543210`,description:`Números de teléfono separados por comas que pueden interactuar con el bot (con o sin prefijo '+'). Déjelo vacío para permitir todos los números.`}}},messages:{config:{edited:`La configuración del bot de WhatsApp ha sido actualizada`,notEdited:`Error al actualizar la configuración del bot de WhatsApp`}},texts:{aboutWhatsappSettings:`Conecte un número de WhatsApp dedicado para el bot. Use una segunda SIM, eSIM o número virtual: instale WhatsApp (o WhatsApp Business) con ese número y escanee el código QR a continuación. Los usuarios pueden enviar mensajes al número del bot desde su WhatsApp personal.`,status:{disconnected:`No conectado. Habilite el plugin y espere el código QR.`,connecting:`Conectando a WhatsApp...`,qrReady:`Abra WhatsApp en el teléfono del bot (el número dedicado) y escanee este código QR desde Ajustes > Dispositivos vinculados > Vincular un dispositivo.`,connected:`El bot de WhatsApp está conectado y en funcionamiento. Los usuarios pueden enviar mensajes al número del bot para chatear.`}},buttons:{logout:`Desconectar y volver a vincular`}},"pl-PL":{headings:{aboutWhatsappSettings:`Ustawienia bota WhatsApp`},fields:{config:{enabled:{title:`Wlaczony`},allowedPhoneNumbers:{title:`Dozwolone numery telefonow`,placeholder:`np. 1234567890,9876543210`,description:`Rozdzielone przecinkami numery telefonow uprawnionych do interakcji z botem (z lub bez prefiksu '+'). Pozostaw puste, aby zezwolic wszystkim numerom.`}}},messages:{config:{edited:`Ustawienia bota WhatsApp zostaly zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac ustawien bota WhatsApp`}},texts:{aboutWhatsappSettings:`Polacz dedykowany numer WhatsApp dla bota. Uzyj drugiej karty SIM, eSIM lub wirtualnego numeru - zainstaluj WhatsApp (lub WhatsApp Business) z tym numerem i zeskanuj kod QR ponizej. Uzytkownicy moga nastepnie napisac na numer bota ze swojego osobistego WhatsApp.`,status:{disconnected:`Nie polaczony. Wlacz wtyczke i poczekaj na kod QR.`,connecting:`Laczenie z WhatsApp...`,qrReady:`Otworz WhatsApp na telefonie bota (dedykowany numer) i zeskanuj ten kod QR przez Ustawienia > Polaczone urzadzenia > Polacz urzadzenie.`,connected:`Bot WhatsApp jest polaczony i dziala. Uzytkownicy moga napisac na numer bota, aby czatowac.`}},buttons:{logout:`Rozlacz i sparuj ponownie`}},"sk-SK":{headings:{aboutWhatsappSettings:`Nastavenia WhatsApp bota`},fields:{config:{enabled:{title:`Povolený`},allowedPhoneNumbers:{title:`Povolené telefónne čísla`,placeholder:`napr. 1234567890,9876543210`,description:`Čiarkami oddelené telefónne čísla oprávnené interagovať s botom (s alebo bez predpony '+'). Ponechajte prázdne na povolenie všetkých čísel.`}}},messages:{config:{edited:`Nastavenia WhatsApp bota boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia WhatsApp bota`}},texts:{aboutWhatsappSettings:`Pripojte vyhradené WhatsApp číslo pre bota. Použite druhú SIM, eSIM alebo virtuálne číslo — nainštalujte WhatsApp (alebo WhatsApp Business) s týmto číslom a naskenujte QR kód nižšie. Používatelia potom môžu posielať správy na číslo bota zo svojho osobného WhatsAppu.`,status:{disconnected:`Nepripojený. Povoľte plugin a počkajte na QR kód.`,connecting:`Pripájanie k WhatsAppu...`,qrReady:`Otvorte WhatsApp na telefóne bota (vyhradené číslo) a naskenujte tento QR kód cez Nastavenia > Prepojené zariadenia > Prepojiť zariadenie.`,connected:`WhatsApp bot je pripojený a beží. Používatelia môžu posielať správy na číslo bota na chatovanie.`}},buttons:{logout:`Odpojiť a znovu spárovať`}}},fb=Ki.extend({allowedPhoneNumbers:X().nullable()}),pb=Wi.extend({allowedPhoneNumbers:X().trim().nullable().default(null)}),mb=Zi.and(K({type:Y(nb),allowed_phone_numbers:X().trim().nullable().optional()})),hb=Symbol(`FB-Plugin-BuddyWhatsapp`),gb={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(db)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{buddyWhatsappPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(hb,{type:nb,source:`com.fastybird.smart-panel.plugin.buddy-whatsapp`,name:`WhatsApp`,description:`WhatsApp adapter plugin for Buddy module`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:ub},schemas:{pluginConfigSchema:pb,pluginConfigEditFormSchema:fb,pluginConfigUpdateReqSchema:mb},modules:[ka]}],modules:[ka],isCore:!0})}},_b=`data-sources-device-channel-plugin`,vb=`data-sources-device-channel`,yb=k({name:`DeviceChannelDataSourceAddForm`,__name:`device-channel-data-source-add-form`,props:{id:{},parent:{},parentId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=to({id:n.id,type:vb,parent:n.parent,parentId:n.parentId}),{devices:d,fetchDevices:f,areLoading:m}=fs(),{channels:h,fetchChannels:g,areLoading:_}=ms({deviceId:o.device}),{properties:v,fetchProperties:y,areLoading:b}=ds({channelId:p(()=>o.channel||void 0)}),x=P({device:[{required:!0,message:a(`dataSourcesDeviceChannelPlugin.fields.device.validation.required`),trigger:`change`}],channel:[{required:!0,message:a(`dataSourcesDeviceChannelPlugin.fields.channel.validation.required`),trigger:`change`}],property:[{required:!0,message:a(`dataSourcesDeviceChannelPlugin.fields.property.validation.required`),trigger:`change`}]}),S=p(()=>wa(d.value.filter(e=>!e.hidden),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),C=p(()=>wa(h.value.filter(e=>e.device===o.device),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),w=p(()=>wa(v.value.filter(e=>e.channel===o.channel),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name||e.category})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),F(()=>o.device,()=>{o.device&&(_.value||g().catch(e=>{throw new Ma(`Something went wrong`,e)}))}),F(()=>o.channel,()=>{o.channel&&(b.value||y().catch(e=>{throw new Ma(`Something went wrong`,e)}))}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:x,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.dataSources.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.dataSources.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.device.title`),prop:`device`},{default:B(()=>[D(L(ei),{modelValue:L(o).device,"onUpdate:modelValue":t[1]||=e=>L(o).device=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.device.placeholder`),name:`device`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(S.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.channel.title`),prop:`channel`},{default:B(()=>[D(L(ei),{modelValue:L(o).channel,"onUpdate:modelValue":t[2]||=e=>L(o).channel=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.channel.placeholder`),name:`channel`,loading:L(_),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(C.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.property.title`),prop:`property`},{default:B(()=>[D(L(ei),{modelValue:L(o).property,"onUpdate:modelValue":t[3]||=e=>L(o).property=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.property.placeholder`),name:`property`,loading:L(b),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(w.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[4]||=e=>L(o).icon=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),bb=k({name:`DeviceChannelDataSourceEditForm`,__name:`device-channel-data-source-edit-form`,props:{dataSource:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=oo({dataSource:n.dataSource}),{devices:d,fetchDevices:f,areLoading:m}=fs(),{channels:h,fetchChannels:g,areLoading:_}=ms({deviceId:o.device}),{properties:v,fetchProperties:y,areLoading:b}=ds({channelId:o.channel}),x=P({device:[{required:!0,message:a(`dataSourcesDeviceChannelPlugin.fields.device.validation.required`),trigger:`change`}],channel:[{required:!0,message:a(`dataSourcesDeviceChannelPlugin.fields.channel.validation.required`),trigger:`change`}],property:[{required:!0,message:a(`dataSourcesDeviceChannelPlugin.fields.property.validation.required`),trigger:`change`}]}),S=p(()=>wa(d.value.filter(e=>!e.hidden),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),C=p(()=>wa(h.value.filter(e=>e.device===o.device),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),w=p(()=>wa(v.value.filter(e=>e.channel===o.channel),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name||e.category})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),F(()=>o.device,()=>{o.device&&(_.value||g().catch(e=>{throw new Ma(`Something went wrong`,e)}))},{immediate:!0}),F(()=>o.channel,()=>{o.channel&&(b.value||y().catch(e=>{throw new Ma(`Something went wrong`,e)}))},{immediate:!0}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:x,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.dataSources.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.dataSources.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.device.title`),prop:`device`},{default:B(()=>[D(L(ei),{modelValue:L(o).device,"onUpdate:modelValue":t[1]||=e=>L(o).device=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.device.placeholder`),name:`device`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(S.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.channel.title`),prop:`channel`},{default:B(()=>[D(L(ei),{modelValue:L(o).channel,"onUpdate:modelValue":t[2]||=e=>L(o).channel=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.channel.placeholder`),name:`channel`,loading:L(_),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(C.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.property.title`),prop:`property`},{default:B(()=>[D(L(ei),{modelValue:L(o).property,"onUpdate:modelValue":t[3]||=e=>L(o).property=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.property.placeholder`),name:`property`,loading:L(b),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(w.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesDeviceChannelPlugin.fields.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[4]||=e=>L(o).icon=e,placeholder:L(a)(`dataSourcesDeviceChannelPlugin.fields.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),xb={"cs-CZ":{fields:{device:{title:`Zařízení`,placeholder:`Zařízení zdroje dat`,validation:{required:`Vyberte prosím zařízení zdroje dat`}},channel:{title:`Kanál`,placeholder:`Kanál zdroje dat`,validation:{required:`Vyberte prosím kanál zdroje dat`}},property:{title:`Vlastnost`,placeholder:`Vlastnost zdroje dat`,validation:{required:`Vyberte prosím vlastnost zdroje dat`}},icon:{title:`Ikona`,placeholder:`Ikona zdroje dat`}}},"de-DE":{fields:{device:{title:`Gerät`,placeholder:`Datenquellen-Gerät`,validation:{required:`Bitte wählen Sie ein Datenquellen-Gerät`}},channel:{title:`Kanal`,placeholder:`Datenquellen-Kanal`,validation:{required:`Bitte wählen Sie einen Datenquellen-Kanal`}},property:{title:`Eigenschaft`,placeholder:`Datenquellen-Eigenschaft`,validation:{required:`Bitte wählen Sie eine Datenquellen-Eigenschaft`}},icon:{title:`Symbol`,placeholder:`Datenquellen-Symbol`}}},"en-US":{fields:{device:{title:`Device`,placeholder:`Data source device`,validation:{required:`Please select data source device`}},channel:{title:`Channel`,placeholder:`Data source channel`,validation:{required:`Please select data source channel`}},property:{title:`Property`,placeholder:`Data source property`,validation:{required:`Please select data source property`}},icon:{title:`Icon`,placeholder:`Data source icon`}}},"es-ES":{fields:{device:{title:`Dispositivo`,placeholder:`Dispositivo de origen de datos`,validation:{required:`Por favor, seleccione un dispositivo de origen de datos`}},channel:{title:`Canal`,placeholder:`Canal de origen de datos`,validation:{required:`Por favor, seleccione un canal de origen de datos`}},property:{title:`Propiedad`,placeholder:`Propiedad de origen de datos`,validation:{required:`Por favor, seleccione una propiedad de origen de datos`}},icon:{title:`Icono`,placeholder:`Icono de origen de datos`}}},"pl-PL":{fields:{device:{title:`Urzadzenie`,placeholder:`Urzadzenie zrodla danych`,validation:{required:`Prosze wybrac urzadzenie zrodla danych`}},channel:{title:`Kanal`,placeholder:`Kanal zrodla danych`,validation:{required:`Prosze wybrac kanal zrodla danych`}},property:{title:`Wlasciwosc`,placeholder:`Wlasciwosc zrodla danych`,validation:{required:`Prosze wybrac wlasciwosc zrodla danych`}},icon:{title:`Ikona`,placeholder:`Ikona zrodla danych`}}},"sk-SK":{fields:{device:{title:`Zariadenie`,placeholder:`Zariadenie zdroja dát`,validation:{required:`Prosím vyberte zariadenie zdroja dát`}},channel:{title:`Kanál`,placeholder:`Kanál zdroja dát`,validation:{required:`Prosím vyberte kanál zdroja dát`}},property:{title:`Vlastnosť`,placeholder:`Vlastnosť zdroja dát`,validation:{required:`Prosím vyberte vlastnosť zdroja dát`}},icon:{title:`Ikona`,placeholder:`Ikona zdroja dát`}}}},Sb=io.extend({device:X().uuid(),channel:X().uuid(),property:X().uuid(),icon:X().trim().transform(e=>e===``?null:e).nullable().default(null).optional()}),Cb=$a.extend({device:X().uuid(),channel:X().uuid(),property:X().uuid(),icon:X().trim().transform(e=>e===``?null:e).nullable().default(null).optional()}),wb=Ja.extend({device:Ga,channel:Ga,property:Ga,icon:X().trim().transform(e=>e===``?null:e).nullable().optional()}),Tb=Ua.and(K({type:Y(vb),device:X().uuid(),channel:X().uuid(),property:X().uuid(),icon:X().trim().transform(e=>e===``?null:e).nullable().optional()})),Eb=Wa.and(K({type:Y(vb),device:X().uuid().optional(),channel:X().uuid().optional(),property:X().uuid().optional(),icon:X().trim().transform(e=>e===``?null:e).nullable().optional()}));qa.and(K({type:Y(vb),device:X().uuid(),channel:X().uuid(),property:X().uuid(),icon:X().nullable()}));var Db=Symbol(`FB-Plugin-DataSourcesDeviceChannel`),Ob={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(xb)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{dataSourcesDeviceChannelPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Db,{type:_b,source:`com.fastybird.smart-panel.plugin.data-source-device-channel`,name:`Device Channel Property Data Source`,description:`Enables dashboard tiles, pages, etc. to pull real-time data directly from specific channels within your IoT devices. Ideal for visualizing sensor values, statuses, or actuator states in a granular and dynamic way.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:vb,name:`Device Channel Property`,components:{dataSourceAddForm:yb,dataSourceEditForm:bb},schemas:{dataSourceSchema:wb,dataSourceAddFormSchema:Sb,dataSourceEditFormSchema:Cb,dataSourceCreateReqSchema:Tb,dataSourceUpdateReqSchema:Eb}}],modules:[Na],isCore:!0})}},kb=`data-sources-weather-plugin`,Ab=`data-source-weather-current`,jb=`data-source-weather-forecast-day`,Mb=k({name:`CurrentWeatherDataSourceAddForm`,__name:`current-weather-data-source-add-form`,props:{id:{},parent:{},parentId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=to({id:n.id,type:Ab,parent:n.parent,parentId:n.parentId}),{locations:d,fetchLocations:f,areLoading:m}=Bo(),h=P({field:[{required:!0,message:a(`dataSourcesWeatherPlugin.fields.field.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value,[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),_=p(()=>Object.values(At).map(e=>({value:e,label:a(`dataSourcesWeatherPlugin.fieldOptions.${e}`)})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.dataSources.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.dataSources.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.locationId.title`),prop:`locationId`},{default:B(()=>[D(L(ei),{modelValue:L(o).locationId,"onUpdate:modelValue":t[1]||=e=>L(o).locationId=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.locationId.placeholder`),name:`locationId`,loading:L(m),filterable:``,clearable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Q),{description:L(a)(`dataSourcesWeatherPlugin.fields.locationId.description`),closable:!1,"show-icon":``,type:`info`},null,8,[`description`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.field.title`),prop:`field`,class:`mt-4`},{default:B(()=>[D(L(ei),{modelValue:L(o).field,"onUpdate:modelValue":t[2]||=e=>L(o).field=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.field.placeholder`),name:`field`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(_.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[3]||=e=>L(o).icon=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Nb=k({name:`CurrentWeatherDataSourceEditForm`,__name:`current-weather-data-source-edit-form`,props:{dataSource:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=oo({dataSource:n.dataSource}),{locations:d,fetchLocations:f,areLoading:m}=Bo(),h=P({field:[{required:!0,message:a(`dataSourcesWeatherPlugin.fields.field.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value,[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),_=p(()=>Object.values(At).map(e=>({value:e,label:a(`dataSourcesWeatherPlugin.fieldOptions.${e}`)})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.dataSources.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.dataSources.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.locationId.title`),prop:`locationId`},{default:B(()=>[D(L(ei),{modelValue:L(o).locationId,"onUpdate:modelValue":t[1]||=e=>L(o).locationId=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.locationId.placeholder`),name:`locationId`,loading:L(m),filterable:``,clearable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Q),{description:L(a)(`dataSourcesWeatherPlugin.fields.locationId.description`),closable:!1,"show-icon":``,type:`info`},null,8,[`description`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.field.title`),prop:`field`,class:`mt-4`},{default:B(()=>[D(L(ei),{modelValue:L(o).field,"onUpdate:modelValue":t[2]||=e=>L(o).field=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.field.placeholder`),name:`field`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(_.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[3]||=e=>L(o).icon=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Pb=k({name:`ForecastDayDataSourceAddForm`,__name:`forecast-day-data-source-add-form`,props:{id:{},parent:{},parentId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=to({id:n.id,type:jb,parent:n.parent,parentId:n.parentId}),{locations:d,fetchLocations:f,areLoading:m}=Bo(),h=P({dayOffset:[{required:!0,message:a(`dataSourcesWeatherPlugin.fields.dayOffset.validation.required`),trigger:`change`},{type:`number`,min:0,message:a(`dataSourcesWeatherPlugin.fields.dayOffset.validation.min`),trigger:`change`},{type:`number`,max:7,message:a(`dataSourcesWeatherPlugin.fields.dayOffset.validation.max`),trigger:`change`}],field:[{required:!0,message:a(`dataSourcesWeatherPlugin.fields.field.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value,[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),_=p(()=>Object.values(At).map(e=>({value:e,label:a(`dataSourcesWeatherPlugin.fieldOptions.${e}`)})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.dataSources.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.dataSources.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.locationId.title`),prop:`locationId`},{default:B(()=>[D(L(ei),{modelValue:L(o).locationId,"onUpdate:modelValue":t[1]||=e=>L(o).locationId=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.locationId.placeholder`),name:`locationId`,loading:L(m),filterable:``,clearable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Q),{description:L(a)(`dataSourcesWeatherPlugin.fields.locationId.description`),closable:!1,"show-icon":``,type:`info`},null,8,[`description`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.dayOffset.title`),prop:`dayOffset`,class:`mt-4`},{default:B(()=>[D(L(Qr),{modelValue:L(o).dayOffset,"onUpdate:modelValue":t[2]||=e=>L(o).dayOffset=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.dayOffset.placeholder`),min:0,max:7,name:`dayOffset`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.field.title`),prop:`field`},{default:B(()=>[D(L(ei),{modelValue:L(o).field,"onUpdate:modelValue":t[3]||=e=>L(o).field=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.field.placeholder`),name:`field`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(_.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[4]||=e=>L(o).icon=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Fb=k({name:`ForecastDayDataSourceEditForm`,__name:`forecast-day-data-source-edit-form`,props:{dataSource:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=oo({dataSource:n.dataSource}),{locations:d,fetchLocations:f,areLoading:m}=Bo(),h=P({dayOffset:[{required:!0,message:a(`dataSourcesWeatherPlugin.fields.dayOffset.validation.required`),trigger:`change`},{type:`number`,min:0,message:a(`dataSourcesWeatherPlugin.fields.dayOffset.validation.min`),trigger:`change`},{type:`number`,max:7,message:a(`dataSourcesWeatherPlugin.fields.dayOffset.validation.max`),trigger:`change`}],field:[{required:!0,message:a(`dataSourcesWeatherPlugin.fields.field.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value,[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name}))),_=p(()=>Object.values(At).map(e=>({value:e,label:a(`dataSourcesWeatherPlugin.fieldOptions.${e}`)})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.dataSources.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.dataSources.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.locationId.title`),prop:`locationId`},{default:B(()=>[D(L(ei),{modelValue:L(o).locationId,"onUpdate:modelValue":t[1]||=e=>L(o).locationId=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.locationId.placeholder`),name:`locationId`,loading:L(m),filterable:``,clearable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Q),{description:L(a)(`dataSourcesWeatherPlugin.fields.locationId.description`),closable:!1,"show-icon":``,type:`info`},null,8,[`description`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.dayOffset.title`),prop:`dayOffset`,class:`mt-4`},{default:B(()=>[D(L(Qr),{modelValue:L(o).dayOffset,"onUpdate:modelValue":t[2]||=e=>L(o).dayOffset=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.dayOffset.placeholder`),min:0,max:7,name:`dayOffset`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.field.title`),prop:`field`},{default:B(()=>[D(L(ei),{modelValue:L(o).field,"onUpdate:modelValue":t[3]||=e=>L(o).field=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.field.placeholder`),name:`field`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(_.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dataSourcesWeatherPlugin.fields.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[4]||=e=>L(o).icon=e,placeholder:L(a)(`dataSourcesWeatherPlugin.fields.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Ib={"cs-CZ":{fields:{locationId:{title:`Meteorologická lokace`,placeholder:`Vyberte lokaci`,description:`Vyberte meteorologickou lokaci k zobrazení. Pokud není nastavena, bude použita primární lokace z nastavení počasí.`},field:{title:`Datové pole`,placeholder:`Vyberte pole`,validation:{required:`Vyberte prosím datové pole`}},dayOffset:{title:`Posun dne`,placeholder:`Dní od dneška`,validation:{required:`Zadejte prosím posun dne`,min:`Posun dne musí být alespoň 0`,max:`Posun dne může být maximálně 7`}},icon:{title:`Vlastní ikona`,placeholder:`mdi: teploměr`}},fieldOptions:{temperature:`Teplota`,temperature_min:`Minimální teplota`,temperature_max:`Maximální teplota`,feels_like:`Pocitová teplota`,humidity:`Vlhkost`,pressure:`Tlak`,weather_icon:`Ikona počasí`,weather_main:`Stav počasí`,weather_description:`Popis počasí`,wind_speed:`Rychlost větru`}},"de-DE":{fields:{locationId:{title:`Wetterstandort`,placeholder:`Standort auswählen`,description:`Wählen Sie einen Wetterstandort zur Anzeige. Wenn nicht festgelegt, wird der primäre Standort aus den Wettereinstellungen verwendet.`},field:{title:`Datenfeld`,placeholder:`Feld auswählen`,validation:{required:`Bitte wählen Sie ein Datenfeld`}},dayOffset:{title:`Tagesversatz`,placeholder:`Tage ab heute`,validation:{required:`Bitte geben Sie einen Tagesversatz ein`,min:`Tagesversatz muss mindestens 0 sein`,max:`Tagesversatz darf höchstens 7 sein`}},icon:{title:`Benutzerdefiniertes Symbol`,placeholder:`mdi:thermometer`}},fieldOptions:{temperature:`Temperatur`,temperature_min:`Mindesttemperatur`,temperature_max:`Höchsttemperatur`,feels_like:`Gefühlt wie`,humidity:`Luftfeuchtigkeit`,pressure:`Luftdruck`,weather_icon:`Wettersymbol`,weather_main:`Wetterbedingung`,weather_description:`Wetterbeschreibung`,wind_speed:`Windgeschwindigkeit`}},"en-US":{fields:{locationId:{title:`Weather location`,placeholder:`Select a location`,description:`Select a weather location to display. If not set, the primary location from weather settings will be used.`},field:{title:`Data field`,placeholder:`Select a field`,validation:{required:`Please select a data field`}},dayOffset:{title:`Day offset`,placeholder:`Days from today`,validation:{required:`Please enter a day offset`,min:`Day offset must be at least 0`,max:`Day offset must be at most 7`}},icon:{title:`Custom icon`,placeholder:`mdi:thermometer`}},fieldOptions:{temperature:`Temperature`,temperature_min:`Min temperature`,temperature_max:`Max temperature`,feels_like:`Feels like`,humidity:`Humidity`,pressure:`Pressure`,weather_icon:`Weather icon`,weather_main:`Weather condition`,weather_description:`Weather description`,wind_speed:`Wind speed`}},"es-ES":{fields:{locationId:{title:`Ubicación meteorológica`,placeholder:`Seleccione una ubicación`,description:`Seleccione una ubicación meteorológica para mostrar. Si no se establece, se utilizará la ubicación principal de la configuración meteorológica.`},field:{title:`Campo de datos`,placeholder:`Seleccione un campo`,validation:{required:`Por favor, seleccione un campo de datos`}},dayOffset:{title:`Desplazamiento de días`,placeholder:`Días desde hoy`,validation:{required:`Por favor, introduzca un desplazamiento de días`,min:`El desplazamiento de días debe ser al menos 0`,max:`El desplazamiento de días debe ser como máximo 7`}},icon:{title:`Icono personalizado`,placeholder:`mdi:termómetro`}},fieldOptions:{temperature:`Temperatura`,temperature_min:`Temperatura mínima`,temperature_max:`Temperatura máxima`,feels_like:`Sensación térmica`,humidity:`Humedad`,pressure:`Presión`,weather_icon:`Icono del clima`,weather_main:`Condición climática`,weather_description:`Descripción del clima`,wind_speed:`Velocidad del viento`}},"pl-PL":{fields:{locationId:{title:`Lokalizacja pogody`,placeholder:`Wybierz lokalizacje`,description:`Wybierz lokalizacje pogody do wyswietlenia. Jesli nie ustawiono, zostanie uzyta glowna lokalizacja z ustawien pogody.`},field:{title:`Pole danych`,placeholder:`Wybierz pole`,validation:{required:`Prosze wybrac pole danych`}},dayOffset:{title:`Przesuniecie dni`,placeholder:`Dni od dzisiaj`,validation:{required:`Prosze wprowadzic przesuniecie dni`,min:`Przesuniecie dni musi wynosic co najmniej 0`,max:`Przesuniecie dni moze wynosic najwyzej 7`}},icon:{title:`Ikona niestandardowa`,placeholder:`mdi:termometr`}},fieldOptions:{temperature:`Temperatura`,temperature_min:`Temperatura minimalna`,temperature_max:`Temperatura maksymalna`,feels_like:`Temperatura odczuwalna`,humidity:`Wilgotnosc`,pressure:`Cisnienie`,weather_icon:`Ikona pogody`,weather_main:`Warunki pogodowe`,weather_description:`Opis pogody`,wind_speed:`Predkosc wiatru`}},"sk-SK":{fields:{locationId:{title:`Poloha počasia`,placeholder:`Vyberte polohu`,description:`Vyberte polohu počasia na zobrazenie. Ak nie je nastavená, použije sa primárna poloha z nastavení počasia.`},field:{title:`Dátové pole`,placeholder:`Vyberte pole`,validation:{required:`Prosím vyberte dátové pole`}},dayOffset:{title:`Posun dňa`,placeholder:`Počet dní od dnes`,validation:{required:`Prosím zadajte posun dňa`,min:`Posun dňa musí byť aspoň 0`,max:`Posun dňa musí byť maximálne 7`}},icon:{title:`Vlastná ikona`,placeholder:`mdi: teplomer`}},fieldOptions:{temperature:`Teplota`,temperature_min:`Minimálna teplota`,temperature_max:`Maximálna teplota`,feels_like:`Pocitová teplota`,humidity:`Vlhkosť`,pressure:`Tlak`,weather_icon:`Ikona počasia`,weather_main:`Stav počasia`,weather_description:`Popis počasia`,wind_speed:`Rýchlosť vetra`}}},Lb=io.extend({locationId:X().uuid().optional().nullable(),field:G(At),icon:X().nullable().optional(),unit:X().nullable().optional()}),Rb=$a.extend({locationId:X().uuid().optional().nullable(),field:G(At).optional(),icon:X().nullable().optional(),unit:X().nullable().optional()}),zb=io.extend({locationId:X().uuid().optional().nullable(),dayOffset:q().min(0).max(7),field:G(At),icon:X().nullable().optional(),unit:X().nullable().optional()}),Bb=$a.extend({locationId:X().uuid().optional().nullable(),dayOffset:q().min(0).max(7).optional(),field:G(At).optional(),icon:X().nullable().optional(),unit:X().nullable().optional()}),Vb=Ja.extend({locationId:X().uuid().optional().nullable().default(null),field:G(At).default(At.temperature),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),unit:X().trim().transform(e=>e===``?null:e).nullable().optional()}),Hb=Ja.extend({locationId:X().uuid().optional().nullable().default(null),dayOffset:q().min(0).max(7).default(1),field:G(At).default(At.temperature_max),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),unit:X().trim().transform(e=>e===``?null:e).nullable().optional()}),Ub=Ua.and(K({type:Y(Ab),location_id:X().uuid().optional().nullable(),field:G(At),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),unit:X().trim().transform(e=>e===``?null:e).nullable().optional()})),Wb=Wa.and(K({type:Y(Ab),location_id:X().uuid().optional().nullable(),field:G(At).optional(),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),unit:X().trim().transform(e=>e===``?null:e).nullable().optional()}));qa.and(K({type:Y(Ab),location_id:X().uuid().optional().nullable(),field:G(At),icon:X().nullable(),unit:X().nullable()}));var Gb=Ua.and(K({type:Y(jb),location_id:X().uuid().optional().nullable(),day_offset:q().min(0).max(7),field:G(At),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),unit:X().trim().transform(e=>e===``?null:e).nullable().optional()})),Kb=Wa.and(K({type:Y(jb),location_id:X().uuid().optional().nullable(),day_offset:q().min(0).max(7).optional(),field:G(At).optional(),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),unit:X().trim().transform(e=>e===``?null:e).nullable().optional()}));qa.and(K({type:Y(jb),location_id:X().uuid().optional().nullable(),day_offset:q().min(0).max(7),field:G(At),icon:X().nullable(),unit:X().nullable()}));var qb=Symbol(`FB-Plugin-DataSourcesWeather`),Jb={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Ib)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{dataSourcesWeatherPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(qb,{type:kb,source:`com.fastybird.smart-panel.plugin.data-source-weather`,name:`Weather Data Source`,description:`Enables dashboard tiles, pages, and UI elements to pull real-time weather data. Supports current weather conditions and daily forecasts for displaying temperature, humidity, weather icons, and other meteorological information.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ab,name:`Day Weather`,description:`Displays current day weather data including temperature, humidity, conditions, and more.`,components:{dataSourceAddForm:Mb,dataSourceEditForm:Nb},schemas:{dataSourceSchema:Vb,dataSourceAddFormSchema:Lb,dataSourceEditFormSchema:Rb,dataSourceCreateReqSchema:Ub,dataSourceUpdateReqSchema:Wb}},{type:jb,name:`Forecast Weather`,description:`Displays weather forecast data for a specific day (today, tomorrow, or up to 7 days ahead).`,components:{dataSourceAddForm:Pb,dataSourceEditForm:Fb},schemas:{dataSourceSchema:Hb,dataSourceAddFormSchema:zb,dataSourceEditFormSchema:Bb,dataSourceCreateReqSchema:Gb,dataSourceUpdateReqSchema:Kb}}],modules:[Na],isCore:!0})}},Yb=`devices-home-assistant`,Xb=`devices-home-assistant-plugin`,Zb=`devices-home-assistant`,Qb=`fb.no_entity`,$b=`fb.no_attribute`,ex=`fb.main_state`,tx=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesHomeAssistantException`,this.exception=t}},nx=class extends tx{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesHomeAssistantApiException`,this.code=t}},rx=class extends tx{constructor(e,t=null){super(e,t),this.name=`DevicesHomeAssistantValidationException`}},ix=xs.extend({haDeviceId:X()}),ax=ws.extend({haDeviceId:X().optional()}),ox=K({entityId:X(),channelCategory:G(Jn).optional(),skip:J().optional()}),sx=K({deviceCategory:G(dr).optional(),entityOverrides:W(ox).optional()}),cx=ir([`static`,`derived`,`command`]),lx=K({category:G(rr),name:X(),haAttribute:X(),dataType:G(Mn),permissions:W(G(dn)),unit:X().nullable().optional(),format:W(Er([X(),q(),Pn()])).nullable().optional(),required:J(),currentValue:Er([X(),q(),J()]).nullable().optional(),haEntityId:X().nullable().optional(),haTransformer:X().nullable().optional(),isVirtual:J().optional(),virtualType:cx.nullable().optional()}),ux=K({category:G(Jn),name:X(),confidence:ir([`high`,`medium`,`low`])}),dx=K({entityId:X(),domain:X(),deviceClass:X().nullable(),currentState:Er([X(),q(),J()]).nullable(),attributes:sn(X(),hn()),status:ir([`mapped`,`partial`,`unmapped`,`skipped`,`incompatible`]),suggestedChannel:ux.nullable(),suggestedProperties:W(lx),unmappedAttributes:W(X()),missingRequiredProperties:W(G(rr)),incompatibleReason:X().nullable().optional()}),fx=K({type:ir([`missing_required_channel`,`missing_required_property`,`unsupported_entity`,`unknown_device_class`,`no_mapping_rule`,`incompatible_channel`]),entityId:X().optional(),message:X(),suggestion:X().optional()}),px=K({category:G(dr),name:X(),confidence:ir([`high`,`medium`,`low`])}),mx=K({id:X(),name:X(),manufacturer:X().nullable(),model:X().nullable()}),hx=K({isValid:J(),missingChannelsCount:q(),missingPropertiesCount:q(),fillableWithVirtualCount:q(),missingChannels:W(X()),missingProperties:sn(X(),W(X())),autoFilledVirtual:sn(X(),W(X())),unknownChannels:W(X()),duplicateChannels:W(X()),constraintViolations:W(X())}),gx=K({haDevice:mx,suggestedDevice:px,entities:W(dx),warnings:W(fx),readyToAdopt:J(),validation:hx.optional()}),_x=K({category:G(rr),haAttribute:X(),dataType:G(Mn),permissions:W(G(dn)),format:W(Er([X(),q(),Pn()])).nullable().optional(),haEntityId:X().optional(),haTransformer:X().nullable().optional()}),vx=K({entityId:X(),category:G(Jn),name:X(),properties:W(_x)}),yx=K({haDeviceId:X(),name:X(),category:G(dr),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:J().default(!0).optional(),channels:W(vx)}),bx=K({category:X(),name:X(),haAttribute:X(),dataType:X(),permissions:W(X()),unit:X().nullable().optional(),format:W(Er([X(),q(),Pn()])).nullable().optional(),required:J(),currentValue:Er([X(),q(),J()]).nullable().optional(),haTransformer:X().nullable().optional()}),xx=K({category:X(),name:X(),confidence:X(),suggestedProperties:W(bx)}),Sx=K({helper:K({entityId:X(),name:X(),domain:X()}),suggestedDevice:K({category:X(),name:X(),confidence:X()}),suggestedChannel:xx,suggestedChannels:W(xx).optional(),warnings:W(K({type:X(),message:X(),suggestion:X().optional()})),readyToAdopt:J()}),Cx=e=>{let t=sx.safeParse(e);if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new rx(`Failed to validate mapping preview request.`);return ar(t.data)},wx=e=>{let t=yx.safeParse(e);if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new rx(`Failed to validate adopt device request.`);return ar(t.data)},Tx=e=>{let t=yx.safeParse(e);if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new rx(`Failed to validate adopt helper request.`);return{entity_id:t.data.haDeviceId,name:t.data.name,category:t.data.category,description:t.data.description??void 0,enabled:t.data.enabled??!0,channels:t.data.channels.map(e=>({category:e.category,name:e.name,properties:e.properties.map(e=>({category:e.category,ha_attribute:e.haAttribute,data_type:e.dataType,permissions:e.permissions,format:e.format?.filter(e=>e!==null)??void 0,ha_transformer:e.haTransformer??void 0}))}))}},Ex=e=>{let t=gx.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new rx(`Failed to validate mapping preview response.`);return t.data},Dx=e=>{let t=Sx.safeParse(Un(e));if(!t.success)throw cr.error(`Helper mapping preview response validation failed with:`,t.error),new rx(`Failed to validate helper mapping preview response.`);let n=t.data,r=(n.suggestedChannels??[n.suggestedChannel]).map((e,t)=>({entityId:t===0?n.helper.entityId:`${n.helper.entityId}#${e.category}`,domain:n.helper.domain,deviceClass:null,currentState:e.suggestedProperties[0]?.currentValue??null,attributes:{},status:`mapped`,suggestedChannel:{category:e.category,name:e.name,confidence:e.confidence},suggestedProperties:e.suggestedProperties.map(e=>({category:e.category,name:e.name,haAttribute:e.haAttribute,dataType:e.dataType,permissions:e.permissions,unit:e.unit??null,format:e.format??null,required:e.required,currentValue:e.currentValue??null,haEntityId:n.helper.entityId,haTransformer:e.haTransformer??null})),unmappedAttributes:[],missingRequiredProperties:[]})),i={haDevice:{id:n.helper.entityId,name:n.helper.name,manufacturer:`Home Assistant`,model:`Helper (${n.helper.domain})`},suggestedDevice:{category:n.suggestedDevice.category,name:n.suggestedDevice.name,confidence:n.suggestedDevice.confidence},entities:r,warnings:n.warnings.map(e=>({type:e.type,entityId:n.helper.entityId,message:e.message,suggestion:e.suggestion})),readyToAdopt:n.readyToAdopt},a=gx.safeParse(i);if(!a.success)throw cr.error(`Helper response normalization failed with:`,a.error),new rx(`Failed to normalize helper mapping preview response.`);return a.data},Ox=()=>{let{t:e}=M(),t=Zn(),n=On(),r=Tn(),i=pn(),{getElement:a}=Os(),o=i.getStore(jo),s=j(!1),c=j(null);return{isAdopting:s,error:c,adoptDevice:async(i,l=`device`)=>{if(s.value)throw new nx(`Device adoption is already in progress.`);s.value=!0,c.value=null;let u=null;try{let n,r,c;if(l===`helper`){let e=Tx(i),a=await t.client.POST(`/${Ie}/${Yb}/discovered-helpers/adopt`,{body:e});n=a.data,r=a.error,c=a.response}else{let e=wx(i),a=await t.client.POST(`/${Ie}/${Yb}/discovered-devices/adopt`,{body:e});n=a.data,r=a.error,c=a.response}if(r||c.status<200||c.status>=300){let t=e(`devicesHomeAssistantPlugin.messages.mapping.adoptionError`);throw r&&(t=Kn(r,t)),new nx(t,c.status)}if(n!==void 0&&n.data){s.value=!1;let e=n.data,t=is(e,a(e.type)?.schemas?.deviceSchema||Yo);return o.set({id:t.id,data:t}),u=t.id,t}throw new nx(`Device adoption succeeded but no device data was returned.`,c.status)}catch(t){s.value=!1;let i=t;if(u)try{o.unset({id:u})}catch(e){n.error(`[DEVICE ADOPTION] Failed to remove device ${u} from store:`,e)}throw i instanceof rx||i instanceof nx?(c.value=i,r.error(i.message)):(c.value=i,n.error(`[DEVICE ADOPTION] Failed to adopt device:`,i),r.error(e(`devicesHomeAssistantPlugin.messages.mapping.adoptionError`))),i}}}},kx=Symbol(`FB-Plugin-Devices-Home-Assistant-Discovered-Devices`),Ax=Symbol(`FB-Plugin-Devices-Home-Assistant-Discovered-Helpers`),jx=Symbol(`FB-Plugin-Devices-Home-Assistant-States`),Mx=()=>{let e=pn().getStore(kx),{firstLoad:t,semaphore:n}=ln(e);return{devices:p(()=>e.findAll()),areLoading:p(()=>!!n.value.fetching.items||!t.value),loaded:p(()=>t.value),fetchDiscoveredDevices:async()=>{await e.fetch()}}},Nx=()=>{let e=pn().getStore(Ax);return{helpers:p(()=>e.findAll()),areLoading:p(()=>e.fetching()),loaded:p(()=>e.firstLoadFinished()),fetchDiscoveredHelpers:async()=>{await e.fetch()}}},Px=()=>{let{devices:e,fetchDiscoveredDevices:t,areLoading:n}=Mx(),{helpers:r,fetchDiscoveredHelpers:i,areLoading:a}=Nx(),o=p(()=>n.value||a.value);return{itemsOptions:p(()=>{let t=[],n=wa(e.value,[e=>e.name.trim()===``?e.id:e.name],[`asc`]).map(e=>({value:e.id,label:e.name.trim()===``?e.id:e.name,type:`device`}));n.length>0&&t.push({label:`Devices`,options:n});let i=wa(r.value,[e=>e.name.trim()===``?e.entityId:e.name],[`asc`]).map(e=>({value:e.entityId,label:e.name.trim()===``?e.entityId:e.name,type:`helper`}));return i.length>0&&t.push({label:`Helpers`,options:i}),t}),areLoading:o,refreshItems:()=>{Promise.all([t(),i()]).catch(()=>{})}}},Fx=()=>{let{t:e}=M(),t=Zn(),n=On(),r=Tn(),i=j(null),a=j(!1),o=j(null),s=j(`device`),c=0,l=async(l,u,d)=>{let f=d??s.value;s.value=f;let p=++c;a.value=!0,o.value=null;try{let n;if(f===`helper`){let r=u?.entityOverrides?.[0]?.channelCategory,i=u?{device_category:u.deviceCategory,channel_category:r}:void 0,{data:a,error:o,response:s}=await t.client.POST(`/${Ie}/${Yb}/discovered-helpers/{entityId}/preview-mapping`,{params:{path:{entityId:l}},body:i});if(p!==c)throw new nx(`Request was superseded by a newer request.`);if(a!==void 0&&a.data){if(p!==c)throw new nx(`Request was superseded by a newer request.`);n=Dx(a.data)}else{let t=e(`devicesHomeAssistantPlugin.messages.mapping.previewError`);throw o&&(t=Kn(o,t)),new nx(t,s?.status)}}else{let r=u?Cx(u):void 0,{data:i,error:a,response:o}=await t.client.POST(`/${Ie}/${Yb}/discovered-devices/{id}/preview-mapping`,{params:{path:{id:l}},body:r});if(p!==c)throw new nx(`Request was superseded by a newer request.`);if(i!==void 0&&i.data){if(p!==c)throw new nx(`Request was superseded by a newer request.`);n=Ex(i.data)}else{let t=e(`devicesHomeAssistantPlugin.messages.mapping.previewError`);throw a&&(t=Kn(a,t)),new nx(t,o?.status)}}return i.value=n,a.value=!1,n}catch(t){p===c&&(a.value=!1);let i=t;throw p===c&&(i instanceof rx?(o.value=i,r.error(i.message)):i instanceof nx?i.message.includes(`superseded`)||(o.value=i,r.error(i.message)):(o.value=i,n.error(`Failed to fetch mapping preview:`,i),r.error(e(`devicesHomeAssistantPlugin.messages.mapping.previewError`)))),i}};return{preview:i,isLoading:a,error:o,itemType:s,fetchPreview:l,updatePreview:async(e,t,n)=>l(e,t,n??s.value),clearPreview:()=>{c++,i.value=null,o.value=null,a.value=!1}}},Ix=({id:e})=>{let{t}=M(),n=Tn(),r=On(),i=j($.NONE),a,{preview:o,isLoading:s,error:c,itemType:l,fetchPreview:u,clearPreview:d}=Fx(),{isAdopting:m,error:h,adoptDevice:g}=Ox(),{itemsOptions:_,areLoading:v,refreshItems:y}=Px(),b=e=>{for(let t of _.value){let n=t.options.find(t=>t.value===e);if(n)return n.type}return`device`},x=p(()=>Object.values(dr).filter(e=>e!==dr.generic).map(e=>({value:e,label:t(`devicesModule.categories.devices.${e}`)}))),S=P({...oa(ix),id:e,type:Zb,category:Object.values(dr).find(e=>e!==dr.generic)||dr.sensor,name:``,description:``,enabled:!0,haDeviceId:``}),C=gn(f(S)),w=j(void 0),T=j(void 0),E=j(void 0),ee=j(void 0),D=j(void 0),te=j(`one`),ne=j(new Set([`one`])),re=j(!1),O=j([]),k=j(null),A=async(e,s)=>{if(e===`one`){let e=s||w.value;if(!e)throw new rx(`Form reference not available`);if(e.clearValidate(),!await e.validate())throw new rx(`Form not valid`);i.value=$.WORKING;try{let e=b(S.haDeviceId);if(await u(S.haDeviceId,void 0,e),o.value){S.name=o.value.haDevice.name||S.name,k.value=o.value.suggestedDevice.category;let e=o.value.suggestedDevice.category;e!==dr.generic&&(S.category=e)}return te.value=`two`,ne.value.add(`two`),i.value=$.NONE,`ok`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(ie,2e3),e instanceof rx?n.error(e.message):n.error(t(`devicesHomeAssistantPlugin.messages.mapping.previewError`)),e}}else if(e===`two`){let e=s||T.value;if(!e)throw new rx(`Form reference not available`);if(e.clearValidate(),!await e.validate())throw new rx(`Form not valid`);i.value=$.WORKING;try{return await u(S.haDeviceId,{deviceCategory:S.category},l.value),o.value&&!S.name&&(S.name=o.value.haDevice.name||S.name),te.value=`three`,ne.value.add(`three`),i.value=$.NONE,`ok`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(ie,2e3),e instanceof rx?n.error(e.message):n.error(t(`devicesHomeAssistantPlugin.messages.mapping.previewError`)),e}}else if(e===`three`)return te.value=`four`,ne.value.add(`four`),`ok`;else if(e===`four`){let e=s||ee.value;if(!e)throw new rx(`Form reference not available`);e.clearValidate(),i.value=$.WORKING;try{if(o.value){let n=[];for(let e of o.value.entities){let t=O.value?.find(t=>t.entityId===e.entityId);if(t?.skip===!0)continue;let r=t?.channelCategory!==void 0,i=e.suggestedChannel?.category,a=i!==void 0&&i!==Jn.generic;t&&!t.skip&&!r&&!a&&n.push(e.entityId)}if(n.length>0){await e.validate().catch(()=>{});let r=n.slice(0,3).join(`, `),i=n.length>3?` (+${n.length-3} more)`:``;throw new rx(t(`devicesHomeAssistantPlugin.messages.mapping.missingChannelCategory`,{entities:r+i}))}}if(!await e.validate())throw new rx(`Form not valid`);if(O.value&&O.value.length>0){let e={entityOverrides:O.value,deviceCategory:S.category};await u(S.haDeviceId,e,l.value)}return te.value=`five`,ne.value.add(`five`),i.value=$.NONE,`ok`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(ie,2e3),e instanceof rx?n.error(e.message):n.error(t(`devicesHomeAssistantPlugin.messages.mapping.previewError`)),e}}else if(e===`five`){if(!o.value)throw new rx(`Mapping preview is required for device adoption.`);if(o.value.readyToAdopt!==!0)throw new rx(t(`devicesHomeAssistantPlugin.messages.mapping.notReadyToAdopt`));let e=s||D.value;if(!e)throw new rx(`Form reference not available`);if(e.clearValidate(),!await e.validate())throw new rx(`Form not valid`);let c=ix.safeParse(S);if(!c.success)throw r.error(`Schema validation failed with:`,c.error),new rx(`Failed to validate create device model.`);i.value=$.WORKING;let u=t(`devicesHomeAssistantPlugin.messages.devices.notCreated`,{device:S.name});try{if(!o.value||o.value.readyToAdopt!==!0)throw new rx(t(`devicesHomeAssistantPlugin.messages.mapping.notReadyToAdopt`));let e=o.value.entities.filter(e=>{if(e.status===`skipped`||e.status===`incompatible`)return!1;let t=O.value?.find(t=>t.entityId===e.entityId);return!(t?.skip||!e.suggestedChannel&&!t?.channelCategory||(t?.channelCategory||e.suggestedChannel?.category)===Jn.generic||!e.suggestedProperties||e.suggestedProperties.length===0)}).map(e=>{let t=O.value?.find(t=>t.entityId===e.entityId)?.channelCategory||e.suggestedChannel.category,n=e.suggestedChannel?.name||e.entityId;return{entityId:e.entityId,category:t,name:n,properties:e.suggestedProperties.map(t=>({category:t.category,haAttribute:t.haAttribute,dataType:t.dataType,permissions:t.permissions,format:t.format??null,haEntityId:t.haEntityId??e.entityId,haTransformer:t.haTransformer??null}))}}),r={haDeviceId:S.haDeviceId,name:S.name,category:S.category,description:S.description??null,enabled:S.enabled,channels:e};return await g(r,l.value),i.value=$.OK,a=window.setTimeout(ie,2e3),n.success(t(`devicesHomeAssistantPlugin.messages.mapping.adoptionSuccess`,{device:S.name})),`added`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(ie,2e3),!(e instanceof nx)&&!(e instanceof rx)&&!(e instanceof ps)&&(r.error(`Unexpected error during device adoption:`,e),n.error(u)),e}}else throw new rx(`Unknown step`)},ie=()=>{window.clearTimeout(a),i.value=$.NONE};return F(S,()=>{re.value=!(0,Xd.isEqual)(f(S),C)}),F(()=>S.haDeviceId,(e,t)=>{e!==t&&(d(),O.value=[])}),F(()=>o.value,e=>{e&&(S.name||=e.haDevice.name||S.name)}),{categoriesOptions:x,activeStep:te,reachedSteps:ne,preview:o,suggestedCategory:k,isPreviewLoading:s,previewError:c,isAdopting:m,adoptionError:h,itemsOptions:_,itemsOptionsLoading:v,entityOverrides:O,model:S,stepOneFormEl:w,stepTwoFormEl:T,stepThreeFormEl:E,stepFourFormEl:ee,stepFiveFormEl:D,formChanged:re,submitStep:A,clear:ie,clearPreview:d,refreshItems:y,formResult:i}},Lx={class:`space-y-4`},Rx={class:`font-semibold`},zx=k({__name:`category-selection-step`,props:{model:{},categoriesOptions:{},suggestedCategory:{}},setup(e,{expose:t}){let{t:n}=M(),r=j(void 0),a=P({category:[{required:!0,message:n(`devicesHomeAssistantPlugin.fields.devices.category.validation.required`),trigger:`change`}]});return t({stepTwoFormEl:r}),(t,o)=>(A(),i(`div`,Lx,[D(L(Q),{type:`info`,title:L(n)(`devicesHomeAssistantPlugin.headings.device.categorySelection`),description:L(n)(`devicesHomeAssistantPlugin.messages.categorySelection.description`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),D(L(Ir),{ref_key:`stepTwoFormEl`,ref:r,model:e.model,rules:a,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(n)(`devicesHomeAssistantPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:e.model.category,"onUpdate:modelValue":o[0]||=t=>e.model.category=t,placeholder:L(n)(`devicesHomeAssistantPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(e.categoriesOptions,t=>(A(),O(L(ti),{key:t.value,label:t.label,value:t.value},{default:B(()=>[t.value===e.suggestedCategory?(A(),i(V,{key:0},[l(`span`,Rx,z(t.label),1),D(L(Xt),{size:`small`,type:`success`,class:`ml-2`},{default:B(()=>[E(z(L(n)(`devicesHomeAssistantPlugin.labels.suggested`)),1)]),_:1})],64)):(A(),i(V,{key:1},[E(z(t.label),1)],64))]),_:2},1032,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),e.model.category?(A(),O(L(Q),{key:0,type:`info`,title:L(n)(`devicesModule.fields.devices.category.description`),description:L(n)(`devicesModule.texts.devices.description.${e.model.category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0)]),_:1},8,[`model`,`rules`])]))}}),Bx={class:`font-semibold`},Vx={class:`grid grid-cols-2 md:grid-cols-4 gap-4 text-center`},Hx={class:`text-2xl font-bold text-green-600`},Ux={class:`text-sm text-gray-500`},Wx={class:`text-2xl font-bold text-yellow-600`},Gx={class:`text-sm text-gray-500`},Kx={class:`text-2xl font-bold text-red-600`},qx={class:`text-sm text-gray-500`},Jx={class:`text-2xl font-bold text-blue-600`},Yx={class:`text-sm text-gray-500`},Xx=k({__name:`device-configuration-step`,props:{model:{},preview:{},entityOverrides:{}},setup(e,{expose:t}){let n=e,{t:r}=M(),i=j(void 0),a=P({name:[{required:!0,message:r(`devicesHomeAssistantPlugin.fields.devices.name.validation.required`),trigger:`change`}]}),o=p(()=>n.preview?n.preview.entities.filter(e=>e.status===`mapped`).length:0),s=p(()=>n.preview?n.preview.entities.filter(e=>e.status===`partial`).length:0),c=p(()=>n.preview?n.preview.entities.filter(e=>e.status===`unmapped`).length:0),u=p(()=>n.preview?n.preview.entities.filter(e=>e.status===`skipped`||n.entityOverrides?.find(t=>t.entityId===e.entityId)?.skip===!0).length:0);return t({stepFourFormEl:i}),(t,n)=>(A(),O(L(Ir),{ref_key:`stepFourFormEl`,ref:i,model:e.model,rules:a,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(r)(`devicesHomeAssistantPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:e.model.name,"onUpdate:modelValue":n[0]||=t=>e.model.name=t,placeholder:L(r)(`devicesHomeAssistantPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(r)(`devicesHomeAssistantPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:e.model.description,"onUpdate:modelValue":n[1]||=t=>e.model.description=t,placeholder:L(r)(`devicesHomeAssistantPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(r)(`devicesHomeAssistantPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:e.model.enabled,"onUpdate:modelValue":n[2]||=t=>e.model.enabled=t,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(ni),{shadow:`never`,"header-class":`py-2! px-4!`,"body-class":`px-0!`},{header:B(()=>[l(`div`,Bx,[E(z(L(r)(`devicesHomeAssistantPlugin.fields.mapping.totalEntities`))+`: `,1),D(L(Xt),{type:`info`,size:`small`},{default:B(()=>[E(z(e.preview?.entities.length??0),1)]),_:1})])]),default:B(()=>[l(`div`,Vx,[l(`div`,null,[l(`div`,Hx,z(o.value),1),l(`div`,Ux,z(L(r)(`devicesHomeAssistantPlugin.fields.mapping.mapped`)),1)]),l(`div`,null,[l(`div`,Wx,z(s.value),1),l(`div`,Gx,z(L(r)(`devicesHomeAssistantPlugin.fields.mapping.partial`)),1)]),l(`div`,null,[l(`div`,Kx,z(c.value),1),l(`div`,qx,z(L(r)(`devicesHomeAssistantPlugin.fields.mapping.unmapped`)),1)]),l(`div`,null,[l(`div`,Jx,z(u.value),1),l(`div`,Yx,z(L(r)(`devicesHomeAssistantPlugin.fields.mapping.excluded`)),1)])])]),_:1})]),_:1},8,[`model`,`rules`]))}}),Zx={class:`flex items-center gap-2`},Qx={key:0,class:`text-sm text-gray-500 mt-2`},$x={class:`flex flex-col gap-2`},eS={class:`grid grid-cols-[auto_1fr] gap-x-4 my-0`},tS={class:`m-0 inline-block font-bold`},nS={key:0},rS={key:1,class:`m-0`},iS={key:2},aS={key:3,class:`m-0`},oS={class:`m-0`},sS=k({__name:`device-selection-step`,props:{model:{},itemsOptions:{},itemsOptionsLoading:{type:Boolean}},emits:[`device-change`],setup(e,{expose:t,emit:n}){let r=e,a=n,{t:o}=M(),{devices:s}=Mx(),{helpers:c}=Nx(),u=p(()=>r.itemsOptions.reduce((e,t)=>e+t.options.length,0)),d=p(()=>{if(!r.model.haDeviceId)return null;let e=s.value.find(e=>e.id===r.model.haDeviceId);if(e)return{type:`device`,name:e.name,entitiesCount:e.entities.length,adoptedDeviceId:e.adoptedDeviceId};let t=c.value.find(e=>e.entityId===r.model.haDeviceId);return t?{type:`helper`,name:t.name,domain:t.domain,adoptedDeviceId:t.adoptedDeviceId}:null}),f=P({haDeviceId:[{required:!0,message:o(`devicesHomeAssistantPlugin.fields.devices.haDeviceId.validation.required`),trigger:`change`}]}),m=e=>{a(`device-change`,e)},h=j(void 0);return t({stepOneFormEl:h}),(t,n)=>(A(),O(L(Ir),{ref_key:`stepOneFormEl`,ref:h,model:e.model,rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{prop:`haDeviceId`},{default:B(()=>[D(L(ei),{modelValue:e.model.haDeviceId,"onUpdate:modelValue":n[0]||=t=>e.model.haDeviceId=t,placeholder:e.itemsOptionsLoading?L(o)(`devicesHomeAssistantPlugin.fields.devices.haDeviceId.loading`):L(o)(`devicesHomeAssistantPlugin.fields.devices.haDeviceId.placeholder`),loading:e.itemsOptionsLoading,disabled:e.itemsOptionsLoading,name:`haDeviceId`,filterable:``,onChange:m},{default:B(()=>[(A(!0),i(V,null,I(e.itemsOptions,e=>(A(),O(L($r),{key:e.label,label:e.label},{default:B(()=>[(A(!0),i(V,null,I(e.options,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},{default:B(()=>[l(`span`,Zx,[D(L(Xt),{type:e.type===`device`?`primary`:`success`,size:`small`},{default:B(()=>[E(z(e.type===`device`?`Device`:`Helper`),1)]),_:2},1032,[`type`]),E(` `+z(e.label),1)])]),_:2},1032,[`label`,`value`]))),128))]),_:2},1032,[`label`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`]),!e.itemsOptionsLoading&&u.value===0?(A(),i(`div`,Qx,z(L(o)(`devicesHomeAssistantPlugin.messages.devices.noDiscoveredDevices`)),1)):R(``,!0)]),_:1}),l(`div`,$x,[d.value?(A(),O(L(Q),{key:0,type:`info`,title:L(o)(`devicesHomeAssistantPlugin.headings.device.deviceInformation`),closable:!1,"show-icon":``},{default:B(()=>[l(`dl`,eS,[l(`dt`,null,z(L(o)(`devicesHomeAssistantPlugin.fields.devices.name.title`))+`:`,1),l(`dd`,tS,z(d.value.name),1),d.value.type===`device`?(A(),i(`dt`,nS,z(L(o)(`devicesHomeAssistantPlugin.fields.devices.entities.title`))+`: `,1)):R(``,!0),d.value.type===`device`?(A(),i(`dd`,rS,z(d.value.entitiesCount),1)):R(``,!0),d.value.type===`helper`?(A(),i(`dt`,iS,z(L(o)(`devicesHomeAssistantPlugin.fields.devices.domain.title`))+`: `,1)):R(``,!0),d.value.type===`helper`?(A(),i(`dd`,aS,z(d.value.domain),1)):R(``,!0),l(`dt`,null,z(L(o)(`devicesHomeAssistantPlugin.fields.devices.type.title`))+`:`,1),l(`dd`,oS,[D(L(Xt),{type:d.value.type===`device`?`primary`:`success`,size:`small`},{default:B(()=>[E(z(d.value.type===`device`?`Device`:`Helper`),1)]),_:1},8,[`type`])])])]),_:1},8,[`title`])):R(``,!0),d.value&&d.value.adoptedDeviceId?(A(),O(L(Q),{key:1,type:`warning`,title:L(o)(`devicesHomeAssistantPlugin.messages.devices.alreadyAdopted`),description:L(o)(`devicesHomeAssistantPlugin.messages.devices.alreadyAdoptedDescription`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0)])]),_:1},8,[`model`,`rules`]))}}),cS={key:0,class:`text-center py-8 text-gray-500`},lS={class:`text-sm mt-2`},uS={key:1,class:`space-y-4`},dS={class:`flex items-center gap-3 mb-3`},fS={class:`flex-1`},pS={class:`font-semibold`},mS={class:`text-sm text-gray-500 ml-2`},hS=k({__name:`mapping-customization-step`,props:{preview:{},isPreviewLoading:{type:Boolean},entityOverrides:{}},emits:[`update-overrides`],setup(e,{expose:t,emit:n}){let r=e,a=n,{t:o}=M(),c=e=>e.replace(/[.\[\]]/g,`_`),u=e=>{let t=r.preview?.entities.find(t=>t.entityId===e),n=r.entityOverrides?.find(t=>t.entityId===e);if(n?.skip===!0)return!1;if(n?.channelCategory||n&&!n.skip&&!n.channelCategory)return!0;let i=t?.suggestedChannel?.category;return i?i!==Jn.generic:!1},d=e=>{let t=r.entityOverrides?.find(t=>t.entityId===e);if(t?.channelCategory)return t.channelCategory;let n=(r.preview?.entities.find(t=>t.entityId===e))?.suggestedChannel?.category;if(n&&n!==Jn.generic)return n},f=P({});F(()=>[r.entityOverrides,r.preview],()=>{if(r.preview)for(let e of r.preview.entities){let t=e.entityId,n=`category_${c(t)}`;if(u(t)){let e=d(t);f[n]=e}else delete f[n]}else{let e=Object.keys(f).filter(e=>e.startsWith(`category_`));for(let t of e)delete f[t]}},{immediate:!0,deep:!0});let m=j(void 0),h=p(()=>{let e={};if(r.preview)for(let t of r.preview.entities){let n=t.entityId,r=`category_${c(n)}`;u(n)&&!d(n)&&(e[r]=[{required:!0,message:o(`devicesHomeAssistantPlugin.fields.mapping.suggestedChannel.validation.required`),trigger:`change`}])}return e}),_=e=>{let t=`category_${c(e)}`;return h.value[t]||[]};t({stepThreeFormEl:m,resetForm:()=>{let e=Object.keys(f).filter(e=>e.startsWith(`category_`));for(let t of e)delete f[t];m.value?.resetFields()}});let v=p(()=>Object.values(Jn).filter(e=>e!==Jn.generic).map(e=>({value:e,label:o(`devicesModule.categories.channels.${e}`)}))),y=(e,t)=>{let n=[...r.entityOverrides||[]],i=n.findIndex(t=>t.entityId===e),o=(r.preview?.entities.find(t=>t.entityId===e))?.suggestedChannel?.category,s=o&&o!==Jn.generic;if(t)if(i>=0){let t=n[i];t?.channelCategory?(n[i]={entityId:e,channelCategory:t.channelCategory},f[`category_${c(e)}`]=t.channelCategory):s?(n.splice(i,1),f[`category_${c(e)}`]=o):(n[i]={entityId:e},f[`category_${c(e)}`]=void 0)}else s?f[`category_${c(e)}`]=o:(n.push({entityId:e}),f[`category_${c(e)}`]=void 0);else{if(i>=0){let e=n[i];e&&(n[i]={...e,skip:!0})}else n.push({entityId:e,skip:!0});delete f[`category_${c(e)}`]}a(`update-overrides`,n)},b=e=>{let t=r.entityOverrides?.find(t=>t.entityId===e);return t!==void 0&&!t.skip&&!t.channelCategory},x=(e,t)=>{let n=[...r.entityOverrides||[]],i=n.findIndex(t=>t.entityId===e);if(i>=0){let e=n[i];e&&(n[i]={...e,channelCategory:t,skip:!1})}else n.push({entityId:e,channelCategory:t});f[`category_${c(e)}`]=t,a(`update-overrides`,n)};return(t,n)=>e.preview?(A(),i(`div`,uS,[D(L(Q),{type:`info`,title:L(o)(`devicesHomeAssistantPlugin.headings.device.mappingCustomization`),description:L(o)(`devicesHomeAssistantPlugin.texts.mapping.customizationDescription`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),D(L(Ir),{ref_key:`stepThreeFormEl`,ref:m,model:f,rules:h.value,"label-position":`top`},{default:B(()=>[(A(!0),i(V,null,I(e.preview.entities,e=>(A(),i(`div`,{key:e.entityId},[l(`div`,dS,[D(L(ii),{"model-value":u(e.entityId),onChange:t=>y(e.entityId,t===!0)},{default:B(()=>[E(z(L(o)(`devicesHomeAssistantPlugin.buttons.use`)),1)]),_:1},8,[`model-value`,`onChange`]),l(`div`,fS,[l(`span`,pS,z(e.entityId),1),D(L(Xt),{type:e.status===`mapped`?`success`:e.status===`partial`?`warning`:`danger`,size:`small`,class:`ml-2`},{default:B(()=>[E(z(e.status),1)]),_:2},1032,[`type`]),l(`span`,mS,`(`+z(e.domain)+`)`,1)])]),u(e.entityId)||b(e.entityId)?(A(),O(L(Z),{key:0,label:L(o)(`devicesHomeAssistantPlugin.fields.mapping.suggestedChannel.title`),prop:`category_${c(e.entityId)}`,required:!d(e.entityId),rules:_(e.entityId)},{default:B(()=>[D(L(ei),{"model-value":d(e.entityId),placeholder:L(o)(`devicesHomeAssistantPlugin.fields.devices.category.placeholder`),onChange:t=>x(e.entityId,t)},{default:B(()=>[(A(!0),i(V,null,I(v.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`placeholder`,`onChange`])]),_:2},1032,[`label`,`prop`,`required`,`rules`])):R(``,!0)]))),128))]),_:1},8,[`model`,`rules`])])):(A(),i(`div`,cS,[D(L(g),{size:48,class:`mb-4`},{default:B(()=>[D(L(s),{icon:`mdi:information-outline`})]),_:1}),l(`p`,null,z(L(o)(`devicesHomeAssistantPlugin.messages.mapping.noPreview`)),1),l(`p`,lS,z(L(o)(`devicesHomeAssistantPlugin.messages.mapping.selectDeviceFirst`)),1)]))}}),gS={class:`flex items-center justify-between`},_S={class:`flex items-center gap-2`},vS={class:`font-semibold`},yS={class:`flex items-center gap-2 text-sm text-gray-500`},bS={key:0},xS={key:1},SS={key:0,class:`mb-3`},CS={class:`flex items-center gap-2 mb-2`},wS={class:`font-medium`},TS={class:`text-sm text-gray-600`},ES={key:1,class:`mb-3`},DS={class:`font-medium mb-2`},OS={class:`grid grid-cols-2 gap-2 text-sm`},kS={class:`text-gray-600`},AS={key:2,class:`text-gray-400`},jS={key:2,class:`text-sm text-gray-500`},MS={class:`font-medium`},NS={key:3,class:`mt-2`},PS={key:4,class:`mt-2`},FS=k({__name:`entity-mapping-card`,props:{entity:{}},setup(e){let t=e,{t:n}=M(),r=p(()=>{switch(t.entity.status){case`mapped`:return`success`;case`partial`:return`warning`;case`unmapped`:return`danger`;case`skipped`:return`info`;case`incompatible`:return`warning`;default:return`info`}}),a=p(()=>{if(!t.entity.suggestedChannel)return`info`;switch(t.entity.suggestedChannel.confidence){case`high`:return`success`;case`medium`:return`warning`;case`low`:return`danger`;default:return`info`}}),o=e=>{switch(e){case`static`:return`info`;case`derived`:return`success`;case`command`:return`warning`;default:return`info`}},s=e=>{switch(e){case`static`:return n(`devicesHomeAssistantPlugin.fields.mapping.virtualTypes.static`);case`derived`:return n(`devicesHomeAssistantPlugin.fields.mapping.virtualTypes.derived`);case`command`:return n(`devicesHomeAssistantPlugin.fields.mapping.virtualTypes.command`);default:return n(`devicesHomeAssistantPlugin.fields.mapping.virtualTypes.virtual`)}};return(t,c)=>(A(),O(L(ni),{shadow:`never`,class:`mb-2`,"header-class":`py-2! px-4!`,"body-class":`py-2! px-4!`},{header:B(()=>[l(`div`,gS,[l(`div`,_S,[l(`span`,vS,z(e.entity.entityId),1),D(L(Xt),{type:r.value,size:`small`},{default:B(()=>[E(z(e.entity.status),1)]),_:1},8,[`type`])]),l(`div`,yS,[l(`span`,null,z(e.entity.domain),1),e.entity.deviceClass?(A(),i(`span`,bS,`•`)):R(``,!0),e.entity.deviceClass?(A(),i(`span`,xS,z(e.entity.deviceClass),1)):R(``,!0)])])]),default:B(()=>[e.entity.suggestedChannel?(A(),i(`div`,SS,[l(`div`,CS,[l(`span`,wS,z(L(n)(`devicesHomeAssistantPlugin.fields.mapping.suggestedChannel.title`))+`:`,1),l(`span`,null,z(e.entity.suggestedChannel.name),1),D(L(Xt),{type:a.value,size:`small`},{default:B(()=>[E(z(e.entity.suggestedChannel.confidence),1)]),_:1},8,[`type`])]),l(`div`,TS,z(L(n)(`devicesModule.categories.channels.${e.entity.suggestedChannel.category}`)),1)])):R(``,!0),e.entity.suggestedProperties.length>0?(A(),i(`div`,ES,[l(`div`,DS,z(L(n)(`devicesHomeAssistantPlugin.fields.mapping.properties`))+`:`,1),l(`div`,OS,[(A(!0),i(V,null,I(e.entity.suggestedProperties,e=>(A(),i(`div`,{key:`${e.category}-${e.haAttribute}`,class:`flex items-center gap-2`},[l(`span`,kS,z(e.name)+`:`,1),e.isVirtual?(A(),O(L(Xt),{key:0,size:`small`,type:o(e.virtualType),effect:`plain`},{default:B(()=>[E(z(s(e.virtualType)),1)]),_:2},1032,[`type`])):e.currentValue!==null&&e.currentValue!==void 0?(A(),O(L(Xt),{key:1,size:`small`,type:`info`},{default:B(()=>[E(z(e.currentValue),1)]),_:2},1024)):(A(),i(`span`,AS,`—`))]))),128))])])):R(``,!0),e.entity.unmappedAttributes.length>0?(A(),i(`div`,jS,[l(`span`,MS,z(L(n)(`devicesHomeAssistantPlugin.fields.mapping.unmappedAttributes`))+`:`,1),E(` `+z(e.entity.unmappedAttributes.join(`, `)),1)])):R(``,!0),e.entity.missingRequiredProperties.length>0?(A(),i(`div`,NS,[D(L(Q),{type:`warning`,title:L(n)(`devicesHomeAssistantPlugin.fields.mapping.missingRequiredProperties`),closable:!1,"show-icon":``,description:e.entity.missingRequiredProperties.map(e=>L(n)(`devicesModule.categories.channelsProperties.${e}`)).join(`, `)},null,8,[`title`,`description`])])):R(``,!0),e.entity.status===`incompatible`&&e.entity.incompatibleReason?(A(),i(`div`,PS,[D(L(Q),{type:`info`,title:L(n)(`devicesHomeAssistantPlugin.fields.mapping.incompatibleChannel`),closable:!1,"show-icon":``,description:e.entity.incompatibleReason},null,8,[`title`,`description`])])):R(``,!0)]),_:1}))}}),IS={class:`flex items-center justify-between`},LS={class:`font-semibold`},RS={class:`grid grid-cols-2 md:grid-cols-5 gap-4 text-center`},zS={class:`text-2xl font-bold text-green-600`},BS={class:`text-sm text-gray-500`},VS={class:`text-2xl font-bold text-yellow-600`},HS={class:`text-sm text-gray-500`},US={class:`text-2xl font-bold text-red-600`},WS={class:`text-sm text-gray-500`},GS={class:`text-2xl font-bold text-gray-600`},KS={class:`text-sm text-gray-500`},qS={class:`text-2xl font-bold text-orange-600`},JS={class:`text-sm text-gray-500`},YS={class:`grid grid-cols-1 gap-4 text-sm mx-4`},XS={class:`font-medium`},ZS={class:`ml-2`},QS={class:`font-medium`},$S={class:`ml-2`},eC={key:0},tC={class:`font-medium`},nC={class:`ml-2`},rC={key:1},iC={class:`font-medium`},aC={class:`ml-2`},oC={key:2},sC={class:`font-medium`},cC=k({__name:`mapping-summary`,props:{preview:{}},emits:[`open-debug`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=p(()=>n.preview.entities.filter(e=>e.status===`mapped`).length),c=p(()=>n.preview.entities.filter(e=>e.status===`partial`).length),u=p(()=>n.preview.entities.filter(e=>e.status===`unmapped`).length),d=p(()=>n.preview.entities.filter(e=>e.status===`skipped`).length),f=p(()=>n.preview.entities.filter(e=>e.status===`incompatible`).length),m=p(()=>n.preview.validation?.fillableWithVirtualCount??0),h=p(()=>{switch(n.preview.suggestedDevice.confidence){case`high`:return`success`;case`medium`:return`warning`;case`low`:return`danger`;default:return`info`}});return(t,n)=>(A(),O(L(ni),{shadow:`never`,"header-class":`py-2! px-4!`,"body-class":`px-0!`},{header:B(()=>[l(`div`,IS,[l(`div`,LS,z(L(a)(`devicesHomeAssistantPlugin.headings.mapping.summary`)),1),D(L(Oe),{type:`info`,size:`small`,plain:``,onClick:n[0]||=e=>r(`open-debug`)},{icon:B(()=>[D(L(s),{icon:`mdi:bug-outline`})]),default:B(()=>[E(` `+z(L(a)(`devicesHomeAssistantPlugin.buttons.debug`)),1)]),_:1})])]),default:B(()=>[l(`div`,RS,[l(`div`,null,[l(`div`,zS,z(o.value),1),l(`div`,BS,z(L(a)(`devicesHomeAssistantPlugin.fields.mapping.mapped`)),1)]),l(`div`,null,[l(`div`,VS,z(c.value),1),l(`div`,HS,z(L(a)(`devicesHomeAssistantPlugin.fields.mapping.partial`)),1)]),l(`div`,null,[l(`div`,US,z(u.value),1),l(`div`,WS,z(L(a)(`devicesHomeAssistantPlugin.fields.mapping.unmapped`)),1)]),l(`div`,null,[l(`div`,GS,z(d.value),1),l(`div`,KS,z(L(a)(`devicesHomeAssistantPlugin.fields.mapping.skipped`)),1)]),l(`div`,null,[l(`div`,qS,z(f.value),1),l(`div`,JS,z(L(a)(`devicesHomeAssistantPlugin.fields.mapping.incompatible`)),1)])]),D(L(Vt)),l(`div`,YS,[l(`div`,null,[l(`span`,XS,z(L(a)(`devicesHomeAssistantPlugin.fields.devices.name.title`))+`:`,1),l(`span`,ZS,z(e.preview.haDevice.name),1)]),l(`div`,null,[l(`span`,QS,z(L(a)(`devicesHomeAssistantPlugin.fields.mapping.suggestedCategory`))+`:`,1),l(`span`,$S,z(L(a)(`devicesModule.categories.devices.${e.preview.suggestedDevice.category}`)),1),D(L(Xt),{type:h.value,size:`small`,class:`ml-2`},{default:B(()=>[E(z(e.preview.suggestedDevice.confidence),1)]),_:1},8,[`type`])]),e.preview.haDevice.manufacturer?(A(),i(`div`,eC,[l(`span`,tC,z(L(a)(`devicesHomeAssistantPlugin.fields.devices.manufacturer.title`))+`:`,1),l(`span`,nC,z(e.preview.haDevice.manufacturer),1)])):R(``,!0),e.preview.haDevice.model?(A(),i(`div`,rC,[l(`span`,iC,z(L(a)(`devicesHomeAssistantPlugin.fields.devices.model.title`))+`:`,1),l(`span`,aC,z(e.preview.haDevice.model),1)])):R(``,!0),m.value>0?(A(),i(`div`,oC,[l(`span`,sC,z(L(a)(`devicesHomeAssistantPlugin.fields.mapping.validation.autoFilled`))+`:`,1),D(L(Xt),{type:`info`,size:`small`,class:`ml-2`},{default:B(()=>[E(z(m.value),1)]),_:1})])):R(``,!0)])]),_:1}))}}),lC={class:`space-y-2`},uC={class:`mb-1`},dC={key:0},fC=k({__name:`mapping-warnings`,props:{warnings:{}},setup(e){let{t}=M(),n=e=>{switch(e){case`missing_required_channel`:case`missing_required_property`:return`error`;case`unsupported_entity`:return`warning`;case`unknown_device_class`:return`info`;default:return`warning`}};return(r,a)=>e.warnings.length>0?(A(),O(L(ui),{key:0},{default:B(()=>[D(L(li),{title:L(t)(`devicesHomeAssistantPlugin.headings.mapping.warnings`,{count:e.warnings.length})},{default:B(()=>[l(`div`,lC,[(A(!0),i(V,null,I(e.warnings,(e,t)=>(A(),O(L(Q),{key:t,type:n(e.type),title:e.message,closable:!1,"show-icon":``},De({_:2},[e.entityId?{name:`title`,fn:B(()=>[E(z(e.entityId),1)]),key:`0`}:void 0,e.entityId?{name:`default`,fn:B(()=>[l(`div`,uC,z(e.message),1),e.suggestion?(A(),i(`small`,dC,z(e.suggestion),1)):R(``,!0)]),key:`1`}:{name:`default`,fn:B(()=>[E(z(e.suggestion),1)]),key:`2`}]),1032,[`type`,`title`]))),128))])]),_:1},8,[`title`])]),_:1})):R(``,!0)}}),pC={key:0,class:`flex justify-center items-center py-8`},mC={class:`ml-2`},hC={key:2,class:`space-y-4`},gC={class:`text-lg font-semibold mb-3`},_C={class:`space-y-2`},vC={class:`mb-4`},yC={class:`flex justify-between`},bC={key:3,class:`text-center py-8 text-gray-500`},xC={class:`text-sm mt-2`},SC=k({__name:`mapping-preview-step`,props:{preview:{},isPreviewLoading:{type:Boolean},previewError:{}},setup(e){let t=e,{t:n}=M(),r=Tn(),a=j(!1),o=p(()=>{if(!t.preview)return``;let e={_notice:`This data can be shared with developers to help diagnose mapping issues`,_timestamp:new Date().toISOString(),haDevice:t.preview.haDevice,suggestedDevice:t.preview.suggestedDevice,entities:t.preview.entities.map(e=>({entityId:e.entityId,domain:e.domain,deviceClass:e.deviceClass,status:e.status,incompatibleReason:e.incompatibleReason??null,currentState:e.currentState,attributes:e.attributes,suggestedChannel:e.suggestedChannel,suggestedProperties:e.suggestedProperties,unmappedAttributes:e.unmappedAttributes,missingRequiredProperties:e.missingRequiredProperties})),warnings:t.preview.warnings,validation:t.preview.validation,readyToAdopt:t.preview.readyToAdopt};return JSON.stringify(e,null,2)}),c=async()=>{try{await navigator.clipboard.writeText(o.value),r.success(n(`devicesHomeAssistantPlugin.messages.mapping.debugCopied`))}catch{r.error(n(`devicesHomeAssistantPlugin.messages.mapping.debugCopyFailed`))}};return(t,r)=>e.isPreviewLoading?(A(),i(`div`,pC,[D(L(g),{class:`is-loading`,size:32},{default:B(()=>[D(L(s),{icon:`mdi:loading`})]),_:1}),l(`span`,mC,z(L(n)(`devicesHomeAssistantPlugin.messages.mapping.previewLoading`)),1)])):e.previewError?(A(),O(L(Q),{key:1,type:`error`,title:L(n)(`devicesHomeAssistantPlugin.messages.mapping.previewError`),description:e.previewError.message,closable:!1,"show-icon":``},null,8,[`title`,`description`])):e.preview?(A(),i(`div`,hC,[D(cC,{preview:e.preview,onOpenDebug:r[0]||=e=>a.value=!0},null,8,[`preview`]),e.preview.warnings.length>0?(A(),O(fC,{key:0,warnings:e.preview.warnings},null,8,[`warnings`])):R(``,!0),l(`div`,null,[l(`h3`,gC,z(L(n)(`devicesHomeAssistantPlugin.headings.mapping.entityMappings`)),1),l(`div`,_C,[(A(!0),i(V,null,I(e.preview.entities,e=>(A(),O(FS,{key:e.entityId,entity:e},null,8,[`entity`]))),128))])]),D(L(Q),{type:e.preview.readyToAdopt?`success`:`warning`,title:e.preview.readyToAdopt?L(n)(`devicesHomeAssistantPlugin.messages.mapping.readyToAdopt`):L(n)(`devicesHomeAssistantPlugin.messages.mapping.notReadyToAdopt`),closable:!1,"show-icon":``},null,8,[`type`,`title`]),D(L(di),{modelValue:a.value,"onUpdate:modelValue":r[3]||=e=>a.value=e,title:L(n)(`devicesHomeAssistantPlugin.headings.mapping.debugData`),width:`80%`,top:`5vh`},{footer:B(()=>[l(`div`,yC,[D(L(Oe),{onClick:r[2]||=e=>a.value=!1},{default:B(()=>[E(z(L(n)(`devicesHomeAssistantPlugin.buttons.close`)),1)]),_:1}),D(L(Oe),{type:`primary`,onClick:c},{icon:B(()=>[D(L(s),{icon:`mdi:content-copy`})]),default:B(()=>[E(` `+z(L(n)(`devicesHomeAssistantPlugin.buttons.copyToClipboard`)),1)]),_:1})])]),default:B(()=>[l(`div`,vC,[D(L(Q),{type:`info`,title:L(n)(`devicesHomeAssistantPlugin.messages.mapping.debugDescription`),closable:!1,"show-icon":``},null,8,[`title`])]),D(L(U),{modelValue:o.value,"onUpdate:modelValue":r[1]||=e=>o.value=e,type:`textarea`,rows:20,readonly:``,class:`font-mono text-sm`},null,8,[`modelValue`])]),_:1},8,[`modelValue`,`title`])])):(A(),i(`div`,bC,[D(L(g),{size:48,class:`mb-4`},{default:B(()=>[D(L(s),{icon:`mdi:information-outline`})]),_:1}),l(`p`,null,z(L(n)(`devicesHomeAssistantPlugin.messages.mapping.noPreview`)),1),l(`p`,xC,z(L(n)(`devicesHomeAssistantPlugin.messages.mapping.selectDeviceFirst`)),1)]))}}),CC={class:`flex gap-2`},wC={class:`flex gap-2`},TC={class:`flex gap-2`},EC={class:`flex gap-2`},DC=k({name:`HomeAssistantDeviceAddForm`,__name:`home-assistant-device-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{loaded:c,fetchDevices:u}=fs(),d=j(null),f=j(null),m=j(null),h=j(null),{activeStep:v,reachedSteps:y,preview:b,suggestedCategory:x,isPreviewLoading:S,previewError:C,isAdopting:w,categoriesOptions:T,itemsOptions:ee,itemsOptionsLoading:te,entityOverrides:ne,model:re,formChanged:k,submitStep:ie,clearPreview:ae,refreshItems:oe,formResult:se}=Ix({id:n.id}),ce=p(()=>{let e=d.value?.stepOneFormEl;return e?L(e):void 0}),N=p(()=>{let e=f.value?.stepTwoFormEl;return e?L(e):void 0}),le=p(()=>{let e=m.value?.stepThreeFormEl;return e?L(e):void 0}),ue=p(()=>{let e=h.value?.stepFourFormEl;return e?L(e):void 0}),de=j(null),fe=p({get:()=>v.value,set:e=>{let t=v.value;if(!(e&&[`one`,`two`,`three`,`four`,`five`].includes(e))){_(()=>{v.value=t});return}let n=e;if(!y.value.has(n)){_(()=>{v.value=t});return}let r=[`one`,`two`,`three`,`four`,`five`],i=r.indexOf(t),a=r.indexOf(n);if(a<i){r.slice(a+1).forEach(e=>{y.value.delete(e)}),n===`one`||n===`two`?(ae(),ne.value=[]):n===`three`&&(ne.value=[]),v.value=n;return}if(a>i)if(t===`one`||t===`two`||t===`four`){de.value={targetStep:n,currentStep:t},_(()=>{v.value=t,_(async()=>{if(!de.value)return;let{currentStep:e}=de.value;de.value=null;try{e===`one`?await ie(e,ce.value):e===`two`?await ie(e,N.value):e===`four`&&await ie(e,le.value)}catch{}})});return}else{v.value=n;return}a!==i&&(v.value=n)}}),me=async()=>{try{v.value===`one`?await ie(v.value,ce.value):v.value===`two`?await ie(v.value,N.value):v.value===`four`?await ie(v.value,le.value):v.value===`five`?await ie(v.value,ue.value):await ie(v.value)}catch{}},he=()=>{},ge=e=>{ne.value=e},_e=()=>{let e=[`one`,`two`,`three`,`four`,`five`],t=e.indexOf(v.value);if(t>0){let n=e[t-1],r=v.value;if(!n)return;y.value.delete(r),t<e.length-1&&e.slice(t+1).forEach(e=>{y.value.delete(e)}),n===`one`||n===`two`?(ae(),ne.value=[]):n===`three`&&(ne.value=[]),v.value=n}};return pe(()=>{c.value||u().catch(()=>{}),oe()}),F(()=>se.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{if(e){r(`update:remote-form-submit`,!1);try{await me()}catch{}}}),F(()=>n.remoteFormReset,async e=>{r(`update:remote-form-reset`,!1),e&&(v.value=`one`,y.value=new Set([`one`]),ae(),x.value=null,ne.value=[],re.name=``,re.description=``,re.enabled=!0,re.haDeviceId=``,re.category=Object.values(dr).find(e=>e!==dr.generic)||dr.sensor,await _(),ce.value?.resetFields(),N.value?.resetFields(),m.value?.resetForm&&m.value.resetForm(),ue.value?.resetFields())}),F(()=>k.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),i(V,null,[D(L(ui),{modelValue:fe.value,"onUpdate:modelValue":t[0]||=e=>fe.value=e,accordion:``,"expand-icon-position":`left`},{default:B(()=>[D(L(li),{title:L(a)(`devicesHomeAssistantPlugin.headings.device.deviceSelection`),name:`one`},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:devices`})]),_:1})]),default:B(()=>[D(sS,{ref_key:`deviceSelectionStepRef`,ref:d,model:L(re),"items-options":L(ee),"items-options-loading":L(te),onDeviceChange:he},null,8,[`model`,`items-options`,`items-options-loading`])]),_:1},8,[`title`]),D(L(li),{title:L(a)(`devicesHomeAssistantPlugin.headings.device.categorySelection`),name:`two`,disabled:!L(y).has(`two`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:tag`})]),_:1})]),default:B(()=>[D(zx,{ref_key:`categorySelectionStepRef`,ref:f,model:L(re),"categories-options":L(T),"suggested-category":L(x)},null,8,[`model`,`categories-options`,`suggested-category`])]),_:1},8,[`title`,`disabled`]),D(L(li),{title:L(a)(`devicesHomeAssistantPlugin.headings.device.mappingPreview`),name:`three`,disabled:!L(y).has(`three`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:eye`})]),_:1})]),default:B(()=>[D(SC,{preview:L(b),"is-preview-loading":L(S),"preview-error":L(C)},null,8,[`preview`,`is-preview-loading`,`preview-error`])]),_:1},8,[`title`,`disabled`]),D(L(li),{title:L(a)(`devicesHomeAssistantPlugin.headings.device.mappingCustomization`),name:`four`,disabled:!L(y).has(`four`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:tune`})]),_:1})]),default:B(()=>[D(hS,{ref_key:`mappingCustomizationStepRef`,ref:m,preview:L(b),"is-preview-loading":L(S),"entity-overrides":L(ne),onUpdateOverrides:ge},null,8,[`preview`,`is-preview-loading`,`entity-overrides`])]),_:1},8,[`title`,`disabled`]),D(L(li),{title:L(a)(`devicesHomeAssistantPlugin.headings.device.deviceConfiguration`),name:`five`,disabled:!L(y).has(`five`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:cog`})]),_:1})]),default:B(()=>[D(Xx,{ref_key:`deviceConfigurationStepRef`,ref:h,model:L(re),preview:L(b),"entity-overrides":L(ne)},null,8,[`model`,`preview`,`entity-overrides`])]),_:1},8,[`title`,`disabled`])]),_:1},8,[`modelValue`]),L(v)===`one`?(A(),O(o,{key:0,defer:``,to:`#${L(sa)}`},[D(L(Oe),{loading:L(se)===L($).WORKING,disabled:L(se)!==L($).NONE,type:`primary`,onClick:me},De({default:B(()=>[E(` `+z(L(a)(`devicesHomeAssistantPlugin.buttons.next`)),1)]),_:2},[L(se)===L($).ERROR?{name:`icon`,fn:B(()=>[D(L(s),{icon:`mdi:cross-circle`})]),key:`0`}:void 0]),1032,[`loading`,`disabled`])],8,[`to`])):L(v)===`two`?(A(),O(o,{key:1,defer:``,to:`#${L(sa)}`},[l(`div`,CC,[D(L(Oe),{onClick:_e},{default:B(()=>[E(z(L(a)(`devicesHomeAssistantPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{loading:L(se)===L($).WORKING,disabled:L(se)!==L($).NONE,type:`primary`,onClick:me},{default:B(()=>[E(z(L(a)(`devicesHomeAssistantPlugin.buttons.next`)),1)]),_:1},8,[`loading`,`disabled`])])],8,[`to`])):L(v)===`three`?(A(),O(o,{key:2,defer:``,to:`#${L(sa)}`},[l(`div`,wC,[D(L(Oe),{onClick:_e},{default:B(()=>[E(z(L(a)(`devicesHomeAssistantPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{type:`primary`,onClick:me},{default:B(()=>[E(z(L(a)(`devicesHomeAssistantPlugin.buttons.next`)),1)]),_:1})])],8,[`to`])):L(v)===`four`?(A(),O(o,{key:3,defer:``,to:`#${L(sa)}`},[l(`div`,TC,[D(L(Oe),{onClick:_e},{default:B(()=>[E(z(L(a)(`devicesHomeAssistantPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{loading:L(se)===L($).WORKING||L(S),disabled:L(se)!==L($).NONE||L(S),type:`primary`,onClick:me},{default:B(()=>[E(z(L(a)(`devicesHomeAssistantPlugin.buttons.next`)),1)]),_:1},8,[`loading`,`disabled`])])],8,[`to`])):L(v)===`five`?(A(),O(o,{key:4,defer:``,to:`#${L(sa)}`},[l(`div`,EC,[D(L(Oe),{onClick:_e},{default:B(()=>[E(z(L(a)(`devicesHomeAssistantPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{loading:L(se)===L($).WORKING||L(w),disabled:L(se)!==L($).NONE||!L(b)?.readyToAdopt,type:`primary`,onClick:me},De({default:B(()=>[E(` `+z(L(a)(`devicesHomeAssistantPlugin.buttons.adoptDevice`)),1)]),_:2},[L(se)===L($).ERROR?{name:`icon`,fn:B(()=>[D(L(s),{icon:`mdi:cross-circle`})]),key:`0`}:void 0]),1032,[`loading`,`disabled`])])],8,[`to`])):R(``,!0)],64))}}),OC=()=>{let{devices:e,fetchDiscoveredDevices:t,areLoading:n}=Mx(),r=p(()=>wa(e.value,[e=>e.name.trim()===``?e.id:e.name],[`asc`]).map(e=>({value:e.id,label:e.name.trim()===``?e.id:e.name})));return t().catch(()=>{}),{devicesOptions:r,areLoading:n}},kC=k({name:`HomeAssistantDeviceEditForm`,__name:`home-assistant-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=Ss({device:n.device}),{devicesOptions:f,areLoading:p}=OC(),m=P({name:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.devices.name.validation.required`),trigger:`change`}],haDeviceId:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.devices.haDeviceId.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:m,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.devices.identifier.title`),prop:`identifier`},{default:B(()=>[D(L(U),{modelValue:L(s).identifier,"onUpdate:modelValue":t[1]||=e=>L(s).identifier=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.devices.identifier.placeholder`),name:`identifier`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[2]||=e=>L(s).name=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[3]||=e=>L(s).category=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``,readonly:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[4]||=e=>L(s).description=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[5]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.devices.haDeviceId.title`),prop:`haDeviceId`},{default:B(()=>[D(L(ei),{modelValue:L(s).haDeviceId,"onUpdate:modelValue":t[6]||=e=>L(s).haDeviceId=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.devices.haDeviceId.placeholder`),loading:L(p),name:`haDeviceId`,filterable:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),AC=({id:e})=>{let t=pn().getStore(kx),{data:n,semaphore:r}=ln(t);return{device:p(()=>e===null?null:n.value[e]??null),isLoading:p(()=>r.value.fetching.item.includes(e)?!0:n.value[e]===void 0&&r.value.fetching.items),fetchDevice:async()=>{await t.get({id:e})}}},jC=()=>{let e=pn().getStore(jx),{firstLoad:t,semaphore:n}=ln(e);return{states:p(()=>e.findAll()),areLoading:p(()=>!!n.value.fetching.items||!t.value),loaded:p(()=>t.value),fetchStates:async()=>{await e.fetch()}}},MC=({deviceId:e})=>{let{t}=M(),{device:n,fetchDevice:r}=AC({id:e}),{states:i,fetchStates:a,areLoading:o}=jC(),s=p(()=>{let e=wa(i.value.filter(e=>(n.value?.entities??[]).includes(e.entityId)),[e=>e.entityId],[`asc`]).map(e=>({value:e.entityId,label:`HA: ${`friendlyName`in e.attributes?e.attributes.friendlyName:e.entityId}`}));return[{value:Qb,label:t(`devicesHomeAssistantPlugin.misc.options.entities.noEntity`)},...e]});return r().then(()=>{a().catch(()=>{})}).catch(()=>{}),{entitiesOptions:s,areLoading:o}},NC=k({name:`SelectDiscoveredDeviceEntity`,__name:`select-discovered-device-entity`,props:{deviceId:{},modelValue:{},disabled:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=j(n.modelValue),{entitiesOptions:s,areLoading:c}=MC({deviceId:n.deviceId});return F(()=>o.value,e=>{r(`update:modelValue`,e)}),(e,t)=>(A(),O(L(ei),{modelValue:o.value,"onUpdate:modelValue":t[0]||=e=>o.value=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.haEntityId.placeholder`),loading:L(c),disabled:n.disabled,name:`haEntityId`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(s),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`]))}}),PC=({entityId:e})=>{let t=pn().getStore(jx),{data:n,semaphore:r}=ln(t);return{state:p(()=>e===null?null:n.value[e]??null),isLoading:p(()=>r.value.fetching.item.includes(e)?!0:n.value[e]===void 0&&r.value.fetching.items),fetchState:async()=>{await t.get({entityId:e})}}},FC=({entityId:e})=>{let{t}=M(),{state:n,fetchState:r,isLoading:i}=PC({entityId:e}),a=p(()=>{if(!n.value||!n.value.attributes)return[];let e=wa(Object.entries(n.value.attributes).map(([e])=>({value:e.replace(/([A-Z])/g,`_$1`).toLowerCase(),label:`HA: ${e}`})),[`label`],[`asc`]);return[{value:ex,label:t(`devicesHomeAssistantPlugin.misc.options.attributes.mainState`)},...e]});return r().catch(()=>{}),{attributesOptions:a,isLoading:i}},IC=k({name:`SelectEntityAttribute`,__name:`select-entity-attribute`,props:{entityId:{},modelValue:{},disabled:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=j(n.modelValue),{attributesOptions:s,isLoading:c}=FC({entityId:n.entityId});return F(()=>o.value,e=>{r(`update:modelValue`,e)}),(e,t)=>(A(),O(L(ei),{modelValue:o.value,"onUpdate:modelValue":t[0]||=e=>o.value=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.haAttribute.placeholder`),loading:L(c),disabled:n.disabled,name:`haAttribute`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(s),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`]))}}),LC=[`element-loading-text`],RC=k({name:`HomeAssistantChannelPropertyAddForm`,__name:`home-assistant-channel-property-add-form`,props:{id:{},type:{},channel:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{devices:o}=fs(),{categoriesOptions:s,channelsOptions:c,permissionsOptions:l,dataTypesOptions:u,formEl:d,model:f,formChanged:m,submit:h,formResult:g,loadingChannels:_}=_s({id:n.id,type:n.type,channelId:n.channel?.id}),v=p(()=>{let e=o.value.find(e=>e.id===n.channel?.device);return e&&`haDeviceId`in e&&typeof e.haDeviceId==`string`?e.haDeviceId:void 0}),y=P({channel:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.channelsProperties.channel.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.channelsProperties.category.validation.required`),trigger:`change`}],permissions:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.channelsProperties.permissions.validation.required`),trigger:`change`}],dataType:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.channelsProperties.dataType.validation.required`),trigger:`change`}],haEntityId:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.channelsProperties.haEntityId.validation.required`),trigger:`change`}],haAttribute:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.channelsProperties.haAttribute.validation.required`),trigger:`change`}]});return F(()=>g.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),h().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!d.value)return;d.value.resetFields()}}),F(()=>m.value,e=>{r(`update:remote-form-changed`,e)}),F(()=>f.haEntityId,e=>{e===`fb.no_entity`?f.haAttribute=$b:f.haAttribute===`fb.no_attribute`&&(f.haAttribute=ex)}),(t,n)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:d,model:L(f),rules:y,"label-position":`top`,"status-icon":``},{default:B(()=>[xe((A(),i(`div`,{"element-loading-text":L(a)(`devicesModule.texts.channels.loadingChannels`)},[D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.channel.title`),prop:`channel`},{default:B(()=>[D(L(ei),{modelValue:L(f).channel,"onUpdate:modelValue":n[0]||=e=>L(f).channel=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.channel.placeholder`),name:`channel`,size:`large`,filterable:``,readonly:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(c),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),e.channel?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.channelsProperties.channel.description`),description:L(a)(`devicesModule.texts.channels.description.${e.channel.category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0)],8,LC)),[[L(Fi),L(_)]]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(f).id,"onUpdate:modelValue":n[1]||=e=>L(f).id=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(f).name,"onUpdate:modelValue":n[2]||=e=>L(f).name=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.name.placeholder`),name:`name`,size:`large`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(f).category,"onUpdate:modelValue":n[3]||=e=>L(f).category=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.category.placeholder`),name:`category`,size:`large`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(s),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),(A(),O(L(mi),{key:`${e.channel?.category||L(Jn).generic}-${L(f).category}-permissions`,modelValue:L(f).permissions,"onUpdate:modelValue":n[4]||=e=>L(f).permissions=e,"permissions-options":L(l),"channel-category":e.channel?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`permissions-options`,`channel-category`,`property-category`])),(A(),O(L(pi),{key:`${e.channel?.category||L(Jn).generic}-${L(f).category}-dataType`,modelValue:L(f).dataType,"onUpdate:modelValue":n[5]||=e=>L(f).dataType=e,"data-types-options":L(u),"channel-category":e.channel?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`data-types-options`,`channel-category`,`property-category`])),[L(Mn).char,L(Mn).uchar,L(Mn).short,L(Mn).ushort,L(Mn).int,L(Mn).uint,L(Mn).float].includes(L(f).dataType)?(A(),O(L(fi),{key:`${e.channel?.category||L(Jn).generic}-${L(f).category}-min-max`,"min-value":L(f).minValue,"onUpdate:minValue":n[6]||=e=>L(f).minValue=e,"max-value":L(f).maxValue,"onUpdate:maxValue":n[7]||=e=>L(f).maxValue=e,"channel-category":e.channel?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`min-value`,`max-value`,`channel-category`,`property-category`])):R(``,!0),[L(Mn).enum].includes(L(f).dataType)?(A(),O(L(_i),{key:`${e.channel?.category||L(Jn).generic}-${L(f).category}-enum`,modelValue:L(f).enumValues,"onUpdate:modelValue":n[8]||=e=>L(f).enumValues=e,"channel-category":e.channel?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`channel-category`,`property-category`])):R(``,!0),(A(),O(L(gi),{key:`${e.channel?.category||L(Jn).generic}-${L(f).category}-invalid`,modelValue:L(f).invalid,"onUpdate:modelValue":n[9]||=e=>L(f).invalid=e,"channel-category":e.channel?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`channel-category`,`property-category`])),[L(Mn).char,L(Mn).uchar,L(Mn).short,L(Mn).ushort,L(Mn).int,L(Mn).uint,L(Mn).float].includes(L(f).dataType)?(A(),O(L(hi),{key:`${e.channel?.category||L(Jn).generic}-${L(f).category}-step`,modelValue:L(f).step,"onUpdate:modelValue":n[10]||=e=>L(f).step=e,"channel-category":e.channel?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`channel-category`,`property-category`])):R(``,!0),v.value?(A(),i(V,{key:3},[D(L(Vt)),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.haEntityId.title`),prop:`haEntityId`},{default:B(()=>[D(NC,{modelValue:L(f).haEntityId,"onUpdate:modelValue":n[11]||=e=>L(f).haEntityId=e,"device-id":v.value},null,8,[`modelValue`,`device-id`])]),_:1},8,[`label`])],64)):R(``,!0),L(f).haEntityId&&L(f).haEntityId!==L(`fb.no_entity`)?(A(),i(V,{key:4},[D(L(Vt)),(A(),O(L(Z),{key:`${e.channel?.category||L(Jn).generic}-${L(f).haEntityId}-haAttribute`,label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.haAttribute.title`),prop:`haAttribute`},{default:B(()=>[D(IC,{modelValue:L(f).haAttribute,"onUpdate:modelValue":n[12]||=e=>L(f).haAttribute=e,"entity-id":L(f).haEntityId},null,8,[`modelValue`,`entity-id`])]),_:1},8,[`label`]))],64)):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesModule.fields.channelsProperties.enterValue.title`),"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(f).enterValue,"onUpdate:modelValue":n[13]||=e=>L(f).enterValue=e},null,8,[`modelValue`])]),_:1},8,[`label`]),L(f).enterValue?(A(),O(L(Q),{key:5,type:`warning`,description:L(a)(`devicesModule.texts.channelsProperties.editValue`),closable:!1,"show-icon":``},null,8,[`description`])):R(``,!0),L(f).enterValue?(A(),O(L(Z),{key:6,label:L(a)(`devicesModule.fields.channelsProperties.value.title`),prop:`value`,class:`mt-2`},{default:B(()=>[D(L(U),{modelValue:L(f).value,"onUpdate:modelValue":n[14]||=e=>L(f).value=e,placeholder:L(a)(`devicesModule.fields.channelsProperties.value.placeholder`),name:`value`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),zC=[`element-loading-text`],BC=k({name:`HomeAssistantChannelPropertyEditForm`,__name:`home-assistant-channel-property-edit-form`,props:{property:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{devices:o}=fs(),{categoriesOptions:s,channelsOptions:c,permissionsOptions:l,dataTypesOptions:u,formEl:d,model:f,formChanged:m,submit:h,formResult:g,loadingChannels:_}=ys({property:n.property}),{channel:v}=Ds({id:n.property.channel}),y=p(()=>{let e=o.value.find(e=>e.id===v.value?.device);return e&&`haDeviceId`in e&&typeof e.haDeviceId==`string`?e.haDeviceId:void 0});return F(()=>g.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),h().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!d.value)return;d.value.resetFields()}}),F(()=>m.value,e=>{r(`update:remote-form-changed`,e)}),F(()=>f.haEntityId,e=>{e===`fb.no_entity`?f.haAttribute=$b:f.haAttribute===`fb.no_attribute`&&(f.haAttribute=void 0)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:d,model:L(f),"label-position":`top`,"status-icon":``},{default:B(()=>[xe((A(),i(`div`,{"element-loading-text":L(a)(`devicesModule.texts.channels.loadingChannels`)},[D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.channel.title`),prop:`channel`},{default:B(()=>[D(L(ei),{modelValue:L(f).channel,"onUpdate:modelValue":t[0]||=e=>L(f).channel=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.channel.placeholder`),name:`channel`,filterable:``,readonly:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(c),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(v)?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.channelsProperties.channel.description`),description:L(a)(`devicesModule.texts.channels.description.${L(v).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0)],8,zC)),[[L(Fi),L(_)]]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(f).id,"onUpdate:modelValue":t[1]||=e=>L(f).id=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(f).name,"onUpdate:modelValue":t[2]||=e=>L(f).name=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.name.placeholder`),name:`name`,size:`large`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(f).category,"onUpdate:modelValue":t[3]||=e=>L(f).category=e,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.category.placeholder`),name:`category`,size:`large`,filterable:``,readonly:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(s),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),(A(),O(mi,{key:`${L(v)?.category||L(Jn).generic}-${L(f).category}-permissions`,modelValue:L(f).permissions,"onUpdate:modelValue":t[4]||=e=>L(f).permissions=e,"permissions-options":L(l),"channel-category":L(v)?.category||L(Jn).generic,"property-category":L(f).category,disabled:``},null,8,[`modelValue`,`permissions-options`,`channel-category`,`property-category`])),(A(),O(pi,{key:`${L(v)?.category||L(Jn).generic}-${L(f).category}-dataType`,modelValue:L(f).dataType,"onUpdate:modelValue":t[5]||=e=>L(f).dataType=e,"data-types-options":L(u),"channel-category":L(v)?.category||L(Jn).generic,"property-category":L(f).category,disabled:``},null,8,[`modelValue`,`data-types-options`,`channel-category`,`property-category`])),[L(Mn).char,L(Mn).uchar,L(Mn).short,L(Mn).ushort,L(Mn).int,L(Mn).uint,L(Mn).float].includes(L(f).dataType)?(A(),O(fi,{key:`${L(v)?.category||L(Jn).generic}-${L(f).category}-min-max`,"min-value":L(f).minValue,"onUpdate:minValue":t[6]||=e=>L(f).minValue=e,"max-value":L(f).maxValue,"onUpdate:maxValue":t[7]||=e=>L(f).maxValue=e,"channel-category":L(v)?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`min-value`,`max-value`,`channel-category`,`property-category`])):R(``,!0),[L(Mn).enum].includes(L(f).dataType)?(A(),O(_i,{key:`${L(v)?.category||L(Jn).generic}-${L(f).category}-enum`,modelValue:L(f).enumValues,"onUpdate:modelValue":t[8]||=e=>L(f).enumValues=e,"channel-category":L(v)?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`channel-category`,`property-category`])):R(``,!0),(A(),O(gi,{key:`${L(v)?.category||L(Jn).generic}-${L(f).category}-invalid`,modelValue:L(f).invalid,"onUpdate:modelValue":t[9]||=e=>L(f).invalid=e,"channel-category":L(v)?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`channel-category`,`property-category`])),[L(Mn).char,L(Mn).uchar,L(Mn).short,L(Mn).ushort,L(Mn).int,L(Mn).uint,L(Mn).float].includes(L(f).dataType)?(A(),O(hi,{key:`${L(v)?.category||L(Jn).generic}-${L(f).category}-step`,modelValue:L(f).step,"onUpdate:modelValue":t[10]||=e=>L(f).step=e,"channel-category":L(v)?.category||L(Jn).generic,"property-category":L(f).category},null,8,[`modelValue`,`channel-category`,`property-category`])):R(``,!0),y.value?(A(),i(V,{key:3},[D(L(Vt)),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.haEntityId.title`),prop:`haEntityId`},{default:B(()=>[D(NC,{modelValue:L(f).haEntityId,"onUpdate:modelValue":t[11]||=e=>L(f).haEntityId=e,"device-id":y.value},null,8,[`modelValue`,`device-id`])]),_:1},8,[`label`])],64)):R(``,!0),L(f).haEntityId&&L(f).haEntityId!==L(`fb.no_entity`)?(A(),i(V,{key:4},[D(L(Vt)),(A(),O(L(Z),{key:`${L(v)?.category||L(Jn).generic}-${L(f).haEntityId}-haAttribute`,label:L(a)(`devicesHomeAssistantPlugin.fields.channelsProperties.haAttribute.title`),prop:`haAttribute`},{default:B(()=>[D(IC,{modelValue:L(f).haAttribute,"onUpdate:modelValue":t[12]||=e=>L(f).haAttribute=e,"entity-id":L(f).haEntityId},null,8,[`modelValue`,`entity-id`])]),_:1},8,[`label`]))],64)):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesModule.fields.channelsProperties.enterValue.title`),"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(f).enterValue,"onUpdate:modelValue":t[13]||=e=>L(f).enterValue=e},null,8,[`modelValue`])]),_:1},8,[`label`]),L(f).enterValue?(A(),O(L(Q),{key:5,type:`warning`,description:L(a)(`devicesModule.texts.channelsProperties.editValue`),closable:!1,"show-icon":``},null,8,[`description`])):R(``,!0),L(f).enterValue?(A(),O(L(Z),{key:6,label:L(a)(`devicesModule.fields.channelsProperties.value.title`),prop:`value`,class:`mt-2`},{default:B(()=>[D(L(U),{modelValue:L(f).value,"onUpdate:modelValue":t[14]||=e=>L(f).value=e,placeholder:L(a)(`devicesModule.fields.channelsProperties.value.placeholder`),name:`value`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0)]),_:1},8,[`model`]))}}),VC=j([]),HC=j(!1),UC=j(null),WC=()=>{let{t:e}=M(),t=Zn(),n=e=>{if(e&&typeof e==`object`&&`data`in e){let t=e.data;Array.isArray(t)&&(VC.value=t.map(e=>({hostname:e.hostname,port:e.port,name:e.name,version:e.version??null,uuid:e.uuid??null})))}};return{instances:VC,isLoading:HC,error:UC,fetchInstances:async()=>{if(!HC.value){HC.value=!0,UC.value=null;try{let{data:r,error:i}=await t.client.GET(`/${Ie}/${Yb}/discovery`);i?UC.value=e(`devicesHomeAssistantPlugin.messages.discovery.fetchFailed`):n(r)}catch(t){UC.value=t instanceof Error?t.message:e(`devicesHomeAssistantPlugin.messages.discovery.fetchFailed`)}finally{HC.value=!1}}},refreshInstances:async()=>{if(!HC.value){HC.value=!0,UC.value=null;try{let{data:r,error:i}=await t.client.POST(`/${Ie}/${Yb}/discovery/refresh`);i?UC.value=e(`devicesHomeAssistantPlugin.messages.discovery.refreshFailed`):n(r)}catch(t){UC.value=t instanceof Error?t.message:e(`devicesHomeAssistantPlugin.messages.discovery.refreshFailed`)}finally{HC.value=!1}}}}},GC={class:`flex gap-2 w-full`},KC={class:`flex flex-col`},qC={class:`font-medium`},JC={class:`text-xs text-gray-500`},YC=k({name:`HomeAssistantConfigForm`,__name:`home-assistant-config-form`,props:{remoteFormErrors:{default:()=>[]},layout:{default:Ta.DEFAULT},config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=p(()=>`supervisorMode`in n.config&&!!n.config.supervisorMode),{formEl:s,model:c,formChanged:u,submit:d,formResult:f}=Xi({config:n.config,messages:{success:a(`devicesHomeAssistantPlugin.messages.config.edited`),error:a(`devicesHomeAssistantPlugin.messages.config.notEdited`)}}),m=p(()=>{let e={};for(let t of n.remoteFormErrors)e[t.field]=t.message;return e}),{instances:h,isLoading:g,fetchInstances:_,refreshInstances:v}=WC(),y=p(()=>h.value.map(e=>({value:`${e.hostname}:${e.port}`,name:e.name,version:e.version}))),b=(e,t)=>{t(e?y.value.filter(t=>t.value.toLowerCase().includes(e.toLowerCase())):y.value)},x=()=>{h.value.length===0&&_()},S=()=>{v()};pe(()=>{_()});let C=P({hostname:[{required:!0,message:a(`devicesHomeAssistantPlugin.fields.config.hostname.validation.required`),trigger:`change`}]});return F(()=>f.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),d().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>u.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(c),rules:C,"label-position":`top`,"status-icon":``},{default:B(()=>[o.value?(A(),O(L(Q),{key:0,type:`success`,title:L(a)(`devicesHomeAssistantPlugin.headings.supervisorMode`),description:L(a)(`devicesHomeAssistantPlugin.texts.supervisorModeActive`),closable:!1},null,8,[`title`,`description`])):(A(),O(L(Q),{key:1,type:`info`,title:L(a)(`devicesHomeAssistantPlugin.headings.aboutConnectionSettings`),description:L(a)(`devicesHomeAssistantPlugin.texts.aboutConnectionSettings`),closable:!1},null,8,[`title`,`description`])),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(c).enabled,"onUpdate:modelValue":t[0]||=e=>L(c).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.config.apiKey.title`),prop:`apiKey`,error:m.value.apiKey},{default:B(()=>[D(L(Zp),{modelValue:L(c).apiKey,"onUpdate:modelValue":t[1]||=e=>L(c).apiKey=e,configured:L(c).apiKeyConfigured,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.config.apiKey.placeholder`),disabled:o.value,name:`apiKey`,type:`textarea`,rows:4},null,8,[`modelValue`,`configured`,`placeholder`,`disabled`])]),_:1},8,[`label`,`error`]),D(L(Z),{label:L(a)(`devicesHomeAssistantPlugin.fields.config.hostname.title`),prop:`hostname`,error:m.value.hostname},{default:B(()=>[l(`div`,GC,[D(L(Ur),{modelValue:L(c).hostname,"onUpdate:modelValue":t[2]||=e=>L(c).hostname=e,"fetch-suggestions":b,placeholder:L(a)(`devicesHomeAssistantPlugin.fields.config.hostname.placeholder`),loading:L(g),disabled:o.value,class:`flex-1`,clearable:``,onFocus:x},{default:B(({item:e})=>[l(`div`,KC,[l(`span`,qC,z(e.value),1),l(`span`,JC,[E(z(e.name)+` `,1),e.version?(A(),i(V,{key:0},[E(` (v`+z(e.version)+`)`,1)],64)):R(``,!0)])])]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`]),o.value?R(``,!0):(A(),O(L(nt),{key:0,content:L(a)(`devicesHomeAssistantPlugin.buttons.refreshDiscovery`),placement:`top`},{default:B(()=>[D(L(Oe),{loading:L(g),onClick:S},{default:B(()=>[...t[3]||=[l(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[l(`path`,{d:`M21.5 2v6h-6M2.5 22v-6h6M2 11.5a10 10 0 0 1 18.8-4.3M22 12.5a10 10 0 0 1-18.8 4.2`})],-1)]]),_:1},8,[`loading`])]),_:1},8,[`content`]))])]),_:1},8,[`label`,`error`])]),_:1},8,[`model`,`rules`]))}}),XC=e=>({id:e.id,startedAt:e.startedAt,candidates:e.candidates.map(e=>({key:e.key,kind:e.kind,sourceId:e.sourceId,name:e.name,manufacturer:e.manufacturer??null,model:e.model??null,status:e.status,suggestedCategory:e.suggestedCategory??null,previewChannelCount:e.previewChannelCount,entityCount:e.entityCount,warningCount:e.warningCount,adoptedDeviceId:e.adoptedDeviceId??null,error:e.error??null}))}),ZC=e=>e.results.map(e=>({key:e.key,name:e.name,status:e.status,error:e.error??null})),QC=e=>({data:{keys:e}}),$C=()=>{let{t:e}=M(),t=Zn(),n=Tn(),r=On(),i=pn(),a=i.getStore(jo),o=i.getStore(kx),s=i.getStore(Ax),c=j(null),l=j(null),u=j([]),d=j($.NONE),f=j(null),m=null,h=null,g=!1,_=()=>{m!==null&&(clearInterval(m),m=null)},v=e=>{_(),m=setInterval(()=>{t.client.GET(`/${Ie}/${Yb}/wizard/{id}`,{params:{path:{id:e}}}).then(({error:e})=>{e&&r.warn(Kn(e,`Failed to keep the Home Assistant wizard session active`))}).catch(e=>r.warn(`Failed to keep the Home Assistant wizard session active`,e))},24e4)},y=async e=>{try{let{error:n}=await t.client.DELETE(`/${Ie}/${Yb}/wizard/{id}`,{params:{path:{id:e}}});n&&r.warn(Kn(n,`Failed to cleanly end Home Assistant wizard session`))}catch(e){r.warn(`Failed to cleanly end Home Assistant wizard session`,e)}},b=p(()=>wa(c.value?.candidates??[],[e=>e.status===`ready`?0:1,e=>e.name],[`asc`,`asc`])),x=p(()=>b.value.map(t=>({key:t.key,label:t.name,subLabel:[t.manufacturer,t.model].filter(Boolean).join(` · `)||null,identifier:t.sourceId,status:t.status,statusLabel:t.error??(t.status===`needs_attention`?e(`devicesHomeAssistantPlugin.wizard.statuses.needsAttention`):void 0),adoptable:t.status===`ready`,selectedByDefault:!1,willUpdate:!1,suggestedName:t.name,suggestedCategory:t.suggestedCategory,categoryOptions:t.suggestedCategory===null?[]:[{value:t.suggestedCategory,label:e(`devicesModule.categories.devices.${t.suggestedCategory}`)}],cells:{kind:{render:`tag`,value:e(`devicesHomeAssistantPlugin.wizard.kinds.${t.kind}`),variant:`info`},entities:{render:`tag`,value:e(`devicesHomeAssistantPlugin.wizard.columns.entitiesCount`,{count:t.entityCount}),variant:`info`},channels:{render:`tag`,value:e(`devicesHomeAssistantPlugin.wizard.columns.channelsCount`,{count:t.previewChannelCount}),variant:t.warningCount>0?`warning`:`success`,tooltip:t.error??(t.warningCount>0?e(`devicesHomeAssistantPlugin.wizard.columns.warningsCount`,{count:t.warningCount}):void 0)}}}))),S=p(()=>u.value.map(e=>({key:e.key,name:e.name,identifier:c.value?.candidates.find(t=>t.key===e.key)?.sourceId??e.key,status:e.status,error:e.error}))),C=p(()=>{let t={type:`action`,id:`refresh`,label:e(`devicesHomeAssistantPlugin.wizard.actions.refresh`),icon:`mdi:refresh`,variant:`default`,disabled:d.value===$.WORKING,loading:d.value===$.WORKING,handler:ee};if(f.value!==null)return[{type:`banner`,id:`connection-error`,severity:`warning`,title:e(`devicesHomeAssistantPlugin.wizard.connectionError.title`),message:f.value,link:{label:e(`devicesHomeAssistantPlugin.wizard.connectionError.openConfig`),to:{name:Da.CONFIG_PLUGIN_EDIT,params:{plugin:Xb}}}},t];let n=b.value.filter(e=>e.status===`needs_attention`).length;return n===0?[t]:[{type:`banner`,id:`manual-review`,severity:`info`,title:e(`devicesHomeAssistantPlugin.wizard.manualReview.title`,{count:n}),message:e(`devicesHomeAssistantPlugin.wizard.manualReview.message`),link:{label:e(`devicesHomeAssistantPlugin.wizard.manualReview.open`),to:{name:Jo.DEVICES_ADD}}},t]}),w=async()=>{d.value=$.WORKING,f.value=null;let r;try{r=await t.client.POST(`/${Ie}/${Yb}/wizard`)}catch(t){let r=e(`devicesHomeAssistantPlugin.wizard.messages.sessionNotStarted`),i=t instanceof Error&&t.message?t.message:r;throw d.value=$.ERROR,f.value=i,n.error(i),new nx(i,null,t instanceof Error?t:null)}let{data:i,error:a,response:o}=r;if(i!==void 0){let e=XC(i.data);if(g){await y(e.id);return}c.value=e,l.value=e.id,v(e.id),u.value=[],d.value=$.OK;return}let s=e(`devicesHomeAssistantPlugin.wizard.messages.sessionNotStarted`),p=a?Kn(a,s):s;throw d.value=$.ERROR,f.value=p,n.error(p),new nx(p,o.status)},T=async()=>{_();let e=c.value;c.value=null,f.value=null,e&&await y(e.id)},E=async()=>{g=!0,await T()},ee=()=>h===null?(d.value=$.WORKING,h=(async()=>{await T(),await w()})().finally(()=>{h=null}),h):h;return{title:e(`devicesHomeAssistantPlugin.wizard.title`),subtitle:e(`devicesHomeAssistantPlugin.wizard.subtitle`),breadcrumbLabel:e(`devicesHomeAssistantPlugin.wizard.breadcrumb`),pluginType:Xb,identifierLabel:e(`devicesHomeAssistantPlugin.wizard.columns.identifier`),confirmationMode:`selection-only`,rows:x,results:S,columns:[{key:`kind`,label:e(`devicesHomeAssistantPlugin.wizard.columns.kind`),steps:[`discover`],width:120},{key:`entities`,label:e(`devicesHomeAssistantPlugin.wizard.columns.entities`),steps:[`discover`,`confirm`],width:120},{key:`channels`,label:e(`devicesHomeAssistantPlugin.wizard.columns.channels`),steps:[`discover`,`confirm`],width:130}],controls:C,sessionKey:p(()=>l.value),ready:p(()=>c.value!==null||f.value!==null),busy:p(()=>d.value===$.WORKING),capabilities:{addMore:!0},start:w,adopt:async i=>{if(!c.value)return[];d.value=$.WORKING;let l;try{l=await t.client.POST(`/${Ie}/${Yb}/wizard/{id}/adopt`,{params:{path:{id:c.value.id}},body:QC(i.map(e=>e.key))})}catch(t){let r=e(`devicesHomeAssistantPlugin.wizard.messages.adoptionFailed`),i=t instanceof Error&&t.message?t.message:r;throw d.value=$.ERROR,n.error(i),new nx(i,null,t instanceof Error?t:null)}let{data:f,error:p,response:m}=l;if(f!==void 0){if(u.value=ZC(f.data),u.value.some(e=>e.status===`created`)){let e=await Promise.allSettled([a.fetch(),o.fetch(),s.fetch()]);for(let t of e)t.status===`rejected`&&r.warn(`Failed to refresh a device store after Home Assistant bulk adoption`,t.reason)}return d.value=u.value.some(e=>e.status===`failed`)?$.ERROR:$.OK,S.value}let h=e(`devicesHomeAssistantPlugin.wizard.messages.adoptionFailed`),g=p?Kn(p,h):h;throw d.value=$.ERROR,n.error(g),new nx(g,m.status)},restart:ee,dispose:E}},ew={"cs-CZ":{fields:{devices:{id:{title:`Interní identifikátor`,placeholder:`ID zařízení`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zařízení`},category:{title:`Kategorie`,placeholder:`Kategorie zařízení`,description:`O kategorii`,validation:{required:`Vyberte prosím kategorii zařízení`}},name:{title:`Název`,placeholder:`Název zařízení`,validation:{required:`Vyplňte prosím název zařízení`}},description:{title:`Popis`,placeholder:`Popis zařízení`},enabled:{title:`Povoleno`,placeholder:`Povolit nebo zakázat zařízení`},haDeviceId:{title:`Zařízení Home Assistant`,placeholder:`Vyberte zařízení z instance Home Assistant`,loading:`Načítání zařízení z Home Assistant...`,validation:{required:`Vyberte prosím zařízení Home Assistant`}},manufacturer:{title:`Výrobce`},model:{title:`Model`},entities:{title:`Entity`},domain:{title:`Doména`},type:{title:`Typ`}},channelsProperties:{id:{title:`Interní identifikátor`,placeholder:`ID vlastnosti kanálu`},channel:{title:`Kanál`,placeholder:`Vyberte kanál`,validation:{required:`Vyberte prosím kanál vlastnosti kanálu`}},category:{title:`Kategorie`,placeholder:`Kategorie vlastnosti kanálu`,validation:{required:`Vyberte prosím kategorii vlastnosti kanálu`}},name:{title:`Název`,placeholder:`Název vlastnosti kanálu`},dataType:{validation:{required:`Vyberte prosím datový typ`}},permissions:{validation:{required:`Vyberte prosím oprávnění`}},haEntityId:{title:`Entita zařízení Home Assistant`,placeholder:`Vyberte entitu zařízení Home Assistant`,validation:{required:`Vyberte prosím entitu zařízení Home Assistant`}},haAttribute:{title:`Atribut entity Home Assistant`,placeholder:`Vyberte atribut entity Home Assistant`,validation:{required:`Vyberte prosím atribut entity Home Assistant`}}},mapping:{totalEntities:`Celkem entit`,mapped:`Mapováno`,partial:`Částečně`,unmapped:`Nemapováno`,skipped:`Přeskočeno`,incompatible:`Nekompatibilní`,excluded:`Vyloučeno`,suggestedCategory:`Navrhovaná kategorie`,suggestedChannel:{title:`Navrhovaný kanál`,validation:{required:`Vyberte prosím kategorii kanálu pro tuto entitu`}},properties:`Vlastnosti`,unmappedAttributes:`Nemapované atributy`,missingRequiredProperties:`Chybějící povinné vlastnosti`,incompatibleChannel:`Kanál není podporován pro tuto kategorii zařízení`,virtualTypes:{static:`Statický`,derived:`Automatický`,command:`Příkaz`,virtual:`Virtuální`},validation:{valid:`Konfigurace zařízení je platná`,invalid:`Konfigurace zařízení má problémy`,missingChannels:`Chybějící povinné kanály`,missingProperties:`Chybějící povinné vlastnosti`,autoFilled:`Automaticky doplněno virtuálními vlastnostmi`,unknownChannels:`Kanály nepovolené pro tento typ zařízení`,duplicateChannels:`Duplicitní kanály (měly by být unikátní)`,constraintViolations:`Porušení omezení konfigurace`}},config:{enabled:{title:`Povoleno`},apiKey:{title:`API klíč`,placeholder:`Zadejte svůj dlouhodobý přístupový token Home Assistant`,validation:{required:`Vyplňte prosím API klíč`}},hostname:{title:`Název hostitele`,placeholder:`Zadejte název hostitele Home Assistant (např. homeassistant.local:8123)`,validation:{required:`Vyplňte prosím název hostitele`}}}},headings:{aboutConnectionSettings:`Připojení Home Assistant`,supervisorMode:`Spravováno Home Assistantem`,device:{deviceSelection:`Vybrat zařízení`,deviceInformation:`Informace o zařízení`,categorySelection:`Kategorie zařízení`,mappingPreview:`Náhled mapování`,mappingCustomization:`Přizpůsobení mapování`,deviceConfiguration:`Konfigurace zařízení`},mapping:{entityMappings:`Mapování entit`,warnings:`Varování mapování ({count})`,errors:`Chyby`,summary:`Souhrn mapování`,debugData:`Ladicí data`}},messages:{config:{edited:`Změny uloženy! Konfigurace pluginu Home Assistant byla aktualizována.`,notEdited:`Něco se pokazilo. Aktualizace konfigurace pluginu Home Assistant nebyla úspěšná.`},devices:{created:`Nové zařízení Home Assistant bylo úspěšně přidáno.`,notCreated:`Něco se pokazilo. Nepodařilo se vytvořit zařízení Home Assistant.`,exists:`Zařízení je již adoptováno v systému.`,alreadyAdopted:`Toto zařízení je již adoptováno`,alreadyAdoptedDescription:`Pokračování znovu adoptuje zařízení s novou konfigurací. Stávající zařízení bude aktualizováno.`,noDiscoveredDevices:`Žádná zařízení Home Assistant nejsou k dispozici. Ujistěte se, že vaše instance Home Assistant je připojena a zařízení jsou vyhledána.`},mapping:{previewLoading:`Načítání náhledu mapování...`,previewError:`Nepodařilo se načíst náhled mapování`,adoptionSuccess:`Zařízení {device} bylo úspěšně adoptováno`,adoptionError:`Nepodařilo se adoptovat zařízení`,readyToAdopt:`Zařízení je připraveno k adopci`,notReadyToAdopt:`Zařízení má chybějící povinná mapování`,noPreview:`Žádný náhled mapování není k dispozici`,selectDeviceFirst:`Vyberte prosím zařízení v kroku 1 pro vygenerování náhledu mapování`,invalidSuggestedCategory:`Navrhovaná kategorie není podporována. Vyberte prosím platnou kategorii.`,missingChannelCategory:`Následující entity jsou povoleny, ale chybí jim kategorie kanálu: {entities}. Vyberte prosím kategorii kanálu pro každou povolenou entitu před pokračováním.`,debugDescription:`Zkopírujte tato data a sdílejte je s vývojáři pro pomoc s diagnostikou problémů mapování nebo požadavkem na vlastní mapování.`,debugCopied:`Ladicí data zkopírována do schránky`,debugCopyFailed:`Nepodařilo se zkopírovat ladicí data do schránky`},categorySelection:{description:`Na základě entit zařízení byla navržena kategorie. Zkontrolujte prosím a vyberte správnou kategorii pro toto zařízení. Náhled mapování bude aktualizován na základě vašeho výběru.`},discovery:{fetchFailed:`Nepodařilo se načíst nalezené instance`,refreshFailed:`Nepodařilo se obnovit nalezené instance`}},buttons:{loadPreview:`Načíst náhled`,updatePreview:`Aktualizovat náhled`,adoptDevice:`Adoptovat zařízení`,next:`Další`,previous:`Předchozí`,skip:`Přeskočit`,use:`Použít`,applyChanges:`Aplikovat změny`,refreshDiscovery:`Obnovit vyhledávání`,debug:`Ladění`,copyToClipboard:`Kopírovat do schránky`,close:`Zavřít`},labels:{suggested:`Navrhováno`},misc:{options:{entities:{noEntity:`Nepřipojeno k entitě zařízení`},attributes:{noAttribute:`Nepřipojeno k atributu entity`,mainState:`Hlavní stavový atribut entity`}}},texts:{aboutConnectionSettings:`Nakonfigurujte připojení k vaší instanci Home Assistant. Pokud je povoleno, zařízení z Home Assistant budou dostupná ve Smart Panelu. Budete potřebovat dlouhodobý přístupový token z Home Assistant a název hostitele nebo IP adresu vaší instance.`,supervisorModeActive:`Tento plugin běží jako doplněk Home Assistant. Připojení je spravováno automaticky pomocí Supervisor API. API klíč a název hostitele jsou konfigurovány systémem a nelze je měnit ručně.`,mapping:{customizationDescription:`Můžete přizpůsobit mapování změnou kategorií kanálů pro entity nebo povolením/zakázáním entit. Ve výchozím nastavení jsou všechny entity s navrženou kategorií kanálu povoleny. Klikněte na 'Další' pro pokračování s vybranou konfigurací.`}},wizard:{title:`Hromadně přidat zařízení Home Assistant`,subtitle:`Zkontrolujte automaticky namapovaná zařízení a přidejte vybrané položky bez další konfigurace.`,breadcrumb:`Hromadný import Home Assistant`,columns:{identifier:`ID Home Assistant`,kind:`Typ`,entities:`Entity`,entitiesCount:`Počet entit: {count}`,channels:`Kanály`,channelsCount:`Počet kanálů: {count}`,warningsCount:`Počet upozornění mapování: {count}`},kinds:{device:`Zařízení`,helper:`Pomocná entita`},statuses:{needsAttention:`Ruční kontrola`},actions:{refresh:`Obnovit inventář`},manualReview:{title:`Položky vyžadující ruční kontrolu: {count}`,message:`Tyto položky nejsou vybrány pro hromadný import. Pro kontrolu kategorie, kanálů a vlastností použijte stávající řízené přidání.`,open:`Otevřít ruční přidání zařízení`},connectionError:{title:`Inventář Home Assistant není dostupný`,openConfig:`Otevřít konfiguraci Home Assistant`},messages:{sessionNotStarted:`Zařízení Home Assistant se nepodařilo připravit pro hromadný import.`,adoptionFailed:`Vybraná zařízení Home Assistant se nepodařilo přidat.`}}},"de-DE":{fields:{devices:{id:{title:`Interner Bezeichner`,placeholder:`Geräte-ID`},identifier:{title:`Systembezeichner`,placeholder:`Geräte-Systembezeichner`},category:{title:`Kategorie`,placeholder:`Gerätekategorie`,description:`Über Kategorie`,validation:{required:`Bitte wählen Sie eine Gerätekategorie`}},name:{title:`Name`,placeholder:`Gerätename`,validation:{required:`Bitte geben Sie den Gerätenamen ein`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung`},enabled:{title:`Aktiviert`,placeholder:`Gerät aktivieren oder deaktivieren`},haDeviceId:{title:`Home Assistant-Gerät`,placeholder:`Gerät aus der Home Assistant-Instanz auswählen`,loading:`Geräte werden von Home Assistant geladen...`,validation:{required:`Bitte wählen Sie ein Home Assistant-Gerät`}},manufacturer:{title:`Hersteller`},model:{title:`Modell`},entities:{title:`Entitäten`},domain:{title:`Domäne`},type:{title:`Typ`}},channelsProperties:{id:{title:`Interner Bezeichner`,placeholder:`Kanaleigenschafts-ID`},channel:{title:`Kanal`,placeholder:`Kanal auswählen`,validation:{required:`Bitte wählen Sie einen Kanaleigenschafts-Kanal`}},category:{title:`Kategorie`,placeholder:`Kanaleigenschafts-Kategorie`,validation:{required:`Bitte wählen Sie eine Kanaleigenschafts-Kategorie`}},name:{title:`Name`,placeholder:`Kanaleigenschafts-Name`},dataType:{validation:{required:`Bitte wählen Sie einen Datentyp`}},permissions:{validation:{required:`Bitte wählen Sie Berechtigungen`}},haEntityId:{title:`Home Assistant Geräteentität`,placeholder:`Home Assistant Geräteentität auswählen`,validation:{required:`Bitte wählen Sie eine Home Assistant Geräteentität`}},haAttribute:{title:`Home Assistant Entitätsattribut`,placeholder:`Home Assistant Entitätsattribut auswählen`,validation:{required:`Bitte wählen Sie ein Home Assistant Entitätsattribut`}}},mapping:{totalEntities:`Entitäten gesamt`,mapped:`Zugeordnet`,partial:`Teilweise`,unmapped:`Nicht zugeordnet`,skipped:`Übersprungen`,incompatible:`Inkompatibel`,excluded:`Ausgeschlossen`,suggestedCategory:`Vorgeschlagene Kategorie`,suggestedChannel:{title:`Vorgeschlagener Kanal`,validation:{required:`Bitte wählen Sie eine Kanalkategorie für diese Entität`}},properties:`Eigenschaften`,unmappedAttributes:`Nicht zugeordnete Attribute`,missingRequiredProperties:`Fehlende erforderliche Eigenschaften`,incompatibleChannel:`Kanal wird für diese Gerätekategorie nicht unterstützt`,virtualTypes:{static:`Statisch`,derived:`Auto`,command:`Befehl`,virtual:`Virtuell`},validation:{valid:`Gerätekonfiguration ist gültig`,invalid:`Gerätekonfiguration hat Probleme`,missingChannels:`Fehlende erforderliche Kanäle`,missingProperties:`Fehlende erforderliche Eigenschaften`,autoFilled:`Automatisch mit virtuellen Eigenschaften ausgefüllt`,unknownChannels:`Kanäle für diesen Gerätetyp nicht erlaubt`,duplicateChannels:`Doppelte Kanäle (sollten eindeutig sein)`,constraintViolations:`Konfigurationsbeschränkungsverletzungen`}},config:{enabled:{title:`Aktiviert`},apiKey:{title:`API-Schlüssel`,placeholder:`Geben Sie Ihren langlebigen Home Assistant-Zugriffstoken ein`,validation:{required:`Bitte geben Sie den API-Schlüssel ein`}},hostname:{title:`Hostname`,placeholder:`Geben Sie den Home Assistant-Hostname ein (z.B. homeassistant.local:8123)`,validation:{required:`Bitte geben Sie den Hostname ein`}}}},headings:{aboutConnectionSettings:`Home Assistant-Verbindung`,supervisorMode:`Verwaltet von Home Assistant`,device:{deviceSelection:`Gerät auswählen`,deviceInformation:`Geräteinformationen`,categorySelection:`Gerätekategorie`,mappingPreview:`Zuordnungsvorschau`,mappingCustomization:`Zuordnungsanpassung`,deviceConfiguration:`Gerätekonfiguration`},mapping:{entityMappings:`Entitätszuordnungen`,warnings:`Zuordnungswarnungen ({count})`,errors:`Fehler`,summary:`Zuordnungszusammenfassung`,debugData:`Debug-Daten`}},messages:{config:{edited:`Änderungen gespeichert! Die Home Assistant Plugin-Konfiguration wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Aktualisierung der Home Assistant Plugin-Konfiguration war nicht erfolgreich.`},devices:{created:`Neues Home Assistant-Gerät erfolgreich hinzugefügt.`,notCreated:`Etwas ist schiefgelaufen. Das Home Assistant-Gerät konnte nicht erstellt werden.`,exists:`Gerät ist bereits im System übernommen.`,alreadyAdopted:`Dieses Gerät ist bereits übernommen`,alreadyAdoptedDescription:`Fortfahren wird das Gerät mit der neuen Konfiguration erneut übernehmen. Das bestehende Gerät wird aktualisiert.`,noDiscoveredDevices:`Keine Home Assistant-Geräte verfügbar. Stellen Sie sicher, dass Ihre Home Assistant-Instanz verbunden ist und Geräte erkannt werden.`},mapping:{previewLoading:`Zuordnungsvorschau wird geladen...`,previewError:`Zuordnungsvorschau konnte nicht geladen werden`,adoptionSuccess:`Gerät {device} erfolgreich übernommen`,adoptionError:`Geräteübernahme fehlgeschlagen`,readyToAdopt:`Gerät ist bereit zur Übernahme`,notReadyToAdopt:`Gerät hat fehlende erforderliche Zuordnungen`,noPreview:`Keine Zuordnungsvorschau verfügbar`,selectDeviceFirst:`Bitte wählen Sie in Schritt 1 ein Gerät aus, um eine Zuordnungsvorschau zu generieren`,invalidSuggestedCategory:`Die vorgeschlagene Kategorie wird nicht unterstützt. Bitte wählen Sie eine gültige Kategorie.`,missingChannelCategory:`Die folgenden Entitäten sind aktiviert, aber es fehlt eine Kanalkategorie: {entities}. Bitte wählen Sie eine Kanalkategorie für jede aktivierte Entität, bevor Sie fortfahren.`,debugDescription:`Kopieren Sie diese Daten und teilen Sie sie mit Entwicklern, um Zuordnungsprobleme zu diagnostizieren oder benutzerdefinierte Zuordnungen anzufordern.`,debugCopied:`Debug-Daten in die Zwischenablage kopiert`,debugCopyFailed:`Kopieren der Debug-Daten in die Zwischenablage fehlgeschlagen`},categorySelection:{description:`Basierend auf den Entitäten des Geräts wurde eine Kategorie vorgeschlagen. Bitte überprüfen und wählen Sie die richtige Kategorie für dieses Gerät. Die Zuordnungsvorschau wird basierend auf Ihrer Auswahl aktualisiert.`},discovery:{fetchFailed:`Abrufen der erkannten Instanzen fehlgeschlagen`,refreshFailed:`Aktualisieren der erkannten Instanzen fehlgeschlagen`}},buttons:{loadPreview:`Vorschau laden`,updatePreview:`Vorschau aktualisieren`,adoptDevice:`Gerät übernehmen`,next:`Weiter`,previous:`Zurück`,skip:`Überspringen`,use:`Verwenden`,applyChanges:`Änderungen anwenden`,refreshDiscovery:`Erkennung aktualisieren`,debug:`Debuggen`,copyToClipboard:`In Zwischenablage kopieren`,close:`Schließen`},labels:{suggested:`Vorgeschlagen`},misc:{options:{entities:{noEntity:`Nicht mit Geräteentität verbunden`},attributes:{noAttribute:`Nicht mit Entitätsattribut verbunden`,mainState:`Hauptstatusattribut der Entität`}}},texts:{aboutConnectionSettings:`Konfigurieren Sie die Verbindung zu Ihrer Home Assistant-Instanz. Wenn aktiviert, werden Geräte aus Home Assistant im Smart Panel verfügbar. Sie benötigen einen langlebigen Zugriffstoken von Home Assistant und den Hostname oder die IP-Adresse Ihrer Instanz.`,supervisorModeActive:`Dieses Plugin wird als Home Assistant Add-on ausgeführt. Die Verbindung wird automatisch über die Supervisor-API verwaltet. Der API-Schlüssel und der Hostname werden vom System konfiguriert und können nicht manuell geändert werden.`,mapping:{customizationDescription:`Sie können die Zuordnung anpassen, indem Sie Kanalkategorien für Entitäten ändern oder Entitäten aktivieren/deaktivieren. Standardmäßig sind alle Entitäten mit einer vorgeschlagenen Kanalkategorie aktiviert. Klicken Sie auf 'Weiter', um mit der ausgewählten Konfiguration fortzufahren.`}},wizard:{title:`Home Assistant-Geräte gesammelt hinzufügen`,subtitle:`Prüfen Sie die automatisch zugeordneten Geräte und fügen Sie die ausgewählten Einträge ohne weitere Konfiguration hinzu.`,breadcrumb:`Home Assistant-Sammelimport`,columns:{identifier:`Home Assistant-ID`,kind:`Typ`,entities:`Entitäten`,entitiesCount:`{count} Entitäten`,channels:`Kanäle`,channelsCount:`{count} Kanäle`,warningsCount:`{count} Zuordnungswarnungen`},kinds:{device:`Gerät`,helper:`Helfer`},statuses:{needsAttention:`Manuelle Prüfung`},actions:{refresh:`Inventar aktualisieren`},manualReview:{title:`{count} Einträge müssen manuell geprüft werden`,message:`Diese Einträge sind nicht für den Sammelimport ausgewählt. Verwenden Sie das vorhandene kontrollierte Formular, um Kategorie, Kanäle und Eigenschaften zu prüfen.`,open:`Manuelle Geräteübernahme öffnen`},connectionError:{title:`Home Assistant-Inventar ist nicht verfügbar`,openConfig:`Home Assistant-Konfiguration öffnen`},messages:{sessionNotStarted:`Home Assistant-Geräte konnten nicht für den Sammelimport vorbereitet werden.`,adoptionFailed:`Die ausgewählten Home Assistant-Geräte konnten nicht hinzugefügt werden.`}}},"en-US":{fields:{devices:{id:{title:`Internal identifier`,placeholder:`Device id`},identifier:{title:`System identifier`,placeholder:`Device system identifier`},category:{title:`Category`,placeholder:`Device category`,description:`About category`,validation:{required:`Please select device category`}},name:{title:`Name`,placeholder:`Device name`,validation:{required:`Please fill in device name`}},description:{title:`Description`,placeholder:`Device description`},enabled:{title:`Enabled`,placeholder:`Enable or disable device`},haDeviceId:{title:`Home Assistant device`,placeholder:`Select device from Home Assistant instance`,loading:`Loading devices from Home Assistant...`,validation:{required:`Please select Home Assistant device`}},manufacturer:{title:`Manufacturer`},model:{title:`Model`},entities:{title:`Entities`},domain:{title:`Domain`},type:{title:`Type`}},channelsProperties:{id:{title:`Internal identifier`,placeholder:`Channel property id`},channel:{title:`Channel`,placeholder:`Select channel`,validation:{required:`Please select channel property channel`}},category:{title:`Category`,placeholder:`Channel property category`,validation:{required:`Please select channel property category`}},name:{title:`Name`,placeholder:`Channel property name`},dataType:{validation:{required:`Please select data type`}},permissions:{validation:{required:`Please select permissions`}},haEntityId:{title:`Home Assistant device entity`,placeholder:`Select Home Assistant device entity`,validation:{required:`Please select Home Assistant device entity`}},haAttribute:{title:`Home Assistant entity attribute`,placeholder:`Select Home Assistant entity attribute`,validation:{required:`Please select Home Assistant entity attribute`}}},mapping:{totalEntities:`Total entities`,mapped:`Mapped`,partial:`Partial`,unmapped:`Unmapped`,skipped:`Skipped`,incompatible:`Incompatible`,excluded:`Excluded`,suggestedCategory:`Suggested category`,suggestedChannel:{title:`Suggested channel`,validation:{required:`Please select a channel category for this entity`}},properties:`Properties`,unmappedAttributes:`Unmapped attributes`,missingRequiredProperties:`Missing required properties`,incompatibleChannel:`Channel not supported for this device category`,virtualTypes:{static:`Static`,derived:`Auto`,command:`Command`,virtual:`Virtual`},validation:{valid:`Device configuration is valid`,invalid:`Device configuration has issues`,missingChannels:`Missing required channels`,missingProperties:`Missing required properties`,autoFilled:`Auto-filled with virtual properties`,unknownChannels:`Channels not allowed for this device type`,duplicateChannels:`Duplicate channels (should be unique)`,constraintViolations:`Configuration constraint violations`}},config:{enabled:{title:`Enabled`},apiKey:{title:`API key`,placeholder:`Enter your Home Assistant long-lived access token`,validation:{required:`Please fill in API key`}},hostname:{title:`Hostname`,placeholder:`Enter the Home Assistant hostname (e.g., homeassistant.local:8123)`,validation:{required:`Please fill in hostname`}}}},headings:{aboutConnectionSettings:`Home Assistant connection`,supervisorMode:`Managed by Home Assistant`,device:{deviceSelection:`Select device`,deviceInformation:`Device information`,categorySelection:`Device category`,mappingPreview:`Mapping preview`,mappingCustomization:`Mapping customization`,deviceConfiguration:`Device configuration`},mapping:{entityMappings:`Entity mappings`,warnings:`Mapping warnings ({count})`,errors:`Errors`,summary:`Mapping summary`,debugData:`Debug Data`}},messages:{config:{edited:`Changes saved! The Home Assistant plugin config has been updated.`,notEdited:`Something went wrong. Home Assistant plugin config update was not successful.`},devices:{created:`New Home Assistant device added successfully.`,notCreated:`Something went wrong. Unable to create the Home Assistant device.`,exists:`Device is already adopted in the system.`,alreadyAdopted:`This device is already adopted`,alreadyAdoptedDescription:`Continuing will re-adopt the device with the new configuration. The existing device will be updated.`,noDiscoveredDevices:`No Home Assistant devices are available. Make sure your Home Assistant instance is connected and devices are discovered.`},mapping:{previewLoading:`Loading mapping preview...`,previewError:`Failed to load mapping preview`,adoptionSuccess:`Device {device} adopted successfully`,adoptionError:`Failed to adopt device`,readyToAdopt:`Device is ready to be adopted`,notReadyToAdopt:`Device has missing required mappings`,noPreview:`No mapping preview available`,selectDeviceFirst:`Please select a device in step 1 to generate a mapping preview`,invalidSuggestedCategory:`The suggested category is not supported. Please select a valid category.`,missingChannelCategory:`The following entities are enabled but missing a channel category: {entities}. Please select a channel category for each enabled entity before proceeding.`,debugDescription:`Copy this data and share it with developers to help diagnose mapping issues or request custom mappings.`,debugCopied:`Debug data copied to clipboard`,debugCopyFailed:`Failed to copy debug data to clipboard`},categorySelection:{description:`Based on the device's entities, a category has been suggested. Please review and select the correct category for this device. The mapping preview will be updated based on your selection.`},discovery:{fetchFailed:`Failed to fetch discovered instances`,refreshFailed:`Failed to refresh discovered instances`}},buttons:{loadPreview:`Load preview`,updatePreview:`Update preview`,adoptDevice:`Adopt device`,next:`Next`,previous:`Previous`,skip:`Skip`,use:`Use`,applyChanges:`Apply changes`,refreshDiscovery:`Refresh discovery`,debug:`Debug`,copyToClipboard:`Copy to clipboard`,close:`Close`},labels:{suggested:`Suggested`},misc:{options:{entities:{noEntity:`Not connected to device entity`},attributes:{noAttribute:`Not connected to entity attribute`,mainState:`Entity main state attribute`}}},texts:{aboutConnectionSettings:`Configure the connection to your Home Assistant instance. When enabled, devices from Home Assistant will be available in the Smart Panel. You'll need a long-lived access token from Home Assistant and the hostname or IP address of your instance.`,supervisorModeActive:`This plugin is running as a Home Assistant add-on. The connection is managed automatically using the Supervisor API. The API key and hostname are configured by the system and cannot be changed manually.`,mapping:{customizationDescription:`You can customize the mapping by changing channel categories for entities or enabling/disabling entities. By default, all entities with a suggested channel category are enabled. Click 'Next' to proceed with the selected configuration.`}},wizard:{title:`Add Home Assistant devices in bulk`,subtitle:`Review the automatically mapped devices and add the selected items without additional configuration.`,breadcrumb:`Home Assistant bulk import`,columns:{identifier:`Home Assistant ID`,kind:`Type`,entities:`Entities`,entitiesCount:`{count} entities`,channels:`Channels`,channelsCount:`{count} channels`,warningsCount:`{count} mapping warnings`},kinds:{device:`Device`,helper:`Helper`},statuses:{needsAttention:`Manual review`},actions:{refresh:`Refresh inventory`},manualReview:{title:`{count} items need manual review`,message:`These items are not selected for bulk import. Use the existing controlled add form to review their category, channels, and properties.`,open:`Open manual device adoption`},connectionError:{title:`Home Assistant inventory is unavailable`,openConfig:`Open Home Assistant configuration`},messages:{sessionNotStarted:`Home Assistant devices could not be prepared for bulk import.`,adoptionFailed:`The selected Home Assistant devices could not be added.`}}},"es-ES":{fields:{devices:{id:{title:`Identificador interno`,placeholder:`ID del dispositivo`},identifier:{title:`Identificador del sistema`,placeholder:`Identificador del sistema del dispositivo`},category:{title:`Categoría`,placeholder:`Categoría del dispositivo`,description:`Acerca de la categoría`,validation:{required:`Por favor, seleccione la categoría del dispositivo`}},name:{title:`Nombre`,placeholder:`Nombre del dispositivo`,validation:{required:`Por favor, introduzca el nombre del dispositivo`}},description:{title:`Descripción`,placeholder:`Descripción del dispositivo`},enabled:{title:`Habilitado`,placeholder:`Habilitar o deshabilitar el dispositivo`},haDeviceId:{title:`Dispositivo de Home Assistant`,placeholder:`Seleccione un dispositivo de la instancia de Home Assistant`,loading:`Cargando dispositivos desde Home Assistant...`,validation:{required:`Por favor, seleccione un dispositivo de Home Assistant`}},manufacturer:{title:`Fabricante`},model:{title:`Modelo`},entities:{title:`Entidades`},domain:{title:`Dominio`},type:{title:`Tipo`}},channelsProperties:{id:{title:`Identificador interno`,placeholder:`ID de la propiedad del canal`},channel:{title:`Canal`,placeholder:`Seleccionar canal`,validation:{required:`Por favor, seleccione el canal de la propiedad`}},category:{title:`Categoría`,placeholder:`Categoría de la propiedad del canal`,validation:{required:`Por favor, seleccione la categoría de la propiedad del canal`}},name:{title:`Nombre`,placeholder:`Nombre de la propiedad del canal`},dataType:{validation:{required:`Por favor, seleccione el tipo de dato`}},permissions:{validation:{required:`Por favor, seleccione los permisos`}},haEntityId:{title:`Entidad del dispositivo de Home Assistant`,placeholder:`Seleccione la entidad del dispositivo de Home Assistant`,validation:{required:`Por favor, seleccione la entidad del dispositivo de Home Assistant`}},haAttribute:{title:`Atributo de entidad de Home Assistant`,placeholder:`Seleccione el atributo de entidad de Home Assistant`,validation:{required:`Por favor, seleccione el atributo de entidad de Home Assistant`}}},mapping:{totalEntities:`Total de entidades`,mapped:`Mapeado`,partial:`Parcial`,unmapped:`Sin mapear`,skipped:`Omitido`,incompatible:`Incompatible`,excluded:`Excluido`,suggestedCategory:`Categoría sugerida`,suggestedChannel:{title:`Canal sugerido`,validation:{required:`Por favor, seleccione una categoría de canal para esta entidad`}},properties:`Propiedades`,unmappedAttributes:`Atributos sin mapear`,missingRequiredProperties:`Propiedades requeridas faltantes`,incompatibleChannel:`Canal no compatible con esta categoría de dispositivo`,virtualTypes:{static:`Estático`,derived:`Automático`,command:`Comando`,virtual:`Virtual`},validation:{valid:`La configuración del dispositivo es válida`,invalid:`La configuración del dispositivo tiene problemas`,missingChannels:`Faltan canales requeridos`,missingProperties:`Faltan propiedades requeridas`,autoFilled:`Completado automáticamente con propiedades virtuales`,unknownChannels:`Canales no permitidos para este tipo de dispositivo`,duplicateChannels:`Canales duplicados (deben ser únicos)`,constraintViolations:`Violaciones de restricciones de configuración`}},config:{enabled:{title:`Habilitado`},apiKey:{title:`Clave API`,placeholder:`Introduzca su token de acceso de larga duración de Home Assistant`,validation:{required:`Por favor, introduzca la clave API`}},hostname:{title:`Nombre de host`,placeholder:`Introduzca el nombre de host de Home Assistant (p. ej., homeassistant.local:8123)`,validation:{required:`Por favor, introduzca el nombre de host`}}}},headings:{aboutConnectionSettings:`Conexión de Home Assistant`,supervisorMode:`Gestionado por Home Assistant`,device:{deviceSelection:`Seleccionar dispositivo`,deviceInformation:`Información del dispositivo`,categorySelection:`Categoría del dispositivo`,mappingPreview:`Vista previa del mapeo`,mappingCustomization:`Personalización del mapeo`,deviceConfiguration:`Configuración del dispositivo`},mapping:{entityMappings:`Mapeo de entidades`,warnings:`Advertencias del mapeo ({count})`,errors:`Errores`,summary:`Resumen del mapeo`,debugData:`Datos de depuración`}},messages:{config:{edited:`¡Cambios guardados! La configuración del plugin de Home Assistant ha sido actualizada.`,notEdited:`Algo salió mal. La actualización de la configuración del plugin de Home Assistant no fue exitosa.`},devices:{created:`Nuevo dispositivo de Home Assistant agregado correctamente.`,notCreated:`Algo salió mal. No se pudo crear el dispositivo de Home Assistant.`,exists:`El dispositivo ya está registrado en el sistema.`,alreadyAdopted:`Este dispositivo ya ha sido adoptado`,alreadyAdoptedDescription:`Al continuar se volverá a adoptar el dispositivo con la nueva configuración. El dispositivo existente será actualizado.`,noDiscoveredDevices:`No hay dispositivos de Home Assistant disponibles. Asegúrese de que su instancia de Home Assistant esté conectada y los dispositivos hayan sido descubiertos.`},mapping:{previewLoading:`Cargando vista previa del mapeo...`,previewError:`Error al cargar la vista previa del mapeo`,adoptionSuccess:`El dispositivo {device} ha sido adoptado correctamente`,adoptionError:`Error al adoptar el dispositivo`,readyToAdopt:`El dispositivo está listo para ser adoptado`,notReadyToAdopt:`El dispositivo tiene mapeos requeridos faltantes`,noPreview:`No hay vista previa de mapeo disponible`,selectDeviceFirst:`Por favor, seleccione un dispositivo en el paso 1 para generar una vista previa del mapeo`,invalidSuggestedCategory:`La categoría sugerida no es compatible. Por favor, seleccione una categoría válida.`,missingChannelCategory:`Las siguientes entidades están habilitadas pero no tienen una categoría de canal: {entities}. Por favor, seleccione una categoría de canal para cada entidad habilitada antes de continuar.`,debugDescription:`Copie estos datos y compártalos con los desarrolladores para ayudar a diagnosticar problemas de mapeo o solicitar mapeos personalizados.`,debugCopied:`Datos de depuración copiados al portapapeles`,debugCopyFailed:`Error al copiar los datos de depuración al portapapeles`},categorySelection:{description:`Basándose en las entidades del dispositivo, se ha sugerido una categoría. Por favor, revise y seleccione la categoría correcta para este dispositivo. La vista previa del mapeo se actualizará según su selección.`},discovery:{fetchFailed:`Error al obtener las instancias descubiertas`,refreshFailed:`Error al actualizar las instancias descubiertas`}},buttons:{loadPreview:`Cargar vista previa`,updatePreview:`Actualizar vista previa`,adoptDevice:`Adoptar dispositivo`,next:`Siguiente`,previous:`Anterior`,skip:`Omitir`,use:`Usar`,applyChanges:`Aplicar cambios`,refreshDiscovery:`Actualizar descubrimiento`,debug:`Depuración`,copyToClipboard:`Copiar al portapapeles`,close:`Cerrar`},labels:{suggested:`Sugerido`},misc:{options:{entities:{noEntity:`No conectado a la entidad del dispositivo`},attributes:{noAttribute:`No conectado al atributo de la entidad`,mainState:`Atributo de estado principal de la entidad`}}},texts:{aboutConnectionSettings:`Configure la conexión a su instancia de Home Assistant. Cuando esté habilitado, los dispositivos de Home Assistant estarán disponibles en el Smart Panel. Necesitará un token de acceso de larga duración de Home Assistant y el nombre de host o la dirección IP de su instancia.`,supervisorModeActive:`Este plugin se ejecuta como complemento de Home Assistant. La conexión se gestiona automáticamente mediante la API del Supervisor. La clave API y el nombre de host están configurados por el sistema y no se pueden cambiar manualmente.`,mapping:{customizationDescription:`Puede personalizar el mapeo cambiando las categorías de canal para las entidades o habilitando/deshabilitando entidades. Por defecto, todas las entidades con una categoría de canal sugerida están habilitadas. Haga clic en 'Siguiente' para continuar con la configuración seleccionada.`}},wizard:{title:`Añadir dispositivos de Home Assistant en lote`,subtitle:`Revise los dispositivos asignados automáticamente y añada los elementos seleccionados sin más configuración.`,breadcrumb:`Importación masiva de Home Assistant`,columns:{identifier:`ID de Home Assistant`,kind:`Tipo`,entities:`Entidades`,entitiesCount:`{count} entidades`,channels:`Canales`,channelsCount:`{count} canales`,warningsCount:`{count} avisos de mapeo`},kinds:{device:`Dispositivo`,helper:`Ayudante`},statuses:{needsAttention:`Revisión manual`},actions:{refresh:`Actualizar inventario`},manualReview:{title:`{count} elementos necesitan revisión manual`,message:`Estos elementos no están seleccionados para la importación masiva. Use el formulario controlado existente para revisar su categoría, canales y propiedades.`,open:`Abrir adopción manual de dispositivos`},connectionError:{title:`El inventario de Home Assistant no está disponible`,openConfig:`Abrir configuración de Home Assistant`},messages:{sessionNotStarted:`No se pudieron preparar los dispositivos de Home Assistant para la importación masiva.`,adoptionFailed:`No se pudieron añadir los dispositivos de Home Assistant seleccionados.`}}},"pl-PL":{fields:{devices:{id:{title:`Identyfikator wewnetrzny`,placeholder:`ID urzadzenia`},identifier:{title:`Identyfikator systemowy`,placeholder:`Identyfikator systemowy urzadzenia`},category:{title:`Kategoria`,placeholder:`Kategoria urzadzenia`,description:`O kategorii`,validation:{required:`Prosze wybrac kategorie urzadzenia`}},name:{title:`Nazwa`,placeholder:`Nazwa urzadzenia`,validation:{required:`Prosze podac nazwe urzadzenia`}},description:{title:`Opis`,placeholder:`Opis urzadzenia`},enabled:{title:`Wlaczony`,placeholder:`Wlacz lub wylacz urzadzenie`},haDeviceId:{title:`Urzadzenie Home Assistant`,placeholder:`Wybierz urzadzenie z instancji Home Assistant`,loading:`Ladowanie urzadzen z Home Assistant...`,validation:{required:`Prosze wybrac urzadzenie Home Assistant`}},manufacturer:{title:`Producent`},model:{title:`Model`},entities:{title:`Encje`},domain:{title:`Domena`},type:{title:`Typ`}},channelsProperties:{id:{title:`Identyfikator wewnetrzny`,placeholder:`ID wlasciwosci kanalu`},channel:{title:`Kanal`,placeholder:`Wybierz kanal`,validation:{required:`Prosze wybrac kanal wlasciwosci`}},category:{title:`Kategoria`,placeholder:`Kategoria wlasciwosci kanalu`,validation:{required:`Prosze wybrac kategorie wlasciwosci kanalu`}},name:{title:`Nazwa`,placeholder:`Nazwa wlasciwosci kanalu`},dataType:{validation:{required:`Prosze wybrac typ danych`}},permissions:{validation:{required:`Prosze wybrac uprawnienia`}},haEntityId:{title:`Encja urzadzenia Home Assistant`,placeholder:`Wybierz encje urzadzenia Home Assistant`,validation:{required:`Prosze wybrac encje urzadzenia Home Assistant`}},haAttribute:{title:`Atrybut encji Home Assistant`,placeholder:`Wybierz atrybut encji Home Assistant`,validation:{required:`Prosze wybrac atrybut encji Home Assistant`}}},mapping:{totalEntities:`Laczna liczba encji`,mapped:`Zmapowane`,partial:`Czesciowe`,unmapped:`Niezmapowane`,skipped:`Pominiete`,incompatible:`Niekompatybilne`,excluded:`Wykluczone`,suggestedCategory:`Sugerowana kategoria`,suggestedChannel:{title:`Sugerowany kanal`,validation:{required:`Prosze wybrac kategorie kanalu dla tej encji`}},properties:`Wlasciwosci`,unmappedAttributes:`Niezmapowane atrybuty`,missingRequiredProperties:`Brakujace wymagane wlasciwosci`,incompatibleChannel:`Kanal nie jest obslugiwany dla tej kategorii urzadzenia`,virtualTypes:{static:`Statyczny`,derived:`Automatyczny`,command:`Komenda`,virtual:`Wirtualny`},validation:{valid:`Konfiguracja urzadzenia jest prawidlowa`,invalid:`Konfiguracja urzadzenia ma problemy`,missingChannels:`Brakujace wymagane kanaly`,missingProperties:`Brakujace wymagane wlasciwosci`,autoFilled:`Automatycznie uzupelnione wirtualnymi wlasciwosciami`,unknownChannels:`Kanaly niedozwolone dla tego typu urzadzenia`,duplicateChannels:`Zduplikowane kanaly (powinny byc unikalne)`,constraintViolations:`Naruszenia ograniczen konfiguracji`}},config:{enabled:{title:`Wlaczony`},apiKey:{title:`Klucz API`,placeholder:`Wprowadz dlugoterminowy token dostepu Home Assistant`,validation:{required:`Prosze podac klucz API`}},hostname:{title:`Nazwa hosta`,placeholder:`Wprowadz nazwe hosta Home Assistant (np. homeassistant.local:8123)`,validation:{required:`Prosze podac nazwe hosta`}}}},headings:{aboutConnectionSettings:`Polaczenie Home Assistant`,supervisorMode:`Zarzadzane przez Home Assistant`,device:{deviceSelection:`Wybierz urzadzenie`,deviceInformation:`Informacje o urzadzeniu`,categorySelection:`Kategoria urzadzenia`,mappingPreview:`Podglad mapowania`,mappingCustomization:`Dostosowanie mapowania`,deviceConfiguration:`Konfiguracja urzadzenia`},mapping:{entityMappings:`Mapowania encji`,warnings:`Ostrzezenia mapowania ({count})`,errors:`Bledy`,summary:`Podsumowanie mapowania`,debugData:`Dane debugowania`}},messages:{config:{edited:`Zmiany zapisane! Konfiguracja wtyczki Home Assistant zostala zaktualizowana.`,notEdited:`Cos poszlo nie tak. Aktualizacja konfiguracji wtyczki Home Assistant nie powiodla sie.`},devices:{created:`Nowe urzadzenie Home Assistant zostalo pomyslnie dodane.`,notCreated:`Cos poszlo nie tak. Nie udalo sie utworzyc urzadzenia Home Assistant.`,exists:`Urzadzenie jest juz zaadoptowane w systemie.`,alreadyAdopted:`To urzadzenie jest juz zaadoptowane`,alreadyAdoptedDescription:`Kontynuowanie spowoduje ponowna adopcje urzadzenia z nowa konfiguracja. Istniejace urzadzenie zostanie zaktualizowane.`,noDiscoveredDevices:`Brak dostepnych urzadzen Home Assistant. Upewnij sie, ze instancja Home Assistant jest polaczona i urzadzenia sa wykryte.`},mapping:{previewLoading:`Ladowanie podgladu mapowania...`,previewError:`Nie udalo sie zaladowac podgladu mapowania`,adoptionSuccess:`Urzadzenie {device} pomyslnie zaadoptowane`,adoptionError:`Nie udalo sie zaadoptowac urzadzenia`,readyToAdopt:`Urzadzenie jest gotowe do adopcji`,notReadyToAdopt:`Urzadzenie ma brakujace wymagane mapowania`,noPreview:`Brak dostepnego podgladu mapowania`,selectDeviceFirst:`Prosze wybrac urzadzenie w kroku 1, aby wygenerowac podglad mapowania`,invalidSuggestedCategory:`Sugerowana kategoria nie jest obslugiwana. Prosze wybrac prawidlowa kategorie.`,missingChannelCategory:`Nastepujace encje sa wlaczone, ale brakuje im kategorii kanalu: {entities}. Prosze wybrac kategorie kanalu dla kazdej wlaczonej encji przed kontynuowaniem.`,debugDescription:`Skopiuj te dane i udostepnij deweloperom, aby pomoc zdiagnozowac problemy z mapowaniem lub zlozyc prosbe o niestandardowe mapowania.`,debugCopied:`Dane debugowania skopiowane do schowka`,debugCopyFailed:`Nie udalo sie skopiowac danych debugowania do schowka`},categorySelection:{description:`Na podstawie encji urzadzenia zasugerowano kategorie. Prosze przejrzec i wybrac prawidlowa kategorie dla tego urzadzenia. Podglad mapowania zostanie zaktualizowany na podstawie wyboru.`},discovery:{fetchFailed:`Nie udalo sie pobrac wykrytych instancji`,refreshFailed:`Nie udalo sie odswiezyc wykrytych instancji`}},buttons:{loadPreview:`Zaladuj podglad`,updatePreview:`Zaktualizuj podglad`,adoptDevice:`Adoptuj urzadzenie`,next:`Dalej`,previous:`Wstecz`,skip:`Pomin`,use:`Uzyj`,applyChanges:`Zastosuj zmiany`,refreshDiscovery:`Odswiez wykrywanie`,debug:`Debugowanie`,copyToClipboard:`Kopiuj do schowka`,close:`Zamknij`},labels:{suggested:`Sugerowane`},misc:{options:{entities:{noEntity:`Nie polaczone z encja urzadzenia`},attributes:{noAttribute:`Nie polaczone z atrybutem encji`,mainState:`Glowny atrybut stanu encji`}}},texts:{aboutConnectionSettings:`Skonfiguruj polaczenie z instancja Home Assistant. Po wlaczeniu urzadzenia z Home Assistant beda dostepne w Smart Panel. Potrzebujesz dlugoterminowego tokenu dostepu z Home Assistant i nazwy hosta lub adresu IP instancji.`,supervisorModeActive:`Ta wtyczka dziala jako dodatek Home Assistant. Polaczenie jest zarzadzane automatycznie za pomoca Supervisor API. Klucz API i nazwa hosta sa konfigurowane przez system i nie moga byc zmieniane recznie.`,mapping:{customizationDescription:`Mozesz dostosowac mapowanie zmieniajac kategorie kanalow dla encji lub wlaczajac/wylaczajac encje. Domyslnie wszystkie encje z sugerowana kategoria kanalu sa wlaczone. Kliknij 'Dalej', aby kontynuowac z wybrana konfiguracja.`}},wizard:{title:`Dodaj zbiorczo urządzenia Home Assistant`,subtitle:`Sprawdź automatycznie zmapowane urządzenia i dodaj wybrane pozycje bez dodatkowej konfiguracji.`,breadcrumb:`Import zbiorczy Home Assistant`,columns:{identifier:`ID Home Assistant`,kind:`Typ`,entities:`Encje`,entitiesCount:`Liczba encji: {count}`,channels:`Kanały`,channelsCount:`Liczba kanałów: {count}`,warningsCount:`Liczba ostrzeżeń mapowania: {count}`},kinds:{device:`Urządzenie`,helper:`Pomocnik`},statuses:{needsAttention:`Kontrola ręczna`},actions:{refresh:`Odśwież inwentarz`},manualReview:{title:`Pozycje wymagające kontroli ręcznej: {count}`,message:`Te pozycje nie są wybrane do importu zbiorczego. Użyj istniejącego kontrolowanego formularza, aby sprawdzić kategorię, kanały i właściwości.`,open:`Otwórz ręczne dodawanie urządzenia`},connectionError:{title:`Inwentarz Home Assistant jest niedostępny`,openConfig:`Otwórz konfigurację Home Assistant`},messages:{sessionNotStarted:`Nie udało się przygotować urządzeń Home Assistant do importu zbiorczego.`,adoptionFailed:`Nie udało się dodać wybranych urządzeń Home Assistant.`}}},"sk-SK":{fields:{devices:{id:{title:`Interný identifikátor`,placeholder:`ID zariadenia`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zariadenia`},category:{title:`Kategória`,placeholder:`Kategória zariadenia`,description:`O kategórii`,validation:{required:`Prosím vyberte kategóriu zariadenia`}},name:{title:`Názov`,placeholder:`Názov zariadenia`,validation:{required:`Prosím vyplňte názov zariadenia`}},description:{title:`Popis`,placeholder:`Popis zariadenia`},enabled:{title:`Povolené`,placeholder:`Povoliť alebo zakázať zariadenie`},haDeviceId:{title:`Zariadenie Home Assistant`,placeholder:`Vyberte zariadenie z inštancie Home Assistant`,loading:`Načítavanie zariadení z Home Assistant...`,validation:{required:`Prosím vyberte zariadenie Home Assistant`}},manufacturer:{title:`Výrobca`},model:{title:`Model`},entities:{title:`Entity`},domain:{title:`Doména`},type:{title:`Typ`}},channelsProperties:{id:{title:`Interný identifikátor`,placeholder:`ID vlastnosti kanála`},channel:{title:`Kanál`,placeholder:`Vyberte kanál`,validation:{required:`Prosím vyberte kanál vlastnosti kanála`}},category:{title:`Kategória`,placeholder:`Kategória vlastnosti kanála`,validation:{required:`Prosím vyberte kategóriu vlastnosti kanála`}},name:{title:`Názov`,placeholder:`Názov vlastnosti kanála`},dataType:{validation:{required:`Prosím vyberte dátový typ`}},permissions:{validation:{required:`Prosím vyberte oprávnenia`}},haEntityId:{title:`Entita zariadenia Home Assistant`,placeholder:`Vyberte entitu zariadenia Home Assistant`,validation:{required:`Prosím vyberte entitu zariadenia Home Assistant`}},haAttribute:{title:`Atribút entity Home Assistant`,placeholder:`Vyberte atribút entity Home Assistant`,validation:{required:`Prosím vyberte atribút entity Home Assistant`}}},mapping:{totalEntities:`Celkový počet entít`,mapped:`Namapované`,partial:`Čiastočné`,unmapped:`Nenamapované`,skipped:`Preskočené`,incompatible:`Nekompatibilné`,excluded:`Vylúčené`,suggestedCategory:`Navrhovaná kategória`,suggestedChannel:{title:`Navrhovaný kanál`,validation:{required:`Prosím vyberte kategóriu kanála pre túto entitu`}},properties:`Vlastnosti`,unmappedAttributes:`Nenamapované atribúty`,missingRequiredProperties:`Chýbajúce povinné vlastnosti`,incompatibleChannel:`Kanál nie je podporovaný pre túto kategóriu zariadenia`,virtualTypes:{static:`Statický`,derived:`Automaticky`,command:`Príkaz`,virtual:`Virtuálny`},validation:{valid:`Konfigurácia zariadenia je platná`,invalid:`Konfigurácia zariadenia má problémy`,missingChannels:`Chýbajúce povinné kanály`,missingProperties:`Chýbajúce povinné vlastnosti`,autoFilled:`Automaticky vyplnené virtuálnymi vlastnosťami`,unknownChannels:`Kanály nie sú povolené pre tento typ zariadenia`,duplicateChannels:`Duplicitné kanály (mali by byť jedinečné)`,constraintViolations:`Porušenia konfiguračných obmedzení`}},config:{enabled:{title:`Povolené`},apiKey:{title:`API kľúč`,placeholder:`Zadajte svoj dlhodobý prístupový token Home Assistant`,validation:{required:`Prosím vyplňte API kľúč`}},hostname:{title:`Názov hostiteľa`,placeholder:`Zadajte hostname Home Assistant (napr. homeassistant.local:8123)`,validation:{required:`Prosím vyplňte hostname`}}}},headings:{aboutConnectionSettings:`Pripojenie Home Assistant`,supervisorMode:`Spravované Home Assistantom`,device:{deviceSelection:`Výber zariadenia`,deviceInformation:`Informácie o zariadení`,categorySelection:`Kategória zariadenia`,mappingPreview:`Náhľad mapovania`,mappingCustomization:`Prispôsobenie mapovania`,deviceConfiguration:`Konfigurácia zariadenia`},mapping:{entityMappings:`Mapovania entít`,warnings:`Varovania mapovania ({count})`,errors:`Chyby`,summary:`Súhrn mapovania`,debugData:`Debug dáta`}},messages:{config:{edited:`Zmeny uložené! Konfigurácia pluginu Home Assistant bola aktualizovaná.`,notEdited:`Niečo sa pokazilo. Aktualizácia konfigurácie pluginu Home Assistant nebola úspešná.`},devices:{created:`Nové zariadenie Home Assistant bolo úspešne pridané.`,notCreated:`Niečo sa pokazilo. Nepodarilo sa vytvoriť zariadenie Home Assistant.`,exists:`Zariadenie je už prijaté v systéme.`,alreadyAdopted:`Toto zariadenie je už prijaté`,alreadyAdoptedDescription:`Pokračovaním sa zariadenie znovu prijme s novou konfiguráciou. Existujúce zariadenie bude aktualizované.`,noDiscoveredDevices:`Žiadne zariadenia Home Assistant nie sú dostupné. Uistite sa, že vaša inštancia Home Assistant je pripojená a zariadenia sú objavené.`},mapping:{previewLoading:`Načítavanie náhľadu mapovania...`,previewError:`Nepodarilo sa načítať náhľad mapovania`,adoptionSuccess:`Zariadenie {device} bolo úspešne prijaté`,adoptionError:`Nepodarilo sa prijať zariadenie`,readyToAdopt:`Zariadenie je pripravené na prijatie`,notReadyToAdopt:`Zariadenie má chýbajúce povinné mapovania`,noPreview:`Náhľad mapovania nie je dostupný`,selectDeviceFirst:`Prosím vyberte zariadenie v kroku 1 na generovanie náhľadu mapovania`,invalidSuggestedCategory:`Navrhovaná kategória nie je podporovaná. Prosím vyberte platnú kategóriu.`,missingChannelCategory:`Nasledujúce entity sú povolené, ale chýba im kategória kanála: {entities}. Prosím vyberte kategóriu kanála pre každú povolenú entitu pred pokračovaním.`,debugDescription:`Skopírujte tieto dáta a zdieľajte ich s vývojármi na pomoc pri diagnostike problémov mapovania alebo na žiadosť o vlastné mapovania.`,debugCopied:`Debug dáta skopírované do schránky`,debugCopyFailed:`Nepodarilo sa skopírovať debug dáta do schránky`},categorySelection:{description:`Na základe entít zariadenia bola navrhnutá kategória. Prosím skontrolujte a vyberte správnu kategóriu pre toto zariadenie. Náhľad mapovania bude aktualizovaný na základe vášho výberu.`},discovery:{fetchFailed:`Nepodarilo sa načítať objavené inštancie`,refreshFailed:`Nepodarilo sa obnoviť objavené inštancie`}},buttons:{loadPreview:`Načítať náhľad`,updatePreview:`Aktualizovať náhľad`,adoptDevice:`Prijať zariadenie`,next:`Ďalej`,previous:`Predchádzajúci`,skip:`Preskočiť`,use:`Použiť`,applyChanges:`Aplikovať zmeny`,refreshDiscovery:`Obnoviť objavovanie`,debug:`Debug`,copyToClipboard:`Kopírovať do schránky`,close:`Zavrieť`},labels:{suggested:`Navrhované`},misc:{options:{entities:{noEntity:`Nepripojené k entite zariadenia`},attributes:{noAttribute:`Nepripojené k atribútu entity`,mainState:`Hlavný stavový atribút entity`}}},texts:{aboutConnectionSettings:`Nakonfigurujte pripojenie k vašej inštancii Home Assistant. Keď je povolená, zariadenia z Home Assistant budú dostupné v Smart Paneli. Budete potrebovať dlhodobý prístupový token z Home Assistant a hostname alebo IP adresu vašej inštancie.`,supervisorModeActive:`Tento plugin beží ako doplnok Home Assistant. Pripojenie je spravované automaticky pomocou Supervisor API. API kľúč a hostname sú konfigurované systémom a nemožno ich meniť ručne.`,mapping:{customizationDescription:`Môžete prispôsobiť mapovanie zmenou kategórií kanálov pre entity alebo povolením/zakázaním entít. Predvolene sú všetky entity s navrhovanou kategóriou kanála povolené. Kliknite na 'Ďalej' pre pokračovanie s vybranou konfiguráciou.`}},wizard:{title:`Hromadne pridať zariadenia Home Assistant`,subtitle:`Skontrolujte automaticky namapované zariadenia a pridajte vybrané položky bez ďalšej konfigurácie.`,breadcrumb:`Hromadný import Home Assistant`,columns:{identifier:`ID Home Assistant`,kind:`Typ`,entities:`Entity`,entitiesCount:`Počet entít: {count}`,channels:`Kanály`,channelsCount:`Počet kanálov: {count}`,warningsCount:`Počet upozornení mapovania: {count}`},kinds:{device:`Zariadenie`,helper:`Pomocná entita`},statuses:{needsAttention:`Ručná kontrola`},actions:{refresh:`Obnoviť inventár`},manualReview:{title:`Položky vyžadujúce ručnú kontrolu: {count}`,message:`Tieto položky nie sú vybrané na hromadný import. Na kontrolu kategórie, kanálov a vlastností použite existujúce riadené pridanie.`,open:`Otvoriť ručné pridanie zariadenia`},connectionError:{title:`Inventár Home Assistant nie je dostupný`,openConfig:`Otvoriť konfiguráciu Home Assistant`},messages:{sessionNotStarted:`Zariadenia Home Assistant sa nepodarilo pripraviť na hromadný import.`,adoptionFailed:`Vybrané zariadenia Home Assistant sa nepodarilo pridať.`}}}},tw=Ts.extend({haEntityId:X(),haAttribute:X()}),nw=Es.extend({haEntityId:X().optional(),haAttribute:X().optional()}),rw=Ki.extend({apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),hostname:X()}),iw=os.extend({haEntityId:X().trim().nonempty().nullable().transform(e=>e===null?Qb:e),haAttribute:X().trim().nonempty().nullable().transform(e=>e===null?$b:e)}),aw=Zo.and(K({type:Y(Zb),ha_entity_id:X().trim().nonempty().nullable().transform(e=>e===`fb.no_entity`?null:e),ha_attribute:X().trim().nonempty().nullable().transform(e=>e===`fb.no_attribute`?null:e),ha_transformer:X().trim().nonempty().nullable()})),ow=rs.and(K({type:Y(Zb),ha_entity_id:X().trim().nonempty().nullable().transform(e=>e===`fb.no_entity`?null:e),ha_attribute:X().trim().nonempty().nullable().transform(e=>e===`fb.no_attribute`?null:e),ha_transformer:X().trim().nonempty().nullable()})),sw=Qo.and(K({type:Y(Zb),ha_entity_id:X().trim().nonempty().nullable(),ha_attribute:X().trim().nonempty().nullable(),ha_transformer:X().trim().nonempty().nullable()})),cw=ns,lw=K({id:X().uuid().optional(),type:Y(Zb),device:X().uuid(),category:G(Jn),identifier:X().trim().nonempty().nullable().optional(),name:X().trim().nonempty(),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),parent:X().uuid().nullable().optional(),controls:W(es).optional(),properties:W(aw).optional()}),uw=us.and(K({type:Y(Zb)}));K({id:X().uuid(),type:Y(Zb),device:X().uuid(),category:G(Jn),identifier:X().trim().nonempty().nullable(),name:X().trim().nonempty(),description:X().trim().nullable(),parent:X().uuid().nullable().optional(),created_at:X().date(),updated_at:X().date().nullable(),controls:W($o),properties:W(sw)});var dw=Wi.extend({apiKey:X().trim().nonempty().nullable().optional(),apiKeyConfigured:J().default(!1),hostname:X().trim().nonempty(),supervisorMode:J().default(!1)}),fw=Zi.and(K({type:Y(Xb),api_key:X().trim().nonempty().nullable().optional(),hostname:X().trim().nonempty().optional()}));Ri.and(K({type:Y(Xb),api_key:X().trim().nonempty().nullable().optional(),api_key_configured:J(),hostname:X().trim().nonempty(),supervisor_mode:J().default(!1)}));var pw=Yo.extend({haDeviceId:X().trim().nonempty()}),mw=ss.and(K({type:Y(Zb),ha_device_id:X().trim().nonempty()})),hw=as.and(K({type:Y(Zb)}));ts.and(K({type:Y(Zb),ha_device_id:X().trim().nonempty()}));var gw=K({entityId:X().trim().nonempty(),state:Er([X(),q(),J()]),attributes:sn(X(),hn()),lastChanged:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null),lastReported:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)});K({fetching:K({items:J().default(!1),item:W(X())})}),K({entityId:X().trim().nonempty(),data:K({state:Er([X(),q(),J()]),attributes:sn(X(),hn()),lastChanged:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null),lastReported:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null),lastUpdated:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)})}),K({entityId:X().trim().nonempty()}),K({entityId:X().trim().nonempty()});var _w=K({entity_id:X().trim().nonempty(),state:Er([X(),q(),J()]),attributes:sn(X(),hn()),last_changed:X().date().nullable(),last_reported:X().date().nullable(),last_updated:X().date().nullable()}),vw=K({id:X().trim().nonempty(),name:X().trim(),entities:W(X().trim().nonempty()),adoptedDeviceId:X().uuid().nullable()});K({fetching:K({items:J().default(!1),item:W(X())})}),K({id:X().trim().nonempty(),data:K({name:X().trim(),entities:W(X().trim().nonempty()),adoptedDeviceId:X().uuid().nullable()})}),K({id:X().trim().nonempty()}),K({id:X().trim().nonempty()}),K({id:X().trim().nonempty(),name:X().trim(),entities:W(X().trim().nonempty()),adopted_device_id:X().uuid().nullable(),states:W(_w)});var yw=e=>{let t=vw.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new rx(`Failed to validate received Home Assistant device data.`);return t.data},bw=e=>{let t=gw.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new rx(`Failed to validate received Home Assistant state data.`);return t.data},xw={fetching:{items:!1,item:[]}},Sw=jn(`devices_home_assistant_plugin-discovered_devices`,()=>{let e=Zn(),t=On(),n=pn(),r=j(xw),i=j(!1),a=j({}),o=()=>i.value,s=e=>r.value.fetching.item.includes(e),c=()=>r.value.fetching.items,l=()=>Object.values(a.value),u=e=>a.value[e]??null,d={},f={},p=e=>{if(e.id&&a.value&&e.id in a.value){let n=vw.safeParse({...a.value[e.id],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new rx(`Failed to insert HomeAssistantDiscoveredDevice.`);return a.value[n.data.id]=n.data}let n=vw.safeParse({...e.data,id:e.id});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new rx(`Failed to insert Home Assistant device.`);return a.value=a.value??{},a.value[n.data.id]=n.data},m=e=>{a.value&&delete a.value[e.id]},h=async t=>{let n=d[t.id];if(n)return n;let i=(async()=>{if(r.value.fetching.item.includes(t.id))throw new nx(`Already fetching HomeAssistantDiscoveredDevice.`);r.value.fetching.item.push(t.id);try{let{data:n,error:r,response:i}=await e.client.GET(`/${Ie}/${Yb}/discovered-devices/{id}`,{params:{path:{id:t.id}}});if(n!==void 0){let e=yw(n.data);return a.value[e.id]=e,_(e,n.data.states),e}let o=`Failed to fetch HomeAssistantDiscoveredDevice.`;throw r&&(o=Kn(r,o)),new nx(o,i.status)}finally{r.value.fetching.item=r.value.fetching.item.filter(e=>e!==t.id)}})();d[t.id]=i;try{return await i}finally{delete d[t.id]}},g=async()=>{let t=f.all;if(t)return t;let n=(async()=>{if(r.value.fetching.items)throw new nx(`Already fetching Home Assistant devices.`);r.value.fetching.items=!0;try{let{data:t,error:n,response:r}=await e.client.GET(`/${Ie}/${Yb}/discovered-devices`);if(t!==void 0)return a.value=Object.fromEntries(t.data.map(e=>{let t=yw(e);return _(t,e.states),[t.id,t]})),i.value=!0,Object.values(a.value);let o=`Failed to fetch Home Assistant devices.`;throw n&&(o=Kn(n,o)),new nx(o,r.status)}finally{r.value.fetching.items=!1}})();f.all=n;try{return await n}finally{delete f.all}},_=(e,t)=>{let r=n.getStore(jx);t.forEach(e=>{r.set({entityId:e.entity_id,data:bw(e)})})};return{semaphore:r,firstLoad:i,data:a,firstLoadFinished:o,getting:s,fetching:c,findAll:l,findById:u,set:p,unset:m,get:h,fetch:g}}),Cw=e=>Sw(e),ww=K({entityId:X().trim().nonempty(),name:X().trim(),domain:X().trim().nonempty(),adoptedDeviceId:X().uuid().nullable(),state:gw.nullable().optional()});K({fetching:K({items:J().default(!1),item:W(X())})}),K({entityId:X().trim().nonempty(),data:K({name:X().trim(),domain:X().trim().nonempty(),adoptedDeviceId:X().uuid().nullable()})}),K({entityId:X().trim().nonempty()}),K({entityId:X().trim().nonempty()});var Tw=K({entity_id:X().trim().nonempty(),name:X().trim(),domain:X().trim().nonempty(),adopted_device_id:X().uuid().nullable(),state:K({entity_id:X().trim().nonempty(),state:Er([X(),q(),J()]).nullable(),attributes:sn(X(),hn()),last_changed:X().datetime().nullable().optional(),last_reported:X().datetime().nullable().optional(),last_updated:X().datetime().nullable().optional()}).nullable().optional()}),Ew=e=>{let t=Tw.safeParse(e);if(!t.success)throw cr.error(`Helper response validation failed with:`,t.error),new rx(`Failed to validate Home Assistant helper response.`);let n=t.data,r={entityId:n.entity_id,name:n.name,domain:n.domain,adoptedDeviceId:n.adopted_device_id,state:n.state?bw(n.state):null},i=ww.safeParse(r);if(!i.success)throw cr.error(`Helper transformation validation failed with:`,i.error),new rx(`Failed to transform Home Assistant helper data.`);return i.data},Dw={fetching:{items:!1,item:[]}},Ow=jn(`devices_home_assistant_plugin-discovered_helpers`,()=>{let e=Zn(),t=On(),n=pn(),r=j(Dw),i=j(!1),a=j({}),o=()=>i.value,s=e=>r.value.fetching.item.includes(e),c=()=>r.value.fetching.items,l=()=>Object.values(a.value),u=e=>a.value[e]??null,d={},f={},p=e=>{if(e.entityId&&a.value&&e.entityId in a.value){let n=ww.safeParse({...a.value[e.entityId],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new rx(`Failed to insert HomeAssistantDiscoveredHelper.`);return a.value[n.data.entityId]=n.data}let n=ww.safeParse({...e.data,entityId:e.entityId});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new rx(`Failed to insert Home Assistant helper.`);return a.value=a.value??{},a.value[n.data.entityId]=n.data},m=e=>{a.value&&delete a.value[e.entityId]},h=async t=>{let n=d[t.entityId];if(n)return n;let i=(async()=>{if(r.value.fetching.item.includes(t.entityId))throw new nx(`Already fetching HomeAssistantDiscoveredHelper.`);r.value.fetching.item.push(t.entityId);try{let{data:n,error:r,response:i}=await e.client.GET(`/${Ie}/${Yb}/discovered-helpers/{entityId}`,{params:{path:{entityId:t.entityId}}});if(n!==void 0){let e=Ew(n.data);return a.value[e.entityId]=e,n.data.state&&_(n.data.state),e}let o=`Failed to fetch HomeAssistantDiscoveredHelper.`;throw r&&(o=r?.error?.message??o),new nx(o,i.status)}finally{r.value.fetching.item=r.value.fetching.item.filter(e=>e!==t.entityId)}})();d[t.entityId]=i;try{return await i}finally{delete d[t.entityId]}},g=async()=>{let t=f.all;if(t)return t;let n=(async()=>{if(r.value.fetching.items)throw new nx(`Already fetching Home Assistant helpers.`);r.value.fetching.items=!0;try{let{data:t,error:n,response:r}=await e.client.GET(`/${Ie}/${Yb}/discovered-helpers`);if(t!==void 0)return a.value=Object.fromEntries(t.data.map(e=>{let t=Ew(e);return e.state&&_(e.state),[t.entityId,t]})),i.value=!0,Object.values(a.value);let o=`Failed to fetch Home Assistant helpers.`;throw n&&(o=n?.error?.message??o),new nx(o,r.status)}finally{r.value.fetching.items=!1}})();f.all=n;try{return await n}finally{delete f.all}},_=e=>{n.getStore(jx).set({entityId:e.entity_id,data:bw(e)})};return{semaphore:r,firstLoad:i,data:a,firstLoadFinished:o,getting:s,fetching:c,findAll:l,findByEntityId:u,set:p,unset:m,get:h,fetch:g}}),kw=e=>Ow(e),Aw={fetching:{items:!1,item:[]}},jw=jn(`devices_home_assistant_plugin-states`,()=>{let e=Zn(),t=On(),n=j(Aw),r=j(!1),i=j({}),a=()=>r.value,o=e=>n.value.fetching.item.includes(e),s=()=>n.value.fetching.items,c=()=>Object.values(i.value),l=e=>i.value[e]??null,u={},d={};return{semaphore:n,firstLoad:r,data:i,firstLoadFinished:a,getting:o,fetching:s,findAll:c,findById:l,set:e=>{if(e.entityId&&i.value&&e.entityId in i.value){let n=gw.safeParse({...i.value[e.entityId],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new rx(`Failed to insert HomeAssistantState.`);return i.value[n.data.entityId]=n.data}let n=gw.safeParse({...e.data,entityId:e.entityId});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new rx(`Failed to insert Home Assistant device.`);return i.value=i.value??{},i.value[n.data.entityId]=n.data},unset:e=>{i.value&&delete i.value[e.entityId]},get:async t=>{let r=u[t.entityId];if(r)return r;let a=(async()=>{if(n.value.fetching.item.includes(t.entityId))throw new nx(`Already fetching HomeAssistantState.`);n.value.fetching.item.push(t.entityId);try{let{data:n,error:r,response:a}=await e.client.GET(`/${Ie}/${Yb}/states/{entityId}`,{params:{path:{entityId:t.entityId}}});if(n!==void 0){let e=bw(n.data);return i.value[e.entityId]=e,e}let o=`Failed to fetch HomeAssistantState.`;throw r&&(o=Kn(r,o)),new nx(o,a.status)}finally{n.value.fetching.item=n.value.fetching.item.filter(e=>e!==t.entityId)}})();u[t.entityId]=a;try{return await a}finally{delete u[t.entityId]}},fetch:async()=>{let t=d.all;if(t)return t;let a=(async()=>{if(n.value.fetching.items)throw new nx(`Already fetching Home Assistant states.`);n.value.fetching.items=!0;try{let{data:t,error:n,response:a}=await e.client.GET(`/${Ie}/${Yb}/states`);if(t!==void 0)return i.value=Object.fromEntries(t.data.map(e=>{let t=bw(e);return[t.entityId,t]})),r.value=!0,Object.values(i.value);let o=`Failed to fetch Home Assistant states.`;throw n&&(o=Kn(n,o)),new nx(o,a.status)}finally{n.value.fetching.items=!1}})();d.all=a;try{return await a}finally{delete d.all}}}}),Mw=e=>jw(e),Nw=Symbol(`FB-Plugin-DevicesHomeAssistant`),Pw={install:(e,t)=>{let n=ra(e),r=pn(e);for(let[e,n]of Object.entries(ew)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesHomeAssistantPlugin:n});t.i18n.global.setLocaleMessage(e,r)}let i=Cw(t.store);e.provide(kx,i),r.addStore(kx,i);let a=kw(t.store);e.provide(Ax,a),r.addStore(Ax,a);let o=Mw(t.store);e.provide(jx,o),r.addStore(jx,o),n.addPlugin(Nw,{type:Xb,source:`com.fastybird.smart-panel.plugin.devices-home-assistant`,name:`Home Assistant`,description:`Connect and control your Home Assistant devices directly from the FastyBird Smart Panel`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:YC},schemas:{pluginConfigSchema:dw,pluginConfigEditFormSchema:rw,pluginConfigUpdateReqSchema:fw},modules:[ka]},{type:Zb,components:{deviceAddForm:DC,deviceEditForm:kC,deviceWizardAdapter:$C,channelPropertyAddForm:RC,channelPropertyEditForm:BC},schemas:{deviceSchema:pw,deviceAddFormSchema:ix,deviceEditFormSchema:ax,deviceCreateReqSchema:mw,deviceUpdateReqSchema:hw,channelSchema:cw,channelCreateReqSchema:lw,channelUpdateReqSchema:uw,channelPropertySchema:iw,channelPropertyAddFormSchema:tw,channelPropertyEditFormSchema:nw,channelPropertyCreateReqSchema:aw,channelPropertyUpdateReqSchema:ow},modules:[qo]}],modules:[qo,ka],isCore:!0})}},Fw=`devices-homekit`,Iw=`devices-homekit`,Lw=`com.fastybird.smart-panel.plugin.devices-homekit`,Rw=function(e){return e.BRIDGE_STATUS_CHANGED=`DevicesHomeKitPlugin.Bridge.StatusChanged`,e}({}),zw=new Set([`000-00-000`,`111-11-111`,`222-22-222`,`333-33-333`,`444-44-444`,`555-55-555`,`666-66-666`,`777-77-777`,`888-88-888`,`999-99-999`,`123-45-678`,`876-54-321`]),Bw=class extends Error{},Vw=class extends Bw{code;constructor(e,t){super(e),this.code=t}},Hw=class extends Bw{},Uw=K({running:J(),paired:J(),pairedClientsCount:q(),bridgeName:X(),port:q(),pincode:X(),username:X(),setupUri:X(),qrCodeDataUri:X(),exposedDevicesCount:q()}),Ww=K({id:X().uuid(),name:X(),category:X(),roomName:X().nullable().optional(),roomId:X().uuid().nullable().optional(),isCompatible:J(),suggestedServiceType:X().nullable().optional(),isMapped:J(),channelsCount:q()});W(Ww);var Gw=(e,t,n)=>{let r=t.safeParse(Un(e));if(!r.success)throw cr.error(`HomeKit ${n} schema validation failed:`,r.error),new Hw(`Failed to validate HomeKit ${n}.`);return r.data},Kw=e=>Gw(e,Uw,`bridge status`),qw=e=>Gw(e,Ww,`device candidate`),Jw=e=>e.map(qw),Yw=jn(`devices_homekit_plugin-bridge`,()=>{let e=Zn(),t=j(null),n=j([]),r=j(!1),i=j(!1),a=j(!1),o=j(!1),s=0,c=async()=>{r.value=!0;let n=++s;try{let{data:r,error:i,response:a}=await e.client.GET(`/${Ie}/${Fw}/bridge/status`);if(r){let e=Kw(r.data);return n===s&&(t.value=e),t.value??e}throw new Vw(Kn(i,`Failed to load HomeKit Bridge status.`),a.status)}finally{r.value=!1}};return{status:t,candidates:n,fetchingStatus:r,fetchingCandidates:i,savingMapping:a,resettingPairing:o,fetchStatus:c,fetchCandidates:async()=>{i.value=!0;try{let{data:t,error:r,response:i}=await e.client.GET(`/${Ie}/${Fw}/bridge/candidates`);if(t)return n.value=Jw(t.data);throw new Vw(Kn(r,`Failed to load HomeKit device candidates.`),i.status)}finally{i.value=!1}},mapDevices:async r=>{a.value=!0;try{let{data:i,error:a,response:o}=await e.client.POST(`/${Ie}/${Fw}/bridge/candidates/map`,{body:{data:{device_ids:r}}});if(i)return n.value=Jw(i.data),t.value&&(t.value.exposedDevicesCount=r.length),n.value;throw new Vw(Kn(a,`Failed to update HomeKit device mappings.`),o.status)}finally{a.value=!1}},resetPairing:async()=>{o.value=!0;try{let{data:n,error:r,response:i}=await e.client.POST(`/${Ie}/${Fw}/bridge/reset-pairing`);if(n){let e=Kw(n.data);return s++,t.value=e}throw new Vw(Kn(r,`Failed to reset HomeKit pairing.`),i.status)}finally{o.value=!1}},onEvent:e=>{switch(e.event){case Rw.BRIDGE_STATUS_CHANGED:s++,t.value=Kw(e.data);return}},isLoaded:()=>t.value!==null,refresh:()=>c()}}),Xw=e=>Yw(e),Zw={class:`min-h-[360px]`},Qw={class:`flex flex-wrap sm:flex-nowrap items-center gap-3 mb-4`},$w={class:`flex items-center gap-2 shrink-0`},eT={class:`text-sm font-medium text-gray-700 dark:text-gray-300 whitespace-nowrap`},tT={class:`border border-gray-200 dark:border-gray-700 rounded-md overflow-hidden mb-4`},nT={class:`flex flex-col`},rT={class:`font-medium text-gray-900 dark:text-gray-100`},iT={key:0,class:`text-xs text-gray-500`},aT={class:`flex items-center justify-between pt-2 border-t border-gray-100 dark:border-gray-800`},oT={class:`text-sm text-gray-600 dark:text-gray-400`},sT={class:`flex items-center gap-2`},cT={class:`flex flex-col md:flex-row items-center justify-around gap-6 p-4 bg-gray-50 dark:bg-gray-800 rounded-lg mb-4`},lT={class:`flex flex-col items-center`},uT={key:0,class:`p-3 bg-white rounded-lg shadow-sm border border-gray-200`},dT=[`src`],fT={key:1,class:`w-[200px] h-[200px] flex items-center justify-center bg-gray-100 rounded-lg text-gray-400`},pT={class:`text-xs text-gray-500 mt-2`},mT={class:`flex flex-col gap-4 flex-1 max-w-[320px]`},hT={class:`text-xs font-medium text-gray-500 uppercase tracking-wider mb-1`},gT={class:`flex items-center gap-2`},_T={class:`text-2xl font-mono font-bold tracking-widest text-gray-900 dark:text-gray-100`},vT={class:`text-xs font-medium text-gray-500 uppercase tracking-wider mb-1`},yT={class:`flex items-center justify-between gap-2 w-full`},bT={class:`text-xs font-medium`},xT={class:`text-xs text-gray-500 dark:text-gray-400 space-y-1 list-decimal pl-4 m-0`},ST={class:`flex items-center justify-between pt-2 border-t border-gray-100 dark:border-gray-800`},CT={class:`flex items-center gap-2`},wT=d(k({name:`HomeKitSetupWizard`,__name:`homekit-setup-wizard`,props:{visible:{type:Boolean},initialStep:{default:`devices`}},emits:[`update:visible`,`completed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),c=Yw(),u=[`devices`,`pairing`],d=j(n.initialStep),f=p(()=>u.indexOf(d.value)),m=j(``),h=j(`all`),_=j(new Set),v=()=>{let e=new Set;for(let t of c.candidates)t.isMapped&&e.add(t.id);_.value=e},y=p(()=>{let e=m.value.toLowerCase().trim();return c.candidates.filter(t=>{if(h.value===`compatible`&&!t.isCompatible)return!1;if(e){let n=t.name.toLowerCase().includes(e),r=t.roomName?.toLowerCase().includes(e),i=t.category.toLowerCase().includes(e);if(!n&&!r&&!i)return!1}return!0})}),b=p(()=>_.value.size),x=p(()=>c.candidates.filter(e=>e.isCompatible).length),S=p(()=>!!(c.savingMapping||c.resettingPairing)),C=j(!1),w=(e,t)=>{let n=c.candidates.find(t=>t.id===e);if(!n||!n.isCompatible&&t)return;let r=new Set(_.value);t?r.add(e):r.delete(e),_.value=r},T=p(()=>y.value.filter(e=>e.isCompatible)),ee=p(()=>T.value.filter(e=>_.value.has(e.id)).length),te=p(()=>T.value.length>0&&ee.value===T.value.length),ne=p(()=>ee.value>0&&!te.value),re=e=>{let t=!!e,n=new Set(_.value);if(t)for(let e of T.value)n.add(e.id);else for(let e of T.value)n.delete(e.id);_.value=n},k=async()=>{if(!(C.value||c.fetchingCandidates||S.value))try{await c.mapDevices(Array.from(_.value)),o.success(a(`devicesHomeKitPlugin.messages.mappingsSaved`))}catch{o.error(a(`devicesHomeKitPlugin.messages.saveMappingsFailed`))}},ie=async()=>{if(!(C.value||c.fetchingCandidates||S.value)){try{await c.mapDevices(Array.from(_.value)),o.success(a(`devicesHomeKitPlugin.messages.mappingsSaved`)),d.value=`pairing`}catch{o.error(a(`devicesHomeKitPlugin.messages.saveMappingsFailed`));return}try{await c.fetchStatus()}catch{o.error(a(`devicesHomeKitPlugin.messages.statusFetchFailed`))}}},ae=async()=>{try{await c.fetchStatus()}catch{o.error(a(`devicesHomeKitPlugin.messages.statusFetchFailed`))}},oe=async()=>{if(c.status?.pincode)try{await navigator.clipboard.writeText(c.status.pincode),o.success(a(`devicesHomeKitPlugin.messages.pinCopied`))}catch{o.error(a(`devicesHomeKitPlugin.messages.copyFailed`))}},se=async()=>{if(!S.value)try{await gt.confirm(a(`devicesHomeKitPlugin.messages.confirmResetPairing`),a(`devicesHomeKitPlugin.headings.resetPairing`),{type:`warning`,confirmButtonText:a(`devicesHomeKitPlugin.wizard.buttons.resetPairing`),cancelButtonText:a(`devicesHomeKitPlugin.wizard.buttons.cancel`)}),await c.resetPairing(),o.success(a(`devicesHomeKitPlugin.messages.pairingResetSuccess`))}catch(e){e!==`cancel`&&o.error(a(`devicesHomeKitPlugin.messages.pairingResetFailed`))}},ce=()=>{S.value||(r(`update:visible`,!1),r(`completed`))},N=e=>{S.value||e()},le=e=>{!e&&!S.value&&ce()},ue=async()=>{C.value=!1,await Promise.allSettled([(async()=>{try{await c.fetchCandidates(),v()}catch{C.value=!0}})(),c.fetchStatus().catch(()=>{})])};return F(()=>n.visible,async e=>{e&&(d.value=n.initialStep,await ue())}),pe(async()=>{n.visible&&await ue()}),(t,n)=>(A(),O(L(di),{"model-value":e.visible,title:L(a)(`devicesHomeKitPlugin.wizard.title`),width:`90vw`,class:`max-w-[860px]!`,"close-on-click-modal":!1,"close-on-press-escape":!S.value,"show-close":!S.value,"before-close":N,"onUpdate:modelValue":le},{default:B(()=>[D(L(Oi),{active:f.value,"finish-status":`success`,"align-center":``,class:`mb-6`},{default:B(()=>[(A(),i(V,null,I(u,e=>D(L(ki),{key:e,title:L(a)(`devicesHomeKitPlugin.wizard.steps.${e}`)},null,8,[`title`])),64))]),_:1},8,[`active`]),l(`div`,Zw,[d.value===`devices`?(A(),i(V,{key:0},[D(L(Q),{type:`info`,title:L(a)(`devicesHomeKitPlugin.wizard.devicesDescription`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`]),C.value?(A(),O(L(Q),{key:0,type:`error`,title:L(a)(`devicesHomeKitPlugin.messages.candidatesFetchFailed`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`])):R(``,!0),l(`div`,Qw,[D(L(U),{modelValue:m.value,"onUpdate:modelValue":n[0]||=e=>m.value=e,placeholder:L(a)(`devicesHomeKitPlugin.wizard.searchPlaceholder`),clearable:``,class:`flex-1 min-w-[240px] max-w-[380px]`},{prefix:B(()=>[D(L(g),null,{default:B(()=>[D(L(s),{icon:`mdi:magnify`})]),_:1})]),_:1},8,[`modelValue`,`placeholder`]),D(L(Vt),{direction:`vertical`,class:`hidden sm:inline-block`}),l(`div`,$w,[l(`span`,eT,z(L(a)(`devicesHomeKitPlugin.wizard.filterDevices`))+`: `,1),D(L(ei),{modelValue:h.value,"onUpdate:modelValue":n[1]||=e=>h.value=e,class:`w-[180px]! shrink-0`,style:{width:`180px`}},{default:B(()=>[D(L(ti),{value:`all`,label:L(a)(`devicesHomeKitPlugin.wizard.filterAll`)},null,8,[`label`]),D(L(ti),{value:`compatible`,label:L(a)(`devicesHomeKitPlugin.wizard.filterCompatibleOnly`)},null,8,[`label`])]),_:1},8,[`modelValue`])])]),xe((A(),i(`div`,tT,[D(L(Pr),{data:y.value,style:{width:`100%`},"max-height":`360px`,size:`small`,"empty-text":L(a)(`devicesHomeKitPlugin.wizard.noDevices`)},{default:B(()=>[D(L(Mr),{width:`48`,align:`center`},{header:B(()=>[D(L(ii),{"model-value":te.value,indeterminate:ne.value,disabled:T.value.length===0,onChange:re},null,8,[`model-value`,`indeterminate`,`disabled`])]),default:B(({row:e})=>[D(L(ii),{"model-value":_.value.has(e.id),disabled:!e.isCompatible&&!_.value.has(e.id),"onUpdate:modelValue":t=>w(e.id,!!t)},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`])]),_:1}),D(L(Mr),{label:L(a)(`devicesHomeKitPlugin.wizard.columns.name`),"min-width":`180`},{default:B(({row:e})=>[l(`div`,nT,[l(`span`,rT,z(e.name),1),e.roomName?(A(),i(`span`,iT,z(e.roomName),1)):R(``,!0)])]),_:1},8,[`label`]),D(L(Mr),{label:L(a)(`devicesHomeKitPlugin.wizard.columns.category`),width:`130`},{default:B(({row:e})=>[D(L(Xt),{size:`small`,type:`info`},{default:B(()=>[E(z(e.category),1)]),_:2},1024)]),_:1},8,[`label`]),D(L(Mr),{label:L(a)(`devicesHomeKitPlugin.wizard.columns.homeKitService`),width:`160`},{default:B(({row:e})=>[e.isCompatible?(A(),O(L(Xt),{key:0,size:`small`,type:`success`,effect:`plain`},{default:B(()=>[E(z(e.suggestedServiceType||L(a)(`devicesHomeKitPlugin.wizard.compatible`)),1)]),_:2},1024)):(A(),O(L(Xt),{key:1,size:`small`,type:`danger`,effect:`plain`},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.wizard.incompatible`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`,`empty-text`])])),[[L(Fi),L(c).fetchingCandidates]]),b.value>140?(A(),O(L(Q),{key:1,type:`warning`,title:L(a)(`devicesHomeKitPlugin.wizard.bridgeLimitWarning`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`])):R(``,!0),l(`div`,aT,[l(`span`,oT,z(L(a)(`devicesHomeKitPlugin.wizard.selectedCount`,{count:b.value,total:x.value})),1),l(`div`,sT,[D(L(Oe),{loading:L(c).savingMapping,disabled:C.value||L(c).fetchingCandidates||S.value,onClick:k},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.wizard.buttons.saveMappings`)),1)]),_:1},8,[`loading`,`disabled`]),D(L(Oe),{type:`primary`,loading:L(c).savingMapping,disabled:C.value||L(c).fetchingCandidates||S.value,onClick:ie},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.wizard.buttons.saveAndPair`)),1)]),_:1},8,[`loading`,`disabled`])])])],64)):d.value===`pairing`?(A(),i(V,{key:1},[D(L(Q),{type:`info`,title:L(a)(`devicesHomeKitPlugin.wizard.pairingDescription`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`]),l(`div`,cT,[l(`div`,lT,[L(c).status?.qrCodeDataUri?(A(),i(`div`,uT,[l(`img`,{src:L(c).status.qrCodeDataUri,alt:`HomeKit QR Code`,width:`200`,height:`200`,class:`block`},null,8,dT)])):(A(),i(`div`,fT,[D(L(g),{class:`text-4xl`},{default:B(()=>[D(L(s),{icon:`mdi:qrcode-remove`})]),_:1})])),l(`span`,pT,z(L(a)(`devicesHomeKitPlugin.wizard.scanWithCamera`)),1)]),l(`div`,mT,[l(`div`,null,[l(`div`,hT,z(L(a)(`devicesHomeKitPlugin.wizard.setupCode`)),1),l(`div`,gT,[l(`span`,_T,z(L(c).status?.pincode||`---`),1),D(L(Oe),{size:`small`,circle:``,onClick:oe},{default:B(()=>[D(L(g),null,{default:B(()=>[D(L(s),{icon:`mdi:content-copy`})]),_:1})]),_:1})])]),l(`div`,null,[l(`div`,vT,z(L(a)(`devicesHomeKitPlugin.wizard.bridgeStatus`)),1),D(L(Q),{type:L(c).status?.paired?`success`:`warning`,closable:!1,"show-icon":``,class:`w-full pairing-status-alert [&_.el-alert\\_\\_content]:w-full! [&_.el-alert\\_\\_content]:flex-1!`},{title:B(()=>[l(`div`,yT,[l(`span`,bT,z(L(c).status?.paired?L(a)(`devicesHomeKitPlugin.wizard.pairedWithCount`,{count:L(c).status.pairedClientsCount}):L(a)(`devicesHomeKitPlugin.wizard.waitingForPairing`)),1),D(L(nt),{content:L(a)(`devicesHomeKitPlugin.buttons.refreshStatus`)},{default:B(()=>[D(L(Oe),{size:`small`,link:``,loading:L(c).fetchingStatus,"aria-label":L(a)(`devicesHomeKitPlugin.buttons.refreshStatus`),class:`p-0.5! shrink-0`,onClick:ae},{default:B(()=>[D(L(g),{size:16},{default:B(()=>[D(L(s),{icon:`mdi:refresh`})]),_:1})]),_:1},8,[`loading`,`aria-label`])]),_:1},8,[`content`])])]),_:1},8,[`type`])]),l(`ol`,xT,[l(`li`,null,z(L(a)(`devicesHomeKitPlugin.wizard.instruction1`)),1),l(`li`,null,z(L(a)(`devicesHomeKitPlugin.wizard.instruction2`)),1),l(`li`,null,z(L(a)(`devicesHomeKitPlugin.wizard.instruction3`)),1)])])]),l(`div`,ST,[l(`div`,CT,[D(L(Oe),{disabled:S.value,onClick:n[2]||=e=>d.value=`devices`},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.wizard.buttons.backToDevices`)),1)]),_:1},8,[`disabled`]),D(L(Oe),{type:`danger`,plain:``,loading:L(c).resettingPairing,disabled:S.value&&!L(c).resettingPairing,onClick:se},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.wizard.buttons.resetPairing`)),1)]),_:1},8,[`loading`,`disabled`])]),D(L(Oe),{type:`primary`,disabled:S.value,onClick:ce},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.wizard.buttons.done`)),1)]),_:1},8,[`disabled`])])],64)):R(``,!0)])]),_:1},8,[`model-value`,`title`,`close-on-press-escape`,`show-close`]))}}),[[`__scopeId`,`data-v-2d72901f`]]),TT={class:`text-xs mt-1`},ET={class:`mt-2`},DT=[`disabled`],OT={class:`flex items-center justify-between gap-2 flex-wrap`},kT={class:`font-medium text-base text-gray-900 dark:text-gray-100`},AT={class:`flex items-center gap-1.5 flex-wrap`},jT={class:`flex flex-col gap-3`},MT={class:`text-xs text-gray-500`},NT={key:0,class:`pt-3 border-t border-gray-100 dark:border-gray-800 flex items-center gap-4`},PT=[`src`],FT={class:`flex flex-col gap-1 min-w-0`},IT={class:`text-xs text-gray-500`},LT={class:`flex items-center gap-2`},RT={class:`text-lg font-mono font-bold`},zT={class:`flex items-center justify-end gap-2 flex-nowrap`},BT={class:`text-xs text-gray-500 mt-1`},VT={class:`flex flex-col gap-1.5 w-full`},HT={class:`text-xs text-gray-500`},UT={class:`flex flex-col gap-1.5 w-full`},WT={class:`text-xs text-gray-500`},GT=d(k({name:`HomeKitConfigForm`,__name:`homekit-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),c=Yw(),u=pn().getStore(Dn),{formEl:d,model:f,formChanged:p,submit:m,formResult:h,markSaved:_,reconcile:v}=Xi({config:n.config,messages:{success:a(`devicesHomeKitPlugin.messages.config.edited`),error:a(`devicesHomeKitPlugin.messages.config.notEdited`)}}),y=P({bridgeName:[{required:!0,validator:(e,t,n)=>{if(!t||t.trim().length===0){n(Error(a(`devicesHomeKitPlugin.fields.config.name.validation.required`)));return}n()},trigger:`blur`}],port:[{required:!0,message:a(`devicesHomeKitPlugin.fields.config.port.validation.required`),trigger:`blur`}],pincode:[{validator:(e,t,n)=>{let r=t?.trim();if(!r){if(f.pincodeConfigured){n();return}n(Error(a(`devicesHomeKitPlugin.fields.config.pinCode.validation.required`)));return}if(!/^\d{3}-\d{2}-\d{3}$/.test(r)){n(Error(a(`devicesHomeKitPlugin.fields.config.pinCode.validation.format`)));return}if(zw.has(r)){n(Error(a(`devicesHomeKitPlugin.fields.config.pinCode.validation.forbidden`)));return}n()},trigger:`blur`}]}),b=j(!1),x=j(`devices`),S=j(!1),C=j(!1),w=e=>{e instanceof KeyboardEvent&&([`Backspace`,`Delete`,`ArrowLeft`,`ArrowRight`,`Tab`,`Enter`].includes(e.key)||e.ctrlKey||e.metaKey||/^[0-9]$/.test(e.key)||e.preventDefault())},T=e=>{e instanceof KeyboardEvent&&([`Backspace`,`Delete`,`ArrowLeft`,`ArrowRight`,`Tab`,`Enter`].includes(e.key)||e.ctrlKey||e.metaKey||/^[0-9]$/.test(e.key)||e.preventDefault())},ee=e=>{let t=e.replace(/\D/g,``).slice(0,8),n=``;n=t.length<=3?t:t.length<=5?`${t.slice(0,3)}-${t.slice(3)}`:`${t.slice(0,3)}-${t.slice(3,5)}-${t.slice(5,8)}`,f.pincode=n},te=()=>{let e=new Uint32Array(1),t;do{let n;do crypto.getRandomValues(e),n=e[0];while(n>=42e8);let r=(n%1e8).toString().padStart(8,`0`);t=`${r.slice(0,3)}-${r.slice(3,5)}-${r.slice(5,8)}`}while(zw.has(t));return t},ne=()=>{f.pincode=te()},re=async()=>{try{let e=await u.get({type:Iw,force:!0});e&&(v(e),_(),S.value=!1)}catch(e){throw S.value=!0,e}},k=async()=>{C.value=!0;try{await re(),await c.fetchStatus(),o.success(a(`devicesHomeKitPlugin.messages.refreshSuccess`))}catch{o.error(a(`devicesHomeKitPlugin.messages.refreshFailed`))}finally{C.value=!1}},ie=e=>{if(S.value){o.error(a(`devicesHomeKitPlugin.messages.outOfSyncBlock`));return}if(p.value){o.warning(a(`devicesHomeKitPlugin.messages.saveBeforeAction`));return}x.value=e,b.value=!0},ae=async()=>{try{await re(),await c.fetchStatus()}catch{}},oe=async()=>{if(c.status?.pincode)try{await navigator.clipboard.writeText(c.status.pincode),o.success(a(`devicesHomeKitPlugin.messages.pinCopied`))}catch{o.error(a(`devicesHomeKitPlugin.messages.copyFailed`))}},se=async()=>{if(S.value){o.error(a(`devicesHomeKitPlugin.messages.outOfSyncBlock`));return}if(p.value){o.warning(a(`devicesHomeKitPlugin.messages.saveBeforeAction`));return}try{await gt.confirm(a(`devicesHomeKitPlugin.messages.confirmResetPairing`),a(`devicesHomeKitPlugin.headings.resetPairing`),{type:`warning`,confirmButtonText:a(`devicesHomeKitPlugin.buttons.resetPairing`),cancelButtonText:a(`devicesHomeKitPlugin.wizard.buttons.cancel`)}),await c.resetPairing(),await re(),o.success(a(`devicesHomeKitPlugin.messages.pairingResetSuccess`))}catch(e){e!==`cancel`&&o.error(a(`devicesHomeKitPlugin.messages.pairingResetFailed`))}};return F(()=>h.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{if(e){if(r(`update:remote-form-submit`,!1),S.value){o.error(a(`devicesHomeKitPlugin.messages.outOfSyncBlock`));return}m().catch(()=>{})}}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!d.value)return;d.value.resetFields()}}),F(()=>p.value,e=>{r(`update:remote-form-changed`,e)}),pe(async()=>{try{await c.fetchStatus()}catch{}}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:d,model:L(f),rules:y,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`devicesHomeKitPlugin.headings.aboutSettings`),description:L(a)(`devicesHomeKitPlugin.texts.aboutSettings`),closable:!1,class:`mb-4!`},null,8,[`title`,`description`]),S.value?(A(),O(L(Q),{key:0,type:`error`,title:L(a)(`devicesHomeKitPlugin.texts.outOfSyncTitle`),closable:!1,"show-icon":``,class:`mb-4!`},{default:B(()=>[l(`p`,TT,z(L(a)(`devicesHomeKitPlugin.texts.outOfSyncDescription`)),1),l(`div`,ET,[D(L(Oe),{size:`small`,type:`danger`,plain:``,loading:C.value,onClick:k},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.buttons.retryRefresh`)),1)]),_:1},8,[`loading`])])]),_:1},8,[`title`])):R(``,!0),l(`fieldset`,{disabled:S.value,class:`border-0 p-0 m-0 min-w-0`},[D(L(Z),{label:L(a)(`devicesHomeKitPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3 mb-4`},{default:B(()=>[D(L(Vn),{modelValue:L(f).enabled,"onUpdate:modelValue":t[0]||=e=>L(f).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(ni),{shadow:`never`,class:`mb-4`,"header-class":`py-2!`,"body-class":`py-3!`,"footer-class":`py-2! px-4!`},{header:B(()=>[l(`div`,OT,[l(`span`,kT,z(L(c).status?.bridgeName||L(f).bridgeName),1),l(`div`,AT,[D(L(Xt),{type:L(c).status?.running?`success`:`info`,size:`small`},{default:B(()=>[E(z(L(c).status?.running?L(a)(`devicesHomeKitPlugin.status.running`):L(a)(`devicesHomeKitPlugin.status.stopped`)),1)]),_:1},8,[`type`]),L(c).status?.paired?(A(),O(L(Xt),{key:0,type:`success`,effect:`plain`,size:`small`},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.status.pairedWithCount`,{count:L(c).status.pairedClientsCount})),1)]),_:1})):L(c).status?.running?(A(),O(L(Xt),{key:1,type:`warning`,effect:`plain`,size:`small`},{default:B(()=>[E(z(L(a)(`devicesHomeKitPlugin.status.notPaired`)),1)]),_:1})):R(``,!0)])])]),footer:B(()=>[l(`div`,zT,[D(L(Oe),{type:`primary`,disabled:S.value,onClick:t[1]||=e=>ie(`devices`)},{default:B(()=>[D(L(g),{class:`mr-1`},{default:B(()=>[D(L(s),{icon:`mdi:cog`})]),_:1}),E(` `+z(L(a)(`devicesHomeKitPlugin.buttons.configureDevices`)),1)]),_:1},8,[`disabled`]),D(L(nt),{content:L(a)(`devicesHomeKitPlugin.buttons.showPairing`)},{default:B(()=>[L(c).status?.running?(A(),O(L(Oe),{key:0,disabled:S.value,"aria-label":L(a)(`devicesHomeKitPlugin.buttons.showPairing`),class:`px-2!`,onClick:t[2]||=e=>ie(`pairing`)},{default:B(()=>[D(L(g),null,{default:B(()=>[D(L(s),{icon:`mdi:qrcode`})]),_:1})]),_:1},8,[`disabled`,`aria-label`])):R(``,!0)]),_:1},8,[`content`]),D(L(nt),{content:L(a)(`devicesHomeKitPlugin.buttons.resetPairing`)},{default:B(()=>[L(c).status?.paired?(A(),O(L(Oe),{key:0,type:`danger`,plain:``,disabled:S.value||L(c).resettingPairing,loading:L(c).resettingPairing,"aria-label":L(a)(`devicesHomeKitPlugin.buttons.resetPairing`),class:`px-2!`,onClick:se},{default:B(()=>[D(L(g),null,{default:B(()=>[D(L(s),{icon:`mdi:link-variant-off`})]),_:1})]),_:1},8,[`disabled`,`loading`,`aria-label`])):R(``,!0)]),_:1},8,[`content`])])]),default:B(()=>[l(`div`,jT,[l(`span`,MT,z(L(a)(`devicesHomeKitPlugin.status.exposedCount`,{count:L(c).status?.exposedDevicesCount||0})),1),L(c).status?.running&&L(c).status?.qrCodeDataUri?(A(),i(`div`,NT,[l(`img`,{src:L(c).status.qrCodeDataUri,alt:`HomeKit QR Code`,width:`80`,height:`80`,class:`p-1 bg-white rounded border border-gray-200 shrink-0`},null,8,PT),l(`div`,FT,[l(`span`,IT,z(L(a)(`devicesHomeKitPlugin.wizard.setupCode`)),1),l(`div`,LT,[l(`span`,RT,z(L(c).status.pincode),1),D(L(Oe),{size:`small`,circle:``,onClick:oe},{default:B(()=>[D(L(g),null,{default:B(()=>[D(L(s),{icon:`mdi:content-copy`})]),_:1})]),_:1})])])])):R(``,!0)])]),_:1}),D(L(Z),{label:L(a)(`devicesHomeKitPlugin.fields.config.name.title`),prop:`bridgeName`},{default:B(()=>[D(L(U),{modelValue:L(f).bridgeName,"onUpdate:modelValue":t[3]||=e=>L(f).bridgeName=e,placeholder:L(a)(`devicesHomeKitPlugin.fields.config.name.placeholder`),name:`bridgeName`},null,8,[`modelValue`,`placeholder`]),l(`div`,BT,z(L(a)(`devicesHomeKitPlugin.fields.config.name.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeKitPlugin.fields.config.port.title`),prop:`port`},{default:B(()=>[l(`div`,VT,[D(L(Qr),{modelValue:L(f).port,"onUpdate:modelValue":t[4]||=e=>L(f).port=e,min:1024,max:65535,step:1,precision:0,controls:!1,name:`port`,class:`w-full! port-input [&_input]:text-left!`,onKeydown:w},null,8,[`modelValue`]),l(`div`,HT,z(L(a)(`devicesHomeKitPlugin.fields.config.port.description`)),1)])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesHomeKitPlugin.fields.config.pinCode.title`),prop:`pincode`},{default:B(()=>[l(`div`,UT,[D(L(U),{modelValue:L(f).pincode,"onUpdate:modelValue":t[5]||=e=>L(f).pincode=e,placeholder:L(c).status?.pincode||L(a)(`devicesHomeKitPlugin.fields.config.pinCode.placeholder`),name:`pincode`,maxlength:`10`,onInput:ee,onKeydown:T},{suffix:B(()=>[D(L(nt),{content:L(a)(`devicesHomeKitPlugin.buttons.generatePin`)},{default:B(()=>[D(L(Oe),{link:``,disabled:S.value,class:`px-1!`,onClick:ne},{default:B(()=>[D(L(g),{size:16},{default:B(()=>[D(L(s),{icon:`mdi:dice-multiple-outline`})]),_:1})]),_:1},8,[`disabled`])]),_:1},8,[`content`])]),_:1},8,[`modelValue`,`placeholder`]),l(`div`,WT,z(L(a)(`devicesHomeKitPlugin.fields.config.pinCode.description`)),1)])]),_:1},8,[`label`])],8,DT),D(wT,{visible:b.value,"onUpdate:visible":t[6]||=e=>b.value=e,"initial-step":x.value,onCompleted:ae},null,8,[`visible`,`initial-step`])]),_:1},8,[`model`,`rules`]))}}),[[`__scopeId`,`data-v-7b8a7273`]]),KT={"cs-CZ":{headings:{aboutSettings:`Apple HomeKit Most`,bridgeStatus:`Stav běhu mostu`,resetPairing:`Resetovat párování Apple Home`},texts:{aboutSettings:`Přemostěte zařízení Smart Panelu do Apple Home prostřednictvím lokálního protokolu HomeKit Accessory Protocol (HAP). Pomocí průvodce vyberte, která zařízení mají být přemostěna.`,outOfSyncTitle:`Konfigurace není synchronizována`,outOfSyncDescription:`Zobrazenou konfiguraci se nepodařilo synchronizovat s backendem. Změny nelze uložit, dokud nebude konfigurace znovu načtena.`},status:{running:`Spuštěno`,stopped:`Zastaveno`,notPaired:`Nespárováno`,pairedWithCount:`Spárováno ({count} klientů)`,exposedCount:`{count} zařízení aktuálně přemostěno`},buttons:{configureDevices:`Nastavit zařízení`,showPairing:`Apple Home QR Kód`,resetPairing:`Resetovat párování`,retryRefresh:`Zkusit synchronizovat znovu`,generatePin:`Vygenerovat náhodný PIN`,refreshStatus:`Obnovit`},fields:{config:{enabled:{title:`Povoleno`},name:{title:`Zobrazovaný název mostu`,placeholder:`Smart Panel Bridge`,description:`Název zobrazený pro most v aplikaci Apple Domácnost`,validation:{required:`Název mostu je povinný`}},port:{title:`TCP Port`,description:`Místní port pro HAP server (výchozí: 51826)`,validation:{required:`Port je povinný`}},pinCode:{title:`Párovací PIN kód`,placeholder:`031-45-154`,description:`8místný PIN ve formátu XXX-XX-XXX pro spárování s Apple Domácností`,validation:{format:`PIN kód musí mít formát XXX-XX-XXX`,required:`PIN kód je povinný`,forbidden:`Tento PIN kód není povolen systémem Apple HomeKit`}}}},wizard:{title:`Nastavení Apple HomeKit Mostu`,steps:{devices:`Výběr zařízení`,pairing:`Spárování s Apple Home`},pairingDescription:`Naskenujte QR kód níže pomocí aplikace Apple Domácnost na svém iPhonu nebo iPadu pro spárování tohoto mostu.`,devicesDescription:`Vyberte zařízení Smart Panelu, která mají být přemostěna do Apple Domácnosti. V aplikaci se zobrazí pouze kompatibilní zařízení s namapovanými službami.`,searchPlaceholder:`Hledat zařízení podle názvu nebo místnosti...`,filterDevices:`Zařízení`,filterAll:`Všechna zařízení`,filterCompatibleOnly:`Pouze kompatibilní`,compatible:`Kompatibilní`,noDevices:`Nenalezena žádná zařízení`,incompatible:`Nekompatibilní`,bridgeLimitWarning:`Apple Home doporučuje maximálně 150 příslušenství na jeden most. Překročení limitu může způsobit nestabilitu.`,selectedCount:`Vybráno {count} z {total} kompatibilních zařízení`,scanWithCamera:`Naskenujte pomocí aplikace Domácnost nebo Fotoaparát na iPhone/iPadu`,setupCode:`Nastavovací PIN kód`,bridgeStatus:`Stav párování`,pairedWithCount:`Počet spárovaných ovladačů: {count}`,waitingForPairing:`Čekání na spárování...`,instruction1:`Otevřete aplikaci Domácnost na zařízení iOS nebo macOS.`,instruction2:`Klepněte na "+" a zvolte "Přidat příslušenství".`,instruction3:`Naskenujte QR kód nebo zadejte 8místný PIN kód ručně.`,columns:{name:`Zařízení`,category:`Kategorie`,homeKitService:`HomeKit Služba`},buttons:{saveMappings:`Uložit`,saveAndPair:`Uložit a spárovat`,backToDevices:`Zpět`,resetPairing:`Resetovat párování`,done:`Hotovo`,cancel:`Zrušit`}},messages:{config:{edited:`Nastavení HomeKit Mostu bylo aktualizováno.`,notEdited:`Nepodařilo se aktualizovat nastavení HomeKit Mostu.`},mappingsSaved:`Mapování zařízení bylo úspěšně uloženo.`,saveMappingsFailed:`Nepodařilo se uložit mapování zařízení.`,candidatesFetchFailed:`Nepodařilo se načíst kandidátská zařízení. Zkuste to prosím znovu.`,statusFetchFailed:`Nepodařilo se načíst stav mostu.`,pinCopied:`Párovací PIN kód byl zkopírován do schránky.`,copyFailed:`Kopírování do schránky se nezdařilo.`,confirmResetPairing:`Opravdu chcete resetovat párování Apple Home? Stávající připojení budou odpojena a most bude nutné znovu spárovat.`,pairingResetSuccess:`Párovací údaje byly resetovány. Nyní můžete most znovu spárovat.`,pairingResetFailed:`Nepodařilo se resetovat párovací údaje.`,saveBeforeAction:`Před pokračováním prosím uložte nebo zrušte změny nastavení.`,refreshFailed:`Nepodařilo se synchronizovat konfiguraci s backendem.`,refreshSuccess:`Konfigurace byla úspěšně synchronizována.`,outOfSyncBlock:`Konfigurace není synchronizována. Před uložením ji znovu načtěte.`}},"de-DE":{headings:{aboutSettings:`Apple HomeKit Bridge`,bridgeStatus:`Bridge-Laufzeitstatus`,resetPairing:`Apple Home Kopplung zurücksetzen`},texts:{aboutSettings:`Verbinden Sie Smart Panel Geräte über das lokale HomeKit Accessory Protocol (HAP) mit Apple Home. Wählen Sie mit dem Assistenten aus, welche Geräte eingebunden werden sollen.`,outOfSyncTitle:`Konfiguration nicht synchronisiert`,outOfSyncDescription:`Die angezeigte Konfiguration konnte nicht mit dem Backend synchronisiert werden. Änderungen können erst nach dem Neuladen der Konfiguration gespeichert werden.`},status:{running:`Aktiv`,stopped:`Gestoppt`,notPaired:`Nicht gekoppelt`,pairedWithCount:`Gekoppelt ({count} Clients)`,exposedCount:`{count} Geräte derzeit eingebunden`},buttons:{configureDevices:`Geräte konfigurieren`,showPairing:`Apple Home QR-Code`,resetPairing:`Kopplung zurücksetzen`,retryRefresh:`Synchronisierung wiederholen`,generatePin:`Zufällige PIN generieren`,refreshStatus:`Aktualisieren`},fields:{config:{enabled:{title:`Aktiviert`},name:{title:`Bridge-Anzeigename`,placeholder:`Smart Panel Bridge`,description:`In der Apple Home App angezeigter Name`,validation:{required:`Bridge-Name ist erforderlich`}},port:{title:`TCP-Port`,description:`Lokaler Port für den HAP-Server (Standard: 51826)`,validation:{required:`Port ist erforderlich`}},pinCode:{title:`Kopplungs-PIN-Code`,placeholder:`031-45-154`,description:`8-stelliger PIN im Format XXX-XX-XXX zur Kopplung mit Apple Home`,validation:{format:`PIN-Code muss im Format XXX-XX-XXX angegeben werden`,required:`PIN-Code ist erforderlich`,forbidden:`Dieser PIN-Code ist von Apple HomeKit nicht zulässig`}}}},wizard:{title:`Apple HomeKit Bridge Einrichtung`,steps:{devices:`Geräte auswählen`,pairing:`Mit Apple Home koppeln`},pairingDescription:`Scannen Sie den unten stehenden QR-Code mit der Apple Home App auf Ihrem iPhone oder iPad, um diese Bridge zu koppeln.`,devicesDescription:`Wählen Sie aus, welche Smart Panel Geräte in Apple Home eingebunden werden sollen. Nur kompatible Geräte mit zugeordneten Diensten werden in Apple Home angezeigt.`,searchPlaceholder:`Geräte nach Name oder Raum suchen...`,filterDevices:`Geräte`,filterAll:`Alle Geräte`,filterCompatibleOnly:`Nur kompatible`,compatible:`Kompatibel`,noDevices:`Keine Geräte gefunden`,incompatible:`Inkompatibel`,bridgeLimitWarning:`Apple Home empfiehlt maximal 150 Zubehörteile pro Bridge. Das Hinzufügen weiterer Geräte kann zu Instabilität oder Kopplungsproblemen führen.`,selectedCount:`{count} von {total} kompatiblen Geräten ausgewählt`,scanWithCamera:`Mit der Apple Home oder Kamera App auf dem iPhone/iPad scannen`,setupCode:`Einrichtungs-PIN-Code`,bridgeStatus:`Kopplungsstatus`,pairedWithCount:`Gekoppelt mit {count} Controller(n)`,waitingForPairing:`Warten auf Kopplung...`,instruction1:`Öffnen Sie die Apple Home App auf Ihrem iOS- oder macOS-Gerät.`,instruction2:`Tippen Sie auf "+" und wählen Sie "Gerät hinzufügen".`,instruction3:`Scannen Sie den QR-Code oder geben Sie den 8-stelligen PIN-Code manuell ein.`,columns:{name:`Gerät`,category:`Kategorie`,homeKitService:`HomeKit-Dienst`},buttons:{saveMappings:`Speichern`,saveAndPair:`Speichern & Koppeln`,backToDevices:`Zurück`,resetPairing:`Kopplung zurücksetzen`,done:`Fertig`,cancel:`Abbrechen`}},messages:{config:{edited:`HomeKit Bridge Einstellungen aktualisiert.`,notEdited:`HomeKit Bridge Einstellungen konnten nicht aktualisiert werden.`},mappingsSaved:`Gerätezuordnungen erfolgreich gespeichert.`,saveMappingsFailed:`Gerätezuordnungen konnten nicht gespeichert werden.`,candidatesFetchFailed:`Kandidatengeräte konnten nicht geladen werden. Bitte versuchen Sie es erneut.`,statusFetchFailed:`Bridge-Status konnte nicht aktualisiert werden.`,pinCopied:`Kopplungs-PIN-Code in die Zwischenablage kopiert.`,copyFailed:`Kopieren in die Zwischenablage fehlgeschlagen.`,confirmResetPairing:`Sind Sie sicher, dass Sie die Apple Home Kopplung zurücksetzen möchten? Bestehende Apple Home Verbindungen werden getrennt und Sie müssen die Bridge erneut koppeln.`,pairingResetSuccess:`Kopplungsdaten zurückgesetzt. Sie können nun eine neue Kopplung mit Apple Home durchführen.`,pairingResetFailed:`Kopplungsdaten konnten nicht zurückgesetzt werden.`,saveBeforeAction:`Bitte speichern oder verwerfen Sie Ihre Änderungen, bevor Sie fortfahren.`,refreshFailed:`Synchronisierung der Konfiguration mit dem Backend fehlgeschlagen.`,refreshSuccess:`Konfiguration erfolgreich synchronisiert.`,outOfSyncBlock:`Die Konfiguration ist nicht synchronisiert. Bitte vor dem Speichern neu laden.`}},"en-US":{headings:{aboutSettings:`Apple HomeKit Bridge`,bridgeStatus:`Bridge Runtime Status`,resetPairing:`Reset Apple Home Pairing`},texts:{aboutSettings:`Bridge Smart Panel devices to Apple Home via local HomeKit Accessory Protocol (HAP). Use the wizard to select which devices should be bridged.`,outOfSyncTitle:`Configuration Out of Sync`,outOfSyncDescription:`The displayed configuration could not be synchronized with the backend. Changes cannot be saved until the configuration is reloaded.`},status:{running:`Running`,stopped:`Stopped`,notPaired:`Not Paired`,pairedWithCount:`Paired ({count} clients)`,exposedCount:`{count} devices currently bridged`},buttons:{configureDevices:`Configure Devices`,showPairing:`Apple Home QR Code`,resetPairing:`Reset Pairing`,retryRefresh:`Retry Synchronization`,generatePin:`Generate random PIN`,refreshStatus:`Refresh`},fields:{config:{enabled:{title:`Enabled`},name:{title:`Bridge Display Name`,placeholder:`Smart Panel Bridge`,description:`The name displayed for the bridge in Apple Home`,validation:{required:`Bridge name is required`}},port:{title:`TCP Port`,description:`Local port for the HAP server (default: 51826)`,validation:{required:`Port is required`}},pinCode:{title:`Pairing PIN Code`,placeholder:`031-45-154`,description:`8-digit PIN in XXX-XX-XXX format used to pair with Apple Home`,validation:{format:`PIN code must be in XXX-XX-XXX format`,required:`PIN code is required`,forbidden:`PIN code is not allowed by Apple HomeKit`}}}},wizard:{title:`Apple HomeKit Bridge Setup`,steps:{devices:`Select Devices`,pairing:`Pair with Apple Home`},pairingDescription:`Scan the QR code below using the Apple Home app on your iPhone or iPad to pair this bridge.`,devicesDescription:`Choose which Smart Panel devices should be bridged into Apple Home. Only compatible devices with mapped services will appear in Apple Home.`,searchPlaceholder:`Search devices by name or room...`,filterDevices:`Devices`,filterAll:`All Devices`,filterCompatibleOnly:`Compatible Only`,compatible:`Compatible`,noDevices:`No devices found`,incompatible:`Incompatible`,bridgeLimitWarning:`Apple Home recommends a maximum of 150 accessories per bridge. Adding more may lead to instability or pairing issues.`,selectedCount:`{count} of {total} compatible devices selected`,scanWithCamera:`Scan with the Apple Home or Camera app on iPhone/iPad`,setupCode:`Setup PIN Code`,bridgeStatus:`Pairing Status`,pairedWithCount:`Paired with {count} controller(s)`,waitingForPairing:`Waiting for pairing...`,instruction1:`Open the Apple Home app on your iOS or macOS device.`,instruction2:`Tap "+" and select "Add Accessory".`,instruction3:`Scan the QR code or enter the 8-digit PIN code manually.`,columns:{name:`Device`,category:`Category`,homeKitService:`HomeKit Service`},buttons:{saveMappings:`Save`,saveAndPair:`Save & Pair`,backToDevices:`Back`,resetPairing:`Reset Pairing`,done:`Done`,cancel:`Cancel`}},messages:{config:{edited:`HomeKit Bridge settings updated.`,notEdited:`Failed to update HomeKit Bridge settings.`},mappingsSaved:`Device mappings saved successfully.`,saveMappingsFailed:`Failed to save device mappings.`,candidatesFetchFailed:`Failed to load candidate devices. Please try again.`,statusFetchFailed:`Failed to refresh bridge status.`,pinCopied:`Pairing PIN code copied to clipboard.`,copyFailed:`Failed to copy to clipboard.`,confirmResetPairing:`Are you sure you want to reset Apple Home pairing? Existing Apple Home connections will be disconnected and you will need to re-pair the bridge.`,pairingResetSuccess:`Pairing credentials reset. You can now pair with Apple Home.`,pairingResetFailed:`Failed to reset pairing credentials.`,saveBeforeAction:`Please save or discard your settings changes before continuing.`,refreshFailed:`Failed to synchronize configuration with backend.`,refreshSuccess:`Configuration successfully synchronized.`,outOfSyncBlock:`Configuration is out of sync. Please reload before saving.`}},"es-ES":{headings:{aboutSettings:`Apple HomeKit Bridge`,bridgeStatus:`Estado del puente`,resetPairing:`Restablecer enlace con Apple Home`},texts:{aboutSettings:`Conecte los dispositivos de Smart Panel a Apple Home mediante el protocolo local HomeKit Accessory Protocol (HAP). Utilice el asistente para seleccionar qué dispositivos desea enlazar.`,outOfSyncTitle:`Configuración desincronizada`,outOfSyncDescription:`La configuración mostrada no se pudo sincronizar con el backend. Los cambios no se pueden guardar hasta que se vuelva a cargar la configuración.`},status:{running:`En ejecución`,stopped:`Detenido`,notPaired:`No enlazado`,pairedWithCount:`Enlazado ({count} clientes)`,exposedCount:`{count} dispositivos actualmente enlazados`},buttons:{configureDevices:`Configurar dispositivos`,showPairing:`Código QR de Apple Home`,resetPairing:`Restablecer enlace`,retryRefresh:`Reintentar sincronización`,generatePin:`Generar PIN aleatorio`,refreshStatus:`Actualizar`},fields:{config:{enabled:{title:`Habilitado`},name:{title:`Nombre del puente`,placeholder:`Smart Panel Bridge`,description:`Nombre visible para el puente en la app Apple Casa`,validation:{required:`El nombre del puente es obligatorio`}},port:{title:`Puerto TCP`,description:`Puerto local para el servidor HAP (predeterminado: 51826)`,validation:{required:`El puerto es obligatorio`}},pinCode:{title:`Código PIN de enlace`,placeholder:`031-45-154`,description:`PIN de 8 dígitos en formato XXX-XX-XXX utilizado para enlazar con Apple Home`,validation:{format:`El código PIN debe tener el formato XXX-XX-XXX`,required:`El código PIN es obligatorio`,forbidden:`Este código PIN no está permitido por Apple HomeKit`}}}},wizard:{title:`Configuración de Apple HomeKit Bridge`,steps:{devices:`Seleccionar dispositivos`,pairing:`Enlazar con Apple Home`},pairingDescription:`Escanee el código QR a continuación usando la aplicación Apple Casa en su iPhone o iPad para emparejar este puente.`,devicesDescription:`Elija qué dispositivos de Smart Panel deben enlazarse en Apple Home. Solo los dispositivos compatibles con servicios mapeados aparecerán en Apple Home.`,searchPlaceholder:`Buscar dispositivos por nombre o habitación...`,filterDevices:`Dispositivos`,filterAll:`Todos los dispositivos`,filterCompatibleOnly:`Solo compatibles`,compatible:`Compatible`,noDevices:`No se encontraron dispositivos`,incompatible:`Incompatible`,bridgeLimitWarning:`Apple Home recomienda un máximo de 150 accesorios por puente. Añadir más puede provocar inestabilidad o problemas de enlace.`,selectedCount:`{count} de {total} dispositivos compatibles seleccionados`,scanWithCamera:`Escanee con la app Casa o Cámara en su iPhone/iPad`,setupCode:`Código PIN de configuración`,bridgeStatus:`Estado del enlace`,pairedWithCount:`Enlazado con {count} controlador(es)`,waitingForPairing:`Esperando enlace...`,instruction1:`Abra la aplicación Apple Casa en su dispositivo iOS o macOS.`,instruction2:`Pulse "+" y seleccione "Añadir accesorio".`,instruction3:`Escanee el código QR o introduzca el PIN de 8 dígitos manualmente.`,columns:{name:`Dispositivo`,category:`Categoría`,homeKitService:`Servicio HomeKit`},buttons:{saveMappings:`Guardar`,saveAndPair:`Guardar y enlazar`,backToDevices:`Atrás`,resetPairing:`Restablecer enlace`,done:`Listo`,cancel:`Cancelar`}},messages:{config:{edited:`Ajustes de HomeKit Bridge actualizados.`,notEdited:`No se pudieron actualizar los ajustes de HomeKit Bridge.`},mappingsSaved:`Asignaciones de dispositivos guardadas correctamente.`,saveMappingsFailed:`No se pudieron guardar las asignaciones de dispositivos.`,candidatesFetchFailed:`No se pudieron cargar los dispositivos candidatos. Inténtelo de nuevo.`,statusFetchFailed:`No se pudo actualizar el estado del puente.`,pinCopied:`Código PIN de enlace copiado al portapapeles.`,copyFailed:`No se pudo copiar al portapapeles.`,confirmResetPairing:`¿Está seguro de que desea restablecer el enlace con Apple Home? Las conexiones existentes se desconectarán y deberá volver a enlazar el puente.`,pairingResetSuccess:`Credenciales de enlace restablecidas. Ahora puede enlazar con Apple Home.`,pairingResetFailed:`No se pudieron restablecer las credenciales de enlace.`,saveBeforeAction:`Por favor guarde o descarte los cambios en la configuración antes de continuar.`,refreshFailed:`Error al sincronizar la configuración con el backend.`,refreshSuccess:`Configuración sincronizada con éxito.`,outOfSyncBlock:`La configuración no está sincronizada. Vuelva a cargarla antes de guardar.`}},"pl-PL":{headings:{aboutSettings:`Apple HomeKit Bridge`,bridgeStatus:`Stan działania mostka`,resetPairing:`Zresetuj parowanie Apple Home`},texts:{aboutSettings:`Mostkuj urządzenia Smart Panelu do Apple Home za pomocą lokalnego protokołu HomeKit Accessory Protocol (HAP). Użyj kreatora, aby wybrać, które urządzenia mają zostać zmostkowane.`,outOfSyncTitle:`Konfiguracja niezsynchronizowana`,outOfSyncDescription:`Wyświetlona konfiguracja nie mogła zostać zsynchronizowana z serwerem. Zmiany nie mogą zostać zapisane do czasu ponownego załadowania konfiguracji.`},status:{running:`Uruchomiony`,stopped:`Zatrzymany`,notPaired:`Nie sparowano`,pairedWithCount:`Sparowano ({count} klientów)`,exposedCount:`{count} urządzeń aktualnie zmostkowanych`},buttons:{configureDevices:`Konfiguruj urządzenia`,showPairing:`Kod QR Apple Home`,resetPairing:`Zresetuj parowanie`,retryRefresh:`Ponów synchronizację`,generatePin:`Wygeneruj losowy PIN`,refreshStatus:`Odśwież`},fields:{config:{enabled:{title:`Włączone`},name:{title:`Nazwa wyświetlana mostka`,placeholder:`Smart Panel Bridge`,description:`Nazwa widoczna dla mostka w aplikacji Apple Dom`,validation:{required:`Nazwa mostka jest wymagana`}},port:{title:`Port TCP`,description:`Lokalny port dla serwera HAP (domyślnie: 51826)`,validation:{required:`Port jest wymagany`}},pinCode:{title:`Kod PIN parowania`,placeholder:`031-45-154`,description:`8-cyfrowy kod PIN w formacie XXX-XX-XXX używany do parowania z Apple Home`,validation:{format:`Kod PIN musi być w formacie XXX-XX-XXX`,required:`Kod PIN jest wymagany`,forbidden:`Ten kod PIN nie jest dozwolony przez Apple HomeKit`}}}},wizard:{title:`Konfiguracja Apple HomeKit Bridge`,steps:{devices:`Wybór urządzeń`,pairing:`Sparuj z Apple Home`},pairingDescription:`Zeskanuj poniższy kod QR za pomocą aplikacji Apple Dom na telefonie iPhone lub iPadzie, aby sparować ten mostek.`,devicesDescription:`Wybierz, które urządzenia Smart Panelu mają zostać zmostkowane do Apple Home. Tylko kompatybilne urządzenia z przypisanymi usługami pojawią się w Apple Home.`,searchPlaceholder:`Szukaj urządzeń według nazwy lub pokoju...`,filterDevices:`Urządzenia`,filterAll:`Wszystkie urządzenia`,filterCompatibleOnly:`Tylko kompatybilne`,compatible:`Kompatybilne`,noDevices:`Nie znaleziono urządzeń`,incompatible:`Niekompatybilne`,bridgeLimitWarning:`Apple Home zaleca maksymalnie 150 akcesoriów na mostek. Dodanie większej liczby może prowadzić do niestabilności lub problemów z parowaniem.`,selectedCount:`Wybrano {count} z {total} kompatybilnych urządzeń`,scanWithCamera:`Zeskanuj za pomocą aplikacji Dom lub Aparat na iPhonie/iPadzie`,setupCode:`Kod PIN konfiguracji`,bridgeStatus:`Stan parowania`,pairedWithCount:`Sparowano z {count} kontrolerem(ami)`,waitingForPairing:`Oczekiwanie na sparowanie...`,instruction1:`Otwórz aplikację Apple Dom na swoim urządzeniu z systemem iOS lub macOS.`,instruction2:`Dotknij "+" i wybierz "Dodaj akcesorium".`,instruction3:`Zeskanuj kod QR lub wprowadź 8-cyfrowy kod PIN ręcznie.`,columns:{name:`Urządzenie`,category:`Kategoria`,homeKitService:`Usługa HomeKit`},buttons:{saveMappings:`Zapisz`,saveAndPair:`Zapisz i sparuj`,backToDevices:`Wstecz`,resetPairing:`Zresetuj parowanie`,done:`Gotowe`,cancel:`Anuluj`}},messages:{config:{edited:`Ustawienia HomeKit Bridge zostały zaktualizowane.`,notEdited:`Nie udało się zaktualizować ustawień HomeKit Bridge.`},mappingsSaved:`Przypisania urządzeń zostały pomyślnie zapisane.`,saveMappingsFailed:`Nie udało się zapisać przypisań urządzeń.`,candidatesFetchFailed:`Nie udało się pobrać listy urządzeń. Spróbuj ponownie.`,statusFetchFailed:`Nie udało się pobrać stanu mostka.`,pinCopied:`Kod PIN parowania został skopiowany do schowka.`,copyFailed:`Kopiowanie do schowka nie powiodło się.`,confirmResetPairing:`Czy na pewno chcesz zresetować parowanie Apple Home? Istniejące połączenia Apple Home zostaną rozłączone i konieczne będzie ponowne sparowanie mostka.`,pairingResetSuccess:`Dane parowania zostały zresetowane. Możesz teraz sparować z Apple Home.`,pairingResetFailed:`Nie udało się zresetować danych parowania.`,saveBeforeAction:`Przed kontynuowaniem zapisz lub odrzuć zmiany ustawień.`,refreshFailed:`Nie udało się zsynchronizować konfiguracji z serwerem.`,refreshSuccess:`Konfiguracja pomyślnie zsynchronizowana.`,outOfSyncBlock:`Konfiguracja nie jest zsynchronizowana. Załaduj ponownie przed zapisaniem.`}},"sk-SK":{headings:{aboutSettings:`Apple HomeKit Most`,bridgeStatus:`Stav behu mosta`,resetPairing:`Resetovať párovanie Apple Home`},texts:{aboutSettings:`Premostite zariadenia Smart Panela do Apple Home prostredníctvom lokálneho protokolu HomeKit Accessory Protocol (HAP). Pomocou sprievodcu vyberte, ktoré zariadenia majú byť premostené.`,outOfSyncTitle:`Konfigurácia nie je synchronizovaná`,outOfSyncDescription:`Zobrazenú konfiguráciu sa nepodarilo synchronizovať s backendom. Zmeny nie je možné uložiť, kým nebude konfigurácia znova načítaná.`},status:{running:`Spustené`,stopped:`Zastavené`,notPaired:`Nespárované`,pairedWithCount:`Spárované ({count} klientov)`,exposedCount:`{count} zariadení aktuálne premostených`},buttons:{configureDevices:`Nastaviť zariadenia`,showPairing:`Apple Home QR kód`,resetPairing:`Resetovať párovanie`,retryRefresh:`Skúsiť synchronizovať znova`,generatePin:`Vygenerovať náhodný PIN`,refreshStatus:`Obnoviť`},fields:{config:{enabled:{title:`Povolené`},name:{title:`Zobrazovaný názov mosta`,placeholder:`Smart Panel Bridge`,description:`Názov zobrazený pre most v aplikácii Apple Domácnosť`,validation:{required:`Názov mosta je povinný`}},port:{title:`TCP Port`,description:`Miestny port pre HAP server (predvolený: 51826)`,validation:{required:`Port je povinný`}},pinCode:{title:`Párovací PIN kód`,placeholder:`031-45-154`,description:`8-miestny PIN v formáte XXX-XX-XXX používaný na spárovanie s Apple Home`,validation:{format:`PIN kód musí byť vo formáte XXX-XX-XXX`,required:`PIN kód je povinný`,forbidden:`Tento PIN kód nie je povolený systémom Apple HomeKit`}}}},wizard:{title:`Nastavenie Apple HomeKit Mosta`,steps:{devices:`Výber zariadení`,pairing:`Spárovanie s Apple Home`},pairingDescription:`Naskenujte QR kód nižšie pomocou aplikácie Apple Domácnosť na svojom iPhone alebo iPade pre spárovanie tohto mosta.`,devicesDescription:`Vyberte zariadenia Smart Panela, ktoré majú byť premostené do Apple Domácnosti. V aplikácii sa zobrazia iba kompatibilné zariadenia s namapovanými službami.`,searchPlaceholder:`Hľadať zariadenia podľa názvu alebo miestnosti...`,filterDevices:`Zariadenia`,filterAll:`Všetky zariadenia`,filterCompatibleOnly:`Iba kompatibilné`,compatible:`Kompatibilné`,noDevices:`Nenašli sa žiadne zariadenia`,incompatible:`Nekompatibilné`,bridgeLimitWarning:`Apple Home odporúča maximálne 150 príslušenstiev na jeden most. Prekročenie limitu môže spôsobiť nestabilitu.`,selectedCount:`Vybrané {count} z {total} kompatibilných zariadení`,scanWithCamera:`Naskenujte pomocou aplikácie Domácnosť alebo Fotoaparát na iPhone/iPade`,setupCode:`Nastavovací PIN kód`,bridgeStatus:`Stav párovania`,pairedWithCount:`Počet spárovaných ovládačov: {count}`,waitingForPairing:`Čakanie na spárovanie...`,instruction1:`Otvorte aplikáciu Domácnosť na zariadení iOS alebo macOS.`,instruction2:`Klepnite na "+" a zvoľte "Pridať príslušenstvo".`,instruction3:`Naskenujte QR kód alebo zadajte 8-miestny PIN kód ručne.`,columns:{name:`Zariadenie`,category:`Kategória`,homeKitService:`HomeKit Služba`},buttons:{saveMappings:`Uložiť`,saveAndPair:`Uložiť a spárovať`,backToDevices:`Späť`,resetPairing:`Resetovať párovanie`,done:`Hotovo`,cancel:`Zrušiť`}},messages:{config:{edited:`Nastavenia HomeKit Mosta boli aktualizované.`,notEdited:`Nepodarilo sa aktualizovať nastavenia HomeKit Mosta.`},mappingsSaved:`Priradenia zariadení boli úspešne uložené.`,saveMappingsFailed:`Nepodarilo sa uložiť priradenia zariadení.`,candidatesFetchFailed:`Nepodarilo sa načítať kandidátske zariadenia. Skúste to prosím znova.`,statusFetchFailed:`Nepodarilo sa obnoviť stav mosta.`,pinCopied:`Párovací PIN kód bol skopírovaný do schránky.`,copyFailed:`Kopírovanie do schránky zlyhalo.`,confirmResetPairing:`Naozaj chcete resetovať párovanie Apple Home? Existujúce pripojenia Apple Home budú odpojené a budete musieť most znova spárovať.`,pairingResetSuccess:`Párovacie údaje boli resetované. Teraz môžete spárovať s Apple Home.`,pairingResetFailed:`Nepodarilo sa resetovať párovacie údaje.`,saveBeforeAction:`Pred pokračovaním prosím uložte alebo zrušte zmeny nastavenia.`,refreshFailed:`Nepodarilo sa synchronizovať konfiguráciu s backendom.`,refreshSuccess:`Konfigurácia bola úspešne synchronizovaná.`,outOfSyncBlock:`Konfigurácia nie je synchronizovaná. Pred uložením ju znova načítajte.`}}},qT=Ki.extend({bridgeName:X().trim().min(1),port:q().int().min(1024).max(65535),pincode:X().trim().optional(),pincodeConfigured:J().optional(),username:X().trim().regex(/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/),setupId:X().trim().length(4),mappedDeviceIds:W(X().uuid()).default([])}).superRefine((e,t)=>{let n=typeof e.pincode==`string`?e.pincode.trim():``;if(n===``){e.pincodeConfigured||t.addIssue({code:Bd.custom,message:`PIN code is required`,path:[`pincode`]});return}if(!/^\d{3}-\d{2}-\d{3}$/.test(n)){t.addIssue({code:Bd.custom,message:`PIN code must be in format XXX-XX-XXX`,path:[`pincode`]});return}zw.has(n)&&t.addIssue({code:Bd.custom,message:`PIN code is not allowed by Apple HomeKit`,path:[`pincode`]})}).overwrite(e=>{let t=typeof e.pincode==`string`?e.pincode.trim():``,n=t===``&&e.pincodeConfigured?void 0:t||void 0;return{...e,pincode:n}}),JT=Wi.extend({bridgeName:X().trim().min(1).default(`Smart Panel Bridge`),port:q().int().min(1024).max(65535).default(51826),pincode:X().trim().optional(),pincodeConfigured:J().default(!1),username:X().trim().default(`1A:2B:3C:4D:5E:6F`),setupId:X().trim().default(`SP01`),mappedDeviceIds:W(X().uuid()).default([])}),YT=Zi.and(K({type:Y(Iw),bridge_name:X().trim().min(1).optional(),port:q().int().min(1024).max(65535).optional(),pincode:X().trim().optional(),username:X().trim().optional(),setup_id:X().trim().optional(),mapped_device_ids:W(X().uuid()).optional()}));Ri.and(K({type:Y(Iw),bridge_name:X().trim().min(1),port:q(),pincode:X().optional(),pincode_configured:J(),username:X(),setup_id:X(),mapped_device_ids:W(X())}));var XT=Symbol(`devices_homekit_plugin-bridge`),ZT=Symbol(`FB-Plugin-DevicesHomeKit`),QT={install:(e,t)=>{let n=ra(e),r=pn(e),i=ut(e),a=_r(e),o=Hi(e);for(let[e,n]of Object.entries(KT)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesHomeKitPlugin:n});t.i18n.global.setLocaleMessage(e,r)}let s=Xw(t.store);e.provide(XT,s),r.addStore(XT,s),n.addPlugin(ZT,{type:Iw,source:Lw,name:`Apple HomeKit Bridge`,description:`Bridge Smart Panel devices to Apple Home via local HomeKit Accessory Protocol`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://github.com/FastyBird/smart-panel/issues`},elements:[{type:Ea,components:{pluginConfigEditForm:GT},schemas:{pluginConfigSchema:JT,pluginConfigEditFormSchema:qT,pluginConfigUpdateReqSchema:YT},modules:[ka]}],modules:[ka],isCore:!1}),o.register(ZT,()=>Ii([s])),i.on(`event`,e=>{if(e?.event?.startsWith(`DevicesHomeKitPlugin`)&&!(typeof e.payload!=`object`||e.payload===null))switch(e.event){case Rw.BRIDGE_STATUS_CHANGED:s.onEvent({event:e.event,data:e.payload});return;default:a.warn(`Unhandled devices-homekit event:`,e.event)}})}},$T=e=>{try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&t.username===``&&t.password===``}catch{return!1}},eE=X().refine($T,{message:`Homey URL must use HTTP or HTTPS without embedded credentials`}),tE=e=>typeof e==`string`&&e.trim()===``,nE=Ki.extend({url:X().nullable().optional(),apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),connectionTimeout:Dt().int().min(Br).max(Xr),reconciliationInterval:Dt().int().min(Kr).max(zr)}).superRefine((e,t)=>{typeof e.url==`string`&&e.url.trim()!==``&&!$T(e.url)&&t.addIssue({code:`custom`,path:[`url`],message:`Homey URL must use HTTP or HTTPS without embedded credentials`}),tE(e.apiKey)&&t.addIssue({code:`custom`,path:[`apiKey`],message:`A Homey API key replacement must not be blank`})}).overwrite(e=>({...e,url:typeof e.url==`string`&&e.url.trim()===``?null:e.url})),rE=class extends Error{},iE=class extends rE{code;constructor(e,t){super(e),this.code=t}},aE=class extends rE{},oE=K({serviceState:X(),connectionState:G(nn),enabled:J(),configured:J(),healthy:J(),degraded:J(),homeyId:X().nullable().optional(),homeyName:X().nullable().optional(),homeyVersion:X().nullable().optional(),lastConnectedAt:X().nullable().optional(),lastInventorySyncAt:X().nullable().optional(),lastEventAt:X().nullable().optional(),lastEventAgeMs:q().nullable().optional(),adoptedDeviceCount:q().int().nonnegative(),missingDeviceCount:q().int().nonnegative(),unsupportedDeviceCount:q().int().nonnegative(),unavailableDeviceCount:q().int().nonnegative(),reconnectCount:q().int().nonnegative(),reconciliationCount:q().int().nonnegative(),reconciliationFailureCount:q().int().nonnegative(),lastReconciliationDurationMs:q().nullable().optional(),lastErrorCategory:G(Ht).nullable().optional(),lastError:X().nullable().optional()}),sE=K({mode:ir([`saved`,`candidate`]),success:J(),homeyId:X().nullable().optional(),homeyName:X().nullable().optional(),homeyVersion:X().nullable().optional(),errorCategory:G(Ht).nullable().optional(),error:X().nullable().optional()}),cE=K({id:X(),baseId:X(),type:ir([`boolean`,`number`,`string`,`enum`,`unknown`]),unit:X().nullable().optional(),readable:J(),writable:J(),available:J().nullable().optional()}),lE=K({id:X(),name:X(),class:X(),zoneId:X().nullable().optional(),zoneName:X().nullable().optional(),zonePath:W(X()),available:J(),driverId:X().nullable().optional(),manufacturer:X().nullable().optional(),model:X().nullable().optional(),capabilities:W(cE),supportState:G(en),supportReasons:W(G(tn)),suggestedCategory:G(dr).nullable().optional(),adopted:J(),adoptedDeviceId:X().uuid().nullable().optional()}),uE=K({minimum:q().nullable().optional(),maximum:q().nullable().optional(),step:q().nullable().optional()}),dE=K({type:ir([`identity`,`scale`,`map`,`boolean`,`clamp`,`round`,`constant`,`threshold`,`thresholds`]),reversible:J(),lossy:J(),ambiguous:J(),inputRange:W(q()).nullable().optional(),outputRange:W(q()).nullable().optional(),clamp:J().nullable().optional(),minimum:q().nullable().optional(),maximum:q().nullable().optional(),precision:q().nullable().optional(),readTableSize:q().nullable().optional(),writeTableSize:q().nullable().optional()}),fE=K({capabilityId:X(),capabilityBaseId:X(),mappingName:X(),mappingSource:ir([`builtin`,`user`]),category:X(),dataType:X(),direction:ir([`read_only`,`write_only`,`bidirectional`]),permissions:W(X()),readable:J(),writable:J(),unit:X().nullable().optional(),range:uE.nullable().optional(),sourceRange:uE.nullable().optional(),enumValues:W(X()),panelEnumValues:W(X()),currentValue:Er([X(),q(),J()]).nullable().optional(),valueAvailable:J(),capabilityAvailable:J().nullable().optional(),conversion:dE}),pE=K({device:K({id:X(),name:X(),class:X(),zoneId:X().nullable().optional(),zonePath:W(X()),available:J()}),suggestedCategory:G(dr).nullable().optional(),selectedCategory:G(dr).nullable().optional(),validCategories:W(G(dr)),channels:W(K({identifier:X(),mappingName:X(),mappingSource:ir([`builtin`,`user`]),category:X(),name:X(),properties:W(fE)})),unsupportedCapabilityIds:W(X()),warnings:W(K({code:X(),severity:X(),scope:ir([`device`,`channel`,`capability`,`conversion`]),identifier:X().nullable().optional(),mappingNames:W(X()),message:X()})),readyToAdopt:J()}),mE=K({deviceId:X(),status:G(kt),panelDeviceId:X().uuid().nullable().optional(),failureCode:G(er).nullable().optional(),message:X().nullable().optional()}),hE=(e,t,n)=>{let r=t.safeParse(Un(e));if(!r.success)throw cr.error(`Homey ${n} schema validation failed:`,r.error),new aE(`Failed to validate Homey ${n}.`);return r.data},gE=e=>hE(e,oE,`status`),_E=e=>hE(e,sE,`connection test`),vE=e=>hE(e,lE,`inventory device`),yE=e=>hE(e,pE,`mapping preview`),bE=e=>hE(e,mE,`adoption result`),xE=jn(`devices_homey_plugin-status`,()=>{let e=Zn(),t=j(null),n=j(null),r=j(!1),i=j(!1),a=async()=>{r.value=!0;try{let{data:n,error:r,response:i}=await e.client.GET(`/${Ie}/${Rr}/status`);if(n)return t.value=gE(n.data);throw new iE(Kn(r,`Failed to load Homey status.`),i.status)}finally{r.value=!1}},o=async t=>{i.value=!0,s();try{let{data:r,error:i,response:a}=await e.client.POST(`/${Ie}/${Rr}/test-connection`,{body:t});if(r)return n.value=_E(r.data);throw new iE(Kn(i,`Failed to test the Homey connection.`),a.status)}finally{i.value=!1}},s=()=>{n.value=null};return{status:t,lastTest:n,fetching:r,testing:i,fetch:a,testConnection:o,clearLastTest:s}}),SE=e=>xE(e),CE=e=>e.trim()===``?null:e,wE=()=>({data:{mode:Cn.saved}}),TE=(e,t)=>typeof e!=`string`||!$T(e)||typeof t!=`string`||t.trim()===``?null:{data:{mode:rt.candidate,url:e,api_key:t.trim()}},EE=e=>{if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(t)},DE={class:`flex items-center justify-between gap-3`},OE={class:`font-medium`},kE={class:`text-xs text-gray-500 mt-1`},AE={class:`font-medium`},jE={class:`text-sm text-gray-500 mt-1 mb-3`},ME={class:`flex flex-wrap gap-2`},NE={key:3,class:`text-xs text-gray-500 mt-2`},PE={key:4,class:`text-xs text-gray-500 mt-1`},FE={key:5,class:`mt-4`,"data-test-id":`homey-test-feedback`},IE={key:6,class:`mt-4`,"data-test-id":`homey-test-feedback`},LE={key:7,class:`mt-4`,"data-test-id":`homey-test-feedback`},RE=k({name:`HomeyConnectionPanel`,__name:`HomeyConnectionPanel`,props:{candidateUrl:{default:null},candidateApiKey:{default:void 0}},setup(e){let t=e,{t:n}=M(),r=xE(),a=j(!1),o=j(!1),s=0,c=p(()=>n(`devicesHomeyPlugin.status.notAvailable`)),u=p(()=>TE(t.candidateUrl,t.candidateApiKey)),d=p(()=>r.testing||r.status?.configured!==!0),f=p(()=>r.testing||u.value===null),m=p(()=>[r.lastTest?.homeyName,r.lastTest?.homeyId,r.lastTest?.homeyVersion].filter(e=>typeof e==`string`&&e!==``).join(` · `)||c.value),g=p(()=>{let e=r.lastTest,t=e?.error??n(`devicesHomeyPlugin.connectionTest.failureFallback`),i=v(e?.errorCategory);return i?`${t} ${i}`:t}),_=e=>e===`connected`?`success`:e===`degraded_polling`||e===`reconnecting`?`warning`:e===`authentication_failed`||e===`error`?`danger`:`info`,v=e=>e?n(`devicesHomeyPlugin.status.guidance.${e}`):``,y=e=>EE(e)??c.value,b=(e,t)=>[e,t].filter(e=>typeof e==`string`&&e!==``).join(` · `)||c.value,x=async()=>{a.value=!1;try{await r.fetch()}catch{a.value=!0}},S=async e=>{if(r.testing)return;let t=++s;o.value=!1;try{await r.testConnection(e)}catch{t===s&&(o.value=!0)}finally{t!==s&&r.clearLastTest()}},C=async()=>S(wE()),w=async()=>{u.value!==null&&await S(u.value)},T=()=>{s+=1,o.value=!1,r.clearLastTest()};return F(()=>[t.candidateUrl,t.candidateApiKey],T),pe(()=>{T(),x()}),h(T),(e,t)=>(A(),O(L(ni),{shadow:`never`,class:`mt-6`,"data-test-id":`homey-connection-panel`},{header:B(()=>[l(`div`,DE,[l(`div`,null,[l(`div`,OE,z(L(n)(`devicesHomeyPlugin.status.title`)),1),l(`div`,kE,z(L(n)(`devicesHomeyPlugin.status.description`)),1)]),D(L(Oe),{plain:``,loading:L(r).fetching,disabled:L(r).testing,"data-test-id":`homey-refresh-status`,onClick:x},{default:B(()=>[E(z(L(n)(`devicesHomeyPlugin.status.refresh`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:B(()=>[a.value?(A(),O(L(Q),{key:0,type:`warning`,closable:!1,title:L(n)(`devicesHomeyPlugin.status.loadFailed`),class:`mb-4`},null,8,[`title`])):R(``,!0),L(r).status?(A(),O(L(jr),{key:1,border:!0,column:2,class:`mb-4`},{default:B(()=>[D(L(Ar),{label:L(n)(`devicesHomeyPlugin.status.fields.connection`)},{default:B(()=>[D(L(Xt),{type:_(L(r).status.connectionState)},{default:B(()=>[E(z(L(n)(`devicesHomeyPlugin.status.states.${L(r).status.connectionState}`)),1)]),_:1},8,[`type`])]),_:1},8,[`label`]),D(L(Ar),{label:L(n)(`devicesHomeyPlugin.status.fields.homey`)},{default:B(()=>[E(z(b(L(r).status.homeyName,L(r).status.homeyId)),1)]),_:1},8,[`label`]),D(L(Ar),{label:L(n)(`devicesHomeyPlugin.status.fields.version`)},{default:B(()=>[E(z(L(r).status.homeyVersion??c.value),1)]),_:1},8,[`label`]),D(L(Ar),{label:L(n)(`devicesHomeyPlugin.status.fields.lastSync`)},{default:B(()=>[E(z(y(L(r).status.lastInventorySyncAt)),1)]),_:1},8,[`label`]),D(L(Ar),{label:L(n)(`devicesHomeyPlugin.status.fields.lastEvent`)},{default:B(()=>[E(z(y(L(r).status.lastEventAt)),1)]),_:1},8,[`label`]),D(L(Ar),{label:L(n)(`devicesHomeyPlugin.status.fields.adoptedDevices`)},{default:B(()=>[E(z(L(r).status.adoptedDeviceCount),1)]),_:1},8,[`label`])]),_:1})):R(``,!0),L(r).status?.lastError?(A(),O(L(Q),{key:2,type:`error`,closable:!1,title:L(r).status.lastError,description:v(L(r).status.lastErrorCategory),class:`mb-4`},null,8,[`title`,`description`])):R(``,!0),l(`div`,AE,z(L(n)(`devicesHomeyPlugin.connectionTest.title`)),1),l(`p`,jE,z(L(n)(`devicesHomeyPlugin.connectionTest.description`)),1),l(`div`,ME,[D(L(Oe),{loading:L(r).testing,disabled:d.value,"data-test-id":`homey-test-saved`,onClick:C},{default:B(()=>[E(z(L(n)(`devicesHomeyPlugin.connectionTest.saved`)),1)]),_:1},8,[`loading`,`disabled`]),D(L(Oe),{type:`primary`,plain:``,loading:L(r).testing,disabled:f.value,"data-test-id":`homey-test-candidate`,onClick:w},{default:B(()=>[E(z(L(n)(`devicesHomeyPlugin.connectionTest.candidate`)),1)]),_:1},8,[`loading`,`disabled`])]),L(r).status?.configured?R(``,!0):(A(),i(`p`,NE,z(L(n)(`devicesHomeyPlugin.connectionTest.savedUnavailable`)),1)),u.value===null?(A(),i(`p`,PE,z(L(n)(`devicesHomeyPlugin.connectionTest.candidateUnavailable`)),1)):R(``,!0),o.value?(A(),i(`div`,FE,[D(L(Q),{type:`error`,closable:!1,title:L(n)(`devicesHomeyPlugin.connectionTest.requestFailed`)},null,8,[`title`])])):L(r).lastTest?.success?(A(),i(`div`,IE,[D(L(Q),{type:`success`,closable:!1,title:L(n)(`devicesHomeyPlugin.connectionTest.success`),description:L(n)(`devicesHomeyPlugin.connectionTest.successDescription`,{identity:m.value})},null,8,[`title`,`description`])])):L(r).lastTest?(A(),i(`div`,LE,[D(L(Q),{type:`error`,closable:!1,title:L(n)(`devicesHomeyPlugin.connectionTest.failure`),description:g.value},null,8,[`title`,`description`])])):R(``,!0)]),_:1}))}}),zE={class:`w-full mt-2 text-xs text-gray-500`,"data-test-id":`homey-api-key-permissions`},BE={class:`font-semibold text-gray-600`},VE={class:`list-disc pl-5 mt-1 space-y-1`},HE={class:`mt-1`},UE={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},WE=k({name:`HomeyConfigForm`,__name:`homey-config-form`,props:{remoteFormErrors:{default:()=>[]},layout:{default:Ta.DEFAULT},config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`devicesHomeyPlugin.messages.config.updated`),error:i(`devicesHomeyPlugin.messages.config.updateFailed`)}}),d=p(()=>Object.fromEntries(n.remoteFormErrors.map(e=>[e.field,e.message]))),f=p({get:()=>o.url??``,set:e=>{o.url=CE(e)}}),m=p(()=>({url:[{validator:(e,t,n)=>{typeof t==`string`&&t!==``&&!$T(t)?n(Error(i(`devicesHomeyPlugin.config.url.invalid`))):n()},trigger:[`change`,`blur`]}],apiKey:[{validator:(e,t,n)=>{tE(t)?n(Error(i(`devicesHomeyPlugin.config.apiKey.invalid`))):n()},trigger:[`change`,`blur`]}],connectionTimeout:[{required:!0,message:i(`devicesHomeyPlugin.config.validation.connectionTimeoutRequired`),trigger:[`change`,`blur`]},{type:`number`,min:Br,max:Xr,message:i(`devicesHomeyPlugin.config.validation.connectionTimeoutRange`,{min:Br,max:Xr}),trigger:[`change`,`blur`]}],reconciliationInterval:[{required:!0,message:i(`devicesHomeyPlugin.config.validation.reconciliationIntervalRequired`),trigger:[`change`,`blur`]},{type:`number`,min:Kr,max:zr,message:i(`devicesHomeyPlugin.config.validation.reconciliationIntervalRange`,{min:Kr,max:zr}),trigger:[`change`,`blur`]}]}));return F(u,e=>r(`update:remote-form-result`,e)),F(s,e=>r(`update:remote-form-changed`,e)),F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>void 0))}),F(()=>n.remoteFormReset,e=>{r(`update:remote-form-reset`,!1),e&&a.value?.resetFields()}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:m.value,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`devicesHomeyPlugin.config.local.title`),description:L(i)(`devicesHomeyPlugin.config.local.description`),closable:!1,"data-test-id":`homey-local-connection-info`},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesHomeyPlugin.config.enabled`),prop:`enabled`,"label-position":`left`,class:`mt-3`,"data-test-id":`homey-enabled-field`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[9]||=l(`hr`,null,null,-1),D(L(Z),{label:L(i)(`devicesHomeyPlugin.config.url.label`),prop:`url`,error:d.value.url,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:f.value,"onUpdate:modelValue":t[1]||=e=>f.value=e,name:`url`,placeholder:L(i)(`devicesHomeyPlugin.config.url.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`error`]),D(L(Z),{label:L(i)(`devicesHomeyPlugin.config.apiKey.label`),prop:`apiKey`,error:d.value.apiKey},{default:B(()=>[D(L(Zp),{modelValue:L(o).apiKey,"onUpdate:modelValue":t[2]||=e=>L(o).apiKey=e,configured:L(o).apiKeyConfigured,name:`apiKey`,placeholder:L(i)(`devicesHomeyPlugin.config.apiKey.placeholder`)},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,zE,[l(`p`,BE,z(L(i)(`devicesHomeyPlugin.config.apiKey.permissionsTitle`)),1),l(`p`,null,z(L(i)(`devicesHomeyPlugin.config.apiKey.permissionsIntro`)),1),l(`ul`,VE,[l(`li`,null,[t[5]||=l(`code`,null,`homey.system.readonly`,-1),E(` — `+z(L(i)(`devicesHomeyPlugin.config.apiKey.permissionSystemReadonly`)),1)]),l(`li`,null,[t[6]||=l(`code`,null,`homey.zone.readonly`,-1),E(` — `+z(L(i)(`devicesHomeyPlugin.config.apiKey.permissionZoneReadonly`)),1)]),l(`li`,null,[t[7]||=l(`code`,null,`homey.device.readonly`,-1),E(` — `+z(L(i)(`devicesHomeyPlugin.config.apiKey.permissionDeviceReadonly`)),1)]),l(`li`,null,[t[8]||=l(`code`,null,`homey.device.control`,-1),E(` — `+z(L(i)(`devicesHomeyPlugin.config.apiKey.permissionDeviceControl`)),1)])]),l(`p`,HE,z(L(i)(`devicesHomeyPlugin.config.apiKey.permissionsNote`)),1)])]),_:1},8,[`label`,`error`]),l(`div`,UE,[D(L(Z),{label:L(i)(`devicesHomeyPlugin.config.connectionTimeout`),prop:`connectionTimeout`,error:d.value.connectionTimeout},{default:B(()=>[D(L(Qr),{modelValue:L(o).connectionTimeout,"onUpdate:modelValue":t[3]||=e=>L(o).connectionTimeout=e,min:L(Br),max:L(Xr),step:1e3,class:`w-full`},null,8,[`modelValue`,`min`,`max`])]),_:1},8,[`label`,`error`]),D(L(Z),{label:L(i)(`devicesHomeyPlugin.config.reconciliationInterval`),prop:`reconciliationInterval`,error:d.value.reconciliationInterval},{default:B(()=>[D(L(Qr),{modelValue:L(o).reconciliationInterval,"onUpdate:modelValue":t[4]||=e=>L(o).reconciliationInterval=e,min:L(Kr),max:L(zr),step:3e4,class:`w-full`},null,8,[`modelValue`,`min`,`max`])]),_:1},8,[`label`,`error`])]),D(RE,{"candidate-url":L(o).url,"candidate-api-key":L(o).apiKey},null,8,[`candidate-url`,`candidate-api-key`])]),_:1},8,[`model`,`rules`]))}}),GE=Symbol(`devices_homey_plugin-inventory`),KE=Symbol(`devices_homey_plugin-status`),qE=async(e,t)=>{let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let i=r++,a=e[i];if(a===void 0)return;n[i]=await t(a)}};return await Promise.all(Array.from({length:Math.min(4,e.length)},()=>i())),n},JE=(e,t,n=!1)=>n?`needs_attention`:e.adopted?`already_registered`:e.supportState===`unsupported`?`unsupported`:e.supportState===`conflicted`||!e.available||t?.readyToAdopt===!1?`needs_attention`:`ready`,YE=()=>{let{t:e}=M(),t=Tn(),n=pn(),r=n.getStore(jo),i=n.getStore(GE),a=j(null),o=j({}),s=j(!1),c=j(!1),l=j(!1),u=j({}),d=j(0),f=null,m=null,h=new Set,g=!1,_=t=>{let n=t.channels.length,r=t.channels.reduce((e,t)=>e+t.properties.length,0),i=t.warnings.length;return{render:`tag`,value:e(`devicesHomeyPlugin.wizard.values.mappingSummary`,{channels:n,properties:r}),variant:i>0?`warning`:`success`,...i>0?{tooltip:e(`devicesHomeyPlugin.wizard.values.mappingWarnings`,{count:i})}:{}}},v=p(()=>wa(i.findAll(),[e=>JE(e,i.previews[e.id],u.value[e.id]),e=>e.name],[`asc`,`asc`])),y=p(()=>l.value?v.value.map(t=>{let n=[t.manufacturer,t.model].filter(Boolean).join(` · `)||t.class,a=t.adoptedDeviceId?r.findById(t.adoptedDeviceId):null,o=i.previews[t.id],s=u.value[t.id]===!0,c=JE(t,o,s),l=(a!==null&&(o===void 0||o.validCategories.includes(a.category))?a.category:o?.suggestedCategory)??t.suggestedCategory??null,d=o?.validCategories??[l,t.suggestedCategory].filter(e=>e!=null),f=Array.from(new Set(d)).map(t=>({value:t,label:e(`devicesModule.categories.devices.${t}`)}));return{key:t.id,label:t.name,subLabel:n,identifier:t.id,status:c,statusLabel:t.available?c===`needs_attention`?e(`devicesHomeyPlugin.wizard.statuses.needsAttention`):void 0:e(`devicesHomeyPlugin.wizard.statuses.unavailable`),adoptable:!s&&t.available&&t.supportState===`supported`&&o?.readyToAdopt===!0,selectedByDefault:!1,willUpdate:t.adopted,suggestedName:a?.name??t.name,suggestedCategory:l,categoryOptions:f,cells:{class:{render:`text`,value:t.class},zone:{render:`text`,value:t.zonePath.join(` / `)||e(`devicesHomeyPlugin.wizard.values.noZone`),muted:!t.zonePath.length},capabilities:{render:`tag`,value:e(`devicesHomeyPlugin.wizard.values.capabilities`,{count:t.capabilities.length}),variant:t.supportState===`supported`?`success`:`warning`},...o===void 0?{}:{mapping:_(o)}}}}):[]),b=p(()=>i.adoptionResults.map(E)),x=p(()=>{let t={type:`action`,id:`refresh`,label:e(`devicesHomeyPlugin.wizard.actions.refresh`),icon:`mdi:refresh`,loading:s.value||i.fetching,disabled:s.value||c.value||i.fetching||i.adopting,handler:C};return a.value?[{type:`banner`,id:`inventory-error`,severity:`warning`,title:e(`devicesHomeyPlugin.wizard.errors.inventory`),message:a.value,link:{label:e(`devicesHomeyPlugin.wizard.actions.openConfig`),to:{name:Da.CONFIG_PLUGIN_EDIT,params:{plugin:Jr}}}},t]:[t]});function S(){if(f!==null)return f;if(g)return Promise.resolve();let t=new AbortController;m=t;let n=(async()=>{a.value=null,s.value=!0,l.value=!1,u.value={},i.adoptionResults=[],o.value={};try{await r.fetch(),t.signal.throwIfAborted();let e=await qE((await i.fetch({},t.signal)).filter(e=>e.available&&e.supportState===`supported`),async e=>{try{return await i.preview(e.id,void 0,t.signal),null}catch{return t.signal.throwIfAborted(),e.id}});t.signal.throwIfAborted(),u.value=Object.fromEntries(e.filter(e=>e!==null).map(e=>[e,!0])),l.value=!0,d.value+=1}catch(n){t.signal.aborted||(a.value=n instanceof Error?n.message:e(`devicesHomeyPlugin.wizard.errors.inventory`))}finally{s.value=!1,m===t&&(m=null)}})();return f=n,n.then(()=>{f===n&&(f=null)}),n}async function C(){if(f!==null)return f;i.adoptionResults=[],o.value={},await S()}async function w(){g=!0,m?.abort();for(let e of h)e.abort()}let T=async n=>{if(g)return[];let a=new AbortController;h.add(a),o.value=Object.fromEntries(n.map(e=>[e.key,e.name])),c.value=!0;let s=[];try{let t=await qE(n,async t=>{try{if(Array.from(t.name).length>255)return{failure:{deviceId:t.key,status:kt.failed,message:e(`devicesHomeyPlugin.wizard.errors.nameTooLong`,{max:255})}};let n=i.findById(t.key),o=n?.adoptedDeviceId?r.findById(n.adoptedDeviceId):null;if(n?.adopted&&o===null)return{failure:{deviceId:t.key,status:kt.failed,message:e(`devicesHomeyPlugin.wizard.errors.panelMetadataUnavailable`)}};let s=n?.adopted?await i.preview(t.key,void 0,a.signal):null;return s!==null&&!s.validCategories.includes(t.category)?{failure:{deviceId:t.key,status:kt.failed,message:e(`devicesHomeyPlugin.wizard.errors.mappingChanged`)}}:{request:{deviceId:t.key,name:t.name,deviceCategory:t.category}}}catch(n){return a.signal.throwIfAborted(),{failure:{deviceId:t.key,status:kt.failed,message:n instanceof Error?n.message:e(`devicesHomeyPlugin.wizard.errors.adoption`)}}}}),o=t.flatMap(({request:e})=>e===void 0?[]:[e]);s=t.flatMap(({failure:e})=>e===void 0?[]:[e]);let c=o.length>0?await i.adoptBatch(o,a.signal):[];a.signal.throwIfAborted();let l=new Map([...c,...s].map(e=>[e.deviceId,e]));return i.adoptionResults=n.flatMap(e=>{let t=l.get(e.key);return t===void 0?[]:[t]}),i.adoptionResults.map(E)}catch(r){if(a.signal.aborted)return[];let o=r instanceof Error?r.message:e(`devicesHomeyPlugin.wizard.errors.adoption`);if(t.error(o),i.adoptionResults.length>0||s.length>0){let e=new Map([...i.adoptionResults,...s].map(e=>[e.deviceId,e]));return i.adoptionResults=n.map(t=>e.get(t.key)??{deviceId:t.key,status:kt.failed,message:o}),i.adoptionResults.map(E)}throw r}finally{h.delete(a),c.value=!1}};function E(e){let t=i.findById(e.deviceId);return{key:e.deviceId,name:o.value[e.deviceId]??t?.name??e.deviceId,identifier:e.deviceId,status:e.status,error:e.message??null}}return{title:e(`devicesHomeyPlugin.wizard.title`),subtitle:e(`devicesHomeyPlugin.wizard.subtitle`),breadcrumbLabel:e(`devicesHomeyPlugin.wizard.breadcrumb`),pluginType:Jr,identifierLabel:e(`devicesHomeyPlugin.wizard.columns.identifier`),rows:y,results:b,columns:[{key:`class`,label:e(`devicesHomeyPlugin.wizard.columns.class`),steps:[`discover`],width:140},{key:`zone`,label:e(`devicesHomeyPlugin.wizard.columns.zone`),steps:[`discover`],minWidth:160},{key:`capabilities`,label:e(`devicesHomeyPlugin.wizard.columns.capabilities`),steps:[`discover`],width:140},{key:`mapping`,label:e(`devicesHomeyPlugin.wizard.columns.mapping`),steps:[`confirm`],minWidth:220}],controls:x,sessionKey:p(()=>d.value===0?null:`homey-session-${d.value}`),ready:p(()=>l.value||a.value!==null),busy:p(()=>s.value||c.value||i.fetching||i.adopting),capabilities:{addMore:!0},start:S,adopt:T,restart:C,dispose:w}},XE={"cs-CZ":{config:{local:{title:`Místní připojení Homey`,description:`Připojte se přímo k Homey Self-Hosted Server v místní síti. Zde nastavte URL a API klíč pouze pro zápis; Smart Panel musí mít k Homey přístup.`},enabled:`Povoleno`,url:{label:`URL místního API`,placeholder:`http://homey.local:4859`,required:`Zadejte URL místního API Homey`,invalid:`Zadejte adresu HTTP nebo HTTPS bez vložených přihlašovacích údajů`},apiKey:{label:`Klíč místního API`,placeholder:`Zadejte nový klíč pro nahrazení uloženého klíče`,required:`Před povolením integrace zadejte nebo ponechte klíč API Homey`,invalid:`Zadejte neprázdný klíč API nebo náhradní klíč odeberte`,permissionsTitle:`Požadovaná přístupová pravidla`,permissionsIntro:`Vyhrazenému klíči API Homey udělte tato čtyři oprávnění:`,permissionSystemReadonly:`otestování připojení a identifikace instance Homey`,permissionZoneReadonly:`čtení hierarchie zón zobrazené při přidávání zařízení`,permissionDeviceReadonly:`vyhledání zařízení, čtení funkcí a synchronizace stavu`,permissionDeviceControl:`odesílání příkazů podporovaným zapisovatelným funkcím`,permissionsNote:`Neudělujte oprávnění ke správě zařízení, párování, aplikacím, Flow, uživatelům ani správě systému.`},connectionTimeout:`Časový limit připojení (ms)`,reconciliationInterval:`Interval synchronizace inventáře (ms)`,validation:{connectionTimeoutRequired:`Časový limit připojení je povinný`,connectionTimeoutRange:`Časový limit připojení musí být mezi {min} a {max} ms`,reconciliationIntervalRequired:`Interval synchronizace inventáře je povinný`,reconciliationIntervalRange:`Interval synchronizace inventáře musí být mezi {min} a {max} ms`}},status:{title:`Stav připojení`,description:`Provozní stav hlášený uloženou integrací Homey.`,refresh:`Obnovit`,loadFailed:`Aktuální stav Homey se nepodařilo načíst.`,notAvailable:`Není k dispozici`,fields:{connection:`Připojení`,homey:`Homey`,version:`Verze`,lastSync:`Poslední synchronizace inventáře`,lastEvent:`Poslední událost`,adoptedDevices:`Přidaná zařízení`},states:{stopped:`Zastaveno`,connecting:`Připojování`,connected:`Připojeno`,degraded_polling:`Omezené dotazování`,reconnecting:`Obnovování připojení`,authentication_failed:`Ověření selhalo`,error:`Chyba`},guidance:{authentication:`Nahraďte uložený místní API klíč a připojení znovu otestujte.`,authorization:`Ověřte, že místní API klíč má potřebná oprávnění Homey pro čtení a ovládání.`,timeout:`Zkontrolujte adresu Homey, síťovou cestu a časový limit připojení.`,unavailable:`Zkontrolujte, zda je Homey spuštěno a dostupné ze Smart Panelu.`,protocol:`Ověřte, že nakonfigurovaný koncový bod je kompatibilní místní API Homey.`,validation:`Zkontrolujte URL a nastavení připojení.`,unsupported:`Připojené API Homey tato integrace nepodporuje.`}},connectionTest:{title:`Test připojení`,description:`Otestujte místní připojení uložené na serveru nebo úplnou URL a nový klíč zadané výše.`,saved:`Otestovat uložené nastavení`,candidate:`Otestovat zadanou URL a klíč`,savedUnavailable:`Před testem uložte a dokončete nastavení místního připojení.`,candidateUnavailable:`Pro test neuloženého nastavení zadejte platnou URL i nový klíč API.`,success:`Připojení k Homey bylo úspěšné`,successDescription:`Připojeno k {identity}.`,failure:`Připojení k Homey selhalo`,failureFallback:`Homey test připojení odmítlo.`,requestFailed:`Požadavek na test připojení se nepodařilo dokončit.`},messages:{config:{updated:`Nastavení Homey bylo aktualizováno`,updateFailed:`Nastavení Homey se nepodařilo aktualizovat`}},wizard:{title:`Přidat zařízení Homey`,subtitle:`Vyberte podporovaná zařízení z připojeného Homey`,breadcrumb:`Homey`,columns:{identifier:`ID zařízení Homey`,class:`Třída`,zone:`Zóna`,capabilities:`Funkce`,mapping:`Mapování`},values:{noZone:`Bez zóny`,capabilities:`Počet funkcí: {count}`,mappingSummary:`{channels} kanálů · {properties} vlastností`,mappingWarnings:`Počet upozornění mapování: {count}`},statuses:{unavailable:`V Homey není dostupné`,needsAttention:`Zkontrolujte mapování zařízení Homey`},actions:{refresh:`Obnovit inventář`,openConfig:`Otevřít nastavení Homey`},errors:{inventory:`Inventář Homey se nepodařilo načíst`,adoption:`Vybraná zařízení Homey se nepodařilo přidat`,nameTooLong:`Název zařízení nesmí být delší než {max} znaků`,mappingChanged:`Mapování zařízení se změnilo; obnovte inventář a zkontrolujte jeho kategorii`,panelMetadataUnavailable:`Metadata existujícího zařízení panelu nejsou dostupná; obnovte inventář a zkuste to znovu`}}},"de-DE":{config:{local:{title:`Lokale Homey-Verbindung`,description:`Direkte Verbindung mit Homey Self-Hosted Server im lokalen Netzwerk. URL und API-Schlüssel hier konfigurieren; der Schlüssel wird nach dem Speichern nicht mehr angezeigt.`},enabled:`Aktiviert`,url:{label:`Lokale API-URL`,placeholder:`http://homey.local:4859`,required:`Geben Sie die lokale Homey-API-URL ein`,invalid:`Geben Sie eine HTTP- oder HTTPS-URL ohne eingebettete Zugangsdaten ein`},apiKey:{label:`Lokaler API-Schlüssel`,placeholder:`Neuen Schlüssel eingeben, um den gespeicherten zu ersetzen`,required:`Geben Sie einen Homey-API-Schlüssel ein oder behalten Sie ihn bei, bevor Sie die Integration aktivieren`,invalid:`Geben Sie einen nicht leeren API-Schlüssel ein oder entfernen Sie den Ersatz`,permissionsTitle:`Erforderliche Zugriffsregeln`,permissionsIntro:`Gewähren Sie dem dedizierten Homey-API-Schlüssel diese vier Berechtigungen:`,permissionSystemReadonly:`Verbindung testen und die Homey-Instanz identifizieren`,permissionZoneReadonly:`die bei der Übernahme angezeigte Zonenhierarchie lesen`,permissionDeviceReadonly:`Geräte finden, Fähigkeiten lesen und Zustände synchronisieren`,permissionDeviceControl:`Befehle an unterstützte schreibbare Fähigkeiten senden`,permissionsNote:`Gewähren Sie keinen Zugriff auf Geräteverwaltung, Kopplung, Apps, Flows, Benutzer oder Administration.`},connectionTimeout:`Verbindungszeitlimit (ms)`,reconciliationInterval:`Inventarabgleichsintervall (ms)`,validation:{connectionTimeoutRequired:`Das Verbindungszeitlimit ist erforderlich`,connectionTimeoutRange:`Das Verbindungszeitlimit muss zwischen {min} und {max} ms liegen`,reconciliationIntervalRequired:`Das Inventarabgleichsintervall ist erforderlich`,reconciliationIntervalRange:`Das Inventarabgleichsintervall muss zwischen {min} und {max} ms liegen`}},status:{title:`Verbindungsstatus`,description:`Betriebsstatus der gespeicherten Homey-Integration.`,refresh:`Aktualisieren`,loadFailed:`Der aktuelle Homey-Status konnte nicht geladen werden.`,notAvailable:`Nicht verfügbar`,fields:{connection:`Verbindung`,homey:`Homey`,version:`Version`,lastSync:`Letzter Inventarabgleich`,lastEvent:`Letztes Ereignis`,adoptedDevices:`Übernommene Geräte`},states:{stopped:`Gestoppt`,connecting:`Verbindung wird hergestellt`,connected:`Verbunden`,degraded_polling:`Eingeschränkte Abfrage`,reconnecting:`Verbindung wird wiederhergestellt`,authentication_failed:`Authentifizierung fehlgeschlagen`,error:`Fehler`},guidance:{authentication:`Ersetzen Sie den gespeicherten lokalen API-Schlüssel und testen Sie die Verbindung erneut.`,authorization:`Prüfen Sie, ob der lokale API-Schlüssel die erforderlichen Homey-Lese- und Steuerberechtigungen hat.`,timeout:`Prüfen Sie Homey-Adresse, Netzwerkpfad und Verbindungszeitlimit.`,unavailable:`Prüfen Sie, ob Homey läuft und vom Smart Panel erreichbar ist.`,protocol:`Stellen Sie sicher, dass der konfigurierte Endpunkt eine kompatible lokale Homey-API ist.`,validation:`Prüfen Sie URL und Verbindungseinstellungen.`,unsupported:`Die verbundene Homey-API wird von dieser Integration nicht unterstützt.`}},connectionTest:{title:`Verbindung testen`,description:`Testen Sie die gespeicherte lokale Verbindung oder die vollständige URL und den oben eingegebenen neuen Schlüssel.`,saved:`Gespeicherte Konfiguration testen`,candidate:`Eingegebene URL und Schlüssel testen`,savedUnavailable:`Speichern und vervollständigen Sie die lokale Verbindung vor dem Test.`,candidateUnavailable:`Geben Sie eine gültige URL und einen neuen API-Schlüssel ein, um ungespeicherte Einstellungen zu testen.`,success:`Homey-Verbindung erfolgreich`,successDescription:`Verbunden mit {identity}.`,failure:`Homey-Verbindung fehlgeschlagen`,failureFallback:`Homey hat den Verbindungstest abgelehnt.`,requestFailed:`Die Anfrage für den Verbindungstest konnte nicht abgeschlossen werden.`},messages:{config:{updated:`Homey-Konfiguration wurde aktualisiert`,updateFailed:`Homey-Konfiguration konnte nicht aktualisiert werden`}},wizard:{title:`Homey-Geräte hinzufügen`,subtitle:`Unterstützte Geräte aus dem verbundenen Homey-Inventar auswählen`,breadcrumb:`Homey`,columns:{identifier:`Homey-Geräte-ID`,class:`Klasse`,zone:`Zone`,capabilities:`Funktionen`,mapping:`Zuordnung`},values:{noZone:`Keine Zone`,capabilities:`{count} Funktionen`,mappingSummary:`{channels} Kanäle · {properties} Eigenschaften`,mappingWarnings:`{count} Zuordnungswarnungen`},statuses:{unavailable:`In Homey nicht verfügbar`,needsAttention:`Homey-Gerätezuordnung prüfen`},actions:{refresh:`Inventar aktualisieren`,openConfig:`Homey-Konfiguration öffnen`},errors:{inventory:`Das Homey-Inventar konnte nicht geladen werden`,adoption:`Die ausgewählten Homey-Geräte konnten nicht hinzugefügt werden`,nameTooLong:`Der Gerätename darf höchstens {max} Zeichen lang sein`,mappingChanged:`Die Gerätezuordnung hat sich geändert; aktualisieren Sie das Inventar und prüfen Sie die Kategorie`,panelMetadataUnavailable:`Die Metadaten des vorhandenen Panel-Geräts sind nicht verfügbar; aktualisieren Sie das Inventar und versuchen Sie es erneut`}}},"en-US":{config:{local:{title:`Local Homey connection`,description:`Connect directly to Homey Self-Hosted Server on the local network. Configure the URL and write-only API key here; Smart Panel must be able to reach Homey.`},enabled:`Enabled`,url:{label:`Local API URL`,placeholder:`http://homey.local:4859`,required:`Enter the Homey local API URL`,invalid:`Enter an HTTP or HTTPS URL without embedded credentials`},apiKey:{label:`Local API key`,placeholder:`Enter a new key to replace the configured key`,required:`Enter or keep a Homey API key before enabling the integration`,invalid:`Enter a non-blank API key or remove the replacement`,permissionsTitle:`Required access rules`,permissionsIntro:`Grant these four permissions to the dedicated Homey API key:`,permissionSystemReadonly:`test the connection and identify the Homey instance`,permissionZoneReadonly:`read the zone hierarchy shown during adoption`,permissionDeviceReadonly:`discover devices, read capabilities, and synchronize state`,permissionDeviceControl:`send commands to supported writable capabilities`,permissionsNote:`Do not grant device management, pairing, apps, Flows, users, or administrator access.`},connectionTimeout:`Connection timeout (ms)`,reconciliationInterval:`Inventory reconciliation interval (ms)`,validation:{connectionTimeoutRequired:`Connection timeout is required`,connectionTimeoutRange:`Connection timeout must be between {min} and {max} ms`,reconciliationIntervalRequired:`Inventory reconciliation interval is required`,reconciliationIntervalRange:`Inventory reconciliation interval must be between {min} and {max} ms`}},status:{title:`Connection status`,description:`Operational state reported by the saved Homey integration.`,refresh:`Refresh`,loadFailed:`The current Homey status could not be loaded.`,notAvailable:`Not available`,fields:{connection:`Connection`,homey:`Homey`,version:`Version`,lastSync:`Last inventory sync`,lastEvent:`Last event`,adoptedDevices:`Adopted devices`},states:{stopped:`Stopped`,connecting:`Connecting`,connected:`Connected`,degraded_polling:`Degraded polling`,reconnecting:`Reconnecting`,authentication_failed:`Authentication failed`,error:`Error`},guidance:{authentication:`Replace the saved local API key, then test the connection again.`,authorization:`Confirm that the local API key has the required Homey read and control permissions.`,timeout:`Check the Homey address, network path, and connection timeout.`,unavailable:`Check that Homey is running and reachable from Smart Panel.`,protocol:`Confirm that the configured endpoint is a compatible Homey local API.`,validation:`Review the URL and connection settings.`,unsupported:`The connected Homey API is not supported by this integration.`}},connectionTest:{title:`Test connection`,description:`Test the local connection already saved on the server, or test the complete URL and new key entered above.`,saved:`Test saved configuration`,candidate:`Test entered URL and key`,savedUnavailable:`Save and complete the local connection before testing its configuration.`,candidateUnavailable:`Enter both a valid URL and a new API key to test unsaved settings.`,success:`Homey connection succeeded`,successDescription:`Connected to {identity}.`,failure:`Homey connection failed`,failureFallback:`Homey rejected the connection test.`,requestFailed:`The connection test request could not be completed.`},messages:{config:{updated:`Homey configuration was updated`,updateFailed:`Homey configuration could not be updated`}},wizard:{title:`Add Homey devices`,subtitle:`Select supported devices from the connected Homey inventory`,breadcrumb:`Homey`,columns:{identifier:`Homey device ID`,class:`Class`,zone:`Zone`,capabilities:`Capabilities`,mapping:`Mapping`},values:{noZone:`No zone`,capabilities:`{count} capabilities`,mappingSummary:`{channels} channels · {properties} properties`,mappingWarnings:`{count} mapping warnings`},statuses:{unavailable:`Unavailable in Homey`,needsAttention:`Review the Homey device mapping`},actions:{refresh:`Refresh inventory`,openConfig:`Open Homey configuration`},errors:{inventory:`The Homey inventory could not be loaded`,adoption:`The selected Homey devices could not be adopted`,nameTooLong:`Device name must not exceed {max} characters`,mappingChanged:`The device mapping changed; refresh the inventory and review its category`,panelMetadataUnavailable:`The existing panel device metadata is unavailable; refresh the inventory and try again`}}},"es-ES":{config:{local:{title:`Conexión local de Homey`,description:`Conéctate directamente a Homey Self-Hosted Server en la red local. Configura aquí la URL y la clave API de solo escritura; Smart Panel debe poder acceder a Homey.`},enabled:`Activado`,url:{label:`URL de API local`,placeholder:`http://homey.local:4859`,required:`Introduce la URL de API local de Homey`,invalid:`Introduce una URL HTTP o HTTPS sin credenciales integradas`},apiKey:{label:`Clave de API local`,placeholder:`Introduce una clave nueva para sustituir la configurada`,required:`Introduce o conserva una clave de API de Homey antes de activar la integración`,invalid:`Introduce una clave de API no vacía o elimina el reemplazo`,permissionsTitle:`Reglas de acceso necesarias`,permissionsIntro:`Concede estos cuatro permisos a la clave de API dedicada de Homey:`,permissionSystemReadonly:`probar la conexión e identificar la instancia de Homey`,permissionZoneReadonly:`leer la jerarquía de zonas mostrada durante la adopción`,permissionDeviceReadonly:`descubrir dispositivos, leer capacidades y sincronizar el estado`,permissionDeviceControl:`enviar comandos a las capacidades escribibles compatibles`,permissionsNote:`No concedas acceso a la gestión de dispositivos, emparejamiento, aplicaciones, Flows, usuarios o administración.`},connectionTimeout:`Tiempo de espera de conexión (ms)`,reconciliationInterval:`Intervalo de conciliación del inventario (ms)`,validation:{connectionTimeoutRequired:`El tiempo de espera de conexión es obligatorio`,connectionTimeoutRange:`El tiempo de espera de conexión debe estar entre {min} y {max} ms`,reconciliationIntervalRequired:`El intervalo de conciliación del inventario es obligatorio`,reconciliationIntervalRange:`El intervalo de conciliación del inventario debe estar entre {min} y {max} ms`}},status:{title:`Estado de conexión`,description:`Estado operativo informado por la integración de Homey guardada.`,refresh:`Actualizar`,loadFailed:`No se pudo cargar el estado actual de Homey.`,notAvailable:`No disponible`,fields:{connection:`Conexión`,homey:`Homey`,version:`Versión`,lastSync:`Última sincronización del inventario`,lastEvent:`Último evento`,adoptedDevices:`Dispositivos añadidos`},states:{stopped:`Detenido`,connecting:`Conectando`,connected:`Conectado`,degraded_polling:`Consulta degradada`,reconnecting:`Reconectando`,authentication_failed:`Error de autenticación`,error:`Error`},guidance:{authentication:`Sustituye la clave API local guardada y prueba de nuevo la conexión.`,authorization:`Confirma que la clave API local tenga los permisos de lectura y control necesarios de Homey.`,timeout:`Comprueba la dirección de Homey, la ruta de red y el tiempo de espera de conexión.`,unavailable:`Comprueba que Homey esté en ejecución y sea accesible desde Smart Panel.`,protocol:`Confirma que el endpoint configurado sea una API local de Homey compatible.`,validation:`Revisa la URL y los ajustes de conexión.`,unsupported:`La API de Homey conectada no es compatible con esta integración.`}},connectionTest:{title:`Probar conexión`,description:`Prueba la conexión local guardada en el servidor o la URL completa y la clave nueva introducidas arriba.`,saved:`Probar configuración guardada`,candidate:`Probar URL y clave introducidas`,savedUnavailable:`Guarda y completa la conexión local antes de probarla.`,candidateUnavailable:`Introduce una URL válida y una clave de API nueva para probar ajustes sin guardar.`,success:`Conexión con Homey correcta`,successDescription:`Conectado a {identity}.`,failure:`Falló la conexión con Homey`,failureFallback:`Homey rechazó la prueba de conexión.`,requestFailed:`No se pudo completar la solicitud de prueba de conexión.`},messages:{config:{updated:`La configuración de Homey se actualizó`,updateFailed:`No se pudo actualizar la configuración de Homey`}},wizard:{title:`Añadir dispositivos Homey`,subtitle:`Selecciona dispositivos compatibles del inventario de Homey conectado`,breadcrumb:`Homey`,columns:{identifier:`ID de dispositivo Homey`,class:`Clase`,zone:`Zona`,capabilities:`Capacidades`,mapping:`Mapeo`},values:{noZone:`Sin zona`,capabilities:`{count} capacidades`,mappingSummary:`{channels} canales · {properties} propiedades`,mappingWarnings:`{count} advertencias de mapeo`},statuses:{unavailable:`No disponible en Homey`,needsAttention:`Revisa la asignación del dispositivo Homey`},actions:{refresh:`Actualizar inventario`,openConfig:`Abrir configuración de Homey`},errors:{inventory:`No se pudo cargar el inventario de Homey`,adoption:`No se pudieron añadir los dispositivos Homey seleccionados`,nameTooLong:`El nombre del dispositivo no debe superar los {max} caracteres`,mappingChanged:`La asignación del dispositivo cambió; actualiza el inventario y revisa su categoría`,panelMetadataUnavailable:`Los metadatos del dispositivo del panel no están disponibles; actualiza el inventario e inténtalo de nuevo`}}},"pl-PL":{config:{local:{title:`Lokalne połączenie Homey`,description:`Połącz się bezpośrednio z Homey Self-Hosted Server w sieci lokalnej. Ustaw tutaj adres i klucz API tylko do zapisu; Smart Panel musi mieć dostęp do Homey.`},enabled:`Włączone`,url:{label:`Adres lokalnego API`,placeholder:`http://homey.local:4859`,required:`Wprowadź adres lokalnego API Homey`,invalid:`Wprowadź adres HTTP lub HTTPS bez osadzonych danych logowania`},apiKey:{label:`Klucz lokalnego API`,placeholder:`Wprowadź nowy klucz, aby zastąpić zapisany`,required:`Wprowadź lub zachowaj klucz API Homey przed włączeniem integracji`,invalid:`Wprowadź niepusty klucz API lub usuń jego zamiennik`,permissionsTitle:`Wymagane reguły dostępu`,permissionsIntro:`Nadaj dedykowanemu kluczowi API Homey te cztery uprawnienia:`,permissionSystemReadonly:`testowanie połączenia i identyfikacja instancji Homey`,permissionZoneReadonly:`odczyt hierarchii stref wyświetlanej podczas adopcji`,permissionDeviceReadonly:`wykrywanie urządzeń, odczyt możliwości i synchronizacja stanu`,permissionDeviceControl:`wysyłanie poleceń do obsługiwanych zapisywalnych możliwości`,permissionsNote:`Nie nadawaj dostępu do zarządzania urządzeniami, parowania, aplikacji, Flow, użytkowników ani administracji.`},connectionTimeout:`Limit czasu połączenia (ms)`,reconciliationInterval:`Interwał uzgadniania inwentarza (ms)`,validation:{connectionTimeoutRequired:`Limit czasu połączenia jest wymagany`,connectionTimeoutRange:`Limit czasu połączenia musi wynosić od {min} do {max} ms`,reconciliationIntervalRequired:`Interwał uzgadniania inwentarza jest wymagany`,reconciliationIntervalRange:`Interwał uzgadniania inwentarza musi wynosić od {min} do {max} ms`}},status:{title:`Stan połączenia`,description:`Stan działania zgłaszany przez zapisaną integrację Homey.`,refresh:`Odśwież`,loadFailed:`Nie udało się załadować bieżącego stanu Homey.`,notAvailable:`Niedostępne`,fields:{connection:`Połączenie`,homey:`Homey`,version:`Wersja`,lastSync:`Ostatnia synchronizacja inwentarza`,lastEvent:`Ostatnie zdarzenie`,adoptedDevices:`Dodane urządzenia`},states:{stopped:`Zatrzymano`,connecting:`Łączenie`,connected:`Połączono`,degraded_polling:`Ograniczone odpytywanie`,reconnecting:`Ponowne łączenie`,authentication_failed:`Uwierzytelnianie nie powiodło się`,error:`Błąd`},guidance:{authentication:`Zastąp zapisany lokalny klucz API, a następnie ponownie przetestuj połączenie.`,authorization:`Sprawdź, czy lokalny klucz API ma wymagane uprawnienia Homey do odczytu i sterowania.`,timeout:`Sprawdź adres Homey, trasę sieciową i limit czasu połączenia.`,unavailable:`Sprawdź, czy Homey działa i jest dostępne ze Smart Panelu.`,protocol:`Potwierdź, że skonfigurowany endpoint jest zgodnym lokalnym API Homey.`,validation:`Sprawdź adres URL i ustawienia połączenia.`,unsupported:`Połączone API Homey nie jest obsługiwane przez tę integrację.`}},connectionTest:{title:`Test połączenia`,description:`Przetestuj lokalne połączenie zapisane na serwerze albo pełny adres URL i nowy klucz wpisane powyżej.`,saved:`Testuj zapisaną konfigurację`,candidate:`Testuj wprowadzony URL i klucz`,savedUnavailable:`Zapisz i uzupełnij połączenie lokalne przed testem.`,candidateUnavailable:`Wprowadź prawidłowy adres URL i nowy klucz API, aby przetestować niezapisane ustawienia.`,success:`Połączenie z Homey powiodło się`,successDescription:`Połączono z {identity}.`,failure:`Połączenie z Homey nie powiodło się`,failureFallback:`Homey odrzuciło test połączenia.`,requestFailed:`Nie udało się ukończyć żądania testu połączenia.`},messages:{config:{updated:`Konfiguracja Homey została zaktualizowana`,updateFailed:`Nie udało się zaktualizować konfiguracji Homey`}},wizard:{title:`Dodaj urządzenia Homey`,subtitle:`Wybierz obsługiwane urządzenia z inwentarza połączonego Homey`,breadcrumb:`Homey`,columns:{identifier:`ID urządzenia Homey`,class:`Klasa`,zone:`Strefa`,capabilities:`Możliwości`,mapping:`Mapowanie`},values:{noZone:`Bez strefy`,capabilities:`Możliwości: {count}`,mappingSummary:`{channels} kanałów · {properties} właściwości`,mappingWarnings:`Liczba ostrzeżeń mapowania: {count}`},statuses:{unavailable:`Niedostępne w Homey`,needsAttention:`Sprawdź mapowanie urządzenia Homey`},actions:{refresh:`Odśwież inwentarz`,openConfig:`Otwórz konfigurację Homey`},errors:{inventory:`Nie udało się załadować inwentarza Homey`,adoption:`Nie udało się dodać wybranych urządzeń Homey`,nameTooLong:`Nazwa urządzenia nie może przekraczać {max} znaków`,mappingChanged:`Mapowanie urządzenia uległo zmianie; odśwież inwentarz i sprawdź jego kategorię`,panelMetadataUnavailable:`Metadane istniejącego urządzenia panelu są niedostępne; odśwież inwentarz i spróbuj ponownie`}}},"sk-SK":{config:{local:{title:`Lokálne pripojenie Homey`,description:`Pripojte sa priamo k Homey Self-Hosted Server v lokálnej sieti. Tu nastavte URL a API kľúč iba na zápis; Smart Panel musí mať k Homey prístup.`},enabled:`Povolené`,url:{label:`URL lokálneho API`,placeholder:`http://homey.local:4859`,required:`Zadajte URL lokálneho API Homey`,invalid:`Zadajte adresu HTTP alebo HTTPS bez vložených prihlasovacích údajov`},apiKey:{label:`Kľúč lokálneho API`,placeholder:`Zadajte nový kľúč na nahradenie uloženého kľúča`,required:`Pred povolením integrácie zadajte alebo ponechajte kľúč API Homey`,invalid:`Zadajte neprázdny kľúč API alebo náhradný kľúč odstráňte`,permissionsTitle:`Požadované prístupové pravidlá`,permissionsIntro:`Vyhradenému kľúču API Homey udeľte tieto štyri oprávnenia:`,permissionSystemReadonly:`otestovanie pripojenia a identifikácia inštancie Homey`,permissionZoneReadonly:`čítanie hierarchie zón zobrazenej pri pridávaní zariadení`,permissionDeviceReadonly:`vyhľadanie zariadení, čítanie funkcií a synchronizácia stavu`,permissionDeviceControl:`odosielanie príkazov podporovaným zapisovateľným funkciám`,permissionsNote:`Neudeľujte prístup k správe zariadení, párovaniu, aplikáciám, Flow, používateľom ani správe systému.`},connectionTimeout:`Časový limit pripojenia (ms)`,reconciliationInterval:`Interval synchronizácie inventára (ms)`,validation:{connectionTimeoutRequired:`Časový limit pripojenia je povinný`,connectionTimeoutRange:`Časový limit pripojenia musí byť medzi {min} a {max} ms`,reconciliationIntervalRequired:`Interval synchronizácie inventára je povinný`,reconciliationIntervalRange:`Interval synchronizácie inventára musí byť medzi {min} a {max} ms`}},status:{title:`Stav pripojenia`,description:`Prevádzkový stav hlásený uloženou integráciou Homey.`,refresh:`Obnoviť`,loadFailed:`Aktuálny stav Homey sa nepodarilo načítať.`,notAvailable:`Nie je k dispozícii`,fields:{connection:`Pripojenie`,homey:`Homey`,version:`Verzia`,lastSync:`Posledná synchronizácia inventára`,lastEvent:`Posledná udalosť`,adoptedDevices:`Pridané zariadenia`},states:{stopped:`Zastavené`,connecting:`Pripájanie`,connected:`Pripojené`,degraded_polling:`Obmedzené dopytovanie`,reconnecting:`Obnovovanie pripojenia`,authentication_failed:`Overenie zlyhalo`,error:`Chyba`},guidance:{authentication:`Nahraďte uložený lokálny API kľúč a pripojenie znova otestujte.`,authorization:`Overte, že lokálny API kľúč má potrebné oprávnenia Homey na čítanie a ovládanie.`,timeout:`Skontrolujte adresu Homey, sieťovú cestu a časový limit pripojenia.`,unavailable:`Skontrolujte, či je Homey spustené a dostupné zo Smart Panelu.`,protocol:`Overte, že nakonfigurovaný koncový bod je kompatibilné lokálne API Homey.`,validation:`Skontrolujte URL a nastavenia pripojenia.`,unsupported:`Pripojené API Homey táto integrácia nepodporuje.`}},connectionTest:{title:`Test pripojenia`,description:`Otestujte lokálne pripojenie uložené na serveri alebo úplnú URL a nový kľúč zadané vyššie.`,saved:`Otestovať uložené nastavenie`,candidate:`Otestovať zadanú URL a kľúč`,savedUnavailable:`Pred testom uložte a dokončite nastavenie lokálneho pripojenia.`,candidateUnavailable:`Na test neuloženého nastavenia zadajte platnú URL aj nový kľúč API.`,success:`Pripojenie k Homey bolo úspešné`,successDescription:`Pripojené k {identity}.`,failure:`Pripojenie k Homey zlyhalo`,failureFallback:`Homey test pripojenia odmietlo.`,requestFailed:`Požiadavku na test pripojenia sa nepodarilo dokončiť.`},messages:{config:{updated:`Nastavenie Homey bolo aktualizované`,updateFailed:`Nastavenie Homey sa nepodarilo aktualizovať`}},wizard:{title:`Pridať zariadenia Homey`,subtitle:`Vyberte podporované zariadenia z pripojeného Homey`,breadcrumb:`Homey`,columns:{identifier:`ID zariadenia Homey`,class:`Trieda`,zone:`Zóna`,capabilities:`Funkcie`,mapping:`Mapovanie`},values:{noZone:`Bez zóny`,capabilities:`Počet funkcií: {count}`,mappingSummary:`{channels} kanálov · {properties} vlastností`,mappingWarnings:`Počet upozornení mapovania: {count}`},statuses:{unavailable:`V Homey nie je dostupné`,needsAttention:`Skontrolujte mapovanie zariadenia Homey`},actions:{refresh:`Obnoviť inventár`,openConfig:`Otvoriť nastavenie Homey`},errors:{inventory:`Inventár Homey sa nepodarilo načítať`,adoption:`Vybrané zariadenia Homey sa nepodarilo pridať`,nameTooLong:`Názov zariadenia nesmie byť dlhší ako {max} znakov`,mappingChanged:`Mapovanie zariadenia sa zmenilo; obnovte inventár a skontrolujte jeho kategóriu`,panelMetadataUnavailable:`Metadáta existujúceho zariadenia panela nie sú dostupné; obnovte inventár a skúste to znova`}}}},ZE=os.extend({homeyCapabilityId:X().nullable().optional(),homeyMappingName:X().nullable().optional()}),QE=Zo.and(K({type:Y(Hr)})),$E=rs.and(K({type:Y(Hr)}));Qo.and(K({type:Y(Hr),homey_capability_id:X().nullable().optional(),homey_mapping_name:X().nullable().optional()}));var eD=ns,tD=K({id:X().uuid().optional(),type:Y(Hr),device:X().uuid(),category:G(Jn),identifier:X().trim().nonempty().nullable().optional(),name:X().trim().nonempty(),description:X().trim().nullable().optional(),parent:X().uuid().nullable().optional(),controls:W(es).optional(),properties:W(QE).optional()}),nD=us.and(K({type:Y(Hr)}));Xo.and(K({type:Y(Hr)}));var rD=Wi.extend({url:eE.nullable().optional(),apiKey:X().trim().min(1).nullable().optional(),apiKeyConfigured:J().default(!1),connectionTimeout:q().int().positive(),reconciliationInterval:q().int().positive()}),iD=Zi.and(K({type:Y(Jr),url:eE.nullable().optional(),api_key:X().trim().min(1).nullable().optional(),connection_timeout:q().int().positive().optional(),reconciliation_interval:q().int().positive().optional()}));Ri.and(K({type:Y(Jr),url:eE.nullable().optional(),api_key:X().trim().min(1).nullable().optional(),api_key_configured:J(),connection_timeout:q().int().positive(),reconciliation_interval:q().int().positive()}));var aD=Yo,oD=ss.and(K({type:Y(Hr)})),sD=as.and(K({type:Y(Hr)}));ts.and(K({type:Y(Hr)}));var cD=jn(`devices_homey_plugin-inventory`,()=>{let e=Zn(),t=j({}),n=j({}),r=j([]),i=j(!1),a=j([]),o=j(!1),s=j(!1);return{data:t,previews:n,adoptionResults:r,fetching:i,previewing:a,adopting:o,firstLoad:s,findAll:()=>Object.values(t.value),findById:e=>t.value[e]??null,fetch:async(r={},a)=>{a?.throwIfAborted(),i.value=!0;try{let{data:i,error:o,response:c}=await e.client.GET(`/${Ie}/${Rr}/devices`,{params:{query:{support:r.support,adoption:r.adoption,availability:r.availability,zone_id:r.zoneId,class:r.class,search:r.search}},signal:a});if(a?.throwIfAborted(),i){let e=i.data.map(vE);return t.value=Object.fromEntries(e.map(e=>[e.id,e])),n.value={},s.value=!0,e}throw new iE(Kn(o,`Failed to load the Homey device inventory.`),c.status)}finally{i.value=!1}},get:async n=>{let{data:r,error:i,response:a}=await e.client.GET(`/${Ie}/${Rr}/devices/{deviceId}`,{params:{path:{deviceId:n}}});if(r){let e=vE(r.data);return t.value[e.id]=e,e}throw new iE(Kn(i,`Failed to load the Homey device.`),a.status)},preview:async(t,r,i)=>{i?.throwIfAborted(),a.value.push(t);try{let{data:a,error:o,response:s}=await e.client.POST(`/${Ie}/${Rr}/mapping-preview`,{body:{device_id:t,...r?{device_category:r}:{}},signal:i});if(i?.throwIfAborted(),a)return n.value[t]=yE(a.data);throw new iE(Kn(o,`Failed to preview the Homey device mapping.`),s.status)}finally{a.value=a.value.filter(e=>e!==t)}},adopt:async t=>{o.value=!0;try{let{data:n,error:i,response:a}=await e.client.POST(`/${Ie}/${Rr}/adopt`,{body:{device_id:t.deviceId,...t.deviceCategory?{device_category:t.deviceCategory}:{},...t.name?{name:t.name}:{}}});if(n){let e=bE(n.data);return r.value=[e],e}throw new iE(Kn(i,`Failed to adopt the Homey device.`),a.status)}finally{o.value=!1}},adoptBatch:async(t,n)=>{n?.throwIfAborted(),o.value=!0,r.value=[];let i=[];try{for(let a=0;a<t.length;a+=100){n?.throwIfAborted();let o=t.slice(a,a+100),{data:s,error:c,response:l}=await e.client.POST(`/${Ie}/${Rr}/adopt/batch`,{body:{devices:o.map(e=>({device_id:e.deviceId,...e.deviceCategory?{device_category:e.deviceCategory}:{},...e.name?{name:e.name}:{}}))},signal:n});if(n?.throwIfAborted(),!s)throw new iE(Kn(c,`Failed to adopt the selected Homey devices.`),l.status);i.push(...s.data.results.map(bE)),r.value=[...i]}return i}finally{o.value=!1}}}}),lD=e=>cD(e),uD=Symbol(`FB-Plugin-DevicesHomey`),dD={install:(e,t)=>{let n=ra(e),r=pn(e);for(let[e,n]of Object.entries(XE)){let r=t.i18n.global.getLocaleMessage(e);t.i18n.global.setLocaleMessage(e,(0,Xd.defaultsDeep)(r,{devicesHomeyPlugin:n}))}let i=lD(t.store),a=SE(t.store);e.provide(GE,i),e.provide(KE,a),r.addStore(GE,i),r.addStore(KE,a),n.addPlugin(uD,{type:Jr,source:`com.fastybird.smart-panel.plugin.devices-homey`,name:`Homey`,description:`Connect, adopt, monitor, and control Homey devices from the FastyBird Smart Panel`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:WE},schemas:{pluginConfigSchema:rD,pluginConfigEditFormSchema:nE,pluginConfigUpdateReqSchema:iD},modules:[ka]},{type:Hr,components:{deviceWizardAdapter:YE},schemas:{deviceSchema:aD,deviceCreateReqSchema:oD,deviceUpdateReqSchema:sD,channelSchema:eD,channelCreateReqSchema:tD,channelUpdateReqSchema:nD,channelPropertySchema:ZE,channelPropertyCreateReqSchema:QE,channelPropertyUpdateReqSchema:$E},modules:[qo]}],modules:[qo,ka],isCore:!0})}},fD=k({name:`ReTerminalConfigForm`,__name:`reterminal-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`devicesReTerminalPlugin.messages.config.edited`),error:i(`devicesReTerminalPlugin.messages.config.notEdited`)}}),d=P({"polling.interval":[{required:!0,message:i(`devicesReTerminalPlugin.fields.config.polling.interval.validation.required`),trigger:`change`},{type:`integer`,message:i(`devicesReTerminalPlugin.fields.config.polling.interval.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}]});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`devicesReTerminalPlugin.headings.aboutPluginStatus`),description:L(i)(`devicesReTerminalPlugin.texts.aboutPluginStatus`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesReTerminalPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[2]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(i)(`devicesReTerminalPlugin.headings.aboutPolling`),description:L(i)(`devicesReTerminalPlugin.texts.aboutPolling`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesReTerminalPlugin.fields.config.polling.interval.title`),prop:`polling.interval`,class:`mt-3`},{default:B(()=>[D(L(Qr),{modelValue:L(o).polling.interval,"onUpdate:modelValue":t[1]||=e=>L(o).polling.interval=e,min:1e3,step:1e3,name:`polling.interval`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),pD=`devices-reterminal-plugin`,mD=`devices-reterminal`,hD=class extends Error{},gD=class extends hD{},_D=xs.extend({variant:G(Wn).nullable()}),vD=ws.extend({variant:G(Wn).nullable()}),yD=[dr.terminal],bD=({id:e})=>{let t=pn().getStore(jo),{t:n}=M(),r=Tn(),i=On(),a=j($.NONE),o,s=p(()=>wa(yD,[e=>n(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:n(`devicesModule.categories.devices.${e}`)}))),c=P({...oa(_D),id:e,type:mD,category:dr.terminal,name:``,description:``,variant:null,enabled:!0}),l=gn(f(c)),u=j(void 0),d=j(!1),m=async()=>{if(u.value.clearValidate(),!await u.value.validate())throw new gD(`Form not valid`);let s=_D.safeParse(c);if(!s.success)throw i.error(`Schema validation failed with:`,s.error),new gD(`Failed to validate create device model.`);a.value=$.WORKING;let l=n(`devicesReTerminalPlugin.messages.devices.notCreated`,{device:c.name});try{await t.add({id:e,draft:!1,data:{...s.data,type:mD}})}catch(e){throw a.value=$.ERROR,o=window.setTimeout(h,2e3),e instanceof ps&&e.code===422?r.error(e.message):r.error(l),e}return a.value=$.OK,o=window.setTimeout(h,2e3),r.success(n(`devicesReTerminalPlugin.messages.devices.created`,{device:c.name})),`added`},h=()=>{window.clearTimeout(o),a.value=$.NONE};return F(c,()=>{d.value=!(0,Xd.isEqual)(f(c),l)}),{categoriesOptions:s,model:c,formEl:u,formChanged:d,submit:m,clear:h,formResult:a}},xD=k({name:`ReTerminalDeviceAddForm`,__name:`reterminal-device-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=bD({id:n.id}),f=[{value:Wn.reterminal,label:`reTerminal CM4`},{value:Wn.reterminal_dm,label:`reTerminal DM`}],p=P({name:[{required:!0,message:a(`devicesReTerminalPlugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesReTerminalPlugin.fields.devices.category.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[0]||=e=>L(s).name=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[1]||=e=>L(s).category=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.variant.title`),prop:`variant`},{default:B(()=>[D(L(ei),{modelValue:L(s).variant,"onUpdate:modelValue":t[2]||=e=>L(s).variant=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.variant.placeholder`),name:`variant`},{default:B(()=>[(A(),i(V,null,I(f,e=>D(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[3]||=e=>L(s).description=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[4]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),SD=[dr.terminal],CD=({device:e,messages:t})=>{let n=pn().getStore(jo),{t:r}=M(),i=Tn(),a=On(),o=j($.NONE),s,c=p(()=>wa(SD,[e=>r(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:r(`devicesModule.categories.devices.${e}`)}))),l=P(e),u=gn(f(l)),d=j(void 0),m=j(!1),h=async()=>{let c=e.draft,p=t&&t.error?t.error:e.draft?r(`devicesReTerminalPlugin.messages.devices.notCreated`,{device:e.name}):r(`devicesReTerminalPlugin.messages.devices.notEdited`,{device:e.name});if(d.value.clearValidate(),!await d.value.validate())throw new gs(`Form not valid`);let h=vD.safeParse(l);if(!h.success)throw a.error(`Schema validation failed with:`,h.error),new gD(`Failed to validate edit device model.`);let _={...h.data};(0,Xd.isEqual)(_.roomId,u.roomId)&&delete _.roomId,o.value=$.WORKING;try{await n.edit({id:e.id,data:{..._,type:e.type}}),e.draft&&await n.save({id:e.id})}catch(e){throw o.value=$.ERROR,s=window.setTimeout(g,2e3),e instanceof ps&&e.code===422?i.error(e.message):i.error(p),e}return o.value=$.OK,s=window.setTimeout(g,2e3),c?(i.success(r(t&&t.success?t.success:`devicesReTerminalPlugin.messages.devices.created`,{device:e.name})),`added`):(i.success(r(t&&t.success?t.success:`devicesReTerminalPlugin.messages.devices.edited`,{device:e.name})),m.value=!1,u=gn(f(l)),`saved`)},g=()=>{window.clearTimeout(s),o.value=$.NONE};return F(l,()=>{m.value=!(0,Xd.isEqual)(f(l),u)}),{categoriesOptions:c,model:l,formEl:d,formChanged:m,submit:h,clear:g,formResult:o}},wD=k({name:`ReTerminalDeviceEditForm`,__name:`reterminal-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=CD({device:n.device}),f=[{value:Wn.reterminal,label:`reTerminal CM4`},{value:Wn.reterminal_dm,label:`reTerminal DM`}],p=P({name:[{required:!0,message:a(`devicesReTerminalPlugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesReTerminalPlugin.fields.devices.category.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[1]||=e=>L(s).name=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[2]||=e=>L(s).category=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[3]||=e=>L(s).description=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[4]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesReTerminalPlugin.fields.devices.variant.title`),prop:`variant`},{default:B(()=>[D(L(ei),{modelValue:L(s).variant,"onUpdate:modelValue":t[5]||=e=>L(s).variant=e,placeholder:L(a)(`devicesReTerminalPlugin.fields.devices.variant.placeholder`),name:`variant`},{default:B(()=>[(A(),i(V,null,I(f,e=>D(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),TD={"cs-CZ":{headings:{aboutPluginStatus:`Stav pluginu`,aboutPolling:`Dotazování senzorů`},texts:{aboutPluginStatus:`Povolte nebo zakažte plugin reTerminal. Pokud je zakázán, žádné periferie hardwaru reTerminal nebudou monitorovány ani ovládány.`,aboutPolling:`Nakonfigurujte, jak často plugin dotazuje hardwarové senzory (světlo, akcelerometr, teplota) na aktualizované hodnoty.`},fields:{config:{enabled:{title:`Povolit plugin`},polling:{interval:{title:`Interval dotazování (ms)`,validation:{required:`Interval dotazování je povinný`,number:`Musí být číslo >= 1000`}}}},devices:{id:{title:`ID zařízení`,placeholder:`ID zařízení`},name:{title:`Název zařízení`,placeholder:`Zadejte název zařízení`,validation:{required:`Název zařízení je povinný`}},category:{title:`Kategorie zařízení`,placeholder:`Vyberte kategorii`,validation:{required:`Kategorie zařízení je povinná`}},description:{title:`Popis`,placeholder:`Zadejte popis zařízení (volitelné)`},variant:{title:`Hardwarová varianta`,placeholder:`Vyberte hardwarovou variantu`,validation:{required:`Hardwarová varianta je povinná`}},enabled:{title:`Povoleno`}}},messages:{config:{edited:`Konfigurace pluginu reTerminal byla aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci pluginu reTerminal`},devices:{created:`Zařízení reTerminal '{device}' bylo vytvořeno`,notCreated:`Nepodařilo se vytvořit zařízení reTerminal '{device}'`,edited:`Zařízení reTerminal '{device}' bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat zařízení reTerminal '{device}'`}}},"de-DE":{headings:{aboutPluginStatus:`Plugin-Status`,aboutPolling:`Sensor-Abfrage`},texts:{aboutPluginStatus:`Aktivieren oder deaktivieren Sie das reTerminal-Plugin. Wenn deaktiviert, werden keine reTerminal-Hardwareperipheriegeräte überwacht oder gesteuert.`,aboutPolling:`Konfigurieren Sie, wie oft das Plugin Hardware-Sensoren (Licht, Beschleunigungsmesser, Temperatur) nach aktualisierten Messwerten abfragt.`},fields:{config:{enabled:{title:`Plugin aktivieren`},polling:{interval:{title:`Abfrageintervall (ms)`,validation:{required:`Abfrageintervall ist erforderlich`,number:`Muss eine Zahl >= 1000 sein`}}}},devices:{id:{title:`Geräte-ID`,placeholder:`Geräte-ID`},name:{title:`Gerätename`,placeholder:`Gerätenamen eingeben`,validation:{required:`Gerätename ist erforderlich`}},category:{title:`Gerätekategorie`,placeholder:`Kategorie auswählen`,validation:{required:`Gerätekategorie ist erforderlich`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung eingeben (optional)`},variant:{title:`Hardware-Variante`,placeholder:`Hardware-Variante auswählen`,validation:{required:`Hardware-Variante ist erforderlich`}},enabled:{title:`Aktiviert`}}},messages:{config:{edited:`reTerminal-Plugin-Konfiguration wurde aktualisiert`,notEdited:`Aktualisierung der reTerminal-Plugin-Konfiguration fehlgeschlagen`},devices:{created:`reTerminal-Gerät '{device}' wurde erstellt`,notCreated:`Erstellung des reTerminal-Geräts '{device}' fehlgeschlagen`,edited:`reTerminal-Gerät '{device}' wurde aktualisiert`,notEdited:`Aktualisierung des reTerminal-Geräts '{device}' fehlgeschlagen`}}},"en-US":{headings:{aboutPluginStatus:`Plugin Status`,aboutPolling:`Sensor Polling`},texts:{aboutPluginStatus:`Enable or disable the reTerminal plugin. When disabled, no reTerminal hardware peripherals will be monitored or controlled.`,aboutPolling:`Configure how often the plugin polls hardware sensors (light, accelerometer, temperature) for updated readings.`},fields:{config:{enabled:{title:`Enable Plugin`},polling:{interval:{title:`Polling Interval (ms)`,validation:{required:`Polling interval is required`,number:`Must be a number >= 1000`}}}},devices:{id:{title:`Device ID`,placeholder:`Device ID`},name:{title:`Device Name`,placeholder:`Enter device name`,validation:{required:`Device name is required`}},category:{title:`Device Category`,placeholder:`Select category`,validation:{required:`Device category is required`}},description:{title:`Description`,placeholder:`Enter device description (optional)`},variant:{title:`Hardware Variant`,placeholder:`Select hardware variant`,validation:{required:`Hardware variant is required`}},enabled:{title:`Enabled`}}},messages:{config:{edited:`reTerminal plugin configuration has been updated`,notEdited:`Failed to update reTerminal plugin configuration`},devices:{created:`reTerminal device '{device}' has been created`,notCreated:`Failed to create reTerminal device '{device}'`,edited:`reTerminal device '{device}' has been updated`,notEdited:`Failed to update reTerminal device '{device}'`}}},"es-ES":{headings:{aboutPluginStatus:`Estado del plugin`,aboutPolling:`Sondeo de sensores`},texts:{aboutPluginStatus:`Habilitar o deshabilitar el plugin reTerminal. Cuando está deshabilitado, no se monitorizarán ni controlarán los periféricos de hardware del reTerminal.`,aboutPolling:`Configure con qué frecuencia el plugin sondea los sensores de hardware (luz, acelerómetro, temperatura) para obtener lecturas actualizadas.`},fields:{config:{enabled:{title:`Habilitar plugin`},polling:{interval:{title:`Intervalo de sondeo (ms)`,validation:{required:`El intervalo de sondeo es obligatorio`,number:`Debe ser un número >= 1000`}}}},devices:{id:{title:`ID del dispositivo`,placeholder:`ID del dispositivo`},name:{title:`Nombre del dispositivo`,placeholder:`Introduzca el nombre del dispositivo`,validation:{required:`El nombre del dispositivo es obligatorio`}},category:{title:`Categoría del dispositivo`,placeholder:`Seleccionar categoría`,validation:{required:`La categoría del dispositivo es obligatoria`}},description:{title:`Descripción`,placeholder:`Introduzca la descripción del dispositivo (opcional)`},variant:{title:`Variante de hardware`,placeholder:`Seleccione la variante de hardware`,validation:{required:`La variante de hardware es obligatoria`}},enabled:{title:`Habilitado`}}},messages:{config:{edited:`La configuración del plugin reTerminal ha sido actualizada`,notEdited:`Error al actualizar la configuración del plugin reTerminal`},devices:{created:`El dispositivo reTerminal '{device}' ha sido creado`,notCreated:`Error al crear el dispositivo reTerminal '{device}'`,edited:`El dispositivo reTerminal '{device}' ha sido actualizado`,notEdited:`Error al actualizar el dispositivo reTerminal '{device}'`}}},"pl-PL":{headings:{aboutPluginStatus:`Status wtyczki`,aboutPolling:`Odpytywanie czujnikow`},texts:{aboutPluginStatus:`Wlacz lub wylacz wtyczke reTerminal. Po wylaczeniu zadne peryferia sprzetowe reTerminal nie beda monitorowane ani sterowane.`,aboutPolling:`Skonfiguruj, jak czesto wtyczka odpytuje czujniki sprzetowe (swiatlo, akcelerometr, temperatura) w celu uzyskania zaktualizowanych odczytow.`},fields:{config:{enabled:{title:`Wlacz wtyczke`},polling:{interval:{title:`Interwal odpytywania (ms)`,validation:{required:`Interwal odpytywania jest wymagany`,number:`Musi byc liczba >= 1000`}}}},devices:{id:{title:`ID urzadzenia`,placeholder:`ID urzadzenia`},name:{title:`Nazwa urzadzenia`,placeholder:`Wprowadz nazwe urzadzenia`,validation:{required:`Nazwa urzadzenia jest wymagana`}},category:{title:`Kategoria urzadzenia`,placeholder:`Wybierz kategorie`,validation:{required:`Kategoria urzadzenia jest wymagana`}},description:{title:`Opis`,placeholder:`Wprowadz opis urzadzenia (opcjonalnie)`},variant:{title:`Wariant sprzetowy`,placeholder:`Wybierz wariant sprzetowy`,validation:{required:`Wariant sprzetowy jest wymagany`}},enabled:{title:`Wlaczony`}}},messages:{config:{edited:`Konfiguracja wtyczki reTerminal zostala zaktualizowana`,notEdited:`Nie udalo sie zaktualizowac konfiguracji wtyczki reTerminal`},devices:{created:`Urzadzenie reTerminal '{device}' zostalo utworzone`,notCreated:`Nie udalo sie utworzyc urzadzenia reTerminal '{device}'`,edited:`Urzadzenie reTerminal '{device}' zostalo zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac urzadzenia reTerminal '{device}'`}}},"sk-SK":{headings:{aboutPluginStatus:`Stav pluginu`,aboutPolling:`Dotazovanie senzorov`},texts:{aboutPluginStatus:`Povoľte alebo zakážte plugin reTerminal. Keď je zakázaný, žiadne periférie hardvéru reTerminal nebudú monitorované ani ovládané.`,aboutPolling:`Nakonfigurujte, ako často plugin dotazuje hardvérové senzory (svetlo, akcelerometer, teplota) na aktualizované hodnoty.`},fields:{config:{enabled:{title:`Povoliť plugin`},polling:{interval:{title:`Interval dotazovania (ms)`,validation:{required:`Interval dotazovania je povinný`,number:`Musí byť číslo >= 1000`}}}},devices:{id:{title:`ID zariadenia`,placeholder:`ID zariadenia`},name:{title:`Názov zariadenia`,placeholder:`Zadajte názov zariadenia`,validation:{required:`Názov zariadenia je povinný`}},category:{title:`Kategória zariadenia`,placeholder:`Vyberte kategóriu`,validation:{required:`Kategória zariadenia je povinná`}},description:{title:`Popis`,placeholder:`Zadajte popis zariadenia (voliteľné)`},variant:{title:`Hardvérový variant`,placeholder:`Vyberte hardvérový variant`,validation:{required:`Hardvérový variant je povinný`}},enabled:{title:`Povolené`}}},messages:{config:{edited:`Konfigurácia pluginu reTerminal bola aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu pluginu reTerminal`},devices:{created:`Zariadenie reTerminal '{device}' bolo vytvorené`,notCreated:`Nepodarilo sa vytvoriť zariadenie reTerminal '{device}'`,edited:`Zariadenie reTerminal '{device}' bolo aktualizované`,notEdited:`Nepodarilo sa aktualizovať zariadenie reTerminal '{device}'`}}}},ED=Ki.extend({polling:K({interval:Dt().int().min(1e3)})}),DD=os,OD=Zo.and(K({type:Y(mD)})),kD=rs.and(K({type:Y(mD)}));Qo.and(K({type:Y(mD)}));var AD=ns,jD=cs.and(K({type:Y(mD)})),MD=us.and(K({type:Y(mD)}));Xo.and(K({type:Y(mD)}));var ND=Wi.extend({polling:K({interval:q()})}),PD=Zi.and(K({type:Y(pD),polling:K({interval:q().optional()}).optional()}));Ri.and(K({type:Y(pD),polling:K({interval:q()})}));var FD=Yo.extend({variant:G(Wn).nullable()}),ID=ss.and(K({type:Y(mD),variant:G(Wn).optional()})),LD=as.and(K({type:Y(mD),category:G(dr).optional(),variant:G(Wn).optional()}));ts.and(K({type:Y(mD),variant:G(Wn).optional()}));var RD=Symbol(`FB-Plugin-DevicesReTerminal`),zD={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(TD)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesReTerminalPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(RD,{type:pD,source:`com.fastybird.smart-panel.plugin.devices-reterminal`,name:`reTerminal`,description:`SeeedStudio reTerminal host device hardware peripherals plugin`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:fD},schemas:{pluginConfigSchema:ND,pluginConfigEditFormSchema:ED,pluginConfigUpdateReqSchema:PD},modules:[ka]},{type:mD,components:{deviceAddForm:xD,deviceEditForm:wD},schemas:{deviceSchema:FD,deviceAddFormSchema:_D,deviceEditFormSchema:vD,deviceCreateReqSchema:ID,deviceUpdateReqSchema:LD,channelSchema:AD,channelCreateReqSchema:jD,channelUpdateReqSchema:MD,channelPropertySchema:DD,channelPropertyCreateReqSchema:OD,channelPropertyUpdateReqSchema:kD},modules:[qo]}],modules:[qo,ka],isCore:!0})}},BD=`devices-shelly-ng`,VD=`devices-shelly-ng-plugin`,HD=`devices-shelly-ng`,UD=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesShellyNgException`,this.exception=t}},WD=class extends UD{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesShellyNgApiException`,this.code=t}},GD=class extends UD{constructor(e,t=null){super(e,t),this.name=`DevicesShellyNgValidationException`}},KD=xs.extend({password:X().nullable().optional(),hostname:X().trim().nonempty()}),qD=X().trim().transform(e=>e===``?null:e).nullable().optional(),JD=ws.extend({password:X().nullable().optional(),wifiAddress:qD,ethernetAddress:qD}).refine(e=>e.wifiAddress===void 0&&e.ethernetAddress===void 0||!!e.wifiAddress||!!e.ethernetAddress,{message:`At least one network address (WiFi or Ethernet) is required`,path:[`wifiAddress`]}),YD=K({group:X(),name:X(),models:W(X()),categories:W(G(dr)),components:W(K({type:X(),ids:W(q())})),system:W(K({type:X()}))}),XD=K({hostname:X(),password:X().nullable().optional()}),ZD=K({id:X(),name:X().nullable(),mac:X(),model:X(),firmware:X(),app:X(),profile:X().optional(),authentication:K({domain:X().nullable().optional(),enabled:J()}),discoverable:J(),components:W(K({type:X(),ids:W(q())}))}),QD=K({identifier:X().nullable(),hostname:X(),name:X().nullable(),model:X().nullable(),displayName:X().nullable(),firmware:X().nullable(),status:ir([`checking`,`ready`,`needs_password`,`already_registered`,`unsupported`,`failed`]),source:ir([`mdns`,`manual`]),categories:W(G(dr)),suggestedCategory:G(dr).nullable(),authentication:K({enabled:J(),domain:X().nullable().optional()}),registeredDeviceId:X().nullable(),registeredDeviceName:X().nullable(),registeredDeviceCategory:G(dr).nullable(),error:X().nullable(),lastSeenAt:X()}),$D=K({id:X(),status:ir([`running`,`finished`,`failed`]),startedAt:X(),expiresAt:X(),remainingSeconds:q(),devices:W(QD)}),eO=e=>{let t=[];for(let n of e){let e=YD.safeParse(Un(n));if(!e.success)throw cr.error(`Schema validation failed with:`,e.error),new GD(`Failed to validate received supported device data.`);t.push(e.data)}return t},tO=e=>{let t=ZD.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new GD(`Failed to validate received device info data.`);return t.data},nO=e=>{let t=XD.safeParse(ar(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new GD(`Failed to validate get device info request.`);return t.data},rO=e=>{let t=$D.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new GD(`Failed to validate received discovery session data.`);return t.data},iO=()=>{let{t:e}=M(),t=Zn(),n=Tn(),r=j([]),i=j(!1);return{supportedDevices:r,loaded:i,fetchDevices:async a=>{if(i.value&&!a)return;let{data:o,error:s,response:c}=await t.client.GET(`/${Ie}/${BD}/devices/supported`,{});if(o!==void 0){r.value=eO(o.data),i.value=!0;return}let l=e(`devicesShellyNgPlugin.messages.devices.failedLoadSupportedDevices`);if(c.status===422){let e=l;s&&(e=Kn(s,e)),n.error(e)}else n.error(l)}}},aO=({id:e})=>{let t=pn().getStore(jo),{t:n}=M(),r=Zn(),i=Tn(),a=On(),{supportedDevices:o,fetchDevices:s}=iO(),c=j($.NONE),l,u=p(()=>b.value===null?null:o.value.find(e=>e.models.includes(b.value.model.toUpperCase()))||null),d=p(()=>wa(u.value?.categories||[],[e=>n(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:n(`devicesModule.categories.devices.${e}`)}))),m=P({...oa(KD),id:e,type:HD,category:dr.generic,name:``,description:``,hostname:``,password:``,enabled:!0}),h=gn(f(m)),g=j(void 0),_=j(void 0),v=j(`one`),y=j(!1),b=j(null),x=async o=>{if(o===`one`){if(g.value.clearValidate(),!await g.value.validate())throw new GD(`Form not valid`);c.value=$.WORKING;let e=n(`devicesShellyNgPlugin.messages.devices.notChecked`,{device:m.name});try{let{data:t,error:n,response:i}=await r.client.POST(`/${Ie}/${BD}/devices/info`,{body:{data:nO({hostname:m.hostname,password:m.password})}});if(t!==void 0)return b.value=tO(t.data),v.value=`two`,c.value=$.NONE,`ok`;let a=e;throw n&&(a=Kn(n,a)),new WD(a,i.status)}catch(t){throw c.value=$.ERROR,l=window.setTimeout(S,2e3),t instanceof WD&&(t.code===422||t.code===404)?i.error(t.message):i.error(e),t}}else if(o===`two`){if(_.value.clearValidate(),!await _.value.validate())throw new GD(`Form not valid`);let r=KD.safeParse(m);if(!r.success)throw a.error(`Schema validation failed with:`,r.error),new GD(`Failed to validate create device model.`);c.value=$.WORKING;let o=n(`devicesShellyNgPlugin.messages.devices.notCreated`,{device:m.name});try{let{hostname:n,...i}=r.data;await t.add({id:e,draft:!1,data:{...i,wifiAddress:n,type:HD}})}catch(e){throw c.value=$.ERROR,l=window.setTimeout(S,2e3),e instanceof ps&&e.code===422?i.error(e.message):i.error(o),e}return c.value=$.OK,l=window.setTimeout(S,2e3),i.success(n(`devicesShellyNgPlugin.messages.devices.created`,{device:m.name})),`added`}else throw new GD(`Unknown step`)},S=()=>{window.clearTimeout(l),c.value=$.NONE};return Tr(()=>{s().catch(()=>{})}),F(m,()=>{y.value=!(0,Xd.isEqual)(f(m),h)}),F(()=>m.hostname,(e,t)=>{e!==t&&(b.value=null)}),F(()=>b.value,e=>{m.identifier=e?.id||null}),{categoriesOptions:d,activeStep:v,deviceInfo:b,supportedDevices:o,model:m,stepOneFormEl:g,stepTwoFormEl:_,formChanged:y,submitStep:x,clear:S,formResult:c}},oO={class:`grid grid-cols-[auto_1fr] gap-x-4 my-0`},sO={class:`m-0 inline-block font-bold`},cO={class:`m-0 inline-block font-bold`},lO=k({name:`ShellyNgDeviceAddForm`,__name:`shelly-ng-device-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),c=Tn(),{devices:u,loaded:d,fetchDevices:f}=fs(),{model:m,stepOneFormEl:h,stepTwoFormEl:_,activeStep:v,categoriesOptions:y,supportedDevices:b,formChanged:x,deviceInfo:S,submitStep:C,formResult:w}=aO({id:n.id}),T=p(()=>S.value===null?null:b.value.find(e=>e.models.includes(S.value.model.toUpperCase()))||null),ee=P({hostname:[{required:!0,message:a(`devicesShellyNgPlugin.fields.devices.hostname.validation.required`),trigger:`change`}]}),te=P({name:[{required:!0,message:a(`devicesShellyNgPlugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesShellyNgPlugin.fields.devices.category.validation.required`),trigger:`change`}],hostname:[{required:!0,message:a(`devicesShellyNgPlugin.fields.devices.hostname.validation.required`),trigger:`change`}]}),ne=async()=>{v.value===`one`?C(`one`).catch(()=>{}):v.value===`two`&&C(`two`).catch(()=>{})};return pe(()=>{d.value||f().catch(()=>{})}),F(()=>w.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),v.value===`one`?C(`one`).catch(()=>{}):v.value===`two`&&C(`two`).catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{r(`update:remote-form-reset`,!1),e&&(h.value?.resetFields(),_.value?.resetFields())}),F(()=>x.value,e=>{r(`update:remote-form-changed`,e)}),F(()=>y.value,e=>{e.length>0&&e[0]&&(m.category=e[0].value)}),F(()=>S.value,e=>{if(e===null)return;m.name=e.name||m.name;let t=u.value.find(t=>t.identifier===e.id&&t.type===`devices-shelly-ng`);t!==void 0&&(c.success(a(`devicesShellyNgPlugin.messages.devices.exists`,{device:t.name})),rn.push({name:Jo.DEVICES_EDIT,params:{id:t.id},state:{prefills:{hostname:m.hostname,password:m.password}}}))}),(e,t)=>(A(),i(V,null,[D(L(ui),{modelValue:L(v),"onUpdate:modelValue":t[6]||=e=>he(v)?v.value=e:null,accordion:``,"expand-icon-position":`left`},{default:B(()=>[D(L(li),{title:L(a)(`devicesShellyNgPlugin.headings.device.deviceConnection`),name:`one`},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:connection`})]),_:1})]),default:B(()=>[D(L(Ir),{ref_key:`stepOneFormEl`,ref:h,model:L(m),rules:ee,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.hostname.title`),prop:`hostname`},{default:B(()=>[D(L(U),{modelValue:L(m).hostname,"onUpdate:modelValue":t[0]||=e=>L(m).hostname=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.hostname.placeholder`),name:`hostname`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.password.title`),prop:`password`,class:`mb-0!`},{default:B(()=>[D(L(U),{modelValue:L(m).password,"onUpdate:modelValue":t[1]||=e=>L(m).password=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.password.placeholder`),name:`password`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`])]),_:1},8,[`title`]),D(L(li),{title:L(a)(`devicesShellyNgPlugin.headings.device.information`),name:`two`,disabled:L(S)===null},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:devices`})]),_:1})]),default:B(()=>[D(L(Q),{type:T.value?`success`:`error`,title:T.value?L(a)(`devicesShellyNgPlugin.headings.device.supported`):L(a)(`devicesShellyNgPlugin.headings.device.notSupported`),closable:!1,"show-icon":``},{default:B(()=>[l(`dl`,oO,[l(`dt`,null,z(L(a)(`devicesShellyNgPlugin.headings.device.model`))+`:`,1),l(`dd`,sO,z(T.value===null?`unknown`:T.value.name),1),l(`dt`,null,z(L(a)(`devicesShellyNgPlugin.headings.device.firmware`))+`:`,1),l(`dd`,cO,z(L(S)?.firmware),1)])]),_:1},8,[`type`,`title`]),D(L(Ir),{ref_key:`stepTwoFormEl`,ref:_,model:L(m),rules:te,"label-position":`top`,"status-icon":``,class:`mt-4`},{default:B(()=>[D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(m).name,"onUpdate:modelValue":t[2]||=e=>L(m).name=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(m).category,"onUpdate:modelValue":t[3]||=e=>L(m).category=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(y),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(m).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(m).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(m).description,"onUpdate:modelValue":t[4]||=e=>L(m).description=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(m).enabled,"onUpdate:modelValue":t[5]||=e=>L(m).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`])]),_:1},8,[`title`,`disabled`])]),_:1},8,[`modelValue`]),L(v)===`one`?(A(),O(o,{key:0,defer:``,to:`#${L(sa)}`},[D(L(Oe),{loading:L(w)===L($).WORKING,disabled:L(w)!==L($).NONE,type:`primary`,onClick:ne},De({default:B(()=>[E(` `+z(L(a)(`devicesShellyNgPlugin.buttons.next.title`)),1)]),_:2},[L(w)===L($).ERROR?{name:`icon`,fn:B(()=>[D(L(s),{icon:`mdi:cross-circle`})]),key:`0`}:void 0]),1032,[`loading`,`disabled`])],8,[`to`])):R(``,!0)],64))}}),uO=e=>({wifi:e.addresses?.find(e=>e.interfaceType===`wifi`)?.address??null,ethernet:e.addresses?.find(e=>e.interfaceType===`ethernet`)?.address??null}),dO=({device:e,messages:t})=>{let n=pn(),r=n.getStore(jo),i=n.getStore(No),a=n.getStore(Mo),{t:o}=M(),s=Tn(),c=On(),{supportedDevices:l,fetchDevices:u}=iO(),d=j($.NONE),m,h=p(()=>{let t=i.findForDevice(e.id).find(e=>e.category===Jn.device_information);if(t!==void 0){let e=a.findForChannel(t.id).find(e=>e.category===rr.model)?.value?.value;return typeof e==`string`?e:void 0}}),g=p(()=>{let e=h.value;return typeof e==`string`&&l.value.find(t=>t.models.includes(e.toUpperCase()))||null}),_=p(()=>wa(g.value?.categories||[],[e=>o(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:o(`devicesModule.categories.devices.${e}`)}))),v=uO(e),y=p(()=>e.hasEthernet??!1),b=P({...e,wifiAddress:v.wifi,ethernetAddress:v.ethernet}),x=gn(f(b)),S=j(void 0),C=j(!1),w=async()=>{let n=e.draft,i=t&&t.error?t.error:e.draft?o(`devicesShellyNgPlugin.messages.devices.notCreated`,{device:e.name}):o(`devicesShellyNgPlugin.messages.devices.notEdited`,{device:e.name});if(S.value.clearValidate(),!await S.value.validate())throw new gs(`Form not valid`);let a=JD.safeParse(b);if(!a.success)throw c.error(`Schema validation failed with:`,a.error),new GD(`Failed to validate edit device model.`);d.value=$.WORKING;try{let{wifiAddress:t,ethernetAddress:n,roomId:i,...o}=a.data,s={};t!==x.wifiAddress&&(s.wifiAddress=t??null),n!==x.ethernetAddress&&(s.ethernetAddress=n??null),i!==x.roomId&&(s.roomId=i??null),await r.edit({id:e.id,data:{...o,...s,type:e.type}}),e.draft&&await r.save({id:e.id})}catch(e){throw d.value=$.ERROR,m=window.setTimeout(T,2e3),e instanceof ps&&e.code===422?s.error(e.message):s.error(i),e}return d.value=$.OK,m=window.setTimeout(T,2e3),n?(s.success(o(t&&t.success?t.success:`devicesShellyNgPlugin.messages.devices.created`,{device:e.name})),`added`):(s.success(o(t&&t.success?t.success:`devicesShellyNgPlugin.messages.devices.edited`,{device:e.name})),C.value=!1,x=gn(f(b)),`saved`)},T=()=>{window.clearTimeout(m),d.value=$.NONE};return Tr(()=>{u().catch(()=>{})}),F(b,()=>{C.value=!(0,Xd.isEqual)(f(b),x)}),{categoriesOptions:_,hasEthernet:y,supportedDevices:l,model:b,formEl:S,formChanged:C,submit:w,clear:T,formResult:d}},fO=k({name:`ShellyNgDeviceEditForm`,__name:`shelly-ng-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,hasEthernet:s,model:c,formEl:l,formChanged:u,submit:d,formResult:f}=dO({device:n.device}),p=window.history.state?.prefills??null;if(p){p.hostname&&!c.wifiAddress&&(c.wifiAddress=p.hostname),p.password&&(c.password=p.password);let e={...window.history.state};delete e.prefills,history.replaceState(e,``)}let m=P({name:[{required:!0,message:a(`devicesShellyNgPlugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesShellyNgPlugin.fields.devices.category.validation.required`),trigger:`change`}]});return F(()=>f.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),d().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!l.value)return;l.value.resetFields()}}),F(()=>u.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:l,model:L(c),rules:m,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(c).id,"onUpdate:modelValue":t[0]||=e=>L(c).id=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(c).name,"onUpdate:modelValue":t[1]||=e=>L(c).name=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(c).category,"onUpdate:modelValue":t[2]||=e=>L(c).category=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(c).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(c).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(c).description,"onUpdate:modelValue":t[3]||=e=>L(c).description=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(c).enabled,"onUpdate:modelValue":t[4]||=e=>L(c).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),L(s)?(A(),O(L(Z),{key:1,label:L(a)(`devicesShellyNgPlugin.fields.devices.ethernetAddress.title`),prop:`ethernetAddress`},{default:B(()=>[D(L(U),{modelValue:L(c).ethernetAddress,"onUpdate:modelValue":t[5]||=e=>L(c).ethernetAddress=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.ethernetAddress.placeholder`),name:`ethernetAddress`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.wifiAddress.title`),prop:`wifiAddress`},{default:B(()=>[D(L(U),{modelValue:L(c).wifiAddress,"onUpdate:modelValue":t[6]||=e=>L(c).wifiAddress=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.wifiAddress.placeholder`),name:`wifiAddress`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.devices.password.title`),prop:`password`},{default:B(()=>[D(L(U),{modelValue:L(c).password,"onUpdate:modelValue":t[7]||=e=>L(c).password=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.devices.password.placeholder`),name:`password`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),pO=k({name:`ShellyNgConfigForm`,__name:`shelly-ng-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`devicesShellyNgPlugin.messages.config.edited`),error:a(`devicesShellyNgPlugin.messages.config.notEdited`)}}),f=P({"websockets.requestTimeout":[{required:!0,message:a(`devicesShellyNgPlugin.fields.config.websockets.requestTimeout.validation.required`),trigger:`change`},{type:`integer`,message:a(`devicesShellyNgPlugin.fields.config.websockets.requestTimeout.validation.number`),validator:(e,t)=>t>=1,trigger:`change`}],"websockets.pingInterval":[{required:!0,message:a(`devicesShellyNgPlugin.fields.config.websockets.pingInterval.validation.required`),trigger:`change`},{type:`integer`,message:a(`devicesShellyNgPlugin.fields.config.websockets.pingInterval.validation.number`),validator:(e,t)=>t>=0,trigger:`change`}],"websockets.reconnectInterval":[{required:!0,message:a(`devicesShellyNgPlugin.fields.config.websockets.reconnectInterval.validation.required`),trigger:`change`},{type:`array`,min:1,defaultField:{type:`integer`,message:a(`devicesShellyNgPlugin.fields.config.websockets.reconnectInterval.validation.number`),validator:(e,t)=>t>=1},message:a(`devicesShellyNgPlugin.fields.config.websockets.reconnectInterval.validation.array`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`devicesShellyNgPlugin.headings.aboutPluginStatus`),description:L(a)(`devicesShellyNgPlugin.texts.aboutPluginStatus`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[6]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(a)(`devicesShellyNgPlugin.headings.aboutMdns`),description:L(a)(`devicesShellyNgPlugin.texts.aboutMdns`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.config.mdns.enabled.title`),prop:`mdns.enabled`,class:`mt-3`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).mdns.enabled,"onUpdate:modelValue":t[1]||=e=>L(s).mdns.enabled=e,name:`mdnsEnabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.config.mdns.interface.title`),prop:`mdns.interface`},{default:B(()=>[D(L(U),{modelValue:L(s).mdns.interface,"onUpdate:modelValue":t[2]||=e=>L(s).mdns.interface=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.config.mdns.interface.placeholder`),name:`mdnsInterface`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),t[7]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(a)(`devicesShellyNgPlugin.headings.aboutWebsockets`),description:L(a)(`devicesShellyNgPlugin.texts.aboutWebsockets`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.config.websockets.requestTimeout.title`),prop:`websockets.requestTimeout`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(s).websockets.requestTimeout,"onUpdate:modelValue":t[3]||=e=>L(s).websockets.requestTimeout=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.config.websockets.requestTimeout.placeholder`),name:`websockets.requestTimeout`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.config.websockets.pingInterval.title`),prop:`websockets.pingInterval`},{default:B(()=>[D(L(U),{modelValue:L(s).websockets.pingInterval,"onUpdate:modelValue":t[4]||=e=>L(s).websockets.pingInterval=e,placeholder:L(a)(`devicesShellyNgPlugin.fields.config.websockets.pingInterval.placeholder`),name:`websockets.pingInterval`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyNgPlugin.fields.config.websockets.reconnectInterval.title`),prop:`websockets.reconnectInterval`},{default:B(()=>[D(L(ei),{modelValue:L(s).websockets.reconnectInterval,"onUpdate:modelValue":t[5]||=e=>L(s).websockets.reconnectInterval=e,name:`websockets.reconnectInterval`,multiple:``,filterable:``,"allow-create":``,"default-first-option":``,"reserve-keyword":!1,placeholder:L(a)(`devicesShellyNgPlugin.fields.config.websockets.reconnectInterval.placeholder`)},{default:B(()=>[(A(!0),i(V,null,I(L(s).websockets.reconnectInterval,e=>(A(),O(L(ti),{key:e,label:e,value:Number(e)},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),mO=e=>e===`ready`||e===`already_registered`,hO=e=>e===`needs_password`?`needs_credentials`:e,gO=e=>e.registeredDeviceName||e.name||e.displayName||e.hostname,_O=1e3,vO=3e4,yO=()=>{let{t:e}=M(),t=Zn(),n=pn(),r=Tn(),i=n.getStore(jo),a=j(null),o=j($.NONE),s=j([]),c=P({}),l=null,u=0,d=_O,f=j(null),m=j(0),h=j(0),g=on({interval:1e3}),_=p(()=>wa(a.value?.devices??[],[e=>+!mO(e.status),e=>e.hostname],[`asc`,`asc`])),v=p(()=>{if(a.value===null)return 0;if(a.value.status!==`running`)return 100;if(f.value===null||h.value===0)return 0;let e=Math.max(0,g.value.getTime()-f.value),t=Math.max(0,m.value-e),n=h.value-t;return Math.min(100,Math.max(0,Math.round(n/h.value*100)))}),y=t=>wa(t.categories,[t=>e(`devicesModule.categories.devices.${t}`)],[`asc`]).map(t=>({value:t,label:e(`devicesModule.categories.devices.${t}`)})),b=p(()=>_.value.map(e=>({key:e.hostname,label:e.registeredDeviceName||e.name||e.displayName||e.model||e.hostname,subLabel:e.displayName??e.model,identifier:e.hostname,status:hO(e.status),adoptable:mO(e.status),willUpdate:e.status===`already_registered`,suggestedName:gO(e),suggestedCategory:e.registeredDeviceCategory??e.suggestedCategory,categoryOptions:y(e)}))),x=p(()=>s.value.map(e=>({key:e.hostname,name:e.name,identifier:e.hostname,status:e.status,error:e.error}))),S=()=>{w();let e=u;l=window.setTimeout(async()=>{l=null;try{await te(),d=_O}catch(e){if(e instanceof WD&&e.code===404)return;d=Math.min(d*2,vO)}u===e&&(a.value===null||a.value.status!==`running`||S())},d)},C=()=>{d=_O,S()},w=()=>{l!==null&&(window.clearTimeout(l),l=null)},T=e=>{a.value=e,f.value=Date.now(),m.value=e.remainingSeconds*1e3,h.value=Math.max(1,new Date(e.expiresAt).getTime()-new Date(e.startedAt).getTime()),e.status!==`running`&&w()},E=()=>{for(let e of Object.keys(c))delete c[e];s.value=[]},ee=()=>{a.value!==null&&a.value.status===`running`&&C()},D=async()=>{o.value=$.WORKING,w(),u+=1;let n=u,i;try{i=await t.client.POST(`/${Ie}/${BD}/devices/discovery`)}catch(e){throw u===n&&(o.value=$.ERROR,ee()),e}let{data:a,error:s,response:c}=i;if(u!==n)return;if(a!==void 0){E(),T(rO(a.data)),o.value=$.NONE,C();return}let l=s?Kn(s,e(`devicesShellyNgPlugin.messages.wizard.discoveryNotStarted`)):e(`devicesShellyNgPlugin.messages.wizard.discoveryNotStarted`);throw o.value=$.ERROR,r.error(l),ee(),new WD(l,c.status)},te=async()=>{if(a.value===null)return;let n=u,{data:r,error:i,response:o}=await t.client.GET(`/${Ie}/${BD}/devices/discovery/{id}`,{params:{path:{id:a.value.id}}});if(u===n){if(r!==void 0){T(rO(r.data));return}throw new WD(i?Kn(i,e(`devicesShellyNgPlugin.messages.wizard.discoveryNotLoaded`)):e(`devicesShellyNgPlugin.messages.wizard.discoveryNotLoaded`),o.status)}},ne=async n=>{let i=(n.hostname??``).trim();if(i.length===0){let t=e(`devicesShellyNgPlugin.fields.devices.hostname.validation.required`);throw r.error(t),new GD(t)}let s=(n.password??``).trim()||null;if(a.value===null&&await D(),a.value===null)return;o.value=$.WORKING;let{data:l,error:u,response:d}=await t.client.POST(`/${Ie}/${BD}/devices/discovery/{id}/manual`,{params:{path:{id:a.value.id}},body:{data:nO({hostname:i,password:s})}});if(l!==void 0){c[i]=s,T(rO(l.data)),o.value=$.NONE;return}let f=u?Kn(u,e(`devicesShellyNgPlugin.messages.wizard.manualNotAdded`)):e(`devicesShellyNgPlugin.messages.wizard.manualNotAdded`);throw o.value=$.ERROR,r.error(f),new WD(f,d.status)},re=async()=>{try{await D()}catch{}},O=p(()=>[{type:`banner`,id:`hint`,severity:`info`,title:e(`devicesShellyNgPlugin.texts.wizard.discovery`)},{type:`progress`,id:`scan`,label:e(`devicesShellyNgPlugin.texts.wizard.scanStatus`,{count:_.value.length}),percentage:v.value,state:a.value?.status===`finished`?`success`:void 0,visible:!0},{type:`action`,id:`restart-scan`,label:e(`devicesShellyNgPlugin.buttons.wizard.restart.title`),icon:`mdi:radar`,loading:o.value===$.WORKING,handler:re},{type:`form`,id:`manual`,fields:[{key:`hostname`,label:e(`devicesShellyNgPlugin.fields.devices.hostname.title`),placeholder:e(`devicesShellyNgPlugin.fields.devices.hostname.placeholder`)},{key:`password`,label:e(`devicesShellyNgPlugin.fields.devices.password.title`),placeholder:e(`devicesShellyNgPlugin.fields.devices.password.placeholder`),secret:!0}],submitLabel:e(`devicesShellyNgPlugin.buttons.wizard.addManual.title`),submitIcon:`mdi:plus`,submitDisabled:o.value===$.WORKING,loading:o.value===$.WORKING,handler:ne}]);return{title:e(`devicesShellyNgPlugin.headings.wizard.title`),subtitle:e(`devicesShellyNgPlugin.subHeadings.wizard`),breadcrumbLabel:e(`devicesShellyNgPlugin.breadcrumbs.wizard`),pluginType:VD,identifierLabel:e(`devicesShellyNgPlugin.fields.devices.hostname.title`),rows:b,results:x,columns:[],controls:O,sessionKey:p(()=>a.value?.id??null),ready:p(()=>!0),busy:p(()=>o.value===$.WORKING),capabilities:{addMore:!1},start:D,adopt:async n=>{o.value=$.WORKING;let r=_.value.slice();if(a.value!==null)try{await te()}catch{}let l=[],u=[];for(let t of n){let n=_.value.find(e=>e.hostname===t.key)??r.find(e=>e.hostname===t.key);if(n===void 0||n.identifier===null){l.push({hostname:t.key,name:t.name,status:`failed`,error:e(`devicesShellyNgPlugin.messages.wizard.adoptionNotCreated`)});continue}u.push({identifier:n.identifier,hostname:n.hostname,name:t.name.trim()||gO(n),category:t.category,password:c[n.hostname]??null})}if(u.length>0)try{let{data:n,error:r,response:a}=await t.client.POST(`/${Ie}/${BD}/devices/adopt`,{body:{data:{devices:u}}});if(n===void 0||!a.ok)throw new WD(r?Kn(r,e(`devicesShellyNgPlugin.messages.wizard.adoptionNotCreated`)):e(`devicesShellyNgPlugin.messages.wizard.adoptionNotCreated`),a.status);for(let e of n.data)l.push({hostname:e.hostname,name:e.name,status:e.status,error:e.error});await i.fetch()}catch(t){let n=t instanceof Error?t.message:e(`devicesShellyNgPlugin.messages.wizard.adoptionNotCreated`);for(let e of u)l.push({hostname:e.hostname,name:e.name,status:`failed`,error:n})}return s.value=l,o.value=l.some(e=>e.status===`failed`)?$.ERROR:$.OK,x.value},dispose:async()=>{w(),u+=1}}},bO={"cs-CZ":{headings:{aboutPluginStatus:`Stav pluginu`,aboutMdns:`Nastavení mDNS`,aboutWebsockets:`Nastavení WebSocket`,device:{deviceConnection:`Připojení zařízení`,information:`Informace o zařízení`,supported:`Gratulujeme! Zařízení je podporováno`,notSupported:`Je nám líto, vaše zařízení není podporováno`,model:`Model zařízení`,firmware:`Firmware`},wizard:{title:`Průvodce vyhledáním Shelly NG`}},subHeadings:{wizard:`Najděte a adoptujte zařízení Shelly NG ve vaší síti`},breadcrumbs:{wizard:`průvodce vyhledáním`},fields:{devices:{id:{title:`Interní identifikátor`,placeholder:`ID zařízení`},category:{title:`Kategorie`,placeholder:`Kategorie zařízení`,validation:{required:`Vyberte prosím kategorii zařízení`}},name:{title:`Název`,placeholder:`Název zařízení`,validation:{required:`Vyplňte prosím název zařízení`}},description:{title:`Popis`,placeholder:`Popis zařízení`},enabled:{title:`Povoleno`,placeholder:`Povolit nebo zakázat zařízení`},password:{title:`Heslo administrátora`,placeholder:`Zadejte heslo zařízení, pokud je chráněno`},hostname:{title:`Název hostitele zařízení`,placeholder:`Síťový název nebo IP adresa zařízení`,validation:{required:`Vyplňte prosím název hostitele nebo IP adresu zařízení`}},ethernetAddress:{title:`Ethernetová adresa`,placeholder:`IP adresa Ethernet (např. 192.168.1.100)`},wifiAddress:{title:`Wi-Fi adresa`,placeholder:`Wi-Fi IP adresa (např. 192.168.1.101)`}},config:{enabled:{title:`Povoleno`},mdns:{enabled:{title:`Vyhledávání povoleno`},interface:{title:`Rozhraní`,placeholder:`Síťové rozhraní k použití. Pokud není zadáno, budou použita všechna dostupná rozhraní.`}},websockets:{requestTimeout:{title:`Časový limit požadavku`,placeholder:`Čas v sekundách pro čekání na odpověď před přerušením požadavku.`,validation:{required:`Vyplňte prosím časový limit požadavku`,number:`Časový limit požadavku musí být číslo`}},pingInterval:{title:`Interval pingu`,placeholder:`Interval v sekundách, ve kterém se odesílají ping požadavky pro ověření otevřeného spojení. Nastavte na 0 pro zakázání.`,validation:{required:`Vyplňte prosím interval pingu`,number:`Interval pingu musí být číslo`}},reconnectInterval:{title:`Interval opětovného připojení`,placeholder:`Interval v sekundách, ve kterém by měl být proveden pokus o připojení po uzavření socketu.`,validation:{required:`Vyplňte prosím interval opětovného připojení`,number:`Interval opětovného připojení musí být číslo`,array:`Interval opětovného připojení musí být pole čísel`}}}}},messages:{config:{edited:`Změny uloženy! Konfigurace pluginu Shelly Next Generation byla aktualizována.`,notEdited:`Něco se pokazilo. Aktualizace konfigurace pluginu Shelly Next Generation nebyla úspěšná.`},devices:{exists:`Zařízení se zadaným názvem hostitele a heslem je již registrováno v systému.`,created:`Nové zařízení Shelly Next-Generation bylo úspěšně přidáno.`,notCreated:`Něco se pokazilo. Nepodařilo se vytvořit zařízení Shelly Next-Generation.`,notChecked:`Něco se pokazilo. Nepodařilo se načíst informace o zařízení. Zkontrolujte název hostitele nebo heslo zařízení.`,edited:`Změny uloženy! Zařízení Shelly Next-Generation: {device} bylo aktualizováno.`,notEdited:`Něco se pokazilo. Aktualizace zařízení Shelly Next-Generation nebyla úspěšná.`,failedLoadSupportedDevices:`Něco se pokazilo. Nepodařilo se načíst podporovaná zařízení pluginu.`},wizard:{discoveryNotStarted:`Něco se pokazilo. Vyhledávání Shelly se nepodařilo spustit.`,discoveryNotLoaded:`Něco se pokazilo. Vyhledávání Shelly se nepodařilo načíst.`,manualNotAdded:`Něco se pokazilo. Ruční vyhledání zařízení Shelly se nepodařilo přidat.`,adoptionNotCreated:`Něco se pokazilo. Zařízení Shelly se nepodařilo adoptovat.`}},texts:{aboutPluginStatus:`Povolte nebo zakažte integraci zařízení Shelly Next Generation. Pokud je povolena, zařízení Shelly mohou být vyhledána a ovládána prostřednictvím Smart Panelu.`,aboutMdns:`Nakonfigurujte, jak plugin vyhledává zařízení Shelly ve vaší lokální síti pomocí Multicast DNS (mDNS). To umožňuje automatickou detekci bez nutnosti ručního zadávání IP adres.`,aboutWebsockets:`Spravujte parametry WebSocket připojení pro zařízení Shelly. Tato nastavení řídí stabilitu komunikace, zpracování požadavků a chování opětovného připojení.`,wizard:{discovery:`Průvodce vyhledá zařízení Shelly NG v lokální síti a přijímá také ručně zadaný hostname nebo IP adresu.`,scanStatus:`Nalezeno zařízení: {count}`}},buttons:{next:{title:`Další`},wizard:{restart:{title:`Vyhledat znovu`},addManual:{title:`Přidat`}}}},"de-DE":{headings:{aboutPluginStatus:`Plugin-Status`,aboutMdns:`MDNS-Einstellungen`,aboutWebsockets:`WebSocket-Einstellungen`,device:{deviceConnection:`Geräteverbindung`,information:`Geräteinformationen`,supported:`Glückwunsch! Gerät wird unterstützt`,notSupported:`Leider wird Ihr Gerät nicht unterstützt`,model:`Modell`,firmware:`Firmware`},wizard:{title:`Shelly NG Discovery-Assistent`}},subHeadings:{wizard:`Finden und übernehmen Sie Shelly NG-Geräte in Ihrem Netzwerk`},breadcrumbs:{wizard:`Discovery-Assistent`},fields:{devices:{id:{title:`Interner Bezeichner`,placeholder:`Geräte-ID`},category:{title:`Kategorie`,placeholder:`Gerätekategorie`,validation:{required:`Bitte wählen Sie eine Gerätekategorie`}},name:{title:`Name`,placeholder:`Gerätename`,validation:{required:`Bitte geben Sie den Gerätenamen ein`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung`},enabled:{title:`Aktiviert`,placeholder:`Gerät aktivieren oder deaktivieren`},password:{title:`Admin-Passwort`,placeholder:`Gerätepasswort eingeben, falls das Gerät geschützt ist`},hostname:{title:`Geräte-Hostname`,placeholder:`Netzwerkname oder IP-Adresse des Geräts`,validation:{required:`Bitte geben Sie den Geräte-Hostname oder die IP-Adresse ein`}},ethernetAddress:{title:`Ethernet-Adresse`,placeholder:`Ethernet IP-Adresse (z. B. 192.168.1.100)`},wifiAddress:{title:`Wi-Fi-Adresse`,placeholder:`Wi-Fi IP-Adresse (z. B. 192.168.1.101)`}},config:{enabled:{title:`Aktiviert`},mdns:{enabled:{title:`Erkennung aktiviert`},interface:{title:`Schnittstelle`,placeholder:`Die zu verwendende Netzwerkschnittstelle. Wenn keine angegeben ist, werden alle verfügbaren Schnittstellen verwendet.`}},websockets:{requestTimeout:{title:`Anfragezeitlimit`,placeholder:`Die Zeit in Sekunden, die auf eine Antwort gewartet wird, bevor eine Anfrage abgebrochen wird.`,validation:{required:`Bitte geben Sie das Anfragezeitlimit ein`,number:`Anfragezeitlimit muss eine Zahl sein`}},pingInterval:{title:`Ping-Intervall`,placeholder:`Das Intervall in Sekunden, in dem Ping-Anfragen gesendet werden, um zu überprüfen, ob die Verbindung offen ist. Auf 0 setzen zum Deaktivieren.`,validation:{required:`Bitte geben Sie das Ping-Intervall ein`,number:`Ping-Intervall muss eine Zahl sein`}},reconnectInterval:{title:`Wiederverbindungsintervall`,placeholder:`Das Intervall in Sekunden, in dem ein Verbindungsversuch nach dem Schließen eines Sockets unternommen wird.`,validation:{required:`Bitte geben Sie das Wiederverbindungsintervall ein`,number:`Wiederverbindungsintervall muss eine Zahl sein`,array:`Wiederverbindungsintervall muss ein Array von Zahlen sein`}}}}},messages:{config:{edited:`Änderungen gespeichert! Die Shelly Next Generation Plugin-Konfiguration wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Aktualisierung der Shelly Next Generation Plugin-Konfiguration war nicht erfolgreich.`},devices:{exists:`Ein Gerät mit diesem Hostname und Passwort ist bereits im System registriert.`,created:`Neues Shelly Next-Generation-Gerät erfolgreich hinzugefügt.`,notCreated:`Etwas ist schiefgelaufen. Das Shelly Next-Generation-Gerät konnte nicht erstellt werden.`,notChecked:`Etwas ist schiefgelaufen. Geräteinformationen konnten nicht geladen werden. Überprüfen Sie den Geräte-Hostname oder das Passwort.`,edited:`Änderungen gespeichert! Das Shelly Next-Generation-Gerät: {device} wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Aktualisierung des Shelly Next-Generation-Geräts war nicht erfolgreich.`,failedLoadSupportedDevices:`Etwas ist schiefgelaufen. Die unterstützten Geräte des Plugins konnten nicht geladen werden.`},wizard:{discoveryNotStarted:`Etwas ist schiefgelaufen. Die Shelly-Suche konnte nicht gestartet werden.`,discoveryNotLoaded:`Etwas ist schiefgelaufen. Die Shelly-Suche konnte nicht geladen werden.`,manualNotAdded:`Etwas ist schiefgelaufen. Die manuelle Suche nach einem Shelly-Gerät konnte nicht hinzugefügt werden.`,adoptionNotCreated:`Etwas ist schiefgelaufen. Das Shelly-Gerät konnte nicht übernommen werden.`}},texts:{aboutPluginStatus:`Aktivieren oder deaktivieren Sie die Shelly Next Generation Geräteintegration. Wenn aktiviert, können Shelly-Geräte über das Smart Panel erkannt und gesteuert werden.`,aboutMdns:`Konfigurieren Sie, wie das Plugin Shelly-Geräte in Ihrem lokalen Netzwerk über Multicast DNS (mDNS) erkennt. Dies ermöglicht die automatische Erkennung ohne manuelle Eingabe von IP-Adressen.`,aboutWebsockets:`Verwalten Sie WebSocket-Verbindungsparameter für Shelly-Geräte. Diese Einstellungen steuern Kommunikationsstabilität, Anfrageverarbeitung und Wiederverbindungsverhalten.`,wizard:{discovery:`Der Assistent durchsucht das lokale Netzwerk nach Shelly NG-Geräten und akzeptiert auch einen manuell eingegebenen Hostnamen oder eine IP-Adresse.`,scanStatus:`{count} Geräte gefunden`}},buttons:{next:{title:`Weiter`},wizard:{restart:{title:`Erneut scannen`},addManual:{title:`Hinzufügen`}}}},"en-US":{headings:{aboutPluginStatus:`Plugin Status`,aboutMdns:`MDNS settings`,aboutWebsockets:`Websockets settings`,device:{deviceConnection:`Device connection`,information:`Device information`,supported:`Congrats! Device is supported`,notSupported:`We are sorry, you device is not supported`,model:`Model`,firmware:`Firmware`},wizard:{title:`Shelly NG discovery wizard`}},subHeadings:{wizard:`Find and adopt Shelly NG devices on your network`},breadcrumbs:{wizard:`discovery wizard`},fields:{devices:{id:{title:`Internal identifier`,placeholder:`Device id`},category:{title:`Category`,placeholder:`Device category`,validation:{required:`Please select device category`}},name:{title:`Name`,placeholder:`Device name`,validation:{required:`Please fill in device name`}},description:{title:`Description`,placeholder:`Device description`},enabled:{title:`Enabled`,placeholder:`Enable or disable device`},password:{title:`Admin password`,placeholder:`Provide device password if device is protected`},hostname:{title:`Device hostname`,placeholder:`Device network name or IP address`,validation:{required:`Please fill in device hostname or IP address`}},ethernetAddress:{title:`Ethernet address`,placeholder:`Ethernet IP address (e.g. 192.168.1.100)`},wifiAddress:{title:`WiFi address`,placeholder:`WiFi IP address (e.g. 192.168.1.101)`}},config:{enabled:{title:`Enabled`},mdns:{enabled:{title:`Discovery enabled`},interface:{title:`Interface`,placeholder:`The network interface to use. If none is specified, all available interfaces will be used.`}},websockets:{requestTimeout:{title:`Request timeout`,placeholder:`The time, in seconds, to wait for a response before a request is aborted.`,validation:{required:`Please fill in request timeout`,number:`Request timeout must be a number`}},pingInterval:{title:`Ping interval`,placeholder:`The interval, in seconds, at which ping requests should be made to verify that the connection is open. Set to 0 to disable.`,validation:{required:`Please fill in ping interval`,number:`Ping interval must be a number`}},reconnectInterval:{title:`Reconnect interval`,placeholder:`The interval, in seconds, at which a connection attempt should be made after a socket has been closed.`,validation:{required:`Please fill in reconnect interval`,number:`Reconnect interval must be a number`,array:`Reconnect interval must be an array of numbers`}}}}},messages:{config:{edited:`Changes saved! The Shelly Next Generation plugin config has been updated.`,notEdited:`Something went wrong. Shelly Next Generation plugin config update was not successful.`},devices:{exists:`Device with provided hostname and password is already registered in system.`,created:`New Shelly Next-Generation device added successfully.`,notCreated:`Something went wrong. Unable to create the Shelly Next-Generation device.`,notChecked:`Something went wrong. Device information could not be loaded. Check the device hostname or password.`,edited:`Changes saved! The Shelly Next-Generation device: {device} has been updated.`,notEdited:`Something went wrong. Shelly Next-Generation device update was not successful.`,failedLoadSupportedDevices:`Something went wrong. Plugin supported devices could not be loaded.`},wizard:{discoveryNotStarted:`Something went wrong. Shelly discovery could not be started.`,discoveryNotLoaded:`Something went wrong. Shelly discovery could not be loaded.`,manualNotAdded:`Something went wrong. Manual Shelly device lookup could not be added.`,adoptionNotCreated:`Something went wrong. Shelly device could not be adopted.`}},texts:{aboutPluginStatus:`Enable or disable the Shelly Next Generation device integration. When enabled, Shelly devices can be discovered and controlled through the Smart Panel.`,aboutMdns:`Configure how the plugin discovers Shelly devices on your local network using Multicast DNS (mDNS). This enables automatic detection without needing to manually enter IP addresses.`,aboutWebsockets:`Manage WebSocket connection parameters for Shelly devices. These settings control communication stability, request handling, and reconnection behavior.`,wizard:{discovery:`The wizard scans the local network for Shelly NG devices and also accepts a manually entered hostname or IP address.`,scanStatus:`{count} devices found`}},buttons:{next:{title:`Next`},wizard:{restart:{title:`Scan again`},addManual:{title:`Add`}}}},"es-ES":{headings:{aboutPluginStatus:`Estado del plugin`,aboutMdns:`Configuración de mDNS`,aboutWebsockets:`Configuración de WebSockets`,device:{deviceConnection:`Conexión del dispositivo`,information:`Información del dispositivo`,supported:`¡Felicidades! El dispositivo es compatible`,notSupported:`Lo sentimos, su dispositivo no es compatible`,model:`Modelo`,firmware:`firmware`},wizard:{title:`Asistente de descubrimiento de Shelly NG`}},subHeadings:{wizard:`Encuentre y adopte dispositivos Shelly NG en su red`},breadcrumbs:{wizard:`asistente de descubrimiento`},fields:{devices:{id:{title:`Identificador interno`,placeholder:`ID del dispositivo`},category:{title:`Categoría`,placeholder:`Categoría del dispositivo`,validation:{required:`Por favor, seleccione la categoría del dispositivo`}},name:{title:`Nombre`,placeholder:`Nombre del dispositivo`,validation:{required:`Por favor, introduzca el nombre del dispositivo`}},description:{title:`Descripción`,placeholder:`Descripción del dispositivo`},enabled:{title:`Habilitado`,placeholder:`Habilitar o deshabilitar el dispositivo`},password:{title:`Contraseña de administrador`,placeholder:`Proporcione la contraseña del dispositivo si está protegido`},hostname:{title:`Nombre de host del dispositivo`,placeholder:`Nombre de red o dirección IP del dispositivo`,validation:{required:`Por favor, introduzca el nombre de host o la dirección IP del dispositivo`}},ethernetAddress:{title:`Dirección Ethernet`,placeholder:`Dirección IP de Ethernet (p. ej. 192.168.1.100)`},wifiAddress:{title:`Dirección WiFi`,placeholder:`Dirección IP de WiFi (p. ej. 192.168.1.101)`}},config:{enabled:{title:`Habilitado`},mdns:{enabled:{title:`Descubrimiento habilitado`},interface:{title:`Interfaz`,placeholder:`La interfaz de red a utilizar. Si no se especifica ninguna, se utilizarán todas las interfaces disponibles.`}},websockets:{requestTimeout:{title:`Tiempo de espera de solicitud`,placeholder:`El tiempo, en segundos, de espera para una respuesta antes de abortar la solicitud.`,validation:{required:`Por favor, introduzca el tiempo de espera de solicitud`,number:`El tiempo de espera de solicitud debe ser un número`}},pingInterval:{title:`Intervalo de ping`,placeholder:`El intervalo, en segundos, para realizar solicitudes de ping y verificar que la conexión está abierta. Establezca en 0 para deshabilitar.`,validation:{required:`Por favor, introduzca el intervalo de ping`,number:`El intervalo de ping debe ser un número`}},reconnectInterval:{title:`Intervalo de reconexión`,placeholder:`El intervalo, en segundos, para intentar reconectar después de que un socket se haya cerrado.`,validation:{required:`Por favor, introduzca el intervalo de reconexión`,number:`El intervalo de reconexión debe ser un número`,array:`El intervalo de reconexión debe ser un arreglo de números`}}}}},messages:{config:{edited:`¡Cambios guardados! La configuración del plugin Shelly Next Generation ha sido actualizada.`,notEdited:`Algo salió mal. La actualización de la configuración del plugin Shelly Next Generation no fue exitosa.`},devices:{exists:`El dispositivo con el nombre de host y la contraseña proporcionados ya está registrado en el sistema.`,created:`Nuevo dispositivo Shelly Next-Generation agregado correctamente.`,notCreated:`Algo salió mal. No se pudo crear el dispositivo Shelly Next-Generation.`,notChecked:`Algo salió mal. No se pudo cargar la información del dispositivo. Verifique el nombre de host o la contraseña del dispositivo.`,edited:`¡Cambios guardados! El dispositivo Shelly Next-Generation: {device} ha sido actualizado.`,notEdited:`Algo salió mal. La actualización del dispositivo Shelly Next-Generation no fue exitosa.`,failedLoadSupportedDevices:`Algo salió mal. No se pudieron cargar los dispositivos compatibles del plugin.`},wizard:{discoveryNotStarted:`Algo salió mal. No se pudo iniciar el descubrimiento de Shelly.`,discoveryNotLoaded:`Algo salió mal. No se pudo cargar el descubrimiento de Shelly.`,manualNotAdded:`Algo salió mal. No se pudo agregar la búsqueda manual de un dispositivo Shelly.`,adoptionNotCreated:`Algo salió mal. No se pudo adoptar el dispositivo Shelly.`}},texts:{aboutPluginStatus:`Habilitar o deshabilitar la integración de dispositivos Shelly Next Generation. Cuando está habilitado, los dispositivos Shelly pueden ser descubiertos y controlados a través del Smart Panel.`,aboutMdns:`Configure cómo el plugin descubre dispositivos Shelly en su red local usando DNS Multidifusión (mDNS). Esto permite la detección automática sin necesidad de introducir direcciones IP manualmente.`,aboutWebsockets:`Gestione los parámetros de conexión WebSocket para los dispositivos Shelly. Estos ajustes controlan la estabilidad de la comunicación, el manejo de solicitudes y el comportamiento de reconexión.`,wizard:{discovery:`El asistente busca dispositivos Shelly NG en la red local y también acepta un nombre de host o una dirección IP introducidos manualmente.`,scanStatus:`{count} dispositivos encontrados`}},buttons:{next:{title:`Siguiente`},wizard:{restart:{title:`Escanear de nuevo`},addManual:{title:`Añadir`}}}},"pl-PL":{headings:{aboutPluginStatus:`Status wtyczki`,aboutMdns:`Ustawienia MDNS`,aboutWebsockets:`Ustawienia WebSocket`,device:{deviceConnection:`Polaczenie urzadzenia`,information:`Informacje o urzadzeniu`,supported:`Gratulacje! Urzadzenie jest obslugiwane`,notSupported:`Przepraszamy, Twoje urzadzenie nie jest obslugiwane`,model:`Model`,firmware:`Oprogramowanie układowe`},wizard:{title:`Kreator wyszukiwania Shelly NG`}},subHeadings:{wizard:`Znajdz i adoptuj urzadzenia Shelly NG w swojej sieci`},breadcrumbs:{wizard:`kreator wyszukiwania`},fields:{devices:{id:{title:`Identyfikator wewnetrzny`,placeholder:`ID urzadzenia`},category:{title:`Kategoria`,placeholder:`Kategoria urzadzenia`,validation:{required:`Prosze wybrac kategorie urzadzenia`}},name:{title:`Nazwa`,placeholder:`Nazwa urzadzenia`,validation:{required:`Prosze podac nazwe urzadzenia`}},description:{title:`Opis`,placeholder:`Opis urzadzenia`},enabled:{title:`Wlaczony`,placeholder:`Wlacz lub wylacz urzadzenie`},password:{title:`Haslo administratora`,placeholder:`Podaj haslo urzadzenia, jesli urzadzenie jest chronione`},hostname:{title:`Nazwa hosta urzadzenia`,placeholder:`Nazwa sieciowa lub adres IP urzadzenia`,validation:{required:`Prosze podac nazwe hosta lub adres IP urzadzenia`}},ethernetAddress:{title:`Adres Ethernet`,placeholder:`Adres IP Ethernet (np. 192.168.1.100)`},wifiAddress:{title:`Adres Wi-Fi`,placeholder:`Adres IP Wi-Fi (np. 192.168.1.101)`}},config:{enabled:{title:`Wlaczony`},mdns:{enabled:{title:`Wykrywanie wlaczone`},interface:{title:`Interfejs`,placeholder:`Interfejs sieciowy do uzycia. Jesli nie podano, zostaną uzyty wszystkie dostepne interfejsy.`}},websockets:{requestTimeout:{title:`Limit czasu zadania`,placeholder:`Czas w sekundach oczekiwania na odpowiedz przed przerwaniem zadania.`,validation:{required:`Prosze podac limit czasu zadania`,number:`Limit czasu zadania musi byc liczba`}},pingInterval:{title:`Interwal ping`,placeholder:`Interwal w sekundach, w jakim wykonywane sa zadania ping w celu weryfikacji polaczenia. Ustaw 0, aby wylaczyc.`,validation:{required:`Prosze podac interwal ping`,number:`Interwal ping musi byc liczba`}},reconnectInterval:{title:`Interwal ponownego polaczenia`,placeholder:`Interwal w sekundach, w jakim podejmowana jest proba polaczenia po zamknieciu gniazda.`,validation:{required:`Prosze podac interwal ponownego polaczenia`,number:`Interwal ponownego polaczenia musi byc liczba`,array:`Interwal ponownego polaczenia musi byc tablica liczb`}}}}},messages:{config:{edited:`Zmiany zapisane! Konfiguracja wtyczki Shelly Next Generation zostala zaktualizowana.`,notEdited:`Cos poszlo nie tak. Aktualizacja konfiguracji wtyczki Shelly Next Generation nie powiodla sie.`},devices:{exists:`Urzadzenie z podana nazwa hosta i haslem jest juz zarejestrowane w systemie.`,created:`Nowe urzadzenie Shelly Next-Generation zostalo pomyslnie dodane.`,notCreated:`Cos poszlo nie tak. Nie udalo sie utworzyc urzadzenia Shelly Next-Generation.`,notChecked:`Cos poszlo nie tak. Informacje o urzadzeniu nie mogly zostac zaladowane. Sprawdz nazwe hosta lub haslo urzadzenia.`,edited:`Zmiany zapisane! Urzadzenie Shelly Next-Generation: {device} zostalo zaktualizowane.`,notEdited:`Cos poszlo nie tak. Aktualizacja urzadzenia Shelly Next-Generation nie powiodla sie.`,failedLoadSupportedDevices:`Cos poszlo nie tak. Obslugiwane urzadzenia wtyczki nie mogly zostac zaladowane.`},wizard:{discoveryNotStarted:`Coś poszło nie tak. Wyszukiwanie Shelly nie mogło zostać uruchomione.`,discoveryNotLoaded:`Coś poszło nie tak. Wyszukiwanie Shelly nie mogło zostać załadowane.`,manualNotAdded:`Coś poszło nie tak. Ręczne wyszukiwanie urządzenia Shelly nie mogło zostać dodane.`,adoptionNotCreated:`Coś poszło nie tak. Nie udało się przyjąć urządzenia Shelly.`}},texts:{aboutPluginStatus:`Wlacz lub wylacz integracje urzadzen Shelly Next Generation. Po wlaczeniu urzadzenia Shelly moga byc wykrywane i sterowane przez Smart Panel.`,aboutMdns:`Skonfiguruj, jak wtyczka wykrywa urzadzenia Shelly w sieci lokalnej za pomoca Multicast DNS (mDNS). Umozliwia to automatyczne wykrywanie bez koniecznosci recznego wprowadzania adresow IP.`,aboutWebsockets:`Zarzadzaj parametrami polaczenia WebSocket dla urzadzen Shelly. Te ustawienia kontroluja stabilnosc komunikacji, obsluge zadan i zachowanie ponownego polaczenia.`,wizard:{discovery:`Kreator przeszukuje lokalną sieć w poszukiwaniu urządzeń Shelly NG i akceptuje ręcznie wprowadzoną nazwę hosta lub adres IP.`,scanStatus:`Znaleziono {count} urządzeń`}},buttons:{next:{title:`Dalej`},wizard:{restart:{title:`Skanuj ponownie`},addManual:{title:`Dodaj`}}}},"sk-SK":{headings:{aboutPluginStatus:`Stav pluginu`,aboutMdns:`Nastavenia MDNS`,aboutWebsockets:`Nastavenia Websockets`,device:{deviceConnection:`Pripojenie zariadenia`,information:`Informácie o zariadení`,supported:`Gratulujeme! Zariadenie je podporované`,notSupported:`Ľutujeme, vaše zariadenie nie je podporované`,model:`Model`,firmware:`Firmvér`},wizard:{title:`Sprievodca vyhľadaním Shelly NG`}},subHeadings:{wizard:`Nájdite a adoptujte zariadenia Shelly NG vo vašej sieti`},breadcrumbs:{wizard:`sprievodca vyhľadaním`},fields:{devices:{id:{title:`Interný identifikátor`,placeholder:`ID zariadenia`},category:{title:`Kategória`,placeholder:`Kategória zariadenia`,validation:{required:`Prosím vyberte kategóriu zariadenia`}},name:{title:`Názov`,placeholder:`Názov zariadenia`,validation:{required:`Prosím vyplňte názov zariadenia`}},description:{title:`Popis`,placeholder:`Popis zariadenia`},enabled:{title:`Povolené`,placeholder:`Povoliť alebo zakázať zariadenie`},password:{title:`Heslo administrátora`,placeholder:`Zadajte heslo zariadenia, ak je chránené`},hostname:{title:`Hostname zariadenia`,placeholder:`Sieťový názov alebo IP adresa zariadenia`,validation:{required:`Prosím vyplňte hostname alebo IP adresu zariadenia`}},ethernetAddress:{title:`Ethernetová adresa`,placeholder:`IP adresa Ethernet (napr. 192.168.1.100)`},wifiAddress:{title:`Wi-Fi adresa`,placeholder:`Wi-Fi IP adresa (napr. 192.168.1.101)`}},config:{enabled:{title:`Povolené`},mdns:{enabled:{title:`Objavovanie povolené`},interface:{title:`Rozhranie`,placeholder:`Sieťové rozhranie na použitie. Ak nie je špecifikované, budú použité všetky dostupné rozhrania.`}},websockets:{requestTimeout:{title:`Časový limit požiadavky`,placeholder:`Čas v sekundách na čakanie na odpoveď pred zrušením požiadavky.`,validation:{required:`Prosím vyplňte časový limit požiadavky`,number:`Časový limit požiadavky musí byť číslo`}},pingInterval:{title:`Interval pingu`,placeholder:`Interval v sekundách, v ktorom sa odosielajú ping požiadavky na overenie, že pripojenie je otvorené. Nastavte na 0 na zakázanie.`,validation:{required:`Prosím vyplňte interval pingu`,number:`Interval pingu musí byť číslo`}},reconnectInterval:{title:`Interval opätovného pripojenia`,placeholder:`Interval v sekundách, v ktorom sa má vykonať pokus o pripojenie po zatvorení socketu.`,validation:{required:`Prosím vyplňte interval opätovného pripojenia`,number:`Interval opätovného pripojenia musí byť číslo`,array:`Interval opätovného pripojenia musí byť pole čísel`}}}}},messages:{config:{edited:`Zmeny uložené! Konfigurácia pluginu Shelly Next Generation bola aktualizovaná.`,notEdited:`Niečo sa pokazilo. Aktualizácia konfigurácie pluginu Shelly Next Generation nebola úspešná.`},devices:{exists:`Zariadenie s poskytnutým hostname a heslom je už zaregistrované v systéme.`,created:`Nové zariadenie Shelly Next-Generation bolo úspešne pridané.`,notCreated:`Niečo sa pokazilo. Nepodarilo sa vytvoriť zariadenie Shelly Next-Generation.`,notChecked:`Niečo sa pokazilo. Informácie o zariadení sa nepodarilo načítať. Skontrolujte hostname alebo heslo zariadenia.`,edited:`Zmeny uložené! Zariadenie Shelly Next-Generation: {device} bolo aktualizované.`,notEdited:`Niečo sa pokazilo. Aktualizácia zariadenia Shelly Next-Generation nebola úspešná.`,failedLoadSupportedDevices:`Niečo sa pokazilo. Podporované zariadenia pluginu sa nepodarilo načítať.`},wizard:{discoveryNotStarted:`Niečo sa pokazilo. Vyhľadávanie Shelly sa nepodarilo spustiť.`,discoveryNotLoaded:`Niečo sa pokazilo. Vyhľadávanie Shelly sa nepodarilo načítať.`,manualNotAdded:`Niečo sa pokazilo. Manuálne vyhľadanie zariadenia Shelly sa nepodarilo pridať.`,adoptionNotCreated:`Niečo sa pokazilo. Zariadenie Shelly sa nepodarilo adoptovať.`}},texts:{aboutPluginStatus:`Povoľte alebo zakážte integráciu zariadení Shelly Next Generation. Keď je povolená, zariadenia Shelly môžu byť objavené a ovládané cez Smart Panel.`,aboutMdns:`Nakonfigurujte, ako plugin objavuje zariadenia Shelly na vašej lokálnej sieti pomocou Multicast DNS (mDNS). To umožňuje automatickú detekciu bez potreby manuálneho zadávania IP adries.`,aboutWebsockets:`Spravujte parametre WebSocket pripojenia pre zariadenia Shelly. Tieto nastavenia ovládajú stabilitu komunikácie, spracovanie požiadaviek a správanie pri opätovnom pripojení.`,wizard:{discovery:`Sprievodca vyhľadá zariadenia Shelly NG v lokálnej sieti a prijíma aj manuálne zadaný hostname alebo IP adresu.`,scanStatus:`Nájdené zariadenia: {count}`}},buttons:{next:{title:`Ďalej`},wizard:{restart:{title:`Vyhľadať znova`},addManual:{title:`Pridať`}}}}},xO=Ki.extend({mdns:K({enabled:J(),interface:X().nullable()}),websockets:K({requestTimeout:Dt().int().min(1),pingInterval:Dt().int().min(0),reconnectInterval:W(Dt().int().min(1)).nonempty()})}),SO=os,CO=Zo.and(K({type:Y(HD)})),wO=rs.and(K({type:Y(HD)}));Qo.and(K({type:Y(HD)}));var TO=ns,EO=cs.and(K({type:Y(HD)})),DO=us.and(K({type:Y(HD)}));Xo.and(K({type:Y(HD)}));var OO=Wi.extend({statusPollInterval:q().optional().default(60),mdns:K({enabled:J(),interface:X().nullable()}),websockets:K({requestTimeout:q(),pingInterval:q(),reconnectInterval:W(q())})}),kO=Zi.and(K({type:Y(VD),status_poll_interval:q().optional(),mdns:K({enabled:J().optional(),interface:X().nullable().optional()}).optional(),websockets:K({request_timeout:q().optional(),ping_interval:q().optional(),reconnect_interval:W(q()).optional()}).optional()}));Ri.and(K({type:Y(VD),status_poll_interval:q(),mdns:K({enabled:J(),interface:X().nullable()}),websockets:K({request_timeout:q(),ping_interval:q(),reconnect_interval:W(q())})}));var AO=K({id:X(),interfaceType:ir([`ethernet`,`wifi`]),address:X()}),jO=Yo.extend({password:X().nullable(),canonicalMac:X().nullable().optional(),hasEthernet:J().optional(),addresses:W(AO).optional(),wifiAddress:X().nullable().optional(),ethernetAddress:X().nullable().optional()}),MO=K({id:X(),interface_type:ir([`ethernet`,`wifi`]),address:X()}),NO=ss.and(K({type:Y(HD),password:X().nullable(),wifi_address:X().nullable().optional()})),PO=as.and(K({type:Y(HD),category:G(dr).optional(),password:X().nullable().optional(),wifi_address:X().nullable().optional(),ethernet_address:X().nullable().optional()}));ts.and(K({type:Y(HD),password:X().nullable(),canonical_mac:X().nullable().optional(),has_ethernet:J(),addresses:W(MO).optional().default([])}));var FO=Symbol(`FB-Plugin-DevicesShellyNg`),IO={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(bO)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesShellyNgPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(FO,{type:VD,source:`com.fastybird.smart-panel.plugin.devices-shelly-ng`,name:`Shelly Next Generation`,description:`Connect and control your Shelly Next Generation devices directly from the FastyBird Smart Panel`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:pO},schemas:{pluginConfigSchema:OO,pluginConfigEditFormSchema:xO,pluginConfigUpdateReqSchema:kO},modules:[ka]},{type:HD,components:{deviceAddForm:lO,deviceEditForm:fO,deviceWizardAdapter:yO},schemas:{deviceSchema:jO,deviceAddFormSchema:KD,deviceEditFormSchema:JD,deviceCreateReqSchema:NO,deviceUpdateReqSchema:PO,channelSchema:TO,channelCreateReqSchema:EO,channelUpdateReqSchema:DO,channelPropertySchema:SO,channelPropertyCreateReqSchema:CO,channelPropertyUpdateReqSchema:wO},modules:[qo]}],modules:[qo,ka],isCore:!0})}},LO=`devices-shelly-v1`,RO=`devices-shelly-v1-plugin`,zO=`devices-shelly-v1`,BO=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesShellyV1Exception`,this.exception=t}},VO=class extends BO{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesShellyV1ApiException`,this.code=t}},HO=class extends BO{constructor(e,t=null){super(e,t),this.name=`DevicesShellyV1ValidationException`}},UO=xs.extend({password:X().nullable().optional(),hostname:X().trim().nonempty()}),WO=ws.extend({password:X().nullable().optional(),hostname:X().trim().nonempty()}),GO=K({group:X(),name:X(),models:W(X()),categories:W(G(dr))}),KO=K({hostname:X(),password:X().nullable().optional()}),qO=K({reachable:J(),authRequired:J(),authValid:J(),host:X(),ip:X(),mac:X(),model:X(),firmware:X(),deviceType:X()}),JO=K({identifier:X().nullable(),hostname:X(),name:X().nullable(),model:X().nullable(),displayName:X().nullable(),firmware:X().nullable(),status:ir([`checking`,`ready`,`needs_password`,`already_registered`,`unsupported`,`failed`]),source:ir([`mdns`,`manual`]),categories:W(G(dr)),suggestedCategory:G(dr).nullable(),authentication:K({enabled:J(),valid:J().nullable().optional()}),registeredDeviceId:X().nullable(),registeredDeviceName:X().nullable(),registeredDeviceCategory:G(dr).nullable(),error:X().nullable(),lastSeenAt:X()}),YO=K({id:X(),status:ir([`running`,`finished`,`failed`]),startedAt:X(),expiresAt:X(),remainingSeconds:q(),devices:W(JO)}),XO=e=>{let t=[];for(let n of e){let e=GO.safeParse(Un(n));if(!e.success)throw cr.error(`Schema validation failed with:`,e.error),new HO(`Failed to validate received supported device data.`);t.push(e.data)}return t},ZO=e=>{let t=qO.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new HO(`Failed to validate received device info data.`);return t.data},QO=e=>{let t=KO.safeParse(ar(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new HO(`Failed to validate get device info request.`);return t.data},$O=e=>{let t=YO.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new HO(`Failed to validate received discovery session data.`);return t.data},ek=()=>{let{t:e}=M(),t=Zn(),n=Tn(),r=j([]),i=j(!1);return{supportedDevices:r,loaded:i,fetchDevices:async a=>{if(i.value&&!a)return;let{data:o,error:s,response:c}=await t.client.GET(`/${Ie}/${LO}/devices/supported`,{});if(o!==void 0){r.value=XO(o.data),i.value=!0;return}let l=e(`devicesShellyV1Plugin.messages.devices.failedLoadSupportedDevices`);if(c.status===422){let e=l;s&&(e=Kn(s,e)),n.error(e)}else n.error(l)}}},tk=({id:e})=>{let t=pn().getStore(jo),{t:n}=M(),r=Zn(),i=Tn(),a=On(),{supportedDevices:o,fetchDevices:s}=ek(),c=j($.NONE),l,u=p(()=>b.value===null?null:o.value.find(e=>e.models.includes(b.value.model.toUpperCase()))||null),d=p(()=>wa(u.value?.categories||[],[e=>n(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:n(`devicesModule.categories.devices.${e}`)}))),m=P({...oa(UO),id:e,type:zO,category:dr.generic,name:``,description:``,hostname:``,password:``,enabled:!0}),h=gn(f(m)),g=j(void 0),_=j(void 0),v=j(`one`),y=j(!1),b=j(null),x=async o=>{if(o===`one`){if(g.value.clearValidate(),!await g.value.validate())throw new HO(`Form not valid`);c.value=$.WORKING;let e=n(`devicesShellyV1Plugin.messages.devices.notChecked`,{device:m.name});try{let{data:t,error:i,response:a}=await r.client.POST(`/${Ie}/${LO}/devices/info`,{body:{data:QO({hostname:m.hostname,password:m.password})}});if(t!==void 0){let e=ZO(t.data);if(!e.reachable)throw new VO(n(`devicesShellyV1Plugin.messages.devices.notReachable`),404);if(e.authRequired&&!e.authValid)throw new VO(n(`devicesShellyV1Plugin.messages.devices.invalidPassword`),401);return b.value=e,v.value=`two`,c.value=$.NONE,`ok`}let o=e;throw i&&(o=Kn(i,o)),new VO(o,a.status)}catch(t){throw c.value=$.ERROR,l=window.setTimeout(S,2e3),t instanceof VO&&(t.code===422||t.code===404||t.code===401)?i.error(t.message):i.error(e),t}}else if(o===`two`){if(_.value.clearValidate(),!await _.value.validate())throw new HO(`Form not valid`);let r=UO.safeParse(m);if(!r.success)throw a.error(`Schema validation failed with:`,r.error),new HO(`Failed to validate create device model.`);c.value=$.WORKING;let o=n(`devicesShellyV1Plugin.messages.devices.notCreated`,{device:m.name});try{await t.add({id:e,draft:!1,data:{...r.data,type:zO}})}catch(e){throw c.value=$.ERROR,l=window.setTimeout(S,2e3),e instanceof ps&&e.code===422?i.error(e.message):i.error(o),e}return c.value=$.OK,l=window.setTimeout(S,2e3),i.success(n(`devicesShellyV1Plugin.messages.devices.created`,{device:m.name})),`added`}else throw new HO(`Unknown step`)},S=()=>{window.clearTimeout(l),c.value=$.NONE};return Tr(()=>{s().catch(()=>{})}),F(m,()=>{y.value=!(0,Xd.isEqual)(f(m),h)}),F(()=>m.hostname,(e,t)=>{e!==t&&(b.value=null)}),F(()=>b.value,e=>{m.identifier=e?.mac||null}),{categoriesOptions:d,activeStep:v,deviceInfo:b,supportedDevices:o,model:m,stepOneFormEl:g,stepTwoFormEl:_,formChanged:y,submitStep:x,clear:S,formResult:c}},nk={class:`grid grid-cols-[auto_1fr] gap-x-4 my-0`},rk={class:`m-0 inline-block font-bold`},ik={class:`m-0 inline-block font-bold`},ak=k({name:`ShellyV1DeviceAddForm`,__name:`shelly-v1-device-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),c=Tn(),{devices:u,loaded:d,fetchDevices:f}=fs(),{model:m,stepOneFormEl:h,stepTwoFormEl:_,activeStep:v,categoriesOptions:y,supportedDevices:b,formChanged:x,deviceInfo:S,submitStep:C,formResult:w}=tk({id:n.id}),T=p(()=>S.value===null?null:b.value.find(e=>e.models.includes(S.value.model.toUpperCase()))||null),ee=P({hostname:[{required:!0,message:a(`devicesShellyV1Plugin.fields.devices.hostname.validation.required`),trigger:`change`}]}),te=P({name:[{required:!0,message:a(`devicesShellyV1Plugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesShellyV1Plugin.fields.devices.category.validation.required`),trigger:`change`}],hostname:[{required:!0,message:a(`devicesShellyV1Plugin.fields.devices.hostname.validation.required`),trigger:`change`}]}),ne=async()=>{v.value===`one`?C(`one`).catch(()=>{}):v.value===`two`&&C(`two`).catch(()=>{})};return pe(()=>{d.value||f().catch(()=>{})}),F(()=>w.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),v.value===`one`?C(`one`).catch(()=>{}):v.value===`two`&&C(`two`).catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{r(`update:remote-form-reset`,!1),e&&(h.value?.resetFields(),_.value?.resetFields())}),F(()=>x.value,e=>{r(`update:remote-form-changed`,e)}),F(()=>y.value,e=>{e.length>0&&e[0]&&(m.category=e[0].value)}),F([()=>S.value,()=>d.value],([e,t])=>{if(e===null||!t)return;let n=u.value.find(t=>t.identifier===e.mac&&t.type===`devices-shelly-v1`);n!==void 0&&(c.success(a(`devicesShellyV1Plugin.messages.devices.exists`,{device:n.name})),rn.push({name:Jo.DEVICES_EDIT,params:{id:n.id},state:{prefills:{hostname:m.hostname,password:m.password}}}))}),(e,t)=>(A(),i(V,null,[D(L(ui),{modelValue:L(v),"onUpdate:modelValue":t[6]||=e=>he(v)?v.value=e:null,accordion:``,"expand-icon-position":`left`},{default:B(()=>[D(L(li),{title:L(a)(`devicesShellyV1Plugin.headings.device.deviceConnection`),name:`one`},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:connection`})]),_:1})]),default:B(()=>[D(L(Ir),{ref_key:`stepOneFormEl`,ref:h,model:L(m),rules:ee,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.hostname.title`),prop:`hostname`},{default:B(()=>[D(L(U),{modelValue:L(m).hostname,"onUpdate:modelValue":t[0]||=e=>L(m).hostname=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.hostname.placeholder`),name:`hostname`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.password.title`),prop:`password`,class:`mb-0!`},{default:B(()=>[D(L(U),{modelValue:L(m).password,"onUpdate:modelValue":t[1]||=e=>L(m).password=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.password.placeholder`),name:`password`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`])]),_:1},8,[`title`]),D(L(li),{title:L(a)(`devicesShellyV1Plugin.headings.device.information`),name:`two`,disabled:L(S)===null},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:devices`})]),_:1})]),default:B(()=>[D(L(Q),{type:T.value?`success`:`error`,title:T.value?L(a)(`devicesShellyV1Plugin.headings.device.supported`):L(a)(`devicesShellyV1Plugin.headings.device.notSupported`),closable:!1,"show-icon":``},{default:B(()=>[l(`dl`,nk,[l(`dt`,null,z(L(a)(`devicesShellyV1Plugin.headings.device.model`))+`:`,1),l(`dd`,rk,z(T.value===null?`unknown`:T.value.name),1),l(`dt`,null,z(L(a)(`devicesShellyV1Plugin.headings.device.firmware`))+`:`,1),l(`dd`,ik,z(L(S)?.firmware),1)])]),_:1},8,[`type`,`title`]),D(L(Ir),{ref_key:`stepTwoFormEl`,ref:_,model:L(m),rules:te,"label-position":`top`,"status-icon":``,class:`mt-4`},{default:B(()=>[D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(m).name,"onUpdate:modelValue":t[2]||=e=>L(m).name=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(m).category,"onUpdate:modelValue":t[3]||=e=>L(m).category=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(y),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(m).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(m).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(m).description,"onUpdate:modelValue":t[4]||=e=>L(m).description=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(m).enabled,"onUpdate:modelValue":t[5]||=e=>L(m).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`])]),_:1},8,[`title`,`disabled`])]),_:1},8,[`modelValue`]),L(v)===`one`?(A(),O(o,{key:0,defer:``,to:`#${L(sa)}`},[D(L(Oe),{loading:L(w)===L($).WORKING,disabled:L(w)!==L($).NONE,type:`primary`,onClick:ne},De({default:B(()=>[E(` `+z(L(a)(`devicesShellyV1Plugin.buttons.next.title`)),1)]),_:2},[L(w)===L($).ERROR?{name:`icon`,fn:B(()=>[D(L(s),{icon:`mdi:cross-circle`})]),key:`0`}:void 0]),1032,[`loading`,`disabled`])],8,[`to`])):R(``,!0)],64))}}),ok=({device:e,messages:t})=>{let n=pn(),r=n.getStore(jo),i=n.getStore(No),a=n.getStore(Mo),{t:o}=M(),s=Tn(),c=On(),{supportedDevices:l,fetchDevices:u}=ek(),d=j($.NONE),m,h=p(()=>{let t=i.findForDevice(e.id).find(e=>e.category===Jn.device_information);if(t!==void 0){let e=a.findForChannel(t.id).find(e=>e.category===rr.model)?.value?.value;return typeof e==`string`?e:void 0}}),g=p(()=>{let e=h.value;return typeof e==`string`&&l.value.find(t=>t.models.includes(e.toUpperCase()))||null}),_=p(()=>wa(g.value?.categories||[],[e=>o(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:o(`devicesModule.categories.devices.${e}`)}))),v=P(e),y=gn(f(v)),b=j(void 0),x=j(!1),S=async()=>{let n=e.draft,i=t&&t.error?t.error:e.draft?o(`devicesShellyV1Plugin.messages.devices.notCreated`,{device:e.name}):o(`devicesShellyV1Plugin.messages.devices.notEdited`,{device:e.name});if(b.value.clearValidate(),!await b.value.validate())throw new gs(`Form not valid`);let a=WO.safeParse(v);if(!a.success)throw c.error(`Schema validation failed with:`,a.error),new HO(`Failed to validate edit device model.`);let l={...a.data};(0,Xd.isEqual)(l.roomId,y.roomId)&&delete l.roomId,d.value=$.WORKING;try{await r.edit({id:e.id,data:{...l,type:e.type}}),e.draft&&await r.save({id:e.id})}catch(e){throw d.value=$.ERROR,m=window.setTimeout(C,2e3),e instanceof ps&&e.code===422?s.error(e.message):s.error(i),e}return d.value=$.OK,m=window.setTimeout(C,2e3),n?(s.success(o(t&&t.success?t.success:`devicesShellyV1Plugin.messages.devices.created`,{device:e.name})),`added`):(s.success(o(t&&t.success?t.success:`devicesShellyV1Plugin.messages.devices.edited`,{device:e.name})),x.value=!1,y=gn(f(v)),`saved`)},C=()=>{window.clearTimeout(m),d.value=$.NONE};return Tr(()=>{u().catch(()=>{})}),F(v,()=>{x.value=!(0,Xd.isEqual)(f(v),y)}),{categoriesOptions:_,supportedDevices:l,model:v,formEl:b,formChanged:x,submit:S,clear:C,formResult:d}},sk=k({name:`ShellyV1DeviceEditForm`,__name:`shelly-v1-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=ok({device:n.device}),f=window.history.state?.prefills??null;if(f){s.hostname=f.hostname??s.hostname,s.password=f.password??s.password;let e={...window.history.state};delete e.prefills,history.replaceState(e,``)}let p=P({name:[{required:!0,message:a(`devicesShellyV1Plugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesShellyV1Plugin.fields.devices.category.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[1]||=e=>L(s).name=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[2]||=e=>L(s).category=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[3]||=e=>L(s).description=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[4]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.hostname.title`),prop:`hostname`},{default:B(()=>[D(L(U),{modelValue:L(s).hostname,"onUpdate:modelValue":t[5]||=e=>L(s).hostname=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.hostname.placeholder`),name:`hostname`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesShellyV1Plugin.fields.devices.password.title`),prop:`password`},{default:B(()=>[D(L(U),{modelValue:L(s).password,"onUpdate:modelValue":t[6]||=e=>L(s).password=e,placeholder:L(a)(`devicesShellyV1Plugin.fields.devices.password.placeholder`),name:`password`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),ck=k({name:`ShellyV1ConfigForm`,__name:`shelly-v1-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`devicesShellyV1Plugin.messages.config.edited`),error:i(`devicesShellyV1Plugin.messages.config.notEdited`)}}),d=P({"timeouts.requestTimeout":[{required:!0,message:i(`devicesShellyV1Plugin.fields.config.timeouts.requestTimeout.validation.required`),trigger:`change`},{type:`integer`,message:i(`devicesShellyV1Plugin.fields.config.timeouts.requestTimeout.validation.number`),validator:(e,t)=>t>=1,trigger:`change`}],"timeouts.staleTimeout":[{required:!0,message:i(`devicesShellyV1Plugin.fields.config.timeouts.staleTimeout.validation.required`),trigger:`change`},{type:`integer`,message:i(`devicesShellyV1Plugin.fields.config.timeouts.staleTimeout.validation.number`),validator:(e,t)=>t>=1,trigger:`change`}]});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`devicesShellyV1Plugin.headings.aboutPluginStatus`),description:L(i)(`devicesShellyV1Plugin.texts.aboutPluginStatus`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesShellyV1Plugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[5]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(i)(`devicesShellyV1Plugin.headings.aboutDiscovery`),description:L(i)(`devicesShellyV1Plugin.texts.aboutDiscovery`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesShellyV1Plugin.fields.config.discovery.enabled.title`),prop:`discovery.enabled`,class:`mt-3`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(o).discovery.enabled,"onUpdate:modelValue":t[1]||=e=>L(o).discovery.enabled=e,name:`discoveryEnabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`devicesShellyV1Plugin.fields.config.discovery.interface.title`),prop:`discovery.interface`},{default:B(()=>[D(L(U),{modelValue:L(o).discovery.interface,"onUpdate:modelValue":t[2]||=e=>L(o).discovery.interface=e,placeholder:L(i)(`devicesShellyV1Plugin.fields.config.discovery.interface.placeholder`),name:`discoveryInterface`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),t[6]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(i)(`devicesShellyV1Plugin.headings.aboutTimeouts`),description:L(i)(`devicesShellyV1Plugin.texts.aboutTimeouts`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesShellyV1Plugin.fields.config.timeouts.requestTimeout.title`),prop:`timeouts.requestTimeout`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(o).timeouts.requestTimeout,"onUpdate:modelValue":t[3]||=e=>L(o).timeouts.requestTimeout=e,placeholder:L(i)(`devicesShellyV1Plugin.fields.config.timeouts.requestTimeout.placeholder`),name:`timeouts.requestTimeout`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`devicesShellyV1Plugin.fields.config.timeouts.staleTimeout.title`),prop:`timeouts.staleTimeout`},{default:B(()=>[D(L(U),{modelValue:L(o).timeouts.staleTimeout,"onUpdate:modelValue":t[4]||=e=>L(o).timeouts.staleTimeout=e,placeholder:L(i)(`devicesShellyV1Plugin.fields.config.timeouts.staleTimeout.placeholder`),name:`timeouts.staleTimeout`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),lk=e=>e===`ready`||e===`already_registered`,uk=e=>e===`needs_password`?`needs_credentials`:e,dk=e=>e.registeredDeviceName||e.name||e.displayName||e.hostname,fk=1e3,pk=3e4,mk=()=>{let{t:e}=M(),t=Zn(),n=pn(),r=Tn(),i=n.getStore(jo),a=j(null),o=j($.NONE),s=j([]),c=P({}),l=null,u=0,d=fk,f=j(null),m=j(0),h=j(0),g=on({interval:1e3}),_=p(()=>wa(a.value?.devices??[],[e=>+!lk(e.status),e=>e.hostname],[`asc`,`asc`])),v=p(()=>{if(a.value===null)return 0;if(a.value.status!==`running`)return 100;if(f.value===null||h.value===0)return 0;let e=Math.max(0,g.value.getTime()-f.value),t=Math.max(0,m.value-e),n=h.value-t;return Math.min(100,Math.max(0,Math.round(n/h.value*100)))}),y=t=>wa(t.categories,[t=>e(`devicesModule.categories.devices.${t}`)],[`asc`]).map(t=>({value:t,label:e(`devicesModule.categories.devices.${t}`)})),b=p(()=>_.value.map(e=>({key:e.hostname,label:e.registeredDeviceName||e.name||e.displayName||e.model||e.hostname,subLabel:e.displayName??e.model,identifier:e.hostname,status:uk(e.status),adoptable:lk(e.status),willUpdate:e.status===`already_registered`,suggestedName:dk(e),suggestedCategory:e.registeredDeviceCategory??e.suggestedCategory,categoryOptions:y(e)}))),x=p(()=>s.value.map(e=>({key:e.hostname,name:e.name,identifier:e.hostname,status:e.status,error:e.error}))),S=()=>{w();let e=u;l=window.setTimeout(async()=>{l=null;try{await te(),d=fk}catch(e){if(e instanceof VO&&e.code===404)return;d=Math.min(d*2,pk)}u===e&&(a.value===null||a.value.status!==`running`||S())},d)},C=()=>{d=fk,S()},w=()=>{l!==null&&(window.clearTimeout(l),l=null)},T=e=>{a.value=e,f.value=Date.now(),m.value=e.remainingSeconds*1e3,h.value=Math.max(1,new Date(e.expiresAt).getTime()-new Date(e.startedAt).getTime()),e.status!==`running`&&w()},E=()=>{for(let e of Object.keys(c))delete c[e];s.value=[]},ee=()=>{a.value!==null&&a.value.status===`running`&&C()},D=async()=>{o.value=$.WORKING,w(),u+=1;let n=u,i;try{i=await t.client.POST(`/${Ie}/${LO}/devices/discovery`)}catch(e){throw u===n&&(o.value=$.ERROR,ee()),e}let{data:a,error:s,response:c}=i;if(u!==n)return;if(a!==void 0){E(),T($O(a.data)),o.value=$.NONE,C();return}let l=s?Kn(s,e(`devicesShellyV1Plugin.messages.wizard.discoveryNotStarted`)):e(`devicesShellyV1Plugin.messages.wizard.discoveryNotStarted`);throw o.value=$.ERROR,r.error(l),ee(),new VO(l,c.status)},te=async()=>{if(a.value===null)return;let n=u,{data:r,error:i,response:o}=await t.client.GET(`/${Ie}/${LO}/devices/discovery/{id}`,{params:{path:{id:a.value.id}}});if(u===n){if(r!==void 0){T($O(r.data));return}throw new VO(i?Kn(i,e(`devicesShellyV1Plugin.messages.wizard.discoveryNotLoaded`)):e(`devicesShellyV1Plugin.messages.wizard.discoveryNotLoaded`),o.status)}},ne=async n=>{let i=(n.hostname??``).trim();if(i.length===0){let t=e(`devicesShellyV1Plugin.fields.devices.hostname.validation.required`);throw r.error(t),new HO(t)}let s=(n.password??``).trim()||null;if(a.value===null&&await D(),a.value===null)return;o.value=$.WORKING;let{data:l,error:u,response:d}=await t.client.POST(`/${Ie}/${LO}/devices/discovery/{id}/manual`,{params:{path:{id:a.value.id}},body:{data:QO({hostname:i,password:s})}});if(l!==void 0){let e=$O(l.data),t=e.devices.find(e=>e.hostname===i);s!==null&&t?.authentication.valid!==!1&&(c[i]=s),T(e),o.value=$.NONE;return}let f=u?Kn(u,e(`devicesShellyV1Plugin.messages.wizard.manualNotAdded`)):e(`devicesShellyV1Plugin.messages.wizard.manualNotAdded`);throw o.value=$.ERROR,r.error(f),new VO(f,d.status)},re=async()=>{try{await D()}catch{}},O=p(()=>[{type:`banner`,id:`hint`,severity:`info`,title:e(`devicesShellyV1Plugin.texts.wizard.discovery`)},{type:`progress`,id:`scan`,label:e(`devicesShellyV1Plugin.texts.wizard.scanStatus`,{count:_.value.length}),percentage:v.value,state:a.value?.status===`finished`?`success`:void 0,visible:!0},{type:`action`,id:`restart-scan`,label:e(`devicesShellyV1Plugin.buttons.wizard.restart.title`),icon:`mdi:radar`,loading:o.value===$.WORKING,handler:re},{type:`form`,id:`manual`,fields:[{key:`hostname`,label:e(`devicesShellyV1Plugin.fields.devices.hostname.title`),placeholder:e(`devicesShellyV1Plugin.fields.devices.hostname.placeholder`)},{key:`password`,label:e(`devicesShellyV1Plugin.fields.devices.password.title`),placeholder:e(`devicesShellyV1Plugin.fields.devices.password.placeholder`),secret:!0}],submitLabel:e(`devicesShellyV1Plugin.buttons.wizard.addManual.title`),submitIcon:`mdi:plus`,submitDisabled:o.value===$.WORKING,loading:o.value===$.WORKING,handler:ne}]);return{title:e(`devicesShellyV1Plugin.headings.wizard.title`),subtitle:e(`devicesShellyV1Plugin.subHeadings.wizard`),breadcrumbLabel:e(`devicesShellyV1Plugin.breadcrumbs.wizard`),pluginType:RO,identifierLabel:e(`devicesShellyV1Plugin.fields.devices.hostname.title`),rows:b,results:x,columns:[],controls:O,sessionKey:p(()=>a.value?.id??null),ready:p(()=>!0),busy:p(()=>o.value===$.WORKING),capabilities:{addMore:!1},start:D,adopt:async n=>{o.value=$.WORKING;let r=_.value.slice();if(a.value!==null)try{await te()}catch{}let l=[],u=[];for(let t of n){let n=_.value.find(e=>e.hostname===t.key)??r.find(e=>e.hostname===t.key);if(n===void 0||n.identifier===null){l.push({hostname:t.key,name:t.name,status:`failed`,error:e(`devicesShellyV1Plugin.messages.wizard.adoptionNotCreated`)});continue}u.push({identifier:n.identifier,hostname:n.hostname,name:t.name.trim()||dk(n),category:t.category,password:c[n.hostname]??null})}if(u.length>0)try{let{data:n,error:r,response:a}=await t.client.POST(`/${Ie}/${LO}/devices/adopt`,{body:{data:{devices:u}}});if(n===void 0||!a.ok)throw new VO(r?Kn(r,e(`devicesShellyV1Plugin.messages.wizard.adoptionNotCreated`)):e(`devicesShellyV1Plugin.messages.wizard.adoptionNotCreated`),a.status);for(let e of n.data)l.push({hostname:e.hostname,name:e.name,status:e.status,error:e.error});await i.fetch()}catch(t){let n=t instanceof Error?t.message:e(`devicesShellyV1Plugin.messages.wizard.adoptionNotCreated`);for(let e of u)l.push({hostname:e.hostname,name:e.name,status:`failed`,error:n})}return s.value=l,o.value=l.some(e=>e.status===`failed`)?$.ERROR:$.OK,x.value},dispose:async()=>{w(),u+=1}}},hk={"cs-CZ":{headings:{aboutPluginStatus:`Stav pluginu`,aboutDiscovery:`Nastavení vyhledávání`,aboutTimeouts:`Nastavení časových limitů`,device:{deviceConnection:`Připojení zařízení`,information:`Informace o zařízení`,supported:`Gratulujeme! Zařízení je podporováno`,notSupported:`Je nám líto, vaše zařízení není podporováno`,model:`Model`,firmware:`Firmware`},wizard:{title:`Průvodce vyhledáním Shelly Gen 1`}},subHeadings:{wizard:`Najděte a adoptujte zařízení Shelly Gen 1 ve vaší síti`},breadcrumbs:{wizard:`průvodce vyhledáním`},fields:{devices:{id:{title:`Interní identifikátor`,placeholder:`ID zařízení`},category:{title:`Kategorie`,placeholder:`Kategorie zařízení`,validation:{required:`Vyberte prosím kategorii zařízení`}},name:{title:`Název`,placeholder:`Název zařízení`,validation:{required:`Vyplňte prosím název zařízení`}},description:{title:`Popis`,placeholder:`Popis zařízení`},enabled:{title:`Povoleno`,placeholder:`Povolit nebo zakázat zařízení`},password:{title:`Heslo administrátora`,placeholder:`Zadejte heslo zařízení, pokud je chráněno`},hostname:{title:`Název hostitele zařízení`,placeholder:`Síťový název nebo IP adresa zařízení`,validation:{required:`Vyplňte prosím název hostitele nebo IP adresu zařízení`}}},config:{enabled:{title:`Povoleno`},discovery:{enabled:{title:`Vyhledávání povoleno`},interface:{title:`Rozhraní`,placeholder:`Síťové rozhraní k použití. Pokud není zadáno, budou použita všechna dostupná rozhraní.`}},timeouts:{requestTimeout:{title:`Časový limit požadavku`,placeholder:`Čas v sekundách pro čekání na odpověď před přerušením požadavku.`,validation:{required:`Vyplňte prosím časový limit požadavku`,number:`Časový limit požadavku musí být kladné celé číslo`}},staleTimeout:{title:`Časový limit zastarání`,placeholder:`Čas v sekundách, po kterém je zařízení považováno za offline, pokud není přijata aktualizace stavu.`,validation:{required:`Vyplňte prosím časový limit zastarání`,number:`Časový limit zastarání musí být kladné celé číslo`}}}}},messages:{config:{edited:`Změny uloženy! Konfigurace pluginu Shelly Gen 1 byla aktualizována.`,notEdited:`Něco se pokazilo. Aktualizace konfigurace pluginu Shelly Gen 1 nebyla úspěšná.`},devices:{exists:`Zařízení se zadaným názvem hostitele a heslem je již registrováno v systému.`,created:`Nové zařízení Shelly Gen 1 bylo úspěšně přidáno.`,notCreated:`Něco se pokazilo. Nepodařilo se vytvořit zařízení Shelly Gen 1.`,notChecked:`Něco se pokazilo. Nepodařilo se načíst informace o zařízení. Zkontrolujte název hostitele nebo heslo zařízení.`,notReachable:`Zařízení není dostupné. Zkontrolujte prosím název hostitele nebo IP adresu.`,invalidPassword:`Neplatné heslo. Zkontrolujte prosím heslo zařízení.`,edited:`Změny uloženy! Zařízení Shelly Gen 1: {device} bylo aktualizováno.`,notEdited:`Něco se pokazilo. Aktualizace zařízení Shelly Gen 1 nebyla úspěšná.`,failedLoadSupportedDevices:`Něco se pokazilo. Nepodařilo se načíst podporovaná zařízení pluginu.`},wizard:{discoveryNotStarted:`Něco se pokazilo. Vyhledávání Shelly se nepodařilo spustit.`,discoveryNotLoaded:`Něco se pokazilo. Vyhledávání Shelly se nepodařilo načíst.`,manualNotAdded:`Něco se pokazilo. Ruční vyhledání zařízení Shelly se nepodařilo přidat.`,adoptionNotCreated:`Něco se pokazilo. Zařízení Shelly se nepodařilo adoptovat.`}},texts:{aboutPluginStatus:`Povolte nebo zakažte integraci zařízení Shelly Gen 1. Pokud je povolena, zařízení Shelly mohou být vyhledána a ovládána prostřednictvím Smart Panelu.`,aboutDiscovery:`Nakonfigurujte, jak plugin vyhledává zařízení Shelly Gen 1 ve vaší lokální síti pomocí Multicast DNS (mDNS). To umožňuje automatickou detekci bez nutnosti ručního zadávání IP adres.`,aboutTimeouts:`Nakonfigurujte nastavení časových limitů pro HTTP komunikaci se zařízeními Shelly Gen 1. Tato nastavení řídí zpracování požadavků a monitorování stavu zařízení.`,wizard:{discovery:`Průvodce vyhledá zařízení Shelly Gen 1 v lokální síti a přijímá také ručně zadaný hostname nebo IP adresu.`,scanStatus:`Nalezeno zařízení: {count}`}},buttons:{next:{title:`Další`},wizard:{restart:{title:`Vyhledat znovu`},addManual:{title:`Přidat`}}}},"de-DE":{headings:{aboutPluginStatus:`Plugin-Status`,aboutDiscovery:`Erkennungseinstellungen`,aboutTimeouts:`Zeitlimit-Einstellungen`,device:{deviceConnection:`Geräteverbindung`,information:`Geräteinformationen`,supported:`Glückwunsch! Gerät wird unterstützt`,notSupported:`Leider wird Ihr Gerät nicht unterstützt`,model:`Modell`,firmware:`Firmware`},wizard:{title:`Shelly Gen 1 Discovery-Assistent`}},subHeadings:{wizard:`Finden und übernehmen Sie Shelly Gen 1-Geräte in Ihrem Netzwerk`},breadcrumbs:{wizard:`Discovery-Assistent`},fields:{devices:{id:{title:`Interner Bezeichner`,placeholder:`Geräte-ID`},category:{title:`Kategorie`,placeholder:`Gerätekategorie`,validation:{required:`Bitte wählen Sie eine Gerätekategorie`}},name:{title:`Name`,placeholder:`Gerätename`,validation:{required:`Bitte geben Sie den Gerätenamen ein`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung`},enabled:{title:`Aktiviert`,placeholder:`Gerät aktivieren oder deaktivieren`},password:{title:`Admin-Passwort`,placeholder:`Gerätepasswort eingeben, falls das Gerät geschützt ist`},hostname:{title:`Geräte-Hostname`,placeholder:`Netzwerkname oder IP-Adresse des Geräts`,validation:{required:`Bitte geben Sie den Geräte-Hostname oder die IP-Adresse ein`}}},config:{enabled:{title:`Aktiviert`},discovery:{enabled:{title:`Erkennung aktiviert`},interface:{title:`Schnittstelle`,placeholder:`Die zu verwendende Netzwerkschnittstelle. Wenn keine angegeben ist, werden alle verfügbaren Schnittstellen verwendet.`}},timeouts:{requestTimeout:{title:`Anfragezeitlimit`,placeholder:`Die Zeit in Sekunden, die auf eine Antwort gewartet wird, bevor eine Anfrage abgebrochen wird.`,validation:{required:`Bitte geben Sie das Anfragezeitlimit ein`,number:`Anfragezeitlimit muss eine positive Ganzzahl sein`}},staleTimeout:{title:`Veraltetungs-Zeitlimit`,placeholder:`Die Zeit in Sekunden, bevor ein Gerät als offline gilt, wenn kein Statusupdate empfangen wird.`,validation:{required:`Bitte geben Sie das Veraltetungs-Zeitlimit ein`,number:`Veraltetungs-Zeitlimit muss eine positive Ganzzahl sein`}}}}},messages:{config:{edited:`Änderungen gespeichert! Die Shelly Gen 1 Plugin-Konfiguration wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Aktualisierung der Shelly Gen 1 Plugin-Konfiguration war nicht erfolgreich.`},devices:{exists:`Ein Gerät mit diesem Hostname und Passwort ist bereits im System registriert.`,created:`Neues Shelly Gen 1-Gerät erfolgreich hinzugefügt.`,notCreated:`Etwas ist schiefgelaufen. Das Shelly Gen 1-Gerät konnte nicht erstellt werden.`,notChecked:`Etwas ist schiefgelaufen. Geräteinformationen konnten nicht geladen werden. Überprüfen Sie den Geräte-Hostname oder das Passwort.`,notReachable:`Gerät ist nicht erreichbar. Bitte überprüfen Sie den Hostname oder die IP-Adresse.`,invalidPassword:`Ungültiges Passwort. Bitte überprüfen Sie das Gerätepasswort.`,edited:`Änderungen gespeichert! Das Shelly Gen 1-Gerät: {device} wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Aktualisierung des Shelly Gen 1-Geräts war nicht erfolgreich.`,failedLoadSupportedDevices:`Etwas ist schiefgelaufen. Die unterstützten Geräte des Plugins konnten nicht geladen werden.`},wizard:{discoveryNotStarted:`Etwas ist schiefgelaufen. Die Shelly-Erkennung konnte nicht gestartet werden.`,discoveryNotLoaded:`Etwas ist schiefgelaufen. Die Shelly-Erkennung konnte nicht geladen werden.`,manualNotAdded:`Etwas ist schiefgelaufen. Die manuelle Shelly-Gerätesuche konnte nicht hinzugefügt werden.`,adoptionNotCreated:`Etwas ist schiefgelaufen. Das Shelly-Gerät konnte nicht übernommen werden.`}},texts:{aboutPluginStatus:`Aktivieren oder deaktivieren Sie die Shelly Gen 1 Geräteintegration. Wenn aktiviert, können Shelly-Geräte über das Smart Panel erkannt und gesteuert werden.`,aboutDiscovery:`Konfigurieren Sie, wie das Plugin Shelly Gen 1-Geräte in Ihrem lokalen Netzwerk über Multicast DNS (mDNS) erkennt. Dies ermöglicht die automatische Erkennung ohne manuelle Eingabe von IP-Adressen.`,aboutTimeouts:`Konfigurieren Sie Zeitlimit-Einstellungen für die HTTP-Kommunikation mit Shelly Gen 1-Geräten. Diese Einstellungen steuern die Anfrageverarbeitung und Gerätestatusüberwachung.`,wizard:{discovery:`Der Assistent durchsucht das lokale Netzwerk nach Shelly Gen 1-Geräten und akzeptiert auch einen manuell eingegebenen Hostname oder eine IP-Adresse.`,scanStatus:`{count} Geräte gefunden`}},buttons:{next:{title:`Weiter`},wizard:{restart:{title:`Erneut scannen`},addManual:{title:`Hinzufügen`}}}},"en-US":{headings:{aboutPluginStatus:`Plugin Status`,aboutDiscovery:`Discovery settings`,aboutTimeouts:`Timeout settings`,device:{deviceConnection:`Device connection`,information:`Device information`,supported:`Congrats! Device is supported`,notSupported:`We are sorry, your device is not supported`,model:`Model`,firmware:`Firmware`},wizard:{title:`Shelly Gen 1 discovery wizard`}},subHeadings:{wizard:`Find and adopt Shelly Gen 1 devices on your network`},breadcrumbs:{wizard:`discovery wizard`},fields:{devices:{id:{title:`Internal identifier`,placeholder:`Device id`},category:{title:`Category`,placeholder:`Device category`,validation:{required:`Please select device category`}},name:{title:`Name`,placeholder:`Device name`,validation:{required:`Please fill in device name`}},description:{title:`Description`,placeholder:`Device description`},enabled:{title:`Enabled`,placeholder:`Enable or disable device`},password:{title:`Admin password`,placeholder:`Provide device password if device is protected`},hostname:{title:`Device hostname`,placeholder:`Device network name or IP address`,validation:{required:`Please fill in device hostname or IP address`}}},config:{enabled:{title:`Enabled`},discovery:{enabled:{title:`Discovery enabled`},interface:{title:`Interface`,placeholder:`The network interface to use. If none is specified, all available interfaces will be used.`}},timeouts:{requestTimeout:{title:`Request timeout`,placeholder:`The time, in seconds, to wait for a response before a request is aborted.`,validation:{required:`Please fill in request timeout`,number:`Request timeout must be a positive integer`}},staleTimeout:{title:`Stale timeout`,placeholder:`The time, in seconds, before a device is considered offline if no status update is received.`,validation:{required:`Please fill in stale timeout`,number:`Stale timeout must be a positive integer`}}}}},messages:{config:{edited:`Changes saved! The Shelly Gen 1 plugin config has been updated.`,notEdited:`Something went wrong. Shelly Gen 1 plugin config update was not successful.`},devices:{exists:`Device with provided hostname and password is already registered in system.`,created:`New Shelly Gen 1 device added successfully.`,notCreated:`Something went wrong. Unable to create the Shelly Gen 1 device.`,notChecked:`Something went wrong. Device information could not be loaded. Check the device hostname or password.`,notReachable:`Device is not reachable. Please check the hostname or IP address.`,invalidPassword:`Invalid password. Please check the device password.`,edited:`Changes saved! The Shelly Gen 1 device: {device} has been updated.`,notEdited:`Something went wrong. Shelly Gen 1 device update was not successful.`,failedLoadSupportedDevices:`Something went wrong. Plugin supported devices could not be loaded.`},wizard:{discoveryNotStarted:`Something went wrong. Shelly discovery could not be started.`,discoveryNotLoaded:`Something went wrong. Shelly discovery could not be loaded.`,manualNotAdded:`Something went wrong. Manual Shelly device lookup could not be added.`,adoptionNotCreated:`Something went wrong. Shelly device could not be adopted.`}},texts:{aboutPluginStatus:`Enable or disable the Shelly Gen 1 device integration. When enabled, Shelly devices can be discovered and controlled through the Smart Panel.`,aboutDiscovery:`Configure how the plugin discovers Shelly Gen 1 devices on your local network using Multicast DNS (mDNS). This enables automatic detection without needing to manually enter IP addresses.`,aboutTimeouts:`Configure timeout settings for HTTP communication with Shelly Gen 1 devices. These settings control request handling and device state monitoring.`,wizard:{discovery:`The wizard scans the local network for Shelly Gen 1 devices and also accepts a manually entered hostname or IP address.`,scanStatus:`{count} devices found`}},buttons:{next:{title:`Next`},wizard:{restart:{title:`Scan again`},addManual:{title:`Add`}}}},"es-ES":{headings:{aboutPluginStatus:`Estado del plugin`,aboutDiscovery:`Configuración de descubrimiento`,aboutTimeouts:`Configuración de tiempos de espera`,device:{deviceConnection:`Conexión del dispositivo`,information:`Información del dispositivo`,supported:`¡Felicidades! El dispositivo es compatible`,notSupported:`Lo sentimos, su dispositivo no es compatible`,model:`Modelo`,firmware:`firmware`},wizard:{title:`Asistente de descubrimiento de Shelly Gen 1`}},subHeadings:{wizard:`Encuentre y adopte dispositivos Shelly Gen 1 en su red`},breadcrumbs:{wizard:`asistente de descubrimiento`},fields:{devices:{id:{title:`Identificador interno`,placeholder:`ID del dispositivo`},category:{title:`Categoría`,placeholder:`Categoría del dispositivo`,validation:{required:`Por favor, seleccione la categoría del dispositivo`}},name:{title:`Nombre`,placeholder:`Nombre del dispositivo`,validation:{required:`Por favor, introduzca el nombre del dispositivo`}},description:{title:`Descripción`,placeholder:`Descripción del dispositivo`},enabled:{title:`Habilitado`,placeholder:`Habilitar o deshabilitar el dispositivo`},password:{title:`Contraseña de administrador`,placeholder:`Proporcione la contraseña del dispositivo si está protegido`},hostname:{title:`Nombre de host del dispositivo`,placeholder:`Nombre de red o dirección IP del dispositivo`,validation:{required:`Por favor, introduzca el nombre de host o la dirección IP del dispositivo`}}},config:{enabled:{title:`Habilitado`},discovery:{enabled:{title:`Descubrimiento habilitado`},interface:{title:`Interfaz`,placeholder:`La interfaz de red a utilizar. Si no se especifica ninguna, se utilizarán todas las interfaces disponibles.`}},timeouts:{requestTimeout:{title:`Tiempo de espera de solicitud`,placeholder:`El tiempo, en segundos, de espera para una respuesta antes de abortar la solicitud.`,validation:{required:`Por favor, introduzca el tiempo de espera de solicitud`,number:`El tiempo de espera de solicitud debe ser un entero positivo`}},staleTimeout:{title:`Tiempo de espera de inactividad`,placeholder:`El tiempo, en segundos, antes de que un dispositivo se considere desconectado si no se recibe ninguna actualización de estado.`,validation:{required:`Por favor, introduzca el tiempo de espera de inactividad`,number:`El tiempo de espera de inactividad debe ser un entero positivo`}}}}},messages:{config:{edited:`¡Cambios guardados! La configuración del plugin Shelly Gen 1 ha sido actualizada.`,notEdited:`Algo salió mal. La actualización de la configuración del plugin Shelly Gen 1 no fue exitosa.`},devices:{exists:`El dispositivo con el nombre de host y la contraseña proporcionados ya está registrado en el sistema.`,created:`Nuevo dispositivo Shelly Gen 1 agregado correctamente.`,notCreated:`Algo salió mal. No se pudo crear el dispositivo Shelly Gen 1.`,notChecked:`Algo salió mal. No se pudo cargar la información del dispositivo. Verifique el nombre de host o la contraseña del dispositivo.`,notReachable:`El dispositivo no es accesible. Por favor, verifique el nombre de host o la dirección IP.`,invalidPassword:`Contraseña incorrecta. Por favor, verifique la contraseña del dispositivo.`,edited:`¡Cambios guardados! El dispositivo Shelly Gen 1: {device} ha sido actualizado.`,notEdited:`Algo salió mal. La actualización del dispositivo Shelly Gen 1 no fue exitosa.`,failedLoadSupportedDevices:`Algo salió mal. No se pudieron cargar los dispositivos compatibles del plugin.`},wizard:{discoveryNotStarted:`Algo salió mal. No se pudo iniciar el descubrimiento de Shelly.`,discoveryNotLoaded:`Algo salió mal. No se pudo cargar el descubrimiento de Shelly.`,manualNotAdded:`Algo salió mal. No se pudo añadir la búsqueda manual del dispositivo Shelly.`,adoptionNotCreated:`Algo salió mal. No se pudo adoptar el dispositivo Shelly.`}},texts:{aboutPluginStatus:`Habilitar o deshabilitar la integración de dispositivos Shelly Gen 1. Cuando está habilitado, los dispositivos Shelly pueden ser descubiertos y controlados a través del Smart Panel.`,aboutDiscovery:`Configure cómo el plugin descubre dispositivos Shelly Gen 1 en su red local usando DNS Multidifusión (mDNS). Esto permite la detección automática sin necesidad de introducir direcciones IP manualmente.`,aboutTimeouts:`Configure los tiempos de espera para la comunicación HTTP con los dispositivos Shelly Gen 1. Estos ajustes controlan el manejo de solicitudes y la monitorización del estado del dispositivo.`,wizard:{discovery:`El asistente escanea la red local en busca de dispositivos Shelly Gen 1 y también acepta un nombre de host o dirección IP introducidos manualmente.`,scanStatus:`{count} dispositivos encontrados`}},buttons:{next:{title:`Siguiente`},wizard:{restart:{title:`Escanear de nuevo`},addManual:{title:`Añadir`}}}},"pl-PL":{headings:{aboutPluginStatus:`Status wtyczki`,aboutDiscovery:`Ustawienia wykrywania`,aboutTimeouts:`Ustawienia limitow czasu`,device:{deviceConnection:`Polaczenie urzadzenia`,information:`Informacje o urzadzeniu`,supported:`Gratulacje! Urzadzenie jest obslugiwane`,notSupported:`Przepraszamy, Twoje urzadzenie nie jest obslugiwane`,model:`Model`,firmware:`Oprogramowanie sprzętowe`},wizard:{title:`Kreator wyszukiwania Shelly Gen 1`}},subHeadings:{wizard:`Znajdz i adoptuj urzadzenia Shelly Gen 1 w swojej sieci`},breadcrumbs:{wizard:`kreator wyszukiwania`},fields:{devices:{id:{title:`Identyfikator wewnetrzny`,placeholder:`ID urzadzenia`},category:{title:`Kategoria`,placeholder:`Kategoria urzadzenia`,validation:{required:`Prosze wybrac kategorie urzadzenia`}},name:{title:`Nazwa`,placeholder:`Nazwa urzadzenia`,validation:{required:`Prosze podac nazwe urzadzenia`}},description:{title:`Opis`,placeholder:`Opis urzadzenia`},enabled:{title:`Wlaczony`,placeholder:`Wlacz lub wylacz urzadzenie`},password:{title:`Haslo administratora`,placeholder:`Podaj haslo urzadzenia, jesli urzadzenie jest chronione`},hostname:{title:`Nazwa hosta urzadzenia`,placeholder:`Nazwa sieciowa lub adres IP urzadzenia`,validation:{required:`Prosze podac nazwe hosta lub adres IP urzadzenia`}}},config:{enabled:{title:`Wlaczony`},discovery:{enabled:{title:`Wykrywanie wlaczone`},interface:{title:`Interfejs`,placeholder:`Interfejs sieciowy do uzycia. Jesli nie podano, wszystkie dostepne interfejsy zostana uzyte.`}},timeouts:{requestTimeout:{title:`Limit czasu zadania`,placeholder:`Czas w sekundach oczekiwania na odpowiedz przed przerwaniem zadania.`,validation:{required:`Prosze podac limit czasu zadania`,number:`Limit czasu zadania musi byc dodatnia liczba calkowita`}},staleTimeout:{title:`Limit czasu przestarzalosci`,placeholder:`Czas w sekundach, po jakim urzadzenie jest uznawane za offline, jesli nie otrzymano aktualizacji stanu.`,validation:{required:`Prosze podac limit czasu przestarzalosci`,number:`Limit czasu przestarzalosci musi byc dodatnia liczba calkowita`}}}}},messages:{config:{edited:`Zmiany zapisane! Konfiguracja wtyczki Shelly Gen 1 zostala zaktualizowana.`,notEdited:`Cos poszlo nie tak. Aktualizacja konfiguracji wtyczki Shelly Gen 1 nie powiodla sie.`},devices:{exists:`Urzadzenie z podana nazwa hosta i haslem jest juz zarejestrowane w systemie.`,created:`Nowe urzadzenie Shelly Gen 1 zostalo pomyslnie dodane.`,notCreated:`Cos poszlo nie tak. Nie udalo sie utworzyc urzadzenia Shelly Gen 1.`,notChecked:`Cos poszlo nie tak. Informacje o urzadzeniu nie mogly zostac zaladowane. Sprawdz nazwe hosta lub haslo urzadzenia.`,notReachable:`Urzadzenie jest nieosiagalne. Sprawdz nazwe hosta lub adres IP.`,invalidPassword:`Nieprawidlowe haslo. Sprawdz haslo urzadzenia.`,edited:`Zmiany zapisane! Urzadzenie Shelly Gen 1: {device} zostalo zaktualizowane.`,notEdited:`Cos poszlo nie tak. Aktualizacja urzadzenia Shelly Gen 1 nie powiodla sie.`,failedLoadSupportedDevices:`Cos poszlo nie tak. Obslugiwane urzadzenia wtyczki nie mogly zostac zaladowane.`},wizard:{discoveryNotStarted:`Cos poszlo nie tak. Wyszukiwanie Shelly nie moglo zostac uruchomione.`,discoveryNotLoaded:`Cos poszlo nie tak. Wyszukiwanie Shelly nie moglo zostac zaladowane.`,manualNotAdded:`Cos poszlo nie tak. Reczne wyszukanie urzadzenia Shelly nie moglo zostac dodane.`,adoptionNotCreated:`Cos poszlo nie tak. Urzadzenie Shelly nie moglo zostac adoptowane.`}},texts:{aboutPluginStatus:`Wlacz lub wylacz integracje urzadzen Shelly Gen 1. Po wlaczeniu urzadzenia Shelly moga byc wykrywane i sterowane przez Smart Panel.`,aboutDiscovery:`Skonfiguruj, jak wtyczka wykrywa urzadzenia Shelly Gen 1 w sieci lokalnej za pomoca Multicast DNS (mDNS).`,aboutTimeouts:`Skonfiguruj ustawienia limitow czasu komunikacji HTTP z urzadzeniami Shelly Gen 1.`,wizard:{discovery:`Kreator skanuje siec lokalna w poszukiwaniu urzadzen Shelly Gen 1 i akceptuje takze recznie wprowadzona nazwe hosta lub adres IP.`,scanStatus:`Znaleziono urzadzen: {count}`}},buttons:{next:{title:`Dalej`},wizard:{restart:{title:`Skanuj ponownie`},addManual:{title:`Dodaj`}}}},"sk-SK":{headings:{aboutPluginStatus:`Stav pluginu`,aboutDiscovery:`Nastavenia objavovania`,aboutTimeouts:`Nastavenia časových limitov`,device:{deviceConnection:`Pripojenie zariadenia`,information:`Informácie o zariadení`,supported:`Gratulujeme! Zariadenie je podporované`,notSupported:`Ľutujeme, vaše zariadenie nie je podporované`,model:`Model`,firmware:`Firmvér`},wizard:{title:`Sprievodca vyhľadaním Shelly Gen 1`}},subHeadings:{wizard:`Nájdite a adoptujte zariadenia Shelly Gen 1 vo vašej sieti`},breadcrumbs:{wizard:`sprievodca vyhľadaním`},fields:{devices:{id:{title:`Interný identifikátor`,placeholder:`ID zariadenia`},category:{title:`Kategória`,placeholder:`Kategória zariadenia`,validation:{required:`Prosím vyberte kategóriu zariadenia`}},name:{title:`Názov`,placeholder:`Názov zariadenia`,validation:{required:`Prosím vyplňte názov zariadenia`}},description:{title:`Popis`,placeholder:`Popis zariadenia`},enabled:{title:`Povolené`,placeholder:`Povoliť alebo zakázať zariadenie`},password:{title:`Heslo administrátora`,placeholder:`Zadajte heslo zariadenia, ak je chránené`},hostname:{title:`Hostname zariadenia`,placeholder:`Sieťový názov alebo IP adresa zariadenia`,validation:{required:`Prosím vyplňte hostname alebo IP adresu zariadenia`}}},config:{enabled:{title:`Povolené`},discovery:{enabled:{title:`Objavovanie povolené`},interface:{title:`Rozhranie`,placeholder:`Sieťové rozhranie na použitie. Ak nie je špecifikované, budú použité všetky dostupné rozhrania.`}},timeouts:{requestTimeout:{title:`Časový limit požiadavky`,placeholder:`Čas v sekundách na čakanie na odpoveď pred zrušením požiadavky.`,validation:{required:`Prosím vyplňte časový limit požiadavky`,number:`Časový limit požiadavky musí byť kladné celé číslo`}},staleTimeout:{title:`Časový limit neaktivity`,placeholder:`Čas v sekundách, po ktorom je zariadenie považované za offline, ak nie je prijatá žiadna aktualizácia stavu.`,validation:{required:`Prosím vyplňte časový limit neaktivity`,number:`Časový limit neaktivity musí byť kladné celé číslo`}}}}},messages:{config:{edited:`Zmeny uložené! Konfigurácia pluginu Shelly Gen 1 bola aktualizovaná.`,notEdited:`Niečo sa pokazilo. Aktualizácia konfigurácie pluginu Shelly Gen 1 nebola úspešná.`},devices:{exists:`Zariadenie s poskytnutým hostname a heslom je už zaregistrované v systéme.`,created:`Nové zariadenie Shelly Gen 1 bolo úspešne pridané.`,notCreated:`Niečo sa pokazilo. Nepodarilo sa vytvoriť zariadenie Shelly Gen 1.`,notChecked:`Niečo sa pokazilo. Informácie o zariadení sa nepodarilo načítať. Skontrolujte hostname alebo heslo zariadenia.`,notReachable:`Zariadenie nie je dosiahnuteľné. Skontrolujte hostname alebo IP adresu.`,invalidPassword:`Neplatné heslo. Skontrolujte heslo zariadenia.`,edited:`Zmeny uložené! Zariadenie Shelly Gen 1: {device} bolo aktualizované.`,notEdited:`Niečo sa pokazilo. Aktualizácia zariadenia Shelly Gen 1 nebola úspešná.`,failedLoadSupportedDevices:`Niečo sa pokazilo. Podporované zariadenia pluginu sa nepodarilo načítať.`},wizard:{discoveryNotStarted:`Niečo sa pokazilo. Vyhľadávanie Shelly sa nepodarilo spustiť.`,discoveryNotLoaded:`Niečo sa pokazilo. Vyhľadávanie Shelly sa nepodarilo načítať.`,manualNotAdded:`Niečo sa pokazilo. Manuálne vyhľadanie zariadenia Shelly sa nepodarilo pridať.`,adoptionNotCreated:`Niečo sa pokazilo. Zariadenie Shelly sa nepodarilo adoptovať.`}},texts:{aboutPluginStatus:`Povoľte alebo zakážte integráciu zariadení Shelly Gen 1. Keď je povolená, zariadenia Shelly môžu byť objavené a ovládané cez Smart Panel.`,aboutDiscovery:`Nakonfigurujte, ako plugin objavuje zariadenia Shelly Gen 1 na vašej lokálnej sieti pomocou Multicast DNS (mDNS). To umožňuje automatickú detekciu bez potreby manuálneho zadávania IP adries.`,aboutTimeouts:`Nakonfigurujte nastavenia časových limitov pre HTTP komunikáciu so zariadeniami Shelly Gen 1. Tieto nastavenia ovládajú spracovanie požiadaviek a monitorovanie stavu zariadení.`,wizard:{discovery:`Sprievodca vyhľadá zariadenia Shelly Gen 1 v lokálnej sieti a prijíma aj manuálne zadaný hostname alebo IP adresu.`,scanStatus:`Nájdené zariadenia: {count}`}},buttons:{next:{title:`Ďalej`},wizard:{restart:{title:`Vyhľadať znova`},addManual:{title:`Pridať`}}}}},gk=Ki.extend({discovery:K({enabled:J(),interface:X().nullable()}),timeouts:K({requestTimeout:Dt().int().min(1),staleTimeout:Dt().int().min(1)})}),_k=os,vk=Zo.and(K({type:Y(zO)})),yk=rs.and(K({type:Y(zO)}));Qo.and(K({type:Y(zO)}));var bk=ns,xk=cs.and(K({type:Y(zO)})),Sk=us.and(K({type:Y(zO)}));Xo.and(K({type:Y(zO)}));var Ck=Wi.extend({discovery:K({enabled:J(),interface:X().nullable()}),timeouts:K({requestTimeout:q(),staleTimeout:q()})}),wk=Zi.and(K({type:Y(RO),discovery:K({enabled:J().optional(),interface:X().nullable().optional()}).optional(),timeouts:K({request_timeout:q().optional(),stale_timeout:q().optional()}).optional()}));Ri.and(K({type:Y(RO),discovery:K({enabled:J(),interface:X().nullable()}),timeouts:K({request_timeout:q(),stale_timeout:q()})}));var Tk=Yo.extend({password:X().nullable(),hostname:X()}),Ek=ss.and(K({type:Y(zO),password:X().nullable(),hostname:X()})),Dk=as.and(K({type:Y(zO),category:G(dr).optional(),password:X().nullable().optional(),hostname:X().optional()}));ts.and(K({type:Y(zO),password:X().nullable(),hostname:X()}));var Ok=Symbol(`FB-Plugin-DevicesShellyV1`),kk={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(hk)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesShellyV1Plugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Ok,{type:RO,source:`com.fastybird.smart-panel.plugin.devices-shelly-v1`,name:`Shelly Gen 1`,description:`Connect and control your Shelly Gen 1 devices directly from the FastyBird Smart Panel`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:ck},schemas:{pluginConfigSchema:Ck,pluginConfigEditFormSchema:gk,pluginConfigUpdateReqSchema:wk},modules:[ka]},{type:zO,components:{deviceAddForm:ak,deviceEditForm:sk,deviceWizardAdapter:mk},schemas:{deviceSchema:Tk,deviceAddFormSchema:UO,deviceEditFormSchema:WO,deviceCreateReqSchema:Ek,deviceUpdateReqSchema:Dk,channelSchema:bk,channelCreateReqSchema:xk,channelUpdateReqSchema:Sk,channelPropertySchema:_k,channelPropertyCreateReqSchema:vk,channelPropertyUpdateReqSchema:yk},modules:[qo]}],modules:[qo,ka],isCore:!0})}},Ak=`devices-third-party-plugin`,jk=`devices-third-party`,Mk=k({name:`ThirdPartyDeviceAddForm`,__name:`third-party-device-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=Cs({id:n.id,type:jk}),f=P({category:[{required:!0,message:a(`devicesThirdPartyPlugin.fields.devices.category.validation.required`),trigger:`change`}],name:[{required:!0,message:a(`devicesThirdPartyPlugin.fields.devices.name.validation.required`),trigger:`change`}],serviceAddress:[{required:!0,message:a(`devicesThirdPartyPlugin.fields.devices.serviceAddress.validation.required`),trigger:`change`},{type:`url`,message:a(`devicesThirdPartyPlugin.fields.devices.serviceAddress.validation.url`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.identifier.title`),prop:`identifier`},{default:B(()=>[D(L(U),{modelValue:L(s).identifier,"onUpdate:modelValue":t[1]||=e=>L(s).identifier=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.identifier.placeholder`),name:`identifier`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[2]||=e=>L(s).name=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[3]||=e=>L(s).category=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[4]||=e=>L(s).description=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[5]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.serviceAddress.title`),prop:`serviceAddress`},{default:B(()=>[D(L(U),{modelValue:L(s).serviceAddress,"onUpdate:modelValue":t[6]||=e=>L(s).serviceAddress=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.serviceAddress.placeholder`),name:`serviceAddress`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Nk=k({name:`ThirdPartyDeviceEditForm`,__name:`third-party-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=Ss({device:n.device}),f=P({name:[{required:!0,message:a(`devicesThirdPartyPlugin.fields.devices.name.validation.required`),trigger:`change`}],serviceAddress:[{required:!0,message:a(`devicesThirdPartyPlugin.fields.devices.serviceAddress.validation.required`),trigger:`change`},{type:`url`,message:a(`devicesThirdPartyPlugin.fields.devices.serviceAddress.validation.url`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.identifier.title`),prop:`identifier`},{default:B(()=>[D(L(U),{modelValue:L(s).identifier,"onUpdate:modelValue":t[1]||=e=>L(s).identifier=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.identifier.placeholder`),name:`identifier`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[2]||=e=>L(s).name=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[3]||=e=>L(s).category=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``,readonly:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[4]||=e=>L(s).description=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[5]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesThirdPartyPlugin.fields.devices.serviceAddress.title`),prop:`serviceAddress`},{default:B(()=>[D(L(U),{modelValue:L(s).serviceAddress,"onUpdate:modelValue":t[6]||=e=>L(s).serviceAddress=e,placeholder:L(a)(`devicesThirdPartyPlugin.fields.devices.serviceAddress.placeholder`),name:`serviceAddress`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Pk={"cs-CZ":{fields:{devices:{id:{title:`Interní identifikátor`,placeholder:`ID zařízení`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zařízení`},category:{title:`Kategorie`,placeholder:`Kategorie zařízení`,validation:{required:`Vyberte prosím kategorii zařízení`}},name:{title:`Název`,placeholder:`Název zařízení`,validation:{required:`Vyplňte prosím název zařízení`}},description:{title:`Popis`,placeholder:`Popis zařízení`},enabled:{title:`Povoleno`},serviceAddress:{title:`Adresa služby`,placeholder:`http://device-address.local`,validation:{required:`Vyplňte prosím adresu služby zařízení`,url:`Zadejte prosím platnou URL adresu`}}}}},"de-DE":{fields:{devices:{id:{title:`Interner Bezeichner`,placeholder:`Geräte-ID`},identifier:{title:`Systembezeichner`,placeholder:`Geräte-Systembezeichner`},category:{title:`Kategorie`,placeholder:`Gerätekategorie`,validation:{required:`Bitte wählen Sie eine Gerätekategorie`}},name:{title:`Name`,placeholder:`Gerätename`,validation:{required:`Bitte geben Sie den Gerätenamen ein`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung`},enabled:{title:`Aktiviert`},serviceAddress:{title:`Dienstadresse`,placeholder:`http://device-address.local`,validation:{required:`Bitte geben Sie die Geräte-Dienstadresse ein`,url:`Bitte geben Sie eine gültige URL-Adresse ein`}}}}},"en-US":{fields:{devices:{id:{title:`Internal identifier`,placeholder:`Device id`},identifier:{title:`System identifier`,placeholder:`Device system identifier`},category:{title:`Category`,placeholder:`Device category`,validation:{required:`Please select device category`}},name:{title:`Name`,placeholder:`Device name`,validation:{required:`Please fill in device name`}},description:{title:`Description`,placeholder:`Device description`},enabled:{title:`Enabled`},serviceAddress:{title:`Service address`,placeholder:`http://device-address.local`,validation:{required:`Please fill in device service address`,url:`Please provide valid URL address`}}}}},"es-ES":{fields:{devices:{id:{title:`Identificador interno`,placeholder:`ID del dispositivo`},identifier:{title:`Identificador del sistema`,placeholder:`Identificador del sistema del dispositivo`},category:{title:`Categoría`,placeholder:`Categoría del dispositivo`,validation:{required:`Por favor, seleccione la categoría del dispositivo`}},name:{title:`Nombre`,placeholder:`Nombre del dispositivo`,validation:{required:`Por favor, introduzca el nombre del dispositivo`}},description:{title:`Descripción`,placeholder:`Descripción del dispositivo`},enabled:{title:`Habilitado`},serviceAddress:{title:`Dirección del servicio`,placeholder:`http://device-address.local`,validation:{required:`Por favor, introduzca la dirección del servicio del dispositivo`,url:`Por favor, proporcione una dirección URL válida`}}}}},"pl-PL":{fields:{devices:{id:{title:`Identyfikator wewnetrzny`,placeholder:`ID urzadzenia`},identifier:{title:`Identyfikator systemowy`,placeholder:`Identyfikator systemowy urzadzenia`},category:{title:`Kategoria`,placeholder:`Kategoria urzadzenia`,validation:{required:`Prosze wybrac kategorie urzadzenia`}},name:{title:`Nazwa`,placeholder:`Nazwa urzadzenia`,validation:{required:`Prosze podac nazwe urzadzenia`}},description:{title:`Opis`,placeholder:`Opis urzadzenia`},enabled:{title:`Wlaczony`},serviceAddress:{title:`Adres uslugi`,placeholder:`http://device-address.local`,validation:{required:`Prosze podac adres uslugi urzadzenia`,url:`Prosze podac prawidlowy adres URL`}}}}},"sk-SK":{fields:{devices:{id:{title:`Interný identifikátor`,placeholder:`ID zariadenia`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zariadenia`},category:{title:`Kategória`,placeholder:`Kategória zariadenia`,validation:{required:`Prosím vyberte kategóriu zariadenia`}},name:{title:`Názov`,placeholder:`Názov zariadenia`,validation:{required:`Prosím vyplňte názov zariadenia`}},description:{title:`Popis`,placeholder:`Popis zariadenia`},enabled:{title:`Povolené`},serviceAddress:{title:`Adresa služby`,placeholder:`http://device-address.local`,validation:{required:`Prosím vyplňte adresu služby zariadenia`,url:`Prosím zadajte platnú URL adresu`}}}}}},Fk=xs.extend({serviceAddress:X().url()}),Ik=ws.extend({serviceAddress:X().url().optional()}),Lk=os;Zo.and(K({type:Y(jk)})),rs.and(K({type:Y(jk)})),Qo.and(K({type:Y(jk)}));var Rk=ns;cs.and(K({type:Y(jk)})),us.and(K({type:Y(jk)})),Xo.and(K({type:Y(jk)}));var zk=Yo.extend({serviceAddress:X().trim().url()}),Bk=ss.and(K({type:Y(jk),service_address:X().trim().url()})),Vk=as.and(K({type:Y(jk),service_address:X().trim().url().optional()}));ts.and(K({type:Y(jk),service_address:X().trim().url()}));var Hk=Symbol(`FB-Plugin-DevicesThirdParty`),Uk={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Pk)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesThirdPartyPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Hk,{type:Ak,source:`com.fastybird.smart-panel.plugin.devices-third-party`,name:`Third Party`,description:`Control and monitor third-party devices seamlessly from the FastyBird Smart Panel`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:jk,components:{deviceAddForm:Mk,deviceEditForm:Nk},schemas:{deviceSchema:zk,deviceAddFormSchema:Fk,deviceEditFormSchema:Ik,deviceCreateReqSchema:Bk,deviceUpdateReqSchema:Vk,channelSchema:Rk,channelPropertySchema:Lk}}],modules:[qo],isCore:!0})}},Wk=k({name:`VirtualDeviceAddForm`,__name:`virtual-device-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=Cs({id:n.id,type:Oc}),f=o.filter(e=>Dc.includes(e.value)),p=P({category:[{required:!0,message:a(`devicesVirtualPlugin.fields.devices.category.validation.required`),trigger:`change`}],name:[{required:!0,message:a(`devicesVirtualPlugin.fields.devices.name.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.identifier.title`),prop:`identifier`},{default:B(()=>[D(L(U),{modelValue:L(s).identifier,"onUpdate:modelValue":t[1]||=e=>L(s).identifier=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.identifier.placeholder`),name:`identifier`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[2]||=e=>L(s).name=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[3]||=e=>L(s).category=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[4]||=e=>L(s).description=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[5]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Gk=k({name:`VirtualDeviceEditForm`,__name:`virtual-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=Ss({device:n.device}),f=o.filter(e=>Dc.includes(e.value)),p=P({name:[{required:!0,message:a(`devicesVirtualPlugin.fields.devices.name.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.identifier.title`),prop:`identifier`},{default:B(()=>[D(L(U),{modelValue:L(s).identifier,"onUpdate:modelValue":t[1]||=e=>L(s).identifier=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.identifier.placeholder`),name:`identifier`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[2]||=e=>L(s).name=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[3]||=e=>L(s).category=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``,readonly:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[4]||=e=>L(s).description=e,placeholder:L(a)(`devicesVirtualPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesVirtualPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[5]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),Kk={"cs-CZ":{fields:{devices:{id:{title:`Interní identifikátor`,placeholder:`ID zařízení`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zařízení`},category:{title:`Kategorie`,placeholder:`Kategorie zařízení`,validation:{required:`Vyberte prosím kategorii zařízení`}},name:{title:`Název`,placeholder:`Název zařízení`,validation:{required:`Vyplňte prosím název zařízení`}},description:{title:`Popis`,placeholder:`Popis zařízení`},enabled:{title:`Povoleno`}}},wizard:{title:`Vytvořit virtuální zařízení`,subtitle:`Sestavte zařízení z kanálů jiného zařízení`,breadcrumb:`Vytvořit virtuální zařízení`,viewDevice:`Zobrazit zařízení`,steps:{category:`Kategorie`,mapping:`Mapování`,details:`Podrobnosti`,review:`Kontrola`},category:{heading:`Vyberte kategorii`,description:`Vyberte druh zařízení, které vytváříte. Určuje, které kanály a vlastnosti bude v dalším kroku potřeba namapovat.`,blockedHeading:`V tomto vydání není k dispozici`,blockedReason:`vyžaduje regulátor — plánováno pro pozdější vydání`},mapping:{heading:`Propojte vlastnosti`,description:`Každá vlastnost níže pochází ze skutečného zařízení. Vyplňte alespoň povinné — ostatní jsou volitelné a mohou zůstat prázdné.`,noCategory:`Nejprve vyberte kategorii zařízení.`,progress:`Namapováno {filled} z {total} povinných vlastností`,noRequired:`Tato kategorie nemá žádné povinné vlastnosti — pro pokračování namapujte alespoň jednu`,channelRequired:`Povinný`,channelOptional:`Volitelný`,propertyRequired:`Povinná`,showOptional:`Zobrazit dalších {count} volitelných vlastností`,source:{devicePlaceholder:`Zdrojové zařízení`,channelPlaceholder:`Zdrojový kanál`,propertyPlaceholder:`Zdrojová vlastnost`},shortcut:{description:`Převzít celý kanál: vyberte kanál skutečného zařízení a vyplňte jím všechny vlastnosti, které dokáže pokrýt.`,apply:`Vyplnit z kanálu`,applied:`Z vybraného kanálu vyplněno {filled} z {total} vlastností.`,nothingApplied:`Vybraný kanál nemá žádnou vlastnost, kterou by tento kanál mohl použít.`},errors:{checkFailed:`Tento zdroj se nepodařilo ověřit. Vyberte jiný nebo to zkuste znovu.`,incompatible:`Tento zdroj nemůže tuto vlastnost naplnit.`},constraints:{oneOrMoreOf:`vyžaduje alespoň jednu z: {properties}`,oneOf:`přijímá pouze jednu z: {properties}`,mutuallyExclusive:`tyto skupiny nelze kombinovat: {groups}`,deviceOneOrMoreOf:`vyžaduje alespoň jeden z těchto kanálů: {channels}`,deviceOneOf:`přijímá pouze jeden z těchto kanálů: {channels}`,deviceMutuallyExclusive:`tyto kanály nelze kombinovat: {groups}`}},details:{heading:`Pojmenujte a umístěte zařízení`,description:`Zadejte název zařízení a volitelně jej přiřaďte k místnosti a zónám. Název je navržen podle kategorie a místnosti — můžete jej změnit.`},review:{heading:`Zkontrolovat a vytvořit`,description:`Zkontrolujte souhrn níže a poté zařízení vytvořte. Každá uvedená vlastnost je převzata z kanálu skutečného zařízení.`,noMappings:`Zatím nic není namapováno — vraťte se a namapujte alespoň jednu vlastnost.`,columns:{property:`Vlastnost`,sourceDevice:`Zdrojové zařízení`,sourceChannel:`Zdrojový kanál`,sourceProperty:`Zdrojová vlastnost`},hideSource:{label:`Skrýt {device} — všechny vlastnosti výše pocházejí z tohoto zařízení`,hint:`Skryje zdrojové zařízení ze seznamů a výběrů. Zůstává plně zachováno a lze jej kdykoli znovu odkrýt v seznamu zařízení.`,retry:`Zkusit skrýt znovu`,success:`{device} je nyní skryto`},created:`Zařízení {name} bylo vytvořeno`,create:`Vytvořit zařízení`,noRoom:`Není přiřazena žádná místnost`,noZones:`Nejsou přiřazeny žádné zóny`,unknownSource:`Neznámé`,errors:{createFailed:`Zařízení se nepodařilo vytvořit. Zkuste to prosím znovu.`,hideFailed:`Zdrojové zařízení se nepodařilo skrýt.`,hideFailedFlash:`{device} nebylo skryto: požadavek selhal. Můžete jej skrýt později v seznamu zařízení.`,zonesFailed:`Nepodařilo se přiřadit {count} zón. Můžete je přidat později v seznamu zařízení.`}}},sources:{heading:`Zdrojová zařízení`,description:`Fyzická zařízení, ze kterých jsou převzaty vlastnosti tohoto zařízení.`,empty:`Toto zařízení nepřebírá nic z jiného zařízení.`,loadFailed:`Zdrojová zařízení se nepodařilo načíst.`,retry:`Zkusit znovu`,warning:{title:`{channel} · {property}: ztráta zdroje`,description:`Zdrojová vlastnost byla odstraněna. Toto zařízení zůstává offline, dokud nebude přemapováno.`,remap:`Přemapovat`}},remap:{title:`Přemapovat {property}`,description:`Vyberte nový zdroj pro tuto vlastnost. Potvrdit lze pouze kompatibilní zdroj.`,confirm:`Přemapovat`,success:`{property} nyní čerpá z nového zdroje`,errors:{propertyGone:`Tato vlastnost už neexistuje.`,updateFailed:`Vlastnost se nepodařilo přemapovat. Zkuste to prosím znovu.`}}},"de-DE":{fields:{devices:{id:{title:`Interner Bezeichner`,placeholder:`Geräte-ID`},identifier:{title:`Systembezeichner`,placeholder:`Geräte-Systembezeichner`},category:{title:`Kategorie`,placeholder:`Gerätekategorie`,validation:{required:`Bitte wählen Sie eine Gerätekategorie`}},name:{title:`Name`,placeholder:`Gerätename`,validation:{required:`Bitte geben Sie den Gerätenamen ein`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung`},enabled:{title:`Aktiviert`}}},wizard:{title:`Virtuelles Gerät erstellen`,subtitle:`Erstellen Sie ein Gerät aus den Kanälen eines anderen Geräts`,breadcrumb:`Virtuelles Gerät erstellen`,viewDevice:`Gerät anzeigen`,steps:{category:`Kategorie`,mapping:`Zuordnung`,details:`Einzelheiten`,review:`Überprüfung`},category:{heading:`Kategorie wählen`,description:`Wählen Sie die Art des Geräts, das Sie erstellen. Sie bestimmt, welche Kanäle und Eigenschaften im nächsten Schritt zugeordnet werden müssen.`,blockedHeading:`In dieser Version nicht verfügbar`,blockedReason:`benötigt einen Regler — für eine spätere Version geplant`},mapping:{heading:`Eigenschaften verknüpfen`,description:`Jede Eigenschaft unten stammt von einem echten Gerät. Füllen Sie mindestens die erforderlichen aus — die übrigen sind optional und dürfen leer bleiben.`,noCategory:`Wählen Sie zuerst eine Gerätekategorie.`,progress:`{filled} von {total} erforderlichen Eigenschaften zugeordnet`,noRequired:`Diese Kategorie hat keine erforderlichen Eigenschaften — ordnen Sie mindestens eine zu, um fortzufahren`,channelRequired:`Erforderlich`,channelOptional:`Optional`,propertyRequired:`Erforderlich`,showOptional:`{count} weitere optionale Eigenschaften anzeigen`,source:{devicePlaceholder:`Quellgerät`,channelPlaceholder:`Quellkanal`,propertyPlaceholder:`Quelleigenschaft`},shortcut:{description:`Ganzen Kanal übernehmen: Wählen Sie einen Kanal eines echten Geräts, um damit alle Eigenschaften zu füllen, die er abdecken kann.`,apply:`Aus Kanal füllen`,applied:`{filled} von {total} Eigenschaften aus dem gewählten Kanal gefüllt.`,nothingApplied:`Der gewählte Kanal hat keine Eigenschaft, die dieser Kanal verwenden kann.`},errors:{checkFailed:`Diese Quelle konnte nicht geprüft werden. Wählen Sie eine andere oder versuchen Sie es erneut.`,incompatible:`Diese Quelle kann diese Eigenschaft nicht füllen.`},constraints:{oneOrMoreOf:`benötigt mindestens eine von: {properties}`,oneOf:`akzeptiert nur eine von: {properties}`,mutuallyExclusive:`diese Gruppen lassen sich nicht kombinieren: {groups}`,deviceOneOrMoreOf:`benötigt mindestens einen dieser Kanäle: {channels}`,deviceOneOf:`akzeptiert nur einen dieser Kanäle: {channels}`,deviceMutuallyExclusive:`diese Kanäle lassen sich nicht kombinieren: {groups}`}},details:{heading:`Gerät benennen und platzieren`,description:`Geben Sie dem Gerät einen Namen und weisen Sie es optional einem Raum und Zonen zu. Ein Name wird anhand von Kategorie und Raum vorgeschlagen — Sie können ihn ändern.`},review:{heading:`Überprüfen und erstellen`,description:`Prüfen Sie die Zusammenfassung unten und erstellen Sie dann das Gerät. Jede aufgeführte Eigenschaft stammt aus dem Kanal eines echten Geräts.`,noMappings:`Es ist noch nichts zugeordnet — gehen Sie zurück und ordnen Sie mindestens eine Eigenschaft zu.`,columns:{property:`Eigenschaft`,sourceDevice:`Quellgerät`,sourceChannel:`Quellkanal`,sourceProperty:`Quelleigenschaft`},hideSource:{label:`{device} ausblenden — jede Eigenschaft oben stammt von diesem Gerät`,hint:`Blendet das Quellgerät aus Listen und Auswahlen aus. Es bleibt vollständig erhalten und kann jederzeit über die Geräteliste wieder eingeblendet werden.`,retry:`Ausblenden erneut versuchen`,success:`{device} ist jetzt ausgeblendet`},created:`{name} wurde erstellt`,create:`Gerät erstellen`,noRoom:`Kein Raum zugewiesen`,noZones:`Keine Zonen zugewiesen`,unknownSource:`Unbekannt`,errors:{createFailed:`Das Gerät konnte nicht erstellt werden. Bitte versuchen Sie es erneut.`,hideFailed:`Das Quellgerät konnte nicht ausgeblendet werden.`,hideFailedFlash:`{device} wurde nicht ausgeblendet: Die Anfrage ist fehlgeschlagen. Sie können es später über die Geräteliste ausblenden.`,zonesFailed:`{count} Zone(n) konnten nicht zugewiesen werden. Sie können sie später über die Geräteliste hinzufügen.`}}},sources:{heading:`Quellgeräte`,description:`Die physischen Geräte, aus denen die Eigenschaften dieses Geräts übernommen werden.`,empty:`Dieses Gerät übernimmt nichts von einem anderen Gerät.`,loadFailed:`Quellgeräte konnten nicht geladen werden.`,retry:`Erneut versuchen`,warning:{title:`{channel} · {property}: Quelle verloren`,description:`Die Quelleigenschaft wurde gelöscht. Dieses Gerät bleibt offline, bis sie neu zugeordnet wird.`,remap:`Neu zuordnen`}},remap:{title:`{property} neu zuordnen`,description:`Wählen Sie eine neue Quelle für diese Eigenschaft. Bestätigt werden kann nur eine kompatible Quelle.`,confirm:`Neu zuordnen`,success:`{property} bezieht jetzt Werte aus einer neuen Quelle`,errors:{propertyGone:`Diese Eigenschaft existiert nicht mehr.`,updateFailed:`Die Eigenschaft konnte nicht neu zugeordnet werden. Bitte versuchen Sie es erneut.`}}},"en-US":{fields:{devices:{id:{title:`Internal identifier`,placeholder:`Device id`},identifier:{title:`System identifier`,placeholder:`Device system identifier`},category:{title:`Category`,placeholder:`Device category`,validation:{required:`Please select device category`}},name:{title:`Name`,placeholder:`Device name`,validation:{required:`Please fill in device name`}},description:{title:`Description`,placeholder:`Device description`},enabled:{title:`Enabled`}}},wizard:{title:`Create virtual device`,subtitle:`Build a device from another device's channels`,breadcrumb:`Create virtual device`,viewDevice:`View device`,steps:{category:`Category`,mapping:`Mapping`,details:`Details`,review:`Review`},category:{heading:`Choose a category`,description:`Pick the kind of device you are creating. It determines which channels and properties the next step will ask you to map.`,blockedHeading:`Not available in this release`,blockedReason:`needs a controller — planned for a later release`},mapping:{heading:`Wire up the properties`,description:`Every property below comes from a real device. Fill at least the required ones — the rest are optional and can stay empty.`,noCategory:`Choose a device category first.`,progress:`{filled} of {total} required properties mapped`,noRequired:`This category has no required properties — map at least one to continue`,channelRequired:`Required`,channelOptional:`Optional`,propertyRequired:`Required`,showOptional:`Show {count} more optional properties`,source:{devicePlaceholder:`Source device`,channelPlaceholder:`Source channel`,propertyPlaceholder:`Source property`},shortcut:{description:`Take a whole channel: pick a channel on a real device and fill every property here that it can cover.`,apply:`Fill from channel`,applied:`Filled {filled} of {total} properties from the selected channel.`,nothingApplied:`The selected channel has no property this channel can use.`},errors:{checkFailed:`This source could not be verified. Pick another one or try again.`,incompatible:`This source cannot fill this property.`},constraints:{oneOrMoreOf:`needs at least one of: {properties}`,oneOf:`accepts only one of: {properties}`,mutuallyExclusive:`cannot combine these groups: {groups}`,deviceOneOrMoreOf:`needs at least one of these channels: {channels}`,deviceOneOf:`accepts only one of these channels: {channels}`,deviceMutuallyExclusive:`cannot combine these channels: {groups}`}},details:{heading:`Name and place the device`,description:`Give the device a name, and optionally assign it to a room and zones. A name is suggested from the category and room — you can change it.`},review:{heading:`Review and create`,description:`Check the summary below, then create the device. Every property listed is borrowed from a real device's channel.`,noMappings:`Nothing is mapped yet — go back and map at least one property.`,columns:{property:`Property`,sourceDevice:`Source device`,sourceChannel:`Source channel`,sourceProperty:`Source property`},hideSource:{label:`Hide {device} — every property above comes from this device`,hint:`Hides the source device from lists and pickers. It stays fully intact and can be unhidden again from the device list at any time.`,retry:`Retry hiding`,success:`{device} is now hidden`},created:`{name} was created`,create:`Create device`,noRoom:`No room assigned`,noZones:`No zones assigned`,unknownSource:`Unknown`,errors:{createFailed:`The device could not be created. Please try again.`,hideFailed:`The source device could not be hidden.`,hideFailedFlash:`{device} was not hidden: the request failed. You can hide it later from the device list.`,zonesFailed:`{count} zone(s) could not be assigned. You can add them later from the device list.`}}},sources:{heading:`Source devices`,description:`The physical devices this device's properties are borrowed from.`,empty:`This device does not borrow from any other device.`,loadFailed:`Source devices could not be loaded.`,retry:`Retry`,warning:{title:`{channel} · {property}: source lost`,description:`The source property was deleted. This device stays offline until it is remapped.`,remap:`Remap`}},remap:{title:`Remap {property}`,description:`Choose a new source for this property. Only a compatible source can be confirmed.`,confirm:`Remap`,success:`{property} now draws from a new source`,errors:{propertyGone:`This property no longer exists.`,updateFailed:`The property could not be remapped. Please try again.`}}},"es-ES":{fields:{devices:{id:{title:`Identificador interno`,placeholder:`ID del dispositivo`},identifier:{title:`Identificador del sistema`,placeholder:`Identificador del sistema del dispositivo`},category:{title:`Categoría`,placeholder:`Categoría del dispositivo`,validation:{required:`Por favor, seleccione la categoría del dispositivo`}},name:{title:`Nombre`,placeholder:`Nombre del dispositivo`,validation:{required:`Por favor, introduzca el nombre del dispositivo`}},description:{title:`Descripción`,placeholder:`Descripción del dispositivo`},enabled:{title:`Habilitado`}}},wizard:{title:`Crear dispositivo virtual`,subtitle:`Cree un dispositivo a partir de los canales de otro dispositivo`,breadcrumb:`Crear dispositivo virtual`,viewDevice:`Ver dispositivo`,steps:{category:`Categoría`,mapping:`Asignación`,details:`Detalles`,review:`Revisión`},category:{heading:`Elija una categoría`,description:`Elija el tipo de dispositivo que está creando. Determina qué canales y propiedades deberá asignar en el siguiente paso.`,blockedHeading:`No disponible en esta versión`,blockedReason:`necesita un controlador — previsto para una versión posterior`},mapping:{heading:`Conecte las propiedades`,description:`Cada propiedad de abajo proviene de un dispositivo real. Complete al menos las obligatorias; las demás son opcionales y pueden quedar vacías.`,noCategory:`Elija primero una categoría de dispositivo.`,progress:`{filled} de {total} propiedades obligatorias asignadas`,noRequired:`Esta categoría no tiene propiedades obligatorias — asigne al menos una para continuar`,channelRequired:`Obligatorio`,channelOptional:`Opcional`,propertyRequired:`Obligatoria`,showOptional:`Mostrar {count} propiedades opcionales más`,source:{devicePlaceholder:`Dispositivo de origen`,channelPlaceholder:`Canal de origen`,propertyPlaceholder:`Propiedad de origen`},shortcut:{description:`Tomar un canal entero: elija un canal de un dispositivo real y complete con él todas las propiedades que pueda cubrir.`,apply:`Rellenar desde el canal`,applied:`Se completaron {filled} de {total} propiedades desde el canal seleccionado.`,nothingApplied:`El canal seleccionado no tiene ninguna propiedad que este canal pueda usar.`},errors:{checkFailed:`No se pudo verificar este origen. Elija otro o inténtelo de nuevo.`,incompatible:`Este origen no puede rellenar esta propiedad.`},constraints:{oneOrMoreOf:`necesita al menos una de: {properties}`,oneOf:`solo admite una de: {properties}`,mutuallyExclusive:`no se pueden combinar estos grupos: {groups}`,deviceOneOrMoreOf:`necesita al menos uno de estos canales: {channels}`,deviceOneOf:`solo admite uno de estos canales: {channels}`,deviceMutuallyExclusive:`no se pueden combinar estos canales: {groups}`}},details:{heading:`Nombre y ubique el dispositivo`,description:`Asigne un nombre al dispositivo y, opcionalmente, una habitación y zonas. Se sugiere un nombre a partir de la categoría y la habitación; puede cambiarlo.`},review:{heading:`Revisar y crear`,description:`Revise el resumen a continuación y luego cree el dispositivo. Cada propiedad indicada se toma del canal de un dispositivo real.`,noMappings:`Todavía no hay nada asignado — vuelva atrás y asigne al menos una propiedad.`,columns:{property:`Propiedad`,sourceDevice:`Dispositivo de origen`,sourceChannel:`Canal de origen`,sourceProperty:`Propiedad de origen`},hideSource:{label:`Ocultar {device} — todas las propiedades anteriores provienen de este dispositivo`,hint:`Oculta el dispositivo de origen de las listas y selectores. Permanece intacto y puede volver a mostrarse en cualquier momento desde la lista de dispositivos.`,retry:`Reintentar ocultar`,success:`{device} está ahora oculto`},created:`{name} se creó correctamente`,create:`Crear dispositivo`,noRoom:`Sin habitación asignada`,noZones:`Sin zonas asignadas`,unknownSource:`Desconocido`,errors:{createFailed:`No se pudo crear el dispositivo. Inténtelo de nuevo.`,hideFailed:`No se pudo ocultar el dispositivo de origen.`,hideFailedFlash:`{device} no se ocultó: la solicitud falló. Puede ocultarlo más tarde desde la lista de dispositivos.`,zonesFailed:`No se pudieron asignar {count} zona(s). Puede añadirlas más tarde desde la lista de dispositivos.`}}},sources:{heading:`Dispositivos de origen`,description:`Los dispositivos físicos de los que se toman las propiedades de este dispositivo.`,empty:`Este dispositivo no toma nada de ningún otro dispositivo.`,loadFailed:`No se pudieron cargar los dispositivos de origen.`,retry:`Reintentar`,warning:{title:`{channel} · {property}: origen perdido`,description:`La propiedad de origen se eliminó. Este dispositivo permanece sin conexión hasta que se vuelva a asignar.`,remap:`Reasignar`}},remap:{title:`Reasignar {property}`,description:`Elija un nuevo origen para esta propiedad. Solo se puede confirmar un origen compatible.`,confirm:`Reasignar`,success:`{property} ahora toma valores de un nuevo origen`,errors:{propertyGone:`Esta propiedad ya no existe.`,updateFailed:`No se pudo reasignar la propiedad. Inténtelo de nuevo.`}}},"pl-PL":{fields:{devices:{id:{title:`Identyfikator wewnętrzny`,placeholder:`ID urządzenia`},identifier:{title:`Identyfikator systemowy`,placeholder:`Identyfikator systemowy urządzenia`},category:{title:`Kategoria`,placeholder:`Kategoria urządzenia`,validation:{required:`Wybierz kategorię urządzenia`}},name:{title:`Nazwa`,placeholder:`Nazwa urządzenia`,validation:{required:`Wprowadź nazwę urządzenia`}},description:{title:`Opis`,placeholder:`Opis urządzenia`},enabled:{title:`Włączone`}}},wizard:{title:`Utwórz urządzenie wirtualne`,subtitle:`Utwórz urządzenie z kanałów innego urządzenia`,breadcrumb:`Utwórz urządzenie wirtualne`,viewDevice:`Zobacz urządzenie`,steps:{category:`Kategoria`,mapping:`Mapowanie`,details:`Szczegóły`,review:`Podsumowanie`},category:{heading:`Wybierz kategorię`,description:`Wybierz rodzaj tworzonego urządzenia. Określa on, które kanały i właściwości będzie trzeba zmapować w następnym kroku.`,blockedHeading:`Niedostępne w tym wydaniu`,blockedReason:`wymaga sterownika — zaplanowano na kolejne wydanie`},mapping:{heading:`Połącz właściwości`,description:`Każda właściwość poniżej pochodzi z rzeczywistego urządzenia. Wypełnij co najmniej wymagane — pozostałe są opcjonalne i mogą zostać puste.`,noCategory:`Najpierw wybierz kategorię urządzenia.`,progress:`Zmapowano {filled} z {total} wymaganych właściwości`,noRequired:`Ta kategoria nie ma wymaganych właściwości — zmapuj co najmniej jedną, aby kontynuować`,channelRequired:`Wymagany`,channelOptional:`Opcjonalny`,propertyRequired:`Wymagana`,showOptional:`Pokaż jeszcze {count} właściwości opcjonalnych`,source:{devicePlaceholder:`Urządzenie źródłowe`,channelPlaceholder:`Kanał źródłowy`,propertyPlaceholder:`Właściwość źródłowa`},shortcut:{description:`Przejmij cały kanał: wybierz kanał rzeczywistego urządzenia i wypełnij nim wszystkie właściwości, które może pokryć.`,apply:`Wypełnij z kanału`,applied:`Wypełniono {filled} z {total} właściwości z wybranego kanału.`,nothingApplied:`Wybrany kanał nie ma żadnej właściwości, której ten kanał mógłby użyć.`},errors:{checkFailed:`Nie udało się zweryfikować tego źródła. Wybierz inne lub spróbuj ponownie.`,incompatible:`To źródło nie może wypełnić tej właściwości.`},constraints:{oneOrMoreOf:`wymaga co najmniej jednej z: {properties}`,oneOf:`przyjmuje tylko jedną z: {properties}`,mutuallyExclusive:`nie można łączyć tych grup: {groups}`,deviceOneOrMoreOf:`wymaga co najmniej jednego z tych kanałów: {channels}`,deviceOneOf:`przyjmuje tylko jeden z tych kanałów: {channels}`,deviceMutuallyExclusive:`nie można łączyć tych kanałów: {groups}`}},details:{heading:`Nazwij i umieść urządzenie`,description:`Nadaj urządzeniu nazwę i opcjonalnie przypisz je do pokoju i stref. Nazwa jest sugerowana na podstawie kategorii i pokoju — możesz ją zmienić.`},review:{heading:`Sprawdź i utwórz`,description:`Sprawdź poniższe podsumowanie, a następnie utwórz urządzenie. Każda wymieniona właściwość jest przejęta z kanału rzeczywistego urządzenia.`,noMappings:`Nic jeszcze nie zostało zmapowane — wróć i zmapuj co najmniej jedną właściwość.`,columns:{property:`Właściwość`,sourceDevice:`Urządzenie źródłowe`,sourceChannel:`Kanał źródłowy`,sourceProperty:`Właściwość źródłowa`},hideSource:{label:`Ukryj {device} — wszystkie powyższe właściwości pochodzą z tego urządzenia`,hint:`Ukrywa urządzenie źródłowe z list i selektorów. Pozostaje ono w pełni nienaruszone i można je w dowolnym momencie ponownie odkryć z listy urządzeń.`,retry:`Spróbuj ukryć ponownie`,success:`{device} jest teraz ukryte`},created:`Utworzono {name}`,create:`Utwórz urządzenie`,noRoom:`Nie przypisano pokoju`,noZones:`Nie przypisano stref`,unknownSource:`Nieznane`,errors:{createFailed:`Nie udało się utworzyć urządzenia. Spróbuj ponownie.`,hideFailed:`Nie udało się ukryć urządzenia źródłowego.`,hideFailedFlash:`{device} nie zostało ukryte: żądanie się nie powiodło. Możesz je ukryć później z listy urządzeń.`,zonesFailed:`Nie udało się przypisać {count} stref(y). Możesz je dodać później z listy urządzeń.`}}},sources:{heading:`Urządzenia źródłowe`,description:`Fizyczne urządzenia, z których zapożyczone są właściwości tego urządzenia.`,empty:`To urządzenie nie zapożycza niczego z innego urządzenia.`,loadFailed:`Nie udało się wczytać urządzeń źródłowych.`,retry:`Spróbuj ponownie`,warning:{title:`{channel} · {property}: utracono źródło`,description:`Właściwość źródłowa została usunięta. To urządzenie pozostaje offline, dopóki nie zostanie ponownie przypisana.`,remap:`Przypisz ponownie`}},remap:{title:`Przypisz ponownie {property}`,description:`Wybierz nowe źródło dla tej właściwości. Potwierdzić można tylko zgodne źródło.`,confirm:`Przypisz ponownie`,success:`{property} teraz pobiera wartości z nowego źródła`,errors:{propertyGone:`Ta właściwość już nie istnieje.`,updateFailed:`Nie udało się ponownie przypisać właściwości. Spróbuj ponownie.`}}},"sk-SK":{fields:{devices:{id:{title:`Interný identifikátor`,placeholder:`ID zariadenia`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zariadenia`},category:{title:`Kategória`,placeholder:`Kategória zariadenia`,validation:{required:`Prosím vyberte kategóriu zariadenia`}},name:{title:`Názov`,placeholder:`Názov zariadenia`,validation:{required:`Prosím vyplňte názov zariadenia`}},description:{title:`Popis`,placeholder:`Popis zariadenia`},enabled:{title:`Povolené`}}},wizard:{title:`Vytvoriť virtuálne zariadenie`,subtitle:`Zostavte zariadenie z kanálov iného zariadenia`,breadcrumb:`Vytvoriť virtuálne zariadenie`,viewDevice:`Zobraziť zariadenie`,steps:{category:`Kategória`,mapping:`Mapovanie`,details:`Detaily`,review:`Zhrnutie`},category:{heading:`Vyberte kategóriu`,description:`Vyberte druh zariadenia, ktoré vytvárate. Určuje, ktoré kanály a vlastnosti bude potrebné namapovať v ďalšom kroku.`,blockedHeading:`V tomto vydaní nie je k dispozícii`,blockedReason:`vyžaduje regulátor — plánované pre neskoršie vydanie`},mapping:{heading:`Prepojte vlastnosti`,description:`Každá vlastnosť nižšie pochádza zo skutočného zariadenia. Vyplňte aspoň povinné — ostatné sú voliteľné a môžu zostať prázdne.`,noCategory:`Najprv vyberte kategóriu zariadenia.`,progress:`Namapovaných {filled} z {total} povinných vlastností`,noRequired:`Táto kategória nemá žiadne povinné vlastnosti — na pokračovanie namapujte aspoň jednu`,channelRequired:`Povinný`,channelOptional:`Voliteľný`,propertyRequired:`Povinná`,showOptional:`Zobraziť ďalších {count} voliteľných vlastností`,source:{devicePlaceholder:`Zdrojové zariadenie`,channelPlaceholder:`Zdrojový kanál`,propertyPlaceholder:`Zdrojová vlastnosť`},shortcut:{description:`Prevziať celý kanál: vyberte kanál skutočného zariadenia a vyplňte ním všetky vlastnosti, ktoré dokáže pokryť.`,apply:`Vyplniť z kanála`,applied:`Z vybraného kanála vyplnených {filled} z {total} vlastností.`,nothingApplied:`Vybraný kanál nemá žiadnu vlastnosť, ktorú by tento kanál mohol použiť.`},errors:{checkFailed:`Tento zdroj sa nepodarilo overiť. Vyberte iný alebo to skúste znova.`,incompatible:`Tento zdroj nemôže naplniť túto vlastnosť.`},constraints:{oneOrMoreOf:`vyžaduje aspoň jednu z: {properties}`,oneOf:`prijíma iba jednu z: {properties}`,mutuallyExclusive:`tieto skupiny nemožno kombinovať: {groups}`,deviceOneOrMoreOf:`vyžaduje aspoň jeden z týchto kanálov: {channels}`,deviceOneOf:`prijíma iba jeden z týchto kanálov: {channels}`,deviceMutuallyExclusive:`tieto kanály nemožno kombinovať: {groups}`}},details:{heading:`Pomenujte a umiestnite zariadenie`,description:`Zadajte názov zariadenia a voliteľne ho priraďte k miestnosti a zónam. Názov je navrhnutý podľa kategórie a miestnosti — môžete ho zmeniť.`},review:{heading:`Skontrolovať a vytvoriť`,description:`Skontrolujte súhrn nižšie a potom zariadenie vytvorte. Každá uvedená vlastnosť je prevzatá z kanála skutočného zariadenia.`,noMappings:`Zatiaľ nič nie je namapované — vráťte sa a namapujte aspoň jednu vlastnosť.`,columns:{property:`Vlastnosť`,sourceDevice:`Zdrojové zariadenie`,sourceChannel:`Zdrojový kanál`,sourceProperty:`Zdrojová vlastnosť`},hideSource:{label:`Skryť {device} — všetky vlastnosti vyššie pochádzajú z tohto zariadenia`,hint:`Skryje zdrojové zariadenie zo zoznamov a výberov. Zostáva plne zachované a možno ho kedykoľvek znova odkryť v zozname zariadení.`,retry:`Skúsiť skryť znova`,success:`{device} je teraz skryté`},created:`Zariadenie {name} bolo vytvorené`,create:`Vytvoriť zariadenie`,noRoom:`Nie je priradená žiadna miestnosť`,noZones:`Nie sú priradené žiadne zóny`,unknownSource:`Neznáme`,errors:{createFailed:`Zariadenie sa nepodarilo vytvoriť. Skúste to prosím znova.`,hideFailed:`Zdrojové zariadenie sa nepodarilo skryť.`,hideFailedFlash:`{device} nebolo skryté: požiadavka zlyhala. Môžete ho skryť neskôr v zozname zariadení.`,zonesFailed:`Nepodarilo sa priradiť {count} zón. Môžete ich pridať neskôr v zozname zariadení.`}}},sources:{heading:`Zdrojové zariadenia`,description:`Fyzické zariadenia, z ktorých sú prevzaté vlastnosti tohto zariadenia.`,empty:`Toto zariadenie nepreberá nič z iného zariadenia.`,loadFailed:`Zdrojové zariadenia sa nepodarilo načítať.`,retry:`Skúsiť znova`,warning:{title:`{channel} · {property}: stratený zdroj`,description:`Zdrojová vlastnosť bola odstránená. Toto zariadenie zostáva offline, kým nebude znova namapované.`,remap:`Premapovať`}},remap:{title:`Premapovať {property}`,description:`Vyberte nový zdroj pre túto vlastnosť. Potvrdiť možno iba kompatibilný zdroj.`,confirm:`Premapovať`,success:`{property} teraz čerpá z nového zdroja`,errors:{propertyGone:`Táto vlastnosť už neexistuje.`,updateFailed:`Vlastnosť sa nepodarilo premapovať. Skúste to prosím znova.`}}}},qk=[{path:`devices-virtual/wizard`,name:Ec.WIZARD,component:()=>hr(()=>import(`./view-virtual-device-wizard-CCj2n1FE.js`),__vite__mapDeps([155,2,3,4,11,5,6,68,14,15,16,17,18,19,20,21,7,67,69,66,22,23,8,32,33,24,70,71,40,53,52,72,73,74,75,9,59,76,25,56,77,78,79,51,102,146,147,65,49,38,42,132,133,55,106,107,134,109,110,103,60,61,80,148,123,137,104])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Create virtual device`,icon:`mdi:wizard-hat`}}],Jk=xs,Yk=ws,Xk=os.extend({valueOrigin:G(mr).default(mr.source),sourceProperty:X().uuid().nullable().default(null)}),Zk=Zo.and(K({type:Y(Oc),value_origin:G(mr).optional(),source_property:X().uuid().nullable().optional()})),Qk=rs.and(K({type:Y(Oc),value_origin:G(mr).optional(),source_property:X().uuid().nullable().optional()}));Qo.and(K({type:Y(Oc),value_origin:G(mr),source_property:X().uuid().nullable().optional()}));var $k=ns;cs.and(K({type:Y(Oc)})),us.and(K({type:Y(Oc)})),Xo.and(K({type:Y(Oc)}));var eA=Yo,tA=ss.and(K({type:Y(Oc)})),nA=as.and(K({type:Y(Oc)}));ts.and(K({type:Y(Oc)}));var rA=Symbol(`FB-Plugin-DevicesVirtual`),iA={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Kk)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesVirtualPlugin:n});t.i18n.global.setLocaleMessage(e,r)}let r=t.router.getRoutes().find(e=>e.name===Jo.DEVICES);r&&qk.forEach(e=>{t.router.addRoute(Jo.DEVICES,e)}),n.addPlugin(rA,{type:kc,source:`com.fastybird.smart-panel.plugin.devices-virtual`,name:`Virtual Devices`,description:`Build devices by splitting or combining the channels and properties of other devices`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Oc,components:{deviceAddForm:Wk,deviceEditForm:Gk},schemas:{deviceSchema:eA,deviceAddFormSchema:Jk,deviceEditFormSchema:Yk,deviceCreateReqSchema:tA,deviceUpdateReqSchema:nA,channelSchema:$k,channelPropertySchema:Xk,channelPropertyCreateReqSchema:Zk,channelPropertyUpdateReqSchema:Qk}}],...r?{routes:{wizard:{label:`devicesVirtualPlugin.wizard.title`,icon:`mdi:call-split`,to:{name:Ec.WIZARD},testId:`virtual-device-wizard`}}}:{},modules:[qo],isCore:!0})}},aA=k({name:`WledConfigForm`,__name:`wled-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`devicesWledPlugin.messages.config.edited`),error:i(`devicesWledPlugin.messages.config.notEdited`)}}),d=P({"polling.interval":[{required:!0,message:i(`devicesWledPlugin.fields.config.polling.interval.validation.required`),trigger:`change`},{type:`integer`,message:i(`devicesWledPlugin.fields.config.polling.interval.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}],"websocket.reconnectInterval":[{required:!0,message:i(`devicesWledPlugin.fields.config.websocket.reconnectInterval.validation.required`),trigger:`change`},{type:`integer`,message:i(`devicesWledPlugin.fields.config.websocket.reconnectInterval.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}],"timeouts.connectionTimeout":[{required:!0,message:i(`devicesWledPlugin.fields.config.timeouts.connectionTimeout.validation.required`),trigger:`change`},{type:`integer`,message:i(`devicesWledPlugin.fields.config.timeouts.connectionTimeout.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}],"timeouts.commandDebounce":[{required:!0,message:i(`devicesWledPlugin.fields.config.timeouts.commandDebounce.validation.required`),trigger:`change`},{type:`integer`,message:i(`devicesWledPlugin.fields.config.timeouts.commandDebounce.validation.number`),validator:(e,t)=>t>=0,trigger:`change`}]});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`devicesWledPlugin.headings.aboutPluginStatus`),description:L(i)(`devicesWledPlugin.texts.aboutPluginStatus`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[9]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(i)(`devicesWledPlugin.headings.aboutMdns`),description:L(i)(`devicesWledPlugin.texts.aboutMdns`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.mdns.enabled.title`),prop:`mdns.enabled`,class:`mt-3`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(o).mdns.enabled,"onUpdate:modelValue":t[1]||=e=>L(o).mdns.enabled=e,name:`mdnsEnabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.mdns.interface.title`),prop:`mdns.interface`},{default:B(()=>[D(L(U),{modelValue:L(o).mdns.interface,"onUpdate:modelValue":t[2]||=e=>L(o).mdns.interface=e,placeholder:L(i)(`devicesWledPlugin.fields.config.mdns.interface.placeholder`),name:`mdnsInterface`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.mdns.autoAdd.title`),prop:`mdns.autoAdd`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(o).mdns.autoAdd,"onUpdate:modelValue":t[3]||=e=>L(o).mdns.autoAdd=e,name:`mdnsAutoAdd`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[10]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(i)(`devicesWledPlugin.headings.aboutWebsocket`),description:L(i)(`devicesWledPlugin.texts.aboutWebsocket`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.websocket.enabled.title`),prop:`websocket.enabled`,class:`mt-3`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(o).websocket.enabled,"onUpdate:modelValue":t[4]||=e=>L(o).websocket.enabled=e,name:`websocketEnabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.websocket.reconnectInterval.title`),prop:`websocket.reconnectInterval`},{default:B(()=>[D(L(Qr),{modelValue:L(o).websocket.reconnectInterval,"onUpdate:modelValue":t[5]||=e=>L(o).websocket.reconnectInterval=e,min:1e3,step:1e3,name:`websocket.reconnectInterval`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[11]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(i)(`devicesWledPlugin.headings.aboutPolling`),description:L(i)(`devicesWledPlugin.texts.aboutPolling`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.polling.interval.title`),prop:`polling.interval`,class:`mt-3`},{default:B(()=>[D(L(Qr),{modelValue:L(o).polling.interval,"onUpdate:modelValue":t[6]||=e=>L(o).polling.interval=e,min:1e3,step:1e3,name:`polling.interval`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[12]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(i)(`devicesWledPlugin.headings.aboutTimeouts`),description:L(i)(`devicesWledPlugin.texts.aboutTimeouts`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.timeouts.connectionTimeout.title`),prop:`timeouts.connectionTimeout`,class:`mt-3`},{default:B(()=>[D(L(Qr),{modelValue:L(o).timeouts.connectionTimeout,"onUpdate:modelValue":t[7]||=e=>L(o).timeouts.connectionTimeout=e,min:1e3,step:1e3,name:`timeouts.connectionTimeout`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`devicesWledPlugin.fields.config.timeouts.commandDebounce.title`),prop:`timeouts.commandDebounce`},{default:B(()=>[D(L(Qr),{modelValue:L(o).timeouts.commandDebounce,"onUpdate:modelValue":t[8]||=e=>L(o).timeouts.commandDebounce=e,min:0,step:100,name:`timeouts.commandDebounce`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),oA=`devices-wled`,sA=`devices-wled-plugin`,cA=`devices-wled`,lA=class extends Error{},uA=class extends lA{},dA=class extends lA{code;constructor(e,t){super(e),this.code=t}},fA=xs.extend({hostname:X().trim().nonempty()}),pA=ws.extend({hostname:X().trim().nonempty()}),mA=[dr.lighting],hA=({id:e})=>{let t=pn(),n=Zn(),r=t.getStore(jo),{t:i}=M(),a=Tn(),o=On(),s=j($.NONE),c,l=p(()=>wa(mA,[e=>i(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:i(`devicesModule.categories.devices.${e}`)}))),u=P({...oa(fA),id:e,type:cA,category:dr.lighting,name:``,description:``,hostname:``,enabled:!0}),d=gn(f(u)),m=j(void 0),h=j(!1),g=async()=>{if(m.value.clearValidate(),!await m.value.validate())throw new uA(`Form not valid`);let e=fA.safeParse(u);if(!e.success)throw o.error(`Schema validation failed with:`,e.error),new uA(`Failed to validate create device model.`);s.value=$.WORKING;let t=i(`devicesWledPlugin.messages.devices.notCreated`,{device:u.name});try{let{data:i,error:a,response:s}=await n.client.POST(`/${Ie}/${oA}/discovery/adopt`,{body:{data:{devices:[{host:e.data.hostname,name:e.data.name,category:bn.lighting,description:e.data.description||null,enabled:e.data.enabled}]}}});if(i===void 0)throw new dA(a?Kn(a,t):t,s.status);let c=i.data[0];if(!c||c.status===`failed`)throw new dA(c?.error??t,422);try{await r.fetch()}catch(e){o.warn(`WLED device was created, but the device store could not be refreshed`,{message:e instanceof Error?e.message:String(e)})}}catch(e){throw s.value=$.ERROR,c=window.setTimeout(_,2e3),e instanceof dA&&e.code===422?a.error(e.message):a.error(t),e}return s.value=$.OK,c=window.setTimeout(_,2e3),a.success(i(`devicesWledPlugin.messages.devices.created`,{device:u.name})),`added`},_=()=>{window.clearTimeout(c),s.value=$.NONE};return F(u,()=>{h.value=!(0,Xd.isEqual)(f(u),d)}),{categoriesOptions:l,model:u,formEl:m,formChanged:h,submit:g,clear:_,formResult:s}},gA=k({name:`WledDeviceAddForm`,__name:`wled-device-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=hA({id:n.id}),f=P({name:[{required:!0,message:a(`devicesWledPlugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesWledPlugin.fields.devices.category.validation.required`),trigger:`change`}],hostname:[{required:!0,message:a(`devicesWledPlugin.fields.devices.hostname.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[0]||=e=>L(s).name=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[1]||=e=>L(s).category=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.hostname.title`),prop:`hostname`},{default:B(()=>[D(L(U),{modelValue:L(s).hostname,"onUpdate:modelValue":t[2]||=e=>L(s).hostname=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.hostname.placeholder`),name:`hostname`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[3]||=e=>L(s).description=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[4]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),_A=[dr.lighting],vA=({device:e,messages:t})=>{let n=pn().getStore(jo),{t:r}=M(),i=Tn(),a=On(),o=j($.NONE),s,c=p(()=>wa(_A,[e=>r(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:r(`devicesModule.categories.devices.${e}`)}))),l=P(e),u=gn(f(l)),d=j(void 0),m=j(!1),h=async()=>{let c=e.draft,p=t&&t.error?t.error:e.draft?r(`devicesWledPlugin.messages.devices.notCreated`,{device:e.name}):r(`devicesWledPlugin.messages.devices.notEdited`,{device:e.name});if(d.value.clearValidate(),!await d.value.validate())throw new gs(`Form not valid`);let h=pA.safeParse(l);if(!h.success)throw a.error(`Schema validation failed with:`,h.error),new uA(`Failed to validate edit device model.`);let _={...h.data};(0,Xd.isEqual)(_.roomId,u.roomId)&&delete _.roomId,o.value=$.WORKING;try{await n.edit({id:e.id,data:{..._,type:e.type}}),e.draft&&await n.save({id:e.id})}catch(e){throw o.value=$.ERROR,s=window.setTimeout(g,2e3),e instanceof ps&&e.code===422?i.error(e.message):i.error(p),e}return o.value=$.OK,s=window.setTimeout(g,2e3),c?(i.success(r(t&&t.success?t.success:`devicesWledPlugin.messages.devices.created`,{device:e.name})),`added`):(i.success(r(t&&t.success?t.success:`devicesWledPlugin.messages.devices.edited`,{device:e.name})),m.value=!1,u=gn(f(l)),`saved`)},g=()=>{window.clearTimeout(s),o.value=$.NONE};return F(l,()=>{m.value=!(0,Xd.isEqual)(f(l),u)}),{categoriesOptions:c,model:l,formEl:d,formChanged:m,submit:h,clear:g,formResult:o}},yA=k({name:`WledDeviceEditForm`,__name:`wled-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=vA({device:n.device}),f=P({name:[{required:!0,message:a(`devicesWledPlugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesWledPlugin.fields.devices.category.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[1]||=e=>L(s).name=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[2]||=e=>L(s).category=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[3]||=e=>L(s).description=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[4]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesWledPlugin.fields.devices.hostname.title`),prop:`hostname`},{default:B(()=>[D(L(U),{modelValue:L(s).hostname,"onUpdate:modelValue":t[5]||=e=>L(s).hostname=e,placeholder:L(a)(`devicesWledPlugin.fields.devices.hostname.placeholder`),name:`hostname`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),bA=2e3,xA=e=>e.mac?`mac:${e.mac.replace(/[^a-fA-F0-9]/g,``).toLowerCase()}`:`host:${e.host}`,SA=e=>{if(!e.mac)return null;let t=e.mac.replace(/[^a-fA-F0-9]/g,``).toLowerCase();return t.length===12?t:null},CA=(e,t)=>{let n=SA(e),r=SA(t);return n===null||r===null||n===r},wA=e=>{let t=e.host.trim();if(/^\[[^\]]+\]:\d+$/.test(t)||/^[^:]+:\d+$/.test(t))return t;let n=t.includes(`:`)&&!t.startsWith(`[`)?`[${t}]`:t;return e.port===80?n:`${n}:${e.port}`},TA=e=>{let t=wA(e);try{let e=new URL(`http://${t}`);return`${e.hostname.toLowerCase().replace(/\.$/,``)}${e.port?`:${e.port}`:``}`}catch{return t.toLowerCase().replace(/\.(?=:\d+$|$)/,``).replace(/:80$/,``)}},EA=()=>{let{t:e}=M(),t=Zn(),n=Tn(),r=On(),i=pn().getStore(jo),a=j(null),o=j([]),s=j([]),c=j($.NONE),l=j(null),u=j(0),d=null,f=null,m=!1,h=p(()=>{let e=new Map;for(let t of a.value?.devices??[])e.set(xA(t),t);for(let t of o.value){let n=e.get(xA(t));for(let[r,i]of e)TA(i)===TA(t)&&CA(i,t)&&((!n||i.adoptedDeviceId!==null)&&(n=i),e.delete(r));let r=n&&n.adoptedDeviceId!==null?{...t,name:n.name,adoptedDeviceId:n.adoptedDeviceId}:t;e.set(xA(r),r)}return wa(Array.from(e.values()),[e=>+!!e.adoptedDeviceId,`name`],[`asc`,`asc`])}),g=p(()=>h.value.map(t=>({key:xA(t),label:t.name||t.host,subLabel:t.mac,identifier:t.mac??t.host,status:t.adoptedDeviceId?`already_registered`:`ready`,adoptable:!0,willUpdate:t.adoptedDeviceId!==null,suggestedName:t.name||t.host,suggestedCategory:dr.lighting,categoryOptions:[{value:dr.lighting,label:e(`devicesModule.categories.devices.${dr.lighting}`)}],cells:{host:{render:`code`,value:t.host}}}))),_=p(()=>s.value.map(e=>{let t=h.value.find(t=>wA(t)===e.host);return{key:t?xA(t):`host:${e.host}`,name:e.name,identifier:t?.mac??e.host,status:e.status,error:e.error}})),v=e=>{a.value={mdnsEnabled:e.mdnsEnabled,discoveryRunning:e.discoveryRunning,devices:e.devices.map(e=>({...e,mac:e.mac??null,adoptedDeviceId:e.adoptedDeviceId??null}))},l.value=null},y=async()=>{let n=u.value,{data:r,error:i,response:a}=await t.client.GET(`/${Ie}/${oA}/discovery`);if(r!==void 0){n===u.value&&v(r.data);return}throw new dA(i?Kn(i,e(`devicesWledPlugin.wizard.messages.discoveryFailed`)):e(`devicesWledPlugin.wizard.messages.discoveryFailed`),a.status)},b=()=>{d!==null&&(clearTimeout(d),d=null)},x=()=>{b(),d=setTimeout(async()=>{if(d=null,!m){try{await y()}catch(e){r.warn(`Failed to refresh WLED discovery inventory`,e)}m||x()}},bA)},S=async()=>{m=!1,c.value=$.WORKING;try{if(await y(),c.value=$.NONE,m)return;x()}catch(t){let r=t instanceof Error?t.message:e(`devicesWledPlugin.wizard.messages.discoveryFailed`);throw c.value=$.ERROR,l.value=r,n.error(r),t}},C=async()=>{c.value=$.WORKING;let r;try{r=await t.client.POST(`/${Ie}/${oA}/discovery/rescan`)}catch(t){let r=t instanceof Error?t.message:e(`devicesWledPlugin.wizard.messages.rescanFailed`);throw c.value=$.ERROR,n.error(r),new dA(r,0)}let{data:i,error:a,response:l}=r;if(i!==void 0){u.value+=1,o.value=[],s.value=[],v(i.data),c.value=$.NONE;return}let d=a?Kn(a,e(`devicesWledPlugin.wizard.messages.rescanFailed`)):e(`devicesWledPlugin.wizard.messages.rescanFailed`);throw c.value=$.ERROR,n.error(d),new dA(d,l.status)},w=()=>(f===null&&(f=C().finally(()=>{f=null})),f),T=async r=>{let i=(r.host??``).trim();if(!i){let t=e(`devicesWledPlugin.fields.devices.hostname.validation.required`);throw n.error(t),new uA(t)}c.value=$.WORKING;let a;try{a=await t.client.POST(`/${Ie}/${oA}/discovery/probe`,{body:{data:{host:i}}})}catch(t){let r=t instanceof Error?t.message:e(`devicesWledPlugin.wizard.messages.probeFailed`);throw c.value=$.ERROR,n.error(r),new dA(r,0)}let{data:s,error:l,response:u}=a;if(s!==void 0){let e=s.data;o.value=[...o.value.filter(t=>t.host!==e.host),{host:e.host,name:e.name,mac:e.mac??null,port:e.port,adoptedDeviceId:e.adoptedDeviceId??null}],c.value=$.NONE;return}let d=l?Kn(l,e(`devicesWledPlugin.wizard.messages.probeFailed`)):e(`devicesWledPlugin.wizard.messages.probeFailed`);throw c.value=$.ERROR,n.error(d),new dA(d,u.status)},E=p(()=>{let t=[];return l.value?t.push({type:`banner`,id:`error`,severity:`error`,title:l.value}):a.value?.mdnsEnabled===!1&&t.push({type:`banner`,id:`mdns-disabled`,severity:`info`,title:e(`devicesWledPlugin.wizard.mdnsDisabled.title`),message:e(`devicesWledPlugin.wizard.mdnsDisabled.message`)}),t.push({type:`action`,id:`rescan`,label:e(`devicesWledPlugin.wizard.actions.rescan`),icon:`mdi:radar`,disabled:c.value===$.WORKING,loading:c.value===$.WORKING,handler:w},{type:`form`,id:`manual`,fields:[{key:`host`,label:e(`devicesWledPlugin.fields.devices.hostname.title`),placeholder:e(`devicesWledPlugin.fields.devices.hostname.placeholder`)}],submitLabel:e(`devicesWledPlugin.wizard.actions.probe`),submitIcon:`mdi:lan-connect`,submitDisabled:c.value===$.WORKING,loading:c.value===$.WORKING,handler:T}),t});return{title:e(`devicesWledPlugin.wizard.title`),subtitle:e(`devicesWledPlugin.wizard.subtitle`),breadcrumbLabel:e(`devicesWledPlugin.wizard.breadcrumb`),pluginType:sA,identifierLabel:e(`devicesWledPlugin.wizard.columns.identifier`),rows:g,results:_,columns:[{key:`host`,label:e(`devicesWledPlugin.wizard.columns.host`),steps:[`discover`],minWidth:160}],controls:E,sessionKey:p(()=>String(u.value)),ready:p(()=>a.value!==null||l.value!==null),busy:p(()=>c.value===$.WORKING),capabilities:{addMore:!0},start:S,adopt:async a=>{c.value=$.WORKING;let o=a.flatMap(e=>{let t=h.value.find(t=>xA(t)===e.key);return t?[{item:e,device:t}]:[]}),l;try{l=await t.client.POST(`/${Ie}/${oA}/discovery/adopt`,{body:{data:{devices:o.map(({item:e,device:t})=>({host:wA(t),name:e.name,category:bn.lighting}))}}})}catch(t){let r=t instanceof Error?t.message:e(`devicesWledPlugin.wizard.messages.adoptionFailed`);throw c.value=$.ERROR,n.error(r),new dA(r,0)}let{data:u,error:d,response:f}=l;if(u!==void 0){if(s.value=u.data.map(e=>({host:e.host,name:e.name,status:e.status,error:e.error??null})),s.value.some(e=>e.status===`created`||e.status===`updated`))try{await i.fetch()}catch(e){r.warn(`WLED devices were adopted, but the device store could not be refreshed`,{message:e instanceof Error?e.message:String(e)})}return c.value=s.value.some(e=>e.status===`failed`)?$.ERROR:$.OK,_.value}let p=d?Kn(d,e(`devicesWledPlugin.wizard.messages.adoptionFailed`)):e(`devicesWledPlugin.wizard.messages.adoptionFailed`);throw c.value=$.ERROR,n.error(p),new dA(p,f.status)},restart:w,dispose:async()=>{m=!0,b()}}},DA={"cs-CZ":{headings:{aboutPluginStatus:`Stav pluginu`,aboutMdns:`Vyhledávání mDNS`,aboutWebsocket:`WebSocket připojení`,aboutPolling:`Dotazování zařízení`,aboutTimeouts:`Konfigurace časových limitů`},texts:{aboutPluginStatus:`Povolte nebo zakažte plugin WLED. Pokud je zakázán, žádná zařízení WLED nebudou monitorována ani ovládána.`,aboutMdns:`Vyhledávání mDNS umožňuje automatickou detekci zařízení WLED ve vaší síti.`,aboutWebsocket:`WebSocket poskytuje aktualizace v reálném čase z vašich zařízení WLED pro rychlejší synchronizaci stavu.`,aboutPolling:`Nakonfigurujte, jak často plugin dotazuje zařízení na aktualizace stavu, když WebSocket není k dispozici.`,aboutTimeouts:`Nakonfigurujte časové limity připojení a příkazů pro komunikaci se zařízeními WLED.`},fields:{config:{enabled:{title:`Povolit plugin`},mdns:{enabled:{title:`Povolit vyhledávání mDNS`},interface:{title:`Síťové rozhraní`,placeholder:`Ponechte prázdné pro výchozí`},autoAdd:{title:`Automaticky přidávat nalezená zařízení`}},websocket:{enabled:{title:`Povolit WebSocket`},reconnectInterval:{title:`Interval opětovného připojení (ms)`,validation:{required:`Interval opětovného připojení je povinný`,number:`Musí být číslo >= 1000`}}},polling:{interval:{title:`Interval dotazování (ms)`,validation:{required:`Interval dotazování je povinný`,number:`Musí být číslo >= 1000`}}},timeouts:{connectionTimeout:{title:`Časový limit připojení (ms)`,validation:{required:`Časový limit připojení je povinný`,number:`Musí být číslo >= 1000`}},commandDebounce:{title:`Debounce příkazů (ms)`,validation:{required:`Debounce příkazů je povinný`,number:`Musí být číslo >= 0`}}}},devices:{id:{title:`ID zařízení`,placeholder:`ID zařízení`},name:{title:`Název zařízení`,placeholder:`Zadejte název zařízení`,validation:{required:`Název zařízení je povinný`}},category:{title:`Kategorie zařízení`,placeholder:`Vyberte kategorii`,validation:{required:`Kategorie zařízení je povinná`}},description:{title:`Popis`,placeholder:`Zadejte popis zařízení (volitelné)`},hostname:{title:`Název hostitele nebo IP adresa`,placeholder:`např. 192.168.1.100 nebo wled-device.local`,validation:{required:`Název hostitele nebo IP adresa je povinná`}},enabled:{title:`Povoleno`}}},messages:{config:{edited:`Konfigurace pluginu WLED byla aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci pluginu WLED`},devices:{created:`Zařízení WLED '{device}' bylo vytvořeno`,notCreated:`Nepodařilo se vytvořit zařízení WLED '{device}'`,edited:`Zařízení WLED '{device}' bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat zařízení WLED '{device}'`}},wizard:{title:`Přidat zařízení WLED`,subtitle:`Vyhledejte řadiče WLED nebo přidejte zařízení podle adresy a přijměte jich více najednou.`,breadcrumb:`Průvodce přijetím WLED`,columns:{identifier:`MAC adresa nebo název hostitele`,host:`Hostitel`},actions:{rescan:`Znovu prohledat síť`,probe:`Ověřit zařízení`},mdnsDisabled:{title:`Automatické vyhledávání je vypnuté`,message:`Řadič WLED můžete přesto přidat zadáním názvu hostitele nebo IP adresy níže.`},messages:{discoveryFailed:`Nepodařilo se načíst vyhledávání WLED.`,rescanFailed:`Nepodařilo se znovu spustit vyhledávání WLED.`,probeFailed:`Nepodařilo se připojit k zařízení WLED.`,adoptionFailed:`Nepodařilo se přijmout vybraná zařízení WLED.`}}},"de-DE":{headings:{aboutPluginStatus:`Plugin-Status`,aboutMdns:`mDNS-Erkennung`,aboutWebsocket:`WebSocket-Verbindung`,aboutPolling:`Geräte-Abfrage`,aboutTimeouts:`Zeitlimit-Konfiguration`},texts:{aboutPluginStatus:`Aktivieren oder deaktivieren Sie das WLED-Plugin. Wenn deaktiviert, werden keine WLED-Geräte überwacht oder gesteuert.`,aboutMdns:`mDNS-Erkennung ermöglicht die automatische Erkennung von WLED-Geräten in Ihrem Netzwerk.`,aboutWebsocket:`WebSocket bietet Echtzeitaktualisierungen von Ihren WLED-Geräten für eine schnellere Zustandssynchronisierung.`,aboutPolling:`Konfigurieren Sie, wie oft das Plugin Geräte nach Statusaktualisierungen abfragt, wenn WebSocket nicht verfügbar ist.`,aboutTimeouts:`Konfigurieren Sie Verbindungs- und Befehlszeitlimits für die WLED-Gerätekommunikation.`},fields:{config:{enabled:{title:`Plugin aktivieren`},mdns:{enabled:{title:`mDNS-Erkennung aktivieren`},interface:{title:`Netzwerkschnittstelle`,placeholder:`Leer lassen für Standard`},autoAdd:{title:`Erkannte Geräte automatisch hinzufügen`}},websocket:{enabled:{title:`WebSocket aktivieren`},reconnectInterval:{title:`Wiederverbindungsintervall (ms)`,validation:{required:`Wiederverbindungsintervall ist erforderlich`,number:`Muss eine Zahl >= 1000 sein`}}},polling:{interval:{title:`Abfrageintervall (ms)`,validation:{required:`Abfrageintervall ist erforderlich`,number:`Muss eine Zahl >= 1000 sein`}}},timeouts:{connectionTimeout:{title:`Verbindungszeitlimit (ms)`,validation:{required:`Verbindungszeitlimit ist erforderlich`,number:`Muss eine Zahl >= 1000 sein`}},commandDebounce:{title:`Befehls-Entprellung (ms)`,validation:{required:`Befehls-Entprellung ist erforderlich`,number:`Muss eine Zahl >= 0 sein`}}}},devices:{id:{title:`Geräte-ID`,placeholder:`Geräte-ID`},name:{title:`Gerätename`,placeholder:`Gerätenamen eingeben`,validation:{required:`Gerätename ist erforderlich`}},category:{title:`Gerätekategorie`,placeholder:`Kategorie auswählen`,validation:{required:`Gerätekategorie ist erforderlich`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung eingeben (optional)`},hostname:{title:`Hostname oder IP-Adresse`,placeholder:`z.B. 192.168.1.100 oder wled-device.local`,validation:{required:`Hostname oder IP-Adresse ist erforderlich`}},enabled:{title:`Aktiviert`}}},messages:{config:{edited:`WLED-Plugin-Konfiguration wurde aktualisiert`,notEdited:`Aktualisierung der WLED-Plugin-Konfiguration fehlgeschlagen`},devices:{created:`WLED-Gerät '{device}' wurde erstellt`,notCreated:`Erstellung des WLED-Geräts '{device}' fehlgeschlagen`,edited:`WLED-Gerät '{device}' wurde aktualisiert`,notEdited:`Aktualisierung des WLED-Geräts '{device}' fehlgeschlagen`}},wizard:{title:`WLED-Geräte hinzufügen`,subtitle:`WLED-Controller erkennen oder per Hostname hinzufügen und mehrere Geräte gemeinsam übernehmen.`,breadcrumb:`WLED-Übernahmeassistent`,columns:{identifier:`MAC-Adresse oder Hostname`,host:`Gastgeber`},actions:{rescan:`Netzwerk erneut durchsuchen`,probe:`Gerät prüfen`},mdnsDisabled:{title:`Automatische Erkennung ist deaktiviert`,message:`Ein WLED-Controller kann weiterhin über Hostname oder IP-Adresse hinzugefügt werden.`},messages:{discoveryFailed:`WLED-Erkennung konnte nicht geladen werden.`,rescanFailed:`WLED-Erkennung konnte nicht neu gestartet werden.`,probeFailed:`Verbindung zum WLED-Gerät fehlgeschlagen.`,adoptionFailed:`Die ausgewählten WLED-Geräte konnten nicht übernommen werden.`}}},"en-US":{headings:{aboutPluginStatus:`Plugin Status`,aboutMdns:`mDNS Discovery`,aboutWebsocket:`WebSocket Connection`,aboutPolling:`Device Polling`,aboutTimeouts:`Timeouts Configuration`},texts:{aboutPluginStatus:`Enable or disable the WLED plugin. When disabled, no WLED devices will be monitored or controlled.`,aboutMdns:`mDNS discovery allows automatic detection of WLED devices on your network.`,aboutWebsocket:`WebSocket provides real-time updates from your WLED devices for faster state synchronization.`,aboutPolling:`Configure how often the plugin polls devices for state updates when WebSocket is not available.`,aboutTimeouts:`Configure connection and command timeouts for WLED device communication.`},fields:{config:{enabled:{title:`Enable Plugin`},mdns:{enabled:{title:`Enable mDNS Discovery`},interface:{title:`Network Interface`,placeholder:`Leave empty for default`},autoAdd:{title:`Auto-Add Discovered Devices`}},websocket:{enabled:{title:`Enable WebSocket`},reconnectInterval:{title:`Reconnect Interval (ms)`,validation:{required:`Reconnect interval is required`,number:`Must be a number >= 1000`}}},polling:{interval:{title:`Polling Interval (ms)`,validation:{required:`Polling interval is required`,number:`Must be a number >= 1000`}}},timeouts:{connectionTimeout:{title:`Connection Timeout (ms)`,validation:{required:`Connection timeout is required`,number:`Must be a number >= 1000`}},commandDebounce:{title:`Command Debounce (ms)`,validation:{required:`Command debounce is required`,number:`Must be a number >= 0`}}}},devices:{id:{title:`Device ID`,placeholder:`Device ID`},name:{title:`Device Name`,placeholder:`Enter device name`,validation:{required:`Device name is required`}},category:{title:`Device Category`,placeholder:`Select category`,validation:{required:`Device category is required`}},description:{title:`Description`,placeholder:`Enter device description (optional)`},hostname:{title:`Hostname or IP Address`,placeholder:`e.g., 192.168.1.100 or wled-device.local`,validation:{required:`Hostname or IP address is required`}},enabled:{title:`Enabled`}}},messages:{config:{edited:`WLED plugin configuration has been updated`,notEdited:`Failed to update WLED plugin configuration`},devices:{created:`WLED device '{device}' has been created`,notCreated:`Failed to create WLED device '{device}'`,edited:`WLED device '{device}' has been updated`,notEdited:`Failed to update WLED device '{device}'`}},wizard:{title:`Add WLED devices`,subtitle:`Discover WLED controllers or add one by hostname, then adopt several devices at once.`,breadcrumb:`WLED adoption wizard`,columns:{identifier:`MAC address or hostname`,host:`Host`},actions:{rescan:`Rescan network`,probe:`Check device`},mdnsDisabled:{title:`Automatic discovery is disabled`,message:`You can still add a WLED controller by entering its hostname or IP address below.`},messages:{discoveryFailed:`Failed to load WLED discovery.`,rescanFailed:`Failed to restart WLED discovery.`,probeFailed:`Failed to connect to the WLED device.`,adoptionFailed:`Failed to adopt the selected WLED devices.`}}},"es-ES":{headings:{aboutPluginStatus:`Estado del plugin`,aboutMdns:`Descubrimiento mDNS`,aboutWebsocket:`Conexión WebSocket`,aboutPolling:`Sondeo de dispositivos`,aboutTimeouts:`Configuración de tiempos de espera`},texts:{aboutPluginStatus:`Habilitar o deshabilitar el plugin WLED. Cuando está deshabilitado, no se monitorizarán ni controlarán dispositivos WLED.`,aboutMdns:`El descubrimiento mDNS permite la detección automática de dispositivos WLED en su red.`,aboutWebsocket:`WebSocket proporciona actualizaciones en tiempo real desde sus dispositivos WLED para una sincronización de estado más rápida.`,aboutPolling:`Configure con qué frecuencia el plugin sondea los dispositivos para obtener actualizaciones de estado cuando WebSocket no está disponible.`,aboutTimeouts:`Configure los tiempos de espera de conexión y comandos para la comunicación con dispositivos WLED.`},fields:{config:{enabled:{title:`Habilitar plugin`},mdns:{enabled:{title:`Habilitar descubrimiento mDNS`},interface:{title:`Interfaz de red`,placeholder:`Dejar vacío para usar la predeterminada`},autoAdd:{title:`Agregar automáticamente dispositivos descubiertos`}},websocket:{enabled:{title:`Habilitar WebSocket`},reconnectInterval:{title:`Intervalo de reconexión (ms)`,validation:{required:`El intervalo de reconexión es obligatorio`,number:`Debe ser un número >= 1000`}}},polling:{interval:{title:`Intervalo de sondeo (ms)`,validation:{required:`El intervalo de sondeo es obligatorio`,number:`Debe ser un número >= 1000`}}},timeouts:{connectionTimeout:{title:`Tiempo de espera de conexión (ms)`,validation:{required:`El tiempo de espera de conexión es obligatorio`,number:`Debe ser un número >= 1000`}},commandDebounce:{title:`Rebote de comandos (ms)`,validation:{required:`El rebote de comandos es obligatorio`,number:`Debe ser un número >= 0`}}}},devices:{id:{title:`ID del dispositivo`,placeholder:`ID del dispositivo`},name:{title:`Nombre del dispositivo`,placeholder:`Introduzca el nombre del dispositivo`,validation:{required:`El nombre del dispositivo es obligatorio`}},category:{title:`Categoría del dispositivo`,placeholder:`Seleccionar categoría`,validation:{required:`La categoría del dispositivo es obligatoria`}},description:{title:`Descripción`,placeholder:`Introduzca la descripción del dispositivo (opcional)`},hostname:{title:`Nombre de host o dirección IP`,placeholder:`p. ej., 192.168.1.100 o wled-device.local`,validation:{required:`El nombre de host o la dirección IP es obligatorio`}},enabled:{title:`Habilitado`}}},messages:{config:{edited:`La configuración del plugin WLED ha sido actualizada`,notEdited:`Error al actualizar la configuración del plugin WLED`},devices:{created:`El dispositivo WLED '{device}' ha sido creado`,notCreated:`Error al crear el dispositivo WLED '{device}'`,edited:`El dispositivo WLED '{device}' ha sido actualizado`,notEdited:`Error al actualizar el dispositivo WLED '{device}'`}},wizard:{title:`Añadir dispositivos WLED`,subtitle:`Descubre controladores WLED o añade uno por nombre de host y adopta varios dispositivos a la vez.`,breadcrumb:`Asistente de adopción WLED`,columns:{identifier:`Dirección MAC o nombre de host`,host:`Anfitrión`},actions:{rescan:`Volver a explorar la red`,probe:`Comprobar dispositivo`},mdnsDisabled:{title:`El descubrimiento automático está desactivado`,message:`Aún puedes añadir un controlador WLED indicando su nombre de host o dirección IP.`},messages:{discoveryFailed:`No se pudo cargar el descubrimiento WLED.`,rescanFailed:`No se pudo reiniciar el descubrimiento WLED.`,probeFailed:`No se pudo conectar con el dispositivo WLED.`,adoptionFailed:`No se pudieron adoptar los dispositivos WLED seleccionados.`}}},"pl-PL":{headings:{aboutPluginStatus:`Status wtyczki`,aboutMdns:`Wykrywanie mDNS`,aboutWebsocket:`Polaczenie WebSocket`,aboutPolling:`Odpytywanie urzadzen`,aboutTimeouts:`Konfiguracja limitow czasu`},texts:{aboutPluginStatus:`Wlacz lub wylacz wtyczke WLED. Po wylaczeniu zadne urzadzenia WLED nie beda monitorowane ani sterowane.`,aboutMdns:`Wykrywanie mDNS umozliwia automatyczne wykrywanie urzadzen WLED w sieci.`,aboutWebsocket:`WebSocket zapewnia aktualizacje w czasie rzeczywistym z urzadzen WLED dla szybszej synchronizacji stanu.`,aboutPolling:`Skonfiguruj, jak czesto wtyczka odpytuje urzadzenia o aktualizacje stanu, gdy WebSocket nie jest dostepny.`,aboutTimeouts:`Skonfiguruj limity czasu polaczenia i komend dla komunikacji z urzadzeniami WLED.`},fields:{config:{enabled:{title:`Wlacz wtyczke`},mdns:{enabled:{title:`Wlacz wykrywanie mDNS`},interface:{title:`Interfejs sieciowy`,placeholder:`Pozostaw puste dla domyslnego`},autoAdd:{title:`Automatyczne dodawanie wykrytych urzadzen`}},websocket:{enabled:{title:`Wlacz WebSocket`},reconnectInterval:{title:`Interwal ponownego polaczenia (ms)`,validation:{required:`Interwal ponownego polaczenia jest wymagany`,number:`Musi byc liczba >= 1000`}}},polling:{interval:{title:`Interwal odpytywania (ms)`,validation:{required:`Interwal odpytywania jest wymagany`,number:`Musi byc liczba >= 1000`}}},timeouts:{connectionTimeout:{title:`Limit czasu polaczenia (ms)`,validation:{required:`Limit czasu polaczenia jest wymagany`,number:`Musi byc liczba >= 1000`}},commandDebounce:{title:`Opoznienie komendy (ms)`,validation:{required:`Opoznienie komendy jest wymagane`,number:`Musi byc liczba >= 0`}}}},devices:{id:{title:`ID urzadzenia`,placeholder:`ID urzadzenia`},name:{title:`Nazwa urzadzenia`,placeholder:`Wprowadz nazwe urzadzenia`,validation:{required:`Nazwa urzadzenia jest wymagana`}},category:{title:`Kategoria urzadzenia`,placeholder:`Wybierz kategorie`,validation:{required:`Kategoria urzadzenia jest wymagana`}},description:{title:`Opis`,placeholder:`Wprowadz opis urzadzenia (opcjonalnie)`},hostname:{title:`Nazwa hosta lub adres IP`,placeholder:`np. 192.168.1.100 lub wled-device.local`,validation:{required:`Nazwa hosta lub adres IP jest wymagana`}},enabled:{title:`Wlaczony`}}},messages:{config:{edited:`Konfiguracja wtyczki WLED zostala zaktualizowana`,notEdited:`Nie udalo sie zaktualizowac konfiguracji wtyczki WLED`},devices:{created:`Urzadzenie WLED '{device}' zostalo utworzone`,notCreated:`Nie udalo sie utworzyc urzadzenia WLED '{device}'`,edited:`Urzadzenie WLED '{device}' zostalo zaktualizowane`,notEdited:`Nie udalo sie zaktualizowac urzadzenia WLED '{device}'`}},wizard:{title:`Dodaj urządzenia WLED`,subtitle:`Wykryj sterowniki WLED lub dodaj urządzenie po nazwie hosta i przyjmij wiele urządzeń naraz.`,breadcrumb:`Kreator przyjmowania WLED`,columns:{identifier:`Adres MAC lub nazwa hosta`,host:`Gospodarz`},actions:{rescan:`Skanuj sieć ponownie`,probe:`Sprawdź urządzenie`},mdnsDisabled:{title:`Automatyczne wykrywanie jest wyłączone`,message:`Nadal możesz dodać sterownik WLED, podając poniżej nazwę hosta lub adres IP.`},messages:{discoveryFailed:`Nie udało się wczytać wykrywania WLED.`,rescanFailed:`Nie udało się ponownie uruchomić wykrywania WLED.`,probeFailed:`Nie udało się połączyć z urządzeniem WLED.`,adoptionFailed:`Nie udało się przyjąć wybranych urządzeń WLED.`}}},"sk-SK":{headings:{aboutPluginStatus:`Stav pluginu`,aboutMdns:`mDNS objavovanie`,aboutWebsocket:`WebSocket pripojenie`,aboutPolling:`Dotazovanie zariadení`,aboutTimeouts:`Konfigurácia časových limitov`},texts:{aboutPluginStatus:`Povoľte alebo zakážte plugin WLED. Keď je zakázaný, žiadne zariadenia WLED nebudú monitorované ani ovládané.`,aboutMdns:`mDNS objavovanie umožňuje automatickú detekciu zariadení WLED na vašej sieti.`,aboutWebsocket:`WebSocket poskytuje aktualizácie v reálnom čase z vašich zariadení WLED pre rýchlejšiu synchronizáciu stavu.`,aboutPolling:`Nakonfigurujte, ako často plugin dotazuje zariadenia na aktualizácie stavu, keď WebSocket nie je dostupný.`,aboutTimeouts:`Nakonfigurujte časové limity pripojenia a príkazov pre komunikáciu so zariadeniami WLED.`},fields:{config:{enabled:{title:`Povoliť plugin`},mdns:{enabled:{title:`Povoliť mDNS objavovanie`},interface:{title:`Sieťové rozhranie`,placeholder:`Ponechajte prázdne pre predvolené`},autoAdd:{title:`Automaticky pridávať objavené zariadenia`}},websocket:{enabled:{title:`Povoliť WebSocket`},reconnectInterval:{title:`Interval opätovného pripojenia (ms)`,validation:{required:`Interval opätovného pripojenia je povinný`,number:`Musí byť číslo >= 1000`}}},polling:{interval:{title:`Interval dotazovania (ms)`,validation:{required:`Interval dotazovania je povinný`,number:`Musí byť číslo >= 1000`}}},timeouts:{connectionTimeout:{title:`Časový limit pripojenia (ms)`,validation:{required:`Časový limit pripojenia je povinný`,number:`Musí byť číslo >= 1000`}},commandDebounce:{title:`Odrazenie príkazu (ms)`,validation:{required:`Odrazenie príkazu je povinné`,number:`Musí byť číslo >= 0`}}}},devices:{id:{title:`ID zariadenia`,placeholder:`ID zariadenia`},name:{title:`Názov zariadenia`,placeholder:`Zadajte názov zariadenia`,validation:{required:`Názov zariadenia je povinný`}},category:{title:`Kategória zariadenia`,placeholder:`Vyberte kategóriu`,validation:{required:`Kategória zariadenia je povinná`}},description:{title:`Popis`,placeholder:`Zadajte popis zariadenia (voliteľné)`},hostname:{title:`Hostname alebo IP adresa`,placeholder:`napr. 192.168.1.100 alebo wled-device.local`,validation:{required:`Hostname alebo IP adresa je povinná`}},enabled:{title:`Povolené`}}},messages:{config:{edited:`Konfigurácia pluginu WLED bola aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu pluginu WLED`},devices:{created:`Zariadenie WLED '{device}' bolo vytvorené`,notCreated:`Nepodarilo sa vytvoriť zariadenie WLED '{device}'`,edited:`Zariadenie WLED '{device}' bolo aktualizované`,notEdited:`Nepodarilo sa aktualizovať zariadenie WLED '{device}'`}},wizard:{title:`Pridať zariadenia WLED`,subtitle:`Vyhľadajte radiče WLED alebo pridajte zariadenie podľa adresy a prijmite viac zariadení naraz.`,breadcrumb:`Sprievodca prijatím WLED`,columns:{identifier:`MAC adresa alebo názov hostiteľa`,host:`Hostiteľ`},actions:{rescan:`Znova prehľadať sieť`,probe:`Overiť zariadenie`},mdnsDisabled:{title:`Automatické vyhľadávanie je vypnuté`,message:`Radič WLED môžete napriek tomu pridať zadaním názvu hostiteľa alebo IP adresy nižšie.`},messages:{discoveryFailed:`Nepodarilo sa načítať vyhľadávanie WLED.`,rescanFailed:`Nepodarilo sa znova spustiť vyhľadávanie WLED.`,probeFailed:`Nepodarilo sa pripojiť k zariadeniu WLED.`,adoptionFailed:`Nepodarilo sa prijať vybrané zariadenia WLED.`}}}},OA=Ki.extend({mdns:K({enabled:J(),interface:X().nullable(),autoAdd:J()}),websocket:K({enabled:J(),reconnectInterval:Dt().int().min(1e3)}),polling:K({interval:Dt().int().min(1e3)}),timeouts:K({connectionTimeout:Dt().int().min(1e3),commandDebounce:Dt().int().min(0)})}),kA=os,AA=Zo.and(K({type:Y(cA)})),jA=rs.and(K({type:Y(cA)}));Qo.and(K({type:Y(cA)}));var MA=ns,NA=cs.and(K({type:Y(cA)})),PA=us.and(K({type:Y(cA)}));Xo.and(K({type:Y(cA)}));var FA=Wi.extend({timeouts:K({connectionTimeout:q(),commandDebounce:q()}),polling:K({interval:q()}),mdns:K({enabled:J(),interface:X().nullable(),autoAdd:J()}),websocket:K({enabled:J(),reconnectInterval:q()})}),IA=Zi.and(K({type:Y(sA),timeouts:K({connection_timeout:q().optional(),command_debounce:q().optional()}).optional(),polling:K({interval:q().optional()}).optional(),mdns:K({enabled:J().optional(),interface:X().nullable().optional(),auto_add:J().optional()}).optional(),websocket:K({enabled:J().optional(),reconnect_interval:q().optional()}).optional()}));Ri.and(K({type:Y(sA),timeouts:K({connection_timeout:q(),command_debounce:q()}),polling:K({interval:q()}),mdns:K({enabled:J(),interface:X().nullable(),auto_add:J()}),websocket:K({enabled:J(),reconnect_interval:q()})}));var LA=Yo.extend({hostname:X()}),RA=ss.and(K({type:Y(cA),hostname:X()})),zA=as.and(K({type:Y(cA),category:G(dr).optional(),hostname:X().optional()}));ts.and(K({type:Y(cA),hostname:X()}));var BA=Symbol(`FB-Plugin-DevicesWled`),VA={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(DA)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesWledPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(BA,{type:sA,source:`com.fastybird.smart-panel.plugin.devices-wled`,name:`WLED`,description:`Connect and control your WLED addressable LED controllers from the FastyBird Smart Panel`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:aA},schemas:{pluginConfigSchema:FA,pluginConfigEditFormSchema:OA,pluginConfigUpdateReqSchema:IA},modules:[ka]},{type:cA,components:{deviceAddForm:gA,deviceEditForm:yA,deviceWizardAdapter:EA},schemas:{deviceSchema:LA,deviceAddFormSchema:fA,deviceEditFormSchema:pA,deviceCreateReqSchema:RA,deviceUpdateReqSchema:zA,channelSchema:MA,channelCreateReqSchema:NA,channelUpdateReqSchema:PA,channelPropertySchema:kA,channelPropertyCreateReqSchema:AA,channelPropertyUpdateReqSchema:jA},modules:[qo]}],modules:[qo,ka],isCore:!0})}},HA=k({name:`Zigbee2mqttConfigForm`,__name:`zigbee2mqtt-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},remoteFormErrors:{default:()=>[]},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`devicesZigbee2mqttPlugin.messages.config.edited`),error:a(`devicesZigbee2mqttPlugin.messages.config.notEdited`)}}),f=p(()=>{let e={};for(let t of n.remoteFormErrors)e[t.field]=t.message;return e}),m={"mqtt.host":[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.config.mqtt.host.validation.required`),trigger:`blur`}],"mqtt.port":[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.config.mqtt.port.validation.required`),trigger:`change`},{type:`integer`,message:a(`devicesZigbee2mqttPlugin.fields.config.mqtt.port.validation.range`),validator:(e,t)=>t>=1&&t<=65535,trigger:`change`}],"mqtt.baseTopic":[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.config.mqtt.baseTopic.validation.required`),trigger:`blur`}],"mqtt.keepalive":[{type:`integer`,message:a(`devicesZigbee2mqttPlugin.fields.config.mqtt.keepalive.validation.number`),validator:(e,t)=>t>=10,trigger:`change`}],"mqtt.connectTimeout":[{type:`integer`,message:a(`devicesZigbee2mqttPlugin.fields.config.mqtt.connectTimeout.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}],"mqtt.reconnectInterval":[{type:`integer`,message:a(`devicesZigbee2mqttPlugin.fields.config.mqtt.reconnectInterval.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}]},h={"ws.host":[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.config.ws.host.validation.required`),trigger:`blur`}],"ws.port":[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.config.ws.port.validation.required`),trigger:`change`},{type:`integer`,message:a(`devicesZigbee2mqttPlugin.fields.config.ws.port.validation.range`),validator:(e,t)=>t>=1&&t<=65535,trigger:`change`}],"ws.baseTopic":[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.config.ws.baseTopic.validation.required`),trigger:`blur`}],"ws.connectTimeout":[{type:`integer`,message:a(`devicesZigbee2mqttPlugin.fields.config.ws.connectTimeout.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}],"ws.reconnectInterval":[{type:`integer`,message:a(`devicesZigbee2mqttPlugin.fields.config.ws.reconnectInterval.validation.number`),validator:(e,t)=>t>=1e3,trigger:`change`}]},g=p(()=>s.connectionType===`ws`?h:m);return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:g.value,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`devicesZigbee2mqttPlugin.headings.aboutPluginStatus`),description:L(a)(`devicesZigbee2mqttPlugin.texts.aboutPluginStatus`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[26]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(a)(`devicesZigbee2mqttPlugin.headings.aboutConnection`),description:L(a)(`devicesZigbee2mqttPlugin.texts.aboutConnection`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.connectionType.title`),prop:`connectionType`,class:`mt-3`},{default:B(()=>[D(L(oi),{modelValue:L(s).connectionType,"onUpdate:modelValue":t[1]||=e=>L(s).connectionType=e,name:`connectionType`},{default:B(()=>[D(L(ai),{value:`mqtt`},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.fields.config.connectionType.mqtt`)),1)]),_:1}),D(L(ai),{value:`ws`},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.fields.config.connectionType.ws`)),1)]),_:1})]),_:1},8,[`modelValue`])]),_:1},8,[`label`]),t[27]||=l(`hr`,null,null,-1),L(s).connectionType===`mqtt`?(A(),i(V,{key:0},[D(L(Q),{type:`info`,title:L(a)(`devicesZigbee2mqttPlugin.headings.aboutMqtt`),description:L(a)(`devicesZigbee2mqttPlugin.texts.aboutMqtt`),closable:!1},null,8,[`title`,`description`]),D(L(si),{gutter:20,class:`mt-3`},{default:B(()=>[D(L(ci),{xs:24,sm:16},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.host.title`),prop:`mqtt.host`,error:f.value[`mqtt.host`]},{default:B(()=>[D(L(U),{modelValue:L(s).mqtt.host,"onUpdate:modelValue":t[2]||=e=>L(s).mqtt.host=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.host.placeholder`),name:`mqttHost`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`error`])]),_:1}),D(L(ci),{xs:24,sm:8},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.port.title`),prop:`mqtt.port`},{default:B(()=>[D(L(Qr),{modelValue:L(s).mqtt.port,"onUpdate:modelValue":t[3]||=e=>L(s).mqtt.port=e,min:1,max:65535,name:`mqttPort`,class:`w-full!`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1})]),_:1}),D(L(si),{gutter:20},{default:B(()=>[D(L(ci),{xs:24,sm:12},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.username.title`),prop:`mqtt.username`,error:f.value[`mqtt.username`]},{default:B(()=>[D(L(U),{modelValue:L(s).mqtt.username,"onUpdate:modelValue":t[4]||=e=>L(s).mqtt.username=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.username.placeholder`),name:`mqttUsername`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`error`])]),_:1}),D(L(ci),{xs:24,sm:12},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.password.title`),prop:`mqtt.password`},{default:B(()=>[D(L(Zp),{modelValue:L(s).mqtt.password,"onUpdate:modelValue":t[5]||=e=>L(s).mqtt.password=e,configured:L(s).mqtt.passwordConfigured,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.password.placeholder`),name:`mqttPassword`},null,8,[`modelValue`,`configured`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1}),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.baseTopic.title`),prop:`mqtt.baseTopic`},{default:B(()=>[D(L(U),{modelValue:L(s).mqtt.baseTopic,"onUpdate:modelValue":t[6]||=e=>L(s).mqtt.baseTopic=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.baseTopic.placeholder`),name:`mqttBaseTopic`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(ui),{class:`mt-3`},{default:B(()=>[D(L(li),{title:L(a)(`devicesZigbee2mqttPlugin.headings.advancedMqttSettings`)},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.clientId.title`),prop:`mqtt.clientId`},{default:B(()=>[D(L(U),{modelValue:L(s).mqtt.clientId,"onUpdate:modelValue":t[7]||=e=>L(s).mqtt.clientId=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.clientId.placeholder`),name:`mqttClientId`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.cleanSession.title`),prop:`mqtt.cleanSession`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).mqtt.cleanSession,"onUpdate:modelValue":t[8]||=e=>L(s).mqtt.cleanSession=e,name:`mqttCleanSession`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(si),{gutter:20},{default:B(()=>[D(L(ci),{xs:24,sm:8},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.keepalive.title`),prop:`mqtt.keepalive`},{default:B(()=>[D(L(Qr),{modelValue:L(s).mqtt.keepalive,"onUpdate:modelValue":t[9]||=e=>L(s).mqtt.keepalive=e,min:10,step:10,name:`mqttKeepalive`,class:`w-full!`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{xs:24,sm:8},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.connectTimeout.title`),prop:`mqtt.connectTimeout`},{default:B(()=>[D(L(Qr),{modelValue:L(s).mqtt.connectTimeout,"onUpdate:modelValue":t[10]||=e=>L(s).mqtt.connectTimeout=e,min:1e3,step:1e3,name:`mqttConnectTimeout`,class:`w-full!`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{xs:24,sm:8},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.mqtt.reconnectInterval.title`),prop:`mqtt.reconnectInterval`},{default:B(()=>[D(L(Qr),{modelValue:L(s).mqtt.reconnectInterval,"onUpdate:modelValue":t[11]||=e=>L(s).mqtt.reconnectInterval=e,min:1e3,step:1e3,name:`mqttReconnectInterval`,class:`w-full!`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1})]),_:1})]),_:1},8,[`title`])]),_:1}),t[25]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(a)(`devicesZigbee2mqttPlugin.headings.aboutTls`),description:L(a)(`devicesZigbee2mqttPlugin.texts.aboutTls`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.enabled.title`),prop:`tls.enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).tls.enabled,"onUpdate:modelValue":t[12]||=e=>L(s).tls.enabled=e,name:`tlsEnabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),L(s).tls.enabled?(A(),i(V,{key:0},[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.rejectUnauthorized.title`),prop:`tls.rejectUnauthorized`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).tls.rejectUnauthorized,"onUpdate:modelValue":t[13]||=e=>L(s).tls.rejectUnauthorized=e,name:`tlsRejectUnauthorized`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.ca.title`),prop:`tls.ca`},{default:B(()=>[D(L(U),{modelValue:L(s).tls.ca,"onUpdate:modelValue":t[14]||=e=>L(s).tls.ca=e,type:`textarea`,rows:3,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.ca.placeholder`),name:`tlsCa`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.cert.title`),prop:`tls.cert`},{default:B(()=>[D(L(U),{modelValue:L(s).tls.cert,"onUpdate:modelValue":t[15]||=e=>L(s).tls.cert=e,type:`textarea`,rows:3,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.cert.placeholder`),name:`tlsCert`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.key.title`),prop:`tls.key`},{default:B(()=>[D(L(Zp),{modelValue:L(s).tls.key,"onUpdate:modelValue":t[16]||=e=>L(s).tls.key=e,configured:L(s).tls.keyConfigured,type:`textarea`,rows:3,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.tls.key.placeholder`),name:`tlsKey`},null,8,[`modelValue`,`configured`,`placeholder`])]),_:1},8,[`label`])],64)):R(``,!0)],64)):R(``,!0),L(s).connectionType===`ws`?(A(),i(V,{key:1},[D(L(Q),{type:`info`,title:L(a)(`devicesZigbee2mqttPlugin.headings.aboutWs`),description:L(a)(`devicesZigbee2mqttPlugin.texts.aboutWs`),closable:!1},null,8,[`title`,`description`]),D(L(si),{gutter:20,class:`mt-3`},{default:B(()=>[D(L(ci),{xs:24,sm:16},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.host.title`),prop:`ws.host`,error:f.value[`ws.host`]},{default:B(()=>[D(L(U),{modelValue:L(s).ws.host,"onUpdate:modelValue":t[17]||=e=>L(s).ws.host=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.host.placeholder`),name:`wsHost`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`error`])]),_:1}),D(L(ci),{xs:24,sm:8},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.port.title`),prop:`ws.port`},{default:B(()=>[D(L(Qr),{modelValue:L(s).ws.port,"onUpdate:modelValue":t[18]||=e=>L(s).ws.port=e,min:1,max:65535,name:`wsPort`,class:`w-full!`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1})]),_:1}),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.baseTopic.title`),prop:`ws.baseTopic`},{default:B(()=>[D(L(U),{modelValue:L(s).ws.baseTopic,"onUpdate:modelValue":t[19]||=e=>L(s).ws.baseTopic=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.baseTopic.placeholder`),name:`wsBaseTopic`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.secure.title`),prop:`ws.secure`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).ws.secure,"onUpdate:modelValue":t[20]||=e=>L(s).ws.secure=e,name:`wsSecure`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(ui),{class:`mt-3`},{default:B(()=>[D(L(li),{title:L(a)(`devicesZigbee2mqttPlugin.headings.advancedWsSettings`)},{default:B(()=>[D(L(si),{gutter:20},{default:B(()=>[D(L(ci),{xs:24,sm:12},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.connectTimeout.title`),prop:`ws.connectTimeout`},{default:B(()=>[D(L(Qr),{modelValue:L(s).ws.connectTimeout,"onUpdate:modelValue":t[21]||=e=>L(s).ws.connectTimeout=e,min:1e3,step:1e3,name:`wsConnectTimeout`,class:`w-full!`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{xs:24,sm:12},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.ws.reconnectInterval.title`),prop:`ws.reconnectInterval`},{default:B(()=>[D(L(Qr),{modelValue:L(s).ws.reconnectInterval,"onUpdate:modelValue":t[22]||=e=>L(s).ws.reconnectInterval=e,min:1e3,step:1e3,name:`wsReconnectInterval`,class:`w-full!`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1})]),_:1})]),_:1},8,[`title`])]),_:1})],64)):R(``,!0),t[28]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(a)(`devicesZigbee2mqttPlugin.headings.aboutDiscovery`),description:L(a)(`devicesZigbee2mqttPlugin.texts.aboutDiscovery`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.discovery.autoAdd.title`),prop:`discovery.autoAdd`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).discovery.autoAdd,"onUpdate:modelValue":t[23]||=e=>L(s).discovery.autoAdd=e,name:`discoveryAutoAdd`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.config.discovery.syncOnStartup.title`),prop:`discovery.syncOnStartup`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).discovery.syncOnStartup,"onUpdate:modelValue":t[24]||=e=>L(s).discovery.syncOnStartup=e,name:`discoverySyncOnStartup`},null,8,[`modelValue`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),UA=`devices-zigbee2mqtt`,WA=`devices-zigbee2mqtt-plugin`,GA=`devices-zigbee2mqtt`,KA=class extends Error{},qA=class extends KA{},JA=class extends KA{code;constructor(e,t){super(e),this.code=t}},YA=xs,XA=ws,ZA=K({id:X().uuid(),type:X(),ieeeAddress:X().min(1),name:X().min(1),category:G(dr),description:X().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:J().default(!0)});dr.generic,dr.lighting,dr.sensor,dr.switcher,dr.thermostat,dr.window_covering,dr.lock,$.NONE;var QA=Yo,$A=ss.and(K({type:Y(GA)})),ej=as.and(K({type:Y(GA),category:G(dr).optional()}));ts.and(K({type:Y(GA)}));var tj=e=>({data:{device_category:e.deviceCategory,expose_overrides:e.exposeOverrides?.map(e=>({expose_name:e.exposeName,channel_category:e.channelCategory,skip:e.skip}))}}),nj=e=>({data:{ieee_address:e.ieeeAddress,name:e.name,category:e.category,description:e.description,enabled:e.enabled,channels:e.channels.map(e=>({identifier:e.identifier,category:e.category,name:e.name,properties:e.properties.map(e=>({category:e.category,z2m_property:e.z2mProperty,data_type:e.dataType,permissions:e.permissions,format:e.format}))}))}}),rj=e=>({ieeeAddress:e.ieee_address,friendlyName:e.friendly_name,manufacturer:e.manufacturer??null,model:e.model??null,description:e.description??null}),ij=e=>({category:e.category,name:e.name,confidence:e.confidence}),aj=e=>({category:e.category,name:e.name,confidence:e.confidence}),oj=e=>({category:e.category,name:e.name,z2mProperty:e.z2m_property,dataType:e.data_type,permissions:e.permissions,format:e.format??null,required:e.required,currentValue:e.current_value??null}),sj=e=>({exposeName:e.expose_name,exposeType:e.expose_type,status:e.status,suggestedChannel:e.suggested_channel?aj(e.suggested_channel):null,suggestedProperties:e.suggested_properties.map(oj),missingRequiredProperties:e.missing_required_properties}),cj=e=>({type:e.type,exposeName:e.expose_name,message:e.message,suggestion:e.suggestion}),lj=e=>({z2mDevice:rj(e.z2m_device),suggestedDevice:ij(e.suggested_device),exposes:e.exposes.map(sj),warnings:e.warnings.map(cj),readyToAdopt:e.ready_to_adopt}),uj=()=>{let{t:e}=M(),t=Zn(),n=On(),r=Tn(),i=pn().getStore(jo),a=j(!1),o=j(null);return{isAdopting:a,adoptionError:o,adoptDevice:async s=>{a.value=!0,o.value=null;try{let r=nj(s),{data:o,error:c,response:l}=await t.client.POST(`/${Ie}/${UA}/discovered-devices/adopt`,{body:r});if(o!==void 0&&o.data){let e=QA.safeParse({...Un(o.data),type:GA});if(!e.success)throw n.error(`Schema validation failed with:`,e.error),new qA(`Failed to parse adopted device response.`);return i.set({id:e.data.id,data:e.data}),a.value=!1,e.data}let u=e(`devicesZigbee2mqttPlugin.messages.devices.notAdopted`,{device:``});throw c&&(u=Kn(c,u)),new JA(u,l?.status)}catch(t){a.value=!1;let i=t;throw o.value=i,i instanceof qA||i instanceof JA?r.error(i.message):(n.error(`Failed to adopt device:`,i),r.error(e(`devicesZigbee2mqttPlugin.messages.devices.notAdopted`,{device:``}))),i}}}},dj=Symbol(`devices_zigbee2mqtt_plugin-discovered_devices`),fj=()=>{let e=pn().getStore(dj),t=p(()=>wa(e.findAll(),[e=>e.friendlyName.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.friendlyName,manufacturer:e.manufacturer,model:e.model,available:e.available}))),n=c(()=>e.fetching()),r=async()=>{await e.fetch()};return pe(()=>{e.firstLoadFinished()||r().catch(()=>{})}),{devicesOptions:t,devicesOptionsLoading:n,refreshDevices:r}},pj=()=>{let{t:e}=M(),t=Zn(),n=On(),r=Tn(),i=j(null),a=j(!1),o=j(null),s=0,c=async(c,l)=>{let u=++s;a.value=!0,o.value=null;try{let n=l?tj(l):void 0,{data:r,error:o,response:d}=await t.client.POST(`/${Ie}/${UA}/discovered-devices/{ieeeAddress}/preview-mapping`,{params:{path:{ieeeAddress:c}},body:n});if(u!==s)throw new JA(`Request was superseded by a newer request.`,0);if(r!==void 0&&r.data){if(u!==s)throw new JA(`Request was superseded by a newer request.`,0);let e=lj(r.data);return i.value=e,a.value=!1,e}throw new JA(o?String(o):e(`devicesZigbee2mqttPlugin.messages.mapping.previewError`),d?.status??500)}catch(t){u===s&&(a.value=!1);let i=t;throw u===s&&(i instanceof qA?(o.value=i,r.error(i.message)):i instanceof JA?i.message.includes(`superseded`)||(o.value=i,r.error(i.message)):(o.value=i,n.error(`Failed to fetch mapping preview:`,i),r.error(e(`devicesZigbee2mqttPlugin.messages.mapping.previewError`)))),i}};return{preview:i,isLoading:a,error:o,fetchPreview:c,updatePreview:async(e,t)=>c(e,t),clearPreview:()=>{s++,i.value=null,o.value=null,a.value=!1}}},mj=({id:e})=>{let{t}=M(),n=Tn(),r=On(),i=j($.NONE),a,{preview:o,isLoading:s,error:c,fetchPreview:l,clearPreview:u}=pj(),{isAdopting:d,adoptDevice:m}=uj(),{devicesOptions:h,devicesOptionsLoading:g}=fj(),_=p(()=>Object.values(dr).filter(e=>e!==dr.generic).map(e=>({value:e,label:t(`devicesModule.categories.devices.${e}`)}))),v=P({...oa(ZA),id:e,type:GA,category:Object.values(dr).find(e=>e!==dr.generic)||dr.sensor,name:``,description:``,enabled:!0,ieeeAddress:``}),y=gn(f(v)),b=j(`one`),x=j(new Set([`one`])),S=j(!1),C=j([]),w=j(null),T=async(e,s)=>{if(e===`one`){let e=s;if(!e)throw new qA(`Form reference not available`);if(e.clearValidate(),!await e.validate())throw new qA(`Form not valid`);i.value=$.WORKING;try{if(await l(v.ieeeAddress),o.value){v.name=o.value.suggestedDevice.name||v.name,w.value=o.value.suggestedDevice.category;let e=o.value.suggestedDevice.category;e!==dr.generic&&(v.category=e)}return b.value=`two`,x.value.add(`two`),i.value=$.NONE,`ok`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(E,2e3),e instanceof qA?n.error(e.message):n.error(t(`devicesZigbee2mqttPlugin.messages.mapping.previewError`)),e}}else if(e===`two`){let e=s;if(!e)throw new qA(`Form reference not available`);if(e.clearValidate(),!await e.validate())throw new qA(`Form not valid`);i.value=$.WORKING;try{return await l(v.ieeeAddress,{deviceCategory:v.category}),o.value&&!v.name&&(v.name=o.value.suggestedDevice.name||v.name),b.value=`three`,x.value.add(`three`),i.value=$.NONE,`ok`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(E,2e3),e instanceof qA?n.error(e.message):n.error(t(`devicesZigbee2mqttPlugin.messages.mapping.previewError`)),e}}else if(e===`three`)return b.value=`four`,x.value.add(`four`),`ok`;else if(e===`four`){let e=s;if(!e)throw new qA(`Form reference not available`);e.clearValidate(),i.value=$.WORKING;try{if(o.value){let n=[];for(let e of o.value.exposes){let t=C.value?.find(t=>t.exposeName===e.exposeName);if(t?.skip===!0)continue;let r=t?.channelCategory!==void 0,i=e.suggestedChannel?.category,a=i!==void 0&&i!==Jn.generic;t&&!t.skip&&!r&&!a&&n.push(e.exposeName)}if(n.length>0){await e.validate().catch(()=>{});let r=n.slice(0,3).join(`, `),i=n.length>3?` (+${n.length-3} more)`:``;throw new qA(t(`devicesZigbee2mqttPlugin.messages.mapping.missingChannelCategory`,{exposes:r+i}))}}if(!await e.validate())throw new qA(`Form not valid`);if(C.value&&C.value.length>0){let e={exposeOverrides:C.value,deviceCategory:v.category};await l(v.ieeeAddress,e)}return b.value=`five`,x.value.add(`five`),i.value=$.NONE,`ok`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(E,2e3),e instanceof qA?n.error(e.message):n.error(t(`devicesZigbee2mqttPlugin.messages.mapping.previewError`)),e}}else if(e===`five`){if(!o.value)throw new qA(`Mapping preview is required for device adoption.`);if(o.value.readyToAdopt!==!0)throw new qA(t(`devicesZigbee2mqttPlugin.messages.mapping.notReadyToAdopt`));let e=s;if(!e)throw new qA(`Form reference not available`);if(e.clearValidate(),!await e.validate())throw new qA(`Form not valid`);let c=ZA.safeParse(v);if(!c.success)throw r.error(`Schema validation failed with:`,c.error),new qA(`Failed to validate create device model.`);i.value=$.WORKING;let l=t(`devicesZigbee2mqttPlugin.messages.devices.notCreated`,{device:v.name});try{if(!o.value||o.value.readyToAdopt!==!0)throw new qA(t(`devicesZigbee2mqttPlugin.messages.mapping.notReadyToAdopt`));let e=new Map;for(let t of o.value.exposes){if(t.status===`skipped`)continue;let n=C.value?.find(e=>e.exposeName===t.exposeName);if(n?.skip||!t.suggestedChannel&&!n?.channelCategory)continue;let r=n?.channelCategory||t.suggestedChannel?.category;if(!r||r===Jn.generic||!t.suggestedProperties||t.suggestedProperties.length===0)continue;let i=e.get(r);i||(i={category:r,name:t.suggestedChannel?.name||r,identifier:r,properties:[]},e.set(r,i));for(let e of t.suggestedProperties)i.properties.find(t=>t.category===e.category)||i.properties.push({category:e.category,z2mProperty:e.z2mProperty,dataType:e.dataType,permissions:e.permissions,format:e.format??null})}let r=Array.from(e.values()),s={ieeeAddress:v.ieeeAddress,name:v.name,category:v.category,description:v.description??null,enabled:v.enabled,channels:r};return await m(s),i.value=$.OK,a=window.setTimeout(E,2e3),n.success(t(`devicesZigbee2mqttPlugin.messages.mapping.adoptionSuccess`,{device:v.name})),rn.push({name:Jo.DEVICES}),`added`}catch(e){throw i.value=$.ERROR,a=window.setTimeout(E,2e3),!(e instanceof JA)&&!(e instanceof qA)&&!(e instanceof ps)&&(r.error(`Unexpected error during device adoption:`,e),n.error(l)),e}}else throw new qA(`Unknown step`)},E=()=>{window.clearTimeout(a),i.value=$.NONE};return F(v,()=>{S.value=!(0,Xd.isEqual)(f(v),y)}),F(()=>v.ieeeAddress,(e,t)=>{e!==t&&(u(),C.value=[])}),F(()=>o.value,e=>{e&&(v.name||=e.suggestedDevice.name||v.name)}),{categoriesOptions:_,activeStep:b,reachedSteps:x,preview:o,suggestedCategory:w,isPreviewLoading:s,previewError:c,isAdopting:d,devicesOptions:h,devicesOptionsLoading:g,exposeOverrides:C,model:v,formChanged:S,submitStep:T,clear:E,clearPreview:u,formResult:i}},hj={class:`space-y-4`},gj={class:`font-semibold`},_j=k({__name:`category-selection-step`,props:{model:{},categoriesOptions:{},suggestedCategory:{}},setup(e,{expose:t}){let{t:n}=M(),r=j(void 0),a=P({category:[{required:!0,message:n(`devicesZigbee2mqttPlugin.fields.devices.category.validation.required`),trigger:`change`}]});return t({stepTwoFormEl:r}),(t,o)=>(A(),i(`div`,hj,[D(L(Q),{type:`info`,title:L(n)(`devicesZigbee2mqttPlugin.headings.device.categorySelection`),description:L(n)(`devicesZigbee2mqttPlugin.messages.categorySelection.description`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),D(L(Ir),{ref_key:`stepTwoFormEl`,ref:r,model:e.model,rules:a,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(n)(`devicesZigbee2mqttPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:e.model.category,"onUpdate:modelValue":o[0]||=t=>e.model.category=t,placeholder:L(n)(`devicesZigbee2mqttPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``},{default:B(()=>[(A(!0),i(V,null,I(e.categoriesOptions,t=>(A(),O(L(ti),{key:t.value,label:t.label,value:t.value},{default:B(()=>[t.value===e.suggestedCategory?(A(),i(V,{key:0},[l(`span`,gj,z(t.label),1),D(L(Xt),{size:`small`,type:`success`,class:`ml-2`},{default:B(()=>[E(z(L(n)(`devicesZigbee2mqttPlugin.labels.suggested`)),1)]),_:1})],64)):(A(),i(V,{key:1},[E(z(t.label),1)],64))]),_:2},1032,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),e.model.category?(A(),O(L(Q),{key:0,type:`info`,title:L(n)(`devicesModule.fields.devices.category.description`),description:L(n)(`devicesModule.texts.devices.description.${e.model.category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0)]),_:1},8,[`model`,`rules`])]))}}),vj={class:`font-semibold`},yj={class:`grid grid-cols-2 md:grid-cols-4 gap-4 text-center`},bj={class:`text-2xl font-bold text-green-600`},xj={class:`text-sm text-gray-500`},Sj={class:`text-2xl font-bold text-yellow-600`},Cj={class:`text-sm text-gray-500`},wj={class:`text-2xl font-bold text-red-600`},Tj={class:`text-sm text-gray-500`},Ej={class:`text-2xl font-bold text-blue-600`},Dj={class:`text-sm text-gray-500`},Oj=k({__name:`device-configuration-step`,props:{model:{},preview:{},exposeOverrides:{}},setup(e,{expose:t}){let n=e,{t:r}=M(),i=j(void 0),a=P({name:[{required:!0,message:r(`devicesZigbee2mqttPlugin.fields.devices.name.validation.required`),trigger:`change`}]}),o=p(()=>n.preview?n.preview.exposes.filter(e=>e.status===`mapped`).length:0),s=p(()=>n.preview?n.preview.exposes.filter(e=>e.status===`partial`).length:0),c=p(()=>n.preview?n.preview.exposes.filter(e=>e.status===`unmapped`).length:0),u=p(()=>n.preview?n.preview.exposes.filter(e=>e.status===`skipped`||n.exposeOverrides?.find(t=>t.exposeName===e.exposeName)?.skip===!0).length:0);return t({stepFourFormEl:i}),(t,n)=>(A(),O(L(Ir),{ref_key:`stepFourFormEl`,ref:i,model:e.model,rules:a,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(r)(`devicesZigbee2mqttPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:e.model.name,"onUpdate:modelValue":n[0]||=t=>e.model.name=t,placeholder:L(r)(`devicesZigbee2mqttPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(r)(`devicesZigbee2mqttPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:e.model.description,"onUpdate:modelValue":n[1]||=t=>e.model.description=t,placeholder:L(r)(`devicesZigbee2mqttPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(r)(`devicesZigbee2mqttPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:e.model.enabled,"onUpdate:modelValue":n[2]||=t=>e.model.enabled=t,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(ni),{shadow:`never`,"header-class":`py-2! px-4!`,"body-class":`px-0!`},{header:B(()=>[l(`div`,vj,[E(z(L(r)(`devicesZigbee2mqttPlugin.fields.mapping.totalExposes`))+`: `,1),D(L(Xt),{type:`info`,size:`small`},{default:B(()=>[E(z(e.preview?.exposes.length??0),1)]),_:1})])]),default:B(()=>[l(`div`,yj,[l(`div`,null,[l(`div`,bj,z(o.value),1),l(`div`,xj,z(L(r)(`devicesZigbee2mqttPlugin.fields.mapping.mapped`)),1)]),l(`div`,null,[l(`div`,Sj,z(s.value),1),l(`div`,Cj,z(L(r)(`devicesZigbee2mqttPlugin.fields.mapping.partial`)),1)]),l(`div`,null,[l(`div`,wj,z(c.value),1),l(`div`,Tj,z(L(r)(`devicesZigbee2mqttPlugin.fields.mapping.unmapped`)),1)]),l(`div`,null,[l(`div`,Ej,z(u.value),1),l(`div`,Dj,z(L(r)(`devicesZigbee2mqttPlugin.fields.mapping.excluded`)),1)])])]),_:1})]),_:1},8,[`model`,`rules`]))}}),kj=()=>{let e=pn().getStore(dj);return{devices:p(()=>e.findAll()),isLoading:c(()=>e.fetching()),firstLoadFinished:p(()=>e.firstLoadFinished()),fetchDiscoveredDevices:async()=>e.fetch(),getDiscoveredDevice:async t=>e.get({id:t}),findById:t=>e.findById(t)}},Aj={class:`flex flex-row justify-between items-center w-full overflow-hidden`},jj={class:`grow-1`},Mj={key:0,class:`text-sm`},Nj={key:0,class:`text-sm text-gray-500 mt-2`},Pj={class:`flex flex-col gap-2`},Fj={class:`grid grid-cols-[auto_1fr] gap-x-4 my-0`},Ij={class:`m-0 inline-block font-bold`},Lj={class:`m-0`},Rj={class:`m-0`},zj=k({__name:`device-selection-step`,props:{model:{},devicesOptions:{},devicesOptionsLoading:{type:Boolean}},emits:[`device-change`],setup(e,{expose:t,emit:n}){let r=e,a=n,{t:o}=M(),{devices:s}=kj(),c=p(()=>r.model.ieeeAddress&&s.value.find(e=>e.id===r.model.ieeeAddress)||null),u=P({ieeeAddress:[{required:!0,message:o(`devicesZigbee2mqttPlugin.fields.devices.ieeeAddress.validation.required`),trigger:`change`}]}),d=e=>{a(`device-change`,e)},f=j(void 0);return t({stepOneFormEl:f}),(t,n)=>(A(),O(L(Ir),{ref_key:`stepOneFormEl`,ref:f,model:e.model,rules:u,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{prop:`ieeeAddress`},{default:B(()=>[D(L(ei),{modelValue:e.model.ieeeAddress,"onUpdate:modelValue":n[0]||=t=>e.model.ieeeAddress=t,placeholder:L(o)(`devicesZigbee2mqttPlugin.fields.devices.ieeeAddress.placeholder`),loading:e.devicesOptionsLoading,disabled:e.devicesOptions.length===0,name:`ieeeAddress`,filterable:``,onChange:d},{default:B(()=>[(A(!0),i(V,null,I(e.devicesOptions,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},{default:B(()=>[l(`div`,Aj,[l(`div`,jj,z(e.label),1),e.manufacturer?(A(),i(`div`,Mj,z(e.manufacturer),1)):R(``,!0)])]),_:2},1032,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`]),!e.devicesOptionsLoading&&e.devicesOptions.length===0?(A(),i(`div`,Nj,z(L(o)(`devicesZigbee2mqttPlugin.messages.devices.noDiscoveredDevices`)),1)):R(``,!0)]),_:1}),l(`div`,Pj,[c.value?(A(),O(L(Q),{key:0,type:`info`,title:L(o)(`devicesZigbee2mqttPlugin.headings.device.deviceInfo`),closable:!1,"show-icon":``},{default:B(()=>[l(`dl`,Fj,[l(`dt`,null,z(L(o)(`devicesZigbee2mqttPlugin.fields.devices.friendlyName.title`))+`:`,1),l(`dd`,Ij,z(c.value.friendlyName),1),c.value.manufacturer?(A(),i(V,{key:0},[l(`dt`,null,z(L(o)(`devicesZigbee2mqttPlugin.fields.devices.manufacturer.title`))+`:`,1),l(`dd`,Lj,z(c.value.manufacturer),1)],64)):R(``,!0),c.value.model?(A(),i(V,{key:1},[l(`dt`,null,z(L(o)(`devicesZigbee2mqttPlugin.fields.devices.model.title`))+`:`,1),l(`dd`,Rj,z(c.value.model),1)],64)):R(``,!0)])]),_:1},8,[`title`])):R(``,!0),c.value&&!c.value.available?(A(),O(L(Q),{key:1,type:`warning`,title:L(o)(`devicesZigbee2mqttPlugin.messages.devices.deviceOffline`),closable:!1,"show-icon":``},null,8,[`title`])):R(``,!0),c.value&&c.value.adoptedDeviceId?(A(),O(L(Q),{key:2,type:`warning`,title:L(o)(`devicesZigbee2mqttPlugin.messages.devices.alreadyAdopted`),description:L(o)(`devicesZigbee2mqttPlugin.messages.devices.alreadyAdoptedDescription`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0)])]),_:1},8,[`model`,`rules`]))}}),Bj={key:0,class:`text-center py-8 text-gray-500`},Vj={class:`text-sm mt-2`},Hj={key:1,class:`space-y-4`},Uj={class:`flex items-center gap-3 mb-3`},Wj={class:`flex-1`},Gj={class:`font-semibold`},Kj={class:`text-sm text-gray-500 ml-2`},qj=k({__name:`mapping-customization-step`,props:{preview:{},isPreviewLoading:{type:Boolean},exposeOverrides:{}},emits:[`update-overrides`],setup(e,{expose:t,emit:n}){let r=e,a=n,{t:o}=M(),c=e=>e.replace(/[.\[\]]/g,`_`),u=e=>{let t=r.preview?.exposes.find(t=>t.exposeName===e),n=r.exposeOverrides?.find(t=>t.exposeName===e);if(n?.skip===!0)return!1;if(n?.channelCategory||n&&!n.skip&&!n.channelCategory)return!0;let i=t?.suggestedChannel?.category;return i?i!==Jn.generic:!1},d=e=>{let t=r.exposeOverrides?.find(t=>t.exposeName===e);if(t?.channelCategory)return t.channelCategory;let n=(r.preview?.exposes.find(t=>t.exposeName===e))?.suggestedChannel?.category;if(n&&n!==Jn.generic)return n},f=P({});F(()=>[r.exposeOverrides,r.preview],()=>{if(r.preview)for(let e of r.preview.exposes){let t=e.exposeName,n=`category_${c(t)}`;if(u(t)){let e=d(t);f[n]=e}else delete f[n]}else{let e=Object.keys(f).filter(e=>e.startsWith(`category_`));for(let t of e)delete f[t]}},{immediate:!0,deep:!0});let m=j(void 0),h=p(()=>{let e={};if(r.preview)for(let t of r.preview.exposes){let n=t.exposeName,r=`category_${c(n)}`;u(n)&&!d(n)&&(e[r]=[{required:!0,message:o(`devicesZigbee2mqttPlugin.fields.mapping.suggestedChannel.validation.required`),trigger:`change`}])}return e}),_=e=>{let t=`category_${c(e)}`;return h.value[t]||[]};t({stepThreeFormEl:m,resetForm:()=>{let e=Object.keys(f).filter(e=>e.startsWith(`category_`));for(let t of e)delete f[t];m.value?.resetFields()}});let v=p(()=>Object.values(Jn).filter(e=>e!==Jn.generic).map(e=>({value:e,label:o(`devicesModule.categories.channels.${e}`)}))),y=(e,t)=>{let n=[...r.exposeOverrides||[]],i=n.findIndex(t=>t.exposeName===e),o=(r.preview?.exposes.find(t=>t.exposeName===e))?.suggestedChannel?.category,s=o&&o!==Jn.generic;if(t)if(i>=0){let t=n[i];t?.channelCategory?(n[i]={exposeName:e,channelCategory:t.channelCategory},f[`category_${c(e)}`]=t.channelCategory):s?(n.splice(i,1),f[`category_${c(e)}`]=o):(n[i]={exposeName:e},f[`category_${c(e)}`]=void 0)}else s?f[`category_${c(e)}`]=o:(n.push({exposeName:e}),f[`category_${c(e)}`]=void 0);else{if(i>=0){let e=n[i];e&&(n[i]={...e,skip:!0})}else n.push({exposeName:e,skip:!0});delete f[`category_${c(e)}`]}a(`update-overrides`,n)},b=e=>{let t=r.exposeOverrides?.find(t=>t.exposeName===e);return t!==void 0&&!t.skip&&!t.channelCategory},x=(e,t)=>{let n=[...r.exposeOverrides||[]],i=n.findIndex(t=>t.exposeName===e);if(i>=0){let e=n[i];e&&(n[i]={...e,channelCategory:t,skip:!1})}else n.push({exposeName:e,channelCategory:t});f[`category_${c(e)}`]=t,a(`update-overrides`,n)};return(t,n)=>e.preview?(A(),i(`div`,Hj,[D(L(Q),{type:`info`,title:L(o)(`devicesZigbee2mqttPlugin.headings.device.mappingCustomization`),description:L(o)(`devicesZigbee2mqttPlugin.texts.mapping.customizationDescription`),closable:!1,"show-icon":``},null,8,[`title`,`description`]),D(L(Ir),{ref_key:`stepThreeFormEl`,ref:m,model:f,rules:h.value,"label-position":`top`},{default:B(()=>[(A(!0),i(V,null,I(e.preview.exposes,e=>(A(),i(`div`,{key:e.exposeName},[l(`div`,Uj,[D(L(ii),{"model-value":u(e.exposeName),onChange:t=>y(e.exposeName,t===!0)},{default:B(()=>[E(z(L(o)(`devicesZigbee2mqttPlugin.buttons.use`)),1)]),_:1},8,[`model-value`,`onChange`]),l(`div`,Wj,[l(`span`,Gj,z(e.exposeName),1),D(L(Xt),{type:e.status===`mapped`?`success`:e.status===`partial`?`warning`:`danger`,size:`small`,class:`ml-2`},{default:B(()=>[E(z(e.status),1)]),_:2},1032,[`type`]),l(`span`,Kj,`(`+z(e.exposeType)+`)`,1)])]),u(e.exposeName)||b(e.exposeName)?(A(),O(L(Z),{key:0,label:L(o)(`devicesZigbee2mqttPlugin.fields.mapping.suggestedChannel.title`),prop:`category_${c(e.exposeName)}`,required:!d(e.exposeName),rules:_(e.exposeName)},{default:B(()=>[D(L(ei),{"model-value":d(e.exposeName),placeholder:L(o)(`devicesZigbee2mqttPlugin.fields.devices.category.placeholder`),onChange:t=>x(e.exposeName,t)},{default:B(()=>[(A(!0),i(V,null,I(v.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`model-value`,`placeholder`,`onChange`])]),_:2},1032,[`label`,`prop`,`required`,`rules`])):R(``,!0)]))),128))]),_:1},8,[`model`,`rules`])])):(A(),i(`div`,Bj,[D(L(g),{size:48,class:`mb-4`},{default:B(()=>[D(L(s),{icon:`mdi:information-outline`})]),_:1}),l(`p`,null,z(L(o)(`devicesZigbee2mqttPlugin.messages.mapping.noPreview`)),1),l(`p`,Vj,z(L(o)(`devicesZigbee2mqttPlugin.messages.mapping.selectDeviceFirst`)),1)]))}}),Jj={class:`flex items-center justify-between`},Yj={class:`flex items-center gap-2`},Xj={class:`font-semibold`},Zj={class:`flex items-center gap-2 text-sm text-gray-500`},Qj={key:0,class:`mb-3`},$j={class:`flex items-center gap-2 mb-2`},eM={class:`font-medium`},tM={class:`text-sm text-gray-600`},nM={key:1,class:`mb-3`},rM={class:`font-medium mb-2`},iM={class:`grid grid-cols-2 gap-2 text-sm`},aM={class:`text-gray-600`},oM={key:1,class:`text-gray-400`},sM={key:2,class:`mt-2`},cM=k({__name:`expose-mapping-card`,props:{expose:{}},setup(e){let t=e,{t:n}=M(),r=p(()=>{switch(t.expose.status){case`mapped`:return`success`;case`partial`:return`warning`;case`unmapped`:return`danger`;case`skipped`:return`info`;default:return`info`}}),a=p(()=>{if(!t.expose.suggestedChannel)return`info`;switch(t.expose.suggestedChannel.confidence){case`high`:return`success`;case`medium`:return`warning`;case`low`:return`danger`;default:return`info`}});return(t,o)=>(A(),O(L(ni),{shadow:`never`,class:`mb-2`,"header-class":`py-2! px-4!`,"body-class":`py-2! px-4!`},{header:B(()=>[l(`div`,Jj,[l(`div`,Yj,[l(`span`,Xj,z(e.expose.exposeName),1),D(L(Xt),{type:r.value,size:`small`},{default:B(()=>[E(z(e.expose.status),1)]),_:1},8,[`type`])]),l(`div`,Zj,[l(`span`,null,z(e.expose.exposeType),1)])])]),default:B(()=>[e.expose.suggestedChannel?(A(),i(`div`,Qj,[l(`div`,$j,[l(`span`,eM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.suggestedChannel.title`))+`:`,1),l(`span`,null,z(e.expose.suggestedChannel.name),1),D(L(Xt),{type:a.value,size:`small`},{default:B(()=>[E(z(e.expose.suggestedChannel.confidence),1)]),_:1},8,[`type`])]),l(`div`,tM,z(L(n)(`devicesModule.categories.channels.${e.expose.suggestedChannel.category}`)),1)])):R(``,!0),e.expose.suggestedProperties.length>0?(A(),i(`div`,nM,[l(`div`,rM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.properties`))+`:`,1),l(`div`,iM,[(A(!0),i(V,null,I(e.expose.suggestedProperties,e=>(A(),i(`div`,{key:`${e.category}-${e.z2mProperty}`,class:`flex items-center gap-2`},[l(`span`,aM,z(e.name)+`:`,1),e.currentValue!==null&&e.currentValue!==void 0?(A(),O(L(Xt),{key:0,size:`small`,type:`info`},{default:B(()=>[E(z(e.currentValue),1)]),_:2},1024)):(A(),i(`span`,oM,`-`))]))),128))])])):R(``,!0),e.expose.missingRequiredProperties.length>0?(A(),i(`div`,sM,[D(L(Q),{type:`warning`,title:L(n)(`devicesZigbee2mqttPlugin.fields.mapping.missingRequiredProperties`),closable:!1,"show-icon":``,description:e.expose.missingRequiredProperties.map(e=>L(n)(`devicesModule.categories.channelsProperties.${e}`)).join(`, `)},null,8,[`title`,`description`])])):R(``,!0)]),_:1}))}}),lM={class:`font-semibold`},uM={class:`grid grid-cols-2 md:grid-cols-4 gap-4 text-center`},dM={class:`text-2xl font-bold text-green-600`},fM={class:`text-sm text-gray-500`},pM={class:`text-2xl font-bold text-yellow-600`},mM={class:`text-sm text-gray-500`},hM={class:`text-2xl font-bold text-red-600`},gM={class:`text-sm text-gray-500`},_M={class:`text-2xl font-bold text-gray-600`},vM={class:`text-sm text-gray-500`},yM={class:`grid grid-cols-1 gap-4 text-sm mx-4`},bM={class:`font-medium`},xM={class:`ml-2`},SM={class:`font-medium`},CM={class:`ml-2`},wM={key:0},TM={class:`font-medium`},EM={class:`ml-2`},DM={key:1},OM={class:`font-medium`},kM={class:`ml-2`},AM=k({__name:`mapping-summary`,props:{preview:{}},setup(e){let t=e,{t:n}=M(),r=p(()=>t.preview.exposes.filter(e=>e.status===`mapped`).length),a=p(()=>t.preview.exposes.filter(e=>e.status===`partial`).length),o=p(()=>t.preview.exposes.filter(e=>e.status===`unmapped`).length),s=p(()=>t.preview.exposes.filter(e=>e.status===`skipped`).length),c=p(()=>{switch(t.preview.suggestedDevice.confidence){case`high`:return`success`;case`medium`:return`warning`;case`low`:return`danger`;default:return`info`}});return(t,u)=>(A(),O(L(ni),{shadow:`never`,"header-class":`py-2! px-4!`,"body-class":`px-0!`},{header:B(()=>[l(`div`,lM,z(L(n)(`devicesZigbee2mqttPlugin.headings.mapping.summary`)),1)]),default:B(()=>[l(`div`,uM,[l(`div`,null,[l(`div`,dM,z(r.value),1),l(`div`,fM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.mapped`)),1)]),l(`div`,null,[l(`div`,pM,z(a.value),1),l(`div`,mM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.partial`)),1)]),l(`div`,null,[l(`div`,hM,z(o.value),1),l(`div`,gM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.unmapped`)),1)]),l(`div`,null,[l(`div`,_M,z(s.value),1),l(`div`,vM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.skipped`)),1)])]),D(L(Vt)),l(`div`,yM,[l(`div`,null,[l(`span`,bM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.deviceName`))+`:`,1),l(`span`,xM,z(e.preview.z2mDevice.friendlyName),1)]),l(`div`,null,[l(`span`,SM,z(L(n)(`devicesZigbee2mqttPlugin.fields.mapping.suggestedCategory`))+`:`,1),l(`span`,CM,z(L(n)(`devicesModule.categories.devices.${e.preview.suggestedDevice.category}`)),1),D(L(Xt),{type:c.value,size:`small`,class:`ml-2`},{default:B(()=>[E(z(e.preview.suggestedDevice.confidence),1)]),_:1},8,[`type`])]),e.preview.z2mDevice.manufacturer?(A(),i(`div`,wM,[l(`span`,TM,z(L(n)(`devicesZigbee2mqttPlugin.fields.devices.manufacturer.title`))+`:`,1),l(`span`,EM,z(e.preview.z2mDevice.manufacturer),1)])):R(``,!0),e.preview.z2mDevice.model?(A(),i(`div`,DM,[l(`span`,OM,z(L(n)(`devicesZigbee2mqttPlugin.fields.devices.model.title`))+`:`,1),l(`span`,kM,z(e.preview.z2mDevice.model),1)])):R(``,!0)])]),_:1}))}}),jM={class:`space-y-2`},MM={class:`mb-1`},NM=k({__name:`mapping-warnings`,props:{warnings:{}},setup(e){let{t}=M(),n=e=>{switch(e){case`missing_required_channel`:case`missing_required_property`:return`error`;case`unsupported_expose`:case`device_not_available`:return`warning`;case`unknown_device_class`:return`info`;default:return`warning`}};return(r,a)=>e.warnings.length>0?(A(),O(L(ui),{key:0},{default:B(()=>[D(L(li),{title:L(t)(`devicesZigbee2mqttPlugin.headings.mapping.warnings`,{count:e.warnings.length})},{default:B(()=>[l(`div`,jM,[(A(!0),i(V,null,I(e.warnings,(e,t)=>(A(),O(L(Q),{key:t,type:n(e.type),title:e.message,closable:!1,"show-icon":``},De({_:2},[e.exposeName?{name:`title`,fn:B(()=>[E(z(e.exposeName),1)]),key:`0`}:void 0,e.exposeName?{name:`default`,fn:B(()=>[l(`div`,MM,z(e.message),1),l(`small`,null,z(e.suggestion),1)]),key:`1`}:{name:`default`,fn:B(()=>[E(z(e.suggestion),1)]),key:`2`}]),1032,[`type`,`title`]))),128))])]),_:1},8,[`title`])]),_:1})):R(``,!0)}}),PM={key:0,class:`flex justify-center items-center py-8`},FM={class:`ml-2`},IM={key:2,class:`space-y-4`},LM={class:`text-lg font-semibold mb-3`},RM={class:`space-y-2`},zM={key:3,class:`text-center py-8 text-gray-500`},BM={class:`text-sm mt-2`},VM=k({__name:`mapping-preview-step`,props:{preview:{},isPreviewLoading:{type:Boolean},previewError:{}},setup(e){let{t}=M();return(n,r)=>e.isPreviewLoading?(A(),i(`div`,PM,[D(L(g),{class:`is-loading`,size:32},{default:B(()=>[D(L(s),{icon:`mdi:loading`})]),_:1}),l(`span`,FM,z(L(t)(`devicesZigbee2mqttPlugin.messages.mapping.previewLoading`)),1)])):e.previewError?(A(),O(L(Q),{key:1,type:`error`,title:L(t)(`devicesZigbee2mqttPlugin.messages.mapping.previewError`),description:e.previewError.message,closable:!1,"show-icon":``},null,8,[`title`,`description`])):e.preview?(A(),i(`div`,IM,[D(AM,{preview:e.preview},null,8,[`preview`]),e.preview.warnings.length>0?(A(),O(NM,{key:0,warnings:e.preview.warnings},null,8,[`warnings`])):R(``,!0),l(`div`,null,[l(`h3`,LM,z(L(t)(`devicesZigbee2mqttPlugin.headings.mapping.exposeMappings`)),1),l(`div`,RM,[(A(!0),i(V,null,I(e.preview.exposes,e=>(A(),O(cM,{key:e.exposeName,expose:e},null,8,[`expose`]))),128))])]),D(L(Q),{type:e.preview.readyToAdopt?`success`:`warning`,title:e.preview.readyToAdopt?L(t)(`devicesZigbee2mqttPlugin.messages.mapping.readyToAdopt`):L(t)(`devicesZigbee2mqttPlugin.messages.mapping.notReadyToAdopt`),closable:!1,"show-icon":``},null,8,[`type`,`title`])])):(A(),i(`div`,zM,[D(L(g),{size:48,class:`mb-4`},{default:B(()=>[D(L(s),{icon:`mdi:information-outline`})]),_:1}),l(`p`,null,z(L(t)(`devicesZigbee2mqttPlugin.messages.mapping.noPreview`)),1),l(`p`,BM,z(L(t)(`devicesZigbee2mqttPlugin.messages.mapping.selectDeviceFirst`)),1)]))}}),HM={class:`flex gap-2`},UM={class:`flex gap-2`},WM={class:`flex gap-2`},GM={class:`flex gap-2`},KM=k({name:`Zigbee2mqttDeviceAddFormMultiStep`,__name:`zigbee2mqtt-device-add-form-multi-step`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{loaded:c,fetchDevices:u}=fs(),d=j(null),f=j(null),m=j(null),h=j(null),{activeStep:v,reachedSteps:y,preview:b,suggestedCategory:x,isPreviewLoading:S,previewError:C,isAdopting:w,categoriesOptions:T,devicesOptions:ee,devicesOptionsLoading:te,exposeOverrides:ne,model:re,formChanged:k,submitStep:ie,clearPreview:ae,formResult:oe}=mj({id:n.id}),se=p(()=>{let e=d.value?.stepOneFormEl;return e?L(e):void 0}),ce=p(()=>{let e=f.value?.stepTwoFormEl;return e?L(e):void 0}),N=p(()=>{let e=m.value?.stepThreeFormEl;return e?L(e):void 0}),le=p(()=>{let e=h.value?.stepFourFormEl;return e?L(e):void 0}),ue=j(null),de=p({get:()=>v.value,set:e=>{let t=v.value;if(!(e&&[`one`,`two`,`three`,`four`,`five`].includes(e))){_(()=>{v.value=t});return}let n=e;if(!y.value.has(n)){_(()=>{v.value=t});return}let r=[`one`,`two`,`three`,`four`,`five`],i=r.indexOf(t),a=r.indexOf(n);if(a<i){r.slice(a+1).forEach(e=>{y.value.delete(e)}),n===`one`||n===`two`?(ae(),ne.value=[]):n===`three`&&(ne.value=[]),v.value=n;return}if(a>i)if(t===`one`||t===`two`||t===`four`){ue.value={targetStep:n,currentStep:t},_(()=>{v.value=t,_(async()=>{if(!ue.value)return;let{currentStep:e}=ue.value;ue.value=null;try{e===`one`?await ie(e,se.value):e===`two`?await ie(e,ce.value):e===`four`&&await ie(e,N.value)}catch{}})});return}else{v.value=n;return}a!==i&&(v.value=n)}}),fe=async()=>{try{v.value===`one`?await ie(v.value,se.value):v.value===`two`?await ie(v.value,ce.value):v.value===`four`?await ie(v.value,N.value):v.value===`five`?await ie(v.value,le.value):await ie(v.value)}catch{}},me=()=>{},he=e=>{ne.value=e},ge=()=>{let e=[`one`,`two`,`three`,`four`,`five`],t=e.indexOf(v.value);if(t>0){let n=e[t-1],r=v.value;if(!n)return;y.value.delete(r),t<e.length-1&&e.slice(t+1).forEach(e=>{y.value.delete(e)}),n===`one`||n===`two`?(ae(),ne.value=[]):n===`three`&&(ne.value=[]),v.value=n}};return pe(()=>{c.value||u().catch(()=>{})}),F(()=>oe.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{if(e){r(`update:remote-form-submit`,!1);try{await fe()}catch{}}}),F(()=>n.remoteFormReset,async e=>{e&&(r(`update:remote-form-reset`,!1),v.value=`one`,y.value=new Set([`one`]),ae(),x.value=null,ne.value=[],re.name=``,re.description=``,re.enabled=!0,re.ieeeAddress=``,re.category=Object.values(dr).find(e=>e!==dr.generic)||dr.sensor,await _(),se.value?.resetFields(),ce.value?.resetFields(),m.value?.resetForm&&m.value.resetForm(),le.value?.resetFields())}),F(()=>k.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),i(V,null,[D(L(ui),{modelValue:de.value,"onUpdate:modelValue":t[0]||=e=>de.value=e,accordion:``,"expand-icon-position":`left`},{default:B(()=>[D(L(li),{title:L(a)(`devicesZigbee2mqttPlugin.headings.device.deviceSelection`),name:`one`},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:devices`})]),_:1})]),default:B(()=>[D(zj,{ref_key:`deviceSelectionStepRef`,ref:d,model:L(re),"devices-options":L(ee),"devices-options-loading":L(te),onDeviceChange:me},null,8,[`model`,`devices-options`,`devices-options-loading`])]),_:1},8,[`title`]),D(L(li),{title:L(a)(`devicesZigbee2mqttPlugin.headings.device.categorySelection`),name:`two`,disabled:!L(y).has(`two`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:tag`})]),_:1})]),default:B(()=>[D(_j,{ref_key:`categorySelectionStepRef`,ref:f,model:L(re),"categories-options":L(T),"suggested-category":L(x)},null,8,[`model`,`categories-options`,`suggested-category`])]),_:1},8,[`title`,`disabled`]),D(L(li),{title:L(a)(`devicesZigbee2mqttPlugin.headings.device.mappingPreview`),name:`three`,disabled:!L(y).has(`three`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:eye`})]),_:1})]),default:B(()=>[D(VM,{preview:L(b),"is-preview-loading":L(S),"preview-error":L(C)},null,8,[`preview`,`is-preview-loading`,`preview-error`])]),_:1},8,[`title`,`disabled`]),D(L(li),{title:L(a)(`devicesZigbee2mqttPlugin.headings.device.mappingCustomization`),name:`four`,disabled:!L(y).has(`four`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:tune`})]),_:1})]),default:B(()=>[D(qj,{ref_key:`mappingCustomizationStepRef`,ref:m,preview:L(b),"is-preview-loading":L(S),"expose-overrides":L(ne),onUpdateOverrides:he},null,8,[`preview`,`is-preview-loading`,`expose-overrides`])]),_:1},8,[`title`,`disabled`]),D(L(li),{title:L(a)(`devicesZigbee2mqttPlugin.headings.device.deviceConfiguration`),name:`five`,disabled:!L(y).has(`five`)},{icon:B(()=>[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:cog`})]),_:1})]),default:B(()=>[D(Oj,{ref_key:`deviceConfigurationStepRef`,ref:h,model:L(re),preview:L(b),"expose-overrides":L(ne)},null,8,[`model`,`preview`,`expose-overrides`])]),_:1},8,[`title`,`disabled`])]),_:1},8,[`modelValue`]),L(v)===`one`?(A(),O(o,{key:0,defer:``,to:`#${L(sa)}`},[D(L(Oe),{loading:L(oe)===L($).WORKING,disabled:L(oe)!==L($).NONE,type:`primary`,onClick:fe},De({default:B(()=>[E(` `+z(L(a)(`devicesZigbee2mqttPlugin.buttons.next`)),1)]),_:2},[L(oe)===L($).ERROR?{name:`icon`,fn:B(()=>[D(L(s),{icon:`mdi:cross-circle`})]),key:`0`}:void 0]),1032,[`loading`,`disabled`])],8,[`to`])):L(v)===`two`?(A(),O(o,{key:1,defer:``,to:`#${L(sa)}`},[l(`div`,HM,[D(L(Oe),{onClick:ge},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{loading:L(oe)===L($).WORKING,disabled:L(oe)!==L($).NONE,type:`primary`,onClick:fe},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.buttons.next`)),1)]),_:1},8,[`loading`,`disabled`])])],8,[`to`])):L(v)===`three`?(A(),O(o,{key:2,defer:``,to:`#${L(sa)}`},[l(`div`,UM,[D(L(Oe),{onClick:ge},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{type:`primary`,onClick:fe},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.buttons.next`)),1)]),_:1})])],8,[`to`])):L(v)===`four`?(A(),O(o,{key:3,defer:``,to:`#${L(sa)}`},[l(`div`,WM,[D(L(Oe),{onClick:ge},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{loading:L(oe)===L($).WORKING||L(S),disabled:L(oe)!==L($).NONE||L(S),type:`primary`,onClick:fe},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.buttons.next`)),1)]),_:1},8,[`loading`,`disabled`])])],8,[`to`])):L(v)===`five`?(A(),O(o,{key:4,defer:``,to:`#${L(sa)}`},[l(`div`,GM,[D(L(Oe),{onClick:ge},{default:B(()=>[E(z(L(a)(`devicesZigbee2mqttPlugin.buttons.previous`)),1)]),_:1}),D(L(Oe),{loading:L(oe)===L($).WORKING||L(w),disabled:L(oe)!==L($).NONE||!L(b)?.readyToAdopt,type:`primary`,onClick:fe},De({default:B(()=>[E(` `+z(L(a)(`devicesZigbee2mqttPlugin.buttons.adoptDevice`)),1)]),_:2},[L(oe)===L($).ERROR?{name:`icon`,fn:B(()=>[D(L(s),{icon:`mdi:cross-circle`})]),key:`0`}:void 0]),1032,[`loading`,`disabled`])])],8,[`to`])):R(``,!0)],64))}}),qM=[dr.generic,dr.lighting,dr.sensor,dr.switcher,dr.thermostat,dr.window_covering,dr.lock],JM=({device:e,messages:t})=>{let n=pn().getStore(jo),{t:r}=M(),i=Tn(),a=On(),o=j($.NONE),s,c=p(()=>wa(qM,[e=>r(`devicesModule.categories.devices.${e}`)],[`asc`]).map(e=>({value:e,label:r(`devicesModule.categories.devices.${e}`)}))),l=P({id:e.id,type:e.type,identifier:e.identifier,category:e.category,name:e.name,description:e.description??``,enabled:e.enabled}),u=gn(f(l)),d=j(void 0),m=j(!1),h=async()=>{let c=e.draft,p=t&&t.error?t.error:e.draft?r(`devicesZigbee2mqttPlugin.messages.devices.notCreated`,{device:e.name}):r(`devicesZigbee2mqttPlugin.messages.devices.notEdited`,{device:e.name});if(d.value.clearValidate(),!await d.value.validate())throw new gs(`Form not valid`);let h=XA.safeParse(l);if(!h.success)throw a.error(`Schema validation failed with:`,h.error),new qA(`Failed to validate edit device model.`);o.value=$.WORKING;try{let{roomId:t,...r}=h.data,i={};`roomId`in h.data&&(t??null)!==(e.roomId??null)&&(i.roomId=t??null),await n.edit({id:e.id,data:{...r,...i,type:e.type}}),e.draft&&await n.save({id:e.id})}catch(e){throw o.value=$.ERROR,s=window.setTimeout(g,2e3),e instanceof ps&&e.code===422?i.error(e.message):i.error(p),e}return o.value=$.OK,s=window.setTimeout(g,2e3),c?(i.success(r(t&&t.success?t.success:`devicesZigbee2mqttPlugin.messages.devices.created`,{device:e.name})),`added`):(i.success(r(t&&t.success?t.success:`devicesZigbee2mqttPlugin.messages.devices.edited`,{device:e.name})),m.value=!1,u=gn(f(l)),`saved`)},g=()=>{window.clearTimeout(s),o.value=$.NONE};return F(l,()=>{m.value=!(0,Xd.isEqual)(f(l),u)}),{categoriesOptions:c,model:l,formEl:d,formChanged:m,submit:h,clear:g,formResult:o}},YM=k({name:`Zigbee2mqttDeviceEditForm`,__name:`zigbee2mqtt-device-edit-form`,props:{device:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:$.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{categoriesOptions:o,model:s,formEl:c,formChanged:l,submit:u,formResult:d}=JM({device:n.device}),{devices:f,isLoading:m}=kj(),h=p(()=>wa(f.value,[e=>e.friendlyName.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.friendlyName,manufacturer:e.manufacturer,model:e.model,available:e.available}))),g=P({name:[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.devices.name.validation.required`),trigger:`change`}],category:[{required:!0,message:a(`devicesZigbee2mqttPlugin.fields.devices.category.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>l.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:c,model:L(s),rules:g,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.devices.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(s).id,"onUpdate:modelValue":t[0]||=e=>L(s).id=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.devices.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.devices.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:L(s).name,"onUpdate:modelValue":t[1]||=e=>L(s).name=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.devices.name.placeholder`),name:`name`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.devices.category.title`),prop:`category`},{default:B(()=>[D(L(ei),{modelValue:L(s).category,"onUpdate:modelValue":t[2]||=e=>L(s).category=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.devices.category.placeholder`),name:`category`,filterable:``,readonly:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(L(o),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),L(s).category?(A(),O(L(Q),{key:0,type:`info`,title:L(a)(`devicesModule.fields.devices.category.description`),description:L(a)(`devicesModule.texts.devices.description.${L(s).category}`),closable:!1,"show-icon":``},null,8,[`title`,`description`])):R(``,!0),D(L(Vt)),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.devices.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:L(s).description,"onUpdate:modelValue":t[3]||=e=>L(s).description=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.devices.description.placeholder`),rows:4,type:`textarea`,name:`description`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.devices.enabled.title`),prop:`enabled`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[4]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Z),{label:L(a)(`devicesZigbee2mqttPlugin.fields.devices.zigbee2mqttDeviceId.title`),prop:`identifier`},{default:B(()=>[D(L(ei),{modelValue:L(s).identifier,"onUpdate:modelValue":t[5]||=e=>L(s).identifier=e,placeholder:L(a)(`devicesZigbee2mqttPlugin.fields.devices.zigbee2mqttDeviceId.placeholder`),loading:L(m),name:`identifier`,filterable:``,disabled:``},{default:B(()=>[(A(!0),i(V,null,I(h.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),XM=e=>({ieeeAddress:e.ieeeAddress,friendlyName:e.friendlyName,manufacturer:e.manufacturer??null,model:e.model??null,description:e.description??null,status:e.status,suggestedCategory:e.suggestedCategory??null,previewChannelCount:e.previewChannelCount,previewChannelIdentifiers:e.previewChannelIdentifiers??[],registeredDeviceId:e.registeredDeviceId??null,registeredDeviceName:e.registeredDeviceName??null,registeredDeviceCategory:e.registeredDeviceCategory??null,error:e.error??null,lastSeenAt:e.lastSeenAt}),ZM=e=>({id:e.id,bridgeOnline:e.bridgeOnline,startedAt:e.startedAt,permitJoin:{active:e.permitJoin.active,expiresAt:e.permitJoin.expiresAt??null,remainingSeconds:e.permitJoin.remainingSeconds},devices:e.devices.map(XM)}),QM=e=>e.results.map(e=>({ieeeAddress:e.ieeeAddress,name:e.name,status:e.status,error:e.error??null})),$M=e=>({data:{devices:e.map(e=>({ieeeAddress:e.ieeeAddress,name:e.name,category:e.category}))}}),eN=()=>({humanize:e=>e?e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/([a-zA-Z])(\d)/g,`$1 $2`).replace(/[_-]+/g,` `).replace(/\s+/g,` `).trim().split(` `).map(e=>e.length>0?e[0].toUpperCase()+e.slice(1).toLowerCase():``).join(` `):``}),tN=e=>e===`ready`||e===`already_registered`,nN={active:!1,expiresAt:null,remainingSeconds:0},rN=254,iN=()=>{let{t:e}=M(),t=Zn(),n=On(),r=Tn(),{humanize:i}=eN(),a=j(null),o=j($.NONE),s=j([]),c=j(!1),l=null,u=0,d=on({interval:250}),f=p(()=>wa(a.value?.devices??[],[e=>+!tN(e.status),e=>e.ieeeAddress],[`asc`,`asc`])),m=p(()=>a.value?.permitJoin??nN),h=p(()=>a.value?.bridgeOnline??!1),g=p(()=>a.value!==null),_=()=>wa(Object.values(dr),[t=>e(`devicesModule.categories.devices.${t}`)],[`asc`]).map(t=>({value:t,label:e(`devicesModule.categories.devices.${t}`)})),v=p(()=>f.value.map(t=>({key:t.ieeeAddress,label:t.registeredDeviceName??i(t.friendlyName),subLabel:[t.manufacturer,t.model].filter(Boolean).join(` · `)||null,identifier:t.friendlyName,status:t.status,adoptable:tN(t.status),willUpdate:t.status===`already_registered`,suggestedName:t.registeredDeviceName??i(t.friendlyName),suggestedCategory:t.registeredDeviceCategory??t.suggestedCategory,categoryOptions:_(),cells:{channels:{render:`tag`,value:e(`devicesZigbee2mqttPlugin.wizard.columns.channelsCount`,{count:t.previewChannelCount}),tooltip:t.previewChannelIdentifiers.join(`, `)}}}))),y=p(()=>s.value.map(e=>({key:e.ieeeAddress,name:e.name,identifier:a.value?.devices.find(t=>t.ieeeAddress===e.ieeeAddress)?.friendlyName??e.ieeeAddress,status:e.status,error:e.error}))),b=p(()=>{if(!m.value.active)return 0;if(m.value.expiresAt===null)return m.value.remainingSeconds;let e=new Date(m.value.expiresAt).getTime();return Number.isNaN(e)?m.value.remainingSeconds:Math.max(0,Math.ceil((e-d.value.getTime())/1e3))}),x=p(()=>{if(!m.value.active)return 0;let e=Math.max(0,rN-b.value);return Math.min(100,Math.round(e/rN*100))}),S=()=>{l!==null&&(window.clearTimeout(l),l=null)},C=()=>{S();let e=u;l=window.setTimeout(async()=>{l=null;try{await ee()}catch{}finally{u===e&&a.value!==null&&C()}},1e3)},w=e=>{a.value=e},T=()=>{s.value=[]},E=async()=>{o.value=$.WORKING,u+=1;let i=u,{data:a,error:s,response:c}=await t.client.POST(`/${Ie}/${UA}/wizard`);if(u!==i)return;if(a!==void 0){T(),w(ZM(a.data)),o.value=$.OK,C();return}let l=e(`devicesZigbee2mqttPlugin.messages.wizard.sessionNotStarted`),d=s?Kn(s,l):l;throw o.value=$.ERROR,r.error(d),n.error(`Failed to start z2m wizard session`),new JA(d,c.status)},ee=async()=>{if(a.value===null)return;let n=u,{data:r,error:i,response:o}=await t.client.GET(`/${Ie}/${UA}/wizard/{id}`,{params:{path:{id:a.value.id}}});if(u!==n)return;if(r!==void 0){w(ZM(r.data));return}let s=e(`devicesZigbee2mqttPlugin.messages.wizard.sessionNotLoaded`);throw new JA(i?Kn(i,s):s,o.status)},D=async()=>{u+=1,S();let e=a.value;if(e===null){T();return}try{let{error:r}=await t.client.DELETE(`/${Ie}/${UA}/wizard/{id}`,{params:{path:{id:e.id}}});if(r){let e=Kn(r,`Failed to cleanly end z2m wizard session`);n.warn(e)}}catch(e){n.warn(`Failed to cleanly end z2m wizard session`,e)}finally{a.value=null,T()}},te=async()=>{if(a.value===null)return;o.value=$.WORKING;let n=u,{data:i,error:s,response:c}=await t.client.POST(`/${Ie}/${UA}/wizard/{id}/permit-join`,{params:{path:{id:a.value.id}}});if(u!==n)return;if(i!==void 0){w(ZM(i.data)),o.value=$.OK;return}let l=e(`devicesZigbee2mqttPlugin.messages.wizard.permitJoinNotEnabled`),d=s?Kn(s,l):l;throw o.value=$.ERROR,r.error(d),new JA(d,c.status)},ne=async()=>{if(a.value===null)return;o.value=$.WORKING;let n=u,{data:i,error:s,response:c}=await t.client.DELETE(`/${Ie}/${UA}/wizard/{id}/permit-join`,{params:{path:{id:a.value.id}}});if(u!==n)return;if(i!==void 0){w(ZM(i.data)),o.value=$.OK;return}let l=e(`devicesZigbee2mqttPlugin.messages.wizard.permitJoinNotDisabled`),d=s?Kn(s,l):l;throw o.value=$.ERROR,r.error(d),new JA(d,c.status)},re=async()=>{c.value=!0;try{m.value.active?await ne():await te()}catch{}finally{c.value=!1}},O=p(()=>g.value?h.value?[{type:`progress`,id:`pairing`,label:e(`devicesZigbee2mqttPlugin.wizard.steps.discovery.pairingActive`,{remaining:b.value}),percentage:x.value,state:x.value>=75?`warning`:void 0,visible:m.value.active},m.value.active?{type:`action`,id:`permit-join`,label:e(`devicesZigbee2mqttPlugin.wizard.steps.discovery.cancelPairing`),icon:`mdi:close-circle-outline`,variant:`warning`,loading:c.value,disabled:c.value,handler:re}:{type:`action`,id:`permit-join`,label:e(`devicesZigbee2mqttPlugin.wizard.steps.discovery.permitJoin`),icon:`mdi:plus-circle-outline`,variant:`primary`,loading:c.value,disabled:c.value,handler:re}]:[{type:`banner`,id:`bridge-offline`,severity:`warning`,title:e(`devicesZigbee2mqttPlugin.wizard.bridge.offline.title`),message:e(`devicesZigbee2mqttPlugin.wizard.bridge.offline.message`),link:{label:e(`devicesZigbee2mqttPlugin.wizard.bridge.offline.openConfig`),to:{name:Da.CONFIG_PLUGIN_EDIT,params:{plugin:WA}}}}]:[]);return{title:e(`devicesZigbee2mqttPlugin.wizard.title`),subtitle:e(`devicesZigbee2mqttPlugin.wizard.subtitle`),breadcrumbLabel:e(`devicesZigbee2mqttPlugin.wizard.breadcrumb`),pluginType:WA,identifierLabel:e(`devicesZigbee2mqttPlugin.wizard.columns.friendlyName`),rows:v,results:y,columns:[{key:`channels`,label:e(`devicesZigbee2mqttPlugin.wizard.columns.channels`),steps:[`confirm`],width:120,sortable:!0}],controls:O,ready:g,busy:p(()=>o.value===$.WORKING),capabilities:{addMore:!0},start:E,adopt:async n=>{if(a.value===null)return[];o.value=$.WORKING;let c=n.map(e=>{let t=a.value?.devices.find(t=>t.ieeeAddress===e.key);return{ieeeAddress:e.key,name:e.name.trim()||(t===void 0?``:i(t.friendlyName))||e.key,category:e.category??dr.generic}}),{data:l,error:u,response:d}=await t.client.POST(`/${Ie}/${UA}/wizard/{id}/adopt`,{params:{path:{id:a.value.id}},body:$M(c)});if(l!==void 0)return s.value=QM(l.data),o.value=s.value.some(e=>e.status===`failed`)?$.ERROR:$.OK,y.value;let f=e(`devicesZigbee2mqttPlugin.messages.wizard.adoptionFailed`),p=u?Kn(u,f):f;throw o.value=$.ERROR,r.error(p),new JA(p,d.status)},beforeLeaveDiscover:async()=>{m.value.active&&(await ne(),r.info(e(`devicesZigbee2mqttPlugin.wizard.steps.discovery.pairingDisabled`)))},restart:async()=>{await D().catch(()=>void 0),await E()},dispose:D}},aN={"cs-CZ":{headings:{aboutPluginStatus:`Stav pluginu`,aboutConnection:`Typ připojení`,aboutMqtt:`MQTT připojení`,advancedMqttSettings:`Pokročilé nastavení MQTT`,aboutWs:`Připojení WebSocket`,advancedWsSettings:`Pokročilá nastavení WebSocket`,aboutTls:`Konfigurace TLS/SSL`,aboutDiscovery:`Vyhledávání zařízení`,steps:{selectDevice:`Vybrat zařízení`,selectCategory:`Kategorie zařízení`,mappingPreview:`Náhled mapování`,customizeMapping:`Přizpůsobit mapování`,deviceConfiguration:`Konfigurace zařízení`},mapping:{summary:`Souhrn mapování`,warnings:`Varování mapování ({count})`,exposeMappings:`Mapování expozic`,customization:`Přizpůsobení mapování`},device:{deviceSelection:`Vybrat zařízení`,categorySelection:`Kategorie zařízení`,mappingPreview:`Náhled mapování`,mappingCustomization:`Přizpůsobit mapování`,deviceConfiguration:`Konfigurace zařízení`,deviceInfo:`Informace o zařízení`}},texts:{aboutPluginStatus:`Povolte nebo zakažte plugin Zigbee2MQTT. Pokud je zakázán, žádná Zigbee zařízení nebudou monitorována ani ovládána.`,aboutConnection:`Vyberte, jak se připojit ke službě Zigbee2MQTT. Použijte MQTT pro připojení přes MQTT broker nebo WebSocket pro přímé připojení k rozhraní Zigbee2MQTT.`,aboutMqtt:`Nakonfigurujte připojení k vašemu MQTT brokeru, kde Zigbee2MQTT publikuje data zařízení.`,aboutWs:`Nastavte přímé WebSocket připojení k rozhraní Zigbee2MQTT. Tím odpadá potřeba samostatného MQTT brokeru.`,aboutTls:`Nakonfigurujte nastavení TLS/SSL pro zabezpečená MQTT připojení. Povolte TLS, pokud váš broker vyžaduje šifrovaná připojení.`,aboutDiscovery:`Nakonfigurujte, jak jsou zařízení vyhledávána a přidávána z bridge Zigbee2MQTT.`,steps:{selectDevice:`Vyberte Zigbee zařízení k adopci ze seznamu nalezených zařízení.`,selectCategory:`Vyberte kategorii zařízení. Navrhovaná kategorie je založena na expozicích zařízení.`,mappingPreview:`Zkontrolujte, jak budou expozice zařízení mapovány na kanály a vlastnosti Smart Panelu.`,customizeMapping:`Přizpůsobte, které expozice zahrnout, a upravte kategorie kanálů podle potřeby.`,deviceConfiguration:`Nakonfigurujte název zařízení, popis a další nastavení.`},noDiscoveredDevices:`Žádná nalezená zařízení nejsou k dispozici. Ujistěte se, že Zigbee2MQTT běží a zařízení jsou spárována.`,loadingDevices:`Načítání nalezených zařízení...`,loadingPreview:`Načítání náhledu mapování...`,mapping:{customizationDescription:`Přepněte, které expozice zahrnout, a přizpůsobte kategorie kanálů. Zakázané expozice nebudou vytvořeny.`}},fields:{config:{enabled:{title:`Povoleno`},connectionType:{title:`Typ připojení`,mqtt:`Broker MQTT`,ws:`WebSocket (přímé)`},mqtt:{host:{title:`Hostitel MQTT brokeru`,placeholder:`např. localhost nebo 192.168.1.100`,validation:{required:`Hostitel MQTT brokeru je povinný`}},port:{title:`Keepalive (s)`,validation:{required:`Port je povinný`,range:`Port musí být mezi 1 a 65535`}},username:{title:`Uživatelské jméno`,placeholder:`Uživatelské jméno MQTT (volitelné)`},password:{title:`Heslo`,placeholder:`Heslo MQTT (volitelné)`},baseTopic:{title:`Základní téma`,placeholder:`např. zigbee2mqtt`,validation:{required:`Základní téma je povinné`}},clientId:{title:`MQTT Client ID`,placeholder:`Automaticky generováno pokud prázdné`},cleanSession:{title:`Čistá relace`},keepalive:{title:`Životnost připojení (s)`,validation:{number:`Musí být číslo >= 10`}},connectTimeout:{title:`Časový limit (ms)`,validation:{number:`Hodnota musí být číslo >= 1000`}},reconnectInterval:{title:`Opětovné připojení (ms)`,validation:{number:`Musí být číslo >= 1000`}}},ws:{host:{title:`Hostitel Zigbee2MQTT`,placeholder:`např. localhost nebo 192.168.1.100`,validation:{required:`Je vyžadován hostitel Zigbee2MQTT`}},port:{title:`Přístav`,validation:{required:`Je vyžadován port`,range:`Port musí být v rozsahu 1 až 65535`}},baseTopic:{title:`Základní téma`,placeholder:`např. zigbee2mqtt`,validation:{required:`Je vyžadováno základní téma`}},secure:{title:`Použít zabezpečené připojení (wss://)`},connectTimeout:{title:`Časový limit (ms)`,validation:{number:`Musí být číslo >= 1000`}},reconnectInterval:{title:`Opětovné připojení (ms)`,validation:{number:`Musí být číslo >= 1000`}}},tls:{enabled:{title:`Povolit TLS`},rejectUnauthorized:{title:`Odmítnout neautorizované certifikáty`},ca:{title:`CA certifikát`,placeholder:`Vložte obsah CA certifikátu nebo cestu`},cert:{title:`Klientský certifikát`,placeholder:`Vložte obsah klientského certifikátu nebo cestu`},key:{title:`Soukromý klíč klienta`,placeholder:`Vložte obsah soukromého klíče klienta nebo cestu`}},discovery:{autoAdd:{title:`Automaticky přidávat nalezená zařízení`},syncOnStartup:{title:`Synchronizovat zařízení při spuštění`}}},devices:{id:{title:`ID zařízení`,placeholder:`ID zařízení`},name:{title:`Název`,placeholder:`Název zařízení`,validation:{required:`Vyplňte prosím název zařízení`}},category:{title:`Kategorie`,placeholder:`Kategorie zařízení`,validation:{required:`Vyberte prosím kategorii zařízení`}},description:{title:`Popis`,placeholder:`Popis zařízení`},enabled:{title:`Povoleno`},ieeeAddress:{title:`IEEE adresa`,placeholder:`Vyberte zařízení`,validation:{required:`Vyberte prosím zařízení`}},friendlyName:{title:`Přátelský název`},manufacturer:{title:`Výrobce`},model:{title:`Model zařízení`},zigbee2mqttDeviceId:{title:`Připojené zařízení Zigbee2MQTT`,placeholder:`Vyberte připojené zařízení`}},mapping:{mapped:`Mapováno`,partial:`Částečně`,unmapped:`Nemapováno`,skipped:`Přeskočeno`,excluded:`Vyloučeno`,totalExposes:`Celkem expozic`,deviceName:`Název zařízení`,suggestedCategory:`Navrhovaná kategorie`,suggestedChannel:{title:`Navrhovaný kanál`,validation:{required:`Vyberte prosím kategorii kanálu`}},properties:`Vlastnosti`,missingRequiredProperties:`Chybějící povinné vlastnosti`,exposeEnabled:`Povoleno`,channelCategory:`Kategorie kanálu`,noChannelSuggested:`Žádný kanál navrhnut`}},messages:{config:{edited:`Konfigurace pluginu Zigbee2MQTT byla aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci pluginu Zigbee2MQTT`},devices:{created:`Zařízení Zigbee2MQTT '{device}' bylo vytvořeno`,notCreated:`Nepodařilo se vytvořit zařízení Zigbee2MQTT '{device}'`,edited:`Zařízení Zigbee2MQTT '{device}' bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat zařízení Zigbee2MQTT '{device}'`,adopted:`Zařízení '{device}' bylo úspěšně adoptováno`,notAdopted:`Nepodařilo se adoptovat zařízení '{device}'`,noDiscoveredDevices:`Žádná nalezená zařízení nejsou k dispozici. Ujistěte se, že Zigbee2MQTT běží a zařízení jsou spárována.`,deviceOffline:`Toto zařízení je momentálně offline`,alreadyAdopted:`Toto zařízení je již adoptováno`,alreadyAdoptedDescription:`Pokračování znovu adoptuje zařízení s novou konfigurací. Stávající zařízení bude aktualizováno.`},discoveredDevices:{loadFailed:`Nepodařilo se načíst nalezená zařízení`,mappingPreviewFailed:`Nepodařilo se načíst náhled mapování`},wizard:{sessionNotStarted:`Nepodařilo se spustit průvodce přidáním`,sessionNotLoaded:`Nepodařilo se obnovit průvodce přidáním`,permitJoinNotEnabled:`Nepodařilo se zapnout režim párování`,permitJoinNotDisabled:`Nepodařilo se vypnout režim párování`,adoptionFailed:`Nepodařilo se přidat vybraná zařízení`},mapping:{previewError:`Nepodařilo se načíst náhled mapování`,previewLoading:`Načítání náhledu mapování...`,missingChannelCategory:`Vyberte prosím kategorii kanálu pro: {exposes}`,notReadyToAdopt:`Zařízení není připraveno k adopci. Zkontrolujte a opravte prosím všechna varování.`,readyToAdopt:`Zařízení je připraveno k adopci`,noPreview:`Žádný náhled mapování není k dispozici`,selectDeviceFirst:`Nejprve prosím vyberte zařízení pro zobrazení náhledu mapování`,adoptionSuccess:`Zařízení '{device}' bylo úspěšně adoptováno`},categorySelection:{description:`Vyberte kategorii zařízení. Navrhovaná kategorie je založena na schopnostech zařízení.`}},labels:{suggested:`Navrhováno`},buttons:{next:`Další`,previous:`Předchozí`,adoptDevice:`Adoptovat zařízení`,refresh:`Obnovit`,use:`Použít`},wizard:{title:`Průvodce přidáním Zigbee2MQTT`,subtitle:`Najděte a přidejte Zigbee zařízení přes Zigbee2MQTT bridge`,breadcrumb:`průvodce přidáním`,bridge:{offline:{title:`Most je offline.`,message:`Zigbee2MQTT bridge je momentálně offline. Pro pokračování nakonfigurujte připojení.`,openConfig:`Otevřít konfiguraci`}},steps:{discovery:{permitJoin:`Spárovat nové zařízení`,cancelPairing:`Zrušit párování`,pairingActive:`Režim párování aktivní — zbývá {remaining}s`,pairingDisabled:`Režim párování deaktivován`}},columns:{friendlyName:`Přátelské jméno`,channels:`Kanály`,channelsCount:`{count} kanál | {count} kanály | {count} kanálů`}}},"de-DE":{headings:{aboutPluginStatus:`Plugin-Status`,aboutConnection:`Verbindungsart`,aboutMqtt:`MQTT-Verbindung`,advancedMqttSettings:`Erweiterte MQTT-Einstellungen`,aboutWs:`WebSocket-Verbindung`,advancedWsSettings:`Erweiterte WebSocket-Einstellungen`,aboutTls:`TLS/SSL-Konfiguration`,aboutDiscovery:`Geräteerkennung`,steps:{selectDevice:`Gerät auswählen`,selectCategory:`Gerätekategorie`,mappingPreview:`Zuordnungsvorschau`,customizeMapping:`Zuordnung anpassen`,deviceConfiguration:`Gerätekonfiguration`},mapping:{summary:`Zuordnungszusammenfassung`,warnings:`Zuordnungswarnungen ({count})`,exposeMappings:`Expose-Zuordnungen`,customization:`Zuordnungsanpassung`},device:{deviceSelection:`Gerät auswählen`,categorySelection:`Gerätekategorie`,mappingPreview:`Zuordnungsvorschau`,mappingCustomization:`Zuordnung anpassen`,deviceConfiguration:`Gerätekonfiguration`,deviceInfo:`Geräteinformationen`}},texts:{aboutPluginStatus:`Aktivieren oder deaktivieren Sie das Zigbee2MQTT-Plugin. Wenn deaktiviert, werden keine Zigbee-Geräte überwacht oder gesteuert.`,aboutConnection:`Wählen Sie, wie Zigbee2MQTT verbunden wird. Verwenden Sie MQTT für die Verbindung über einen MQTT-Broker oder WebSocket für die direkte Verbindung zum Zigbee2MQTT-Frontend.`,aboutMqtt:`Konfigurieren Sie die Verbindung zu Ihrem MQTT-Broker, über den Zigbee2MQTT Gerätedaten veröffentlicht.`,aboutWs:`Konfigurieren Sie die direkte WebSocket-Verbindung zum Zigbee2MQTT-Frontend. So wird kein separater MQTT-Broker benötigt.`,aboutTls:`Konfigurieren Sie TLS/SSL-Einstellungen für sichere MQTT-Verbindungen. Aktivieren Sie TLS, wenn Ihr Broker verschlüsselte Verbindungen erfordert.`,aboutDiscovery:`Konfigurieren Sie, wie Geräte von der Zigbee2MQTT-Bridge erkannt und hinzugefügt werden.`,steps:{selectDevice:`Wählen Sie ein Zigbee-Gerät zur Übernahme aus der Liste der erkannten Geräte.`,selectCategory:`Wählen Sie die Gerätekategorie. Die vorgeschlagene Kategorie basiert auf den Exposes des Geräts.`,mappingPreview:`Überprüfen Sie, wie die Exposes des Geräts auf Smart Panel-Kanäle und -Eigenschaften zugeordnet werden.`,customizeMapping:`Passen Sie an, welche Exposes einbezogen werden, und ändern Sie bei Bedarf die Kanalkategorien.`,deviceConfiguration:`Konfigurieren Sie Gerätename, Beschreibung und andere Einstellungen.`},noDiscoveredDevices:`Keine erkannten Geräte verfügbar. Stellen Sie sicher, dass Zigbee2MQTT läuft und Geräte gekoppelt sind.`,loadingDevices:`Erkannte Geräte werden geladen...`,loadingPreview:`Zuordnungsvorschau wird geladen...`,mapping:{customizationDescription:`Schalten Sie ein, welche Exposes einbezogen werden, und passen Sie Kanalkategorien an. Deaktivierte Exposes werden nicht erstellt.`}},fields:{config:{enabled:{title:`Aktiviert`},connectionType:{title:`Verbindungstyp`,mqtt:`MQTT-Broker`,ws:`WebSocket (direkt)`},mqtt:{host:{title:`MQTT-Broker-Host`,placeholder:`z.B. localhost oder 192.168.1.100`,validation:{required:`MQTT-Broker-Host ist erforderlich`}},port:{title:`Hafen`,validation:{required:`Port ist erforderlich`,range:`Port muss zwischen 1 und 65535 liegen`}},username:{title:`Benutzername`,placeholder:`MQTT-Benutzername (optional)`},password:{title:`Passwort`,placeholder:`MQTT-Passwort (optional)`},baseTopic:{title:`Basis-Topic`,placeholder:`z.B. zigbee2mqtt`,validation:{required:`Basis-Topic ist erforderlich`}},clientId:{title:`MQTT-Client-ID`,placeholder:`Automatisch generiert wenn leer`},cleanSession:{title:`Saubere Sitzung`},keepalive:{title:`Keep-Alive (s)`,validation:{number:`Muss eine Zahl >= 10 sein`}},connectTimeout:{title:`Zeitüberschreitung (ms)`,validation:{number:`Muss eine Zahl >= 1000 sein`}},reconnectInterval:{title:`Wiederverbindung (ms)`,validation:{number:`Muss eine Zahl >= 1000 sein`}}},ws:{host:{title:`Zigbee2MQTT-Host`,placeholder:`z. B. localhost oder 192.168.1.100`,validation:{required:`Zigbee2MQTT-Host ist erforderlich`}},port:{title:`Hafen`,validation:{required:`Port ist erforderlich`,range:`Port muss zwischen 1 und 65535 liegen`}},baseTopic:{title:`Basisthema`,placeholder:`z. B. zigbee2mqtt`,validation:{required:`Basisthema ist erforderlich`}},secure:{title:`Sichere Verbindung verwenden (wss://)`},connectTimeout:{title:`Zeitüberschreitung (ms)`,validation:{number:`Muss eine Zahl >= 1000 sein`}},reconnectInterval:{title:`Wiederverbindung (ms)`,validation:{number:`Muss eine Zahl >= 1000 sein`}}},tls:{enabled:{title:`TLS aktivieren`},rejectUnauthorized:{title:`Nicht autorisierte Zertifikate ablehnen`},ca:{title:`CA-Zertifikat`,placeholder:`CA-Zertifikatinhalt oder -pfad einfügen`},cert:{title:`Client-Zertifikat`,placeholder:`Client-Zertifikatinhalt oder -pfad einfügen`},key:{title:`Privater Client-Schlüssel`,placeholder:`Privaten Client-Schlüsselinhalt oder -pfad einfügen`}},discovery:{autoAdd:{title:`Erkannte Geräte automatisch hinzufügen`},syncOnStartup:{title:`Geräte beim Start synchronisieren`}}},devices:{id:{title:`Geräte-ID`,placeholder:`Geräte-ID`},name:{title:`Name`,placeholder:`Gerätename`,validation:{required:`Bitte geben Sie den Gerätenamen ein`}},category:{title:`Kategorie`,placeholder:`Gerätekategorie`,validation:{required:`Bitte wählen Sie eine Gerätekategorie`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung`},enabled:{title:`Aktiviert`},ieeeAddress:{title:`IEEE-Adresse`,placeholder:`Gerät auswählen`,validation:{required:`Bitte wählen Sie ein Gerät`}},friendlyName:{title:`Anzeigename`},manufacturer:{title:`Hersteller`},model:{title:`Modell`},zigbee2mqttDeviceId:{title:`Verbundenes Zigbee2MQTT-Gerät`,placeholder:`Verbundenes Gerät auswählen`}},mapping:{mapped:`Zugeordnet`,partial:`Teilweise`,unmapped:`Nicht zugeordnet`,skipped:`Übersprungen`,excluded:`Ausgeschlossen`,totalExposes:`Exposes gesamt`,deviceName:`Gerätename`,suggestedCategory:`Vorgeschlagene Kategorie`,suggestedChannel:{title:`Vorgeschlagener Kanal`,validation:{required:`Bitte wählen Sie eine Kanalkategorie`}},properties:`Eigenschaften`,missingRequiredProperties:`Fehlende erforderliche Eigenschaften`,exposeEnabled:`Aktiviert`,channelCategory:`Kanalkategorie`,noChannelSuggested:`Kein Kanal vorgeschlagen`}},messages:{config:{edited:`Zigbee2MQTT-Plugin-Konfiguration wurde aktualisiert`,notEdited:`Aktualisierung der Zigbee2MQTT-Plugin-Konfiguration fehlgeschlagen`},devices:{created:`Zigbee2MQTT-Gerät '{device}' wurde erstellt`,notCreated:`Erstellung des Zigbee2MQTT-Geräts '{device}' fehlgeschlagen`,edited:`Zigbee2MQTT-Gerät '{device}' wurde aktualisiert`,notEdited:`Aktualisierung des Zigbee2MQTT-Geräts '{device}' fehlgeschlagen`,adopted:`Gerät '{device}' wurde erfolgreich übernommen`,notAdopted:`Übernahme des Geräts '{device}' fehlgeschlagen`,noDiscoveredDevices:`Keine erkannten Geräte verfügbar. Stellen Sie sicher, dass Zigbee2MQTT läuft und Geräte gekoppelt sind.`,deviceOffline:`Dieses Gerät ist derzeit offline`,alreadyAdopted:`Dieses Gerät ist bereits übernommen`,alreadyAdoptedDescription:`Fortfahren wird das Gerät mit der neuen Konfiguration erneut übernehmen. Das bestehende Gerät wird aktualisiert.`},discoveredDevices:{loadFailed:`Erkannte Geräte konnten nicht geladen werden`,mappingPreviewFailed:`Zuordnungsvorschau konnte nicht geladen werden`},wizard:{sessionNotStarted:`Erkennungsassistent konnte nicht gestartet werden`,sessionNotLoaded:`Erkennungsassistent konnte nicht aktualisiert werden`,permitJoinNotEnabled:`Kopplungsmodus konnte nicht aktiviert werden`,permitJoinNotDisabled:`Kopplungsmodus konnte nicht deaktiviert werden`,adoptionFailed:`Ausgewählte Geräte konnten nicht übernommen werden`},mapping:{previewError:`Zuordnungsvorschau konnte nicht geladen werden`,previewLoading:`Zuordnungsvorschau wird geladen...`,missingChannelCategory:`Bitte wählen Sie eine Kanalkategorie für: {exposes}`,notReadyToAdopt:`Gerät ist nicht bereit zur Übernahme. Bitte überprüfen und beheben Sie alle Warnungen.`,readyToAdopt:`Gerät ist bereit zur Übernahme`,noPreview:`Keine Zuordnungsvorschau verfügbar`,selectDeviceFirst:`Bitte wählen Sie zuerst ein Gerät aus, um die Zuordnungsvorschau zu sehen`,adoptionSuccess:`Gerät '{device}' wurde erfolgreich übernommen`},categorySelection:{description:`Wählen Sie die Gerätekategorie. Die vorgeschlagene Kategorie basiert auf den Fähigkeiten des Geräts.`}},labels:{suggested:`Vorgeschlagen`},buttons:{next:`Weiter`,previous:`Zurück`,adoptDevice:`Gerät übernehmen`,refresh:`Aktualisieren`,use:`Verwenden`},wizard:{title:`Zigbee2MQTT-Erkennungsassistent`,subtitle:`Zigbee-Geräte über die Zigbee2MQTT-Bridge finden und übernehmen`,breadcrumb:`Erkennungsassistent`,bridge:{offline:{title:`Bridge ist offline.`,message:`Die Zigbee2MQTT-Bridge ist derzeit offline. Konfigurieren Sie die Verbindung, um fortzufahren.`,openConfig:`Konfiguration öffnen`}},steps:{discovery:{permitJoin:`Neues Gerät koppeln`,cancelPairing:`Kopplung abbrechen`,pairingActive:`Kopplungsmodus aktiv — {remaining}s verbleibend`,pairingDisabled:`Kopplungsmodus deaktiviert`}},columns:{friendlyName:`Anzeigename`,channels:`Kanäle`,channelsCount:`{count} Kanal | {count} Kanäle`}}},"en-US":{headings:{aboutPluginStatus:`Plugin status`,aboutConnection:`Connection type`,aboutMqtt:`MQTT connection`,advancedMqttSettings:`Advanced MQTT settings`,aboutWs:`WebSocket connection`,advancedWsSettings:`Advanced WebSocket settings`,aboutTls:`TLS/SSL configuration`,aboutDiscovery:`Device discovery`,steps:{selectDevice:`Select device`,selectCategory:`Device category`,mappingPreview:`Mapping preview`,customizeMapping:`Customize mapping`,deviceConfiguration:`Device configuration`},mapping:{summary:`Mapping summary`,warnings:`Mapping warnings ({count})`,exposeMappings:`Expose mappings`,customization:`Mapping customization`},device:{deviceSelection:`Select device`,categorySelection:`Device category`,mappingPreview:`Mapping preview`,mappingCustomization:`Customize mapping`,deviceConfiguration:`Device configuration`,deviceInfo:`Device information`}},texts:{aboutPluginStatus:`Enable or disable the Zigbee2MQTT plugin. When disabled, no Zigbee devices will be monitored or controlled.`,aboutConnection:`Choose how to connect to Zigbee2MQTT. Use MQTT to connect via an MQTT broker, or WebSocket to connect directly to the Zigbee2MQTT frontend.`,aboutMqtt:`Configure the connection to your MQTT broker where Zigbee2MQTT publishes device data.`,aboutWs:`Configure the direct WebSocket connection to the Zigbee2MQTT frontend. This eliminates the need for a separate MQTT broker.`,aboutTls:`Configure TLS/SSL settings for secure MQTT connections. Enable TLS if your broker requires encrypted connections.`,aboutDiscovery:`Configure how devices are discovered and added from the Zigbee2MQTT bridge.`,steps:{selectDevice:`Select a Zigbee device to adopt from the discovered devices list.`,selectCategory:`Choose the device category. The suggested category is based on the device's exposes.`,mappingPreview:`Review how the device's exposes will be mapped to Smart Panel channels and properties.`,customizeMapping:`Customize which exposes to include and adjust channel categories if needed.`,deviceConfiguration:`Configure device name, description, and other settings.`},noDiscoveredDevices:`No discovered devices available. Make sure Zigbee2MQTT is running and devices are paired.`,loadingDevices:`Loading discovered devices...`,loadingPreview:`Loading mapping preview...`,mapping:{customizationDescription:`Toggle which exposes to include and customize channel categories. Disabled exposes will not be created.`}},fields:{config:{enabled:{title:`Enabled`},connectionType:{title:`Connection type`,mqtt:`MQTT broker`,ws:`WebSocket (direct)`},mqtt:{host:{title:`MQTT broker host`,placeholder:`e.g., localhost or 192.168.1.100`,validation:{required:`MQTT broker host is required`}},port:{title:`Port`,validation:{required:`Port is required`,range:`Port must be between 1 and 65535`}},username:{title:`Username`,placeholder:`MQTT username (optional)`},password:{title:`Password`,placeholder:`MQTT password (optional)`},baseTopic:{title:`Base topic`,placeholder:`e.g., zigbee2mqtt`,validation:{required:`Base topic is required`}},clientId:{title:`Client ID`,placeholder:`Auto-generated if empty`},cleanSession:{title:`Clean session`},keepalive:{title:`Keepalive (s)`,validation:{number:`Must be a number >= 10`}},connectTimeout:{title:`Timeout (ms)`,validation:{number:`Must be a number >= 1000`}},reconnectInterval:{title:`Reconnect (ms)`,validation:{number:`Must be a number >= 1000`}}},ws:{host:{title:`Zigbee2MQTT host`,placeholder:`e.g., localhost or 192.168.1.100`,validation:{required:`Zigbee2MQTT host is required`}},port:{title:`Port`,validation:{required:`Port is required`,range:`Port must be between 1 and 65535`}},baseTopic:{title:`Base topic`,placeholder:`e.g., zigbee2mqtt`,validation:{required:`Base topic is required`}},secure:{title:`Use secure connection (wss://)`},connectTimeout:{title:`Timeout (ms)`,validation:{number:`Must be a number >= 1000`}},reconnectInterval:{title:`Reconnect (ms)`,validation:{number:`Must be a number >= 1000`}}},tls:{enabled:{title:`Enable TLS`},rejectUnauthorized:{title:`Reject unauthorized certificates`},ca:{title:`CA certificate`,placeholder:`Paste CA certificate content or path`},cert:{title:`Client certificate`,placeholder:`Paste client certificate content or path`},key:{title:`Client private key`,placeholder:`Paste client private key content or path`}},discovery:{autoAdd:{title:`Auto-add discovered devices`},syncOnStartup:{title:`Sync devices on startup`}}},devices:{id:{title:`Device ID`,placeholder:`Device ID`},name:{title:`Name`,placeholder:`Device name`,validation:{required:`Please fill in device name`}},category:{title:`Category`,placeholder:`Device category`,validation:{required:`Please select device category`}},description:{title:`Description`,placeholder:`Device description`},enabled:{title:`Enabled`},ieeeAddress:{title:`IEEE address`,placeholder:`Select a device`,validation:{required:`Please select a device`}},friendlyName:{title:`Friendly name`},manufacturer:{title:`Manufacturer`},model:{title:`Model`},zigbee2mqttDeviceId:{title:`Connected Zigbee2MQTT device`,placeholder:`Select connected device`}},mapping:{mapped:`Mapped`,partial:`Partial`,unmapped:`Unmapped`,skipped:`Skipped`,excluded:`Excluded`,totalExposes:`Total exposes`,deviceName:`Device name`,suggestedCategory:`Suggested category`,suggestedChannel:{title:`Suggested channel`,validation:{required:`Please select a channel category`}},properties:`Properties`,missingRequiredProperties:`Missing required properties`,exposeEnabled:`Enabled`,channelCategory:`Channel category`,noChannelSuggested:`No channel suggested`}},messages:{config:{edited:`Zigbee2MQTT plugin configuration has been updated`,notEdited:`Failed to update Zigbee2MQTT plugin configuration`},devices:{created:`Zigbee2MQTT device '{device}' has been created`,notCreated:`Failed to create Zigbee2MQTT device '{device}'`,edited:`Zigbee2MQTT device '{device}' has been updated`,notEdited:`Failed to update Zigbee2MQTT device '{device}'`,adopted:`Device '{device}' has been successfully adopted`,notAdopted:`Failed to adopt device '{device}'`,noDiscoveredDevices:`No discovered devices available. Make sure Zigbee2MQTT is running and devices are paired.`,deviceOffline:`This device is currently offline`,alreadyAdopted:`This device is already adopted`,alreadyAdoptedDescription:`Continuing will re-adopt the device with the new configuration. The existing device will be updated.`},discoveredDevices:{loadFailed:`Failed to load discovered devices`,mappingPreviewFailed:`Failed to load mapping preview`},wizard:{sessionNotStarted:`Failed to start the adoption wizard`,sessionNotLoaded:`Failed to refresh the adoption wizard`,permitJoinNotEnabled:`Failed to enable pairing mode`,permitJoinNotDisabled:`Failed to disable pairing mode`,adoptionFailed:`Failed to adopt the selected devices`},mapping:{previewError:`Failed to load mapping preview`,previewLoading:`Loading mapping preview...`,missingChannelCategory:`Please select a channel category for: {exposes}`,notReadyToAdopt:`Device is not ready to be adopted. Please review and fix any warnings.`,readyToAdopt:`Device is ready to be adopted`,noPreview:`No mapping preview available`,selectDeviceFirst:`Please select a device first to see the mapping preview`,adoptionSuccess:`Device '{device}' has been successfully adopted`},categorySelection:{description:`Choose the device category. The suggested category is based on the device's capabilities.`}},labels:{suggested:`Suggested`},buttons:{next:`Next`,previous:`Previous`,adoptDevice:`Adopt device`,refresh:`Refresh`,use:`Use`},wizard:{title:`Zigbee2MQTT discovery wizard`,subtitle:`Find and adopt Zigbee devices via the Zigbee2MQTT bridge`,breadcrumb:`discovery wizard`,bridge:{offline:{title:`Bridge offline`,message:`The Zigbee2MQTT bridge is currently offline. Configure the connection to continue.`,openConfig:`Open configuration`}},steps:{discovery:{permitJoin:`Pair new device`,cancelPairing:`Cancel pairing`,pairingActive:`Pairing mode active — {remaining}s remaining`,pairingDisabled:`Pairing mode disabled`}},columns:{friendlyName:`Friendly name`,channels:`Channels`,channelsCount:`{count} channel | {count} channels`}}},"es-ES":{headings:{aboutPluginStatus:`Estado del plugin`,aboutConnection:`Tipo de conexión`,aboutMqtt:`Conexión MQTT`,advancedMqttSettings:`Configuración avanzada de MQTT`,aboutWs:`Conexión WebSocket`,advancedWsSettings:`Configuración avanzada de WebSocket`,aboutTls:`Configuración TLS/SSL`,aboutDiscovery:`Descubrimiento de dispositivos`,steps:{selectDevice:`Seleccionar dispositivo`,selectCategory:`Categoría del dispositivo`,mappingPreview:`Vista previa del mapeo`,customizeMapping:`Personalizar mapeo`,deviceConfiguration:`Configuración del dispositivo`},mapping:{summary:`Resumen del mapeo`,warnings:`Advertencias del mapeo ({count})`,exposeMappings:`Mapeo de exposes`,customization:`Personalización del mapeo`},device:{deviceSelection:`Seleccionar dispositivo`,categorySelection:`Categoría del dispositivo`,mappingPreview:`Vista previa del mapeo`,mappingCustomization:`Personalizar mapeo`,deviceConfiguration:`Configuración del dispositivo`,deviceInfo:`Información del dispositivo`}},texts:{aboutPluginStatus:`Habilitar o deshabilitar el plugin Zigbee2MQTT. Cuando está deshabilitado, no se monitorizarán ni controlarán dispositivos Zigbee.`,aboutConnection:`Seleccione cómo conectarse a Zigbee2MQTT. Use MQTT para conectarse mediante un broker MQTT o WebSocket para conectarse directamente al frontend de Zigbee2MQTT.`,aboutMqtt:`Configure la conexión al broker MQTT donde Zigbee2MQTT publica los datos de los dispositivos.`,aboutWs:`Configure la conexión WebSocket directa al frontend de Zigbee2MQTT. Esto elimina la necesidad de un broker MQTT separado.`,aboutTls:`Configure los ajustes TLS/SSL para conexiones MQTT seguras. Habilite TLS si su broker requiere conexiones cifradas.`,aboutDiscovery:`Configure cómo se descubren y agregan los dispositivos desde el puente Zigbee2MQTT.`,steps:{selectDevice:`Seleccione un dispositivo Zigbee para adoptar de la lista de dispositivos descubiertos.`,selectCategory:`Elija la categoría del dispositivo. La categoría sugerida se basa en los exposes del dispositivo.`,mappingPreview:`Revise cómo los exposes del dispositivo se mapearán a canales y propiedades del Smart Panel.`,customizeMapping:`Personalice qué exposes incluir y ajuste las categorías de canal si es necesario.`,deviceConfiguration:`Configure el nombre del dispositivo, la descripción y otros ajustes.`},noDiscoveredDevices:`No hay dispositivos descubiertos disponibles. Asegúrese de que Zigbee2MQTT esté en ejecución y los dispositivos estén emparejados.`,loadingDevices:`Cargando dispositivos descubiertos...`,loadingPreview:`Cargando vista previa del mapeo...`,mapping:{customizationDescription:`Active o desactive los exposes a incluir y personalice las categorías de canal. Los exposes deshabilitados no serán creados.`}},fields:{config:{enabled:{title:`Habilitado`},connectionType:{title:`Tipo de conexión`,mqtt:`Broker MQTT`,ws:`WebSocket (directo)`},mqtt:{host:{title:`Host del broker MQTT`,placeholder:`p. ej., localhost o 192.168.1.100`,validation:{required:`El host del broker MQTT es obligatorio`}},port:{title:`Keepalive (s)`,validation:{required:`El puerto es obligatorio`,range:`El puerto debe estar entre 1 y 65535`}},username:{title:`Nombre de usuario`,placeholder:`Nombre de usuario MQTT (opcional)`},password:{title:`Contraseña`,placeholder:`Contraseña MQTT (opcional)`},baseTopic:{title:`Tema base`,placeholder:`p. ej., zigbee2mqtt`,validation:{required:`El tema base es obligatorio`}},clientId:{title:`ID de cliente MQTT`,placeholder:`Generado automáticamente si se deja vacío`},cleanSession:{title:`Sesión limpia`},keepalive:{title:`Mantener vivo (s)`,validation:{number:`Debe ser un número >= 10`}},connectTimeout:{title:`Tiempo de espera (ms)`,validation:{number:`Debe ser un número >= 1000`}},reconnectInterval:{title:`Reconexión (ms)`,validation:{number:`Debe ser un número >= 1000`}}},ws:{host:{title:`Host de Zigbee2MQTT`,placeholder:`p. ej. localhost o 192.168.1.100`,validation:{required:`Se requiere el host de Zigbee2MQTT`}},port:{title:`Puerto`,validation:{required:`Se requiere un puerto`,range:`El puerto debe ser entre 1 y 65535`}},baseTopic:{title:`Tema base`,placeholder:`p. ej. zigbee2mqtt`,validation:{required:`Se requiere el tema base`}},secure:{title:`Usar conexión segura (wss://)`},connectTimeout:{title:`Tiempo de espera (ms)`,validation:{number:`Debe ser un número >= 1000`}},reconnectInterval:{title:`Reconexión (ms)`,validation:{number:`Debe ser un número >= 1000`}}},tls:{enabled:{title:`Habilitar TLS`},rejectUnauthorized:{title:`Rechazar certificados no autorizados`},ca:{title:`Certificado CA`,placeholder:`Pegue el contenido o la ruta del certificado CA`},cert:{title:`Certificado del cliente`,placeholder:`Pegue el contenido o la ruta del certificado del cliente`},key:{title:`Clave privada del cliente`,placeholder:`Pegue el contenido o la ruta de la clave privada del cliente`}},discovery:{autoAdd:{title:`Agregar automáticamente dispositivos descubiertos`},syncOnStartup:{title:`Sincronizar dispositivos al iniciar`}}},devices:{id:{title:`ID del dispositivo`,placeholder:`ID del dispositivo`},name:{title:`Nombre`,placeholder:`Nombre del dispositivo`,validation:{required:`Por favor, introduzca el nombre del dispositivo`}},category:{title:`Categoría`,placeholder:`Categoría del dispositivo`,validation:{required:`Por favor, seleccione la categoría del dispositivo`}},description:{title:`Descripción`,placeholder:`Descripción del dispositivo`},enabled:{title:`Habilitado`},ieeeAddress:{title:`Dirección IEEE`,placeholder:`Seleccione un dispositivo`,validation:{required:`Por favor, seleccione un dispositivo`}},friendlyName:{title:`Nombre descriptivo`},manufacturer:{title:`Fabricante`},model:{title:`Modelo`},zigbee2mqttDeviceId:{title:`Dispositivo Zigbee2MQTT conectado`,placeholder:`Seleccione el dispositivo conectado`}},mapping:{mapped:`Mapeado`,partial:`Parcial`,unmapped:`Sin mapear`,skipped:`Omitido`,excluded:`Excluido`,totalExposes:`Total de exposes`,deviceName:`Nombre del dispositivo`,suggestedCategory:`Categoría sugerida`,suggestedChannel:{title:`Canal sugerido`,validation:{required:`Por favor, seleccione una categoría de canal`}},properties:`Propiedades`,missingRequiredProperties:`Propiedades requeridas faltantes`,exposeEnabled:`Habilitado`,channelCategory:`Categoría del canal`,noChannelSuggested:`No se sugirió ningún canal`}},messages:{config:{edited:`La configuración del plugin Zigbee2MQTT ha sido actualizada`,notEdited:`Error al actualizar la configuración del plugin Zigbee2MQTT`},devices:{created:`El dispositivo Zigbee2MQTT '{device}' ha sido creado`,notCreated:`Error al crear el dispositivo Zigbee2MQTT '{device}'`,edited:`El dispositivo Zigbee2MQTT '{device}' ha sido actualizado`,notEdited:`Error al actualizar el dispositivo Zigbee2MQTT '{device}'`,adopted:`El dispositivo '{device}' ha sido adoptado correctamente`,notAdopted:`Error al adoptar el dispositivo '{device}'`,noDiscoveredDevices:`No hay dispositivos descubiertos disponibles. Asegúrese de que Zigbee2MQTT esté en ejecución y los dispositivos estén emparejados.`,deviceOffline:`Este dispositivo está actualmente desconectado`,alreadyAdopted:`Este dispositivo ya ha sido adoptado`,alreadyAdoptedDescription:`Al continuar se volverá a adoptar el dispositivo con la nueva configuración. El dispositivo existente será actualizado.`},discoveredDevices:{loadFailed:`Error al cargar los dispositivos descubiertos`,mappingPreviewFailed:`Error al cargar la vista previa del mapeo`},wizard:{sessionNotStarted:`Error al iniciar el asistente de descubrimiento`,sessionNotLoaded:`Error al actualizar el asistente de descubrimiento`,permitJoinNotEnabled:`Error al activar el modo de emparejamiento`,permitJoinNotDisabled:`Error al desactivar el modo de emparejamiento`,adoptionFailed:`Error al adoptar los dispositivos seleccionados`},mapping:{previewError:`Error al cargar la vista previa del mapeo`,previewLoading:`Cargando vista previa del mapeo...`,missingChannelCategory:`Por favor, seleccione una categoría de canal para: {exposes}`,notReadyToAdopt:`El dispositivo no está listo para ser adoptado. Por favor, revise y corrija las advertencias.`,readyToAdopt:`El dispositivo está listo para ser adoptado`,noPreview:`No hay vista previa de mapeo disponible`,selectDeviceFirst:`Por favor, seleccione un dispositivo primero para ver la vista previa del mapeo`,adoptionSuccess:`El dispositivo '{device}' ha sido adoptado correctamente`},categorySelection:{description:`Elija la categoría del dispositivo. La categoría sugerida se basa en las capacidades del dispositivo.`}},labels:{suggested:`Sugerido`},buttons:{next:`Siguiente`,previous:`Anterior`,adoptDevice:`Adoptar dispositivo`,refresh:`Actualizar`,use:`Usar`},wizard:{title:`Asistente de descubrimiento de Zigbee2MQTT`,subtitle:`Encuentre y adopte dispositivos Zigbee a través del bridge Zigbee2MQTT`,breadcrumb:`asistente de descubrimiento`,bridge:{offline:{title:`Bridge está offline.`,message:`El bridge de Zigbee2MQTT está actualmente sin conexión. Configure la conexión para continuar.`,openConfig:`Abrir configuración`}},steps:{discovery:{permitJoin:`Emparejar nuevo dispositivo`,cancelPairing:`Cancelar emparejamiento`,pairingActive:`Modo de emparejamiento activo — {remaining}s restantes`,pairingDisabled:`Modo de emparejamiento desactivado`}},columns:{friendlyName:`Nombre amigable`,channels:`Canales`,channelsCount:`{count} canal | {count} canales`}}},"pl-PL":{headings:{aboutPluginStatus:`Status wtyczki`,aboutConnection:`Typ połączenia`,aboutMqtt:`Połączenie MQTT`,advancedMqttSettings:`Zaawansowane ustawienia MQTT`,aboutWs:`Połączenie WebSocket`,advancedWsSettings:`Zaawansowane ustawienia WebSocket`,aboutTls:`Konfiguracja TLS/SSL`,aboutDiscovery:`Wykrywanie urządzeń`,steps:{selectDevice:`Wybierz urządzenie`,selectCategory:`Kategoria urządzenia`,mappingPreview:`Podgląd mapowania`,customizeMapping:`Dostosuj mapowanie`,deviceConfiguration:`Konfiguracja urządzenia`},mapping:{summary:`Podsumowanie mapowania`,warnings:`Ostrzeżenia mapowania ({count})`,exposeMappings:`Mapowania expose`,customization:`Dostosowanie mapowania`},device:{deviceSelection:`Wybierz urządzenie`,categorySelection:`Kategoria urządzenia`,mappingPreview:`Podgląd mapowania`,mappingCustomization:`Dostosuj mapowanie`,deviceConfiguration:`Konfiguracja urządzenia`,deviceInfo:`Informacje o urządzeniu`}},texts:{aboutPluginStatus:`Włącz lub wyłącz wtyczkę Zigbee2MQTT. Po wyłączeniu żadne urządzenia Zigbee nie będą monitorowane ani sterowane.`,aboutConnection:`Wybierz sposób połączenia z Zigbee2MQTT. Użyj MQTT do połączenia przez brokera MQTT albo WebSocket do bezpośredniego połączenia z frontendem Zigbee2MQTT.`,aboutMqtt:`Skonfiguruj połączenie z brokerem MQTT, na którym Zigbee2MQTT publikuje dane urządzeń.`,aboutWs:`Skonfiguruj bezpośrednie połączenie WebSocket do frontendu Zigbee2MQTT. To usuwa potrzebę osobnego brokera MQTT.`,aboutTls:`Skonfiguruj ustawienia TLS/SSL dla bezpiecznych połączeń MQTT. Włącz TLS, jeśli Twój broker wymaga szyfrowanych połączeń.`,aboutDiscovery:`Skonfiguruj sposób wykrywania i dodawania urządzeń z mostu Zigbee2MQTT.`,steps:{selectDevice:`Wybierz urządzenie Zigbee do adoptowania z listy wykrytych urządzeń.`,selectCategory:`Wybierz kategorię urządzenia. Sugerowana kategoria jest oparta na expose urządzenia.`,mappingPreview:`Sprawdź, jak expose urządzenia zostaną mapowane na kanały i właściwości Smart Panel.`,customizeMapping:`Dostosuj, które expose uwzględnić i dostosuj kategorie kanałów w razie potrzeby.`,deviceConfiguration:`Skonfiguruj nazwę urządzenia, opis i inne ustawienia.`},noDiscoveredDevices:`Brak dostępnych wykrytych urządzeń. Upewnij się, że Zigbee2MQTT jest uruchomiony i urządzenia są sparowane.`,loadingDevices:`Ładowanie wykrytych urządzeń...`,loadingPreview:`Ładowanie podglądu mapowania...`,mapping:{customizationDescription:`Przełączaj, które expose uwzględnić i dostosuj kategorie kanałów. Wyłączone expose nie zostaną utworzone.`}},fields:{config:{enabled:{title:`Włączony`},connectionType:{title:`Typ połączenia`,mqtt:`Broker MQTT`,ws:`WebSocket (bezpośredni)`},mqtt:{host:{title:`Host brokera MQTT`,placeholder:`np. localhost lub 192.168.1.100`,validation:{required:`Host brokera MQTT jest wymagany`}},port:{title:`Keepalive (s)`,validation:{required:`Port jest wymagany`,range:`Port musi być między 1 a 65535`}},username:{title:`Nazwa użytkownika`,placeholder:`Nazwa użytkownika MQTT (opcjonalnie)`},password:{title:`Hasło`,placeholder:`Hasło MQTT (opcjonalnie)`},baseTopic:{title:`Bazowy temat`,placeholder:`np. zigbee2mqtt`,validation:{required:`Bazowy temat jest wymagany`}},clientId:{title:`ID klienta MQTT`,placeholder:`Generowany automatycznie, jeśli puste`},cleanSession:{title:`Czysta sesja`},keepalive:{title:`Utrzymywanie aktywności (s)`,validation:{number:`Musi być liczbą >= 10`}},connectTimeout:{title:`Limit czasu (ms)`,validation:{number:`Musi być liczbą >= 1000`}},reconnectInterval:{title:`Ponowne połączenie (ms)`,validation:{number:`Musi być liczbą >= 1000`}}},ws:{host:{title:`Host Zigbee2MQTT`,placeholder:`np. localhost lub 192.168.1.100`,validation:{required:`Wymagany jest host Zigbee2MQTT`}},port:{title:`Port`,validation:{required:`Wymagany jest port`,range:`Port musi być od 1 do 65535`}},baseTopic:{title:`Temat główny`,placeholder:`np. zigbee2mqtt`,validation:{required:`Wymagany jest temat główny`}},secure:{title:`Użyj bezpiecznego połączenia (wss://)`},connectTimeout:{title:`Przekroczenie czasu (ms)`,validation:{number:`Musi być liczbą >= 1000`}},reconnectInterval:{title:`Ponowne łączenie (ms)`,validation:{number:`Musi być liczbą >= 1000`}}},tls:{enabled:{title:`Włącz TLS`},rejectUnauthorized:{title:`Odrzucaj nieautoryzowane certyfikaty`},ca:{title:`Certyfikat CA`,placeholder:`Wklej zawartość certyfikatu CA lub ścieżkę`},cert:{title:`Certyfikat klienta`,placeholder:`Wklej zawartość certyfikatu klienta lub ścieżkę`},key:{title:`Klucz prywatny klienta`,placeholder:`Wklej zawartość klucza prywatnego klienta lub ścieżkę`}},discovery:{autoAdd:{title:`Automatyczne dodawanie wykrytych urządzeń`},syncOnStartup:{title:`Synchronizuj urządzenia przy starcie`}}},devices:{id:{title:`ID urządzenia`,placeholder:`ID urządzenia`},name:{title:`Nazwa`,placeholder:`Nazwa urządzenia`,validation:{required:`Wprowadź nazwę urządzenia`}},category:{title:`Kategoria`,placeholder:`Kategoria urządzenia`,validation:{required:`Wybierz kategorię urządzenia`}},description:{title:`Opis`,placeholder:`Opis urządzenia`},enabled:{title:`Włączone`},ieeeAddress:{title:`Adres IEEE`,placeholder:`Wybierz urządzenie`,validation:{required:`Wybierz urządzenie`}},friendlyName:{title:`Przyjazna nazwa`},manufacturer:{title:`Producent`},model:{title:`Model`},zigbee2mqttDeviceId:{title:`Podłączone urządzenie Zigbee2MQTT`,placeholder:`Wybierz podłączone urządzenie`}},mapping:{mapped:`Zmapowane`,partial:`Częściowe`,unmapped:`Niezmapowane`,skipped:`Pominięte`,excluded:`Wykluczone`,totalExposes:`Łączna liczba expose`,deviceName:`Nazwa urządzenia`,suggestedCategory:`Sugerowana kategoria`,suggestedChannel:{title:`Sugerowany kanał`,validation:{required:`Wybierz kategorię kanału`}},properties:`Właściwości`,missingRequiredProperties:`Brakujące wymagane właściwości`,exposeEnabled:`Włączone`,channelCategory:`Kategoria kanału`,noChannelSuggested:`Brak sugerowanego kanału`}},messages:{config:{edited:`Konfiguracja wtyczki Zigbee2MQTT została zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji wtyczki Zigbee2MQTT`},devices:{created:`Urządzenie Zigbee2MQTT '{device}' zostało utworzone`,notCreated:`Nie udało się utworzyć urządzenia Zigbee2MQTT '{device}'`,edited:`Urządzenie Zigbee2MQTT '{device}' zostało zaktualizowane`,notEdited:`Nie udało się zaktualizować urządzenia Zigbee2MQTT '{device}'`,adopted:`Urządzenie '{device}' zostało pomyślnie adoptowane`,notAdopted:`Nie udało się adoptować urządzenia '{device}'`,noDiscoveredDevices:`Brak dostępnych wykrytych urządzeń. Upewnij się, że Zigbee2MQTT jest uruchomiony i urządzenia są sparowane.`,deviceOffline:`To urządzenie jest obecnie offline`,alreadyAdopted:`To urządzenie jest już adoptowane`,alreadyAdoptedDescription:`Kontynuowanie spowoduje ponowne adoptowanie urządzenia z nową konfiguracją. Istniejące urządzenie zostanie zaktualizowane.`},discoveredDevices:{loadFailed:`Nie udało się załadować wykrytych urządzeń`,mappingPreviewFailed:`Nie udało się załadować podglądu mapowania`},wizard:{sessionNotStarted:`Nie udało się uruchomić kreatora wykrywania`,sessionNotLoaded:`Nie udało się odświeżyć kreatora wykrywania`,permitJoinNotEnabled:`Nie udało się włączyć trybu parowania`,permitJoinNotDisabled:`Nie udało się wyłączyć trybu parowania`,adoptionFailed:`Nie udało się adoptować wybranych urządzeń`},mapping:{previewError:`Nie udało się załadować podglądu mapowania`,previewLoading:`Ładowanie podglądu mapowania...`,missingChannelCategory:`Wybierz kategorię kanału dla: {exposes}`,notReadyToAdopt:`Urządzenie nie jest gotowe do adoptowania. Sprawdź i napraw ewentualne ostrzeżenia.`,readyToAdopt:`Urządzenie jest gotowe do adoptowania`,noPreview:`Brak dostępnego podglądu mapowania`,selectDeviceFirst:`Najpierw wybierz urządzenie, aby zobaczyć podgląd mapowania`,adoptionSuccess:`Urządzenie '{device}' zostało pomyślnie adoptowane`},categorySelection:{description:`Wybierz kategorię urządzenia. Sugerowana kategoria jest oparta na możliwościach urządzenia.`}},labels:{suggested:`Sugerowane`},buttons:{next:`Dalej`,previous:`Wstecz`,adoptDevice:`Adoptuj urządzenie`,refresh:`Odśwież`,use:`Użyj`},wizard:{title:`Kreator wykrywania Zigbee2MQTT`,subtitle:`Znajdź i adoptuj urządzenia Zigbee przez bridge Zigbee2MQTT`,breadcrumb:`kreator wykrywania`,bridge:{offline:{title:`Mostek jest niedostępny.`,message:`Bridge Zigbee2MQTT jest obecnie offline. Skonfiguruj połączenie, aby kontynuować.`,openConfig:`Otwórz konfigurację`}},steps:{discovery:{permitJoin:`Sparuj nowe urządzenie`,cancelPairing:`Anuluj parowanie`,pairingActive:`Tryb parowania aktywny — pozostało {remaining}s`,pairingDisabled:`Tryb parowania wyłączony`}},columns:{friendlyName:`Przyjazna nazwa`,channels:`Kanały`,channelsCount:`{count} kanał | {count} kanały | {count} kanałów`}}},"sk-SK":{headings:{aboutPluginStatus:`Stav pluginu`,aboutConnection:`Typ pripojenia`,aboutMqtt:`MQTT pripojenie`,advancedMqttSettings:`Pokročilé nastavenia MQTT`,aboutWs:`WebSocket pripojenie`,advancedWsSettings:`Pokročilé nastavenia WebSocket`,aboutTls:`Konfigurácia TLS/SSL`,aboutDiscovery:`Objavovanie zariadení`,steps:{selectDevice:`Výber zariadenia`,selectCategory:`Kategória zariadenia`,mappingPreview:`Náhľad mapovania`,customizeMapping:`Prispôsobenie mapovania`,deviceConfiguration:`Konfigurácia zariadenia`},mapping:{summary:`Súhrn mapovania`,warnings:`Varovania mapovania ({count})`,exposeMappings:`Mapovania expozícií`,customization:`Prispôsobenie mapovania`},device:{deviceSelection:`Výber zariadenia`,categorySelection:`Kategória zariadenia`,mappingPreview:`Náhľad mapovania`,mappingCustomization:`Prispôsobenie mapovania`,deviceConfiguration:`Konfigurácia zariadenia`,deviceInfo:`Informácie o zariadení`}},texts:{aboutPluginStatus:`Povoľte alebo zakážte plugin Zigbee2MQTT. Keď je zakázaný, žiadne Zigbee zariadenia nebudú monitorované ani ovládané.`,aboutConnection:`Vyberte, ako sa pripojiť ku Zigbee2MQTT. Použite MQTT na pripojenie cez MQTT sprostredkovateľa, alebo WebSocket na priame pripojenie k rozhraniu Zigbee2MQTT.`,aboutMqtt:`Nakonfigurujte pripojenie k vášmu MQTT brokeru, kde Zigbee2MQTT publikuje dáta zariadení.`,aboutWs:`Nakonfigurujte priame WebSocket pripojenie k frontend-u Zigbee2MQTT. Tým sa odstráni potreba samostatného MQTT sprostredkovateľa.`,aboutTls:`Nakonfigurujte nastavenia TLS/SSL pre bezpečné MQTT pripojenia. Povoľte TLS ak váš broker vyžaduje šifrované pripojenia.`,aboutDiscovery:`Nakonfigurujte, ako sú zariadenia objavované a pridávané z mosta Zigbee2MQTT.`,steps:{selectDevice:`Vyberte Zigbee zariadenie na prijatie zo zoznamu objavených zariadení.`,selectCategory:`Zvoľte kategóriu zariadenia. Navrhovaná kategória je založená na expozíciách zariadenia.`,mappingPreview:`Skontrolujte, ako budú expozície zariadenia namapované na kanály a vlastnosti Smart Panelu.`,customizeMapping:`Prispôsobte, ktoré expozície zahrnúť a upravte kategórie kanálov podľa potreby.`,deviceConfiguration:`Nakonfigurujte názov zariadenia, popis a ďalšie nastavenia.`},noDiscoveredDevices:`Žiadne objavené zariadenia nie sú dostupné. Uistite sa, že Zigbee2MQTT beží a zariadenia sú spárované.`,loadingDevices:`Načítavanie objavených zariadení...`,loadingPreview:`Načítavanie náhľadu mapovania...`,mapping:{customizationDescription:`Prepnite, ktoré expozície zahrnúť a prispôsobte kategórie kanálov. Zakázané expozície nebudú vytvorené.`}},fields:{config:{enabled:{title:`Povolené`},connectionType:{title:`Typ pripojenia`,mqtt:`Sprostredkovateľ MQTT`,ws:`WebSocket (priame)`},mqtt:{host:{title:`Hostiteľ MQTT brokera`,placeholder:`napr. localhost alebo 192.168.1.100`,validation:{required:`Hostiteľ MQTT brokera je povinný`}},port:{title:`Keepalive (s)`,validation:{required:`Port je povinný`,range:`Port musí byť medzi 1 a 65535`}},username:{title:`Používateľské meno`,placeholder:`MQTT používateľské meno (voliteľné)`},password:{title:`Heslo`,placeholder:`MQTT heslo (voliteľné)`},baseTopic:{title:`Základná téma`,placeholder:`napr. zigbee2mqtt`,validation:{required:`Základná téma je povinná`}},clientId:{title:`MQTT Client ID`,placeholder:`Automaticky generované ak prázdne`},cleanSession:{title:`Čistá relácia`},keepalive:{title:`Keepalive (s)`,validation:{number:`Musí byť číslo >= 10`}},connectTimeout:{title:`Časový limit (ms)`,validation:{number:`Musí byť číslo >= 1000`}},reconnectInterval:{title:`Opätovné pripojenie (ms)`,validation:{number:`Musí byť číslo >= 1000`}}},ws:{host:{title:`Hostiteľ Zigbee2MQTT`,placeholder:`napr. localhost alebo 192.168.1.100`,validation:{required:`Je vyžadovaný hostiteľ Zigbee2MQTT`}},port:{title:`Port`,validation:{required:`Je vyžadovaný port`,range:`Port musí byť od 1 do 65535`}},baseTopic:{title:`Základná téma`,placeholder:`napr. zigbee2mqtt`,validation:{required:`Vyžaduje sa základná téma`}},secure:{title:`Použiť zabezpečené pripojenie (wss://)`},connectTimeout:{title:`Časový limit (ms)`,validation:{number:`Musí byť číslo >= 1000`}},reconnectInterval:{title:`Opätovné pripojenie (ms)`,validation:{number:`Musí byť číslo >= 1000`}}},tls:{enabled:{title:`Povoliť TLS`},rejectUnauthorized:{title:`Odmietnuť neautorizované certifikáty`},ca:{title:`CA certifikát`,placeholder:`Vložte obsah alebo cestu CA certifikátu`},cert:{title:`Klientský certifikát`,placeholder:`Vložte obsah alebo cestu klientského certifikátu`},key:{title:`Súkromný kľúč klienta`,placeholder:`Vložte obsah alebo cestu súkromného kľúča klienta`}},discovery:{autoAdd:{title:`Automaticky pridávať objavené zariadenia`},syncOnStartup:{title:`Synchronizovať zariadenia pri štarte`}}},devices:{id:{title:`ID zariadenia`,placeholder:`ID zariadenia`},name:{title:`Názov`,placeholder:`Názov zariadenia`,validation:{required:`Prosím vyplňte názov zariadenia`}},category:{title:`Kategória`,placeholder:`Kategória zariadenia`,validation:{required:`Prosím vyberte kategóriu zariadenia`}},description:{title:`Popis`,placeholder:`Popis zariadenia`},enabled:{title:`Povolené`},ieeeAddress:{title:`IEEE adresa`,placeholder:`Vyberte zariadenie`,validation:{required:`Prosím vyberte zariadenie`}},friendlyName:{title:`Priateľský názov`},manufacturer:{title:`Výrobca`},model:{title:`Model`},zigbee2mqttDeviceId:{title:`Pripojené Zigbee2MQTT zariadenie`,placeholder:`Vyberte pripojené zariadenie`}},mapping:{mapped:`Namapované`,partial:`Čiastočné`,unmapped:`Nenamapované`,skipped:`Preskočené`,excluded:`Vylúčené`,totalExposes:`Celkový počet expozícií`,deviceName:`Názov zariadenia`,suggestedCategory:`Navrhovaná kategória`,suggestedChannel:{title:`Navrhovaný kanál`,validation:{required:`Prosím vyberte kategóriu kanála`}},properties:`Vlastnosti`,missingRequiredProperties:`Chýbajúce povinné vlastnosti`,exposeEnabled:`Povolené`,channelCategory:`Kategória kanála`,noChannelSuggested:`Žiadny kanál navrhovaný`}},messages:{config:{edited:`Konfigurácia pluginu Zigbee2MQTT bola aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu pluginu Zigbee2MQTT`},devices:{created:`Zariadenie Zigbee2MQTT '{device}' bolo vytvorené`,notCreated:`Nepodarilo sa vytvoriť zariadenie Zigbee2MQTT '{device}'`,edited:`Zariadenie Zigbee2MQTT '{device}' bolo aktualizované`,notEdited:`Nepodarilo sa aktualizovať zariadenie Zigbee2MQTT '{device}'`,adopted:`Zariadenie '{device}' bolo úspešne prijaté`,notAdopted:`Nepodarilo sa prijať zariadenie '{device}'`,noDiscoveredDevices:`Žiadne objavené zariadenia nie sú dostupné. Uistite sa, že Zigbee2MQTT beží a zariadenia sú spárované.`,deviceOffline:`Toto zariadenie je momentálne offline`,alreadyAdopted:`Toto zariadenie je už prijaté`,alreadyAdoptedDescription:`Pokračovaním sa zariadenie znovu prijme s novou konfiguráciou. Existujúce zariadenie bude aktualizované.`},discoveredDevices:{loadFailed:`Nepodarilo sa načítať objavené zariadenia`,mappingPreviewFailed:`Nepodarilo sa načítať náhľad mapovania`},wizard:{sessionNotStarted:`Nepodarilo sa spustiť sprievodcu pridávaním`,sessionNotLoaded:`Nepodarilo sa obnoviť sprievodcu pridávaním`,permitJoinNotEnabled:`Nepodarilo sa zapnúť režim párovania`,permitJoinNotDisabled:`Nepodarilo sa vypnúť režim párovania`,adoptionFailed:`Nepodarilo sa pridať vybrané zariadenia`},mapping:{previewError:`Nepodarilo sa načítať náhľad mapovania`,previewLoading:`Načítavanie náhľadu mapovania...`,missingChannelCategory:`Prosím vyberte kategóriu kanála pre: {exposes}`,notReadyToAdopt:`Zariadenie nie je pripravené na prijatie. Skontrolujte a opravte varovania.`,readyToAdopt:`Zariadenie je pripravené na prijatie`,noPreview:`Náhľad mapovania nie je dostupný`,selectDeviceFirst:`Prosím najprv vyberte zariadenie na zobrazenie náhľadu mapovania`,adoptionSuccess:`Zariadenie '{device}' bolo úspešne prijaté`},categorySelection:{description:`Zvoľte kategóriu zariadenia. Navrhovaná kategória je založená na schopnostiach zariadenia.`}},labels:{suggested:`Navrhované`},buttons:{next:`Ďalej`,previous:`Predchádzajúci`,adoptDevice:`Prijať zariadenie`,refresh:`Obnoviť`,use:`Použiť`},wizard:{title:`Sprievodca pridávaním Zigbee2MQTT`,subtitle:`Nájdite a pridajte Zigbee zariadenia cez Zigbee2MQTT bridge`,breadcrumb:`sprievodca pridávaním`,bridge:{offline:{title:`Bridge je offline.`,message:`Zigbee2MQTT bridge je momentálne offline. Pre pokračovanie nakonfigurujte pripojenie.`,openConfig:`Otvoriť konfiguráciu`}},steps:{discovery:{permitJoin:`Spárovať nové zariadenie`,cancelPairing:`Zrušiť párovanie`,pairingActive:`Režim párovania aktívny — zostáva {remaining}s`,pairingDisabled:`Režim párovania deaktivovaný`}},columns:{friendlyName:`Priateľské meno`,channels:`Kanály`,channelsCount:`{count} kanál | {count} kanály | {count} kanálov`}}}},oN=Ki.extend({connectionType:ir([`mqtt`,`ws`]),mqtt:K({host:X().trim().min(1),port:Dt().int().min(1).max(65535),username:X().nullable(),password:X().nullable().optional(),passwordConfigured:J().optional(),baseTopic:X().trim().min(1),clientId:X().nullable(),cleanSession:J(),keepalive:Dt().int().min(10),connectTimeout:Dt().int().min(1e3),reconnectInterval:Dt().int().min(1e3)}),ws:K({host:X().trim().min(1),port:Dt().int().min(1).max(65535),baseTopic:X().trim().min(1),secure:J(),connectTimeout:Dt().int().min(1e3),reconnectInterval:Dt().int().min(1e3)}),tls:K({enabled:J(),rejectUnauthorized:J(),ca:X().nullable(),cert:X().nullable(),key:X().nullable().optional(),keyConfigured:J().optional()}),discovery:K({autoAdd:J(),syncOnStartup:J()})}),sN=os,cN=Zo.and(K({type:Y(GA)})),lN=rs.and(K({type:Y(GA)}));Qo.and(K({type:Y(GA)}));var uN=ns,dN=cs.and(K({type:Y(GA)})),fN=us.and(K({type:Y(GA)}));Xo.and(K({type:Y(GA)}));var pN=Wi.extend({connectionType:ir([`mqtt`,`ws`]),mqtt:K({host:X(),port:q(),username:X().nullable(),password:X().nullable().optional(),passwordConfigured:J().default(!1),baseTopic:X(),clientId:X().nullable(),cleanSession:J(),keepalive:q(),connectTimeout:q(),reconnectInterval:q()}),ws:K({host:X(),port:q(),baseTopic:X(),secure:J(),connectTimeout:q(),reconnectInterval:q()}),tls:K({enabled:J(),rejectUnauthorized:J(),ca:X().nullable(),cert:X().nullable(),key:X().nullable().optional(),keyConfigured:J().default(!1)}),discovery:K({autoAdd:J(),syncOnStartup:J()})}),mN=Zi.and(K({type:Y(WA),connection_type:G(En).optional(),mqtt:K({host:X().optional(),port:q().optional(),username:X().nullable().optional(),password:X().nullable().optional(),base_topic:X().optional(),client_id:X().nullable().optional(),clean_session:J().optional(),keepalive:q().optional(),connect_timeout:q().optional(),reconnect_interval:q().optional()}).optional(),ws:K({host:X().optional(),port:q().optional(),base_topic:X().optional(),secure:J().optional(),connect_timeout:q().optional(),reconnect_interval:q().optional()}).optional(),tls:K({enabled:J().optional(),reject_unauthorized:J().optional(),ca:X().nullable().optional(),cert:X().nullable().optional(),key:X().nullable().optional()}).optional(),discovery:K({auto_add:J().optional(),sync_on_startup:J().optional()}).optional()}));Ri.and(K({type:Y(WA),connection_type:G(En),mqtt:K({host:X(),port:q(),username:X().nullable(),password:X().nullable().optional(),password_configured:J(),base_topic:X(),client_id:X().nullable(),clean_session:J(),keepalive:q(),connect_timeout:q(),reconnect_interval:q()}),ws:K({host:X(),port:q(),base_topic:X(),secure:J(),connect_timeout:q(),reconnect_interval:q()}),tls:K({enabled:J(),reject_unauthorized:J(),ca:X().nullable(),cert:X().nullable(),key:X().nullable().optional(),key_configured:J()}),discovery:K({auto_add:J(),sync_on_startup:J()})}));var hN=K({type:X(),property:X().optional(),name:X().optional(),access:q().optional(),unit:X().optional(),valueMin:q().optional(),valueMax:q().optional(),valueStep:q().optional(),values:W(X()).optional(),features:Gn(()=>W(hN).optional())}),gN=K({id:X(),friendlyName:X(),type:ir([`Router`,`EndDevice`]),modelId:X().nullable(),manufacturer:X().nullable(),model:X().nullable(),description:X().nullable(),powerSource:X().nullable(),supported:J(),available:J(),adopted:J(),adoptedDeviceId:X().nullable(),exposes:W(hN),suggestedCategory:X().nullable()}),_N=e=>e.map(e=>({type:e.type,property:e.property,name:e.name,access:e.access,unit:e.unit,valueMin:e.value_min,valueMax:e.value_max,valueStep:e.value_step,values:e.values,features:e.features?_N(e.features):void 0})),vN=e=>({id:e.ieee_address,friendlyName:e.friendly_name,type:e.type,modelId:e.model_id??null,manufacturer:e.manufacturer??null,model:e.model??null,description:e.description??null,powerSource:e.power_source??null,supported:e.supported,available:e.available,adopted:e.adopted,adoptedDeviceId:e.adopted_device_id??null,exposes:e.exposes?_N(e.exposes):[],suggestedCategory:e.suggested_category??null}),yN={fetching:{items:!1,item:[]}},bN=jn(`devices_zigbee2mqtt_plugin-discovered_devices`,()=>{let e=Zn(),t=On(),n=j(yN),r=j(!1),i=j({}),a=()=>r.value,o=e=>n.value.fetching.item.includes(e),s=()=>n.value.fetching.items,c=()=>Object.values(i.value),l=e=>i.value[e]??null,u={},d={};return{semaphore:n,firstLoad:r,data:i,firstLoadFinished:a,getting:o,fetching:s,findAll:c,findById:l,set:e=>{if(e.id&&i.value&&e.id in i.value){let n=gN.safeParse({...i.value[e.id],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new qA(`Failed to update Zigbee2MQTT discovered device.`);return i.value[n.data.id]=n.data}let n=gN.safeParse({...e.data,id:e.id});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new qA(`Failed to insert Zigbee2MQTT discovered device.`);return i.value=i.value??{},i.value[n.data.id]=n.data},unset:e=>{i.value&&delete i.value[e.id]},get:async t=>{let r=u[t.id];if(r)return r;let a=(async()=>{if(n.value.fetching.item.includes(t.id))throw new JA(`Already fetching Zigbee2MQTT discovered device.`,409);n.value.fetching.item.push(t.id);try{let{data:n,error:r,response:a}=await e.client.GET(`/${Ie}/${UA}/discovered-devices/{ieeeAddress}`,{params:{path:{ieeeAddress:t.id}}});if(n!==void 0){let e=vN(n.data);return i.value[e.id]=e,e}throw new JA(r?String(r):`Failed to fetch Zigbee2MQTT discovered device.`,a.status)}finally{n.value.fetching.item=n.value.fetching.item.filter(e=>e!==t.id)}})();u[t.id]=a;try{return await a}finally{delete u[t.id]}},fetch:async()=>{if(`all`in d)return d.all;let t=(async()=>{if(n.value.fetching.items)throw new JA(`Already fetching Zigbee2MQTT discovered devices.`,409);n.value.fetching.items=!0;try{let{data:t,error:n,response:a}=await e.client.GET(`/${Ie}/${UA}/discovered-devices`);if(t!==void 0)return i.value=Object.fromEntries(t.data.map(e=>{let t=vN(e);return[t.id,t]})),r.value=!0,Object.values(i.value);throw new JA(n?String(n):`Failed to fetch Zigbee2MQTT discovered devices.`,a.status)}finally{n.value.fetching.items=!1}})();d.all=t;try{return await t}finally{delete d.all}}}}),xN=e=>bN(e),SN=Symbol(`FB-Plugin-DevicesZigbee2mqtt`),CN={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(aN)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{devicesZigbee2mqttPlugin:n});t.i18n.global.setLocaleMessage(e,r)}let r=pn(e),i=xN(t.store);e.provide(dj,i),r.addStore(dj,i),n.addPlugin(SN,{type:WA,source:`com.fastybird.smart-panel.plugin.devices-zigbee2mqtt`,name:`Zigbee2MQTT`,description:`Connect and control your Zigbee devices via Zigbee2MQTT from the FastyBird Smart Panel`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:HA},schemas:{pluginConfigSchema:pN,pluginConfigEditFormSchema:oN,pluginConfigUpdateReqSchema:mN},modules:[ka]},{type:GA,components:{deviceAddForm:KM,deviceEditForm:YM,deviceWizardAdapter:iN},schemas:{deviceSchema:QA,deviceAddFormSchema:YA,deviceEditFormSchema:XA,deviceCreateReqSchema:$A,deviceUpdateReqSchema:ej,channelSchema:uN,channelCreateReqSchema:dN,channelUpdateReqSchema:fN,channelPropertySchema:sN,channelPropertyCreateReqSchema:cN,channelPropertyUpdateReqSchema:lN},modules:[qo]}],modules:[qo,ka],isCore:!0})}},wN=k({name:`InfluxV1ConfigForm`,__name:`influx-v1-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:l}=Xi({config:n.config,messages:{success:i(`influxV1Plugin.messages.config.edited`),error:i(`influxV1Plugin.messages.config.notEdited`)}}),u=P({host:[{required:!0,message:i(`influxV1Plugin.fields.config.host.validation.required`),trigger:`change`}],database:[{required:!0,message:i(`influxV1Plugin.fields.config.database.validation.required`),trigger:`change`}]});return F(()=>l.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:u,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`influxV1Plugin.headings.connection`),description:L(i)(`influxV1Plugin.texts.about`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`influxV1Plugin.fields.config.host.title`),prop:`host`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(o).host,"onUpdate:modelValue":t[0]||=e=>L(o).host=e,placeholder:L(i)(`influxV1Plugin.fields.config.host.placeholder`),name:`host`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`influxV1Plugin.fields.config.database.title`),prop:`database`},{default:B(()=>[D(L(U),{modelValue:L(o).database,"onUpdate:modelValue":t[1]||=e=>L(o).database=e,placeholder:L(i)(`influxV1Plugin.fields.config.database.placeholder`),name:`database`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt),{"content-position":`left`,class:`mt-6!`},{default:B(()=>[E(z(L(i)(`influxV1Plugin.headings.authentication`)),1)]),_:1}),D(L(Z),{label:L(i)(`influxV1Plugin.fields.config.username.title`),prop:`username`},{default:B(()=>[D(L(U),{modelValue:L(o).username,"onUpdate:modelValue":t[2]||=e=>L(o).username=e,placeholder:L(i)(`influxV1Plugin.fields.config.username.placeholder`),name:`username`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`influxV1Plugin.fields.config.password.title`),prop:`password`},{default:B(()=>[D(L(Zp),{modelValue:L(o).password,"onUpdate:modelValue":t[3]||=e=>L(o).password=e,configured:L(o).passwordConfigured,placeholder:L(i)(`influxV1Plugin.fields.config.password.placeholder`),name:`password`},null,8,[`modelValue`,`configured`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),TN=`influx-v1-plugin`,EN={"cs-CZ":{headings:{connection:`Připojení InfluxDB`,authentication:`Autentizace (volitelné)`},messages:{config:{edited:`Konfigurace InfluxDB byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci InfluxDB`}},texts:{about:`Nakonfigurujte připojení InfluxDB v1 pro ukládání časových řad.`},fields:{config:{host:{title:`Hostitel`,placeholder:`127.0.0.1`,validation:{required:`Hostitel je povinný`}},database:{title:`Databáze`,placeholder:`fastybird`,validation:{required:`Název databáze je povinný`}},username:{title:`Uživatelské jméno`,placeholder:`Ponechte prázdné, pokud není vyžadováno`},password:{title:`Heslo`,placeholder:`Ponechte prázdné, pokud není vyžadováno`}}}},"de-DE":{headings:{connection:`InfluxDB-Verbindung`,authentication:`Authentifizierung (Optional)`},messages:{config:{edited:`InfluxDB-Konfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der InfluxDB-Konfiguration fehlgeschlagen`}},texts:{about:`Konfigurieren Sie die InfluxDB v1-Verbindung für die Zeitreihendatenspeicherung.`},fields:{config:{host:{title:`Gastgeber`,placeholder:`127.0.0.1`,validation:{required:`Host ist erforderlich`}},database:{title:`Datenbank`,placeholder:`Fastybird`,validation:{required:`Datenbankname ist erforderlich`}},username:{title:`Benutzername`,placeholder:`Leer lassen, wenn nicht erforderlich`},password:{title:`Passwort`,placeholder:`Leer lassen, wenn nicht erforderlich`}}}},"en-US":{headings:{connection:`InfluxDB Connection`,authentication:`Authentication (Optional)`},messages:{config:{edited:`InfluxDB configuration has been successfully updated`,notEdited:`Failed to update InfluxDB configuration`}},texts:{about:`Configure the InfluxDB v1 connection for time-series data storage.`},fields:{config:{host:{title:`Host`,placeholder:`127.0.0.1`,validation:{required:`Host is required`}},database:{title:`Database`,placeholder:`fastybird`,validation:{required:`Database name is required`}},username:{title:`Username`,placeholder:`Leave empty if not required`},password:{title:`Password`,placeholder:`Leave empty if not required`}}}},"es-ES":{headings:{connection:`Conexión de InfluxDB`,authentication:`Autenticación (Opcional)`},messages:{config:{edited:`La configuración de InfluxDB ha sido actualizada correctamente`,notEdited:`Error al actualizar la configuración de InfluxDB`}},texts:{about:`Configure la conexión de InfluxDB v1 para el almacenamiento de datos de series temporales.`},fields:{config:{host:{title:`Anfitrión`,placeholder:`127.0.0.1`,validation:{required:`El host es obligatorio`}},database:{title:`Base de datos`,placeholder:`fastybird`,validation:{required:`El nombre de la base de datos es obligatorio`}},username:{title:`Nombre de usuario`,placeholder:`Déjelo vacío si no es necesario`},password:{title:`Contraseña`,placeholder:`Déjelo vacío si no es necesario`}}}},"pl-PL":{headings:{connection:`Połączenie InfluxDB`,authentication:`Uwierzytelnianie (opcjonalnie)`},messages:{config:{edited:`Konfiguracja InfluxDB została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji InfluxDB`}},texts:{about:`Skonfiguruj połączenie InfluxDB v1 do przechowywania danych szeregów czasowych.`},fields:{config:{host:{title:`Gospodarz`,placeholder:`127.0.0.1`,validation:{required:`Host jest wymagany`}},database:{title:`Baza danych`,placeholder:`szybki ptak`,validation:{required:`Nazwa bazy danych jest wymagana`}},username:{title:`Nazwa użytkownika`,placeholder:`Pozostaw puste, jeśli nie jest wymagane`},password:{title:`Hasło`,placeholder:`Pozostaw puste, jeśli nie jest wymagane`}}}},"sk-SK":{headings:{connection:`Pripojenie InfluxDB`,authentication:`Autentifikácia (voliteľná)`},messages:{config:{edited:`Konfigurácia InfluxDB bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu InfluxDB`}},texts:{about:`Nakonfigurujte pripojenie InfluxDB v1 na ukladanie časových radov.`},fields:{config:{host:{title:`Hostiteľ`,placeholder:`127.0.0.1`,validation:{required:`Hostiteľ je povinný`}},database:{title:`Databáza`,placeholder:`fastybird`,validation:{required:`Názov databázy je povinný`}},username:{title:`Používateľské meno`,placeholder:`Ponechajte prázdne ak nie je potrebné`},password:{title:`Heslo`,placeholder:`Ponechajte prázdne ak nie je potrebné`}}}}},DN=Ki.extend({host:X().min(1),database:X().min(1),username:X().nullable().optional(),password:X().nullable().optional(),passwordConfigured:J().optional()}),ON=Wi.extend({host:X().nullable(),database:X().nullable(),username:X().nullable().optional(),password:X().nullable().optional(),passwordConfigured:J().default(!1)}),kN=Zi.and(K({type:Y(TN),host:X().nullable().optional(),database:X().nullable().optional(),username:X().nullable().optional(),password:X().nullable().optional()}));Ri.and(K({type:Y(TN),host:X().nullable(),database:X().nullable(),username:X().nullable().optional(),password:X().nullable().optional(),password_configured:J()}));var AN=Symbol(`FB-Plugin-InfluxV1`),jN={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(EN)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{influxV1Plugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(AN,{type:TN,source:`com.fastybird.smart-panel.plugin.influx-v1`,name:`InfluxDB v1`,description:`InfluxDB 1.x time-series storage backend with retention policies and continuous queries`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://github.com/FastyBird/smart-panel/issues`},elements:[{type:Ea,components:{pluginConfigEditForm:wN},schemas:{pluginConfigSchema:ON,pluginConfigEditFormSchema:DN,pluginConfigUpdateReqSchema:kN},modules:[ka]}],modules:[ka,j_],isCore:!1})}},MN=k({name:`InfluxV2ConfigForm`,__name:`influx-v2-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:l}=Xi({config:n.config,messages:{success:i(`influxV2Plugin.messages.config.edited`),error:i(`influxV2Plugin.messages.config.notEdited`)}}),u=P({url:[{required:!0,message:i(`influxV2Plugin.fields.config.url.validation.required`),trigger:`change`}],org:[{required:!0,message:i(`influxV2Plugin.fields.config.org.validation.required`),trigger:`change`}],bucket:[{required:!0,message:i(`influxV2Plugin.fields.config.bucket.validation.required`),trigger:`change`}]});return F(()=>l.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:u,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`influxV2Plugin.headings.connection`),description:L(i)(`influxV2Plugin.texts.about`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`influxV2Plugin.fields.config.url.title`),prop:`url`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(o).url,"onUpdate:modelValue":t[0]||=e=>L(o).url=e,placeholder:L(i)(`influxV2Plugin.fields.config.url.placeholder`),name:`url`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`influxV2Plugin.fields.config.org.title`),prop:`org`},{default:B(()=>[D(L(U),{modelValue:L(o).org,"onUpdate:modelValue":t[1]||=e=>L(o).org=e,placeholder:L(i)(`influxV2Plugin.fields.config.org.placeholder`),name:`org`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`influxV2Plugin.fields.config.bucket.title`),prop:`bucket`},{default:B(()=>[D(L(U),{modelValue:L(o).bucket,"onUpdate:modelValue":t[2]||=e=>L(o).bucket=e,placeholder:L(i)(`influxV2Plugin.fields.config.bucket.placeholder`),name:`bucket`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Vt),{"content-position":`left`,class:`mt-6!`},{default:B(()=>[E(z(L(i)(`influxV2Plugin.headings.authentication`)),1)]),_:1}),D(L(Z),{label:L(i)(`influxV2Plugin.fields.config.token.title`),prop:`token`},{default:B(()=>[D(L(Zp),{modelValue:L(o).token,"onUpdate:modelValue":t[3]||=e=>L(o).token=e,configured:L(o).tokenConfigured,placeholder:L(i)(`influxV2Plugin.fields.config.token.placeholder`),name:`token`},null,8,[`modelValue`,`configured`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),NN=`influx-v2-plugin`,PN={"cs-CZ":{headings:{connection:`Připojení InfluxDB v2`,authentication:`Autentizace`},messages:{config:{edited:`Konfigurace InfluxDB v2 byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci InfluxDB v2`}},texts:{about:`Nakonfigurujte připojení InfluxDB v2 pro ukládání časových řad.`},fields:{config:{url:{title:`URL serveru`,placeholder:`http://127.0.0.1:8086`,validation:{required:`URL serveru je povinná`}},org:{title:`Organizace`,placeholder:`fastybird`,validation:{required:`Organizace je povinná`}},bucket:{title:`Vědro`,placeholder:`fastybird`,validation:{required:`Název bucketu je povinný`}},token:{title:`API token`,placeholder:`Ponechte prázdné, pokud není vyžadováno`}}}},"de-DE":{headings:{connection:`InfluxDB v2-Verbindung`,authentication:`Authentifizierung`},messages:{config:{edited:`InfluxDB v2-Konfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der InfluxDB v2-Konfiguration fehlgeschlagen`}},texts:{about:`Konfigurieren Sie die InfluxDB v2-Verbindung für die Zeitreihendatenspeicherung.`},fields:{config:{url:{title:`Server-URL`,placeholder:`http://127.0.0.1:8086`,validation:{required:`Server-URL ist erforderlich`}},org:{title:`Organisation`,placeholder:`Fastybird`,validation:{required:`Organisation ist erforderlich`}},bucket:{title:`Eimer`,placeholder:`Fastybird`,validation:{required:`Bucket-Name ist erforderlich`}},token:{title:`API-Token`,placeholder:`Leer lassen, wenn nicht erforderlich`}}}},"en-US":{headings:{connection:`InfluxDB v2 Connection`,authentication:`Authentication`},messages:{config:{edited:`InfluxDB v2 configuration has been successfully updated`,notEdited:`Failed to update InfluxDB v2 configuration`}},texts:{about:`Configure the InfluxDB v2 connection for time-series data storage.`},fields:{config:{url:{title:`Server URL`,placeholder:`http://127.0.0.1:8086`,validation:{required:`Server URL is required`}},org:{title:`Organization`,placeholder:`fastybird`,validation:{required:`Organization is required`}},bucket:{title:`Bucket`,placeholder:`fastybird`,validation:{required:`Bucket name is required`}},token:{title:`API Token`,placeholder:`Leave empty if not required`}}}},"es-ES":{headings:{connection:`Conexión de InfluxDB v2`,authentication:`Autenticación`},messages:{config:{edited:`La configuración de InfluxDB v2 ha sido actualizada correctamente`,notEdited:`Error al actualizar la configuración de InfluxDB v2`}},texts:{about:`Configure la conexión de InfluxDB v2 para el almacenamiento de datos de series temporales.`},fields:{config:{url:{title:`URL del servidor`,placeholder:`http://127.0.0.1:8086`,validation:{required:`La URL del servidor es obligatoria`}},org:{title:`Organización`,placeholder:`fastybird`,validation:{required:`La organización es obligatoria`}},bucket:{title:`Balde`,placeholder:`fastybird`,validation:{required:`El nombre del bucket es obligatorio`}},token:{title:`Token de API`,placeholder:`Déjelo vacío si no es necesario`}}}},"pl-PL":{headings:{connection:`Połączenie InfluxDB v2`,authentication:`Uwierzytelnianie`},messages:{config:{edited:`Konfiguracja InfluxDB v2 została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji InfluxDB v2`}},texts:{about:`Skonfiguruj połączenie InfluxDB v2 do przechowywania danych szeregów czasowych.`},fields:{config:{url:{title:`URL serwera`,placeholder:`http://127.0.0.1:8086`,validation:{required:`URL serwera jest wymagany`}},org:{title:`Organizacja`,placeholder:`szybki ptak`,validation:{required:`Organizacja jest wymagana`}},bucket:{title:`Wiaderko`,placeholder:`szybki ptak`,validation:{required:`Nazwa bucketu jest wymagana`}},token:{title:`Token API`,placeholder:`Pozostaw puste, jeśli nie jest wymagane`}}}},"sk-SK":{headings:{connection:`Pripojenie InfluxDB v2`,authentication:`Autentifikácia`},messages:{config:{edited:`Konfigurácia InfluxDB v2 bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu InfluxDB v2`}},texts:{about:`Nakonfigurujte pripojenie InfluxDB v2 na ukladanie časových radov.`},fields:{config:{url:{title:`URL servera`,placeholder:`http://127.0.0.1:8086`,validation:{required:`URL servera je povinná`}},org:{title:`Organizácia`,placeholder:`fastybird`,validation:{required:`Organizácia je povinná`}},bucket:{title:`Vedro`,placeholder:`fastybird`,validation:{required:`Názov bucketu je povinný`}},token:{title:`API token`,placeholder:`Ponechajte prázdne ak nie je potrebné`}}}}},FN=Ki.extend({url:X().min(1),org:X().min(1),bucket:X().min(1),token:X().nullable().optional(),tokenConfigured:J().optional()}),IN=Wi.extend({url:X(),org:X(),bucket:X(),token:X().nullable().optional(),tokenConfigured:J().default(!1)}),LN=Zi.and(K({type:Y(NN),url:X().optional(),token:X().nullable().optional(),org:X().optional(),bucket:X().optional()}));Ri.and(K({type:Y(NN),url:X(),org:X(),bucket:X(),token:X().nullable().optional(),token_configured:J()}));var RN=Symbol(`FB-Plugin-InfluxV2`),zN={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(PN)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{influxV2Plugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(RN,{type:NN,source:`com.fastybird.smart-panel.plugin.influx-v2`,name:`InfluxDB v2`,description:`InfluxDB 2.x time-series storage backend with Flux query language, token-based auth, and bucket management`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://github.com/FastyBird/smart-panel/issues`},elements:[{type:Ea,components:{pluginConfigEditForm:MN},schemas:{pluginConfigSchema:IN,pluginConfigEditFormSchema:FN,pluginConfigUpdateReqSchema:LN},modules:[ka]}],modules:[ka,j_],isCore:!1})}},BN=k({name:`RotatingFileConfigForm`,__name:`rotating-file-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{formEl:a,model:o,formChanged:s,submit:c,formResult:u}=Xi({config:n.config,messages:{success:i(`loggerRotatingFilePlugin.messages.config.edited`),error:i(`loggerRotatingFilePlugin.messages.config.notEdited`)}}),d=P({dir:[{type:`string`,trigger:`change`,message:i(`loggerRotatingFilePlugin.fields.config.dir.validation.nonEmpty`)}],retentionDays:[{type:`integer`,min:1,trigger:`change`,message:i(`loggerRotatingFilePlugin.fields.config.retentionDays.validation.min`)}],cleanupCron:[{validator:(e,t)=>f(t),trigger:`blur`,message:i(`loggerRotatingFilePlugin.fields.config.cleanupCron.validation.invalid`)}],filePrefix:[{validator:(e,t)=>p(t),trigger:`blur`,message:i(`loggerRotatingFilePlugin.fields.config.filePrefix.validation.pattern`)}]}),f=e=>{if(e===``||e===null)return!0;let t=e.trim();return/^([\d*/?,\-]+)\s+([\d*/?,\-]+)\s+([\d*/?,\-]+)\s+([\d*/?,A-Za-z\-]+)\s+([\d*/?,A-Za-z\-]+)$/.test(t)},p=e=>e===``||e===null||/^[A-Za-z0-9._-]+$/.test(e??``);return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!a.value)return;a.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:a,model:L(o),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(i)(`loggerRotatingFilePlugin.headings.aboutFileLoggingSettings`),description:L(i)(`loggerRotatingFilePlugin.texts.aboutFileLoggingSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(i)(`loggerRotatingFilePlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(o).enabled,"onUpdate:modelValue":t[0]||=e=>L(o).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[5]||=l(`hr`,null,null,-1),D(L(Z),{label:L(i)(`loggerRotatingFilePlugin.fields.config.dir.title`),prop:`dir`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(o).dir,"onUpdate:modelValue":t[1]||=e=>L(o).dir=e,placeholder:L(i)(`loggerRotatingFilePlugin.fields.config.dir.placeholder`),name:`dir`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`loggerRotatingFilePlugin.fields.config.retentionDays.title`),prop:`retentionDays`,class:`mt-3`},{default:B(()=>[D(L(Qr),{modelValue:L(o).retentionDays,"onUpdate:modelValue":t[2]||=e=>L(o).retentionDays=e,placeholder:L(i)(`loggerRotatingFilePlugin.fields.config.retentionDays.placeholder`),name:`retentionDays`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`loggerRotatingFilePlugin.fields.config.cleanupCron.title`),prop:`cleanupCron`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(o).cleanupCron,"onUpdate:modelValue":t[3]||=e=>L(o).cleanupCron=e,placeholder:L(i)(`loggerRotatingFilePlugin.fields.config.cleanupCron.placeholder`),name:`cleanupCron`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`loggerRotatingFilePlugin.fields.config.filePrefix.title`),prop:`filePrefix`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(o).filePrefix,"onUpdate:modelValue":t[4]||=e=>L(o).filePrefix=e,placeholder:L(i)(`loggerRotatingFilePlugin.fields.config.filePrefix.placeholder`),name:`filePrefix`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),VN={"cs-CZ":{headings:{aboutFileLoggingSettings:`Nastavení souborového protokolování`},fields:{config:{enabled:{title:`Povoleno`},dir:{title:`Adresář protokolů`,placeholder:`Absolutní nebo relativní cesta, např. /var/log/smart-panel`,validation:{nonEmpty:`Adresář protokolů nesmí být prázdný.`}},retentionDays:{title:`Doba uchovávání (dny)`,placeholder:`Kolik dní uchovávat soubory protokolů (např. 7)`,validation:{min:`Doba uchovávání musí být alespoň 1 den.`}},cleanupCron:{title:`Plán úklidu (cron)`,placeholder:`Cron výraz, např. 15 3 * * * (denně ve 03:15)`,validation:{invalid:`Zadejte prosím platný cron výraz (např. 15 3 * * *).`}},filePrefix:{title:`Prefix souboru`,placeholder:`Prefix názvu souboru, např. smart-panel`,validation:{pattern:`Jsou povolena pouze písmena, čísla, tečka, podtržítko a pomlčka.`}}}},messages:{config:{edited:`Změny uloženy! Konfigurace pluginu rotujícího souboru protokolů byla aktualizována.`,notEdited:`Něco se pokazilo. Aktualizace konfigurace pluginu rotujícího souboru protokolů nebyla úspěšná.`}},texts:{aboutFileLoggingSettings:`Nakonfigurujte souborovou persistenci protokolů s denní rotací a automatickým úklidem. Pokud je povoleno, protokoly se ukládají do souborů pro dlouhodobé uchovávání a offline analýzu. Soubory jsou automaticky rotovány denně a uklízeny na základě nastavení doby uchovávání.`}},"de-DE":{headings:{aboutFileLoggingSettings:`Dateiprotokollierungs-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},dir:{title:`Protokollverzeichnis`,placeholder:`Absoluter oder relativer Pfad, z.B. /var/log/smart-panel`,validation:{nonEmpty:`Protokollverzeichnis darf nicht leer sein.`}},retentionDays:{title:`Aufbewahrung (Tage)`,placeholder:`Wie viele Tage Protokolldateien aufbewahrt werden sollen (z.B. 7)`,validation:{min:`Aufbewahrungstage müssen mindestens 1 sein.`}},cleanupCron:{title:`Bereinigungszeitplan (Cron)`,placeholder:`Cron-Ausdruck, z.B. 15 3 * * * (täglich um 03:15)`,validation:{invalid:`Bitte geben Sie einen gültigen Cron-Ausdruck ein (z.B. 15 3 * * *).`}},filePrefix:{title:`Dateipräfix`,placeholder:`Dateinamen-Präfix, z.B. smart-panel`,validation:{pattern:`Nur Buchstaben, Zahlen, Punkt, Unterstrich und Bindestrich sind erlaubt.`}}}},messages:{config:{edited:`Änderungen gespeichert! Die Konfiguration des Rotating-File-Logger-Plugins wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Aktualisierung der Rotating-File-Logger-Plugin-Konfiguration war nicht erfolgreich.`}},texts:{aboutFileLoggingSettings:`Konfigurieren Sie die dateibasierte Protokollpersistenz mit täglicher Rotation und automatischer Bereinigung. Wenn aktiviert, werden Protokolle in Dateien für langfristige Aufbewahrung und Offline-Analyse gespeichert. Dateien werden automatisch täglich rotiert und basierend auf den Aufbewahrungseinstellungen bereinigt.`}},"en-US":{headings:{aboutFileLoggingSettings:`File Logging Settings`},fields:{config:{enabled:{title:`Enabled`},dir:{title:`Log directory`,placeholder:`Absolute or relative path, e.g. /var/log/smart-panel`,validation:{nonEmpty:`Log directory must not be empty.`}},retentionDays:{title:`Retention (days)`,placeholder:`How many days to keep log files (e.g. 7)`,validation:{min:`Retention days must be at least 1.`}},cleanupCron:{title:`Cleanup schedule (cron)`,placeholder:`Cron expression, e.g. 15 3 * * * (daily at 03:15)`,validation:{invalid:`Please enter a valid cron expression (e.g. 15 3 * * *).`}},filePrefix:{title:`File prefix`,placeholder:`Filename prefix, e.g. smart-panel`,validation:{pattern:`Only letters, numbers, dot, underscore, and hyphen are allowed.`}}}},messages:{config:{edited:`Changes saved! The Rotating File Logger plugin config has been updated.`,notEdited:`Something went wrong. Rotating File Logger plugin config update was not successful.`}},texts:{aboutFileLoggingSettings:`Configure file-based log persistence with daily rotation and automatic cleanup. When enabled, logs are saved to files for long-term retention and offline analysis. Files are automatically rotated daily and cleaned up based on retention settings.`}},"es-ES":{headings:{aboutFileLoggingSettings:`Configuración de registro en archivo`},fields:{config:{enabled:{title:`Habilitado`},dir:{title:`Directorio de registros`,placeholder:`Ruta absoluta o relativa, p. ej., /var/log/smart-panel`,validation:{nonEmpty:`El directorio de registros no debe estar vacío.`}},retentionDays:{title:`Retención (días)`,placeholder:`Cuántos días conservar los archivos de registro (p. ej., 7)`,validation:{min:`Los días de retención deben ser al menos 1.`}},cleanupCron:{title:`Programación de limpieza (cron)`,placeholder:`Expresión cron, p. ej., 15 3 * * * (diariamente a las 03:15)`,validation:{invalid:`Por favor, introduzca una expresión cron válida (p. ej., 15 3 * * *).`}},filePrefix:{title:`Prefijo del archivo`,placeholder:`Prefijo del nombre de archivo, p. ej., smart-panel`,validation:{pattern:`Solo se permiten letras, números, puntos, guiones bajos y guiones.`}}}},messages:{config:{edited:`¡Cambios guardados! La configuración del plugin de registro en archivo rotativo ha sido actualizada.`,notEdited:`Algo salió mal. La actualización de la configuración del plugin de registro en archivo rotativo no fue exitosa.`}},texts:{aboutFileLoggingSettings:`Configure la persistencia de registros basada en archivos con rotación diaria y limpieza automática. Cuando está habilitado, los registros se guardan en archivos para retención a largo plazo y análisis sin conexión. Los archivos se rotan automáticamente a diario y se limpian según la configuración de retención.`}},"pl-PL":{headings:{aboutFileLoggingSettings:`Ustawienia logowania do pliku`},fields:{config:{enabled:{title:`Włączony`},dir:{title:`Katalog logów`,placeholder:`Ścieżka bezwzględna lub względna, np. /var/log/smart-panel`,validation:{nonEmpty:`Katalog logów nie może być pusty.`}},retentionDays:{title:`Przechowywanie (dni)`,placeholder:`Ile dni przechowywać pliki logów (np. 7)`,validation:{min:`Liczba dni przechowywania musi wynosić co najmniej 1.`}},cleanupCron:{title:`Harmonogram czyszczenia (cron)`,placeholder:`Wyrażenie cron, np. 15 3 * * * (codziennie o 03:15)`,validation:{invalid:`Wprowadź prawidłowe wyrażenie cron (np. 15 3 * * *).`}},filePrefix:{title:`Prefiks pliku`,placeholder:`Prefiks nazwy pliku, np. smart-panel`,validation:{pattern:`Dozwolone są tylko litery, cyfry, kropka, podkreślenie i myślnik.`}}}},messages:{config:{edited:`Zmiany zapisane! Konfiguracja wtyczki Rotating File Logger została zaktualizowana.`,notEdited:`Coś poszło nie tak. Aktualizacja konfiguracji wtyczki Rotating File Logger nie powiodła się.`}},texts:{aboutFileLoggingSettings:`Skonfiguruj trwałe zapisywanie logów do plików z codzienną rotacją i automatycznym czyszczeniem. Po włączeniu logi są zapisywane do plików w celu długoterminowego przechowywania i analizy offline. Pliki są automatycznie rotowane codziennie i czyszczone zgodnie z ustawieniami przechowywania.`}},"sk-SK":{headings:{aboutFileLoggingSettings:`Nastavenia logovania do súborov`},fields:{config:{enabled:{title:`Povolený`},dir:{title:`Adresár logov`,placeholder:`Absolútna alebo relatívna cesta, napr. /var/log/smart-panel`,validation:{nonEmpty:`Adresár logov nesmie byť prázdny.`}},retentionDays:{title:`Uchovávanie (dní)`,placeholder:`Koľko dní uchovávať súbory logov (napr. 7)`,validation:{min:`Počet dní uchovávania musí byť aspoň 1.`}},cleanupCron:{title:`Plán čistenia (cron)`,placeholder:`Cron výraz, napr. 15 3 * * * (denne o 03:15)`,validation:{invalid:`Prosím zadajte platný cron výraz (napr. 15 3 * * *).`}},filePrefix:{title:`Prefix súboru`,placeholder:`Prefix názvu súboru, napr. smart-panel`,validation:{pattern:`Povolené sú iba písmená, čísla, bodka, podčiarkovník a pomlčka.`}}}},messages:{config:{edited:`Zmeny uložené! Konfigurácia pluginu Rotating File Logger bola aktualizovaná.`,notEdited:`Niečo sa pokazilo. Aktualizácia konfigurácie pluginu Rotating File Logger nebola úspešná.`}},texts:{aboutFileLoggingSettings:`Nakonfigurujte perzistenciu logov do súborov s dennou rotáciou a automatickým čistením. Keď je povolené, logy sa ukladajú do súborov na dlhodobé uchovávanie a offline analýzu. Súbory sa automaticky rotujú denne a čistia podľa nastavení uchovávania.`}}},HN=`logger-rotating-file-plugin`,UN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0})})),WN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronField=void 0,e.CronField=class e{#e=!1;#t=!1;#n=!1;#r=[];options={rawValue:``};static get min(){throw Error(`min must be overridden`)}static get max(){throw Error(`max must be overridden`)}static get chars(){return Object.freeze([])}static get validChars(){return/^[?,*\dH/-]+$|^.*H\(\d+-\d+\)\/\d+.*$|^.*H\(\d+-\d+\).*$|^.*H\/\d+.*$/}static get constraints(){return{min:this.min,max:this.max,chars:this.chars,validChars:this.validChars}}constructor(t,n={rawValue:``}){if(!Array.isArray(t))throw Error(`${this.constructor.name} Validation error, values is not an array`);if(!(t.length>0))throw Error(`${this.constructor.name} Validation error, values contains no values`);this.options={...n,rawValue:n.rawValue??``},this.#r=t.sort(e.sorter),this.#n=this.options.wildcard===void 0?this.#i():this.options.wildcard,this.#e=this.options.rawValue.includes(`L`)||t.includes(`L`),this.#t=this.options.rawValue.includes(`?`)||t.includes(`?`)}get min(){return this.constructor.min}get max(){return this.constructor.max}get chars(){return this.constructor.chars}get hasLastChar(){return this.#e}get hasQuestionMarkChar(){return this.#t}get isWildcard(){return this.#n}get values(){return this.#r}static sorter(e,t){let n=typeof e==`number`,r=typeof t==`number`;return n&&r?e-t:!n&&!r?e.localeCompare(t):n?-1:1}static findNearestValueInList(e,t,n=!1){if(n){for(let n=e.length-1;n>=0;n--)if(e[n]<t)return e[n];return null}for(let n=0;n<e.length;n++)if(e[n]>t)return e[n];return null}findNearestValue(e,t=!1){return this.constructor.findNearestValueInList(this.values,e,t)}serialize(){return{wildcard:this.#n,values:this.#r}}validate(){let e,t=this.chars.length>0?` or chars ${this.chars.join(``)}`:``,n=e=>t=>RegExp(`^\\d{0,2}${t}$`).test(e);if(!this.#r.every(t=>(e=t,typeof t==`number`?t>=this.min&&t<=this.max:this.chars.some(n(t)))))throw Error(`${this.constructor.name} Validation error, got value ${e} expected range ${this.min}-${this.max}${t}`);let r=this.#r.find((e,t)=>this.#r.indexOf(e)!==t);if(r)throw Error(`${this.constructor.name} Validation error, duplicate values found: ${r}`)}#i(){return this.options.rawValue.length>0?[`*`,`?`].includes(this.options.rawValue):Array.from({length:this.max-this.min+1},(e,t)=>t+this.min).every(e=>this.#r.includes(e))}}})),GN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronDayOfMonth=void 0;var t=WN(),n=1,r=31,i=Object.freeze([`L`]);e.CronDayOfMonth=class extends t.CronField{static get min(){return n}static get max(){return r}static get chars(){return i}static get validChars(){return/^[?,*\dLH/-]+$|^.*H\(\d+-\d+\)\/\d+.*$|^.*H\(\d+-\d+\).*$|^.*H\/\d+.*$/}constructor(e,t){super(e,t),this.validate()}get values(){return super.values}}})),KN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronDayOfWeek=void 0;var t=WN(),n=0,r=7,i=Object.freeze([`L`]);e.CronDayOfWeek=class extends t.CronField{static get min(){return n}static get max(){return r}static get chars(){return i}static get validChars(){return/^[?,*\dLH#/-]+$|^.*H\(\d+-\d+\)\/\d+.*$|^.*H\(\d+-\d+\).*$|^.*H\/\d+.*$/}constructor(e,t){super(e,t),this.validate()}get values(){return super.values}get nthDay(){return this.options.nthDayOfWeek??0}}})),qN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronHour=void 0;var t=WN(),n=0,r=23,i=Object.freeze([]);e.CronHour=class extends t.CronField{static get min(){return n}static get max(){return r}static get chars(){return i}constructor(e,t){super(e,t),this.validate()}get values(){return super.values}}})),JN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronMinute=void 0;var t=WN(),n=0,r=59,i=Object.freeze([]);e.CronMinute=class extends t.CronField{static get min(){return n}static get max(){return r}static get chars(){return i}constructor(e,t){super(e,t),this.validate()}get values(){return super.values}}})),YN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=class extends Error{},n=class extends t{constructor(e){super(`Invalid DateTime: ${e.toMessage()}`)}},r=class extends t{constructor(e){super(`Invalid Interval: ${e.toMessage()}`)}},i=class extends t{constructor(e){super(`Invalid Duration: ${e.toMessage()}`)}},a=class extends t{},o=class extends t{constructor(e){super(`Invalid unit ${e}`)}},s=class extends t{},c=class extends t{constructor(){super(`Zone is an abstract class`)}},l=`numeric`,u=`short`,d=`long`,f={year:l,month:l,day:l},p={year:l,month:u,day:l},m={year:l,month:u,day:l,weekday:u},h={year:l,month:d,day:l},g={year:l,month:d,day:l,weekday:d},_={hour:l,minute:l},v={hour:l,minute:l,second:l},y={hour:l,minute:l,second:l,timeZoneName:u},b={hour:l,minute:l,second:l,timeZoneName:d},x={hour:l,minute:l,hourCycle:`h23`},S={hour:l,minute:l,second:l,hourCycle:`h23`},C={hour:l,minute:l,second:l,hourCycle:`h23`,timeZoneName:u},w={hour:l,minute:l,second:l,hourCycle:`h23`,timeZoneName:d},T={year:l,month:l,day:l,hour:l,minute:l},E={year:l,month:l,day:l,hour:l,minute:l,second:l},ee={year:l,month:u,day:l,hour:l,minute:l},D={year:l,month:u,day:l,hour:l,minute:l,second:l},te={year:l,month:u,day:l,weekday:u,hour:l,minute:l},ne={year:l,month:d,day:l,hour:l,minute:l,timeZoneName:u},re={year:l,month:d,day:l,hour:l,minute:l,second:l,timeZoneName:u},O={year:l,month:d,day:l,weekday:d,hour:l,minute:l,timeZoneName:d},k={year:l,month:d,day:l,weekday:d,hour:l,minute:l,second:l,timeZoneName:d},A=class{get type(){throw new c}get name(){throw new c}get ianaName(){return this.name}get isUniversal(){throw new c}offsetName(e,t){throw new c}formatOffset(e,t){throw new c}offset(e){throw new c}equals(e){throw new c}get isValid(){throw new c}},ie=null,ae=class e extends A{static get instance(){return ie===null&&(ie=new e),ie}get type(){return`system`}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:n}){return Ft(e,t,n)}formatOffset(e,t){return zt(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return e.type===`system`}get isValid(){return!0}},j=new Map;function M(e){let t=j.get(e);return t===void 0&&(t=new Intl.DateTimeFormat(`en-US`,{hour12:!1,timeZone:e,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,era:`short`}),j.set(e,t)),t}var oe={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function se(e,t){let n=e.format(t).replace(/\u200E/g,``),[,r,i,a,o,s,c,l]=/(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(n);return[a,r,i,o,s,c,l]}function ce(e,t){let n=e.formatToParts(t),r=[];for(let e=0;e<n.length;e++){let{type:t,value:i}=n[e],a=oe[t];t===`era`?r[a]=i:H(a)||(r[a]=parseInt(i,10))}return r}var N=new Map,le=class e extends A{static create(t){let n=N.get(t);return n===void 0&&N.set(t,n=new e(t)),n}static resetCache(){N.clear(),j.clear()}static isValidSpecifier(e){return this.isValidZone(e)}static isValidZone(e){if(!e)return!1;try{return new Intl.DateTimeFormat(`en-US`,{timeZone:e}).format(),!0}catch{return!1}}constructor(t){super(),this.zoneName=t,this.valid=e.isValidZone(t)}get type(){return`iana`}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(e,{format:t,locale:n}){return Ft(e,t,n,this.name)}formatOffset(e,t){return zt(this.offset(e),t)}offset(e){if(!this.valid)return NaN;let t=new Date(e);if(isNaN(t))return NaN;let n=M(this.name),[r,i,a,o,s,c,l]=n.formatToParts?ce(n,t):se(n,t);o===`BC`&&(r=-Math.abs(r)+1);let u=jt({year:r,month:i,day:a,hour:s===24?0:s,minute:c,second:l,millisecond:0}),d=+t,f=d%1e3;return d-=f>=0?f:1e3+f,(u-d)/(60*1e3)}equals(e){return e.type===`iana`&&e.name===this.name}get isValid(){return this.valid}},ue={};function de(e,t={}){let n=JSON.stringify([e,t]),r=ue[n];return r||(r=new Intl.ListFormat(e,t),ue[n]=r),r}var fe=new Map;function pe(e,t={}){let n=JSON.stringify([e,t]),r=fe.get(n);return r===void 0&&(r=new Intl.DateTimeFormat(e,t),fe.set(n,r)),r}var me=new Map;function he(e,t={}){let n=JSON.stringify([e,t]),r=me.get(n);return r===void 0&&(r=new Intl.NumberFormat(e,t),me.set(n,r)),r}var ge=new Map;function _e(e,t={}){let{base:n,...r}=t,i=JSON.stringify([e,r]),a=ge.get(i);return a===void 0&&(a=new Intl.RelativeTimeFormat(e,t),ge.set(i,a)),a}var ve=null;function P(){return ve||(ve=new Intl.DateTimeFormat().resolvedOptions().locale,ve)}var ye=new Map;function F(e){let t=ye.get(e);return t===void 0&&(t=new Intl.DateTimeFormat(e).resolvedOptions(),ye.set(e,t)),t}var be=new Map;function xe(e){let t=be.get(e);if(!t){let n=new Intl.Locale(e);t=`getWeekInfo`in n?n.getWeekInfo():n.weekInfo,`minimalDays`in t||(t={...ke,...t}),be.set(e,t)}return t}function I(e){let t=e.indexOf(`-x-`);t!==-1&&(e=e.substring(0,t));let n=e.indexOf(`-u-`);if(n===-1)return[e];{let t,r;try{t=pe(e).resolvedOptions(),r=e}catch{let i=e.substring(0,n);t=pe(i).resolvedOptions(),r=i}let{numberingSystem:i,calendar:a}=t;return[r,i,a]}}function Se(e,t,n){return n||t?(e.includes(`-u-`)||(e+=`-u`),n&&(e+=`-ca-${n}`),t&&(e+=`-nu-${t}`),e):e}function Ce(e){let t=[];for(let n=1;n<=12;n++){let r=_i.utc(2009,n,1);t.push(e(r))}return t}function we(e){let t=[];for(let n=1;n<=7;n++){let r=_i.utc(2016,11,13+n);t.push(e(r))}return t}function Te(e,t,n,r){let i=e.listingMode();return i===`error`?null:i===`en`?n(t):r(t)}function Ee(e){return e.numberingSystem&&e.numberingSystem!==`latn`?!1:e.numberingSystem===`latn`||!e.locale||e.locale.startsWith(`en`)||F(e.locale).numberingSystem===`latn`}var L=class{constructor(e,t,n){this.padTo=n.padTo||0,this.floor=n.floor||!1;let{padTo:r,floor:i,...a}=n;if(!t||Object.keys(a).length>0){let t={useGrouping:!1,...n};n.padTo>0&&(t.minimumIntegerDigits=n.padTo),this.inf=he(e,t)}}format(e){if(this.inf){let t=this.floor?Math.floor(e):e;return this.inf.format(t)}else return Ct(this.floor?Math.floor(e):Dt(e,3),this.padTo)}},De=class{constructor(e,t,n){this.opts=n,this.originalZone=void 0;let r;if(this.opts.timeZone)this.dt=e;else if(e.zone.type===`fixed`){let t=-1*(e.offset/60),n=t>=0?`Etc/GMT+${t}`:`Etc/GMT${t}`;e.offset!==0&&le.create(n).valid?(r=n,this.dt=e):(r=`UTC`,this.dt=e.offset===0?e:e.setZone(`UTC`).plus({minutes:e.offset}),this.originalZone=e.zone)}else e.zone.type===`system`?this.dt=e:e.zone.type===`iana`?(this.dt=e,r=e.zone.name):(r=`UTC`,this.dt=e.setZone(`UTC`).plus({minutes:e.offset}),this.originalZone=e.zone);let i={...this.opts};i.timeZone=i.timeZone||r,this.dtf=pe(t,i)}format(){return this.originalZone?this.formatToParts().map(({value:e})=>e).join(``):this.dtf.format(this.dt.toJSDate())}formatToParts(){let e=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?e.map(e=>{if(e.type===`timeZoneName`){let t=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:t}}else return e}):e}resolvedOptions(){return this.dtf.resolvedOptions()}},Oe=class{constructor(e,t,n){this.opts={style:`long`,...n},!t&&mt()&&(this.rtf=_e(e,n))}format(e,t){return this.rtf?this.rtf.format(e,t):rn(t,e,this.opts.numeric,this.opts.style!==`long`)}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}},ke={firstDay:1,minimalDays:4,weekend:[6,7]},R=class e{static fromOpts(t){return e.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,n,r,i,a=!1){let o=t||V.defaultLocale,s=o||(a?`en-US`:P()),c=n||V.defaultNumberingSystem,l=r||V.defaultOutputCalendar,u=bt(i)||V.defaultWeekSettings;return new e(s,c,l,u,o)}static resetCache(){ve=null,fe.clear(),me.clear(),ge.clear(),ye.clear(),be.clear()}static fromObject({locale:t,numberingSystem:n,outputCalendar:r,weekSettings:i}={}){return e.create(t,n,r,i)}constructor(e,t,n,r,i){let[a,o,s]=I(e);this.locale=a,this.numberingSystem=t||o||null,this.outputCalendar=n||s||null,this.weekSettings=r,this.intl=Se(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=i,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached??=Ee(this),this.fastNumbersCached}listingMode(){let e=this.isEnglish(),t=(this.numberingSystem===null||this.numberingSystem===`latn`)&&(this.outputCalendar===null||this.outputCalendar===`gregory`);return e&&t?`en`:`intl`}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:e.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,bt(t.weekSettings)||this.weekSettings,t.defaultToEN||!1)}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,t=!1){return Te(this,e,Wt,()=>{let n=this.intl===`ja`||this.intl.startsWith(`ja-`);t&=!n;let r=t?{month:e,day:`numeric`}:{month:e},i=t?`format`:`standalone`;if(!this.monthsCache[i][e]){let t=n?e=>this.dtFormatter(e,r).format():e=>this.extract(e,r,`month`);this.monthsCache[i][e]=Ce(t)}return this.monthsCache[i][e]})}weekdays(e,t=!1){return Te(this,e,Jt,()=>{let n=t?{weekday:e,year:`numeric`,month:`long`,day:`numeric`}:{weekday:e},r=t?`format`:`standalone`;return this.weekdaysCache[r][e]||(this.weekdaysCache[r][e]=we(e=>this.extract(e,n,`weekday`))),this.weekdaysCache[r][e]})}meridiems(){return Te(this,void 0,()=>Yt,()=>{if(!this.meridiemCache){let e={hour:`numeric`,hourCycle:`h12`};this.meridiemCache=[_i.utc(2016,11,13,9),_i.utc(2016,11,13,19)].map(t=>this.extract(t,e,`dayperiod`))}return this.meridiemCache})}eras(e){return Te(this,e,$t,()=>{let t={era:e};return this.eraCache[e]||(this.eraCache[e]=[_i.utc(-40,1,1),_i.utc(2017,1,1)].map(e=>this.extract(e,t,`era`))),this.eraCache[e]})}extract(e,t,n){let r=this.dtFormatter(e,t).formatToParts().find(e=>e.type.toLowerCase()===n);return r?r.value:null}numberFormatter(e={}){return new L(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new De(e,this.intl,t)}relFormatter(e={}){return new Oe(this.intl,this.isEnglish(),e)}listFormatter(e={}){return de(this.intl,e)}isEnglish(){return this.locale===`en`||this.locale.toLowerCase()===`en-us`||F(this.intl).locale.startsWith(`en-us`)}getWeekSettings(){return this.weekSettings?this.weekSettings:ht()?xe(this.locale):ke}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}},Ae=null,je=class e extends A{static get utcInstance(){return Ae===null&&(Ae=new e(0)),Ae}static instance(t){return t===0?e.utcInstance:new e(t)}static parseSpecifier(t){if(t){let n=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(n)return new e(It(n[1],n[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return`fixed`}get name(){return this.fixed===0?`UTC`:`UTC${zt(this.fixed,`narrow`)}`}get ianaName(){return this.fixed===0?`Etc/UTC`:`Etc/GMT${zt(-this.fixed,`narrow`)}`}offsetName(){return this.name}formatOffset(e,t){return zt(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return e.type===`fixed`&&e.fixed===this.fixed}get isValid(){return!0}},Me=class extends A{constructor(e){super(),this.zoneName=e}get type(){return`invalid`}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return``}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function Ne(e,t){if(H(e)||e===null)return t;if(e instanceof A)return e;if(ft(e)){let n=e.toLowerCase();return n==="default"?t:n===`local`||n===`system`?ae.instance:n===`utc`||n===`gmt`?je.utcInstance:je.parseSpecifier(n)||le.create(e)}else if(ut(e))return je.instance(e);else if(typeof e==`object`&&`offset`in e&&typeof e.offset==`function`)return e;else return new Me(e)}var Pe={arab:`[٠-٩]`,arabext:`[۰-۹]`,bali:`[᭐-᭙]`,beng:`[০-৯]`,deva:`[०-९]`,fullwide:`[0-9]`,gujr:`[૦-૯]`,hanidec:`[〇|一|二|三|四|五|六|七|八|九]`,khmr:`[០-៩]`,knda:`[೦-೯]`,laoo:`[໐-໙]`,limb:`[᥆-᥏]`,mlym:`[൦-൯]`,mong:`[᠐-᠙]`,mymr:`[၀-၉]`,orya:`[୦-୯]`,tamldec:`[௦-௯]`,telu:`[౦-౯]`,thai:`[๐-๙]`,tibt:`[༠-༩]`,latn:`\\d`},Fe={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},z=Pe.hanidec.replace(/[\[|\]]/g,``).split(``);function Ie(e){let t=parseInt(e,10);if(isNaN(t)){t=``;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(e[n].search(Pe.hanidec)!==-1)t+=z.indexOf(e[n]);else for(let e in Fe){let[n,i]=Fe[e];r>=n&&r<=i&&(t+=r-n)}}return parseInt(t,10)}else return t}var Le=new Map;function Re(){Le.clear()}function ze({numberingSystem:e},t=``){let n=e||`latn`,r=Le.get(n);r===void 0&&(r=new Map,Le.set(n,r));let i=r.get(t);return i===void 0&&(i=RegExp(`${Pe[n]}${t}`),r.set(t,i)),i}var Be=()=>Date.now(),B=`system`,Ve=null,He=null,Ue=null,We=60,Ge,Ke=null,V=class{static get now(){return Be}static set now(e){Be=e}static set defaultZone(e){B=e}static get defaultZone(){return Ne(B,ae.instance)}static get defaultLocale(){return Ve}static set defaultLocale(e){Ve=e}static get defaultNumberingSystem(){return He}static set defaultNumberingSystem(e){He=e}static get defaultOutputCalendar(){return Ue}static set defaultOutputCalendar(e){Ue=e}static get defaultWeekSettings(){return Ke}static set defaultWeekSettings(e){Ke=bt(e)}static get twoDigitCutoffYear(){return We}static set twoDigitCutoffYear(e){We=e%100}static get throwOnInvalid(){return Ge}static set throwOnInvalid(e){Ge=e}static resetCaches(){R.resetCache(),le.resetCache(),_i.resetCache(),Re()}},qe=class{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}},Je=[0,31,59,90,120,151,181,212,243,273,304,334],Ye=[0,31,60,91,121,152,182,213,244,274,305,335];function Xe(e,t){return new qe(`unit out of range`,`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function Ze(e,t,n){let r=new Date(Date.UTC(e,t-1,n));e<100&&e>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);let i=r.getUTCDay();return i===0?7:i}function Qe(e,t,n){return n+(Ot(e)?Ye:Je)[t-1]}function $e(e,t){let n=Ot(e)?Ye:Je,r=n.findIndex(e=>e<t),i=t-n[r];return{month:r+1,day:i}}function et(e,t){return(e-t+7)%7+1}function tt(e,t=4,n=1){let{year:r,month:i,day:a}=e,o=Qe(r,i,a),s=et(Ze(r,i,a),n),c=Math.floor((o-s+14-t)/7),l;return c<1?(l=r-1,c=Nt(l,t,n)):c>Nt(r,t,n)?(l=r+1,c=1):l=r,{weekYear:l,weekNumber:c,weekday:s,...Bt(e)}}function nt(e,t=4,n=1){let{weekYear:r,weekNumber:i,weekday:a}=e,o=et(Ze(r,1,t),n),s=kt(r),c=i*7+a-o-7+t,l;c<1?(l=r-1,c+=kt(l)):c>s?(l=r+1,c-=kt(r)):l=r;let{month:u,day:d}=$e(l,c);return{year:l,month:u,day:d,...Bt(e)}}function rt(e){let{year:t,month:n,day:r}=e;return{year:t,ordinal:Qe(t,n,r),...Bt(e)}}function it(e){let{year:t,ordinal:n}=e,{month:r,day:i}=$e(t,n);return{year:t,month:r,day:i,...Bt(e)}}function at(e,t){if(!H(e.localWeekday)||!H(e.localWeekNumber)||!H(e.localWeekYear)){if(!H(e.weekday)||!H(e.weekNumber)||!H(e.weekYear))throw new a(`Cannot mix locale-based week fields with ISO-based week fields`);return H(e.localWeekday)||(e.weekday=e.localWeekday),H(e.localWeekNumber)||(e.weekNumber=e.localWeekNumber),H(e.localWeekYear)||(e.weekYear=e.localWeekYear),delete e.localWeekday,delete e.localWeekNumber,delete e.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}else return{minDaysInFirstWeek:4,startOfWeek:1}}function ot(e,t=4,n=1){let r=dt(e.weekYear),i=xt(e.weekNumber,1,Nt(e.weekYear,t,n)),a=xt(e.weekday,1,7);return r?i?!a&&Xe(`weekday`,e.weekday):Xe(`week`,e.weekNumber):Xe(`weekYear`,e.weekYear)}function st(e){let t=dt(e.year),n=xt(e.ordinal,1,kt(e.year));return t?!n&&Xe(`ordinal`,e.ordinal):Xe(`year`,e.year)}function ct(e){let t=dt(e.year),n=xt(e.month,1,12),r=xt(e.day,1,At(e.year,e.month));return t?n?!r&&Xe(`day`,e.day):Xe(`month`,e.month):Xe(`year`,e.year)}function lt(e){let{hour:t,minute:n,second:r,millisecond:i}=e,a=xt(t,0,23)||t===24&&n===0&&r===0&&i===0,o=xt(n,0,59),s=xt(r,0,59),c=xt(i,0,999);return a?o?s?!c&&Xe(`millisecond`,i):Xe(`second`,r):Xe(`minute`,n):Xe(`hour`,t)}function H(e){return e===void 0}function ut(e){return typeof e==`number`}function dt(e){return typeof e==`number`&&e%1==0}function ft(e){return typeof e==`string`}function pt(e){return Object.prototype.toString.call(e)===`[object Date]`}function mt(){try{return typeof Intl<`u`&&!!Intl.RelativeTimeFormat}catch{return!1}}function ht(){try{return typeof Intl<`u`&&!!Intl.Locale&&(`weekInfo`in Intl.Locale.prototype||`getWeekInfo`in Intl.Locale.prototype)}catch{return!1}}function gt(e){return Array.isArray(e)?e:[e]}function _t(e,t,n){if(e.length!==0)return e.reduce((e,r)=>{let i=[t(r),r];return e&&n(e[0],i[0])===e[0]?e:i},null)[1]}function vt(e,t){return t.reduce((t,n)=>(t[n]=e[n],t),{})}function yt(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function bt(e){if(e==null)return null;if(typeof e!=`object`)throw new s(`Week settings must be an object`);if(!xt(e.firstDay,1,7)||!xt(e.minimalDays,1,7)||!Array.isArray(e.weekend)||e.weekend.some(e=>!xt(e,1,7)))throw new s(`Invalid week settings`);return{firstDay:e.firstDay,minimalDays:e.minimalDays,weekend:Array.from(e.weekend)}}function xt(e,t,n){return dt(e)&&e>=t&&e<=n}function St(e,t){return e-t*Math.floor(e/t)}function Ct(e,t=2){let n=e<0,r;return r=n?`-`+(``+-e).padStart(t,`0`):(``+e).padStart(t,`0`),r}function wt(e){if(!(H(e)||e===null||e===``))return parseInt(e,10)}function Tt(e){if(!(H(e)||e===null||e===``))return parseFloat(e)}function Et(e){if(!(H(e)||e===null||e===``)){let t=parseFloat(`0.`+e)*1e3;return Math.floor(t)}}function Dt(e,t,n=`round`){let r=10**t;switch(n){case`expand`:return e>0?Math.ceil(e*r)/r:Math.floor(e*r)/r;case`trunc`:return Math.trunc(e*r)/r;case`round`:return Math.round(e*r)/r;case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:throw RangeError(`Value rounding ${n} is out of range`)}}function Ot(e){return e%4==0&&(e%100!=0||e%400==0)}function kt(e){return Ot(e)?366:365}function At(e,t){let n=St(t-1,12)+1,r=e+(t-n)/12;return n===2?Ot(r)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][n-1]}function jt(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t),t.setUTCFullYear(e.year,e.month-1,e.day)),+t}function Mt(e,t,n){return-et(Ze(e,1,t),n)+t-1}function Nt(e,t=4,n=1){let r=Mt(e,t,n),i=Mt(e+1,t,n);return(kt(e)-r+i)/7}function Pt(e){return e>99?e:e>V.twoDigitCutoffYear?1900+e:2e3+e}function Ft(e,t,n,r=null){let i=new Date(e),a={hourCycle:`h23`,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`};r&&(a.timeZone=r);let o={timeZoneName:t,...a},s=new Intl.DateTimeFormat(n,o).formatToParts(i).find(e=>e.type.toLowerCase()===`timezonename`);return s?s.value:null}function It(e,t){let n=parseInt(e,10);Number.isNaN(n)&&(n=0);let r=parseInt(t,10)||0,i=n<0||Object.is(n,-0)?-r:r;return n*60+i}function Lt(e){let t=Number(e);if(typeof e==`boolean`||e===``||!Number.isFinite(t))throw new s(`Invalid unit value ${e}`);return t}function Rt(e,t){let n={};for(let r in e)if(yt(e,r)){let i=e[r];if(i==null)continue;n[t(r)]=Lt(i)}return n}function zt(e,t){let n=Math.trunc(Math.abs(e/60)),r=Math.trunc(Math.abs(e%60)),i=e>=0?`+`:`-`;switch(t){case`short`:return`${i}${Ct(n,2)}:${Ct(r,2)}`;case`narrow`:return`${i}${n}${r>0?`:${r}`:``}`;case`techie`:return`${i}${Ct(n,2)}${Ct(r,2)}`;default:throw RangeError(`Value format ${t} is out of range for property format`)}}function Bt(e){return vt(e,[`hour`,`minute`,`second`,`millisecond`])}var Vt=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],Ht=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],Ut=[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`];function Wt(e){switch(e){case`narrow`:return[...Ut];case`short`:return[...Ht];case`long`:return[...Vt];case`numeric`:return[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,`12`];case`2-digit`:return[`01`,`02`,`03`,`04`,`05`,`06`,`07`,`08`,`09`,`10`,`11`,`12`];default:return null}}var Gt=[`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`,`Sunday`],Kt=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],qt=[`M`,`T`,`W`,`T`,`F`,`S`,`S`];function Jt(e){switch(e){case`narrow`:return[...qt];case`short`:return[...Kt];case`long`:return[...Gt];case`numeric`:return[`1`,`2`,`3`,`4`,`5`,`6`,`7`];default:return null}}var Yt=[`AM`,`PM`],Xt=[`Before Christ`,`Anno Domini`],Zt=[`BC`,`AD`],Qt=[`B`,`A`];function $t(e){switch(e){case`narrow`:return[...Qt];case`short`:return[...Zt];case`long`:return[...Xt];default:return null}}function U(e){return Yt[e.hour<12?0:1]}function en(e,t){return Jt(t)[e.weekday-1]}function tn(e,t){return Wt(t)[e.month-1]}function nn(e,t){return $t(t)[e.year<0?0:1]}function rn(e,t,n=`always`,r=!1){let i={years:[`year`,`yr.`],quarters:[`quarter`,`qtr.`],months:[`month`,`mo.`],weeks:[`week`,`wk.`],days:[`day`,`day`,`days`],hours:[`hour`,`hr.`],minutes:[`minute`,`min.`],seconds:[`second`,`sec.`]},a=[`hours`,`minutes`,`seconds`].indexOf(e)===-1;if(n===`auto`&&a){let n=e===`days`;switch(t){case 1:return n?`tomorrow`:`next ${i[e][0]}`;case-1:return n?`yesterday`:`last ${i[e][0]}`;case 0:return n?`today`:`this ${i[e][0]}`}}let o=Object.is(t,-0)||t<0,s=Math.abs(t),c=s===1,l=i[e],u=r?c?l[1]:l[2]||l[1]:c?i[e][0]:e;return o?`${s} ${u} ago`:`in ${s} ${u}`}function an(e,t){let n=``;for(let r of e)r.literal?n+=r.val:n+=t(r.val);return n}var on={D:f,DD:p,DDD:h,DDDD:g,t:_,tt:v,ttt:y,tttt:b,T:x,TT:S,TTT:C,TTTT:w,f:T,ff:ee,fff:ne,ffff:O,F:E,FF:D,FFF:re,FFFF:k},sn=class e{static create(t,n={}){return new e(t,n)}static parseFormat(e){let t=null,n=``,r=!1,i=[];for(let a=0;a<e.length;a++){let o=e.charAt(a);o===`'`?((n.length>0||r)&&i.push({literal:r||/^\s+$/.test(n),val:n===``?`'`:n}),t=null,n=``,r=!r):r||o===t?n+=o:(n.length>0&&i.push({literal:/^\s+$/.test(n),val:n}),n=o,t=o)}return n.length>0&&i.push({literal:r||/^\s+$/.test(n),val:n}),i}static macroTokenToFormatOpts(e){return on[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,{...this.opts,...t}).format()}dtFormatter(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t})}formatDateTime(e,t){return this.dtFormatter(e,t).format()}formatDateTimeParts(e,t){return this.dtFormatter(e,t).formatToParts()}formatInterval(e,t){return this.dtFormatter(e.start,t).dtf.formatRange(e.start.toJSDate(),e.end.toJSDate())}resolvedOptions(e,t){return this.dtFormatter(e,t).resolvedOptions()}num(e,t=0,n=void 0){if(this.opts.forceSimple)return Ct(e,t);let r={...this.opts};return t>0&&(r.padTo=t),n&&(r.signDisplay=n),this.loc.numberFormatter(r).format(e)}formatDateTimeFromString(t,n){let r=this.loc.listingMode()===`en`,i=this.loc.outputCalendar&&this.loc.outputCalendar!==`gregory`,a=(e,n)=>this.loc.extract(t,e,n),o=e=>t.isOffsetFixed&&t.offset===0&&e.allowZ?`Z`:t.isValid?t.zone.formatOffset(t.ts,e.format):``,s=()=>r?U(t):a({hour:`numeric`,hourCycle:`h12`},`dayperiod`),c=(e,n)=>r?tn(t,e):a(n?{month:e}:{month:e,day:`numeric`},`month`),l=(e,n)=>r?en(t,e):a(n?{weekday:e}:{weekday:e,month:`long`,day:`numeric`},`weekday`),u=n=>{let r=e.macroTokenToFormatOpts(n);return r?this.formatWithSystemDefault(t,r):n},d=e=>r?nn(t,e):a({era:e},`era`);return an(e.parseFormat(n),e=>{switch(e){case`S`:return this.num(t.millisecond);case`u`:case`SSS`:return this.num(t.millisecond,3);case`s`:return this.num(t.second);case`ss`:return this.num(t.second,2);case`uu`:return this.num(Math.floor(t.millisecond/10),2);case`uuu`:return this.num(Math.floor(t.millisecond/100));case`m`:return this.num(t.minute);case`mm`:return this.num(t.minute,2);case`h`:return this.num(t.hour%12==0?12:t.hour%12);case`hh`:return this.num(t.hour%12==0?12:t.hour%12,2);case`H`:return this.num(t.hour);case`HH`:return this.num(t.hour,2);case`Z`:return o({format:`narrow`,allowZ:this.opts.allowZ});case`ZZ`:return o({format:`short`,allowZ:this.opts.allowZ});case`ZZZ`:return o({format:`techie`,allowZ:this.opts.allowZ});case`ZZZZ`:return t.zone.offsetName(t.ts,{format:`short`,locale:this.loc.locale});case`ZZZZZ`:return t.zone.offsetName(t.ts,{format:`long`,locale:this.loc.locale});case`z`:return t.zoneName;case`a`:return s();case`d`:return i?a({day:`numeric`},`day`):this.num(t.day);case`dd`:return i?a({day:`2-digit`},`day`):this.num(t.day,2);case`c`:return this.num(t.weekday);case`ccc`:return l(`short`,!0);case`cccc`:return l(`long`,!0);case`ccccc`:return l(`narrow`,!0);case`E`:return this.num(t.weekday);case`EEE`:return l(`short`,!1);case`EEEE`:return l(`long`,!1);case`EEEEE`:return l(`narrow`,!1);case`L`:return i?a({month:`numeric`,day:`numeric`},`month`):this.num(t.month);case`LL`:return i?a({month:`2-digit`,day:`numeric`},`month`):this.num(t.month,2);case`LLL`:return c(`short`,!0);case`LLLL`:return c(`long`,!0);case`LLLLL`:return c(`narrow`,!0);case`M`:return i?a({month:`numeric`},`month`):this.num(t.month);case`MM`:return i?a({month:`2-digit`},`month`):this.num(t.month,2);case`MMM`:return c(`short`,!1);case`MMMM`:return c(`long`,!1);case`MMMMM`:return c(`narrow`,!1);case`y`:return i?a({year:`numeric`},`year`):this.num(t.year);case`yy`:return i?a({year:`2-digit`},`year`):this.num(t.year.toString().slice(-2),2);case`yyyy`:return i?a({year:`numeric`},`year`):this.num(t.year,4);case`yyyyyy`:return i?a({year:`numeric`},`year`):this.num(t.year,6);case`G`:return d(`short`);case`GG`:return d(`long`);case`GGGGG`:return d(`narrow`);case`kk`:return this.num(t.weekYear.toString().slice(-2),2);case`kkkk`:return this.num(t.weekYear,4);case`W`:return this.num(t.weekNumber);case`WW`:return this.num(t.weekNumber,2);case`n`:return this.num(t.localWeekNumber);case`nn`:return this.num(t.localWeekNumber,2);case`ii`:return this.num(t.localWeekYear.toString().slice(-2),2);case`iiii`:return this.num(t.localWeekYear,4);case`o`:return this.num(t.ordinal);case`ooo`:return this.num(t.ordinal,3);case`q`:return this.num(t.quarter);case`qq`:return this.num(t.quarter,2);case`X`:return this.num(Math.floor(t.ts/1e3));case`x`:return this.num(t.ts);default:return u(e)}})}formatDurationFromString(t,n){let r=this.opts.signMode===`negativeLargestOnly`?-1:1,i=e=>{switch(e[0]){case`S`:return`milliseconds`;case`s`:return`seconds`;case`m`:return`minutes`;case`h`:return`hours`;case`d`:return`days`;case`w`:return`weeks`;case`M`:return`months`;case`y`:return`years`;default:return null}},a=(e,t)=>n=>{let a=i(n);if(a){let i=t.isNegativeDuration&&a!==t.largestUnit?r:1,o;return o=this.opts.signMode===`negativeLargestOnly`&&a!==t.largestUnit?`never`:this.opts.signMode===`all`?`always`:`auto`,this.num(e.get(a)*i,n.length,o)}else return n},o=e.parseFormat(n),s=o.reduce((e,{literal:t,val:n})=>t?e:e.concat(n),[]),c=t.shiftTo(...s.map(i).filter(e=>e));return an(o,a(c,{isNegativeDuration:c<0,largestUnit:Object.keys(c.values)[0]}))}},cn=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function ln(...e){let t=e.reduce((e,t)=>e+t.source,``);return RegExp(`^${t}$`)}function un(...e){return t=>e.reduce(([e,n,r],i)=>{let[a,o,s]=i(t,r);return[{...e,...a},o||n,s]},[{},null,1]).slice(0,2)}function dn(e,...t){if(e==null)return[null,null];for(let[n,r]of t){let t=n.exec(e);if(t)return r(t)}return[null,null]}function fn(...e){return(t,n)=>{let r={},i;for(i=0;i<e.length;i++)r[e[i]]=wt(t[n+i]);return[r,null,n+i]}}var W=/(?:([Zz])|([+-]\d\d)(?::?(\d\d))?)/,pn=`(?:${W.source}?(?:\\[(${cn.source})\\])?)?`,mn=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,hn=RegExp(`${mn.source}${pn}`),gn=RegExp(`(?:[Tt]${hn.source})?`),_n=/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,vn=/(\d{4})-?W(\d\d)(?:-?(\d))?/,yn=/(\d{4})-?(\d{3})/,bn=fn(`weekYear`,`weekNumber`,`weekDay`),xn=fn(`year`,`ordinal`),Sn=/(\d{4})-(\d\d)-(\d\d)/,Cn=RegExp(`${mn.source} ?(?:${W.source}|(${cn.source}))?`),wn=RegExp(`(?: ${Cn.source})?`);function Tn(e,t,n){let r=e[t];return H(r)?n:wt(r)}function En(e,t){return[{year:Tn(e,t),month:Tn(e,t+1,1),day:Tn(e,t+2,1)},null,t+3]}function Dn(e,t){return[{hours:Tn(e,t,0),minutes:Tn(e,t+1,0),seconds:Tn(e,t+2,0),milliseconds:Et(e[t+3])},null,t+4]}function G(e,t){let n=!e[t]&&!e[t+1],r=It(e[t+1],e[t+2]);return[{},n?null:je.instance(r),t+3]}function On(e,t){return[{},e[t]?le.create(e[t]):null,t+1]}var kn=RegExp(`^T?${mn.source}$`),K=/^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;function An(e){let[t,n,r,i,a,o,s,c,l]=e,u=t[0]===`-`,d=c&&c[0]===`-`,f=(e,t=!1)=>e!==void 0&&(t||e&&u)?-e:e;return[{years:f(Tt(n)),months:f(Tt(r)),weeks:f(Tt(i)),days:f(Tt(a)),hours:f(Tt(o)),minutes:f(Tt(s)),seconds:f(Tt(c),c===`-0`),milliseconds:f(Et(l),d)}]}var jn={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Mn(e,t,n,r,i,a,o){let s={year:t.length===2?Pt(wt(t)):wt(t),month:Ht.indexOf(n)+1,day:wt(r),hour:wt(i),minute:wt(a)};return o&&(s.second=wt(o)),e&&(s.weekday=e.length>3?Gt.indexOf(e)+1:Kt.indexOf(e)+1),s}var Nn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Pn(e){let[,t,n,r,i,a,o,s,c,l,u,d]=e,f=Mn(t,i,r,n,a,o,s),p;return p=c?jn[c]:l?0:It(u,d),[f,new je(p)]}function Fn(e){return e.replace(/\([^()]*\)|[\n\t]/g,` `).replace(/(\s\s+)/g,` `).trim()}var In=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Ln=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Rn=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function zn(e){let[,t,n,r,i,a,o,s]=e;return[Mn(t,i,r,n,a,o,s),je.utcInstance]}function Bn(e){let[,t,n,r,i,a,o,s]=e;return[Mn(t,s,n,r,i,a,o),je.utcInstance]}var Vn=ln(_n,gn),Hn=ln(vn,gn),Un=ln(yn,gn),Wn=ln(hn),Gn=un(En,Dn,G,On),q=un(bn,Dn,G,On),Kn=un(xn,Dn,G,On),qn=un(Dn,G,On);function Jn(e){return dn(e,[Vn,Gn],[Hn,q],[Un,Kn],[Wn,qn])}function Yn(e){return dn(Fn(e),[Nn,Pn])}function Xn(e){return dn(e,[In,zn],[Ln,zn],[Rn,Bn])}function J(e){return dn(e,[K,An])}var Zn=un(Dn);function Qn(e){return dn(e,[kn,Zn])}var $n=ln(Sn,wn),er=ln(Cn),tr=un(Dn,G,On);function nr(e){return dn(e,[$n,Gn],[er,tr])}var rr=`Invalid Duration`,ir={weeks:{days:7,hours:168,minutes:10080,seconds:10080*60,milliseconds:10080*60*1e3},days:{hours:24,minutes:1440,seconds:1440*60,milliseconds:1440*60*1e3},hours:{minutes:60,seconds:3600,milliseconds:3600*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},ar={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:2184*60,seconds:2184*60*60,milliseconds:2184*60*60*1e3},months:{weeks:4,days:30,hours:720,minutes:720*60,seconds:720*60*60,milliseconds:720*60*60*1e3},...ir},or=146097/400,sr=146097/4800,cr={years:{quarters:4,months:12,weeks:or/7,days:or,hours:or*24,minutes:or*24*60,seconds:or*24*60*60,milliseconds:or*24*60*60*1e3},quarters:{months:3,weeks:or/28,days:or/4,hours:or*24/4,minutes:or*24*60/4,seconds:or*24*60*60/4,milliseconds:or*24*60*60*1e3/4},months:{weeks:sr/7,days:sr,hours:sr*24,minutes:sr*24*60,seconds:sr*24*60*60,milliseconds:sr*24*60*60*1e3},...ir},lr=[`years`,`quarters`,`months`,`weeks`,`days`,`hours`,`minutes`,`seconds`,`milliseconds`],ur=lr.slice(0).reverse();function dr(e,t,n=!1){return new Y({values:n?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix})}function fr(e,t){let n=t.milliseconds??0;for(let r of ur.slice(1))t[r]&&(n+=t[r]*e[r].milliseconds);return n}function pr(e,t){let n=fr(e,t)<0?-1:1;lr.reduceRight((r,i)=>{if(H(t[i]))return r;if(r){let a=t[r]*n,o=e[i][r],s=Math.floor(a/o);t[i]+=s*n,t[r]-=s*o*n}return i},null),lr.reduce((n,r)=>{if(H(t[r]))return n;if(n){let i=t[n]%1;t[n]-=i,t[r]+=i*e[n][r]}return r},null)}function mr(e){let t={};for(let[n,r]of Object.entries(e))r!==0&&(t[n]=r);return t}var Y=class e{constructor(e){let t=e.conversionAccuracy===`longterm`||!1,n=t?cr:ar;e.matrix&&(n=e.matrix),this.values=e.values,this.loc=e.loc||R.create(),this.conversionAccuracy=t?`longterm`:`casual`,this.invalid=e.invalid||null,this.matrix=n,this.isLuxonDuration=!0}static fromMillis(t,n){return e.fromObject({milliseconds:t},n)}static fromObject(t,n={}){if(typeof t!=`object`||!t)throw new s(`Duration.fromObject: argument expected to be an object, got ${t===null?`null`:typeof t}`);return new e({values:Rt(t,e.normalizeUnit),loc:R.fromObject(n),conversionAccuracy:n.conversionAccuracy,matrix:n.matrix})}static fromDurationLike(t){if(ut(t))return e.fromMillis(t);if(e.isDuration(t))return t;if(typeof t==`object`)return e.fromObject(t);throw new s(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,n){let[r]=J(t);return r?e.fromObject(r,n):e.invalid(`unparsable`,`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,n){let[r]=Qn(t);return r?e.fromObject(r,n):e.invalid(`unparsable`,`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,n=null){if(!t)throw new s(`need to specify a reason the Duration is invalid`);let r=t instanceof qe?t:new qe(t,n);if(V.throwOnInvalid)throw new i(r);return new e({invalid:r})}static normalizeUnit(e){let t={year:`years`,years:`years`,quarter:`quarters`,quarters:`quarters`,month:`months`,months:`months`,week:`weeks`,weeks:`weeks`,day:`days`,days:`days`,hour:`hours`,hours:`hours`,minute:`minutes`,minutes:`minutes`,second:`seconds`,seconds:`seconds`,millisecond:`milliseconds`,milliseconds:`milliseconds`}[e&&e.toLowerCase()];if(!t)throw new o(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){let n={...t,floor:t.round!==!1&&t.floor!==!1};return this.isValid?sn.create(this.loc,n).formatDurationFromString(this,e):rr}toHuman(e={}){if(!this.isValid)return rr;let t=e.showZeros!==!1,n=lr.map(n=>{let r=this.values[n];return H(r)||r===0&&!t?null:this.loc.numberFormatter({style:`unit`,unitDisplay:`long`,...e,unit:n.slice(0,-1)}).format(r)}).filter(e=>e);return this.loc.listFormatter({type:`conjunction`,style:e.listStyle||`narrow`,...e}).format(n)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e=`P`;return this.years!==0&&(e+=this.years+`Y`),(this.months!==0||this.quarters!==0)&&(e+=this.months+this.quarters*3+`M`),this.weeks!==0&&(e+=this.weeks+`W`),this.days!==0&&(e+=this.days+`D`),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(e+=`T`),this.hours!==0&&(e+=this.hours+`H`),this.minutes!==0&&(e+=this.minutes+`M`),(this.seconds!==0||this.milliseconds!==0)&&(e+=Dt(this.seconds+this.milliseconds/1e3,3)+`S`),e===`P`&&(e+=`T0S`),e}toISOTime(e={}){if(!this.isValid)return null;let t=this.toMillis();return t<0||t>=864e5?null:(e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:`extended`,...e,includeOffset:!1},_i.fromMillis(t,{zone:`UTC`}).toISOTime(e))}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for(`nodejs.util.inspect.custom`)](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?fr(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;let n=e.fromDurationLike(t),r={};for(let e of lr)(yt(n.values,e)||yt(this.values,e))&&(r[e]=n.get(e)+this.get(e));return dr(this,{values:r},!0)}minus(t){if(!this.isValid)return this;let n=e.fromDurationLike(t);return this.plus(n.negate())}mapUnits(e){if(!this.isValid)return this;let t={};for(let n of Object.keys(this.values))t[n]=Lt(e(this.values[n],n));return dr(this,{values:t},!0)}get(t){return this[e.normalizeUnit(t)]}set(t){if(!this.isValid)return this;let n={...this.values,...Rt(t,e.normalizeUnit)};return dr(this,{values:n})}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:n,matrix:r}={}){let i={loc:this.loc.clone({locale:e,numberingSystem:t}),matrix:r,conversionAccuracy:n};return dr(this,i)}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;let e=this.toObject();return pr(this.matrix,e),dr(this,{values:e},!0)}rescale(){if(!this.isValid)return this;let e=mr(this.normalize().shiftToAll().toObject());return dr(this,{values:e},!0)}shiftTo(...t){if(!this.isValid||t.length===0)return this;t=t.map(t=>e.normalizeUnit(t));let n={},r={},i=this.toObject(),a;for(let e of lr)if(t.indexOf(e)>=0){a=e;let t=0;for(let n in r)t+=this.matrix[n][e]*r[n],r[n]=0;ut(i[e])&&(t+=i[e]);let o=Math.trunc(t);n[e]=o,r[e]=(t*1e3-o*1e3)/1e3}else ut(i[e])&&(r[e]=i[e]);for(let e in r)r[e]!==0&&(n[a]+=e===a?r[e]:r[e]/this.matrix[a][e]);return pr(this.matrix,n),dr(this,{values:n},!0)}shiftToAll(){return this.isValid?this.shiftTo(`years`,`months`,`weeks`,`days`,`hours`,`minutes`,`seconds`,`milliseconds`):this}negate(){if(!this.isValid)return this;let e={};for(let t of Object.keys(this.values))e[t]=this.values[t]===0?0:-this.values[t];return dr(this,{values:e},!0)}removeZeros(){if(!this.isValid)return this;let e=mr(this.values);return dr(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid||!this.loc.equals(e.loc))return!1;function t(e,t){return e===void 0||e===0?t===void 0||t===0:e===t}for(let n of lr)if(!t(this.values[n],e.values[n]))return!1;return!0}},hr=`Invalid Interval`;function gr(e,t){return!e||!e.isValid?X.invalid(`missing or invalid start`):!t||!t.isValid?X.invalid(`missing or invalid end`):t<e?X.invalid(`end before start`,`The end of an interval must be after its start, but you had start=${e.toISO()} and end=${t.toISO()}`):null}var X=class e{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(t,n=null){if(!t)throw new s(`need to specify a reason the Interval is invalid`);let i=t instanceof qe?t:new qe(t,n);if(V.throwOnInvalid)throw new r(i);return new e({invalid:i})}static fromDateTimes(t,n){let r=vi(t),i=vi(n);return gr(r,i)??new e({start:r,end:i})}static after(t,n){let r=Y.fromDurationLike(n),i=vi(t);return e.fromDateTimes(i,i.plus(r))}static before(t,n){let r=Y.fromDurationLike(n),i=vi(t);return e.fromDateTimes(i.minus(r),i)}static fromISO(t,n){let[r,i]=(t||``).split(`/`,2);if(r&&i){let t,a;try{t=_i.fromISO(r,n),a=t.isValid}catch{a=!1}let o,s;try{o=_i.fromISO(i,n),s=o.isValid}catch{s=!1}if(a&&s)return e.fromDateTimes(t,o);if(a){let r=Y.fromISO(i,n);if(r.isValid)return e.after(t,r)}else if(s){let t=Y.fromISO(r,n);if(t.isValid)return e.before(o,t)}}return e.invalid(`unparsable`,`the input "${t}" can't be parsed as ISO 8601`)}static isInterval(e){return e&&e.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get lastDateTime(){return this.isValid&&this.e?this.e.minus(1):null}get isValid(){return this.invalidReason===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(e=`milliseconds`){return this.isValid?this.toDuration(e).get(e):NaN}count(e=`milliseconds`,t){if(!this.isValid)return NaN;let n=this.start.startOf(e,t),r;return r=t!=null&&t.useLocaleWeeks?this.end.reconfigure({locale:n.locale}):this.end,r=r.startOf(e,t),Math.floor(r.diff(n,e).get(e))+(r.valueOf()!==this.end.valueOf())}hasSame(e){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,e):!1}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(e){return this.isValid?this.s>e:!1}isBefore(e){return this.isValid?this.e<=e:!1}contains(e){return this.isValid?this.s<=e&&this.e>e:!1}set({start:t,end:n}={}){return this.isValid?e.fromDateTimes(t||this.s,n||this.e):this}splitAt(...t){if(!this.isValid)return[];let n=t.map(vi).filter(e=>this.contains(e)).sort((e,t)=>e.toMillis()-t.toMillis()),r=[],{s:i}=this,a=0;for(;i<this.e;){let t=n[a]||this.e,o=+t>+this.e?this.e:t;r.push(e.fromDateTimes(i,o)),i=o,a+=1}return r}splitBy(t){let n=Y.fromDurationLike(t);if(!this.isValid||!n.isValid||n.as(`milliseconds`)===0)return[];let{s:r}=this,i=1,a,o=[];for(;r<this.e;){let t=this.start.plus(n.mapUnits(e=>e*i));a=+t>+this.e?this.e:t,o.push(e.fromDateTimes(r,a)),r=a,i+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s<e.e}abutsStart(e){return this.isValid?+this.e==+e.s:!1}abutsEnd(e){return this.isValid?+e.e==+this.s:!1}engulfs(e){return this.isValid?this.s<=e.s&&this.e>=e.e:!1}equals(e){return!this.isValid||!e.isValid?!1:this.s.equals(e.s)&&this.e.equals(e.e)}intersection(t){if(!this.isValid)return this;let n=this.s>t.s?this.s:t.s,r=this.e<t.e?this.e:t.e;return n>=r?null:e.fromDateTimes(n,r)}union(t){if(!this.isValid)return this;let n=this.s<t.s?this.s:t.s,r=this.e>t.e?this.e:t.e;return e.fromDateTimes(n,r)}static merge(e){let[t,n]=e.sort((e,t)=>e.s-t.s).reduce(([e,t],n)=>t?t.overlaps(n)||t.abutsStart(n)?[e,t.union(n)]:[e.concat([t]),n]:[e,n],[[],null]);return n&&t.push(n),t}static xor(t){let n=null,r=0,i=[],a=t.map(e=>[{time:e.s,type:`s`},{time:e.e,type:`e`}]),o=Array.prototype.concat(...a).sort((e,t)=>e.time-t.time);for(let t of o)r+=t.type===`s`?1:-1,r===1?n=t.time:(n&&+n!=+t.time&&i.push(e.fromDateTimes(n,t.time)),n=null);return e.merge(i)}difference(...t){return e.xor([this].concat(t)).map(e=>this.intersection(e)).filter(e=>e&&!e.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:hr}[Symbol.for(`nodejs.util.inspect.custom`)](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(e=f,t={}){return this.isValid?sn.create(this.s.loc.clone(t),e).formatInterval(this):hr}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:hr}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:hr}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:hr}toFormat(e,{separator:t=` – `}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:hr}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):Y.invalid(this.invalidReason)}mapEndpoints(t){return e.fromDateTimes(t(this.s),t(this.e))}},_r=class{static hasDST(e=V.defaultZone){let t=_i.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return le.isValidZone(e)}static normalizeZone(e){return Ne(e,V.defaultZone)}static getStartOfWeek({locale:e=null,locObj:t=null}={}){return(t||R.create(e)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:e=null,locObj:t=null}={}){return(t||R.create(e)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:e=null,locObj:t=null}={}){return(t||R.create(e)).getWeekendDays().slice()}static months(e=`long`,{locale:t=null,numberingSystem:n=null,locObj:r=null,outputCalendar:i=`gregory`}={}){return(r||R.create(t,n,i)).months(e)}static monthsFormat(e=`long`,{locale:t=null,numberingSystem:n=null,locObj:r=null,outputCalendar:i=`gregory`}={}){return(r||R.create(t,n,i)).months(e,!0)}static weekdays(e=`long`,{locale:t=null,numberingSystem:n=null,locObj:r=null}={}){return(r||R.create(t,n,null)).weekdays(e)}static weekdaysFormat(e=`long`,{locale:t=null,numberingSystem:n=null,locObj:r=null}={}){return(r||R.create(t,n,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return R.create(e).meridiems()}static eras(e=`short`,{locale:t=null}={}){return R.create(t,null,`gregory`).eras(e)}static features(){return{relative:mt(),localeWeek:ht()}}};function vr(e,t){let n=e=>e.toUTC(0,{keepLocalTime:!0}).startOf(`day`).valueOf(),r=n(t)-n(e);return Math.floor(Y.fromMillis(r).as(`days`))}function yr(e,t,n){let r=[[`years`,(e,t)=>t.year-e.year],[`quarters`,(e,t)=>t.quarter-e.quarter+(t.year-e.year)*4],[`months`,(e,t)=>t.month-e.month+(t.year-e.year)*12],[`weeks`,(e,t)=>{let n=vr(e,t);return(n-n%7)/7}],[`days`,vr]],i={},a=e,o,s;for(let[c,l]of r)n.indexOf(c)>=0&&(o=c,i[c]=l(e,t),s=a.plus(i),s>t?(i[c]--,e=a.plus(i),e>t&&(s=e,i[c]--,e=a.plus(i))):e=s);return[e,i,s,o]}function br(e,t,n,r){let[i,a,o,s]=yr(e,t,n),c=t-i,l=n.filter(e=>[`hours`,`minutes`,`seconds`,`milliseconds`].indexOf(e)>=0);l.length===0&&(o<t&&(o=i.plus({[s]:1})),o!==i&&(a[s]=(a[s]||0)+c/(o-i)));let u=Y.fromObject(a,r);return l.length>0?Y.fromMillis(c,r).shiftTo(...l).plus(u):u}var xr=`missing Intl.DateTimeFormat.formatToParts support`;function Sr(e,t=e=>e){return{regex:e,deser:([e])=>t(Ie(e))}}var Cr=`[ \xA0]`,wr=new RegExp(Cr,`g`);function Tr(e){return e.replace(/\./g,`\\.?`).replace(wr,Cr)}function Er(e){return e.replace(/\./g,``).replace(wr,` `).toLowerCase()}function Dr(e,t){return e===null?null:{regex:RegExp(e.map(Tr).join(`|`)),deser:([n])=>e.findIndex(e=>Er(n)===Er(e))+t}}function Or(e,t){return{regex:e,deser:([,e,t])=>It(e,t),groups:t}}function kr(e){return{regex:e,deser:([e])=>e}}function Ar(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,`\\$&`)}function jr(e,t){let n=ze(t),r=ze(t,`{2}`),i=ze(t,`{3}`),a=ze(t,`{4}`),o=ze(t,`{6}`),s=ze(t,`{1,2}`),c=ze(t,`{1,3}`),l=ze(t,`{1,6}`),u=ze(t,`{1,9}`),d=ze(t,`{2,4}`),f=ze(t,`{4,6}`),p=e=>({regex:RegExp(Ar(e.val)),deser:([e])=>e,literal:!0}),m=(m=>{if(e.literal)return p(m);switch(m.val){case`G`:return Dr(t.eras(`short`),0);case`GG`:return Dr(t.eras(`long`),0);case`y`:return Sr(l);case`yy`:return Sr(d,Pt);case`yyyy`:return Sr(a);case`yyyyy`:return Sr(f);case`yyyyyy`:return Sr(o);case`M`:return Sr(s);case`MM`:return Sr(r);case`MMM`:return Dr(t.months(`short`,!0),1);case`MMMM`:return Dr(t.months(`long`,!0),1);case`L`:return Sr(s);case`LL`:return Sr(r);case`LLL`:return Dr(t.months(`short`,!1),1);case`LLLL`:return Dr(t.months(`long`,!1),1);case`d`:return Sr(s);case`dd`:return Sr(r);case`o`:return Sr(c);case`ooo`:return Sr(i);case`HH`:return Sr(r);case`H`:return Sr(s);case`hh`:return Sr(r);case`h`:return Sr(s);case`mm`:return Sr(r);case`m`:return Sr(s);case`q`:return Sr(s);case`qq`:return Sr(r);case`s`:return Sr(s);case`ss`:return Sr(r);case`S`:return Sr(c);case`SSS`:return Sr(i);case`u`:return kr(u);case`uu`:return kr(s);case`uuu`:return Sr(n);case`a`:return Dr(t.meridiems(),0);case`kkkk`:return Sr(a);case`kk`:return Sr(d,Pt);case`W`:return Sr(s);case`WW`:return Sr(r);case`E`:case`c`:return Sr(n);case`EEE`:return Dr(t.weekdays(`short`,!1),1);case`EEEE`:return Dr(t.weekdays(`long`,!1),1);case`ccc`:return Dr(t.weekdays(`short`,!0),1);case`cccc`:return Dr(t.weekdays(`long`,!0),1);case`Z`:case`ZZ`:return Or(RegExp(`([+-]${s.source})(?::(${r.source}))?`),2);case`ZZZ`:return Or(RegExp(`([+-]${s.source})(${r.source})?`),2);case`z`:return kr(/[a-z_+-/]{1,256}?/i);case` `:return kr(/[^\S\n\r]/);default:return p(m)}})(e)||{invalidReason:xr};return m.token=e,m}var Mr={year:{"2-digit":`yy`,numeric:`yyyyy`},month:{numeric:`M`,"2-digit":`MM`,short:`MMM`,long:`MMMM`},day:{numeric:`d`,"2-digit":`dd`},weekday:{short:`EEE`,long:`EEEE`},dayperiod:`a`,dayPeriod:`a`,hour12:{numeric:`h`,"2-digit":`hh`},hour24:{numeric:`H`,"2-digit":`HH`},minute:{numeric:`m`,"2-digit":`mm`},second:{numeric:`s`,"2-digit":`ss`},timeZoneName:{long:`ZZZZZ`,short:`ZZZ`}};function Nr(e,t,n){let{type:r,value:i}=e;if(r===`literal`){let e=/^\s+$/.test(i);return{literal:!e,val:e?` `:i}}let a=t[r],o=r;r===`hour`&&(o=t.hour12==null?t.hourCycle==null?n.hour12?`hour12`:`hour24`:t.hourCycle===`h11`||t.hourCycle===`h12`?`hour12`:`hour24`:t.hour12?`hour12`:`hour24`);let s=Mr[o];if(typeof s==`object`&&(s=s[a]),s)return{literal:!1,val:s}}function Pr(e){return[`^${e.map(e=>e.regex).reduce((e,t)=>`${e}(${t.source})`,``)}$`,e]}function Fr(e,t,n){let r=e.match(t);if(r){let e={},t=1;for(let i in n)if(yt(n,i)){let a=n[i],o=a.groups?a.groups+1:1;!a.literal&&a.token&&(e[a.token.val[0]]=a.deser(r.slice(t,t+o))),t+=o}return[r,e]}else return[r,{}]}function Z(e){let t=e=>{switch(e){case`S`:return`millisecond`;case`s`:return`second`;case`m`:return`minute`;case`h`:case`H`:return`hour`;case`d`:return`day`;case`o`:return`ordinal`;case`L`:case`M`:return`month`;case`y`:return`year`;case`E`:case`c`:return`weekday`;case`W`:return`weekNumber`;case`k`:return`weekYear`;case`q`:return`quarter`;default:return null}},n=null,r;return H(e.z)||(n=le.create(e.z)),H(e.Z)||(n||=new je(e.Z),r=e.Z),H(e.q)||(e.M=(e.q-1)*3+1),H(e.h)||(e.h<12&&e.a===1?e.h+=12:e.h===12&&e.a===0&&(e.h=0)),e.G===0&&e.y&&(e.y=-e.y),H(e.u)||(e.S=Et(e.u)),[Object.keys(e).reduce((n,r)=>{let i=t(r);return i&&(n[i]=e[r]),n},{}),n,r]}var Ir=null;function Q(){return Ir||=_i.fromMillis(1555555555555),Ir}function Lr(e,t){if(e.literal)return e;let n=Hr(sn.macroTokenToFormatOpts(e.val),t);return n==null||n.includes(void 0)?e:n}function Rr(e,t){return Array.prototype.concat(...e.map(e=>Lr(e,t)))}var zr=class{constructor(e,t){if(this.locale=e,this.format=t,this.tokens=Rr(sn.parseFormat(t),e),this.units=this.tokens.map(t=>jr(t,e)),this.disqualifyingUnit=this.units.find(e=>e.invalidReason),!this.disqualifyingUnit){let[e,t]=Pr(this.units);this.regex=RegExp(e,`i`),this.handlers=t}}explainFromTokens(e){if(this.isValid){let[t,n]=Fr(e,this.regex,this.handlers),[r,i,o]=n?Z(n):[null,null,void 0];if(yt(n,`a`)&&yt(n,`H`))throw new a(`Can't include meridiem when specifying 24-hour format`);return{input:e,tokens:this.tokens,regex:this.regex,rawMatches:t,matches:n,result:r,zone:i,specificOffset:o}}else return{input:e,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}};function Br(e,t,n){return new zr(e,n).explainFromTokens(t)}function Vr(e,t,n){let{result:r,zone:i,specificOffset:a,invalidReason:o}=Br(e,t,n);return[r,i,a,o]}function Hr(e,t){if(!e)return null;let n=sn.create(t,e).dtFormatter(Q()),r=n.formatToParts(),i=n.resolvedOptions();return r.map(t=>Nr(t,e,i))}var Ur=`Invalid DateTime`,Wr=864e13;function Gr(e){return new qe(`unsupported zone`,`the zone "${e.name}" is not supported`)}function Kr(e){return e.weekData===null&&(e.weekData=tt(e.c)),e.weekData}function qr(e){return e.localWeekData===null&&(e.localWeekData=tt(e.c,e.loc.getMinDaysInFirstWeek(),e.loc.getStartOfWeek())),e.localWeekData}function Jr(e,t){let n={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new _i({...n,...t,old:n})}function Yr(e,t,n){let r=e-t*60*1e3,i=n.offset(r);if(t===i)return[r,t];r-=(i-t)*60*1e3;let a=n.offset(r);return i===a?[r,i]:[e-Math.min(i,a)*60*1e3,Math.max(i,a)]}function Xr(e,t){e+=t*60*1e3;let n=new Date(e);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:n.getUTCHours(),minute:n.getUTCMinutes(),second:n.getUTCSeconds(),millisecond:n.getUTCMilliseconds()}}function Zr(e,t,n){return Yr(jt(e),t,n)}function Qr(e,t){let n=e.o,r=e.c.year+Math.trunc(t.years),i=e.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,a={...e.c,year:r,month:i,day:Math.min(e.c.day,At(r,i))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},o=Y.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as(`milliseconds`),[s,c]=Yr(jt(a),n,e.zone);return o!==0&&(s+=o,c=e.zone.offset(s)),{ts:s,o:c}}function $r(e,t,n,r,i,a){let{setZone:o,zone:s}=n;if(e&&Object.keys(e).length!==0||t){let r=t||s,i=_i.fromObject(e,{...n,zone:r,specificOffset:a});return o?i:i.setZone(s)}else return _i.invalid(new qe(`unparsable`,`the input "${i}" can't be parsed as ${r}`))}function ei(e,t,n=!0){return e.isValid?sn.create(R.create(`en-US`),{allowZ:n,forceSimple:!0}).formatDateTimeFromString(e,t):null}function ti(e,t,n){let r=e.c.year>9999||e.c.year<0,i=``;if(r&&e.c.year>=0&&(i+=`+`),i+=Ct(e.c.year,r?6:4),n===`year`)return i;if(t){if(i+=`-`,i+=Ct(e.c.month),n===`month`)return i;i+=`-`}else if(i+=Ct(e.c.month),n===`month`)return i;return i+=Ct(e.c.day),i}function ni(e,t,n,r,i,a,o){let s=!n||e.c.millisecond!==0||e.c.second!==0,c=``;switch(o){case`day`:case`month`:case`year`:break;default:if(c+=Ct(e.c.hour),o===`hour`)break;if(t){if(c+=`:`,c+=Ct(e.c.minute),o===`minute`)break;s&&(c+=`:`,c+=Ct(e.c.second))}else{if(c+=Ct(e.c.minute),o===`minute`)break;s&&(c+=Ct(e.c.second))}if(o===`second`)break;s&&(!r||e.c.millisecond!==0)&&(c+=`.`,c+=Ct(e.c.millisecond,3))}return i&&(e.isOffsetFixed&&e.offset===0&&!a?c+=`Z`:e.o<0?(c+=`-`,c+=Ct(Math.trunc(-e.o/60)),c+=`:`,c+=Ct(Math.trunc(-e.o%60))):(c+=`+`,c+=Ct(Math.trunc(e.o/60)),c+=`:`,c+=Ct(Math.trunc(e.o%60)))),a&&(c+=`[`+e.zone.ianaName+`]`),c}var ri={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},ii={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},ai={ordinal:1,hour:0,minute:0,second:0,millisecond:0},oi=[`year`,`month`,`day`,`hour`,`minute`,`second`,`millisecond`],si=[`weekYear`,`weekNumber`,`weekday`,`hour`,`minute`,`second`,`millisecond`],ci=[`year`,`ordinal`,`hour`,`minute`,`second`,`millisecond`];function li(e){let t={year:`year`,years:`year`,month:`month`,months:`month`,day:`day`,days:`day`,hour:`hour`,hours:`hour`,minute:`minute`,minutes:`minute`,quarter:`quarter`,quarters:`quarter`,second:`second`,seconds:`second`,millisecond:`millisecond`,milliseconds:`millisecond`,weekday:`weekday`,weekdays:`weekday`,weeknumber:`weekNumber`,weeksnumber:`weekNumber`,weeknumbers:`weekNumber`,weekyear:`weekYear`,weekyears:`weekYear`,ordinal:`ordinal`}[e.toLowerCase()];if(!t)throw new o(e);return t}function ui(e){switch(e.toLowerCase()){case`localweekday`:case`localweekdays`:return`localWeekday`;case`localweeknumber`:case`localweeknumbers`:return`localWeekNumber`;case`localweekyear`:case`localweekyears`:return`localWeekYear`;default:return li(e)}}function di(e){if(hi===void 0&&(hi=V.now()),e.type!==`iana`)return e.offset(hi);let t=e.name,n=gi.get(t);return n===void 0&&(n=e.offset(hi),gi.set(t,n)),n}function fi(e,t){let n=Ne(t.zone,V.defaultZone);if(!n.isValid)return _i.invalid(Gr(n));let r=R.fromObject(t),i,a;if(H(e.year))i=V.now();else{for(let t of oi)H(e[t])&&(e[t]=ri[t]);let t=ct(e)||lt(e);if(t)return _i.invalid(t);let r=di(n);[i,a]=Zr(e,r,n)}return new _i({ts:i,zone:n,loc:r,o:a})}function pi(e,t,n){let r=H(n.round)?!0:n.round,i=H(n.rounding)?`trunc`:n.rounding,a=(e,a)=>(e=Dt(e,r||n.calendary?0:2,n.calendary?`round`:i),t.loc.clone(n).relFormatter(n).format(e,a)),o=r=>n.calendary?t.hasSame(e,r)?0:t.startOf(r).diff(e.startOf(r),r).get(r):t.diff(e,r).get(r);if(n.unit)return a(o(n.unit),n.unit);for(let e of n.units){let t=o(e);if(Math.abs(t)>=1)return a(t,e)}return a(e>t?-0:0,n.units[n.units.length-1])}function mi(e){let t={},n;return e.length>0&&typeof e[e.length-1]==`object`?(t=e[e.length-1],n=Array.from(e).slice(0,e.length-1)):n=Array.from(e),[t,n]}var hi,gi=new Map,_i=class e{constructor(e){let t=e.zone||V.defaultZone,n=e.invalid||(Number.isNaN(e.ts)?new qe(`invalid input`):null)||(t.isValid?null:Gr(t));this.ts=H(e.ts)?V.now():e.ts;let r=null,i=null;if(!n)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[r,i]=[e.old.c,e.old.o];else{let a=ut(e.o)&&!e.old?e.o:t.offset(this.ts);r=Xr(this.ts,a),n=Number.isNaN(r.year)?new qe(`invalid input`):null,r=n?null:r,i=n?null:a}this._zone=t,this.loc=e.loc||R.create(),this.invalid=n,this.weekData=null,this.localWeekData=null,this.c=r,this.o=i,this.isLuxonDateTime=!0}static now(){return new e({})}static local(){let[e,t]=mi(arguments),[n,r,i,a,o,s,c]=t;return fi({year:n,month:r,day:i,hour:a,minute:o,second:s,millisecond:c},e)}static utc(){let[e,t]=mi(arguments),[n,r,i,a,o,s,c]=t;return e.zone=je.utcInstance,fi({year:n,month:r,day:i,hour:a,minute:o,second:s,millisecond:c},e)}static fromJSDate(t,n={}){let r=pt(t)?t.valueOf():NaN;if(Number.isNaN(r))return e.invalid(`invalid input`);let i=Ne(n.zone,V.defaultZone);return i.isValid?new e({ts:r,zone:i,loc:R.fromObject(n)}):e.invalid(Gr(i))}static fromMillis(t,n={}){if(!ut(t))throw new s(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`);return t<-864e13||t>Wr?e.invalid(`Timestamp out of range`):new e({ts:t,zone:Ne(n.zone,V.defaultZone),loc:R.fromObject(n)})}static fromSeconds(t,n={}){if(ut(t))return new e({ts:t*1e3,zone:Ne(n.zone,V.defaultZone),loc:R.fromObject(n)});throw new s(`fromSeconds requires a numerical input`)}static fromObject(t,n={}){t||={};let r=Ne(n.zone,V.defaultZone);if(!r.isValid)return e.invalid(Gr(r));let i=R.fromObject(n),o=Rt(t,ui),{minDaysInFirstWeek:s,startOfWeek:c}=at(o,i),l=V.now(),u=H(n.specificOffset)?r.offset(l):n.specificOffset,d=!H(o.ordinal),f=!H(o.year),p=!H(o.month)||!H(o.day),m=f||p,h=o.weekYear||o.weekNumber;if((m||d)&&h)throw new a(`Can't mix weekYear/weekNumber units with year/month/day or ordinals`);if(p&&d)throw new a(`Can't mix ordinal dates with month/day`);let g=h||o.weekday&&!m,_,v,y=Xr(l,u);g?(_=si,v=ii,y=tt(y,s,c)):d?(_=ci,v=ai,y=rt(y)):(_=oi,v=ri);let b=!1;for(let e of _){let t=o[e];H(t)?b?o[e]=v[e]:o[e]=y[e]:b=!0}let x=(g?ot(o,s,c):d?st(o):ct(o))||lt(o);if(x)return e.invalid(x);let[S,C]=Zr(g?nt(o,s,c):d?it(o):o,u,r),w=new e({ts:S,zone:r,o:C,loc:i});return o.weekday&&m&&t.weekday!==w.weekday?e.invalid(`mismatched weekday`,`you can't specify both a weekday of ${o.weekday} and a date of ${w.toISO()}`):w.isValid?w:e.invalid(w.invalid)}static fromISO(e,t={}){let[n,r]=Jn(e);return $r(n,r,t,`ISO 8601`,e)}static fromRFC2822(e,t={}){let[n,r]=Yn(e);return $r(n,r,t,`RFC 2822`,e)}static fromHTTP(e,t={}){let[n,r]=Xn(e);return $r(n,r,t,`HTTP`,t)}static fromFormat(t,n,r={}){if(H(t)||H(n))throw new s(`fromFormat requires an input string and a format`);let{locale:i=null,numberingSystem:a=null}=r,[o,c,l,u]=Vr(R.fromOpts({locale:i,numberingSystem:a,defaultToEN:!0}),t,n);return u?e.invalid(u):$r(o,c,r,`format ${n}`,t,l)}static fromString(t,n,r={}){return e.fromFormat(t,n,r)}static fromSQL(e,t={}){let[n,r]=nr(e);return $r(n,r,t,`SQL`,e)}static invalid(t,r=null){if(!t)throw new s(`need to specify a reason the DateTime is invalid`);let i=t instanceof qe?t:new qe(t,r);if(V.throwOnInvalid)throw new n(i);return new e({invalid:i})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}static parseFormatForOpts(e,t={}){let n=Hr(e,R.fromObject(t));return n?n.map(e=>e?e.val:null).join(``):null}static expandFormat(e,t={}){return Rr(sn.parseFormat(e),R.fromObject(t)).map(e=>e.val).join(``)}static resetCache(){hi=void 0,gi.clear()}get(e){return this[e]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Kr(this).weekYear:NaN}get weekNumber(){return this.isValid?Kr(this).weekNumber:NaN}get weekday(){return this.isValid?Kr(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?qr(this).weekday:NaN}get localWeekNumber(){return this.isValid?qr(this).weekNumber:NaN}get localWeekYear(){return this.isValid?qr(this).weekYear:NaN}get ordinal(){return this.isValid?rt(this.c).ordinal:NaN}get monthShort(){return this.isValid?_r.months(`short`,{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?_r.months(`long`,{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?_r.weekdays(`short`,{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?_r.weekdays(`long`,{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:`short`,locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:`long`,locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let e=864e5,t=6e4,n=jt(this.c),r=this.zone.offset(n-e),i=this.zone.offset(n+e),a=this.zone.offset(n-r*t),o=this.zone.offset(n-i*t);if(a===o)return[this];let s=n-a*t,c=n-o*t,l=Xr(s,a),u=Xr(c,o);return l.hour===u.hour&&l.minute===u.minute&&l.second===u.second&&l.millisecond===u.millisecond?[Jr(this,{ts:s}),Jr(this,{ts:c})]:[this]}get isInLeapYear(){return Ot(this.year)}get daysInMonth(){return At(this.year,this.month)}get daysInYear(){return this.isValid?kt(this.year):NaN}get weeksInWeekYear(){return this.isValid?Nt(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?Nt(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(e={}){let{locale:t,numberingSystem:n,calendar:r}=sn.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:n,outputCalendar:r}}toUTC(e=0,t={}){return this.setZone(je.instance(e),t)}toLocal(){return this.setZone(V.defaultZone)}setZone(t,{keepLocalTime:n=!1,keepCalendarTime:r=!1}={}){if(t=Ne(t,V.defaultZone),t.equals(this.zone))return this;if(t.isValid){let e=this.ts;if(n||r){let n=t.offset(this.ts),r=this.toObject();[e]=Zr(r,n,t)}return Jr(this,{ts:e,zone:t})}else return e.invalid(Gr(t))}reconfigure({locale:e,numberingSystem:t,outputCalendar:n}={}){let r=this.loc.clone({locale:e,numberingSystem:t,outputCalendar:n});return Jr(this,{loc:r})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;let t=Rt(e,ui),{minDaysInFirstWeek:n,startOfWeek:r}=at(t,this.loc),i=!H(t.weekYear)||!H(t.weekNumber)||!H(t.weekday),o=!H(t.ordinal),s=!H(t.year),c=!H(t.month)||!H(t.day),l=s||c,u=t.weekYear||t.weekNumber;if((l||o)&&u)throw new a(`Can't mix weekYear/weekNumber units with year/month/day or ordinals`);if(c&&o)throw new a(`Can't mix ordinal dates with month/day`);let d;i?d=nt({...tt(this.c,n,r),...t},n,r):H(t.ordinal)?(d={...this.toObject(),...t},H(t.day)&&(d.day=Math.min(At(d.year,d.month),d.day))):d=it({...rt(this.c),...t});let[f,p]=Zr(d,this.o,this.zone);return Jr(this,{ts:f,o:p})}plus(e){if(!this.isValid)return this;let t=Y.fromDurationLike(e);return Jr(this,Qr(this,t))}minus(e){if(!this.isValid)return this;let t=Y.fromDurationLike(e).negate();return Jr(this,Qr(this,t))}startOf(e,{useLocaleWeeks:t=!1}={}){if(!this.isValid)return this;let n={},r=Y.normalizeUnit(e);switch(r){case`years`:n.month=1;case`quarters`:case`months`:n.day=1;case`weeks`:case`days`:n.hour=0;case`hours`:n.minute=0;case`minutes`:n.second=0;case`seconds`:n.millisecond=0;break}if(r===`weeks`)if(t){let e=this.loc.getStartOfWeek(),{weekday:t}=this;t<e&&(n.weekNumber=this.weekNumber-1),n.weekday=e}else n.weekday=1;return r===`quarters`&&(n.month=(Math.ceil(this.month/3)-1)*3+1),this.set(n)}endOf(e,t){return this.isValid?this.plus({[e]:1}).startOf(e,t).minus(1):this}toFormat(e,t={}){return this.isValid?sn.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):Ur}toLocaleString(e=f,t={}){return this.isValid?sn.create(this.loc.clone(t),e).formatDateTime(this):Ur}toLocaleParts(e={}){return this.isValid?sn.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e=`extended`,suppressSeconds:t=!1,suppressMilliseconds:n=!1,includeOffset:r=!0,extendedZone:i=!1,precision:a=`milliseconds`}={}){if(!this.isValid)return null;a=li(a);let o=e===`extended`,s=ti(this,o,a);return oi.indexOf(a)>=3&&(s+=`T`),s+=ni(this,o,t,n,r,i,a),s}toISODate({format:e=`extended`,precision:t=`day`}={}){return this.isValid?ti(this,e===`extended`,li(t)):null}toISOWeekDate(){return ei(this,`kkkk-'W'WW-c`)}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:n=!0,includePrefix:r=!1,extendedZone:i=!1,format:a=`extended`,precision:o=`milliseconds`}={}){return this.isValid?(o=li(o),(r&&oi.indexOf(o)>=3?`T`:``)+ni(this,a===`extended`,t,e,n,i,o)):null}toRFC2822(){return ei(this,`EEE, dd LLL yyyy HH:mm:ss ZZZ`,!1)}toHTTP(){return ei(this.toUTC(),`EEE, dd LLL yyyy HH:mm:ss 'GMT'`)}toSQLDate(){return this.isValid?ti(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:n=!0}={}){let r=`HH:mm:ss.SSS`;return(t||e)&&(n&&(r+=` `),t?r+=`z`:e&&(r+=`ZZ`)),ei(this,r,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():Ur}[Symbol.for(`nodejs.util.inspect.custom`)](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};let t={...this.c};return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t=`milliseconds`,n={}){if(!this.isValid||!e.isValid)return Y.invalid(`created by diffing an invalid DateTime`);let r={locale:this.locale,numberingSystem:this.numberingSystem,...n},i=gt(t).map(Y.normalizeUnit),a=e.valueOf()>this.valueOf(),o=br(a?this:e,a?e:this,i,r);return a?o.negate():o}diffNow(t=`milliseconds`,n={}){return this.diff(e.now(),t,n)}until(e){return this.isValid?X.fromDateTimes(this,e):this}hasSame(e,t,n){if(!this.isValid)return!1;let r=e.valueOf(),i=this.setZone(e.zone,{keepLocalTime:!0});return i.startOf(t,n)<=r&&r<=i.endOf(t,n)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(t={}){if(!this.isValid)return null;let n=t.base||e.fromObject({},{zone:this.zone}),r=t.padding?this<n?-t.padding:t.padding:0,i=[`years`,`months`,`days`,`hours`,`minutes`,`seconds`],a=t.unit;return Array.isArray(t.unit)&&(i=t.unit,a=void 0),pi(n,this.plus(r),{...t,numeric:`always`,units:i,unit:a})}toRelativeCalendar(t={}){return this.isValid?pi(t.base||e.fromObject({},{zone:this.zone}),this,{...t,numeric:`auto`,units:[`years`,`months`,`days`],calendary:!0}):null}static min(...t){if(!t.every(e.isDateTime))throw new s(`min requires all arguments be DateTimes`);return _t(t,e=>e.valueOf(),Math.min)}static max(...t){if(!t.every(e.isDateTime))throw new s(`max requires all arguments be DateTimes`);return _t(t,e=>e.valueOf(),Math.max)}static fromFormatExplain(e,t,n={}){let{locale:r=null,numberingSystem:i=null}=n;return Br(R.fromOpts({locale:r,numberingSystem:i,defaultToEN:!0}),e,t)}static fromStringExplain(t,n,r={}){return e.fromFormatExplain(t,n,r)}static buildFormatParser(e,t={}){let{locale:n=null,numberingSystem:r=null}=t;return new zr(R.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0}),e)}static fromFormatParser(t,n,r={}){if(H(t)||H(n))throw new s(`fromFormatParser requires an input string and a format parser`);let{locale:i=null,numberingSystem:a=null}=r,o=R.fromOpts({locale:i,numberingSystem:a,defaultToEN:!0});if(!o.equals(n.locale))throw new s(`fromFormatParser called with a locale of ${o}, but the format parser was created for ${n.locale}`);let{result:c,zone:l,specificOffset:u,invalidReason:d}=n.explainFromTokens(t);return d?e.invalid(d):$r(c,l,r,`format ${n.format}`,t,u)}static get DATE_SHORT(){return f}static get DATE_MED(){return p}static get DATE_MED_WITH_WEEKDAY(){return m}static get DATE_FULL(){return h}static get DATE_HUGE(){return g}static get TIME_SIMPLE(){return _}static get TIME_WITH_SECONDS(){return v}static get TIME_WITH_SHORT_OFFSET(){return y}static get TIME_WITH_LONG_OFFSET(){return b}static get TIME_24_SIMPLE(){return x}static get TIME_24_WITH_SECONDS(){return S}static get TIME_24_WITH_SHORT_OFFSET(){return C}static get TIME_24_WITH_LONG_OFFSET(){return w}static get DATETIME_SHORT(){return T}static get DATETIME_SHORT_WITH_SECONDS(){return E}static get DATETIME_MED(){return ee}static get DATETIME_MED_WITH_SECONDS(){return D}static get DATETIME_MED_WITH_WEEKDAY(){return te}static get DATETIME_FULL(){return ne}static get DATETIME_FULL_WITH_SECONDS(){return re}static get DATETIME_HUGE(){return O}static get DATETIME_HUGE_WITH_SECONDS(){return k}};function vi(e){if(_i.isDateTime(e))return e;if(e&&e.valueOf&&ut(e.valueOf()))return _i.fromJSDate(e);if(e&&typeof e==`object`)return _i.fromObject(e);throw new s(`Unknown datetime argument: ${e}, of type ${typeof e}`)}e.DateTime=_i,e.Duration=Y,e.FixedOffsetZone=je,e.IANAZone=le,e.Info=_r,e.Interval=X,e.InvalidZone=Me,e.Settings=V,e.SystemZone=ae,e.VERSION=`3.7.2`,e.Zone=A})),XN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronDate=e.DAYS_IN_MONTH=e.DateMathOp=e.TimeUnit=void 0;var t=YN(),n;(function(e){e.Second=`Second`,e.Minute=`Minute`,e.Hour=`Hour`,e.Day=`Day`,e.Month=`Month`,e.Year=`Year`})(n||(e.TimeUnit=n={}));var r;(function(e){e.Add=`Add`,e.Subtract=`Subtract`})(r||(e.DateMathOp=r={})),e.DAYS_IN_MONTH=Object.freeze([31,29,31,30,31,30,31,31,30,31,30,31]);var i=class i{#e;#t=null;#n=null;#r={add:{[n.Year]:this.addYear.bind(this),[n.Month]:this.addMonth.bind(this),[n.Day]:this.addDay.bind(this),[n.Hour]:this.addHour.bind(this),[n.Minute]:this.addMinute.bind(this),[n.Second]:this.addSecond.bind(this)},subtract:{[n.Year]:this.subtractYear.bind(this),[n.Month]:this.subtractMonth.bind(this),[n.Day]:this.subtractDay.bind(this),[n.Hour]:this.subtractHour.bind(this),[n.Minute]:this.subtractMinute.bind(this),[n.Second]:this.subtractSecond.bind(this)}};constructor(e,n){let r={zone:n};if(e?e instanceof i?(this.#e=e.#e,this.#t=e.#t,this.#n=e.#n):e instanceof Date?this.#e=t.DateTime.fromJSDate(e,r):typeof e==`number`?this.#e=t.DateTime.fromMillis(e,r):(this.#e=t.DateTime.fromISO(e,r),this.#e.isValid||(this.#e=t.DateTime.fromRFC2822(e,r)),this.#e.isValid||(this.#e=t.DateTime.fromSQL(e,r)),this.#e.isValid||(this.#e=t.DateTime.fromFormat(e,`EEE, d MMM yyyy HH:mm:ss`,r))):this.#e=t.DateTime.local(),!this.#e.isValid)throw Error(`CronDate: unhandled timestamp: ${e}`);n&&n!==this.#e.zoneName&&(this.#e=this.#e.setZone(n))}static#i(e){return e%4==0&&e%100!=0||e%400==0}get dstStart(){return this.#t}set dstStart(e){this.#t=e}get dstEnd(){return this.#n}set dstEnd(e){this.#n=e}addYear(){this.#e=this.#e.plus({years:1})}addMonth(){this.#e=this.#e.plus({months:1}).startOf(`month`)}addDay(){this.#e=this.#e.plus({days:1}).startOf(`day`)}addHour(){this.#e=this.#e.plus({hours:1}).startOf(`hour`)}addMinute(){this.#e=this.#e.plus({minutes:1}).startOf(`minute`)}addSecond(){this.#e=this.#e.plus({seconds:1})}subtractYear(){this.#e=this.#e.minus({years:1})}subtractMonth(){this.#e=this.#e.minus({months:1}).endOf(`month`).startOf(`second`)}subtractDay(){this.#e=this.#e.minus({days:1}).endOf(`day`).startOf(`second`)}subtractHour(){this.#e=this.#e.minus({hours:1}).endOf(`hour`).startOf(`second`)}subtractMinute(){this.#e=this.#e.minus({minutes:1}).endOf(`minute`).startOf(`second`)}subtractSecond(){this.#e=this.#e.minus({seconds:1})}addUnit(e){this.#r.add[e]()}subtractUnit(e){this.#r.subtract[e]()}invokeDateOperation(e,t){if(e===r.Add){this.addUnit(t);return}if(e===r.Subtract){this.subtractUnit(t);return}throw Error(`Invalid verb: ${e}`)}getDate(){return this.#e.day}getFullYear(){return this.#e.year}getDay(){let e=this.#e.weekday;return e===7?0:e}getMonth(){return this.#e.month-1}getHours(){return this.#e.hour}getMinutes(){return this.#e.minute}getSeconds(){return this.#e.second}getMilliseconds(){return this.#e.millisecond}getUTCOffset(){return this.#e.offset}setStartOfDay(){this.#e=this.#e.startOf(`day`)}setEndOfDay(){this.#e=this.#e.endOf(`day`)}getTime(){return this.#e.valueOf()}getUTCDate(){return this.#a().day}getUTCFullYear(){return this.#a().year}getUTCDay(){let e=this.#a().weekday;return e===7?0:e}getUTCMonth(){return this.#a().month-1}getUTCHours(){return this.#a().hour}getUTCMinutes(){return this.#a().minute}getUTCSeconds(){return this.#a().second}toISOString(){return this.#e.toUTC().toISO()}toJSON(){return this.#e.toJSON()}setDate(e){this.#e=this.#e.set({day:e})}setFullYear(e){this.#e=this.#e.set({year:e})}setDay(e){this.#e=this.#e.set({weekday:e})}setMonth(e){this.#e=this.#e.set({month:e+1})}setHours(e){this.#e=this.#e.set({hour:e})}setMinutes(e){this.#e=this.#e.set({minute:e})}setSeconds(e){this.#e=this.#e.set({second:e})}setMilliseconds(e){this.#e=this.#e.set({millisecond:e})}toString(){return this.toDate().toString()}toDate(){return this.#e.toJSDate()}isLastDayOfMonth(){let{day:t,month:n}=this.#e;if(n===2){let r=i.#i(this.#e.year);return t===e.DAYS_IN_MONTH[n-1]-+!r}return t===e.DAYS_IN_MONTH[n-1]}isLastWeekdayOfMonth(){let{day:t,month:n}=this.#e,r;return r=n===2?e.DAYS_IN_MONTH[n-1]-+!i.#i(this.#e.year):e.DAYS_IN_MONTH[n-1],t>r-7}applyDateOperation(e,t,r){if(t===n.Month||t===n.Day){this.invokeDateOperation(e,t);return}let i=this.getHours();this.invokeDateOperation(e,t);let a=this.getHours(),o=a-i;o===2?r!==24&&(this.dstStart=a):o===0&&this.getMinutes()===0&&this.getSeconds()===0&&r!==24&&(this.dstEnd=a)}#a(){return this.#e.toUTC()}};e.CronDate=i,e.default=i})),ZN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronMonth=void 0;var t=XN(),n=WN(),r=1,i=12,a=Object.freeze([]);e.CronMonth=class extends n.CronField{static get min(){return r}static get max(){return i}static get chars(){return a}static get daysInMonth(){return t.DAYS_IN_MONTH}constructor(e,t){super(e,t),this.validate()}get values(){return super.values}}})),QN=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronSecond=void 0;var t=WN(),n=0,r=59,i=Object.freeze([]);e.CronSecond=class extends t.CronField{static get min(){return n}static get max(){return r}static get chars(){return i}constructor(e,t){super(e,t),this.validate()}get values(){return super.values}}})),$N=t((e=>{var t=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),n=e&&e.__exportStar||function(e,n){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(n,r)&&t(n,e,r)};Object.defineProperty(e,"__esModule",{value:!0}),n(UN(),e),n(GN(),e),n(KN(),e),n(WN(),e),n(qN(),e),n(JN(),e),n(ZN(),e),n(QN(),e)})),eP=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronFieldCollection=void 0;var t=$N();e.CronFieldCollection=class e{#e;#t;#n;#r;#i;#a;static from(n,r){return new e({second:this.resolveField(t.CronSecond,n.second,r.second),minute:this.resolveField(t.CronMinute,n.minute,r.minute),hour:this.resolveField(t.CronHour,n.hour,r.hour),dayOfMonth:this.resolveField(t.CronDayOfMonth,n.dayOfMonth,r.dayOfMonth),month:this.resolveField(t.CronMonth,n.month,r.month),dayOfWeek:this.resolveField(t.CronDayOfWeek,n.dayOfWeek,r.dayOfWeek)})}static resolveField(e,n,r){return r?r instanceof t.CronField?r:new e(r):n}constructor({second:e,minute:n,hour:r,dayOfMonth:i,month:a,dayOfWeek:o}){if(!e)throw Error(`Validation error, Field second is missing`);if(!n)throw Error(`Validation error, Field minute is missing`);if(!r)throw Error(`Validation error, Field hour is missing`);if(!i)throw Error(`Validation error, Field dayOfMonth is missing`);if(!a)throw Error(`Validation error, Field month is missing`);if(!o)throw Error(`Validation error, Field dayOfWeek is missing`);if(a.values.length===1&&!i.hasLastChar&&!(parseInt(i.values[0],10)<=t.CronMonth.daysInMonth[a.values[0]-1]))throw Error(`Invalid explicit day of month definition`);this.#e=e,this.#t=n,this.#n=r,this.#i=a,this.#a=o,this.#r=i}get second(){return this.#e}get minute(){return this.#t}get hour(){return this.#n}get dayOfMonth(){return this.#r}get month(){return this.#i}get dayOfWeek(){return this.#a}static compactField(e){if(e.length===0)return[];let t=[],n;return e.forEach((e,r,i)=>{if(n===void 0){n={start:e,count:1};return}let a=i[r-1]||n.start,o=i[r+1];if(e===`L`||e===`W`){t.push(n),t.push({start:e,count:1}),n=void 0;return}if(n.step===void 0&&o!==void 0){let t=e-a;if(t<=o-e){n={...n,count:2,end:e,step:t};return}n.step=1}e-(n.end??0)===n.step?(n.count++,n.end=e):(n.count===1?t.push({start:n.start,count:1}):n.count===2?(t.push({start:n.start,count:1}),t.push({start:n.end??a,count:1})):t.push(n),n={start:e,count:1})}),n&&t.push(n),t}static#o(e,t,n){let r=t.step;return r?r===1&&t.start===e.min&&t.end&&t.end>=n?e.hasQuestionMarkChar?`?`:`*`:r!==1&&t.start===e.min&&t.end&&t.end>=n-r+1?`*/${r}`:null:null}static#s(e,t){let n=e.step;if(n===1)return`${e.start}-${e.end}`;let r=e.start===0?e.count-1:e.count;if(!n)throw Error(`Unexpected range step`);if(!e.end)throw Error(`Unexpected range end`);if(n*r>e.end){let t=(t,r)=>{if(typeof e.start!=`number`)throw Error(`Unexpected range start`);return r%n===0?e.start+r:null};if(typeof e.start!=`number`)throw Error(`Unexpected range start`);let r={length:e.end-e.start+1};return Array.from(r,t).filter(e=>e!==null).join(`,`)}return e.end===t-n+1?`${e.start}/${n}`:`${e.start}-${e.end}/${n}`}stringifyField(n){let r=n.max,i=n.values;if(n instanceof t.CronDayOfWeek){r=6;let e=this.#a.values;i=e[e.length-1]===7?e.slice(0,-1):e}n instanceof t.CronDayOfMonth&&(r=this.#i.values.length===1?t.CronMonth.daysInMonth[this.#i.values[0]-1]:n.max);let a=e.compactField(i);if(a.length===1){let t=e.#o(n,a[0],r);if(t)return t}return a.map(i=>{let a=i.count===1?i.start.toString():e.#s(i,r);return n instanceof t.CronDayOfWeek&&n.nthDay>0?`${a}#${n.nthDay}`:a}).join(`,`)}stringify(e=!1){let t=[];return e&&t.push(this.stringifyField(this.#e)),t.push(this.stringifyField(this.#t),this.stringifyField(this.#n),this.stringifyField(this.#r),this.stringifyField(this.#i),this.stringifyField(this.#a)),t.join(` `)}serialize(){return{second:this.#e.serialize(),minute:this.#t.serialize(),hour:this.#n.serialize(),dayOfMonth:this.#r.serialize(),month:this.#i.serialize(),dayOfWeek:this.#a.serialize()}}}})),tP=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronExpression=e.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE=e.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE=void 0;var t=XN();e.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE=`Out of the time span range`,e.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE=`Invalid expression, loop limit exceeded`;var n=1e4,r=class r{#e;#t;#n;#r;#i;#a;#o=null;#s=!1;constructor(e,n){this.#e=n,this.#t=n.tz,this.#r=n.startDate?new t.CronDate(n.startDate,this.#t):null,this.#i=n.endDate?new t.CronDate(n.endDate,this.#t):null;let r=n.currentDate??n.startDate;if(r){let e=new t.CronDate(r,this.#t);this.#r&&e.getTime()<this.#r.getTime()?r=this.#r:this.#i&&e.getTime()>this.#i.getTime()&&(r=this.#i)}this.#n=new t.CronDate(r,this.#t),this.#a=e}get fields(){return this.#a}static fieldsToExpression(e,t){return new r(e,t||{})}static#c(e,t){return t.some(t=>t===e)}#l(e,t){return e[t?e.length-1:0]}#u(e){let n=`${e.getFullYear()}-${e.getMonth()+1}-${e.getDate()}`;if(this.#o===n)return this.#s;let r=new t.CronDate(e);r.setStartOfDay();let i=new t.CronDate(e);return i.setEndOfDay(),this.#o=n,this.#s=r.getUTCOffset()!==i.getUTCOffset(),this.#s}#d(e,n,r){let i=this.#a.second.values,a=e.getSeconds(),o=this.#a.second.findNearestValue(a,r);if(o!==null){e.setSeconds(o);return}e.applyDateOperation(n,t.TimeUnit.Minute,this.#a.hour.values.length),e.setSeconds(this.#l(i,r))}#f(e,n,r){let i=this.#a.minute.values,a=this.#a.second.values,o=e.getMinutes(),s=this.#a.minute.findNearestValue(o,r);if(s!==null){e.setMinutes(s),e.setSeconds(this.#l(a,r));return}e.applyDateOperation(n,t.TimeUnit.Hour,this.#a.hour.values.length),e.setMinutes(this.#l(i,r)),e.setSeconds(this.#l(a,r))}static#p(e,t){let n=t.isLastWeekdayOfMonth();return e.some(e=>{let r=parseInt(e.toString().charAt(0),10)%7;if(Number.isNaN(r))throw Error(`Invalid last weekday of the month expression: ${e}`);return t.getDay()===r&&n})}next(){return this.#_()}prev(){return this.#_(!0)}hasNext(){let e=this.#n;try{return this.#_(),!0}catch{return!1}finally{this.#n=e}}hasPrev(){let e=this.#n;try{return this.#_(!0),!0}catch{return!1}finally{this.#n=e}}take(e){let t=[];if(e>=0)for(let n=0;n<e;n++)try{t.push(this.next())}catch{return t}else for(let n=0;n>e;n--)try{t.push(this.prev())}catch{return t}return t}reset(e){this.#n=new t.CronDate(e||this.#e.currentDate)}stringify(e=!1){return this.#a.stringify(e)}includesDate(e){let{second:n,minute:r,hour:i,month:a}=this.#a,o=new t.CronDate(e,this.#t);return!(!n.values.includes(o.getSeconds())||!r.values.includes(o.getMinutes())||!i.values.includes(o.getHours())||!a.values.includes(o.getMonth()+1)||!this.#m(o)||this.#a.dayOfWeek.nthDay>0&&Math.ceil(o.getDate()/7)!==this.#a.dayOfWeek.nthDay)}toString(){return this.#e.expression||this.stringify(!0)}#m(e){let t=this.#a.dayOfMonth.isWildcard,n=!t,i=this.#a.dayOfWeek.isWildcard,a=!i,o=r.#c(e.getDate(),this.#a.dayOfMonth.values)||this.#a.dayOfMonth.hasLastChar&&e.isLastDayOfMonth(),s=r.#c(e.getDay(),this.#a.dayOfWeek.values)||this.#a.dayOfWeek.hasLastChar&&r.#p(this.#a.dayOfWeek.values,e);return!!(n&&a&&(o||s)||o&&!a||t&&!i&&s)}#h(e,n,i){let a=this.#a.hour.values,o=a,s=e.getHours(),c=r.#c(s,a),l=e.dstStart===s,u=e.dstEnd===s;if(l)return r.#c(s-1,a)?!0:(e.invokeDateOperation(n,t.TimeUnit.Hour),!1);if(u&&!i)return e.dstEnd=null,e.applyDateOperation(t.DateMathOp.Add,t.TimeUnit.Hour,o.length),!1;if(c)return!0;e.dstStart=null;let d=this.#a.hour.findNearestValue(s,i);if(d===null)return e.applyDateOperation(n,t.TimeUnit.Day,o.length),!1;if(this.#u(e)){let r=i?s-d:d-s;for(let i=0;i<r;i++)e.applyDateOperation(n,t.TimeUnit.Hour,o.length)}else e.setHours(d);return e.setMinutes(this.#l(this.#a.minute.values,i)),e.setSeconds(this.#l(this.#a.second.values,i)),!1}#g(t){if(!this.#r&&!this.#i)return;let n=t.getTime();if(this.#r&&n<this.#r.getTime()||this.#i&&n>this.#i.getTime())throw Error(e.TIME_SPAN_OUT_OF_BOUNDS_ERROR_MESSAGE)}#_(i=!1){let a=i?t.DateMathOp.Subtract:t.DateMathOp.Add,o=new t.CronDate(this.#n),s=o.getTime(),c=0;for(;++c<n;){if(this.#g(o),!this.#m(o)){o.applyDateOperation(a,t.TimeUnit.Day,this.#a.hour.values.length);continue}if(!(this.#a.dayOfWeek.nthDay<=0||Math.ceil(o.getDate()/7)===this.#a.dayOfWeek.nthDay)){o.applyDateOperation(a,t.TimeUnit.Day,this.#a.hour.values.length);continue}if(!r.#c(o.getMonth()+1,this.#a.month.values)){o.applyDateOperation(a,t.TimeUnit.Month,this.#a.hour.values.length);continue}if(this.#h(o,a,i)){if(!r.#c(o.getMinutes(),this.#a.minute.values)){this.#f(o,a,i);continue}if(!r.#c(o.getSeconds(),this.#a.second.values)){this.#d(o,a,i);continue}if(s===o.getTime()){(a===`Add`||o.getMilliseconds()===0)&&o.applyDateOperation(a,t.TimeUnit.Second,this.#a.hour.values.length);continue}break}}if(c>n)throw Error(e.LOOPS_LIMIT_EXCEEDED_ERROR_MESSAGE);return o.getMilliseconds()!==0&&o.setMilliseconds(0),this.#n=o,o}[Symbol.iterator](){return{next:()=>({value:this.#_(),done:!this.hasNext()})}}};e.CronExpression=r,e.default=r})),nP=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.seededRandom=r;function t(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return()=>t>>>0}function n(e){return()=>{let t=e+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function r(e){return n(e?t(e)():Math.floor(Math.random()*1e10))}})),rP=t((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CronExpressionParser=e.DayOfWeek=e.Months=e.CronUnit=e.PredefinedExpressions=void 0;var t=eP(),n=tP(),r=nP(),i=$N(),a;(function(e){e[`@yearly`]=`0 0 0 1 1 *`,e[`@annually`]=`0 0 0 1 1 *`,e[`@monthly`]=`0 0 0 1 * *`,e[`@weekly`]=`0 0 0 * * 0`,e[`@daily`]=`0 0 0 * * *`,e[`@hourly`]=`0 0 * * * *`,e[`@minutely`]=`0 * * * * *`,e[`@secondly`]=`* * * * * *`,e[`@weekdays`]=`0 0 0 * * 1-5`,e[`@weekends`]=`0 0 0 * * 0,6`})(a||(e.PredefinedExpressions=a={}));var o;(function(e){e.Second=`Second`,e.Minute=`Minute`,e.Hour=`Hour`,e.DayOfMonth=`DayOfMonth`,e.Month=`Month`,e.DayOfWeek=`DayOfWeek`})(o||(e.CronUnit=o={}));var s;(function(e){e[e.jan=1]=`jan`,e[e.feb=2]=`feb`,e[e.mar=3]=`mar`,e[e.apr=4]=`apr`,e[e.may=5]=`may`,e[e.jun=6]=`jun`,e[e.jul=7]=`jul`,e[e.aug=8]=`aug`,e[e.sep=9]=`sep`,e[e.oct=10]=`oct`,e[e.nov=11]=`nov`,e[e.dec=12]=`dec`})(s||(e.Months=s={}));var c;(function(e){e[e.sun=0]=`sun`,e[e.mon=1]=`mon`,e[e.tue=2]=`tue`,e[e.wed=3]=`wed`,e[e.thu=4]=`thu`,e[e.fri=5]=`fri`,e[e.sat=6]=`sat`})(c||(e.DayOfWeek=c={})),e.CronExpressionParser=class e{static parse(s,c={}){let{strict:l=!1,hashSeed:u}=c,d=(0,r.seededRandom)(u);s=a[s]||s;let f=e.#e(s,l);if(!(f.dayOfMonth===`*`||f.dayOfWeek===`*`||!l))throw Error(`Cannot use both dayOfMonth and dayOfWeek together in strict mode!`);let p=e.#t(o.Second,f.second,i.CronSecond.constraints,d),m=e.#t(o.Minute,f.minute,i.CronMinute.constraints,d),h=e.#t(o.Hour,f.hour,i.CronHour.constraints,d),g=e.#t(o.Month,f.month,i.CronMonth.constraints,d),_=e.#t(o.DayOfMonth,f.dayOfMonth,i.CronDayOfMonth.constraints,d),{dayOfWeek:v,nthDayOfWeek:y}=e.#u(f.dayOfWeek),b=e.#t(o.DayOfWeek,v,i.CronDayOfWeek.constraints,d),x=new t.CronFieldCollection({second:new i.CronSecond(p,{rawValue:f.second}),minute:new i.CronMinute(m,{rawValue:f.minute}),hour:new i.CronHour(h,{rawValue:f.hour}),dayOfMonth:new i.CronDayOfMonth(_,{rawValue:f.dayOfMonth}),month:new i.CronMonth(g,{rawValue:f.month}),dayOfWeek:new i.CronDayOfWeek(b,{rawValue:f.dayOfWeek,nthDayOfWeek:y})});return new n.CronExpression(x,{...c,expression:s})}static#e(e,t){if(t&&!e.length)throw Error(`Invalid cron expression`);e||=`0 * * * * *`;let n=e.trim().split(/\s+/);if(t&&n.length<6)throw Error(`Invalid cron expression, expected 6 fields`);if(n.length>6)throw Error(`Invalid cron expression, too many fields`);let r=[`*`,`*`,`*`,`*`,`*`,`0`];n.length<r.length&&n.unshift(...r.slice(n.length));let[i,a,o,s,c,l]=n;return{second:i,minute:a,hour:o,dayOfMonth:s,month:c,dayOfWeek:l}}static#t(e,t,n,r){if((e===o.Month||e===o.DayOfWeek)&&(t=t.replace(/[a-z]{3}/gi,e=>{e=e.toLowerCase();let t=s[e]||c[e];if(t===void 0)throw Error(`Validation error, cannot resolve alias "${e}"`);return t.toString()})),!n.validChars.test(t))throw Error(`Invalid characters, got value: ${t}`);return t=this.#n(t,n),t=this.#r(t,n,r),this.#i(e,t,n)}static#n(e,t){return e.replace(/[*?]/g,t.min+`-`+t.max)}static#r(e,t,n){let r=n();return e.replace(/H(?:\((\d+)-(\d+)\))?(?:\/(\d+))?/g,(e,n,i,a)=>{if(n&&i&&a){let e=parseInt(n,10),o=parseInt(i,10),s=parseInt(a,10);if(e>o)throw Error(`Invalid range: ${e}-${o}, min > max`);if(s<=0)throw Error(`Invalid step: ${s}, must be positive`);let c=Math.max(e,t.min),l=Math.floor(r*s),u=[];for(let e=Math.floor(c/s)*s+l;e<=o;e+=s)e>=c&&u.push(e);return u.join(`,`)}else if(n&&i){let e=parseInt(n,10),t=parseInt(i,10);if(e>t)throw Error(`Invalid range: ${e}-${t}, min > max`);return String(Math.floor(r*(t-e+1))+e)}else if(a){let e=parseInt(a,10);if(e<=0)throw Error(`Invalid step: ${e}, must be positive`);let n=Math.floor(r*e),i=[];for(let r=Math.floor(t.min/e)*e+n;r<=t.max;r+=e)r>=t.min&&i.push(r);return i.join(`,`)}else return String(Math.floor(r*(t.max-t.min+1)+t.min))})}static#i(t,n,r){let i=[];function a(n,r){if(Array.isArray(n))i.push(...n);else if(e.#d(r,n))i.push(n);else{let e=parseInt(n.toString(),10);if(!(e>=r.min&&e<=r.max))throw Error(`Constraint error, got value ${n} expected range ${r.min}-${r.max}`);i.push(t===o.DayOfWeek?e%7:n)}}return n.split(`,`).forEach(n=>{if(!(n.length>0))throw Error(`Invalid list value format`);a(e.#a(t,n,r),r)}),i}static#a(t,n,r){let i=n.split(`/`);if(i.length>2)throw Error(`Invalid repeat: ${n}`);return i.length===2?(isNaN(parseInt(i[0],10))||(i[0]=`${i[0]}-${r.max}`),e.#l(t,i[0],parseInt(i[1],10),r)):e.#l(t,n,1,r)}static#o(e,t,n){if(!(!isNaN(e)&&!isNaN(t)&&e>=n.min&&t<=n.max))throw Error(`Constraint error, got range ${e}-${t} expected range ${n.min}-${n.max}`);if(e>t)throw Error(`Invalid range: ${e}-${t}, min(${e}) > max(${t})`)}static#s(e){if(!(!isNaN(e)&&e>0))throw Error(`Constraint error, cannot repeat at every ${e} time.`)}static#c(e,t,n,r){let i=[];e===o.DayOfWeek&&n%7==0&&i.push(0);for(let e=t;e<=n;e+=r)i.indexOf(e)===-1&&i.push(e);return i}static#l(e,t,n,r){let i=t.split(`-`);if(i.length<=1)return isNaN(+t)?t:+t;let[a,o]=i.map(e=>parseInt(e,10));return this.#o(a,o,r),this.#s(n),this.#c(e,a,o,n)}static#u(e){let t=e.split(`#`);if(t.length<=1)return{dayOfWeek:t[0]};let n=+t[t.length-1],r=e.match(/([,-/])/);if(r!==null)throw Error(`Constraint error, invalid dayOfWeek \`#\` and \`${r?.[0]}\` special characters are incompatible`);if(!(t.length<=2&&!isNaN(n)&&n>=1&&n<=5))throw Error(`Constraint error, invalid dayOfWeek occurrence number (#)`);return{dayOfWeek:t[0],nthDayOfWeek:n}}static#d(e,t){return e.chars.some(e=>t.toString().includes(e))}}})),iP=t(((e,t)=>{t.exports={}})),aP=t((e=>{var t=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),n=e&&e.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),r=e&&e.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},e(t)};return function(r){if(r&&r.__esModule)return r;var i={};if(r!=null)for(var a=e(r),o=0;o<a.length;o++)a[o]!=="default"&&t(i,r,a[o]);return n(i,r),i}})();Object.defineProperty(e,"__esModule",{value:!0}),e.CronFileParser=void 0;var i=rP();e.CronFileParser=class e{static async parseFile(t){let{readFile:n}=await Promise.resolve().then(()=>r(iP())),i=await n(t,`utf8`);return e.#e(i)}static parseFileSync(t){let{readFileSync:n}=iP(),r=n(t,`utf8`);return e.#e(r)}static#e(t){let n=t.split(`
|
|
9
|
+
`),r={variables:{},expressions:[],errors:{}};for(let t of n){let n=t.trim();if(n.length===0||n.startsWith(`#`))continue;let i=n.match(/^(.*)=(.*)$/);if(i){let[,e,t]=i;r.variables[e]=t.replace(/["']/g,``);continue}try{let t=e.#t(n);r.expressions.push(t.interval)}catch(e){r.errors[n]=e}}return r}static#t(e){let t=e.split(` `);return{interval:i.CronExpressionParser.parse(t.slice(0,5).join(` `)),command:t.slice(5,t.length)}}}})),oP=t((e=>{var t=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),n=e&&e.__exportStar||function(e,n){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(n,r)&&t(n,e,r)};Object.defineProperty(e,"__esModule",{value:!0}),e.CronFileParser=e.CronExpressionParser=e.CronExpression=e.CronFieldCollection=e.CronDate=void 0;var r=rP(),i=XN();Object.defineProperty(e,"CronDate",{enumerable:!0,get:function(){return i.CronDate}});var a=eP();Object.defineProperty(e,"CronFieldCollection",{enumerable:!0,get:function(){return a.CronFieldCollection}});var o=tP();Object.defineProperty(e,"CronExpression",{enumerable:!0,get:function(){return o.CronExpression}});var s=rP();Object.defineProperty(e,"CronExpressionParser",{enumerable:!0,get:function(){return s.CronExpressionParser}});var c=aP();Object.defineProperty(e,"CronFileParser",{enumerable:!0,get:function(){return c.CronFileParser}}),n($N(),e),e.default=r.CronExpressionParser}))(),sP=e=>{try{return oP.CronExpressionParser.parse(e),!0}catch{return!1}},cP=Ki.extend({dir:X().trim().transform(e=>e===``?null:e).nullable().optional(),retentionDays:q().int().min(1),cleanupCron:X().trim().transform(e=>e===``?null:e).refine(e=>e===null||sP(e)).nullable().optional(),filePrefix:X().trim().transform(e=>e===``?null:e).nullable().optional()}),lP=Wi.extend({dir:X().nullable(),retentionDays:q().min(1),cleanupCron:X().nullable(),filePrefix:X().nullable()}),uP=Zi.and(K({type:Y(HN),dir:X().nullable().optional(),retention_days:q().optional(),cleanup_cron:X().nullable().optional(),file_prefix:X().nullable().optional()}));Ri.and(K({type:Y(HN),dir:X().nullable(),retention_days:q(),cleanup_cron:X().nullable(),file_prefix:X().nullable()}));var dP=Symbol(`FB-Plugin-LoggerRotatingFile`),fP={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(VN)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{loggerRotatingFilePlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(dP,{type:HN,source:`com.fastybird.smart-panel.plugin.logger-rotating-file`,name:`Rotating File Logger`,description:`File-based log persistence with daily rotation and automatic cleanup for long-term retention.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:BN},schemas:{pluginConfigSchema:lP,pluginConfigEditFormSchema:cP,pluginConfigUpdateReqSchema:uP},modules:[ka]}],modules:[ka],isCore:!0})}},pP={"cs-CZ":{messages:{config:{edited:`Konfigurace úložiště v paměti byla úspěšně aktualizována`,notEdited:`Nepodařilo se aktualizovat konfiguraci úložiště v paměti`}}},"de-DE":{messages:{config:{edited:`In-Memory-Speicherkonfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der In-Memory-Speicherkonfiguration fehlgeschlagen`}}},"en-US":{messages:{config:{edited:`In-memory storage configuration has been successfully updated`,notEdited:`Failed to update in-memory storage configuration`}}},"es-ES":{messages:{config:{edited:`La configuración del almacenamiento en memoria ha sido actualizada correctamente`,notEdited:`Error al actualizar la configuración del almacenamiento en memoria`}}},"pl-PL":{messages:{config:{edited:`Konfiguracja pamięci tymczasowej została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji pamięci tymczasowej`}}},"sk-SK":{messages:{config:{edited:`Konfigurácia úložiska v pamäti bola úspešne aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať konfiguráciu úložiska v pamäti`}}}},mP=`memory-storage-plugin`,hP=Symbol(`FB-Plugin-MemoryStorage`),gP={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(pP)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{memoryStoragePlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(hP,{type:mP,source:`com.fastybird.smart-panel.plugin.memory-storage`,name:`In-Memory Storage`,description:`In-memory ring-buffer storage. Data is lost on restart. Used as default fallback.`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://github.com/FastyBird/smart-panel/issues`},elements:[],modules:[j_],isCore:!1})}},_P=new Set([`discord.com`,`discordapp.com`,`ptb.discord.com`,`canary.discord.com`]),vP=/^\/api\/(?:v\d+\/)?webhooks\/\d+\/[\w-]+\/?$/,yP=e=>{if(!e.startsWith(`https://`))return!1;try{let t=new URL(e);return t.protocol===`https:`&&t.username===``&&t.password===``&&t.port===``&&_P.has(t.hostname.toLowerCase())&&vP.test(t.pathname)}catch{return!1}},bP=X().refine(yP,{message:`Discord webhook URL must be an https://discord.com (or discordapp.com/ptb.discord.com/canary.discord.com) URL matching /api/webhooks/<id>/<token>, without embedded credentials or a port`}),xP={class:`text-xs text-gray-500 mt-1`},SP={class:`text-xs text-gray-500 mt-1`},CP={class:`text-xs text-gray-500 mt-1`},wP=k({name:`NotificationsDiscordConfigForm`,__name:`discord-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`notificationsDiscordPlugin.messages.config.edited`),error:a(`notificationsDiscordPlugin.messages.config.notEdited`)}}),f=[{value:`info`,label:a(`notificationsDiscordPlugin.fields.config.minSeverity.options.info`)},{value:`warning`,label:a(`notificationsDiscordPlugin.fields.config.minSeverity.options.warning`)},{value:`error`,label:a(`notificationsDiscordPlugin.fields.config.minSeverity.options.error`)},{value:`critical`,label:a(`notificationsDiscordPlugin.fields.config.minSeverity.options.critical`)}],p=P({webhookUrl:[{validator:(e,t,n)=>{typeof t==`string`&&t.trim()!==``&&!yP(t)?n(Error(a(`notificationsDiscordPlugin.fields.config.webhookUrl.invalid`))):n()},trigger:[`change`,`blur`]}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`notificationsDiscordPlugin.headings.aboutDiscordSettings`),description:L(a)(`notificationsDiscordPlugin.texts.aboutDiscordSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`notificationsDiscordPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsDiscordPlugin.fields.config.webhookUrl.title`),prop:`webhookUrl`},{default:B(()=>[D(L(Zp),{modelValue:L(s).webhookUrl,"onUpdate:modelValue":t[1]||=e=>L(s).webhookUrl=e,configured:L(s).webhookUrlConfigured,placeholder:L(a)(`notificationsDiscordPlugin.fields.config.webhookUrl.placeholder`),name:`webhookUrl`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,xP,z(L(a)(`notificationsDiscordPlugin.fields.config.webhookUrl.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsDiscordPlugin.fields.config.username.title`),prop:`username`},{default:B(()=>[D(L(U),{modelValue:L(s).username,"onUpdate:modelValue":t[2]||=e=>L(s).username=e,placeholder:L(a)(`notificationsDiscordPlugin.fields.config.username.placeholder`),name:`username`},null,8,[`modelValue`,`placeholder`]),l(`div`,SP,z(L(a)(`notificationsDiscordPlugin.fields.config.username.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsDiscordPlugin.fields.config.minSeverity.title`),prop:`minSeverity`},{default:B(()=>[D(L(ei),{modelValue:L(s).minSeverity,"onUpdate:modelValue":t[3]||=e=>L(s).minSeverity=e,class:`w-full`},{default:B(()=>[(A(),i(V,null,I(f,e=>D(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),l(`div`,CP,z(L(a)(`notificationsDiscordPlugin.fields.config.minSeverity.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),TP={"cs-CZ":{headings:{aboutDiscordSettings:`Nastavení Discord webhooku`},fields:{config:{enabled:{title:`Povoleno`},webhookUrl:{title:`URL webhooku`,placeholder:`https://discord.com/api/webhooks/...`,description:`URL příchozího Discord webhooku ze stránky nastavení Integrations daného kanálu. Musí to být URL ve tvaru https://discord.com/api/webhooks/... (přijímány jsou i discordapp.com, ptb.discord.com a canary.discord.com).`,invalid:`Zadejte URL Discord webhooku, např. https://discord.com/api/webhooks/<id>/<token> (discordapp.com, ptb.discord.com nebo canary.discord.com), bez vložených přihlašovacích údajů nebo portu`},username:{title:`Přepsání uživatelského jména`,placeholder:`Smart Panel`,description:`Přepíše výchozí uživatelské jméno, pod kterým webhook odesílá zprávy v Discordu. Ponechte prázdné pro použití výchozího jména webhooku.`},minSeverity:{title:`Minimální závažnost`,description:`Přeposílána jsou pouze oznámení s touto závažností nebo vyšší.`,options:{info:`Info`,warning:`Varování`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavení Discord webhooku bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Discord webhooku`}},texts:{aboutDiscordSettings:`Přeposílejte systémová oznámení do kanálu Discord jako rozšířenou zprávu (embed) pomocí příchozího Discord webhooku. V Discordu otevřete nastavení Integrations cílového kanálu a vytvořte (nebo zkopírujte) URL webhooku.`}},"de-DE":{headings:{aboutDiscordSettings:`Discord-Webhook-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},webhookUrl:{title:`Webhook-URL`,placeholder:`https://discord.com/api/webhooks/...`,description:`URL des eingehenden Discord-Webhooks, von der Seite Integrationen der Kanaleinstellungen. Muss eine https://discord.com/api/webhooks/...-URL sein (discordapp.com, ptb.discord.com und canary.discord.com werden ebenfalls akzeptiert).`,invalid:`Geben Sie eine Discord-Webhook-URL ein, z. B. https://discord.com/api/webhooks/<id>/<token> (discordapp.com, ptb.discord.com oder canary.discord.com), ohne eingebettete Anmeldedaten oder Port`},username:{title:`Benutzername überschreiben`,placeholder:`Smart Panel`,description:`Überschreibt den Standardbenutzernamen, unter dem der Webhook in Discord postet. Leer lassen, um den Standardnamen des Webhooks zu verwenden.`},minSeverity:{title:`Minimaler Schweregrad`,description:`Es werden nur Benachrichtigungen mit diesem Schweregrad oder höher weitergeleitet.`,options:{info:`Info`,warning:`Warnung`,error:`Fehler`,critical:`Kritisch`}}}},messages:{config:{edited:`Discord-Webhook-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Discord-Webhook-Einstellungen fehlgeschlagen`}},texts:{aboutDiscordSettings:`Leiten Sie Systembenachrichtigungen mithilfe eines eingehenden Discord-Webhooks als Rich Embed an einen Discord-Kanal weiter. Öffnen Sie in Discord die Integrationseinstellungen des Zielkanals und erstellen (oder kopieren) Sie eine Webhook-URL.`}},"en-US":{headings:{aboutDiscordSettings:`Discord webhook settings`},fields:{config:{enabled:{title:`Enabled`},webhookUrl:{title:`Webhook URL`,placeholder:`https://discord.com/api/webhooks/...`,description:`Discord incoming webhook URL, from a channel's Integrations settings page. Must be an https://discord.com/api/webhooks/... URL (discordapp.com, ptb.discord.com and canary.discord.com are also accepted).`,invalid:`Enter a Discord webhook URL such as https://discord.com/api/webhooks/<id>/<token> (discordapp.com, ptb.discord.com or canary.discord.com), without embedded credentials or a port`},username:{title:`Username override`,placeholder:`Smart Panel`,description:`Overrides the default username the webhook posts as in Discord. Leave empty to use the webhook's default.`},minSeverity:{title:`Minimum severity`,description:`Only notifications at or above this severity are forwarded.`,options:{info:`Info`,warning:`Warning`,error:`Error`,critical:`Critical`}}}},messages:{config:{edited:`Discord webhook settings have been updated`,notEdited:`Failed to update Discord webhook settings`}},texts:{aboutDiscordSettings:`Forward system notifications to a Discord channel as a rich embed, using a Discord incoming webhook. In Discord, open the target channel's Integrations settings and create (or copy) a webhook URL.`}},"es-ES":{headings:{aboutDiscordSettings:`Configuración del webhook de Discord`},fields:{config:{enabled:{title:`Habilitado`},webhookUrl:{title:`URL del webhook`,placeholder:`https://discord.com/api/webhooks/...`,description:`URL del webhook entrante de Discord, desde la página de configuración de Integraciones del canal. Debe ser una URL https://discord.com/api/webhooks/... (también se aceptan discordapp.com, ptb.discord.com y canary.discord.com).`,invalid:`Introduzca una URL de webhook de Discord, como https://discord.com/api/webhooks/<id>/<token> (discordapp.com, ptb.discord.com o canary.discord.com), sin credenciales incluidas ni puerto`},username:{title:`Sustituir nombre de usuario`,placeholder:`Smart Panel`,description:`Sustituye el nombre de usuario predeterminado con el que publica el webhook en Discord. Déjelo vacío para usar el nombre predeterminado del webhook.`},minSeverity:{title:`Gravedad mínima`,description:`Solo se reenvían las notificaciones con esta gravedad o superior.`,options:{info:`Información`,warning:`Advertencia`,error:`Error`,critical:`Crítico`}}}},messages:{config:{edited:`La configuración del webhook de Discord ha sido actualizada`,notEdited:`Error al actualizar la configuración del webhook de Discord`}},texts:{aboutDiscordSettings:`Reenvíe las notificaciones del sistema a un canal de Discord como un embed enriquecido, mediante un webhook entrante de Discord. En Discord, abra la configuración de Integraciones del canal de destino y cree (o copie) una URL de webhook.`}},"pl-PL":{headings:{aboutDiscordSettings:`Ustawienia webhooka Discord`},fields:{config:{enabled:{title:`Włączony`},webhookUrl:{title:`URL webhooka`,placeholder:`https://discord.com/api/webhooks/...`,description:`Adres URL przychodzącego webhooka Discord ze strony ustawień Integracje danego kanału. Musi to być adres URL w postaci https://discord.com/api/webhooks/... (akceptowane są też discordapp.com, ptb.discord.com i canary.discord.com).`,invalid:`Podaj adres URL webhooka Discord, np. https://discord.com/api/webhooks/<id>/<token> (discordapp.com, ptb.discord.com lub canary.discord.com), bez osadzonych danych uwierzytelniających ani portu`},username:{title:`Zastąpienie nazwy użytkownika`,placeholder:`Smart Panel`,description:`Zastępuje domyślną nazwę użytkownika, pod którą webhook publikuje wiadomości w Discordzie. Pozostaw puste, aby użyć domyślnej nazwy webhooka.`},minSeverity:{title:`Minimalna ważność`,description:`Przekazywane są tylko powiadomienia o tej ważności lub wyższej.`,options:{info:`Informacje`,warning:`Ostrzeżenie`,error:`Błąd`,critical:`Krytyczny`}}}},messages:{config:{edited:`Ustawienia webhooka Discord zostały zaktualizowane`,notEdited:`Nie udało się zaktualizować ustawień webhooka Discord`}},texts:{aboutDiscordSettings:`Przekazuj powiadomienia systemowe do kanału Discord jako rozbudowaną wiadomość (embed) za pomocą przychodzącego webhooka Discord. W Discordzie otwórz ustawienia Integracje docelowego kanału i utwórz (lub skopiuj) adres URL webhooka.`}},"sk-SK":{headings:{aboutDiscordSettings:`Nastavenia Discord webhooku`},fields:{config:{enabled:{title:`Povolený`},webhookUrl:{title:`URL webhooku`,placeholder:`https://discord.com/api/webhooks/...`,description:`URL prichádzajúceho Discord webhooku zo stránky nastavení Integrations daného kanála. Musí to byť URL v tvare https://discord.com/api/webhooks/... (akceptované sú aj discordapp.com, ptb.discord.com a canary.discord.com).`,invalid:`Zadajte URL Discord webhooku, napr. https://discord.com/api/webhooks/<id>/<token> (discordapp.com, ptb.discord.com alebo canary.discord.com), bez vložených prihlasovacích údajov alebo portu`},username:{title:`Prepísanie používateľského mena`,placeholder:`Smart Panel`,description:`Prepíše predvolené používateľské meno, pod ktorým webhook odosiela správy v Discorde. Ponechajte prázdne na použitie predvoleného mena webhooku.`},minSeverity:{title:`Minimálna závažnosť`,description:`Preposielané sú iba upozornenia s touto závažnosťou alebo vyššou.`,options:{info:`Info`,warning:`Varovanie`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavenia Discord webhooku boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Discord webhooku`}},texts:{aboutDiscordSettings:`Preposielajte systémové upozornenia do kanála Discord ako rozšírenú správu (embed) pomocou prichádzajúceho Discord webhooku. V Discorde otvorte nastavenia Integrations cieľového kanála a vytvorte (alebo skopírujte) URL webhooku.`}}},EP=`notifications-discord-plugin`,DP=Ki.extend({webhookUrl:X().nullable().optional(),webhookUrlConfigured:J().optional(),username:X().nullable().optional(),minSeverity:ir([`info`,`warning`,`error`,`critical`])}).superRefine((e,t)=>{typeof e.webhookUrl==`string`&&e.webhookUrl.trim()!==``&&!yP(e.webhookUrl)&&t.addIssue({code:`custom`,path:[`webhookUrl`],message:`Discord webhook URL must start with https:// and must not embed credentials`})}),OP=Wi.extend({webhookUrl:X().trim().nullable().optional(),webhookUrlConfigured:J().default(!1),username:X().trim().nullable().default(null),minSeverity:ir([`info`,`warning`,`error`,`critical`]).default(`warning`)}),kP=Zi.and(K({type:Y(EP),webhook_url:bP.nullable().optional(),username:X().nullable().optional(),min_severity:G(Nt).optional()}));Ri.and(K({type:Y(EP),webhook_url:bP.nullable().optional(),webhook_url_configured:J(),username:X().nullable().optional(),min_severity:G(Nt)}));var AP=Symbol(`FB-Plugin-NotificationsDiscord`),jP={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(TP)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{notificationsDiscordPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(AP,{type:EP,source:`com.fastybird.smart-panel.plugin.notifications-discord`,name:`Discord`,description:`Forwards system notifications to a Discord channel through an incoming webhook`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://discord.com/developers/docs/resources/webhook`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:wP},schemas:{pluginConfigSchema:OP,pluginConfigEditFormSchema:DP,pluginConfigUpdateReqSchema:kP},modules:[ka]}],modules:[ka],isCore:!0})}},MP=`hooks.slack.com`,NP=/^\/services\/T[A-Z0-9]+\/B[A-Z0-9]+\/[A-Za-z0-9]+\/?$/,PP=e=>{if(!e.startsWith(`https://`))return!1;try{let t=new URL(e);return t.protocol===`https:`&&t.username===``&&t.password===``&&t.port===``&&t.hostname.toLowerCase()===MP&&NP.test(t.pathname)}catch{return!1}},FP=X().refine(PP,{message:`Slack webhook URL must be an https://hooks.slack.com/services/<T.../B.../...> URL, without embedded credentials or a port`}),IP={class:`text-xs text-gray-500 mt-1`},LP={class:`text-xs text-gray-500 mt-1`},RP=k({name:`SlackConfigForm`,__name:`slack-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`notificationsSlackPlugin.messages.config.edited`),error:a(`notificationsSlackPlugin.messages.config.notEdited`)}}),f=[{value:`info`,label:a(`notificationsSlackPlugin.fields.config.minSeverity.options.info`)},{value:`warning`,label:a(`notificationsSlackPlugin.fields.config.minSeverity.options.warning`)},{value:`error`,label:a(`notificationsSlackPlugin.fields.config.minSeverity.options.error`)},{value:`critical`,label:a(`notificationsSlackPlugin.fields.config.minSeverity.options.critical`)}],p=P({webhookUrl:[{validator:(e,t,n)=>{typeof t==`string`&&t.trim()!==``&&!PP(t)?n(Error(a(`notificationsSlackPlugin.fields.config.webhookUrl.invalid`))):n()},trigger:[`change`,`blur`]}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`notificationsSlackPlugin.headings.aboutSlackSettings`),description:L(a)(`notificationsSlackPlugin.texts.aboutSlackSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`notificationsSlackPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsSlackPlugin.fields.config.webhookUrl.title`),prop:`webhookUrl`},{default:B(()=>[D(L(Zp),{modelValue:L(s).webhookUrl,"onUpdate:modelValue":t[1]||=e=>L(s).webhookUrl=e,configured:L(s).webhookUrlConfigured,placeholder:L(a)(`notificationsSlackPlugin.fields.config.webhookUrl.placeholder`),name:`webhookUrl`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,IP,z(L(a)(`notificationsSlackPlugin.fields.config.webhookUrl.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsSlackPlugin.fields.config.minSeverity.title`),prop:`minSeverity`},{default:B(()=>[D(L(ei),{modelValue:L(s).minSeverity,"onUpdate:modelValue":t[2]||=e=>L(s).minSeverity=e,class:`w-full`},{default:B(()=>[(A(),i(V,null,I(f,e=>D(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),l(`div`,LP,z(L(a)(`notificationsSlackPlugin.fields.config.minSeverity.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),zP={"cs-CZ":{headings:{aboutSlackSettings:`Nastavení Slack webhooku`},fields:{config:{enabled:{title:`Povoleno`},webhookUrl:{title:`URL webhooku`,placeholder:`https://hooks.slack.com/services/...`,description:`URL příchozího Slack webhooku ze stránky nastavení aplikace daného kanálu. Musí to být URL ve tvaru https://hooks.slack.com/services/...`,invalid:`Zadejte URL Slack webhooku, např. https://hooks.slack.com/services/<T.../B.../...>, bez vložených přihlašovacích údajů nebo portu`},minSeverity:{title:`Minimální závažnost`,description:`Přeposílána jsou pouze oznámení s touto závažností nebo vyšší.`,options:{info:`Info`,warning:`Varování`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavení Slack webhooku bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Slack webhooku`}},texts:{aboutSlackSettings:`Přeposílejte systémová oznámení do kanálu Slack jako barevnou přílohu (attachment) pomocí příchozího Slack webhooku. Ve Slacku vytvořte (nebo použijte stávající) aplikaci s povoleným Incoming Webhook pro cílový kanál a zkopírujte její URL webhooku.`}},"de-DE":{headings:{aboutSlackSettings:`Slack-Webhook-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},webhookUrl:{title:`Webhook-URL`,placeholder:`https://hooks.slack.com/services/...`,description:`URL des eingehenden Slack-Webhooks, von der App-Einstellungsseite des Kanals. Muss eine https://hooks.slack.com/services/...-URL sein.`,invalid:`Geben Sie eine Slack-Webhook-URL ein, z. B. https://hooks.slack.com/services/<T.../B.../...>, ohne eingebettete Anmeldedaten oder Port`},minSeverity:{title:`Minimaler Schweregrad`,description:`Es werden nur Benachrichtigungen mit diesem Schweregrad oder höher weitergeleitet.`,options:{info:`Info`,warning:`Warnung`,error:`Fehler`,critical:`Kritisch`}}}},messages:{config:{edited:`Slack-Webhook-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Slack-Webhook-Einstellungen fehlgeschlagen`}},texts:{aboutSlackSettings:`Leiten Sie Systembenachrichtigungen mithilfe eines eingehenden Slack-Webhooks als farbigen Anhang (Attachment) an einen Slack-Kanal weiter. Erstellen (oder verwenden) Sie in Slack eine App mit aktiviertem Incoming Webhook für den Zielkanal und kopieren Sie deren Webhook-URL.`}},"en-US":{headings:{aboutSlackSettings:`Slack webhook settings`},fields:{config:{enabled:{title:`Enabled`},webhookUrl:{title:`Webhook URL`,placeholder:`https://hooks.slack.com/services/...`,description:`Slack incoming webhook URL, from a channel's App settings page. Must be an https://hooks.slack.com/services/... URL.`,invalid:`Enter a Slack webhook URL such as https://hooks.slack.com/services/<T.../B.../...>, without embedded credentials or a port`},minSeverity:{title:`Minimum severity`,description:`Only notifications at or above this severity are forwarded.`,options:{info:`Info`,warning:`Warning`,error:`Error`,critical:`Critical`}}}},messages:{config:{edited:`Slack webhook settings have been updated`,notEdited:`Failed to update Slack webhook settings`}},texts:{aboutSlackSettings:`Forward system notifications to a Slack channel as a coloured attachment, using a Slack incoming webhook. In Slack, create (or reuse) an app with an Incoming Webhook enabled for the target channel and copy its webhook URL.`}},"es-ES":{headings:{aboutSlackSettings:`Configuración del webhook de Slack`},fields:{config:{enabled:{title:`Habilitado`},webhookUrl:{title:`URL del webhook`,placeholder:`https://hooks.slack.com/services/...`,description:`URL del webhook entrante de Slack, desde la página de configuración de la app del canal. Debe ser una URL https://hooks.slack.com/services/...`,invalid:`Introduzca una URL de webhook de Slack, como https://hooks.slack.com/services/<T.../B.../...>, sin credenciales incluidas ni puerto`},minSeverity:{title:`Gravedad mínima`,description:`Solo se reenvían las notificaciones con esta gravedad o superior.`,options:{info:`Información`,warning:`Advertencia`,error:`Error`,critical:`Crítico`}}}},messages:{config:{edited:`La configuración del webhook de Slack ha sido actualizada`,notEdited:`Error al actualizar la configuración del webhook de Slack`}},texts:{aboutSlackSettings:`Reenvíe las notificaciones del sistema a un canal de Slack como un adjunto (attachment) de color, mediante un webhook entrante de Slack. En Slack, cree (o reutilice) una app con un Incoming Webhook habilitado para el canal de destino y copie su URL de webhook.`}},"pl-PL":{headings:{aboutSlackSettings:`Ustawienia webhooka Slack`},fields:{config:{enabled:{title:`Włączony`},webhookUrl:{title:`URL webhooka`,placeholder:`https://hooks.slack.com/services/...`,description:`Adres URL przychodzącego webhooka Slack ze strony ustawień aplikacji danego kanału. Musi to być adres URL w postaci https://hooks.slack.com/services/...`,invalid:`Podaj adres URL webhooka Slack, np. https://hooks.slack.com/services/<T.../B.../...>, bez osadzonych danych uwierzytelniających ani portu`},minSeverity:{title:`Minimalna ważność`,description:`Przekazywane są tylko powiadomienia o tej ważności lub wyższej.`,options:{info:`Informacje`,warning:`Ostrzeżenie`,error:`Błąd`,critical:`Krytyczny`}}}},messages:{config:{edited:`Ustawienia webhooka Slack zostały zaktualizowane`,notEdited:`Nie udało się zaktualizować ustawień webhooka Slack`}},texts:{aboutSlackSettings:`Przekazuj powiadomienia systemowe do kanału Slack jako kolorowy załącznik (attachment) za pomocą przychodzącego webhooka Slack. W Slacku utwórz (lub użyj istniejącej) aplikację z włączonym Incoming Webhook dla docelowego kanału i skopiuj jej adres URL webhooka.`}},"sk-SK":{headings:{aboutSlackSettings:`Nastavenia Slack webhooku`},fields:{config:{enabled:{title:`Povolený`},webhookUrl:{title:`URL webhooku`,placeholder:`https://hooks.slack.com/services/...`,description:`URL prichádzajúceho Slack webhooku zo stránky nastavení aplikácie daného kanála. Musí to byť URL v tvare https://hooks.slack.com/services/...`,invalid:`Zadajte URL Slack webhooku, napr. https://hooks.slack.com/services/<T.../B.../...>, bez vložených prihlasovacích údajov alebo portu`},minSeverity:{title:`Minimálna závažnosť`,description:`Preposielané sú iba upozornenia s touto závažnosťou alebo vyššou.`,options:{info:`Info`,warning:`Varovanie`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavenia Slack webhooku boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Slack webhooku`}},texts:{aboutSlackSettings:`Preposielajte systémové upozornenia do kanála Slack ako farebnú prílohu (attachment) pomocou prichádzajúceho Slack webhooku. V Slacku vytvorte (alebo použite existujúcu) aplikáciu s povoleným Incoming Webhook pre cieľový kanál a skopírujte jej URL webhooku.`}}},BP=`notifications-slack-plugin`,VP=Ki.extend({webhookUrl:X().nullable().optional(),webhookUrlConfigured:J().optional(),minSeverity:ir([`info`,`warning`,`error`,`critical`])}).superRefine((e,t)=>{typeof e.webhookUrl==`string`&&e.webhookUrl.trim()!==``&&!PP(e.webhookUrl)&&t.addIssue({code:`custom`,path:[`webhookUrl`],message:`Slack webhook URL must start with https:// and must not embed credentials`})}),HP=Wi.extend({webhookUrl:X().trim().nullable().optional(),webhookUrlConfigured:J().default(!1),minSeverity:ir([`info`,`warning`,`error`,`critical`]).default(`warning`)}),UP=Zi.and(K({type:Y(BP),webhook_url:FP.nullable().optional(),min_severity:G(Nt).optional()}));Ri.and(K({type:Y(BP),webhook_url:FP.nullable().optional(),webhook_url_configured:J(),min_severity:G(Nt)}));var WP=Symbol(`FB-Plugin-NotificationsSlack`),GP={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(zP)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{notificationsSlackPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(WP,{type:BP,source:`com.fastybird.smart-panel.plugin.notifications-slack`,name:`Slack`,description:`Forwards system notifications to a Slack channel through an incoming webhook`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://api.slack.com/messaging/webhooks`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:RP},schemas:{pluginConfigSchema:HP,pluginConfigEditFormSchema:VP,pluginConfigUpdateReqSchema:UP},modules:[ka]}],modules:[ka],isCore:!0})}},KP={class:`text-xs text-gray-500 mt-1`},qP={class:`text-xs text-gray-500 mt-1`},JP={class:`text-xs text-gray-500 mt-1`},YP=k({name:`NotificationsTelegramConfigForm`,__name:`telegram-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`notificationsTelegramPlugin.messages.config.edited`),error:a(`notificationsTelegramPlugin.messages.config.notEdited`)}}),f=[{value:`info`,label:a(`notificationsTelegramPlugin.fields.config.minSeverity.options.info`)},{value:`warning`,label:a(`notificationsTelegramPlugin.fields.config.minSeverity.options.warning`)},{value:`error`,label:a(`notificationsTelegramPlugin.fields.config.minSeverity.options.error`)},{value:`critical`,label:a(`notificationsTelegramPlugin.fields.config.minSeverity.options.critical`)}],p=P({});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`notificationsTelegramPlugin.headings.aboutTelegramSettings`),description:L(a)(`notificationsTelegramPlugin.texts.aboutTelegramSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`notificationsTelegramPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsTelegramPlugin.fields.config.botToken.title`),prop:`botToken`},{default:B(()=>[D(L(Zp),{modelValue:L(s).botToken,"onUpdate:modelValue":t[1]||=e=>L(s).botToken=e,configured:L(s).botTokenConfigured,placeholder:L(a)(`notificationsTelegramPlugin.fields.config.botToken.placeholder`),name:`botToken`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,KP,z(L(a)(`notificationsTelegramPlugin.fields.config.botToken.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsTelegramPlugin.fields.config.chatId.title`),prop:`chatId`},{default:B(()=>[D(L(U),{modelValue:L(s).chatId,"onUpdate:modelValue":t[2]||=e=>L(s).chatId=e,placeholder:L(a)(`notificationsTelegramPlugin.fields.config.chatId.placeholder`),name:`chatId`},null,8,[`modelValue`,`placeholder`]),l(`div`,qP,z(L(a)(`notificationsTelegramPlugin.fields.config.chatId.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsTelegramPlugin.fields.config.minSeverity.title`),prop:`minSeverity`},{default:B(()=>[D(L(ei),{modelValue:L(s).minSeverity,"onUpdate:modelValue":t[3]||=e=>L(s).minSeverity=e,class:`w-full`},{default:B(()=>[(A(),i(V,null,I(f,e=>D(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),l(`div`,JP,z(L(a)(`notificationsTelegramPlugin.fields.config.minSeverity.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),XP={"cs-CZ":{headings:{aboutTelegramSettings:`Nastavení Telegram bota`},fields:{config:{enabled:{title:`Povoleno`},botToken:{title:`Token bota`,placeholder:`123456789:AAExampleTelegramBotTokenValue`,description:`Token Telegram Bot API od {'@'}BotFather.`},chatId:{title:`ID chatu`,placeholder:`123456789`,description:`ID chatu Telegramu (nebo {'@'}uživatelské jméno kanálu), na který bot posílá zprávy.`},minSeverity:{title:`Minimální závažnost`,description:`Přeposílána jsou pouze oznámení s touto závažností nebo vyšší.`,options:{info:`Info`,warning:`Varování`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavení Telegram bota bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Telegram bota`}},texts:{aboutTelegramSettings:`Přeposílejte systémová oznámení do chatu Telegramu prostřednictvím bota. V Telegramu napište zprávu {'@'}BotFather pro vytvoření bota, zkopírujte jeho token a zjistěte ID chatu, do kterého má bot přispívat.`}},"de-DE":{headings:{aboutTelegramSettings:`Telegram-Bot-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},botToken:{title:`Bot-Token`,placeholder:`123456789:AAExampleTelegramBotTokenValue`,description:`Telegram-Bot-API-Token von {'@'}BotFather.`},chatId:{title:`Chat-ID`,placeholder:`123456789`,description:`Telegram-Chat-ID (oder {'@'}Benutzername des Kanals), an die der Bot Nachrichten sendet.`},minSeverity:{title:`Minimaler Schweregrad`,description:`Es werden nur Benachrichtigungen mit diesem Schweregrad oder höher weitergeleitet.`,options:{info:`Info`,warning:`Warnung`,error:`Fehler`,critical:`Kritisch`}}}},messages:{config:{edited:`Telegram-Bot-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Telegram-Bot-Einstellungen fehlgeschlagen`}},texts:{aboutTelegramSettings:`Leiten Sie Systembenachrichtigungen über einen Bot an einen Telegram-Chat weiter. Schreiben Sie in Telegram eine Nachricht an {'@'}BotFather, um einen Bot zu erstellen, kopieren Sie dessen Token und ermitteln Sie die Chat-ID, an die der Bot posten soll.`}},"en-US":{headings:{aboutTelegramSettings:`Telegram bot settings`},fields:{config:{enabled:{title:`Enabled`},botToken:{title:`Bot token`,placeholder:`123456789:AAExampleTelegramBotTokenValue`,description:`Telegram Bot API token, from {'@'}BotFather.`},chatId:{title:`Chat ID`,placeholder:`123456789`,description:`Telegram chat id (or {'@'}channel username) the bot sends messages to.`},minSeverity:{title:`Minimum severity`,description:`Only notifications at or above this severity are forwarded.`,options:{info:`Info`,warning:`Warning`,error:`Error`,critical:`Critical`}}}},messages:{config:{edited:`Telegram bot settings have been updated`,notEdited:`Failed to update Telegram bot settings`}},texts:{aboutTelegramSettings:`Forward system notifications to a Telegram chat through a bot. In Telegram, message {'@'}BotFather to create a bot, copy its token, and find the chat id the bot should post to.`}},"es-ES":{headings:{aboutTelegramSettings:`Configuración del bot de Telegram`},fields:{config:{enabled:{title:`Habilitado`},botToken:{title:`Token del bot`,placeholder:`123456789:AAExampleTelegramBotTokenValue`,description:`Token de Telegram Bot API, obtenido de {'@'}BotFather.`},chatId:{title:`ID de chat`,placeholder:`123456789`,description:`ID de chat de Telegram (o {'@'}nombre de usuario del canal) al que el bot envía mensajes.`},minSeverity:{title:`Gravedad mínima`,description:`Solo se reenvían las notificaciones con esta gravedad o superior.`,options:{info:`Información`,warning:`Advertencia`,error:`Error`,critical:`Crítico`}}}},messages:{config:{edited:`La configuración del bot de Telegram ha sido actualizada`,notEdited:`Error al actualizar la configuración del bot de Telegram`}},texts:{aboutTelegramSettings:`Reenvíe las notificaciones del sistema a un chat de Telegram mediante un bot. En Telegram, envíe un mensaje a {'@'}BotFather para crear un bot, copie su token y averigüe el id de chat al que el bot debe publicar.`}},"pl-PL":{headings:{aboutTelegramSettings:`Ustawienia bota Telegram`},fields:{config:{enabled:{title:`Włączony`},botToken:{title:`Token bota`,placeholder:`123456789:AAExampleTelegramBotTokenValue`,description:`Token Telegram Bot API od {'@'}BotFather.`},chatId:{title:`ID czatu`,placeholder:`123456789`,description:`ID czatu Telegram (lub {'@'}nazwa użytkownika kanału), do którego bot wysyła wiadomości.`},minSeverity:{title:`Minimalna ważność`,description:`Przekazywane są tylko powiadomienia o tej ważności lub wyższej.`,options:{info:`Informacje`,warning:`Ostrzeżenie`,error:`Błąd`,critical:`Krytyczny`}}}},messages:{config:{edited:`Ustawienia bota Telegram zostały zaktualizowane`,notEdited:`Nie udało się zaktualizować ustawień bota Telegram`}},texts:{aboutTelegramSettings:`Przekazuj powiadomienia systemowe do czatu Telegram za pomocą bota. W Telegramie napisz do {'@'}BotFather, aby utworzyć bota, skopiuj jego token i znajdź ID czatu, na który bot ma publikować wiadomości.`}},"sk-SK":{headings:{aboutTelegramSettings:`Nastavenia Telegram bota`},fields:{config:{enabled:{title:`Povolený`},botToken:{title:`Token bota`,placeholder:`123456789:AAExampleTelegramBotTokenValue`,description:`Token Telegram Bot API od {'@'}BotFather.`},chatId:{title:`ID chatu`,placeholder:`123456789`,description:`ID chatu Telegramu (alebo {'@'}používateľské meno kanála), na ktorý bot posiela správy.`},minSeverity:{title:`Minimálna závažnosť`,description:`Preposielané sú iba upozornenia s touto závažnosťou alebo vyššou.`,options:{info:`Info`,warning:`Varovanie`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavenia Telegram bota boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Telegram bota`}},texts:{aboutTelegramSettings:`Preposielajte systémové upozornenia do chatu Telegramu prostredníctvom bota. V Telegrame napíšte správu {'@'}BotFather na vytvorenie bota, skopírujte jeho token a zistite ID chatu, na ktorý má bot prispievať.`}}},ZP=`notifications-telegram-plugin`,QP=Ki.extend({botToken:X().nullable().optional(),botTokenConfigured:J().optional(),chatId:X().nullable().optional(),minSeverity:ir([`info`,`warning`,`error`,`critical`])}),$P=Wi.extend({botToken:X().trim().nullable().optional(),botTokenConfigured:J().default(!1),chatId:X().trim().nullable().default(null),minSeverity:ir([`info`,`warning`,`error`,`critical`]).default(`warning`)}),eF=Zi.and(K({type:Y(ZP),bot_token:X().nullable().optional(),chat_id:X().nullable().optional(),min_severity:G(Nt).optional()}));Ri.and(K({type:Y(ZP),bot_token:X().nullable().optional(),bot_token_configured:J(),chat_id:X().nullable().optional(),min_severity:G(Nt)}));var tF=Symbol(`FB-Plugin-NotificationsTelegram`),nF={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(XP)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{notificationsTelegramPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(tF,{type:ZP,source:`com.fastybird.smart-panel.plugin.notifications-telegram`,name:`Telegram`,description:`Forwards system notifications to a Telegram chat through a bot`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://core.telegram.org/bots/api#sendmessage`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:YP},schemas:{pluginConfigSchema:$P,pluginConfigEditFormSchema:QP,pluginConfigUpdateReqSchema:eF},modules:[ka]}],modules:[ka],isCore:!0})}},rF=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,iF=/[\0\r\n]/,aF=e=>{let t;try{t=JSON.parse(e)}catch{return!1}return typeof t!=`object`||!t||Array.isArray(t)?!1:Object.entries(t).every(([e,t])=>rF.test(e)&&typeof t==`string`&&!iF.test(t))},oF=e=>JSON.parse(e),sF=e=>{try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&t.username===``&&t.password===``}catch{return!1}},cF=X().refine(sF,{message:`Webhook URL must use HTTP or HTTPS without embedded credentials`}),lF={class:`text-xs text-gray-500 mt-1`},uF={class:`text-xs text-gray-500 mt-1`},dF={class:`text-xs text-gray-500 mt-1`},fF=k({name:`WebhookConfigForm`,__name:`webhook-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`notificationsWebhookPlugin.messages.config.edited`),error:a(`notificationsWebhookPlugin.messages.config.notEdited`)}}),f=[{value:`info`,label:a(`notificationsWebhookPlugin.fields.config.minSeverity.options.info`)},{value:`warning`,label:a(`notificationsWebhookPlugin.fields.config.minSeverity.options.warning`)},{value:`error`,label:a(`notificationsWebhookPlugin.fields.config.minSeverity.options.error`)},{value:`critical`,label:a(`notificationsWebhookPlugin.fields.config.minSeverity.options.critical`)}],m=p(()=>typeof s.url==`string`&&s.url.trim().toLowerCase().startsWith(`http://`)),h=P({url:[{validator:(e,t,n)=>{typeof t==`string`&&t.trim()!==``&&!sF(t)?n(Error(a(`notificationsWebhookPlugin.fields.config.url.invalid`))):n()},trigger:[`change`,`blur`]}],headers:[{validator:(e,t,n)=>{if(typeof t==`string`&&t.trim()!==``&&!aF(t)){n(Error(a(`notificationsWebhookPlugin.fields.config.headers.invalidJson`)));return}let r=t===void 0&&s.headersConfigured===!0,i=typeof t==`string`&&t.trim()!==``||r;if(m.value&&i){n(Error(a(`notificationsWebhookPlugin.fields.config.headers.requiresHttps`)));return}n()},trigger:[`change`,`blur`]}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`notificationsWebhookPlugin.headings.aboutWebhookSettings`),description:L(a)(`notificationsWebhookPlugin.texts.aboutWebhookSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`notificationsWebhookPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsWebhookPlugin.fields.config.url.title`),prop:`url`},{default:B(()=>[D(L(Zp),{modelValue:L(s).url,"onUpdate:modelValue":t[1]||=e=>L(s).url=e,configured:L(s).urlConfigured,placeholder:L(a)(`notificationsWebhookPlugin.fields.config.url.placeholder`),name:`url`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,lF,z(L(a)(`notificationsWebhookPlugin.fields.config.url.description`)),1),m.value?(A(),O(L(Q),{key:0,type:`warning`,title:L(a)(`notificationsWebhookPlugin.fields.config.url.httpWarning`),closable:!1,class:`mt-2`},null,8,[`title`])):R(``,!0)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsWebhookPlugin.fields.config.headers.title`),prop:`headers`},{default:B(()=>[D(L(Zp),{modelValue:L(s).headers,"onUpdate:modelValue":t[2]||=e=>L(s).headers=e,configured:L(s).headersConfigured,placeholder:L(a)(`notificationsWebhookPlugin.fields.config.headers.placeholder`),type:`textarea`,rows:4,name:`headers`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,uF,z(L(a)(`notificationsWebhookPlugin.fields.config.headers.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`notificationsWebhookPlugin.fields.config.minSeverity.title`),prop:`minSeverity`},{default:B(()=>[D(L(ei),{modelValue:L(s).minSeverity,"onUpdate:modelValue":t[3]||=e=>L(s).minSeverity=e,class:`w-full`},{default:B(()=>[(A(),i(V,null,I(f,e=>D(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),l(`div`,dF,z(L(a)(`notificationsWebhookPlugin.fields.config.minSeverity.description`)),1)]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),pF={"cs-CZ":{headings:{aboutWebhookSettings:`Nastavení webhooku`},fields:{config:{enabled:{title:`Povoleno`},url:{title:`URL`,placeholder:`https://example.com/hooks/panel`,description:`Oznámení jsou na tuto URL odesílána jako JSON metodou POST. Doporučuje se HTTPS.`,httpWarning:`Tato URL není šifrovaná. Obsah oznámení bude přenášen nezašifrovaně - používejte HTTPS všude, kde to cíl podporuje, a HTTP používejte pouze pro cíle v důvěryhodné síti ve vaší vlastní LAN.`,invalid:`Zadejte absolutní HTTP nebo HTTPS URL bez vložených přihlašovacích údajů`},headers:{title:`Vlastní hlavičky`,placeholder:`{"Authorization": "Bearer <token>"}`,description:`Volitelný JSON objekt dalších HTTP hlaviček, např. autorizačního tokenu typu Bearer. Vyžaduje HTTPS URL.`,invalidJson:`Zadejte plochý JSON objekt textových hodnot, např. {"Authorization": "Bearer token"}`,requiresHttps:`Vlastní hlavičky vyžadují HTTPS URL webhooku`},minSeverity:{title:`Minimální závažnost`,description:`Přeposílána jsou pouze oznámení s touto závažností nebo vyšší.`,options:{info:`Info`,warning:`Varování`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavení webhooku bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení webhooku`}},texts:{aboutWebhookSettings:`Přeposílejte systémová oznámení jako JSON POST požadavek na libovolnou URL, kterou nastavíte - na váš vlastní automatizační server, příchozí webhook chatovací platformy nebo self-hosted nástroj jako n8n, Node-RED nebo Home Assistant.`}},"de-DE":{headings:{aboutWebhookSettings:`Webhook-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},url:{title:`URL`,placeholder:`https://example.com/hooks/panel`,description:`Benachrichtigungen werden als JSON per POST an diese URL gesendet. HTTPS wird empfohlen.`,httpWarning:`Diese URL ist nicht verschlüsselt. Die Benachrichtigungsdaten werden im Klartext übertragen - verwenden Sie HTTPS, wann immer das Ziel dies unterstützt, und nutzen Sie HTTP nur für vertrauenswürdige Ziele in Ihrem eigenen LAN.`,invalid:`Geben Sie eine absolute HTTP- oder HTTPS-URL ohne eingebettete Anmeldedaten ein`},headers:{title:`Benutzerdefinierte Header`,placeholder:`{"Authorization": "Bearer <token>"}`,description:`Optionales JSON-Objekt mit zusätzlichen HTTP-Headern, z. B. einem Authorization-Bearer-Token. Erfordert eine HTTPS-URL.`,invalidJson:`Geben Sie ein flaches JSON-Objekt mit String-Werten ein, z. B. {"Authorization": "Bearer token"}`,requiresHttps:`Benutzerdefinierte Header erfordern eine HTTPS-Webhook-URL`},minSeverity:{title:`Minimaler Schweregrad`,description:`Es werden nur Benachrichtigungen mit diesem Schweregrad oder höher weitergeleitet.`,options:{info:`Info`,warning:`Warnung`,error:`Fehler`,critical:`Kritisch`}}}},messages:{config:{edited:`Webhook-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Webhook-Einstellungen fehlgeschlagen`}},texts:{aboutWebhookSettings:`Leiten Sie Systembenachrichtigungen als JSON-POST-Anfrage an eine beliebige von Ihnen konfigurierte URL weiter - an Ihren eigenen Automatisierungsserver, den eingehenden Webhook einer Chat-Plattform oder ein selbst gehostetes Tool wie n8n, Node-RED oder Home Assistant.`}},"en-US":{headings:{aboutWebhookSettings:`Webhook settings`},fields:{config:{enabled:{title:`Enabled`},url:{title:`URL`,placeholder:`https://example.com/hooks/panel`,description:`Notifications are POSTed as JSON to this URL. HTTPS is recommended.`,httpWarning:`This URL is not encrypted. The notification payload will travel in cleartext - use HTTPS whenever the target supports it, and only use HTTP for trusted-network targets on your own LAN.`,invalid:`Enter an absolute HTTP or HTTPS URL without embedded credentials`},headers:{title:`Custom headers`,placeholder:`{"Authorization": "Bearer <token>"}`,description:`Optional JSON object of extra HTTP headers, e.g. an Authorization bearer token. Requires an HTTPS URL.`,invalidJson:`Enter a flat JSON object of string values, e.g. {"Authorization": "Bearer token"}`,requiresHttps:`Custom headers require an HTTPS webhook URL`},minSeverity:{title:`Minimum severity`,description:`Only notifications at or above this severity are forwarded.`,options:{info:`Info`,warning:`Warning`,error:`Error`,critical:`Critical`}}}},messages:{config:{edited:`Webhook settings have been updated`,notEdited:`Failed to update webhook settings`}},texts:{aboutWebhookSettings:`Forward system notifications as a JSON POST request to any URL you configure - your own automation server, a chat platform's incoming webhook, or a self-hosted tool such as n8n, Node-RED or Home Assistant.`}},"es-ES":{headings:{aboutWebhookSettings:`Configuración del webhook`},fields:{config:{enabled:{title:`Habilitado`},url:{title:`URL`,placeholder:`https://example.com/hooks/panel`,description:`Las notificaciones se envían como JSON mediante POST a esta URL. Se recomienda HTTPS.`,httpWarning:`Esta URL no está cifrada. El contenido de la notificación viajará en texto plano - use HTTPS siempre que el destino lo admita, y use HTTP solo para destinos de confianza dentro de su propia LAN.`,invalid:`Introduzca una URL absoluta HTTP o HTTPS sin credenciales incluidas`},headers:{title:`Cabeceras personalizadas`,placeholder:`{"Authorization": "Bearer <token>"}`,description:`Objeto JSON opcional con cabeceras HTTP adicionales, p. ej. un token Bearer de autorización. Requiere una URL HTTPS.`,invalidJson:`Introduzca un objeto JSON plano de valores de texto, p. ej. {"Authorization": "Bearer token"}`,requiresHttps:`Las cabeceras personalizadas requieren una URL de webhook HTTPS`},minSeverity:{title:`Gravedad mínima`,description:`Solo se reenvían las notificaciones con esta gravedad o superior.`,options:{info:`Información`,warning:`Advertencia`,error:`Error`,critical:`Crítico`}}}},messages:{config:{edited:`La configuración del webhook ha sido actualizada`,notEdited:`Error al actualizar la configuración del webhook`}},texts:{aboutWebhookSettings:`Reenvíe las notificaciones del sistema como una solicitud POST en JSON a cualquier URL que configure - su propio servidor de automatización, el webhook entrante de una plataforma de chat o una herramienta autoalojada como n8n, Node-RED o Home Assistant.`}},"pl-PL":{headings:{aboutWebhookSettings:`Ustawienia webhooka`},fields:{config:{enabled:{title:`Włączony`},url:{title:`URL`,placeholder:`https://example.com/hooks/panel`,description:`Powiadomienia są wysyłane jako JSON metodą POST na ten adres URL. Zalecane jest HTTPS.`,httpWarning:`Ten adres URL nie jest szyfrowany. Treść powiadomienia będzie przesyłana zwykłym tekstem - używaj HTTPS wszędzie tam, gdzie cel to obsługuje, a HTTP stosuj wyłącznie dla zaufanych celów we własnej sieci LAN.`,invalid:`Podaj bezwzględny adres URL HTTP lub HTTPS bez osadzonych danych uwierzytelniających`},headers:{title:`Niestandardowe nagłówki`,placeholder:`{"Authorization": "Bearer <token>"}`,description:`Opcjonalny obiekt JSON z dodatkowymi nagłówkami HTTP, np. tokenem Bearer w nagłówku Authorization. Wymaga adresu URL HTTPS.`,invalidJson:`Podaj płaski obiekt JSON z wartościami tekstowymi, np. {"Authorization": "Bearer token"}`,requiresHttps:`Niestandardowe nagłówki wymagają adresu URL webhooka HTTPS`},minSeverity:{title:`Minimalna ważność`,description:`Przekazywane są tylko powiadomienia o tej ważności lub wyższej.`,options:{info:`Informacje`,warning:`Ostrzeżenie`,error:`Błąd`,critical:`Krytyczny`}}}},messages:{config:{edited:`Ustawienia webhooka zostały zaktualizowane`,notEdited:`Nie udało się zaktualizować ustawień webhooka`}},texts:{aboutWebhookSettings:`Przekazuj powiadomienia systemowe jako żądanie POST JSON na dowolny skonfigurowany adres URL - własny serwer automatyzacji, webhook przychodzący platformy czatu lub samodzielnie hostowane narzędzie, takie jak n8n, Node-RED czy Home Assistant.`}},"sk-SK":{headings:{aboutWebhookSettings:`Nastavenia webhooku`},fields:{config:{enabled:{title:`Povolený`},url:{title:`URL`,placeholder:`https://example.com/hooks/panel`,description:`Upozornenia sa na túto URL odosielajú ako JSON metódou POST. Odporúča sa HTTPS.`,httpWarning:`Táto URL nie je šifrovaná. Obsah upozornenia sa bude prenášať v nešifrovanej podobe - používajte HTTPS všade, kde to cieľ podporuje, a HTTP používajte iba pre ciele v dôveryhodnej sieti vo vašej vlastnej LAN.`,invalid:`Zadajte absolútnu HTTP alebo HTTPS URL bez vložených prihlasovacích údajov`},headers:{title:`Vlastné hlavičky`,placeholder:`{"Authorization": "Bearer <token>"}`,description:`Voliteľný JSON objekt ďalších HTTP hlavičiek, napr. autorizačného tokenu typu Bearer. Vyžaduje HTTPS URL.`,invalidJson:`Zadajte plochý JSON objekt textových hodnôt, napr. {"Authorization": "Bearer token"}`,requiresHttps:`Vlastné hlavičky vyžadujú HTTPS URL webhooku`},minSeverity:{title:`Minimálna závažnosť`,description:`Preposielané sú iba upozornenia s touto závažnosťou alebo vyššou.`,options:{info:`Info`,warning:`Varovanie`,error:`Chyba`,critical:`Kritická`}}}},messages:{config:{edited:`Nastavenia webhooku boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia webhooku`}},texts:{aboutWebhookSettings:`Preposielajte systémové upozornenia ako JSON POST požiadavku na ľubovoľnú URL, ktorú nastavíte - na váš vlastný automatizačný server, prichádzajúci webhook chatovacej platformy alebo self-hosted nástroj, ako je n8n, Node-RED alebo Home Assistant.`}}},mF=`notifications-webhook-plugin`,hF=Ki.extend({url:X().nullable().optional(),urlConfigured:J().optional(),headers:X().nullable().optional(),headersConfigured:J().optional(),minSeverity:ir([`info`,`warning`,`error`,`critical`])}).superRefine((e,t)=>{typeof e.url==`string`&&e.url.trim()!==``&&!sF(e.url)&&t.addIssue({code:`custom`,path:[`url`],message:`Webhook URL must use HTTP or HTTPS without embedded credentials`}),typeof e.headers==`string`&&e.headers.trim()!==``&&!aF(e.headers)&&t.addIssue({code:`custom`,path:[`headers`],message:`Headers must be a flat JSON object of string values`});let n=typeof e.url==`string`&&e.url.trim().toLowerCase().startsWith(`http://`),r=typeof e.headers==`string`&&e.headers.trim()!==``;n&&r&&t.addIssue({code:`custom`,path:[`headers`],message:`Custom headers require an HTTPS webhook URL`})}),gF=Wi.extend({url:X().trim().nullable().optional(),urlConfigured:J().default(!1),headers:X().nullable().optional(),headersConfigured:J().default(!1),minSeverity:ir([`info`,`warning`,`error`,`critical`]).default(`warning`)}),_F=Zi.and(K({type:Y(mF),url:cF.nullable().optional(),headers:kn(e=>{if(typeof e!=`string`)return e;let t=e.trim();if(t!==``)return aF(t)?oF(t):e},sn(X(),X()).nullable().optional()),min_severity:G(Nt).optional()}));Ri.and(K({type:Y(mF),url:cF.nullable().optional(),url_configured:J(),headers:sn(X(),X()).nullable().optional(),headers_configured:J(),min_severity:G(Nt)}));var vF=Symbol(`FB-Plugin-NotificationsWebhook`),yF={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(pF)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{notificationsWebhookPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(vF,{type:mF,source:`com.fastybird.smart-panel.plugin.notifications-webhook`,name:`Generic webhook`,description:`Forwards system notifications as a JSON POST request to any URL you configure`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:fF},schemas:{pluginConfigSchema:gF,pluginConfigEditFormSchema:hF,pluginConfigUpdateReqSchema:_F},modules:[ka]}],modules:[ka],isCore:!0})}},bF=k({name:`CardsPageAddForm`,__name:`cards-page-add-form`,props:{id:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{model:a,formEl:o,formChanged:s,submit:c,formResult:l}=ro({id:n.id,type:jc}),u=P({title:[{required:!0,message:i(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}]});return F(()=>l.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(a),rules:u,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(i)(`dashboardModule.fields.pages.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(a).id,"onUpdate:modelValue":t[0]||=e=>L(a).id=e,placeholder:L(i)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.title.title`),prop:`title`},{default:B(()=>[D(L(U),{modelValue:L(a).title,"onUpdate:modelValue":t[1]||=e=>L(a).title=e,placeholder:L(i)(`dashboardModule.fields.pages.title.placeholder`),name:`title`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(a).icon,"onUpdate:modelValue":t[2]||=e=>L(a).icon=e,placeholder:L(i)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.order.title`),prop:`order`},{default:B(()=>[D(L(Qr),{modelValue:L(a).order,"onUpdate:modelValue":t[3]||=e=>L(a).order=e,placeholder:L(i)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.showTopBar.title`),prop:`showTopBar`},{default:B(()=>[D(L(Vn),{modelValue:L(a).showTopBar,"onUpdate:modelValue":t[4]||=e=>L(a).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:B(()=>[D(L(vo),{modelValue:L(a).displays,"onUpdate:modelValue":t[5]||=e=>L(a).displays=e,placeholder:L(i)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),D(L(zt),{size:`small`,class:`block mt-1 text-gray-500`},{default:B(()=>[E(z(L(i)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),xF=k({name:`CardsPageEditForm`,__name:`cards-page-edit-form`,props:{page:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{model:a,formEl:o,formChanged:s,submit:c,formResult:l}=Xa({page:n.page}),u=P({title:[{required:!0,message:i(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}]});return F(()=>l.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),c().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>s.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(a),rules:u,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(i)(`dashboardModule.fields.pages.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(a).id,"onUpdate:modelValue":t[0]||=e=>L(a).id=e,placeholder:L(i)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.title.title`),prop:`title`},{default:B(()=>[D(L(U),{modelValue:L(a).title,"onUpdate:modelValue":t[1]||=e=>L(a).title=e,placeholder:L(i)(`dashboardModule.fields.pages.title.placeholder`),name:`title`,size:`large`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(a).icon,"onUpdate:modelValue":t[2]||=e=>L(a).icon=e,placeholder:L(i)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.order.title`),prop:`order`},{default:B(()=>[D(L(Qr),{modelValue:L(a).order,"onUpdate:modelValue":t[3]||=e=>L(a).order=e,placeholder:L(i)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.showTopBar.title`),prop:`showTopBar`},{default:B(()=>[D(L(Vn),{modelValue:L(a).showTopBar,"onUpdate:modelValue":t[4]||=e=>L(a).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:B(()=>[D(L(vo),{modelValue:L(a).displays,"onUpdate:modelValue":t[5]||=e=>L(a).displays=e,placeholder:L(i)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),D(L(zt),{size:`small`,class:`block mt-1 text-gray-500`},{default:B(()=>[E(z(L(i)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),SF={"cs-CZ":{meta:{pages:{editCard:{title:`Upravit kartu`},addCard:{title:`Přidat kartu`},editTile:{title:`Upravit dlaždici karty`},addTile:{title:`Přidat dlaždici karty`},editDataSource:{title:`Upravit zdroj dat stránky`},addDataSource:{title:`Přidat zdroj dat stránky`}}},breadcrumbs:{pages:{configure:`stránka: {page}`,addCard:`přidat kartu`,editCard:`upravit kartu`,addTile:`přidat dlaždici karty`,editTile:`upravit dlaždici karty`,addDataSource:`přidat zdroj dat stránky`,editDataSource:`upravit zdroj dat stránky`}},headings:{pages:{addCard:`Přidat kartu`,editCard:`Upravit kartu`,addTile:`Přidat dlaždici karty`,editTile:`Upravit dlaždici karty`,addDataSource:`Přidat zdroj dat stránky`,editDataSource:`Upravit zdroj dat stránky`},cards:{remove:`Odebrat kartu`},configure:{display:`Displej`,cards:`Karty`},misc:{discard:`Zahodit změny?`}},subHeadings:{pages:{addCard:`Přidat novou kartu na tuto stránku`,editCard:`Upravit vlastnosti karty`,addTile:`Přidat novou dlaždici na tuto kartu`,editTile:`Upravit dlaždici karty`,addDataSource:`Přidat nový zdroj dat stránky`,editDataSource:`Upravit zdroj dat stránky`}},messages:{cards:{removed:`Karta {card} byla úspěšně odebrána.`,notFound:`Karta {card} nebyla nalezena.`,notRemoved:`Kartu {card} se nepodařilo odebrat.`,removeCanceled:`Odebrání karty {card} bylo zrušeno.`,deletedWhileEditing:`Tato karta byla smazána a již není k dispozici.`},tiles:{deletedWhileEditing:`Tato dlaždice byla smazána a již není k dispozici.`},dataSources:{deletedWhileEditing:`Tento zdroj dat byl smazán a již není k dispozici.`},misc:{requestError:`Něco se pokazilo, zkuste to prosím znovu později.`}},texts:{cards:{confirmRemove:`Opravdu chcete odebrat kartu {card}?`,noCards:`Na tuto stránku zatím nebyly přidány žádné karty.`,noTiles:`V této kartě nejsou žádné dlaždice. Klikněte na + pro přidání.`,tilesCount:`dlaždice`,loadingCard:`Načítání karty...`},tiles:{loadingTile:`Načítání dlaždice...`},dataSources:{loadingDataSource:`Načítání zdroje dat...`},misc:{confirmDiscard:`Máte neuložené změny. Opravdu je chcete zahodit?`}},buttons:{discard:{title:`Zahodit`},close:{title:`Zavřít`},add:{title:`Přidat`},save:{title:`Uložit`},update:{title:`Aktualizovat`},yes:{title:`Ano`},no:{title:`Ne`},manageElements:{title:`Spravovat prvky`},addCard:{title:`Přidat kartu`},addPageDataSource:{title:`Přidat zdroj dat stránky`}},fields:{cards:{id:{title:`Identifikátor`},title:{title:`Název`,placeholder:`Zadejte název karty`,validation:{required:`Zadejte prosím název karty`}},icon:{title:`Ikona`,placeholder:`Vyberte ikonu`},order:{title:`Pořadí`,placeholder:`Pořadí zobrazení`},rows:{title:`Řádky`,placeholder:`Počet řádků`},cols:{title:`Sloupce`,placeholder:`Počet sloupců`}}}},"de-DE":{meta:{pages:{editCard:{title:`Karte bearbeiten`},addCard:{title:`Karte hinzufügen`},editTile:{title:`Kartenkachel bearbeiten`},addTile:{title:`Kartenkachel hinzufügen`},editDataSource:{title:`Seitendatenquelle bearbeiten`},addDataSource:{title:`Seitendatenquelle hinzufügen`}}},breadcrumbs:{pages:{configure:`Seite: {page}`,addCard:`Karte hinzufügen`,editCard:`Karte bearbeiten`,addTile:`Kartenkachel hinzufügen`,editTile:`Kartenkachel bearbeiten`,addDataSource:`Seitendatenquelle hinzufügen`,editDataSource:`Seitendatenquelle bearbeiten`}},headings:{pages:{addCard:`Karte hinzufügen`,editCard:`Karte bearbeiten`,addTile:`Kartenkachel hinzufügen`,editTile:`Kartenkachel bearbeiten`,addDataSource:`Seitendatenquelle hinzufügen`,editDataSource:`Seitendatenquelle bearbeiten`},cards:{remove:`Karte entfernen`},configure:{display:`Anzeige`,cards:`Karten`},misc:{discard:`Änderungen verwerfen?`}},subHeadings:{pages:{addCard:`Neue Karte zu dieser Seite hinzufügen`,editCard:`Karteneigenschaften bearbeiten`,addTile:`Neue Kachel zu dieser Karte hinzufügen`,editTile:`Kartenkachel bearbeiten`,addDataSource:`Neue Seitendatenquelle hinzufügen`,editDataSource:`Seitendatenquelle bearbeiten`}},messages:{cards:{removed:`Karte {card} wurde erfolgreich entfernt.`,notFound:`Karte {card} wurde nicht gefunden.`,notRemoved:`Karte {card} konnte nicht entfernt werden.`,removeCanceled:`Entfernung von Karte {card} wurde abgebrochen.`,deletedWhileEditing:`Diese Karte wurde gelöscht und ist nicht mehr verfügbar.`},tiles:{deletedWhileEditing:`Diese Kachel wurde gelöscht und ist nicht mehr verfügbar.`},dataSources:{deletedWhileEditing:`Diese Datenquelle wurde gelöscht und ist nicht mehr verfügbar.`},misc:{requestError:`Etwas ist schiefgelaufen, bitte versuchen Sie es später erneut.`}},texts:{cards:{confirmRemove:`Sind Sie sicher, dass Sie Karte {card} entfernen möchten?`,noCards:`Dieser Seite wurden noch keine Karten hinzugefügt.`,noTiles:`Keine Kacheln in dieser Karte. Klicken Sie auf +, um eine hinzuzufügen.`,tilesCount:`Kacheln`,loadingCard:`Karte wird geladen...`},tiles:{loadingTile:`Kachel wird geladen...`},dataSources:{loadingDataSource:`Datenquelle wird geladen...`},misc:{confirmDiscard:`Sie haben ungespeicherte Änderungen. Möchten Sie diese wirklich verwerfen?`}},buttons:{discard:{title:`Verwerfen`},close:{title:`Schließen`},add:{title:`Hinzufügen`},save:{title:`Speichern`},update:{title:`Aktualisieren`},yes:{title:`Ja`},no:{title:`Nein`},manageElements:{title:`Elemente verwalten`},addCard:{title:`Karte hinzufügen`},addPageDataSource:{title:`Seitendatenquelle hinzufügen`}},fields:{cards:{id:{title:`Bezeichner`},title:{title:`Titel`,placeholder:`Kartentitel eingeben`,validation:{required:`Bitte geben Sie einen Kartentitel ein`}},icon:{title:`Symbol`,placeholder:`Symbol auswählen`},order:{title:`Reihenfolge`,placeholder:`Anzeigereihenfolge`},rows:{title:`Zeilen`,placeholder:`Anzahl der Zeilen`},cols:{title:`Spalten`,placeholder:`Anzahl der Spalten`}}}},"en-US":{meta:{pages:{editCard:{title:`Edit card`},addCard:{title:`Add card`},editTile:{title:`Edit card tile`},addTile:{title:`Add card tile`},editDataSource:{title:`Edit page data source`},addDataSource:{title:`Add page data source`}}},breadcrumbs:{pages:{configure:`page: {page}`,addCard:`add card`,editCard:`edit card`,addTile:`add card tile`,editTile:`edit card tile`,addDataSource:`add page data source`,editDataSource:`edit page data source`}},headings:{pages:{addCard:`Add card`,editCard:`Edit card`,addTile:`Add card tile`,editTile:`Edit card tile`,addDataSource:`Add page data source`,editDataSource:`Edit page data source`},cards:{remove:`Remove card`},configure:{display:`Display`,cards:`Cards`},misc:{discard:`Discard changes?`}},subHeadings:{pages:{addCard:`Add new card to this page`,editCard:`Edit card properties`,addTile:`Add new tile to this card`,editTile:`Edit card tile`,addDataSource:`Add new page data source`,editDataSource:`Edit page data source`}},messages:{cards:{removed:`Card {card} was successfully removed.`,notFound:`Card {card} was not found.`,notRemoved:`Card {card} couldn't be removed.`,removeCanceled:`Card {card} removal was canceled.`,deletedWhileEditing:`This card was deleted and is no longer available.`},tiles:{deletedWhileEditing:`This tile was deleted and is no longer available.`},dataSources:{deletedWhileEditing:`This data source was deleted and is no longer available.`},misc:{requestError:`Something went wrong, please try again later.`}},texts:{cards:{confirmRemove:`Are you sure you want to remove card {card}?`,noCards:`No cards have been added to this page yet.`,noTiles:`No tiles in this card. Click + to add one.`,tilesCount:`tiles`,loadingCard:`Loading card...`},tiles:{loadingTile:`Loading tile...`},dataSources:{loadingDataSource:`Loading data source...`},misc:{confirmDiscard:`You have unsaved changes. Are you sure you want to discard them?`}},buttons:{discard:{title:`Discard`},close:{title:`Close`},add:{title:`Add`},save:{title:`Save`},update:{title:`Update`},yes:{title:`Yes`},no:{title:`No`},manageElements:{title:`Manage elements`},addCard:{title:`Add card`},addPageDataSource:{title:`Add page data source`}},fields:{cards:{id:{title:`Identifier`},title:{title:`Title`,placeholder:`Enter card title`,validation:{required:`Please enter a card title`}},icon:{title:`Icon`,placeholder:`Select an icon`},order:{title:`Order`,placeholder:`Display order`},rows:{title:`Rows`,placeholder:`Number of rows`},cols:{title:`Columns`,placeholder:`Number of columns`}}}},"es-ES":{meta:{pages:{editCard:{title:`Editar tarjeta`},addCard:{title:`Añadir tarjeta`},editTile:{title:`Editar mosaico de tarjeta`},addTile:{title:`Añadir mosaico de tarjeta`},editDataSource:{title:`Editar fuente de datos de página`},addDataSource:{title:`Añadir fuente de datos de página`}}},breadcrumbs:{pages:{configure:`página: {page}`,addCard:`añadir tarjeta`,editCard:`editar tarjeta`,addTile:`añadir mosaico de tarjeta`,editTile:`editar mosaico de tarjeta`,addDataSource:`añadir fuente de datos de página`,editDataSource:`editar fuente de datos de página`}},headings:{pages:{addCard:`Añadir tarjeta`,editCard:`Editar tarjeta`,addTile:`Añadir mosaico de tarjeta`,editTile:`Editar mosaico de tarjeta`,addDataSource:`Añadir fuente de datos de página`,editDataSource:`Editar fuente de datos de página`},cards:{remove:`Eliminar tarjeta`},configure:{display:`Pantalla`,cards:`Tarjetas`},misc:{discard:`¿Descartar cambios?`}},subHeadings:{pages:{addCard:`Añadir nueva tarjeta a esta página`,editCard:`Editar propiedades de la tarjeta`,addTile:`Añadir nuevo mosaico a esta tarjeta`,editTile:`Editar mosaico de tarjeta`,addDataSource:`Añadir nueva fuente de datos de página`,editDataSource:`Editar fuente de datos de página`}},messages:{cards:{removed:`La tarjeta {card} se ha eliminado correctamente.`,notFound:`No se encontró la tarjeta {card}.`,notRemoved:`No se pudo eliminar la tarjeta {card}.`,removeCanceled:`Se canceló la eliminación de la tarjeta {card}.`,deletedWhileEditing:`Esta tarjeta fue eliminada y ya no está disponible.`},tiles:{deletedWhileEditing:`Este mosaico fue eliminado y ya no está disponible.`},dataSources:{deletedWhileEditing:`Esta fuente de datos fue eliminada y ya no está disponible.`},misc:{requestError:`Algo salió mal, por favor inténtelo de nuevo más tarde.`}},texts:{cards:{confirmRemove:`¿Está seguro de que desea eliminar la tarjeta {card}?`,noCards:`Aún no se han añadido tarjetas a esta página.`,noTiles:`No hay mosaicos en esta tarjeta. Haga clic en + para añadir uno.`,tilesCount:`mosaicos`,loadingCard:`Cargando tarjeta...`},tiles:{loadingTile:`Cargando mosaico...`},dataSources:{loadingDataSource:`Cargando fuente de datos...`},misc:{confirmDiscard:`Tiene cambios sin guardar. ¿Está seguro de que desea descartarlos?`}},buttons:{discard:{title:`Descartar`},close:{title:`Cerrar`},add:{title:`Añadir`},save:{title:`Guardar`},update:{title:`Actualizar`},yes:{title:`Sí`},no:{title:`No`},manageElements:{title:`Gestionar elementos`},addCard:{title:`Añadir tarjeta`},addPageDataSource:{title:`Añadir fuente de datos de página`}},fields:{cards:{id:{title:`Identificador`},title:{title:`Título`,placeholder:`Introduzca el título de la tarjeta`,validation:{required:`Por favor, introduzca un título de tarjeta`}},icon:{title:`Icono`,placeholder:`Seleccione un icono`},order:{title:`Orden`,placeholder:`Orden de visualización`},rows:{title:`Filas`,placeholder:`Número de filas`},cols:{title:`Columnas`,placeholder:`Número de columnas`}}}},"pl-PL":{meta:{pages:{editCard:{title:`Edytuj kartę`},addCard:{title:`Dodaj kartę`},editTile:{title:`Edytuj kafelek karty`},addTile:{title:`Dodaj kafelek karty`},editDataSource:{title:`Edytuj źródło danych strony`},addDataSource:{title:`Dodaj źródło danych strony`}}},breadcrumbs:{pages:{configure:`strona: {page}`,addCard:`dodaj kartę`,editCard:`edytuj kartę`,addTile:`dodaj kafelek karty`,editTile:`edytuj kafelek karty`,addDataSource:`dodaj źródło danych strony`,editDataSource:`edytuj źródło danych strony`}},headings:{pages:{addCard:`Dodaj kartę`,editCard:`Edytuj kartę`,addTile:`Dodaj kafelek karty`,editTile:`Edytuj kafelek karty`,addDataSource:`Dodaj źródło danych strony`,editDataSource:`Edytuj źródło danych strony`},cards:{remove:`Usuń kartę`},configure:{display:`Wyświetlanie`,cards:`Karty`},misc:{discard:`Odrzucić zmiany?`}},subHeadings:{pages:{addCard:`Dodaj nową kartę do tej strony`,editCard:`Edytuj właściwości karty`,addTile:`Dodaj nowy kafelek do tej karty`,editTile:`Edytuj kafelek karty`,addDataSource:`Dodaj nowe źródło danych strony`,editDataSource:`Edytuj źródło danych strony`}},messages:{cards:{removed:`Karta {card} została pomyślnie usunięta.`,notFound:`Karta {card} nie została znaleziona.`,notRemoved:`Nie udało się usunąć karty {card}.`,removeCanceled:`Usuwanie karty {card} zostało anulowane.`,deletedWhileEditing:`Ta karta została usunięta i nie jest już dostępna.`},tiles:{deletedWhileEditing:`Ten kafelek został usunięty i nie jest już dostępny.`},dataSources:{deletedWhileEditing:`To źródło danych zostało usunięte i nie jest już dostępne.`},misc:{requestError:`Coś poszło nie tak, spróbuj ponownie później.`}},texts:{cards:{confirmRemove:`Czy na pewno chcesz usunąć kartę {card}?`,noCards:`Do tej strony nie dodano jeszcze żadnych kart.`,noTiles:`Brak kafelków w tej karcie. Kliknij +, aby dodać jeden.`,tilesCount:`kafelki`,loadingCard:`Ładowanie karty...`},tiles:{loadingTile:`Ładowanie kafelka...`},dataSources:{loadingDataSource:`Ładowanie źródła danych...`},misc:{confirmDiscard:`Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?`}},buttons:{discard:{title:`Odrzuć`},close:{title:`Zamknij`},add:{title:`Dodaj`},save:{title:`Zapisz`},update:{title:`Zaktualizuj`},yes:{title:`Tak`},no:{title:`Nie`},manageElements:{title:`Zarządzaj elementami`},addCard:{title:`Dodaj kartę`},addPageDataSource:{title:`Dodaj źródło danych strony`}},fields:{cards:{id:{title:`Identyfikator`},title:{title:`Tytuł`,placeholder:`Wprowadź tytuł karty`,validation:{required:`Wprowadź tytuł karty`}},icon:{title:`Ikona`,placeholder:`Wybierz ikonę`},order:{title:`Kolejność`,placeholder:`Kolejność wyświetlania`},rows:{title:`Wiersze`,placeholder:`Liczba wierszy`},cols:{title:`Kolumny`,placeholder:`Liczba kolumn`}}}},"sk-SK":{meta:{pages:{editCard:{title:`Upraviť kartu`},addCard:{title:`Pridať kartu`},editTile:{title:`Upraviť dlaždicu karty`},addTile:{title:`Pridať dlaždicu karty`},editDataSource:{title:`Upraviť zdroj dát stránky`},addDataSource:{title:`Pridať zdroj dát stránky`}}},breadcrumbs:{pages:{configure:`stránka: {page}`,addCard:`pridať kartu`,editCard:`upraviť kartu`,addTile:`pridať dlaždicu karty`,editTile:`upraviť dlaždicu karty`,addDataSource:`pridať zdroj dát stránky`,editDataSource:`upraviť zdroj dát stránky`}},headings:{pages:{addCard:`Pridať kartu`,editCard:`Upraviť kartu`,addTile:`Pridať dlaždicu karty`,editTile:`Upraviť dlaždicu karty`,addDataSource:`Pridať zdroj dát stránky`,editDataSource:`Upraviť zdroj dát stránky`},cards:{remove:`Odstrániť kartu`},configure:{display:`Displej`,cards:`Karty`},misc:{discard:`Zahodiť zmeny?`}},subHeadings:{pages:{addCard:`Pridať novú kartu na túto stránku`,editCard:`Upraviť vlastnosti karty`,addTile:`Pridať novú dlaždicu do tejto karty`,editTile:`Upraviť dlaždicu karty`,addDataSource:`Pridať nový zdroj dát stránky`,editDataSource:`Upraviť zdroj dát stránky`}},messages:{cards:{removed:`Karta {card} bola úspešne odstránená.`,notFound:`Karta {card} nebola nájdená.`,notRemoved:`Kartu {card} sa nepodarilo odstrániť.`,removeCanceled:`Odstránenie karty {card} bolo zrušené.`,deletedWhileEditing:`Táto karta bola odstránená a už nie je dostupná.`},tiles:{deletedWhileEditing:`Táto dlaždica bola odstránená a už nie je dostupná.`},dataSources:{deletedWhileEditing:`Tento zdroj dát bol odstránený a už nie je dostupný.`},misc:{requestError:`Niečo sa pokazilo, skúste to prosím neskôr.`}},texts:{cards:{confirmRemove:`Naozaj chcete odstrániť kartu {card}?`,noCards:`Na túto stránku ešte neboli pridané žiadne karty.`,noTiles:`Žiadne dlaždice v tejto karte. Kliknite na + pre pridanie.`,tilesCount:`dlaždíc`,loadingCard:`Načítavanie karty...`},tiles:{loadingTile:`Načítavanie dlaždice...`},dataSources:{loadingDataSource:`Načítavanie zdroja dát...`},misc:{confirmDiscard:`Máte neuložené zmeny. Naozaj ich chcete zahodiť?`}},buttons:{discard:{title:`Zahodiť`},close:{title:`Zavrieť`},add:{title:`Pridať`},save:{title:`Uložiť`},update:{title:`Aktualizovať`},yes:{title:`Áno`},no:{title:`Nie`},manageElements:{title:`Spravovať elementy`},addCard:{title:`Pridať kartu`},addPageDataSource:{title:`Pridať zdroj dát stránky`}},fields:{cards:{id:{title:`Identifikátor`},title:{title:`Názov`,placeholder:`Zadajte názov karty`,validation:{required:`Prosím zadajte názov karty`}},icon:{title:`Ikona`,placeholder:`Vyberte ikonu`},order:{title:`Poradie`,placeholder:`Poradie zobrazenia`},rows:{title:`Riadky`,placeholder:`Počet riadkov`},cols:{title:`Stĺpce`,placeholder:`Počet stĺpcov`}}}}},CF=[{path:`pages-cards/configure`,name:Nc.PAGE,component:()=>hr(()=>import(`./view-page-configure-C5n0g4eO.js`),__vite__mapDeps([156,2,3,4,5,6,22,23,38,121,122,70,24,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,157,50,158,159,160,161,162])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Page configuration`,icon:`mdi:view-dashboard-variant`},children:[{path:`card/add`,name:Nc.PAGE_ADD_CARD,component:()=>hr(()=>import(`./view-card-add-BcIFVzzf.js`),__vite__mapDeps([163,2,3,4,11,5,6,44,121,122,70,24,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,164,161,162])),props:e=>({pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Add card`,icon:`mdi:add-circle`}},{path:`card/:cardId`,name:Nc.PAGE_EDIT_CARD,component:()=>hr(()=>import(`./view-card-edit-BbS-QIUa.js`),__vite__mapDeps([165,2,3,4,11,5,6,24,44,121,122,70,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,161,166,162])),props:e=>({id:e.params.cardId,pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Edit card`,icon:`mdi:pencil-circle`}},{path:`card/:cardId/tile/add`,name:Nc.PAGE_CARD_ADD_TILE,component:()=>hr(()=>import(`./view-tile-add-Cn7SJEqT.js`),__vite__mapDeps([167,2,3,4,11,5,6,19,44,121,122,70,24,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,162])),props:e=>({cardId:e.params.cardId,pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Add tile`,icon:`mdi:add-circle`}},{path:`card/:cardId/tile/:tileId`,name:Nc.PAGE_CARD_EDIT_TILE,component:()=>hr(()=>import(`./view-tile-edit-D80VgTdu.js`),__vite__mapDeps([168,2,3,4,11,5,6,24,44,121,122,70,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,162])),props:e=>({id:e.params.tileId,cardId:e.params.cardId,pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Edit tile`,icon:`mdi:pencil-circle`}},{path:`data-source/add`,name:Nc.PAGE_ADD_DATA_SOURCE,component:()=>hr(()=>import(`./view-data-source-add-_7ip7mrf.js`),__vite__mapDeps([169,2,3,4,11,5,6,19,44,121,122,70,24,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,162])),props:e=>({pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Add data source`,icon:`mdi:add-circle`}},{path:`data-source/:dataSourceId`,name:Nc.PAGE_EDIT_DATA_SOURCE,component:()=>hr(()=>import(`./view-data-source-edit-CoUrprKG.js`),__vite__mapDeps([170,2,3,4,11,5,6,24,44,121,122,70,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,162])),props:e=>({id:e.params.dataSourceId,pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Edit data source`,icon:`mdi:pencil-circle`}}]}],wF=Qa,TF=Za,EF=K({id:Ga,draft:J().default(!1),page:Ga,title:X().trim().nonempty(),icon:X().trim().nullable().default(null),order:q().default(0),rows:q().gte(1).nullable().default(null),cols:q().gte(1).nullable().default(null),createdAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)),updatedAt:Er([X().datetime({offset:!0}),sr()]).transform(e=>e instanceof Date?e:new Date(e)).optional().nullable().default(null)});K({fetching:K({items:W(Ga).default([]),item:W(Ga)}),creating:W(Ga),updating:W(Ga),deleting:W(Ga)}),K({id:Ga,data:Sn({})}),K({id:Ga,data:K({title:X().trim().nonempty(),icon:X().trim().transform(e=>e===``?null:e).nullable().default(null).optional(),order:q().default(0),rows:q().gte(1).nullable().default(null).optional(),cols:q().gte(1).nullable().default(null).optional()}).catchall(hn())}),K({id:Ga.optional(),pageId:Ga.optional()}),K({id:Ga,pageId:Ga}),K({pageId:Ga});var DF=K({id:Ga.optional().default(cn()),pageId:Ga,draft:J().optional().default(!1),data:K({title:X().trim().nonempty(),icon:X().trim().transform(e=>e===``?null:e).nullable().default(null).optional(),order:q().default(0),rows:q().gte(1).nullable().default(null).optional(),cols:q().gte(1).nullable().default(null).optional()})}),OF=K({id:Ga,pageId:Ga,data:K({title:X().trim().nonempty().optional(),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),order:q().default(0),rows:q().gte(1).nullable().optional(),cols:q().gte(1).nullable().optional()})});K({id:Ga,pageId:Ga}),K({id:Ga,pageId:Ga});var kF=K({id:X().uuid().optional(),title:X().trim().nonempty(),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),order:q(),rows:q().gte(1).nullable().optional(),cols:q().gte(1).nullable().optional(),tiles:W(ho).optional(),data_source:W(Ua).optional()}),AF=K({title:X().trim().nonempty().optional(),icon:X().trim().transform(e=>e===``?null:e).nullable().optional(),order:q().optional(),rows:q().gte(1).nullable().optional(),cols:q().gte(1).nullable().optional()}),jF=K({id:X().uuid(),page:X().uuid(),title:X().trim().nonempty(),icon:X().trim().nullable(),order:q(),rows:q().gte(1).nullable(),cols:q().gte(1).nullable(),created_at:X().date(),updated_at:X().date().nullable(),tiles:W(fo),data_source:W(qa)}),MF=e=>{let t=EF.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new La(`Failed to validate received card data.`);return t.data},NF=e=>{let t=kF.safeParse(ar(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new La(`Failed to validate create card request.`);return t.data},PF=e=>{let t=AF.safeParse(ar(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new La(`Failed to validate update card request.`);return t.data},FF={fetching:{items:[],item:[]},creating:[],updating:[],deleting:[]},IF=jn(`pages_cards_plugin-cards`,()=>{let e=Zn(),t=On(),{getElement:n}=so(),{getElement:r}=Ka(),i=pn(),a=j(FF),o=j([]),s=j({}),c=e=>o.value.includes(e),l=e=>a.value.fetching.item.includes(e),u=e=>a.value.fetching.items.includes(e),d=()=>Object.values(s.value),f=e=>Object.values(s.value??{}).filter(t=>t.page===e),p=e=>s.value[e]??null,m={},h={},g=e=>_({id:e.id,data:MF(e.data)}),_=e=>{if(e.id&&s.value&&e.id in s.value){let n=EF.safeParse({...s.value[e.id],...e.data});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new La(`Failed to insert card.`);return s.value[n.data.id]=n.data}let n=EF.safeParse({...e.data,id:e.id});if(!n.success)throw t.error(`Schema validation failed with:`,n.error),new La(`Failed to insert card.`);return s.value=s.value??{},s.value[n.data.id]=n.data},v=e=>{if(s.value){if(e.pageId!==void 0){let t=f(e.pageId);for(let e of t)e.id in(s.value??{})&&delete(s.value??{})[e.id];return}else if(e.id!==void 0){delete s.value[e.id];return}throw new Ma(`You have to provide at least page or card id`)}},y=async t=>{let n=m[t.id];if(n)return n;let r=(async()=>{if(a.value.fetching.item.includes(t.id))throw new Ia(`Already fetching card.`);a.value.fetching.item.push(t.id);try{let{data:n,error:r,response:i}=await e.client.GET(`/${Ie}/${Mc}/cards/{id}`,{params:{path:{pageId:t.pageId,id:t.id}}});if(n!==void 0){let e=MF(n.data);return s.value[e.id]=e,T(e,n.data.data_source),E(e,n.data.tiles),e}let a=`Failed to fetch card.`;throw r&&(a=Kn(r,a)),new Ia(a,i.status)}finally{a.value.fetching.item=a.value.fetching.item.filter(e=>e!==t.id)}})();m[t.id]=r;try{return await r}finally{delete m[t.id]}},b=async t=>{let n=h[t.pageId];if(n)return n;let r=(async()=>{if(a.value.fetching.items.includes(t.pageId))throw new Ia(`Already fetching cards.`);a.value.fetching.items.push(t.pageId),o.value=o.value.filter(e=>e!==t.pageId),o.value=[...new Set(o.value)];try{let{data:n,error:r,response:i}=await e.client.GET(`/${Ie}/${Mc}/cards`,{params:{query:{page:t.pageId}}});if(n!==void 0){o.value.push(t.pageId),o.value=[...new Set(o.value)];let e=Object.fromEntries(n.data.map(e=>{let t=MF(e);return T(t,e.data_source),E(t,e.tiles),[t.id,t]}));return s.value={...s.value,...e},t.pageId?f(t.pageId):Object.values(s.value)}let a=`Failed to fetch cards.`;throw r&&(a=Kn(r,a)),new Ia(a,i.status)}finally{a.value.fetching.items=a.value.fetching.items.filter(e=>e!==t.pageId)}})();h[t.pageId]=r;try{return await r}finally{delete h[t.pageId]}},x=async n=>{let r=DF.safeParse(n);if(!r.success)throw t.error(`Schema validation failed with:`,r.error),new La(`Failed to add card.`);let i=EF.safeParse({...r.data.data,id:r.data.id,page:r.data.pageId,draft:r.data.draft,createdAt:new Date});if(!i.success)throw t.error(`Schema validation failed with:`,i.error),new La(`Failed to add card.`);if(a.value.creating.push(i.data.id),s.value[i.data.id]=i.data,i.data.draft)return a.value.creating=a.value.creating.filter(e=>e!==i.data.id),i.data;try{let{data:t,error:r,response:a}=await e.client.POST(`/${Ie}/${Mc}/cards`,{body:{data:{...NF({...i.data,id:n.id}),page:n.pageId}}});if(t!==void 0&&t.data.id===n.id){let e=MF(t.data);return s.value[e.id]=e,T(e,t.data.data_source),E(e,t.data.tiles),e}delete s.value[i.data.id];let o=`Failed to create card.`;throw r&&(o=Kn(r,o)),new Ia(o,a.status)}finally{a.value.creating=a.value.creating.filter(e=>e!==i.data.id)}},S=async n=>{let r=OF.safeParse(n);if(!r.success)throw t.error(`Schema validation failed with:`,r.error),new La(`Failed to edit card.`);if(a.value.updating.includes(n.id))throw new Ma(`Card is already being updated.`);if(!(n.id in s.value))throw new Ma(`Failed to get card data to update.`);let i=EF.safeParse({...s.value[n.id],...(0,Xd.omitBy)(r.data.data,Xd.isUndefined)});if(!i.success)throw t.error(`Schema validation failed with:`,i.error),new La(`Failed to edit card.`);if(a.value.updating.push(n.id),s.value[i.data.id]=i.data,i.data.draft)return a.value.updating=a.value.updating.filter(e=>e!==i.data.id),i.data;try{let{data:t,error:r,response:a}=await e.client.PATCH(`/${Ie}/${Mc}/cards/{id}`,{params:{path:{id:n.id}},body:{data:PF(i.data)}});if(t!==void 0){let e=MF(t.data);return s.value[e.id]=e,e}await y({id:n.id,pageId:n.pageId});let o=`Failed to update card.`;throw r&&(o=Kn(r,o)),new Ia(o,a.status)}finally{a.value.updating=a.value.updating.filter(e=>e!==n.id)}},C=async n=>{if(a.value.updating.includes(n.id))throw new Ma(`Cards is already being saved.`);if(!(n.id in s.value))throw new Ma(`Failed to get card data to save.`);let r=EF.safeParse(s.value[n.id]);if(!r.success)throw t.error(`Schema validation failed with:`,r.error),new La(`Failed to save card.`);a.value.updating.push(n.id);try{let{data:t,error:i,response:a}=await e.client.POST(`/${Ie}/${Mc}/cards`,{body:{data:{...NF({...r.data,id:n.id}),page:n.pageId}}});if(t!==void 0&&t.data.id===n.id){let e=MF(t.data);return s.value[e.id]=e,T(e,t.data.data_source),E(e,t.data.tiles),e}let o=`Failed to create card.`;throw i&&(o=Kn(i,o)),new Ia(o,a.status)}finally{a.value.updating=a.value.updating.filter(e=>e!==n.id)}},w=async t=>{if(a.value.deleting.includes(t.id))throw new Ma(`Card is already being removed.`);if(!Object.keys(s.value).includes(t.id))return!0;a.value.deleting.push(t.id);let n=s.value[t.id];if(delete s.value[t.id],n?.draft)a.value.deleting=a.value.deleting.filter(e=>e!==t.id);else try{let{error:n,response:r}=await e.client.DELETE(`/${Ie}/${Mc}/cards/{id}`,{params:{path:{pageId:t.pageId,id:t.id}}});if(r.status===204){let e=i.getStore(Ra),n=i.getStore(za);return n.unset({parent:{type:`card`,id:t.id}}),e.findForParent(`card`,t.id).forEach(e=>{n.unset({parent:{type:`tile`,id:e.id}})}),e.unset({parent:{type:`card`,id:t.id}}),!0}await y({id:t.id,pageId:t.pageId});let a=`Remove card failed.`;throw n&&(a=Kn(n,a)),new Ia(a,r.status)}finally{a.value.deleting=a.value.deleting.filter(e=>e!==t.id)}return!0},T=(e,t)=>{let n=i.getStore(za);t.forEach(t=>{let i=r(t.type);n.set({id:t.id,parent:{type:`card`,id:e.id},data:Va(t,i?.schemas?.dataSourceSchema||Ja)})}),aa(n.firstLoad,e.id)},E=(e,t)=>{let a=i.getStore(Ra),o=i.getStore(za);t.forEach(t=>{let i=n(t.type);a.set({id:t.id,parent:{type:`card`,id:e.id},data:Ba(t,i?.schemas?.tileSchema||po)}),t.data_source.forEach(e=>{let n=r(e.type);o.set({id:e.id,parent:{type:`tile`,id:t.id},data:Va(e,n?.schemas?.dataSourceSchema||Ja)})}),aa(o.firstLoad,t.id)}),aa(a.firstLoad,e.id)};return{semaphore:a,firstLoad:o,data:s,firstLoadFinished:c,getting:l,fetching:u,findAll:d,findForPage:f,findById:p,onEvent:g,set:_,unset:v,get:y,fetch:b,add:x,edit:S,save:C,remove:w}}),LF=e=>IF(e),RF=uo.extend({}),zF=mo.and(K({type:Y(jc),cards:W(kF).optional(),data_source:W(Ua).optional()})),BF=go.and(K({type:Y(jc)}));co.and(K({type:Y(jc),cards:W(jF),data_source:W(qa)}));var VF=Symbol(`FB-Plugin-PagesCards`),HF={install:(e,t)=>{let n=ra(e),r=pn(e),i=ut(e),a=_r(e);for(let[e,n]of Object.entries(SF)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{pagesCardsPlugin:n});t.i18n.global.setLocaleMessage(e,r)}t.router.getRoutes().find(e=>e.name===Te.ROOT)&&CF.forEach(e=>{t.router.addRoute(Fa.PAGE_PLUGIN,e)});let o=LF(t.store);e.provide(Ac,o),r.addStore(Ac,o),n.addPlugin(VF,{type:Pc,source:`com.fastybird.smart-panel.plugin.pages-cards`,name:`Cards Page`,description:`Organize tiles into separate cards for better structure. Useful for grouping related controls and data on a single page.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:jc,name:`Cards`,components:{pageAddForm:bF,pageEditForm:xF},schemas:{pageSchema:RF,pageAddFormSchema:wF,pageEditFormSchema:TF,pageCreateReqSchema:zF,pageUpdateReqSchema:BF}}],routes:{configure:e=>t.router.resolve({name:Nc.PAGE,params:{id:e}})},modules:[Na],isCore:!0}),i.on(`event`,e=>{if(e?.event?.startsWith(`PagesCardsPlugin.`)&&!(e.payload===null||typeof e.payload!=`object`||!(`id`in e.payload)||typeof e.payload.id!=`string`))switch(e.event){case Fc.CARD_CREATED:case Fc.CARD_UPDATED:o.onEvent({id:e.payload.id,data:e.payload});break;case Fc.CARD_DELETED:o.unset({id:e.payload.id});break;default:a.warn(`Unhandled pages cards plugin event:`,e.event)}})}},UF=`pages-device-detail-plugin`,WF=`pages-device-detail`,GF=k({name:`DeviceDetailPageAddForm`,__name:`device-detail-page-add-form`,props:{id:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=ro({id:n.id,type:WF}),{devices:d,fetchDevices:f,areLoading:m}=fs(),h=P({title:[{required:!0,message:a(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}],device:[{required:!0,message:a(`pagesDeviceDetailPlugin.fields.device.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value.filter(e=>!e.hidden),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.pages.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.title.title`),prop:`title`},{default:B(()=>[D(L(U),{modelValue:L(o).title,"onUpdate:modelValue":t[1]||=e=>L(o).title=e,placeholder:L(a)(`dashboardModule.fields.pages.title.placeholder`),name:`title`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`pagesDeviceDetailPlugin.fields.device.title`),prop:`device`},{default:B(()=>[D(L(ei),{modelValue:L(o).device,"onUpdate:modelValue":t[2]||=e=>L(o).device=e,placeholder:L(a)(`pagesDeviceDetailPlugin.fields.device.placeholder`),name:`device`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[3]||=e=>L(o).icon=e,placeholder:L(a)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.order.title`),prop:`order`},{default:B(()=>[D(L(Qr),{modelValue:L(o).order,"onUpdate:modelValue":t[4]||=e=>L(o).order=e,placeholder:L(a)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.showTopBar.title`),prop:`showTopBar`},{default:B(()=>[D(L(Vn),{modelValue:L(o).showTopBar,"onUpdate:modelValue":t[5]||=e=>L(o).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:B(()=>[D(L(vo),{modelValue:L(o).displays,"onUpdate:modelValue":t[6]||=e=>L(o).displays=e,placeholder:L(a)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),D(L(zt),{size:`small`,class:`block mt-1 text-gray-500`},{default:B(()=>[E(z(L(a)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),KF=k({name:`DeviceDetailPageEditForm`,__name:`device-detail-page-edit-form`,props:{page:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=Xa({page:n.page}),{devices:d,fetchDevices:f,areLoading:m}=fs(),h=P({title:[{required:!0,message:a(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}],device:[{required:!0,message:a(`pagesDeviceDetailPlugin.fields.device.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value.filter(e=>!e.hidden),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.pages.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.title.title`),prop:`title`},{default:B(()=>[D(L(U),{modelValue:L(o).title,"onUpdate:modelValue":t[1]||=e=>L(o).title=e,placeholder:L(a)(`dashboardModule.fields.pages.title.placeholder`),name:`title`,size:`large`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`pagesDeviceDetailPlugin.fields.device.title`),prop:`device`},{default:B(()=>[D(L(ei),{modelValue:L(o).device,"onUpdate:modelValue":t[2]||=e=>L(o).device=e,placeholder:L(a)(`pagesDeviceDetailPlugin.fields.device.placeholder`),name:`device`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(o).icon,"onUpdate:modelValue":t[3]||=e=>L(o).icon=e,placeholder:L(a)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.order.title`),prop:`order`},{default:B(()=>[D(L(Qr),{modelValue:L(o).order,"onUpdate:modelValue":t[4]||=e=>L(o).order=e,placeholder:L(a)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.showTopBar.title`),prop:`showTopBar`},{default:B(()=>[D(L(Vn),{modelValue:L(o).showTopBar,"onUpdate:modelValue":t[5]||=e=>L(o).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:B(()=>[D(L(vo),{modelValue:L(o).displays,"onUpdate:modelValue":t[6]||=e=>L(o).displays=e,placeholder:L(a)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),D(L(zt),{size:`small`,class:`block mt-1 text-gray-500`},{default:B(()=>[E(z(L(a)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),qF={"cs-CZ":{fields:{device:{title:`Zařízení`,placeholder:`Zařízení stránky`,description:`O zařízení`,validation:{required:`Vyberte prosím zařízení stránky`}}}},"de-DE":{fields:{device:{title:`Gerät`,placeholder:`Seitengerät`,description:`Über Gerät`,validation:{required:`Bitte wählen Sie ein Seitengerät`}}}},"en-US":{fields:{device:{title:`Device`,placeholder:`Page device`,description:`About device`,validation:{required:`Please select page device`}}}},"es-ES":{fields:{device:{title:`Dispositivo`,placeholder:`Dispositivo de la página`,description:`Acerca del dispositivo`,validation:{required:`Por favor, seleccione un dispositivo para la página`}}}},"pl-PL":{fields:{device:{title:`Urządzenie`,placeholder:`Urządzenie strony`,description:`O urządzeniu`,validation:{required:`Wybierz urządzenie strony`}}}},"sk-SK":{fields:{device:{title:`Zariadenie`,placeholder:`Zariadenie stránky`,description:`O zariadení`,validation:{required:`Prosím vyberte zariadenie stránky`}}}}},JF=Qa.extend({device:X().uuid().optional()}),YF=Za.extend({device:X().uuid()}),XF=uo.extend({device:Ko}),ZF=mo.and(K({type:Y(WF),device:X().uuid()})),QF=go.and(K({type:Y(WF),device:X().uuid().optional()}));co.and(K({type:Y(WF),device:X().uuid()}));var $F=Symbol(`FB-Plugin-PagesDeviceDetail`),eI={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(qF)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{pagesDeviceDetailPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin($F,{type:UF,source:`com.fastybird.smart-panel.plugin.pages-device-detail`,name:`Device Detail Page`,description:`A dedicated page focused on a single device. Perfect for viewing and controlling all properties of a specific device in detail.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:WF,name:`Device Detail`,components:{pageAddForm:GF,pageEditForm:KF},schemas:{pageSchema:XF,pageAddFormSchema:JF,pageEditFormSchema:YF,pageCreateReqSchema:ZF,pageUpdateReqSchema:QF}}],modules:[Na],isCore:!0})}};Pa.NONE,Pa.NONE;var tI=k({name:`TilesPageAddForm`,__name:`tiles-page-add-form`,props:{id:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{model:a,formEl:o,formChanged:c,submit:l,formResult:u}=ro({id:n.id,type:Ic}),d=P({title:[{required:!0,message:i(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}]}),f=()=>{a.rows=null},p=()=>{a.cols=null},m=()=>{a.tileSize=null};return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(a),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(i)(`dashboardModule.fields.pages.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(a).id,"onUpdate:modelValue":t[0]||=e=>L(a).id=e,placeholder:L(i)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.title.title`),prop:`title`},{default:B(()=>[D(L(U),{modelValue:L(a).title,"onUpdate:modelValue":t[1]||=e=>L(a).title=e,placeholder:L(i)(`dashboardModule.fields.pages.title.placeholder`),name:`title`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(a).icon,"onUpdate:modelValue":t[2]||=e=>L(a).icon=e,placeholder:L(i)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.order.title`),prop:`order`},{default:B(()=>[D(L(Qr),{modelValue:L(a).order,"onUpdate:modelValue":t[3]||=e=>L(a).order=e,placeholder:L(i)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.showTopBar.title`),prop:`showTopBar`},{default:B(()=>[D(L(Vn),{modelValue:L(a).showTopBar,"onUpdate:modelValue":t[4]||=e=>L(a).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:B(()=>[D(L(vo),{modelValue:L(a).displays,"onUpdate:modelValue":t[5]||=e=>L(a).displays=e,placeholder:L(i)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),D(L(zt),{size:`small`,class:`block mt-1 text-gray-500`},{default:B(()=>[E(z(L(i)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`]),D(L(Vt)),D(L(si),{gutter:10,class:`mx-0!`},{default:B(()=>[D(L(ci),{span:12,class:`px-0!`},{default:B(()=>[D(L(Z),{label:L(i)(`pagesTilesPlugin.fields.rows.title`),prop:`rows`},{default:B(()=>[D(L(Qr),{modelValue:L(a).rows,"onUpdate:modelValue":t[6]||=e=>L(a).rows=e,placeholder:L(i)(`pagesTilesPlugin.fields.rows.placeholder`),disabled:L(a).tileSize!==null,min:1,max:12,name:`rows`},null,8,[`modelValue`,`placeholder`,`disabled`]),D(L(Oe),{plain:``,class:`ml-2 px-3!`,onClick:f},{icon:B(()=>[D(L(s),{icon:`mdi:close`})]),_:1})]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12,class:`px-0!`},{default:B(()=>[D(L(Z),{label:L(i)(`pagesTilesPlugin.fields.cols.title`),prop:`cols`},{default:B(()=>[D(L(Qr),{modelValue:L(a).cols,"onUpdate:modelValue":t[7]||=e=>L(a).cols=e,placeholder:L(i)(`pagesTilesPlugin.fields.cols.placeholder`),disabled:L(a).tileSize!==null,min:1,max:12,name:`cols`},null,8,[`modelValue`,`placeholder`,`disabled`]),D(L(Oe),{plain:``,class:`ml-2 px-3!`,onClick:p},{icon:B(()=>[D(L(s),{icon:`mdi:close`})]),_:1})]),_:1},8,[`label`])]),_:1})]),_:1}),D(L(Z),{label:L(i)(`pagesTilesPlugin.fields.tileSize.title`),prop:`tileSize`},{default:B(()=>[D(L(Qr),{modelValue:L(a).tileSize,"onUpdate:modelValue":t[8]||=e=>L(a).tileSize=e,placeholder:L(i)(`pagesTilesPlugin.fields.tileSize.placeholder`),disabled:L(a).rows!==null||L(a).cols!==null,min:40,max:200,name:`tileSize`},null,8,[`modelValue`,`placeholder`,`disabled`]),D(L(Oe),{plain:``,class:`ml-2 px-3!`,onClick:m},{icon:B(()=>[D(L(s),{icon:`mdi:close`})]),_:1})]),_:1},8,[`label`]),D(L(Q),{title:L(i)(`pagesTilesPlugin.headings.misc.tip`),description:L(i)(`pagesTilesPlugin.texts.misc.gridLayoutTip`),closable:!1,"show-icon":``,type:`success`},{icon:B(()=>[D(L(s),{icon:`mdi:lightbulb-on`})]),_:1},8,[`title`,`description`])]),_:1},8,[`model`,`rules`]))}}),nI=k({name:`TilesPageEditForm`,__name:`tiles-page-edit-form`,props:{page:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:i}=M(),{model:a,formEl:o,formChanged:c,submit:l,formResult:u}=Xa({page:n.page}),d=P({title:[{required:!0,message:i(`dashboardModule.fields.pages.title.validation.required`),trigger:`change`}]}),f=()=>{a.rows=null},p=()=>{a.cols=null},m=()=>{a.tileSize=null};return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(a),rules:d,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(i)(`dashboardModule.fields.pages.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(a).id,"onUpdate:modelValue":t[0]||=e=>L(a).id=e,placeholder:L(i)(`dashboardModule.fields.pages.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.title.title`),prop:`title`},{default:B(()=>[D(L(U),{modelValue:L(a).title,"onUpdate:modelValue":t[1]||=e=>L(a).title=e,placeholder:L(i)(`dashboardModule.fields.pages.title.placeholder`),name:`title`,size:`large`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.icon.title`),prop:`icon`},{default:B(()=>[D(L(Rn),{modelValue:L(a).icon,"onUpdate:modelValue":t[2]||=e=>L(a).icon=e,placeholder:L(i)(`dashboardModule.fields.pages.icon.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.order.title`),prop:`order`},{default:B(()=>[D(L(Qr),{modelValue:L(a).order,"onUpdate:modelValue":t[3]||=e=>L(a).order=e,placeholder:L(i)(`dashboardModule.fields.pages.order.placeholder`),name:`order`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.showTopBar.title`),prop:`showTopBar`},{default:B(()=>[D(L(Vn),{modelValue:L(a).showTopBar,"onUpdate:modelValue":t[4]||=e=>L(a).showTopBar=e,name:`showTopBar`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(i)(`dashboardModule.fields.pages.displays.title`),prop:[`displays`]},{default:B(()=>[D(L(vo),{modelValue:L(a).displays,"onUpdate:modelValue":t[5]||=e=>L(a).displays=e,placeholder:L(i)(`dashboardModule.fields.pages.displays.placeholder`)},null,8,[`modelValue`,`placeholder`]),D(L(zt),{size:`small`,class:`block mt-1 text-gray-500`},{default:B(()=>[E(z(L(i)(`dashboardModule.fields.pages.displays.description`)),1)]),_:1})]),_:1},8,[`label`]),D(L(Vt)),D(L(si),{gutter:10,class:`mx-0!`},{default:B(()=>[D(L(ci),{span:12,class:`px-0!`},{default:B(()=>[D(L(Z),{label:L(i)(`pagesTilesPlugin.fields.rows.title`),prop:`rows`},{default:B(()=>[D(L(Qr),{modelValue:L(a).rows,"onUpdate:modelValue":t[6]||=e=>L(a).rows=e,placeholder:L(i)(`pagesTilesPlugin.fields.rows.placeholder`),disabled:L(a).tileSize!==null,min:1,max:12,name:`rows`},null,8,[`modelValue`,`placeholder`,`disabled`]),D(L(Oe),{plain:``,class:`ml-2 px-3!`,onClick:f},{icon:B(()=>[D(L(s),{icon:`mdi:close`})]),_:1})]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12,class:`px-0!`},{default:B(()=>[D(L(Z),{label:L(i)(`pagesTilesPlugin.fields.cols.title`),prop:`cols`},{default:B(()=>[D(L(Qr),{modelValue:L(a).cols,"onUpdate:modelValue":t[7]||=e=>L(a).cols=e,placeholder:L(i)(`pagesTilesPlugin.fields.cols.placeholder`),disabled:L(a).tileSize!==null,min:1,max:12,name:`cols`},null,8,[`modelValue`,`placeholder`,`disabled`]),D(L(Oe),{plain:``,class:`ml-2 px-3!`,onClick:p},{icon:B(()=>[D(L(s),{icon:`mdi:close`})]),_:1})]),_:1},8,[`label`])]),_:1})]),_:1}),D(L(Z),{label:L(i)(`pagesTilesPlugin.fields.tileSize.title`),prop:`tileSize`},{default:B(()=>[D(L(Qr),{modelValue:L(a).tileSize,"onUpdate:modelValue":t[8]||=e=>L(a).tileSize=e,placeholder:L(i)(`pagesTilesPlugin.fields.tileSize.placeholder`),disabled:L(a).rows!==null||L(a).cols!==null,min:40,max:200,name:`tileSize`},null,8,[`modelValue`,`placeholder`,`disabled`]),D(L(Oe),{plain:``,class:`ml-2 px-3!`,onClick:m},{icon:B(()=>[D(L(s),{icon:`mdi:close`})]),_:1})]),_:1},8,[`label`]),D(L(Q),{title:L(i)(`pagesTilesPlugin.headings.misc.tip`),description:L(i)(`pagesTilesPlugin.texts.misc.gridLayoutTip`),closable:!1,"show-icon":``,type:`success`},{icon:B(()=>[D(L(s),{icon:`mdi:lightbulb-on`})]),_:1},8,[`title`,`description`])]),_:1},8,[`model`,`rules`]))}}),rI={"cs-CZ":{meta:{pages:{editTile:{title:`Upravit dlaždici stránky`},addTile:{title:`Přidat dlaždici stránky`},editDataSource:{title:`Upravit zdroj dat stránky`},addDataSource:{title:`Přidat zdroj dat stránky`}}},breadcrumbs:{pages:{configure:`stránka: {page}`,addTile:`přidat dlaždici stránky`,editTile:`upravit dlaždici stránky`,addDataSource:`přidat zdroj dat stránky`,editDataSource:`upravit zdroj dat stránky`}},headings:{pages:{addTile:`Přidat dlaždici stránky`,editTile:`Upravit dlaždici stránky`,addDataSource:`Přidat zdroj dat stránky`,editDataSource:`Upravit zdroj dat stránky`},configure:{draft:`Koncept`,display:`Displej`,quickAddTile:`Rychle přidat dlaždici`},misc:{discard:`Zahodit změny?`,tip:`Tip`}},subHeadings:{pages:{addTile:`Přidat novou dlaždici stránky smart panelu`,editTile:`Upravit dlaždici stránky smart panelu`,addDataSource:`Přidat nový zdroj dat stránky smart panelu`,editDataSource:`Upravit zdroj dat stránky smart panelu`}},messages:{tiles:{deletedWhileEditing:`Tato dlaždice byla smazána a již není k dispozici.`},dataSources:{deletedWhileEditing:`Tento zdroj dat byl smazán a již není k dispozici.`},misc:{requestError:`Něco se pokazilo, zkuste to prosím znovu později.`}},texts:{misc:{confirmDiscard:`Máte neuložené změny. Opravdu je chcete zahodit?`,gridLayoutTip:`Můžete změnit, kolik dlaždic se vejde na stránku — nastavte Řádky a Sloupce nebo zvolte Velikost dlaždice.`},tiles:{loadingTile:`Načítání dlaždice...`},dataSources:{loadingDataSource:`Načítání zdroje dat...`}},buttons:{discard:{title:`Zahodit`},close:{title:`Zavřít`},add:{title:`Přidat`},save:{title:`Uložit`},update:{title:`Aktualizovat`},yes:{title:`Ano`},no:{title:`Ne`},manageElements:{title:`Spravovat prvky`},addPageTile:{title:`Přidat dlaždici stránky`},addPageDataSource:{title:`Přidat zdroj dat stránky`}},fields:{rows:{title:`Řádky`,placeholder:`Počet řádků`},cols:{title:`Sloupce`,placeholder:`Počet sloupců`},tileSize:{title:`Velikost dlaždice`,placeholder:`Velikost dlaždice`}}},"de-DE":{meta:{pages:{editTile:{title:`Seitenkachel bearbeiten`},addTile:{title:`Seitenkachel hinzufügen`},editDataSource:{title:`Seitendatenquelle bearbeiten`},addDataSource:{title:`Seitendatenquelle hinzufügen`}}},breadcrumbs:{pages:{configure:`Seite: {page}`,addTile:`Seitenkachel hinzufügen`,editTile:`Seitenkachel bearbeiten`,addDataSource:`Seitendatenquelle hinzufügen`,editDataSource:`Seitendatenquelle bearbeiten`}},headings:{pages:{addTile:`Seitenkachel hinzufügen`,editTile:`Seitenkachel bearbeiten`,addDataSource:`Seitendatenquelle hinzufügen`,editDataSource:`Seitendatenquelle bearbeiten`},configure:{draft:`Entwurf`,display:`Anzeige`,quickAddTile:`Kachel schnell hinzufügen`},misc:{discard:`Änderungen verwerfen?`,tip:`Tipp`}},subHeadings:{pages:{addTile:`Neue Smart Panel Seitenkachel hinzufügen`,editTile:`Smart Panel Seitenkachel bearbeiten`,addDataSource:`Neue Smart Panel Seitendatenquelle hinzufügen`,editDataSource:`Smart Panel Seitendatenquelle bearbeiten`}},messages:{tiles:{deletedWhileEditing:`Diese Kachel wurde gelöscht und ist nicht mehr verfügbar.`},dataSources:{deletedWhileEditing:`Diese Datenquelle wurde gelöscht und ist nicht mehr verfügbar.`},misc:{requestError:`Etwas ist schiefgelaufen, bitte versuchen Sie es später erneut.`}},texts:{misc:{confirmDiscard:`Sie haben ungespeicherte Änderungen. Möchten Sie diese wirklich verwerfen?`,gridLayoutTip:`Sie können einstellen, wie viele Kacheln auf die Seite passen — legen Sie Zeilen und Spalten fest oder wählen Sie eine Kachelgröße.`},tiles:{loadingTile:`Kachel wird geladen...`},dataSources:{loadingDataSource:`Datenquelle wird geladen...`}},buttons:{discard:{title:`Verwerfen`},close:{title:`Schließen`},add:{title:`Hinzufügen`},save:{title:`Speichern`},update:{title:`Aktualisieren`},yes:{title:`Ja`},no:{title:`Nein`},manageElements:{title:`Elemente verwalten`},addPageTile:{title:`Seitenkachel hinzufügen`},addPageDataSource:{title:`Seitendatenquelle hinzufügen`}},fields:{rows:{title:`Zeilen`,placeholder:`Zeilenanzahl`},cols:{title:`Spalten`,placeholder:`Spaltenanzahl`},tileSize:{title:`Kachelgröße`,placeholder:`Kachelgröße`}}},"en-US":{meta:{pages:{editTile:{title:`Edit page tile`},addTile:{title:`Add page tile`},editDataSource:{title:`Edit page data source`},addDataSource:{title:`Add page data source`}}},breadcrumbs:{pages:{configure:`page: {page}`,addTile:`add page tile`,editTile:`edit page tile`,addDataSource:`add page data source`,editDataSource:`edit page data source`}},headings:{pages:{addTile:`Add page tile`,editTile:`Edit page tile`,addDataSource:`Add page data source`,editDataSource:`Edit page data source`},configure:{draft:`Draft`,display:`Display`,quickAddTile:`Quick add tile`},misc:{discard:`Discard changes?`,tip:`Tip`}},subHeadings:{pages:{addTile:`Add new smart panel page tile`,editTile:`Edit smart panel page tile`,addDataSource:`Add new smart panel page data source`,editDataSource:`Edit smart panel page data source`}},messages:{tiles:{deletedWhileEditing:`This tile was deleted and is no longer available.`},dataSources:{deletedWhileEditing:`This data source was deleted and is no longer available.`},misc:{requestError:`Something went wrong, please try again later.`}},texts:{misc:{confirmDiscard:`You have unsaved changes. Are you sure you want to discard them?`,gridLayoutTip:`You can change how many tiles fit on the page — set Rows and Columns or choose a Tile size.`},tiles:{loadingTile:`Loading tile...`},dataSources:{loadingDataSource:`Loading data source...`}},buttons:{discard:{title:`Discard`},close:{title:`Close`},add:{title:`Add`},save:{title:`Save`},update:{title:`Update`},yes:{title:`Yes`},no:{title:`No`},manageElements:{title:`Manage elements`},addPageTile:{title:`Add page tile`},addPageDataSource:{title:`Add page data source`}},fields:{rows:{title:`Rows`,placeholder:`Rows count`},cols:{title:`Cols`,placeholder:`Cols count`},tileSize:{title:`Tile size`,placeholder:`Tile size`}}},"es-ES":{meta:{pages:{editTile:{title:`Editar mosaico de página`},addTile:{title:`Añadir mosaico de página`},editDataSource:{title:`Editar fuente de datos de página`},addDataSource:{title:`Añadir fuente de datos de página`}}},breadcrumbs:{pages:{configure:`página: {page}`,addTile:`añadir mosaico de página`,editTile:`editar mosaico de página`,addDataSource:`añadir fuente de datos de página`,editDataSource:`editar fuente de datos de página`}},headings:{pages:{addTile:`Añadir mosaico de página`,editTile:`Editar mosaico de página`,addDataSource:`Añadir fuente de datos de página`,editDataSource:`Editar fuente de datos de página`},configure:{draft:`Borrador`,display:`Pantalla`,quickAddTile:`Añadir mosaico rápido`},misc:{discard:`¿Descartar cambios?`,tip:`Consejo`}},subHeadings:{pages:{addTile:`Añadir nuevo mosaico de página del panel inteligente`,editTile:`Editar mosaico de página del panel inteligente`,addDataSource:`Añadir nueva fuente de datos de página del panel inteligente`,editDataSource:`Editar fuente de datos de página del panel inteligente`}},messages:{tiles:{deletedWhileEditing:`Este mosaico fue eliminado y ya no está disponible.`},dataSources:{deletedWhileEditing:`Esta fuente de datos fue eliminada y ya no está disponible.`},misc:{requestError:`Algo salió mal, por favor inténtelo de nuevo más tarde.`}},texts:{misc:{confirmDiscard:`Tiene cambios sin guardar. ¿Está seguro de que desea descartarlos?`,gridLayoutTip:`Puede cambiar cuántos mosaicos caben en la página — establezca Filas y Columnas o elija un tamaño de mosaico.`},tiles:{loadingTile:`Cargando mosaico...`},dataSources:{loadingDataSource:`Cargando fuente de datos...`}},buttons:{discard:{title:`Descartar`},close:{title:`Cerrar`},add:{title:`Añadir`},save:{title:`Guardar`},update:{title:`Actualizar`},yes:{title:`Sí`},no:{title:`No`},manageElements:{title:`Gestionar elementos`},addPageTile:{title:`Añadir mosaico de página`},addPageDataSource:{title:`Añadir fuente de datos de página`}},fields:{rows:{title:`Filas`,placeholder:`Número de filas`},cols:{title:`Columnas`,placeholder:`Número de columnas`},tileSize:{title:`Tamaño de mosaico`,placeholder:`Tamaño de mosaico`}}},"pl-PL":{meta:{pages:{editTile:{title:`Edytuj kafelek strony`},addTile:{title:`Dodaj kafelek strony`},editDataSource:{title:`Edytuj źródło danych strony`},addDataSource:{title:`Dodaj źródło danych strony`}}},breadcrumbs:{pages:{configure:`strona: {page}`,addTile:`dodaj kafelek strony`,editTile:`edytuj kafelek strony`,addDataSource:`dodaj źródło danych strony`,editDataSource:`edytuj źródło danych strony`}},headings:{pages:{addTile:`Dodaj kafelek strony`,editTile:`Edytuj kafelek strony`,addDataSource:`Dodaj źródło danych strony`,editDataSource:`Edytuj źródło danych strony`},configure:{draft:`Wersja robocza`,display:`Wyświetlanie`,quickAddTile:`Szybkie dodawanie kafelka`},misc:{discard:`Odrzucić zmiany?`,tip:`Wskazówka`}},subHeadings:{pages:{addTile:`Dodaj nowy kafelek strony Smart Panel`,editTile:`Edytuj kafelek strony Smart Panel`,addDataSource:`Dodaj nowe źródło danych strony Smart Panel`,editDataSource:`Edytuj źródło danych strony Smart Panel`}},messages:{tiles:{deletedWhileEditing:`Ten kafelek został usunięty i nie jest już dostępny.`},dataSources:{deletedWhileEditing:`To źródło danych zostało usunięte i nie jest już dostępne.`},misc:{requestError:`Coś poszło nie tak, spróbuj ponownie później.`}},texts:{misc:{confirmDiscard:`Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?`,gridLayoutTip:`Możesz zmienić, ile kafelków mieści się na stronie — ustaw Wiersze i Kolumny lub wybierz Rozmiar kafelka.`},tiles:{loadingTile:`Ładowanie kafelka...`},dataSources:{loadingDataSource:`Ładowanie źródła danych...`}},buttons:{discard:{title:`Odrzuć`},close:{title:`Zamknij`},add:{title:`Dodaj`},save:{title:`Zapisz`},update:{title:`Zaktualizuj`},yes:{title:`Tak`},no:{title:`Nie`},manageElements:{title:`Zarządzaj elementami`},addPageTile:{title:`Dodaj kafelek strony`},addPageDataSource:{title:`Dodaj źródło danych strony`}},fields:{rows:{title:`Wiersze`,placeholder:`Liczba wierszy`},cols:{title:`Kolumny`,placeholder:`Liczba kolumn`},tileSize:{title:`Rozmiar kafelka`,placeholder:`Rozmiar kafelka`}}},"sk-SK":{meta:{pages:{editTile:{title:`Upraviť dlaždicu stránky`},addTile:{title:`Pridať dlaždicu stránky`},editDataSource:{title:`Upraviť zdroj dát stránky`},addDataSource:{title:`Pridať zdroj dát stránky`}}},breadcrumbs:{pages:{configure:`stránka: {page}`,addTile:`pridať dlaždicu stránky`,editTile:`upraviť dlaždicu stránky`,addDataSource:`pridať zdroj dát stránky`,editDataSource:`upraviť zdroj dát stránky`}},headings:{pages:{addTile:`Pridať dlaždicu stránky`,editTile:`Upraviť dlaždicu stránky`,addDataSource:`Pridať zdroj dát stránky`,editDataSource:`Upraviť zdroj dát stránky`},configure:{draft:`Návrh`,display:`Displej`,quickAddTile:`Rýchle pridanie dlaždice`},misc:{discard:`Zahodiť zmeny?`,tip:`Tip`}},subHeadings:{pages:{addTile:`Pridať novú dlaždicu stránky smart panelu`,editTile:`Upraviť dlaždicu stránky smart panelu`,addDataSource:`Pridať nový zdroj dát stránky smart panelu`,editDataSource:`Upraviť zdroj dát stránky smart panelu`}},messages:{tiles:{deletedWhileEditing:`Táto dlaždica bola odstránená a už nie je dostupná.`},dataSources:{deletedWhileEditing:`Tento zdroj dát bol odstránený a už nie je dostupný.`},misc:{requestError:`Niečo sa pokazilo, skúste to prosím neskôr.`}},texts:{misc:{confirmDiscard:`Máte neuložené zmeny. Naozaj ich chcete zahodiť?`,gridLayoutTip:`Môžete zmeniť, koľko dlaždíc sa zmestí na stránku — nastavte Riadky a Stĺpce alebo zvoľte veľkosť Dlaždice.`},tiles:{loadingTile:`Načítavanie dlaždice...`},dataSources:{loadingDataSource:`Načítavanie zdroja dát...`}},buttons:{discard:{title:`Zahodiť`},close:{title:`Zavrieť`},add:{title:`Pridať`},save:{title:`Uložiť`},update:{title:`Aktualizovať`},yes:{title:`Áno`},no:{title:`Nie`},manageElements:{title:`Spravovať elementy`},addPageTile:{title:`Pridať dlaždicu stránky`},addPageDataSource:{title:`Pridať zdroj dát stránky`}},fields:{rows:{title:`Riadky`,placeholder:`Počet riadkov`},cols:{title:`Stĺpce`,placeholder:`Počet stĺpcov`},tileSize:{title:`Veľkosť dlaždice`,placeholder:`Veľkosť dlaždice`}}}},iI=[{path:`pages-tiles/configure`,name:Lc.PAGE,component:()=>hr(()=>import(`./view-page-configure-C-eA0dC4.js`),__vite__mapDeps([171,2,3,4,5,6,38,23,121,122,70,24,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,172,158,159,173,174])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Page configuration`,icon:`mdi:monitor-dashboard`},children:[{path:`tile/add`,name:Lc.PAGE_ADD_TILE,component:()=>hr(()=>import(`./view-tile-add-BXX2-rGD.js`),__vite__mapDeps([175,2,3,4,11,5,6,19,44,121,122,70,24,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,174])),props:e=>({pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Add tile`,icon:`mdi:add-circle`}},{path:`tile/:tileId`,name:Lc.PAGE_EDIT_TILE,component:()=>hr(()=>import(`./view-tile-edit-XzR_OQfI.js`),__vite__mapDeps([176,2,3,4,11,5,6,24,44,121,122,70,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,174])),props:e=>({id:e.params.tileId,pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Edit tile`,icon:`mdi:pencil-circle`}},{path:`data-source/add`,name:Lc.PAGE_ADD_DATA_SOURCE,component:()=>hr(()=>import(`./view-data-source-add-Bzb-61aK.js`),__vite__mapDeps([177,2,3,4,11,5,6,19,44,121,122,70,24,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,174])),props:e=>({pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Add tile`,icon:`mdi:add-circle`}},{path:`data-source/:dataSourceId`,name:Lc.PAGE_EDIT_DATA_SOURCE,component:()=>hr(()=>import(`./view-data-source-edit-DrlMJPDn.js`),__vite__mapDeps([178,2,3,4,11,5,6,24,44,121,122,70,71,40,53,52,72,73,74,123,124,125,110,126,127,128,129,14,15,16,17,18,19,65,20,21,7,69,66,8,42,107,130,131,49,132,133,56,55,106,102,134,135,136,77,137,138,139,140,141,142,143,144,145,174])),props:e=>({id:e.params.dataSourceId,pageId:e.params.id}),meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Edit tile`,icon:`mdi:pencil-circle`}}]}],aI=Qa.extend({rows:q().gte(1).nullable().default(null),cols:q().gte(1).nullable().default(null),tileSize:q().gt(0).nullable().default(null)}),oI=Za.extend({rows:q().gte(1).nullable().default(null),cols:q().gte(1).nullable().default(null),tileSize:q().gt(0).nullable().default(null)}),sI=uo.extend({tileSize:q().gte(0).nullable().default(null),rows:q().gte(1).nullable().default(null),cols:q().gte(1).nullable().default(null)}),cI=mo.and(K({type:Y(Ic),tiles:W(ho).optional(),data_source:W(Ua).optional(),tile_size:q().gte(0).nullable().default(null),rows:q().gte(1).nullable().default(null),cols:q().gte(1).nullable().default(null)})),lI=go.and(K({type:Y(Ic),tile_size:q().gte(0).nullable(),rows:q().gte(1).nullable(),cols:q().gte(1).nullable()}));co.and(K({type:Y(Ic),tiles:W(fo),data_source:W(qa),tile_size:q().nullable(),rows:q().nullable(),cols:q().nullable()}));var uI=Symbol(`FB-Plugin-PagesTiles`),dI={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(rI)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{pagesTilesPlugin:n});t.i18n.global.setLocaleMessage(e,r)}t.router.getRoutes().find(e=>e.name===Te.ROOT)&&iI.forEach(e=>{t.router.addRoute(Fa.PAGE_PLUGIN,e)}),n.addPlugin(uI,{type:Rc,source:`com.fastybird.smart-panel.plugin.pages-tiles`,name:`Tiles Page`,description:`A flexible page layout displaying multiple tiles in a grid. Ideal for visualizing device data and controls in a compact format.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ic,name:`Tiles`,components:{pageAddForm:tI,pageEditForm:nI},schemas:{pageSchema:sI,pageAddFormSchema:aI,pageEditFormSchema:oI,pageCreateReqSchema:cI,pageUpdateReqSchema:lI}}],routes:{configure:e=>t.router.resolve({name:Lc.PAGE,params:{id:e}})},modules:[Na],isCore:!0})}},fI={class:`text-sm text-gray-500 mt-1`},pI={class:`text-sm text-gray-500 mt-1`},mI=k({name:`TailscaleConfigForm`,__name:`tailscale-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`remoteAccessTailscalePlugin.messages.config.edited`),error:a(`remoteAccessTailscalePlugin.messages.config.notEdited`)}}),f=P({hostname:[{required:!0,message:a(`remoteAccessTailscalePlugin.fields.config.hostname.validation.required`),trigger:`change`}],loginServer:[{required:!0,message:a(`remoteAccessTailscalePlugin.fields.config.loginServer.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`remoteAccessTailscalePlugin.config.sections.node.title`),description:L(a)(`remoteAccessTailscalePlugin.config.sections.node.description`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.hostname.title`),prop:`hostname`,class:`mt-3`},{default:B(()=>[D(L(U),{modelValue:L(s).hostname,"onUpdate:modelValue":t[0]||=e=>L(s).hostname=e,placeholder:L(a)(`remoteAccessTailscalePlugin.fields.config.hostname.placeholder`),name:`hostname`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.loginServer.title`),prop:`loginServer`},{default:B(()=>[D(L(U),{modelValue:L(s).loginServer,"onUpdate:modelValue":t[1]||=e=>L(s).loginServer=e,placeholder:L(a)(`remoteAccessTailscalePlugin.fields.config.loginServer.placeholder`),name:`loginServer`},null,8,[`modelValue`,`placeholder`]),l(`div`,fI,z(L(a)(`remoteAccessTailscalePlugin.fields.config.loginServer.description`)),1)]),_:1},8,[`label`]),D(L(Vt)),D(L(Q),{type:`info`,title:L(a)(`remoteAccessTailscalePlugin.config.sections.tailnet.title`),description:L(a)(`remoteAccessTailscalePlugin.config.sections.tailnet.description`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.acceptDns.title`),prop:`acceptDns`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).acceptDns,"onUpdate:modelValue":t[2]||=e=>L(s).acceptDns=e,name:`acceptDns`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.acceptRoutes.title`),prop:`acceptRoutes`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).acceptRoutes,"onUpdate:modelValue":t[3]||=e=>L(s).acceptRoutes=e,name:`acceptRoutes`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.advertiseTags.title`),prop:`advertiseTags`},{default:B(()=>[D(L(ei),{modelValue:L(s).advertiseTags,"onUpdate:modelValue":t[4]||=e=>L(s).advertiseTags=e,name:`advertiseTags`,multiple:``,filterable:``,"allow-create":``,"default-first-option":``,"reserve-keyword":!1,placeholder:L(a)(`remoteAccessTailscalePlugin.fields.config.advertiseTags.placeholder`)},{default:B(()=>[(A(!0),i(V,null,I(L(s).advertiseTags,e=>(A(),O(L(ti),{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),l(`div`,pI,z(L(a)(`remoteAccessTailscalePlugin.fields.config.advertiseTags.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.ssh.title`),prop:`ssh`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).ssh,"onUpdate:modelValue":t[5]||=e=>L(s).ssh=e,name:`ssh`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Vt)),D(L(Q),{type:`info`,title:L(a)(`remoteAccessTailscalePlugin.config.sections.serve.title`),description:L(a)(`remoteAccessTailscalePlugin.config.sections.serve.description`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.serveHttps.title`),prop:`serveHttps`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).serveHttps,"onUpdate:modelValue":t[6]||=e=>L(s).serveHttps=e,name:`serveHttps`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.fields.config.funnel.title`),prop:`funnel`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).funnel,"onUpdate:modelValue":t[7]||=e=>L(s).funnel=e,name:`funnel`},null,8,[`modelValue`])]),_:1},8,[`label`]),L(s).funnel?(A(),O(L(Q),{key:0,type:`warning`,title:L(a)(`remoteAccessTailscalePlugin.texts.funnelWarning`),closable:!1,"show-icon":``},null,8,[`title`])):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),hI=`remote-access-tailscale-plugin`,gI=`remote-access-tailscale`,_I=3e3,vI=class extends Error{exception;constructor(e,t=null){super(e),this.name=`RemoteAccessTailscaleException`,this.exception=t}},yI=class extends vI{code;constructor(e,t=null,n=null){super(e,n),this.name=`RemoteAccessTailscaleApiException`,this.code=t}},bI=class extends vI{constructor(e,t=null){super(e,t),this.name=`RemoteAccessTailscaleValidationException`}},xI=Symbol(`FB-Plugin-RemoteAccessTailscale-Store-Status`),SI=null,CI=j(!1),wI=j(!1),TI=0,EI=()=>{let e=pn().getStore(xI),t=()=>{SI!==null&&(clearInterval(SI),SI=null),CI.value=!1},n=n=>{t(),CI.value=!0;let r=Date.now();SI=setInterval(()=>{if(n===TI){if(Date.now()-r>=6e5){t();return}e.get().then(e=>{n===TI&&(e.state===`connected`||e.state===`error`)&&t()}).catch(()=>{})}},_I)};return{isLoggingIn:p(()=>wI.value),isPolling:p(()=>CI.value),login:async r=>{if(wI.value)throw new vI(`A Tailscale sign-in is already in progress.`);let i=++TI;wI.value=!0;try{let a=await e.login(r);return a.state===`pending-auth`?n(i):t(),a}finally{wI.value=!1}},stopPolling:t}},DI=()=>{let e=pn().getStore(xI),{setupProgress:t,semaphore:n}=ln(e);return{progress:p(()=>t.value),isInstalling:p(()=>n.value.installing),install:async()=>(await e.install()).job}},OI=()=>{let e=pn().getStore(xI),{data:t,semaphore:n}=ln(e);return{status:p(()=>t.value),requirements:p(()=>t.value?.requirements??[]),isLoading:p(()=>t.value===null&&n.value.getting),isLoggingOut:p(()=>n.value.loggingOut),isResettingPreferences:p(()=>n.value.resettingPreferences),fetchStatus:async()=>{await e.get()},logout:()=>e.logout(),resetPreferences:()=>e.resetPreferences()}},kI=({state:e,hasTailnet:t,isOwner:n})=>{let r=e===`connected`||e===`connecting`||e===`pending-approval`||e===`error`||e===`disconnected`&&t;return{setup:n&&(e===`not-installed`||e===`setup-required`),signIn:e===`pending-auth`||e===`disconnected`&&!t,connect:e===`disconnected`&&t,disconnect:e===`connected`||e===`connecting`||e===`pending-approval`,reconnect:e===`connected`||e===`error`,signOut:n&&r,resetPreferences:n&&r}},AI={class:`min-h-[220px]`},jI={key:0,class:`flex flex-col gap-1 mb-4`},MI={key:1,class:`flex items-center gap-2 text-sm mb-4`},NI={key:0,class:`flex flex-col items-center gap-3`},PI=[`src`,`alt`],FI=[`href`],II={class:`flex items-center gap-2 text-sm text-gray-500`},LI={key:1,class:`flex items-center gap-2 text-sm text-gray-500`},RI={class:`flex justify-end gap-2 mt-4`},zI={key:0,class:`flex flex-col gap-2 mb-4`},BI={class:`font-medium`},VI={class:`font-mono flex-1 break-all`},HI={class:`flex justify-end`},UI=k({name:`TailscaleSetupWizard`,__name:`tailscale-setup-wizard`,props:{visible:{type:Boolean},initialStep:{default:`setup`}},emits:[`update:visible`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),c=[`setup`,`signin`,`options`,`done`],u=j(n.initialStep),d=p(()=>c.indexOf(u.value)),f=e=>{u.value=e},{status:m,requirements:h,fetchStatus:_}=OI(),{progress:v,isInstalling:y,install:b}=DI(),{isLoggingIn:x,isPolling:S,login:C,stopPolling:w}=EI(),{configPlugin:T,fetchConfigPlugin:ee}=ja({type:hI}),te=j(`interactive`),ne=j(``),re=j(void 0),k=j(void 0),ie=j(!1),ae=j(Aa.NONE),oe=p(()=>m.value?.endpoints??[]),se=(e,t,n)=>{if(e instanceof yI&&e.code!==null&&t.includes(e.code)){o.error(e.message);return}o.error(n)},ce=async()=>{try{await b()}catch(e){se(e,[409,422],a(`remoteAccessTailscalePlugin.messages.setupFailed`))}},le=async()=>{try{let e=await C();re.value=e.authUrl,k.value=e.qr}catch(e){se(e,[409],a(`remoteAccessTailscalePlugin.messages.loginFailed`))}},ue=async()=>{try{let e=await C(ne.value);if(ne.value=``,e.state===`pending-auth`){re.value=e.authUrl,k.value=e.qr;return}f(`options`)}catch(e){ne.value=``,se(e,[409],a(`remoteAccessTailscalePlugin.messages.loginFailed`))}},fe=()=>{ie.value=!0},pe=async e=>{try{await navigator.clipboard.writeText(e),o.success(a(`remoteAccessTailscalePlugin.messages.urlCopied`))}catch{o.error(a(`remoteAccessTailscalePlugin.messages.copyFailed`))}},me=()=>{r(`update:visible`,!1)},he=e=>{e||me()};return F(()=>v.value?.state,async e=>{e===`complete`&&(await _(),u.value===`setup`&&f(`signin`))}),F(()=>m.value?.state,e=>{e===`connected`&&u.value===`signin`&&f(`options`)}),F(()=>u.value,e=>{e===`options`&&ee()},{immediate:!0}),F(()=>ae.value,e=>{e===Aa.OK&&f(`done`)}),F(()=>n.visible,e=>{e?(u.value=n.initialStep,re.value=void 0,k.value=void 0,ne.value=``,te.value=`interactive`,_()):w()},{immediate:!0}),F(()=>[m.value?.authUrl,m.value?.qr],([e,t])=>{e&&!re.value&&(re.value=e),e&&t&&!k.value&&e===re.value&&(k.value=t)}),de(()=>{w()}),(t,n)=>(A(),O(L(di),{"model-value":e.visible,title:L(a)(`remoteAccessTailscalePlugin.wizard.title`),width:`560px`,"close-on-click-modal":!1,"onUpdate:modelValue":he},{default:B(()=>[D(L(Oi),{active:d.value,"finish-status":`success`,"align-center":``,class:`mb-6`},{default:B(()=>[(A(),i(V,null,I(c,e=>D(L(ki),{key:e,title:L(a)(`remoteAccessTailscalePlugin.wizard.steps.${e}`)},null,8,[`title`])),64))]),_:1},8,[`active`]),l(`div`,AI,[u.value===`setup`?(A(),i(V,{key:0},[D(L(Q),{type:`info`,title:L(a)(`remoteAccessTailscalePlugin.wizard.setupDescription`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`]),L(h).length>0?(A(),i(`ul`,jI,[(A(!0),i(V,null,I(L(h),e=>(A(),i(`li`,{key:e.code,class:`flex items-center gap-2 text-sm`},[D(L(g),{class:N(e.satisfied?`text-green-500`:`text-gray-400`)},{default:B(()=>[D(L(s),{icon:e.satisfied?`mdi:check-circle`:`mdi:circle-outline`},null,8,[`icon`])]),_:2},1032,[`class`]),l(`span`,null,z(e.message),1)]))),128))])):R(``,!0),L(v)&&L(v).state===`running`?(A(),i(`div`,MI,[D(L(g),{class:`is-loading`},{default:B(()=>[D(L(s),{icon:`mdi:loading`})]),_:1}),l(`span`,null,z(L(v).message||L(v).step||L(a)(`remoteAccessTailscalePlugin.wizard.settingUp`)),1)])):R(``,!0),L(v)&&(L(v).state===`failed`||L(v).state===`timeout`)?(A(),O(L(Q),{key:2,type:`error`,title:L(v).message||L(a)(`remoteAccessTailscalePlugin.wizard.setupFailed`),closable:!1,class:`mb-4!`},null,8,[`title`])):R(``,!0),D(L(Oe),{type:`primary`,loading:L(y)||L(v)?.state===`running`,onClick:ce},{default:B(()=>[E(z(L(a)(`remoteAccessTailscalePlugin.wizard.buttons.startSetup`)),1)]),_:1},8,[`loading`])],64)):u.value===`signin`?(A(),O(L(Ai),{key:1,modelValue:te.value,"onUpdate:modelValue":n[1]||=e=>te.value=e},{default:B(()=>[D(L(ji),{label:L(a)(`remoteAccessTailscalePlugin.wizard.tabs.interactive`),name:`interactive`},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`remoteAccessTailscalePlugin.wizard.signInDescription`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`]),re.value?(A(),i(`div`,NI,[k.value?(A(),i(`img`,{key:0,src:k.value,alt:L(a)(`remoteAccessTailscalePlugin.wizard.qrAlt`),width:`180`,height:`180`},null,8,PI)):R(``,!0),l(`a`,{href:re.value,target:`_blank`,rel:`noopener noreferrer`,class:`text-sm font-mono break-all text-center`},z(re.value),9,FI),l(`div`,II,[L(S)?(A(),O(L(g),{key:0,class:`is-loading`},{default:B(()=>[D(L(s),{icon:`mdi:loading`})]),_:1})):R(``,!0),l(`span`,null,z(L(a)(`remoteAccessTailscalePlugin.wizard.waitingForApproval`)),1)])])):L(S)?(A(),i(`div`,LI,[D(L(g),{class:`is-loading`},{default:B(()=>[D(L(s),{icon:`mdi:loading`})]),_:1}),l(`span`,null,z(L(a)(`remoteAccessTailscalePlugin.wizard.waitingForLink`)),1)])):(A(),O(L(Oe),{key:2,type:`primary`,loading:L(x),disabled:L(x),onClick:le},{default:B(()=>[E(z(L(a)(`remoteAccessTailscalePlugin.wizard.buttons.getSignInLink`)),1)]),_:1},8,[`loading`,`disabled`]))]),_:1},8,[`label`]),D(L(ji),{label:L(a)(`remoteAccessTailscalePlugin.wizard.tabs.advanced`),name:`advanced`},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`remoteAccessTailscalePlugin.wizard.advancedDescription`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`]),D(L(Ir),{"label-position":`top`},{default:B(()=>[D(L(Z),{label:L(a)(`remoteAccessTailscalePlugin.wizard.fields.authKey.title`)},{default:B(()=>[D(L(U),{modelValue:ne.value,"onUpdate:modelValue":n[0]||=e=>ne.value=e,placeholder:L(a)(`remoteAccessTailscalePlugin.wizard.fields.authKey.placeholder`),type:`password`,"show-password":``,name:`authKey`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(Oe),{type:`primary`,loading:L(x),disabled:!ne.value||L(x),onClick:ue},{default:B(()=>[E(z(L(a)(`remoteAccessTailscalePlugin.wizard.buttons.signIn`)),1)]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`label`])]),_:1},8,[`modelValue`])):u.value===`options`?(A(),i(V,{key:2},[L(T)?(A(),O(mI,{key:0,"remote-form-submit":ie.value,"onUpdate:remoteFormSubmit":n[2]||=e=>ie.value=e,"remote-form-result":ae.value,"onUpdate:remoteFormResult":n[3]||=e=>ae.value=e,config:L(T)},null,8,[`remote-form-submit`,`remote-form-result`,`config`])):R(``,!0),l(`div`,RI,[D(L(Oe),{onClick:n[4]||=e=>f(`done`)},{default:B(()=>[E(z(L(a)(`remoteAccessTailscalePlugin.wizard.buttons.skip`)),1)]),_:1}),D(L(Oe),{type:`primary`,loading:ae.value===L(Aa).WORKING,onClick:fe},{default:B(()=>[E(z(L(a)(`remoteAccessTailscalePlugin.wizard.buttons.saveAndContinue`)),1)]),_:1},8,[`loading`])])],64)):u.value===`done`?(A(),i(V,{key:3},[D(L(Q),{type:`success`,title:L(a)(`remoteAccessTailscalePlugin.wizard.doneDescription`),closable:!1,"show-icon":``,class:`mb-4!`},null,8,[`title`]),oe.value.length>0?(A(),i(`ul`,zI,[(A(!0),i(V,null,I(oe.value,e=>(A(),i(`li`,{key:e.url,class:`flex items-center gap-2 text-sm`},[l(`span`,BI,z(e.label),1),l(`span`,VI,z(e.url),1),D(L(Oe),{size:`small`,"aria-label":L(a)(`remoteAccessTailscalePlugin.wizard.buttons.copy`),onClick:t=>pe(e.url)},{default:B(()=>[D(L(s),{icon:`mdi:content-copy`})]),_:1},8,[`aria-label`,`onClick`])]))),128))])):R(``,!0),l(`div`,HI,[D(L(Oe),{type:`primary`,onClick:me},{default:B(()=>[E(z(L(a)(`remoteAccessTailscalePlugin.wizard.buttons.close`)),1)]),_:1})])],64)):R(``,!0)])]),_:1},8,[`model-value`,`title`]))}}),WI={class:`provider-card__header`},GI={class:`provider-card__heading`},KI={class:`provider-card__title`},qI={class:`provider-card__tags`},JI={class:`provider-card__content`},YI={key:0,class:`provider-card__description`},XI={key:1,class:`provider-card__description`},ZI={key:2,class:`provider-card__meta`},QI={key:0,class:`provider-card__meta-item`},$I={class:`provider-card__meta-label`},eL={class:`font-mono break-all`},tL={key:1,class:`provider-card__meta-item`},nL={class:`provider-card__meta-label`},rL={class:`font-mono break-all`},iL={key:2,class:`provider-card__meta-item`},aL={class:`provider-card__meta-label`},oL={class:`font-mono break-all`},sL={key:3,class:`provider-card__meta-item`},cL={class:`provider-card__meta-label`},lL={class:`font-mono break-all`},uL={key:3,class:`text-sm font-mono break-all`},dL={key:4,class:`flex flex-col gap-1`},fL={class:`provider-card__footer`},pL={class:`provider-card__links`},mL=d(k({name:`TailscaleProviderCard`,__name:`tailscale-provider-card`,props:{provider:{}},setup(e){let t=e,{t:n}=M(),r=Tn(),{profile:a}=zc(),{status:o,requirements:c,isLoggingOut:u,isResettingPreferences:d,fetchStatus:f,logout:m,resetPreferences:h}=OI(),{startService:g,stopService:_,restartService:v,isActing:y}=Hn(),{extension:b}=Ms({type:hI});le(async()=>{try{await f()}catch{r.error(n(`remoteAccessTailscalePlugin.messages.requestError`))}});let x=p(()=>o.value?.state??t.provider.state),S=p(()=>o.value?.message??t.provider.message),C=p(()=>o.value?.details??t.provider.details),w=p(()=>o.value?.endpoints??t.provider.endpoints),T=e=>{let t=C.value[e];return typeof t==`string`&&t.length>0?t:void 0},ee=p(()=>T(`tailnet`)),te=p(()=>T(`dnsName`)),ne=p(()=>T(`ipv4`)),re=p(()=>T(`ipv6`)),k=p(()=>w.value.find(e=>e.https)),ie=p(()=>c.value.filter(e=>!e.satisfied)),ae=p(()=>{switch(x.value){case`connected`:return`success`;case`error`:return`danger`;case`connecting`:case`pending-auth`:case`pending-approval`:case`setup-required`:return`warning`;default:return`info`}}),oe=p(()=>a.value?.role===H.owner),se=p(()=>kI({state:x.value,hasTailnet:ee.value!==void 0,isOwner:oe.value})),ce=p(()=>y(at.plugin,hI,`node`)),N=p(()=>b.value?.links?.documentation??void 0),ue=e=>{window.open(e,`_blank`,`noopener,noreferrer`)},de=j(!1),fe=j(`setup`),pe=e=>{fe.value=e,de.value=!0},me=async()=>{await g(at.plugin,hI,`node`)},he=async()=>{await _(at.plugin,hI,`node`)},ge=async()=>{await v(at.plugin,hI,`node`)},_e=async()=>{try{await m(),r.success(n(`remoteAccessTailscalePlugin.messages.signedOut`))}catch{r.error(n(`remoteAccessTailscalePlugin.messages.signOutFailed`))}},ve=async()=>{try{await h(),r.success(n(`remoteAccessTailscalePlugin.messages.preferencesReset`))}catch{r.error(n(`remoteAccessTailscalePlugin.messages.preferencesResetFailed`))}},P=[`setup`,`signIn`,`connect`,`disconnect`,`reconnect`,`signOut`,`resetPreferences`],ye=p(()=>P.find(e=>se.value[e])??null),F=[`reconnect`,`disconnect`,`signOut`,`resetPreferences`],be=p(()=>F.filter(e=>se.value[e]&&e!==ye.value)),xe=p(()=>ye.value===`setup`||ye.value===`signIn`?`primary`:void 0),Se=p(()=>{switch(ye.value){case`connect`:case`disconnect`:case`reconnect`:return ce.value;case`signOut`:return u.value;case`resetPreferences`:return d.value;default:return!1}}),Ce=e=>{switch(e){case`setup`:return n(`remoteAccessTailscalePlugin.buttons.setup`);case`signIn`:return n(`remoteAccessTailscalePlugin.buttons.signIn`);case`connect`:return n(`remoteAccessTailscalePlugin.buttons.connect`);case`disconnect`:return n(`remoteAccessTailscalePlugin.buttons.disconnect`);case`reconnect`:return n(`remoteAccessTailscalePlugin.buttons.reconnect`);case`signOut`:return n(`remoteAccessTailscalePlugin.buttons.signOut`);case`resetPreferences`:return n(`remoteAccessTailscalePlugin.buttons.resetPreferences`)}},we=e=>{switch(e){case`setup`:pe(`setup`);break;case`signIn`:pe(`signin`);break;case`connect`:me();break;case`disconnect`:he();break;case`reconnect`:ge();break;case`signOut`:_e();break;case`resetPreferences`:ve();break}},Te=()=>{ye.value!==null&&we(ye.value)},Ee=e=>{we(e)};return(e,t)=>(A(),O(L(ni),{class:`provider-card`,shadow:`hover`,"header-class":`py-2!`,"body-class":`py-3!`,"footer-class":`py-2! px-4!`},De({header:B(()=>[l(`div`,WI,[l(`div`,GI,[D(L(s),{icon:`mdi:lan-connect`,class:`provider-card__icon`}),l(`h3`,KI,z(L(n)(`remoteAccessTailscalePlugin.headings.tailscale`)),1)]),l(`div`,qI,[D(L(Xt),{type:ae.value,size:`small`},{default:B(()=>[E(z(L(n)(`remoteAccessModule.status.${x.value}`)),1)]),_:1},8,[`type`]),k.value?(A(),O(L(Xt),{key:0,type:`success`,size:`small`},{default:B(()=>[E(z(L(n)(`remoteAccessModule.texts.https`)),1)]),_:1})):R(``,!0)])])]),default:B(()=>[l(`div`,JI,[S.value?(A(),i(`p`,YI,z(S.value),1)):(A(),i(`p`,XI,z(L(n)(`remoteAccessTailscalePlugin.texts.cardDescription`)),1)),ee.value||te.value||ne.value||re.value?(A(),i(`div`,ZI,[ee.value?(A(),i(`div`,QI,[l(`span`,$I,z(L(n)(`remoteAccessTailscalePlugin.fields.tailnet`))+`:`,1),l(`span`,eL,z(ee.value),1)])):R(``,!0),te.value?(A(),i(`div`,tL,[l(`span`,nL,z(L(n)(`remoteAccessTailscalePlugin.fields.dnsName`))+`:`,1),l(`span`,rL,z(te.value),1)])):R(``,!0),ne.value?(A(),i(`div`,iL,[l(`span`,aL,z(L(n)(`remoteAccessTailscalePlugin.fields.ipv4`))+`:`,1),l(`span`,oL,z(ne.value),1)])):R(``,!0),re.value?(A(),i(`div`,sL,[l(`span`,cL,z(L(n)(`remoteAccessTailscalePlugin.fields.ipv6`))+`:`,1),l(`span`,lL,z(re.value),1)])):R(``,!0)])):R(``,!0),k.value?(A(),i(`div`,uL,z(k.value.url),1)):R(``,!0),ie.value.length>0?(A(),i(`div`,dL,[(A(!0),i(V,null,I(ie.value,e=>(A(),i(`div`,{key:e.code,class:`flex items-center gap-2 text-sm text-orange-600`},[D(L(s),{icon:`mdi:alert-circle-outline`}),l(`span`,null,z(e.message),1)]))),128))])):R(``,!0)]),D(UI,{visible:de.value,"onUpdate:visible":t[1]||=e=>de.value=e,"initial-step":fe.value},null,8,[`visible`,`initial-step`])]),_:2},[N.value||ye.value?{name:`footer`,fn:B(()=>[l(`div`,fL,[l(`div`,pL,[N.value?(A(),O(L(Oe),{key:0,type:`primary`,size:`small`,link:``,onClick:t[0]||=qe(e=>ue(N.value),[`stop`])},{default:B(()=>[D(L(s),{icon:`mdi:book-open-page-variant`,class:`mr-1`}),E(` `+z(L(n)(`extensionsModule.buttons.documentation`)),1)]),_:1})):R(``,!0)]),ye.value?(A(),O(L(In),{key:0,"split-button":``,size:`small`,trigger:`click`,type:xe.value,loading:Se.value,onClick:Te,onCommand:Ee},{dropdown:B(()=>[D(L(Lt),null,{default:B(()=>[(A(!0),i(V,null,I(be.value,e=>(A(),O(L(Pt),{key:e,command:e},{default:B(()=>[E(z(Ce(e)),1)]),_:2},1032,[`command`]))),128))]),_:1})]),default:B(()=>[E(z(Ce(ye.value))+` `,1)]),_:1},8,[`type`,`loading`])):R(``,!0)])]),key:`0`}:void 0]),1024))}}),[[`__scopeId`,`data-v-3a174872`]]),hL={"cs-CZ":{headings:{tailscale:`Tailscale`},config:{sections:{node:{title:`Identita uzlu`,description:`Název hostitele oznamovaný tailnetu a řídicí rovina, ke které se tento uzel přihlašuje. Přihlašovací server měňte pouze pro vlastní server Headscale.`},tailnet:{title:`Možnosti tailnetu`,description:`Jak se tento uzel zapojuje do tailnetu: MagicDNS, trasy podsítí oznamované ostatními uzly, značky ACL a Tailscale SSH.`},serve:{title:`Serve a Funnel`,description:`Serve zpřístupní administraci ve vašem tailnetu přes HTTPS pod MagicDNS názvem uzlu. Funnel ji navíc zveřejní na veřejném internetu.`}}},texts:{cardDescription:`Soukromý přístup přes váš tailnet, s HTTPS pomocí Tailscale Serve.`,funnelWarning:`Funnel zveřejní tuto instalaci na veřejném internetu. Jedinou ochranou je přihlášení do Smart Panelu.`},buttons:{setup:`Nastavit`,signIn:`Přihlásit se`,connect:`Připojit`,disconnect:`Odpojit`,reconnect:`Znovu připojit`,signOut:`Odhlásit se`,resetPreferences:`Obnovit výchozí nastavení`},fields:{tailnet:`Tailnet`,dnsName:`Název MagicDNS`,ipv4:`Adresa IPv4`,ipv6:`Adresa IPv6`,config:{hostname:{title:`Název hostitele`,placeholder:`např. smart-panel`,description:`Název hostitele oznamovaný tailnetu.`,validation:{required:`Název hostitele je povinný`}},loginServer:{title:`Přihlašovací server`,placeholder:`https://controlplane.tailscale.com`,description:`URL řídicí roviny. Změňte pro vlastní server Headscale.`,validation:{required:`Přihlašovací server je povinný`}},acceptDns:{title:`Přijímat DNS`,description:`Přijmout konfiguraci MagicDNS tailnetu.`},acceptRoutes:{title:`Přijímat trasy`,description:`Přijímat trasy podsítí oznamované ostatními uzly tailnetu.`},advertiseTags:{title:`Oznamované značky`,placeholder:`Přidejte značku ACL a stiskněte enter`,description:`Značky ACL oznamované pro tento uzel, např. tag:smart-panel.`},ssh:{title:`Tailscale SSH`,description:`Povolit Tailscale SSH na tomto uzlu.`},serveHttps:{title:`Zpřístupnit HTTPS na tailnetu`,description:`Zpřístupnit administraci přes HTTPS pomocí Tailscale Serve.`},funnel:{title:`Funnel`,description:`Zveřejnit zpřístupněnou administraci na veřejném internetu pomocí Tailscale Funnel.`}}},messages:{requestError:`Při načítání stavu Tailscale došlo k chybě`,setupFailed:`Nepodařilo se spustit úlohu nastavení Tailscale`,loginFailed:`Přihlášení do Tailscale se nezdařilo`,signedOut:`Odhlášení z Tailscale proběhlo úspěšně`,signOutFailed:`Odhlášení z Tailscale se nezdařilo`,preferencesReset:`Nastavení Tailscale bylo obnoveno`,preferencesResetFailed:`Obnovení nastavení Tailscale se nezdařilo`,urlCopied:`Adresa URL byla zkopírována do schránky`,copyFailed:`Zkopírování adresy URL do schránky se nezdařilo`,config:{edited:`Konfigurace Tailscale byla úspěšně aktualizována`,notEdited:`Aktualizace konfigurace Tailscale se nezdařila`}},wizard:{title:`Nastavit Tailscale`,steps:{setup:`Nastavení`,signin:`Přihlášení`,options:`Možnosti`,done:`Hotovo`},setupDescription:`Nainstaluje balíček Tailscale, pokud chybí, povolí démona a udělí Smart Panelu práva operátora.`,settingUp:`Probíhá nastavení Tailscale...`,setupFailed:`Úloha nastavení nebyla dokončena. Můžete to zkusit znovu.`,signInDescription:`Otevřete přihlašovací odkaz na libovolném zařízení a potvrďte jej, nebo naskenujte QR kód.`,advancedDescription:`Pro bezobslužné instalace: vložte předautorizovaný přihlašovací klíč a přihlaste se bez interaktivního potvrzení.`,waitingForApproval:`Čeká se na schválení přihlášení...`,waitingForLink:`Získává se přihlašovací odkaz...`,qrAlt:`QR kód obsahující přihlašovací odkaz Tailscale`,doneDescription:`Tailscale je připojen. Tato instalace je dostupná na níže uvedených adresách.`,tabs:{interactive:`Přihlásit se`,advanced:`Pokročilé`},fields:{authKey:{title:`Přihlašovací klíč`,placeholder:`tskey-auth-...`}},buttons:{startSetup:`Zahájit nastavení`,getSignInLink:`Získat přihlašovací odkaz`,signIn:`Přihlásit se`,saveAndContinue:`Uložit a pokračovat`,skip:`Přeskočit`,close:`Zavřít`,copy:`Kopírovat`}}},"de-DE":{headings:{tailscale:`Tailscale`},config:{sections:{node:{title:`Knotenidentität`,description:`Hostname, der dem Tailnet gemeldet wird, und die Kontrollebene, bei der sich dieser Knoten anmeldet. Ändern Sie den Anmeldeserver nur für einen selbst gehosteten Headscale-Server.`},tailnet:{title:`Tailnet-Optionen`,description:`Wie dieser Knoten am Tailnet teilnimmt: MagicDNS, von anderen Knoten angekündigte Subnetzrouten, ACL-Tags und Tailscale SSH.`},serve:{title:`Serve und Funnel`,description:`Serve veröffentlicht die Admin-Oberfläche in Ihrem Tailnet über HTTPS unter dem MagicDNS-Namen des Knotens. Funnel macht sie zusätzlich im öffentlichen Internet verfügbar.`}}},texts:{cardDescription:`Privater Zugriff über Ihr Tailnet, mit HTTPS über Tailscale Serve.`,funnelWarning:`Funnel veröffentlicht diese Installation im öffentlichen Internet. Die Anmeldung bei Smart Panel ist der einzige Schutz.`},buttons:{setup:`Einrichten`,signIn:`Anmelden`,connect:`Verbinden`,disconnect:`Trennen`,reconnect:`Erneut verbinden`,signOut:`Abmelden`,resetPreferences:`Einstellungen zurücksetzen`},fields:{tailnet:`Tailnet`,dnsName:`MagicDNS-Name`,ipv4:`IPv4-Adresse`,ipv6:`IPv6-Adresse`,config:{hostname:{title:`Hostname`,placeholder:`z. B. smart-panel`,description:`Hostname, der dem Tailnet gemeldet wird.`,validation:{required:`Hostname ist erforderlich`}},loginServer:{title:`Anmeldeserver`,placeholder:`https://controlplane.tailscale.com`,description:`URL der Kontrollebene. Für einen selbst gehosteten Headscale-Server überschreiben.`,validation:{required:`Anmeldeserver ist erforderlich`}},acceptDns:{title:`DNS akzeptieren`,description:`Die MagicDNS-Konfiguration des Tailnets akzeptieren.`},acceptRoutes:{title:`Routen akzeptieren`,description:`Von anderen Tailnet-Knoten angekündigte Subnetzrouten akzeptieren.`},advertiseTags:{title:`Angekündigte Tags`,placeholder:`ACL-Tag hinzufügen und Enter drücken`,description:`Für diesen Knoten angekündigte ACL-Tags, z. B. tag:smart-panel.`},ssh:{title:`Tailscale SSH`,description:`Tailscale SSH auf diesem Knoten aktivieren.`},serveHttps:{title:`HTTPS im Tailnet bereitstellen`,description:`Die Admin-Oberfläche über HTTPS mittels Tailscale Serve bereitstellen.`},funnel:{title:`Funnel`,description:`Die bereitgestellte Admin-Oberfläche über Tailscale Funnel im öffentlichen Internet veröffentlichen.`}}},messages:{requestError:`Beim Laden des Tailscale-Status ist ein Fehler aufgetreten`,setupFailed:`Der Tailscale-Einrichtungsjob konnte nicht gestartet werden`,loginFailed:`Anmeldung bei Tailscale fehlgeschlagen`,signedOut:`Von Tailscale abgemeldet`,signOutFailed:`Abmeldung von Tailscale fehlgeschlagen`,preferencesReset:`Die Tailscale-Einstellungen wurden zurückgesetzt`,preferencesResetFailed:`Zurücksetzen der Tailscale-Einstellungen fehlgeschlagen`,urlCopied:`URL wurde in die Zwischenablage kopiert`,copyFailed:`Kopieren der URL in die Zwischenablage fehlgeschlagen`,config:{edited:`Die Tailscale-Konfiguration wurde erfolgreich aktualisiert`,notEdited:`Aktualisierung der Tailscale-Konfiguration fehlgeschlagen`}},wizard:{title:`Tailscale einrichten`,steps:{setup:`Einrichten`,signin:`Anmelden`,options:`Optionen`,done:`Fertig`},setupDescription:`Installiert das Tailscale-Paket, falls es fehlt, aktiviert den Daemon und gewährt Smart Panel Operator-Rechte.`,settingUp:`Tailscale wird eingerichtet ...`,setupFailed:`Der Einrichtungsjob wurde nicht abgeschlossen. Sie können es erneut versuchen.`,signInDescription:`Öffnen Sie den Anmeldelink auf einem beliebigen Gerät und bestätigen Sie ihn, oder scannen Sie den QR-Code.`,advancedDescription:`Für unbeaufsichtigte Installationen: Fügen Sie einen vorautorisierten Anmeldeschlüssel ein, um sich ohne interaktive Bestätigung anzumelden.`,waitingForApproval:`Warten auf Bestätigung der Anmeldung ...`,waitingForLink:`Anmeldelink wird angefordert ...`,qrAlt:`QR-Code mit dem Tailscale-Anmeldelink`,doneDescription:`Tailscale ist verbunden. Diese Installation ist über die unten stehenden Adressen erreichbar.`,tabs:{interactive:`Anmelden`,advanced:`Erweitert`},fields:{authKey:{title:`Anmeldeschlüssel`,placeholder:`tskey-auth-...`}},buttons:{startSetup:`Einrichtung starten`,getSignInLink:`Anmeldelink anfordern`,signIn:`Anmelden`,saveAndContinue:`Speichern und fortfahren`,skip:`Überspringen`,close:`Schließen`,copy:`Kopieren`}}},"en-US":{headings:{tailscale:`Tailscale`},config:{sections:{node:{title:`Node identity`,description:`Hostname advertised to the tailnet and the control plane this node signs in to. Change the login server only for a self-hosted Headscale.`},tailnet:{title:`Tailnet options`,description:`How this node takes part in the tailnet: MagicDNS, subnet routes advertised by other nodes, ACL tags and Tailscale SSH.`},serve:{title:`Serve and Funnel`,description:`Serve publishes the admin UI to your tailnet over HTTPS at the node's MagicDNS name. Funnel additionally exposes it to the public internet.`}}},texts:{cardDescription:`Private access over your tailnet, with HTTPS through Tailscale Serve.`,funnelWarning:`Funnel publishes this installation to the public internet. Smart Panel sign-in is the only gate protecting it.`},buttons:{setup:`Set up`,signIn:`Sign in`,connect:`Connect`,disconnect:`Disconnect`,reconnect:`Reconnect`,signOut:`Sign out`,resetPreferences:`Reset preferences`},fields:{tailnet:`Tailnet`,dnsName:`MagicDNS name`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,config:{hostname:{title:`Hostname`,placeholder:`e.g. smart-panel`,description:`Hostname advertised to the tailnet.`,validation:{required:`Hostname is required`}},loginServer:{title:`Login server`,placeholder:`https://controlplane.tailscale.com`,description:`Control-plane URL. Override for a self-hosted Headscale server.`,validation:{required:`Login server is required`}},acceptDns:{title:`Accept DNS`,description:`Accept the tailnet MagicDNS configuration.`},acceptRoutes:{title:`Accept routes`,description:`Accept subnet routes advertised by other tailnet nodes.`},advertiseTags:{title:`Advertise tags`,placeholder:`Add an ACL tag and press enter`,description:`ACL tags to advertise for this node, e.g. tag:smart-panel.`},ssh:{title:`Tailscale SSH`,description:`Enable Tailscale SSH on this node.`},serveHttps:{title:`Serve HTTPS on the tailnet`,description:`Serve the admin UI over HTTPS through Tailscale Serve.`},funnel:{title:`Funnel`,description:`Publish the served admin UI to the public internet through Tailscale Funnel.`}}},messages:{requestError:`An error occurred while loading the Tailscale status`,setupFailed:`Failed to start the Tailscale setup job`,loginFailed:`Failed to sign in to Tailscale`,signedOut:`Signed out of Tailscale`,signOutFailed:`Failed to sign out of Tailscale`,preferencesReset:`Tailscale preferences have been reset`,preferencesResetFailed:`Failed to reset Tailscale preferences`,urlCopied:`URL has been copied to the clipboard`,copyFailed:`Failed to copy the URL to the clipboard`,config:{edited:`Tailscale configuration has been successfully updated`,notEdited:`Failed to update Tailscale configuration`}},wizard:{title:`Set up Tailscale`,steps:{setup:`Set up`,signin:`Sign in`,options:`Options`,done:`Done`},setupDescription:`Installs the Tailscale package if missing, enables the daemon, and grants Smart Panel operator rights.`,settingUp:`Setting up Tailscale...`,setupFailed:`The setup job did not complete. You can try again.`,signInDescription:`Open the sign-in link on any device and approve it, or scan the QR code.`,advancedDescription:`For headless installs: paste a pre-authorised auth key to sign in without an interactive approval.`,waitingForApproval:`Waiting for sign-in approval...`,waitingForLink:`Requesting the sign-in link...`,qrAlt:`QR code encoding the Tailscale sign-in link`,doneDescription:`Tailscale is connected. This installation is reachable at the URLs below.`,tabs:{interactive:`Sign in`,advanced:`Advanced`},fields:{authKey:{title:`Auth key`,placeholder:`tskey-auth-...`}},buttons:{startSetup:`Start setup`,getSignInLink:`Get sign-in link`,signIn:`Sign in`,saveAndContinue:`Save and continue`,skip:`Skip`,close:`Close`,copy:`Copy`}}},"es-ES":{headings:{tailscale:`Tailscale`},config:{sections:{node:{title:`Identidad del nodo`,description:`Nombre de host anunciado a la tailnet y plano de control en el que inicia sesión este nodo. Cambia el servidor de inicio de sesión solo para un Headscale autoalojado.`},tailnet:{title:`Opciones de la tailnet`,description:`Cómo participa este nodo en la tailnet: MagicDNS, rutas de subred anunciadas por otros nodos, etiquetas ACL y Tailscale SSH.`},serve:{title:`Serve y Funnel`,description:`Serve publica la interfaz de administración en tu tailnet por HTTPS con el nombre MagicDNS del nodo. Funnel además la expone en internet.`}}},texts:{cardDescription:`Acceso privado a través de tu tailnet, con HTTPS mediante Tailscale Serve.`,funnelWarning:`Funnel publica esta instalación en internet. El inicio de sesión de Smart Panel es la única protección.`},buttons:{setup:`Configurar`,signIn:`Iniciar sesión`,connect:`Conectar`,disconnect:`Desconectar`,reconnect:`Reconectar`,signOut:`Cerrar sesión`,resetPreferences:`Restablecer preferencias`},fields:{tailnet:`Tailnet`,dnsName:`Nombre MagicDNS`,ipv4:`Dirección IPv4`,ipv6:`Dirección IPv6`,config:{hostname:{title:`Nombre de host`,placeholder:`p. ej. smart-panel`,description:`Nombre de host anunciado a la tailnet.`,validation:{required:`El nombre de host es obligatorio`}},loginServer:{title:`Servidor de inicio de sesión`,placeholder:`https://controlplane.tailscale.com`,description:`URL del plano de control. Sobrescríbala para un servidor Headscale autoalojado.`,validation:{required:`El servidor de inicio de sesión es obligatorio`}},acceptDns:{title:`Aceptar DNS`,description:`Aceptar la configuración de MagicDNS de la tailnet.`},acceptRoutes:{title:`Aceptar rutas`,description:`Aceptar rutas de subred anunciadas por otros nodos de la tailnet.`},advertiseTags:{title:`Etiquetas anunciadas`,placeholder:`Añada una etiqueta ACL y pulse Intro`,description:`Etiquetas ACL anunciadas para este nodo, p. ej. tag:smart-panel.`},ssh:{title:`Tailscale SSH`,description:`Habilitar Tailscale SSH en este nodo.`},serveHttps:{title:`Servir HTTPS en la tailnet`,description:`Servir la interfaz de administración por HTTPS mediante Tailscale Serve.`},funnel:{title:`Funnel`,description:`Publicar la interfaz de administración servida en internet mediante Tailscale Funnel.`}}},messages:{requestError:`Se produjo un error al cargar el estado de Tailscale`,setupFailed:`No se pudo iniciar el trabajo de configuración de Tailscale`,loginFailed:`No se pudo iniciar sesión en Tailscale`,signedOut:`Sesión de Tailscale cerrada`,signOutFailed:`No se pudo cerrar la sesión de Tailscale`,preferencesReset:`Las preferencias de Tailscale se han restablecido`,preferencesResetFailed:`No se pudieron restablecer las preferencias de Tailscale`,urlCopied:`La URL se ha copiado al portapapeles`,copyFailed:`No se pudo copiar la URL al portapapeles`,config:{edited:`La configuración de Tailscale se ha actualizado correctamente`,notEdited:`No se pudo actualizar la configuración de Tailscale`}},wizard:{title:`Configurar Tailscale`,steps:{setup:`Configurar`,signin:`Iniciar sesión`,options:`Opciones`,done:`Hecho`},setupDescription:`Instala el paquete de Tailscale si falta, habilita el demonio y concede a Smart Panel derechos de operador.`,settingUp:`Configurando Tailscale...`,setupFailed:`El trabajo de configuración no se completó. Puede intentarlo de nuevo.`,signInDescription:`Abra el enlace de inicio de sesión en cualquier dispositivo y apruébelo, o escanee el código QR.`,advancedDescription:`Para instalaciones sin supervisión: pegue una clave de autenticación preautorizada para iniciar sesión sin aprobación interactiva.`,waitingForApproval:`Esperando la aprobación del inicio de sesión...`,waitingForLink:`Solicitando el enlace de inicio de sesión...`,qrAlt:`Código QR con el enlace de inicio de sesión de Tailscale`,doneDescription:`Tailscale está conectado. Esta instalación es accesible en las direcciones siguientes.`,tabs:{interactive:`Iniciar sesión`,advanced:`Avanzado`},fields:{authKey:{title:`Clave de autenticación`,placeholder:`tskey-auth-...`}},buttons:{startSetup:`Iniciar configuración`,getSignInLink:`Obtener enlace de inicio de sesión`,signIn:`Iniciar sesión`,saveAndContinue:`Guardar y continuar`,skip:`Omitir`,close:`Cerrar`,copy:`Copiar`}}},"pl-PL":{headings:{tailscale:`Tailscale`},config:{sections:{node:{title:`Tożsamość węzła`,description:`Nazwa hosta ogłaszana tailnetowi oraz płaszczyzna sterowania, w której loguje się ten węzeł. Zmieniaj serwer logowania tylko dla samodzielnie hostowanego serwera Headscale.`},tailnet:{title:`Opcje tailnetu`,description:`Jak ten węzeł uczestniczy w tailnecie: MagicDNS, trasy podsieci ogłaszane przez inne węzły, tagi ACL i Tailscale SSH.`},serve:{title:`Serve i Funnel`,description:`Serve udostępnia interfejs administracyjny w Twoim tailnecie przez HTTPS pod nazwą MagicDNS węzła. Funnel dodatkowo udostępnia go w publicznym internecie.`}}},texts:{cardDescription:`Prywatny dostęp przez Twój tailnet, z HTTPS za pomocą Tailscale Serve.`,funnelWarning:`Funnel publikuje tę instalację w publicznym internecie. Jedyną ochroną jest logowanie do Smart Panel.`},buttons:{setup:`Skonfiguruj`,signIn:`Zaloguj się`,connect:`Połącz`,disconnect:`Rozłącz`,reconnect:`Połącz ponownie`,signOut:`Wyloguj się`,resetPreferences:`Zresetuj preferencje`},fields:{tailnet:`Tailnet`,dnsName:`Nazwa MagicDNS`,ipv4:`Adres IPv4`,ipv6:`Adres IPv6`,config:{hostname:{title:`Nazwa hosta`,placeholder:`np. smart-panel`,description:`Nazwa hosta ogłaszana w tailnecie.`,validation:{required:`Nazwa hosta jest wymagana`}},loginServer:{title:`Serwer logowania`,placeholder:`https://controlplane.tailscale.com`,description:`Adres URL płaszczyzny sterowania. Zmień dla samodzielnie hostowanego serwera Headscale.`,validation:{required:`Serwer logowania jest wymagany`}},acceptDns:{title:`Akceptuj DNS`,description:`Zaakceptuj konfigurację MagicDNS tailnetu.`},acceptRoutes:{title:`Akceptuj trasy`,description:`Akceptuj trasy podsieci ogłaszane przez inne węzły tailnetu.`},advertiseTags:{title:`Ogłaszane tagi`,placeholder:`Dodaj tag ACL i naciśnij Enter`,description:`Tagi ACL ogłaszane dla tego węzła, np. tag:smart-panel.`},ssh:{title:`Tailscale SSH`,description:`Włącz Tailscale SSH na tym węźle.`},serveHttps:{title:`Udostępniaj HTTPS w tailnecie`,description:`Udostępniaj interfejs administracyjny przez HTTPS za pomocą Tailscale Serve.`},funnel:{title:`Funnel`,description:`Opublikuj udostępniany interfejs administracyjny w publicznym internecie za pomocą Tailscale Funnel.`}}},messages:{requestError:`Wystąpił błąd podczas wczytywania stanu Tailscale`,setupFailed:`Nie udało się uruchomić zadania konfiguracji Tailscale`,loginFailed:`Nie udało się zalogować do Tailscale`,signedOut:`Wylogowano z Tailscale`,signOutFailed:`Nie udało się wylogować z Tailscale`,preferencesReset:`Preferencje Tailscale zostały zresetowane`,preferencesResetFailed:`Nie udało się zresetować preferencji Tailscale`,urlCopied:`Adres URL został skopiowany do schowka`,copyFailed:`Nie udało się skopiować adresu URL do schowka`,config:{edited:`Konfiguracja Tailscale została pomyślnie zaktualizowana`,notEdited:`Nie udało się zaktualizować konfiguracji Tailscale`}},wizard:{title:`Skonfiguruj Tailscale`,steps:{setup:`Konfiguracja`,signin:`Logowanie`,options:`Opcje`,done:`Gotowe`},setupDescription:`Instaluje pakiet Tailscale, jeśli go brakuje, włącza usługę demona i nadaje Smart Panel uprawnienia operatora.`,settingUp:`Trwa konfigurowanie Tailscale...`,setupFailed:`Zadanie konfiguracji nie zostało ukończone. Możesz spróbować ponownie.`,signInDescription:`Otwórz link logowania na dowolnym urządzeniu i zatwierdź go albo zeskanuj kod QR.`,advancedDescription:`Do instalacji bezobsługowych: wklej wstępnie autoryzowany klucz uwierzytelniający, aby zalogować się bez interaktywnego zatwierdzenia.`,waitingForApproval:`Oczekiwanie na zatwierdzenie logowania...`,waitingForLink:`Pobieranie linku logowania...`,qrAlt:`Kod QR zawierający link logowania Tailscale`,doneDescription:`Tailscale jest połączony. Ta instalacja jest dostępna pod poniższymi adresami.`,tabs:{interactive:`Zaloguj się`,advanced:`Zaawansowane`},fields:{authKey:{title:`Klucz uwierzytelniający`,placeholder:`tskey-auth-...`}},buttons:{startSetup:`Rozpocznij konfigurację`,getSignInLink:`Pobierz link logowania`,signIn:`Zaloguj się`,saveAndContinue:`Zapisz i kontynuuj`,skip:`Pomiń`,close:`Zamknij`,copy:`Kopiuj`}}},"sk-SK":{headings:{tailscale:`Tailscale`},config:{sections:{node:{title:`Identita uzla`,description:`Názov hostiteľa oznamovaný tailnetu a riadiaca rovina, do ktorej sa tento uzol prihlasuje. Prihlasovací server meňte iba pre vlastný server Headscale.`},tailnet:{title:`Možnosti tailnetu`,description:`Ako sa tento uzol zapája do tailnetu: MagicDNS, trasy podsietí oznamované ostatnými uzlami, značky ACL a Tailscale SSH.`},serve:{title:`Serve a Funnel`,description:`Serve sprístupní administráciu vo vašom tailnete cez HTTPS pod MagicDNS názvom uzla. Funnel ju navyše zverejní na verejnom internete.`}}},texts:{cardDescription:`Súkromný prístup cez váš tailnet, s HTTPS pomocou Tailscale Serve.`,funnelWarning:`Funnel zverejní túto inštaláciu na verejnom internete. Jedinou ochranou je prihlásenie do Smart Panelu.`},buttons:{setup:`Nastaviť`,signIn:`Prihlásiť sa`,connect:`Pripojiť`,disconnect:`Odpojiť`,reconnect:`Znova pripojiť`,signOut:`Odhlásiť sa`,resetPreferences:`Obnoviť predvolené nastavenia`},fields:{tailnet:`Tailnet`,dnsName:`Názov MagicDNS`,ipv4:`Adresa IPv4`,ipv6:`Adresa IPv6`,config:{hostname:{title:`Názov hostiteľa`,placeholder:`napr. smart-panel`,description:`Názov hostiteľa oznamovaný tailnetu.`,validation:{required:`Názov hostiteľa je povinný`}},loginServer:{title:`Prihlasovací server`,placeholder:`https://controlplane.tailscale.com`,description:`URL riadiacej roviny. Zmeňte pre vlastný server Headscale.`,validation:{required:`Prihlasovací server je povinný`}},acceptDns:{title:`Prijímať DNS`,description:`Prijať konfiguráciu MagicDNS tailnetu.`},acceptRoutes:{title:`Prijímať trasy`,description:`Prijímať trasy podsietí oznamované ostatnými uzlami tailnetu.`},advertiseTags:{title:`Oznamované značky`,placeholder:`Pridajte značku ACL a stlačte Enter`,description:`Značky ACL oznamované pre tento uzol, napr. tag:smart-panel.`},ssh:{title:`Tailscale SSH`,description:`Povoliť Tailscale SSH na tomto uzle.`},serveHttps:{title:`Sprístupniť HTTPS na tailnete`,description:`Sprístupniť administráciu cez HTTPS pomocou Tailscale Serve.`},funnel:{title:`Funnel`,description:`Zverejniť sprístupnenú administráciu na verejnom internete pomocou Tailscale Funnel.`}}},messages:{requestError:`Pri načítaní stavu Tailscale došlo k chybe`,setupFailed:`Nepodarilo sa spustiť úlohu nastavenia Tailscale`,loginFailed:`Prihlásenie do Tailscale zlyhalo`,signedOut:`Odhlásenie z Tailscale prebehlo úspešne`,signOutFailed:`Odhlásenie z Tailscale zlyhalo`,preferencesReset:`Nastavenia Tailscale boli obnovené`,preferencesResetFailed:`Obnovenie nastavení Tailscale zlyhalo`,urlCopied:`Adresa URL bola skopírovaná do schránky`,copyFailed:`Kopírovanie adresy URL do schránky zlyhalo`,config:{edited:`Konfigurácia Tailscale bola úspešne aktualizovaná`,notEdited:`Aktualizácia konfigurácie Tailscale zlyhala`}},wizard:{title:`Nastaviť Tailscale`,steps:{setup:`Nastavenie`,signin:`Prihlásenie`,options:`Možnosti`,done:`Hotovo`},setupDescription:`Nainštaluje balík Tailscale, ak chýba, povolí démona a udelí Smart Panelu práva operátora.`,settingUp:`Prebieha nastavovanie Tailscale...`,setupFailed:`Úloha nastavenia nebola dokončená. Môžete to skúsiť znova.`,signInDescription:`Otvorte prihlasovací odkaz na ľubovoľnom zariadení a potvrďte ho, alebo naskenujte QR kód.`,advancedDescription:`Pre bezobslužné inštalácie: vložte vopred autorizovaný prihlasovací kľúč a prihláste sa bez interaktívneho potvrdenia.`,waitingForApproval:`Čaká sa na schválenie prihlásenia...`,waitingForLink:`Získava sa prihlasovací odkaz...`,qrAlt:`QR kód obsahujúci prihlasovací odkaz Tailscale`,doneDescription:`Tailscale je pripojený. Táto inštalácia je dostupná na nižšie uvedených adresách.`,tabs:{interactive:`Prihlásiť sa`,advanced:`Pokročilé`},fields:{authKey:{title:`Prihlasovací kľúč`,placeholder:`tskey-auth-...`}},buttons:{startSetup:`Spustiť nastavenie`,getSignInLink:`Získať prihlasovací odkaz`,signIn:`Prihlásiť sa`,saveAndContinue:`Uložiť a pokračovať`,skip:`Preskočiť`,close:`Zavrieť`,copy:`Kopírovať`}}}},gL=Ki.extend({hostname:X().trim().min(1),loginServer:X().trim().min(1),acceptDns:J(),acceptRoutes:J(),advertiseTags:W(X().trim().min(1)),ssh:J(),serveHttps:J(),funnel:J()}),_L=Wi.extend({hostname:X(),loginServer:X(),acceptDns:J(),acceptRoutes:J(),advertiseTags:W(X()),ssh:J(),serveHttps:J(),funnel:J()}),vL=Zi.and(K({type:Y(hI),hostname:X().optional(),login_server:X().optional(),accept_dns:J().optional(),accept_routes:J().optional(),advertise_tags:W(X()).optional(),ssh:J().optional(),serve_https:J().optional(),funnel:J().optional()}));Ri.and(K({type:Y(hI),hostname:X(),login_server:X(),accept_dns:J(),accept_routes:J(),advertise_tags:W(X()),ssh:J(),serve_https:J(),funnel:J()}));var yL=K({code:G(Or),satisfied:J(),message:X()}),bL=K({type:X(),state:G(Wt),endpoints:W(mh),message:X().nullable().optional(),details:sn(X(),hn()),proxyAddresses:W(X()),advisories:W(hh),updatedAt:X(),requirements:W(yL),authUrl:X().optional(),qr:X().optional()}),xL=K({state:G(Wt),authUrl:X().optional(),qr:X().optional()}),SL=K({job:X()}),CL=K({type:X(),job:X(),step:X().optional(),state:ir([`running`,`complete`,`failed`,`timeout`]),message:X().optional()});K({getting:J(),installing:J(),loggingIn:J(),loggingOut:J(),resettingPreferences:J()}),K({event:X(),data:Sn({})});var wL=K({code:G(Or),satisfied:J(),message:X()});K({type:X(),state:G(Wt),endpoints:W(Sh),message:X().nullable().optional(),details:sn(X(),hn()),proxy_addresses:W(X()),advisories:W(Ch),updated_at:X(),requirements:W(wL),auth_url:X().optional(),qr:X().optional()}),K({state:G(Wt),auth_url:X().optional(),qr:X().optional()}),K({job:X()});var TL=K({auth_key:X().optional()}),EL=e=>{let t=bL.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new bI(`Failed to validate received Tailscale status data.`);return t.data},DL=e=>{let t=xL.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new bI(`Failed to validate received Tailscale sign-in result.`);return t.data},OL=e=>{let t=SL.safeParse(Un(e));if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new bI(`Failed to validate received Tailscale install result.`);return t.data},kL=(e,t)=>{let n=bh.safeParse(Un(t));if(!n.success)throw cr.error(`Schema validation failed with:`,n.error),new bI(`Failed to validate received Tailscale provider status event.`);let r=n.data,i=r.state===`pending-auth`;return{...e,state:r.state,endpoints:r.endpoints,message:r.message??null,details:r.details,proxyAddresses:r.proxyAddresses,advisories:r.advisories,updatedAt:r.updatedAt,authUrl:i?e.authUrl:void 0,qr:i?e.qr:void 0}},AL=e=>{let t=CL.safeParse(e);if(!t.success)throw cr.error(`Schema validation failed with:`,t.error),new bI(`Failed to validate received Tailscale setup progress event.`);return t.data},jL=`/${Ie}/${gI}/status`,ML=`/${Ie}/${gI}/install`,NL=`/${Ie}/${gI}/login`,PL=`/${Ie}/${gI}/logout`,FL=`/${Ie}/${gI}/reset-preferences`,IL=()=>({getting:!1,installing:!1,loggingIn:!1,loggingOut:!1,resettingPreferences:!1}),LL=jn(`remote_access_tailscale_plugin-status`,()=>{let e=Zn(),t=On(),n=j(IL()),r=j(!1),i=j(null),a=j(null),o=()=>r.value,s=()=>i.value!==null,c=null,l=async()=>{if(c)return c;let t=(async()=>{n.value.getting=!0;try{let{data:t,error:n,response:a}=await e.client.GET(jL);if(t!==void 0)return i.value=EL(t.data),r.value=!0,i.value;let o=a;throw new yI(Kn(n,`Failed to load the Tailscale status.`),o.status)}finally{n.value.getting=!1}})();c=t;try{return await t}finally{c=null}};return{data:i,setupProgress:a,semaphore:n,firstLoad:r,firstLoadFinished:o,isLoaded:s,get:l,install:async()=>{n.value.installing=!0;try{let{data:t,error:n,response:r}=await e.client.POST(ML);if(t!==void 0)return OL(t.data);let i=r;throw new yI(Kn(n,`Failed to start the Tailscale setup job.`),i.status)}finally{n.value.installing=!1}},login:async t=>{n.value.loggingIn=!0;try{let n=TL.parse(t===void 0?{}:{auth_key:t}),{data:r,error:a,response:o}=await e.client.POST(NL,{body:n});if(r!==void 0){let e=DL(r.data);return i.value!==null&&(i.value={...i.value,state:e.state,authUrl:e.authUrl,qr:e.qr}),e}let s=o;throw new yI(Kn(a,`Failed to sign in to Tailscale.`),s.status)}finally{n.value.loggingIn=!1}},logout:async()=>{n.value.loggingOut=!0;try{let{data:t,error:n,response:r}=await e.client.POST(PL);if(t!==void 0)return i.value=EL(t.data),i.value;let a=r;throw new yI(Kn(n,`Failed to sign out of Tailscale.`),a.status)}finally{n.value.loggingOut=!1}},resetPreferences:async()=>{n.value.resettingPreferences=!0;try{let{data:t,error:n,response:r}=await e.client.POST(FL);if(t!==void 0)return i.value=EL(t.data),i.value;let a=r;throw new yI(Kn(n,`Failed to reset Tailscale preferences.`),a.status)}finally{n.value.resettingPreferences=!1}},onEvent:e=>{switch(e.event){case Ws.PROVIDER_STATUS:if(i.value===null){t.warn(`Received a Tailscale provider status event before the initial status fetch; ignoring.`);return}i.value=kL(i.value,e.data);return;case Ws.SETUP_PROGRESS:a.value=AL(e.data);return;default:t.warn(`Unhandled Tailscale plugin event: ${e.event}`)}},refresh:()=>l()}}),RL=e=>LL(e),zL=Symbol(`FB-Plugin-RemoteAccessTailscale`),BL={install:(e,t)=>{let n=ra(e),r=pn(e),i=ut(e),a=_r(e),o=Hi(e);for(let[e,n]of Object.entries(hL)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{remoteAccessTailscalePlugin:n});t.i18n.global.setLocaleMessage(e,r)}let s=RL(t.store);r.addStore(xI,s),n.addPlugin(zL,{type:hI,source:`com.fastybird.smart-panel.plugin.remote-access-tailscale`,name:`Tailscale`,description:`Reach this installation over a Tailscale mesh network without opening a port.`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://github.com/FastyBird/smart-panel/issues`},elements:[{type:Ea,components:{pluginConfigEditForm:mI},schemas:{pluginConfigSchema:_L,pluginConfigEditFormSchema:gL,pluginConfigUpdateReqSchema:vL},modules:[ka]},{type:Gs,components:{providerCard:mL,providerSetup:UI},modules:[Is]}],modules:[ka,Is],isCore:!1}),o.register(zL,()=>Ii([s])),i.on(`event`,e=>{if(e?.event?.startsWith(`RemoteAccessModule.`)&&!(typeof e.payload!=`object`||e.payload===null))switch(e.event){case Ws.PROVIDER_STATUS:case Ws.SETUP_PROGRESS:if(e.payload.type!==`remote-access-tailscale-plugin`)return;s.onEvent({event:e.event,data:e.payload});return;case Ws.URLS_CHANGED:return;default:a.warn(`Unhandled remote access event in the Tailscale plugin:`,e.event)}})}},VL=`scenes-local-plugin`,HL=`scenes-local`,UL={[lt.generic]:null,[lt.lighting]:[dr.lighting,dr.switcher,dr.outlet],[lt.climate]:[dr.thermostat,dr.heating_unit,dr.air_conditioner,dr.air_dehumidifier,dr.air_humidifier,dr.air_purifier,dr.fan],[lt.media]:[dr.television,dr.media,dr.speaker],[lt.work]:[dr.lighting,dr.outlet],[lt.relax]:[dr.lighting,dr.media],[lt.night]:[dr.lighting,dr.window_covering],[lt.morning]:[dr.lighting,dr.window_covering],[lt.party]:[dr.lighting,dr.speaker,dr.media],[lt.movie]:[dr.television,dr.lighting,dr.speaker],[lt.away]:[dr.alarm,dr.lock,dr.camera],[lt.home]:null,[lt.security]:[dr.camera,dr.alarm,dr.lock,dr.door],[lt.energy]:[dr.outlet,dr.switcher,dr.sensor],[lt.custom]:null},WL={class:`grow-1`},GL=d(k({name:`LocalSceneActionAddForm`,__name:`local-scene-action-add-form`,props:{id:{},sceneId:{},sceneCategory:{default:void 0},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:ac.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`,`submit`],setup(e,{emit:t}){let n=ee(`local-scene-action-add-form`),r=e,a=t,{t:o}=M(),c=j(void 0),u=j(ac.NONE),d=j(!1),f=j(!1),m=P({id:r.id||cn(),type:HL,deviceId:``,channelId:null,propertyId:null,value:``,enabled:!0}),h=p(()=>m.channelId??void 0),g=p(()=>r.sceneCategory?UL[r.sceneCategory]??null:null),_=p(()=>g.value!==null&&g.value.length>0),{devices:v,fetchDevices:y,areLoading:b,loaded:x}=fs(),{channels:S,fetchChannels:C,areLoading:w}=ms({deviceId:p(()=>m.deviceId)}),{properties:T,fetchProperties:te,areLoading:re}=ds({channelId:h}),k=e=>e.permissions.includes(dn.rw)||e.permissions.includes(dn.wo),ie=p(()=>T.value.filter(k)),ae=p(()=>S.value.filter(e=>T.value.filter(t=>t.channel===e.id).some(k))),oe=p(()=>{if(m.propertyId)return T.value.find(e=>e.id===m.propertyId)}),se=p(()=>{if(!oe.value)return`string`;let e=oe.value.dataType;return e===Mn.bool?`boolean`:e===Mn.enum?`enum`:[Mn.int,Mn.uint,Mn.float,Mn.char,Mn.uchar,Mn.short,Mn.ushort].includes(e)?`number`:`string`}),ce=p(()=>{if(!oe.value)return null;let e=oe.value.format;if(!Array.isArray(e))return null;let t=e.filter(e=>typeof e==`string`);return t.length>0?t:null}),ue=p(()=>ce.value||[]),de=p(()=>{if(!oe.value)return;let e=oe.value.format;if(!Array.isArray(e)||e.length<1)return;let t=e[0];return typeof t==`number`?t:void 0}),fe=p(()=>{if(!oe.value)return;let e=oe.value.format;if(!Array.isArray(e)||e.length<2)return;let t=e[1];return typeof t==`number`?t:void 0}),pe=p(()=>oe.value&&oe.value.step!==null&&oe.value.step!==void 0?oe.value.step:1),me=p({get:()=>m.value===!0||m.value===`true`||m.value===1,set:e=>{m.value=e,d.value=!0}}),he=p({get:()=>typeof m.value==`number`?m.value:parseFloat(String(m.value))||0,set:e=>{m.value=e,d.value=!0}}),ge=p({get:()=>String(m.value),set:e=>{m.value=e,d.value=!0}}),_e=p(()=>v.value.filter(e=>!e.hidden)),ve=p(()=>wa(_e.value,[e=>e.name.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name}))),ye=p(()=>!_.value||!g.value?ve.value:wa(_e.value.filter(e=>g.value.includes(e.category)),[e=>e.name.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name}))),be=p(()=>!_.value||!g.value?[]:wa(_e.value.filter(e=>!g.value.includes(e.category)),[e=>e.name.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name}))),xe=p(()=>wa(T.value.length>0?ae.value:S.value,[e=>e.name.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name}))),Se=p(()=>wa(ie.value,[e=>(e.name??o(`devicesModule.categories.channelsProperties.${e.category}`)).toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name??o(`devicesModule.categories.channelsProperties.${e.category}`)}))),Ce=P({deviceId:[{required:!0,message:o(`scenesLocalPlugin.fields.device.validation.required`),trigger:`change`}],channelId:[{required:!0,message:o(`scenesLocalPlugin.fields.channel.validation.required`),trigger:`change`}],propertyId:[{required:!0,message:o(`scenesLocalPlugin.fields.property.validation.required`),trigger:`change`}],value:[{required:!0,message:o(`scenesLocalPlugin.fields.value.validation.required`),trigger:`change`}]}),we=async()=>{m.channelId=null,m.propertyId=null,m.value=``,d.value=!0,m.deviceId&&await C()},Te=async()=>{m.propertyId=null,m.value=``,d.value=!0,m.channelId&&await te()},Ee=()=>{T.value.find(e=>e.id===m.propertyId)?.dataType===Mn.bool?m.value=!1:m.value=``,d.value=!0},De=async()=>{if(u.value=ac.WORKING,!c.value){u.value=ac.ERROR;return}if(c.value.clearValidate(),!await c.value.validate().catch(()=>!1))throw u.value=ac.ERROR,Error(`Form not valid`);a(`submit`,{id:m.id,type:m.type,configuration:{},deviceId:m.deviceId,channelId:m.channelId,propertyId:m.propertyId,value:m.value,order:m.order,enabled:m.enabled}),u.value=ac.OK};return le(async()=>{x.value||await y().catch(e=>{throw new hs(`Something went wrong`,e)})}),F(()=>u.value,async e=>{a(`update:remote-form-result`,e)}),F(()=>r.remoteFormSubmit,async e=>{e&&(a(`update:remote-form-submit`,!1),De().catch(()=>{}))}),F(()=>r.remoteFormReset,e=>{if(a(`update:remote-form-reset`,!1),e){if(!c.value)return;c.value.resetFields()}}),F(()=>d.value,e=>{a(`update:remote-form-changed`,e)}),(e,t)=>!L(b)&&ve.value.length===0?(A(),O(L(ne),{key:0,class:`h-full w-full`},{icon:B(()=>[D(L(ze),{size:80},{primary:B(()=>[D(L(s),{icon:`mdi:devices`})]),secondary:B(()=>[D(L(s),{icon:`mdi:information`})]),_:1})]),title:B(()=>[E(z(L(o)(`scenesLocalPlugin.messages.noDevices`)),1)]),_:1})):(A(),O(L(Ir),{key:1,ref_key:`formEl`,ref:c,model:m,rules:Ce,"label-position":`top`,"status-icon":``},{default:B(()=>[_.value?(A(),i(V,{key:0},[f.value?(A(),O(L(Q),{key:1,type:`warning`,closable:!1,"show-icon":``,class:`mb-2!`},{default:B(()=>[E(z(L(o)(`scenesLocalPlugin.fields.device.hints.allDevices`)),1)]),_:1})):(A(),O(L(Q),{key:0,type:`info`,closable:!1,"show-icon":``,class:`mb-2!`},{default:B(()=>[E(z(L(o)(`scenesLocalPlugin.fields.device.hints.recommended`)),1)]),_:1}))],64)):R(``,!0),D(L(Z),{class:N([L(n).e(`device-field`)]),prop:`deviceId`},{label:B(()=>[l(`div`,WL,z(L(o)(`scenesLocalPlugin.fields.device.title`)),1),_.value?(A(),O(L(ii),{key:0,modelValue:f.value,"onUpdate:modelValue":t[0]||=e=>f.value=e,size:`small`},{default:B(()=>[E(z(L(o)(`scenesLocalPlugin.fields.device.showAll`)),1)]),_:1},8,[`modelValue`])):R(``,!0)]),default:B(()=>[D(L(ei),{modelValue:m.deviceId,"onUpdate:modelValue":t[1]||=e=>m.deviceId=e,placeholder:L(o)(`scenesLocalPlugin.fields.device.placeholder`),name:`deviceId`,loading:L(b),disabled:ve.value.length===0,filterable:``,class:`w-full`,onChange:we},{default:B(()=>[!f.value&&_.value&&ye.value.length>0?(A(!0),i(V,{key:0},I(ye.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128)):_.value?(A(),i(V,{key:1},[ye.value.length>0?(A(),O(L($r),{key:0,label:L(o)(`scenesLocalPlugin.fields.device.groups.recommended`)},{default:B(()=>[(A(!0),i(V,null,I(ye.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`label`])):R(``,!0),be.value.length>0?(A(),O(L($r),{key:1,label:L(o)(`scenesLocalPlugin.fields.device.groups.other`)},{default:B(()=>[(A(!0),i(V,null,I(be.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`label`])):R(``,!0)],64)):(A(!0),i(V,{key:2},I(ve.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`])]),_:1},8,[`class`]),D(L(Z),{label:L(o)(`scenesLocalPlugin.fields.channel.title`),prop:`channelId`},{default:B(()=>[D(L(ei),{modelValue:m.channelId,"onUpdate:modelValue":t[2]||=e=>m.channelId=e,placeholder:xe.value.length===0&&m.deviceId&&!L(w)?L(o)(`scenesLocalPlugin.fields.channel.noChannels`):L(o)(`scenesLocalPlugin.fields.channel.placeholder`),name:`channelId`,loading:L(w),disabled:!m.deviceId||xe.value.length===0,filterable:``,class:`w-full`,onChange:Te},{default:B(()=>[(A(!0),i(V,null,I(xe.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`scenesLocalPlugin.fields.property.title`),prop:`propertyId`},{default:B(()=>[D(L(ei),{modelValue:m.propertyId,"onUpdate:modelValue":t[3]||=e=>m.propertyId=e,placeholder:Se.value.length===0&&m.channelId&&!L(re)?L(o)(`scenesLocalPlugin.fields.property.noProperties`):L(o)(`scenesLocalPlugin.fields.property.placeholder`),name:`propertyId`,loading:L(re),disabled:!m.channelId||Se.value.length===0,filterable:``,class:`w-full`,onChange:Ee},{default:B(()=>[(A(!0),i(V,null,I(Se.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`scenesLocalPlugin.fields.value.title`),prop:`value`},{default:B(()=>[se.value===`boolean`?(A(),O(L(Vn),{key:0,modelValue:me.value,"onUpdate:modelValue":t[4]||=e=>me.value=e},null,8,[`modelValue`])):se.value===`enum`&&ce.value?(A(),O(L(ei),{key:1,modelValue:m.value,"onUpdate:modelValue":t[5]||=e=>m.value=e,placeholder:L(o)(`scenesLocalPlugin.fields.value.placeholder`),name:`value`,class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(ue.value,e=>(A(),O(L(ti),{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])):se.value===`number`?(A(),O(L(Qr),{key:2,modelValue:he.value,"onUpdate:modelValue":t[6]||=e=>he.value=e,placeholder:L(o)(`scenesLocalPlugin.fields.value.placeholder`),name:`value`,min:de.value,max:fe.value,step:pe.value,class:`w-full`},null,8,[`modelValue`,`placeholder`,`min`,`max`,`step`])):(A(),O(L(U),{key:3,modelValue:ge.value,"onUpdate:modelValue":t[7]||=e=>ge.value=e,placeholder:L(o)(`scenesLocalPlugin.fields.value.placeholder`),name:`value`},null,8,[`modelValue`,`placeholder`]))]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),[[`__scopeId`,`data-v-85cfff33`]]),KL={class:`flex items-center gap-1 min-w-0`},qL={class:`action-detail-popover`},JL={class:`detail-row`},YL={class:`detail-label`},XL={class:`detail-row`},ZL={class:`detail-label`},QL={class:`detail-row`},$L={class:`detail-label`},eR={class:`detail-row`},tR={class:`detail-label`},nR=d(k({name:`LocalSceneActionCard`,__name:`local-scene-action-card`,props:{action:{}},setup(e){let t=e,{t:n}=M(),r=p(()=>t.action.deviceId??t.action.configuration?.device_id??``),a=p(()=>t.action.channelId??t.action.configuration?.channel_id??null),o=p(()=>t.action.propertyId??t.action.configuration?.property_id??``),c=p(()=>t.action.value??t.action.configuration?.value),{devices:u,fetchDevices:d,loaded:f}=fs(),{channels:m,fetchChannels:h}=ms({deviceId:r}),{properties:_,fetchProperties:v}=ds({channelId:p(()=>a.value??void 0)}),y=p(()=>u.value.find(e=>e.id===r.value)),b=p(()=>m.value.find(e=>e.id===a.value)),x=p(()=>_.value.find(e=>e.id===o.value)),S=p(()=>!y.value&&!!r.value),C=p(()=>!b.value&&!!a.value),w=p(()=>!x.value&&!!o.value),T=p(()=>S.value||C.value||w.value),ee=p(()=>y.value?.name??n(`scenesLocalPlugin.actionCard.unknownDevice`)),te=p(()=>b.value?.name??n(`scenesLocalPlugin.actionCard.unknownChannel`)),ne=p(()=>x.value?x.value.name??n(`devicesModule.categories.channelsProperties.${x.value.category}`):n(`scenesLocalPlugin.actionCard.unknownProperty`)),re=p(()=>ee.value.toLowerCase()!==te.value.toLowerCase()),k=p(()=>{let e=c.value;return typeof e==`boolean`?e?`ON`:`OFF`:String(e??``)}),ie=p(()=>{let e=c.value;return typeof e==`boolean`?e?`success`:`danger`:`info`});return le(async()=>{if(f.value||await d(),u.value.find(e=>e.id===r.value)){if(r.value)try{await h()}catch{return}if(a.value)try{await v()}catch{}}}),(e,t)=>(A(),i(`div`,{class:N([`local-action-content`,{"has-missing-resource":T.value}])},[l(`div`,KL,[T.value?(A(),O(L(nt),{key:0,content:L(n)(`scenesLocalPlugin.actionCard.missingResource`),placement:`top`},{default:B(()=>[D(L(g),{class:`warning-icon flex-shrink-0`,size:14},{default:B(()=>[D(L(s),{icon:`mdi:alert-circle`})]),_:1})]),_:1},8,[`content`])):R(``,!0),D(L(Jt),{placement:`top`,width:300,trigger:`click`},{reference:B(()=>[D(L(g),{class:`info-icon flex-shrink-0`,size:14},{default:B(()=>[D(L(s),{icon:`mdi:information-outline`})]),_:1})]),default:B(()=>[l(`div`,qL,[l(`div`,JL,[l(`span`,YL,z(L(n)(`scenesLocalPlugin.actionCard.device`))+`:`,1),l(`span`,{class:N([`detail-value`,{"text-danger":S.value}])},z(ee.value),3)]),l(`div`,XL,[l(`span`,ZL,z(L(n)(`scenesLocalPlugin.actionCard.channel`))+`:`,1),l(`span`,{class:N([`detail-value`,{"text-danger":C.value}])},z(te.value),3)]),l(`div`,QL,[l(`span`,$L,z(L(n)(`scenesLocalPlugin.actionCard.property`))+`:`,1),l(`span`,{class:N([`detail-value`,{"text-danger":w.value}])},z(ne.value),3)]),l(`div`,eR,[l(`span`,tR,z(L(n)(`scenesLocalPlugin.actionCard.value`))+`:`,1),D(L(Xt),{size:`small`,type:ie.value},{default:B(()=>[E(z(k.value),1)]),_:1},8,[`type`])])])]),_:1}),D(L(zt),{class:N([`font-medium flex-shrink-1 min-w-0`,{"text-danger":S.value}]),truncated:``},{default:B(()=>[E(z(ee.value),1)]),_:1},8,[`class`]),re.value?(A(),i(V,{key:1},[t[0]||=l(`span`,{class:`text-gray-400 flex-shrink-0`},`›`,-1),D(L(zt),{class:N([`flex-shrink-1 min-w-0`,C.value?`text-danger`:`text-gray-600`]),truncated:``},{default:B(()=>[E(z(te.value),1)]),_:1},8,[`class`])],64)):R(``,!0),t[1]||=l(`span`,{class:`text-gray-400 flex-shrink-0`},`›`,-1),D(L(zt),{class:N([`flex-shrink-1 min-w-0`,w.value?`text-danger`:`text-gray-600`]),truncated:``},{default:B(()=>[E(z(ne.value),1)]),_:1},8,[`class`]),t[2]||=l(`span`,{class:`text-gray-400 flex-shrink-0 mx-1`},`→`,-1),D(L(Xt),{size:`small`,type:ie.value,class:`flex-shrink-0`},{default:B(()=>[E(z(k.value),1)]),_:1},8,[`type`])])],2))}}),[[`__scopeId`,`data-v-11c3b695`]]),rR=k({name:`LocalSceneActionEditForm`,__name:`local-scene-action-edit-form`,props:{action:{},sceneId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:ac.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`,`submit`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=j(void 0),s=j(ac.NONE),c=j(!1),l=P({id:n.action.id,type:HL,deviceId:n.action.deviceId??n.action.configuration?.device_id??``,channelId:n.action.channelId??n.action.configuration?.channel_id??null,propertyId:n.action.propertyId??n.action.configuration?.property_id??``,value:n.action.value??n.action.configuration?.value??``,enabled:n.action.enabled}),u=p(()=>l.channelId??void 0),{devices:d,fetchDevices:f,areLoading:m,loaded:h}=fs(),{channels:g,fetchChannels:_,areLoading:v}=ms({deviceId:p(()=>l.deviceId??``)}),{properties:y,fetchProperties:b,areLoading:x}=ds({channelId:u}),S=e=>e.permissions.includes(dn.rw)||e.permissions.includes(dn.wo),C=p(()=>y.value.filter(S)),w=p(()=>g.value.filter(e=>y.value.filter(t=>t.channel===e.id).some(S))),T=p(()=>{if(l.propertyId)return y.value.find(e=>e.id===l.propertyId)}),ee=p(()=>{if(!T.value)return`string`;let e=T.value.dataType;return e===Mn.bool?`boolean`:e===Mn.enum?`enum`:[Mn.int,Mn.uint,Mn.float,Mn.char,Mn.uchar,Mn.short,Mn.ushort].includes(e)?`number`:`string`}),te=p(()=>{if(!T.value)return null;let e=T.value.format;if(!Array.isArray(e))return null;let t=e.filter(e=>typeof e==`string`);return t.length>0?t:null}),re=p(()=>te.value||[]),k=p(()=>{if(!T.value)return;let e=T.value.format;if(!Array.isArray(e)||e.length<1)return;let t=e[0];return typeof t==`number`?t:void 0}),ie=p(()=>{if(!T.value)return;let e=T.value.format;if(!Array.isArray(e)||e.length<2)return;let t=e[1];return typeof t==`number`?t:void 0}),ae=p(()=>T.value&&T.value.step!==null&&T.value.step!==void 0?T.value.step:1),oe=p({get:()=>l.value===!0||l.value===`true`||l.value===1,set:e=>{l.value=e,c.value=!0}}),se=p({get:()=>typeof l.value==`number`?l.value:parseFloat(String(l.value))||0,set:e=>{l.value=e,c.value=!0}}),ce=p({get:()=>String(l.value),set:e=>{l.value=e,c.value=!0}}),N=p(()=>wa(d.value.filter(e=>!e.hidden),[e=>e.name.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name}))),ue=p(()=>wa(y.value.length>0?w.value:g.value,[e=>e.name.toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name}))),de=p(()=>wa(C.value,[e=>(e.name??a(`devicesModule.categories.channelsProperties.${e.category}`)).toLowerCase()],[`asc`]).map(e=>({value:e.id,label:e.name??a(`devicesModule.categories.channelsProperties.${e.category}`)}))),fe=P({deviceId:[{required:!0,message:a(`scenesLocalPlugin.fields.device.validation.required`),trigger:`change`}],channelId:[{required:!0,message:a(`scenesLocalPlugin.fields.channel.validation.required`),trigger:`change`}],propertyId:[{required:!0,message:a(`scenesLocalPlugin.fields.property.validation.required`),trigger:`change`}],value:[{required:!0,message:a(`scenesLocalPlugin.fields.value.validation.required`),trigger:`change`}]}),pe=async()=>{l.channelId=null,l.propertyId=``,l.value=``,c.value=!0,l.deviceId&&await _()},me=async()=>{l.propertyId=``,l.value=``,c.value=!0,l.channelId&&await b()},he=()=>{y.value.find(e=>e.id===l.propertyId)?.dataType===Mn.bool?l.value=!1:l.value=``,c.value=!0},ge=async()=>{if(s.value=ac.WORKING,!o.value){s.value=ac.ERROR;return}if(o.value.clearValidate(),!await o.value.validate().catch(()=>!1))throw s.value=ac.ERROR,Error(`Form not valid`);r(`submit`,{id:l.id,type:l.type,configuration:{},deviceId:l.deviceId,channelId:l.channelId,propertyId:l.propertyId,value:l.value,order:l.order,enabled:l.enabled}),s.value=ac.OK};return le(async()=>{h.value||await f().catch(e=>{throw new hs(`Something went wrong`,e)}),l.deviceId&&await _(),l.channelId&&await b()}),F(()=>s.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),ge().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>{let n=Me(`icon`),r=Me(`icon-with-child`);return A(),i(V,null,[!L(m)&&N.value.length===0?(A(),O(L(ne),{key:0,class:`h-full w-full`},{icon:B(()=>[D(r,{size:80},{primary:B(()=>[D(n,{icon:`mdi:devices`})]),secondary:B(()=>[D(n,{icon:`mdi:information`})]),_:1})]),title:B(()=>[E(z(L(a)(`scenesLocalPlugin.messages.noDevices`)),1)]),_:1})):R(``,!0),D(L(Ir),{ref_key:`formEl`,ref:o,model:l,rules:fe,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`scenesLocalPlugin.fields.device.title`),prop:`deviceId`},{default:B(()=>[D(L(ei),{modelValue:l.deviceId,"onUpdate:modelValue":t[0]||=e=>l.deviceId=e,placeholder:L(a)(`scenesLocalPlugin.fields.device.placeholder`),name:`deviceId`,loading:L(m),disabled:N.value.length===0,filterable:``,class:`w-full`,onChange:pe},{default:B(()=>[(A(!0),i(V,null,I(N.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`scenesLocalPlugin.fields.channel.title`),prop:`channelId`},{default:B(()=>[D(L(ei),{modelValue:l.channelId,"onUpdate:modelValue":t[1]||=e=>l.channelId=e,placeholder:ue.value.length===0&&l.deviceId&&!L(v)?L(a)(`scenesLocalPlugin.fields.channel.noChannels`):L(a)(`scenesLocalPlugin.fields.channel.placeholder`),name:`channelId`,loading:L(v),disabled:!l.deviceId||ue.value.length===0,filterable:``,class:`w-full`,onChange:me},{default:B(()=>[(A(!0),i(V,null,I(ue.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`scenesLocalPlugin.fields.property.title`),prop:`propertyId`},{default:B(()=>[D(L(ei),{modelValue:l.propertyId,"onUpdate:modelValue":t[2]||=e=>l.propertyId=e,placeholder:de.value.length===0&&l.channelId&&!L(x)?L(a)(`scenesLocalPlugin.fields.property.noProperties`):L(a)(`scenesLocalPlugin.fields.property.placeholder`),name:`propertyId`,loading:L(x),disabled:!l.channelId||de.value.length===0,filterable:``,class:`w-full`,onChange:he},{default:B(()=>[(A(!0),i(V,null,I(de.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`,`disabled`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`scenesLocalPlugin.fields.value.title`),prop:`value`},{default:B(()=>[ee.value===`boolean`?(A(),O(L(Vn),{key:0,modelValue:oe.value,"onUpdate:modelValue":t[3]||=e=>oe.value=e},null,8,[`modelValue`])):ee.value===`enum`&&te.value?(A(),O(L(ei),{key:1,modelValue:l.value,"onUpdate:modelValue":t[4]||=e=>l.value=e,placeholder:L(a)(`scenesLocalPlugin.fields.value.placeholder`),name:`value`,class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(re.value,e=>(A(),O(L(ti),{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])):ee.value===`number`?(A(),O(L(Qr),{key:2,modelValue:se.value,"onUpdate:modelValue":t[5]||=e=>se.value=e,placeholder:L(a)(`scenesLocalPlugin.fields.value.placeholder`),name:`value`,min:k.value,max:ie.value,step:ae.value,class:`w-full`},null,8,[`modelValue`,`placeholder`,`min`,`max`,`step`])):(A(),O(L(U),{key:3,modelValue:ce.value,"onUpdate:modelValue":t[6]||=e=>ce.value=e,placeholder:L(a)(`scenesLocalPlugin.fields.value.placeholder`),name:`value`},null,8,[`modelValue`,`placeholder`]))]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`])],64)}}}),iR={"cs-CZ":{plugin:{name:`Lokální scény`,description:`Provádějte scény lokálně ovládáním vlastností zařízení`},actionCard:{device:`Zařízení`,channel:`Kanál`,property:`Vlastnost`,value:`Hodnota`,unknownDevice:`Neznámé zařízení`,unknownChannel:`Neznámý kanál`,unknownProperty:`Neznámá vlastnost`,missingResource:`Tato akce odkazuje na smazané zařízení, kanál nebo vlastnost`},fields:{device:{title:`Zařízení`,placeholder:`Vyberte zařízení`,showAll:`Zobrazit všechna zařízení`,hints:{recommended:`Zobrazení zařízení doporučených pro tuto kategorii scén.`,allDevices:`Vybíráte zařízení mimo doporučenou kategorii.`},groups:{recommended:`Doporučená`,other:`Ostatní zařízení`},validation:{required:`Zařízení je povinné`}},channel:{title:`Kanál`,placeholder:`Vyberte kanál`,noChannels:`Žádné kanály nejsou k dispozici`,validation:{required:`Kanál je povinný`}},property:{title:`Vlastnost`,placeholder:`Vyberte vlastnost`,noProperties:`Žádné zapisovatelné vlastnosti`,validation:{required:`Vlastnost je povinná`}},value:{title:`Hodnota`,placeholder:`Zadejte hodnotu`,validation:{required:`Hodnota je povinná`}}},messages:{noDevices:`Žádná zařízení nejsou k dispozici. Nejprve prosím přidejte zařízení v sekci Zařízení.`}},"de-DE":{plugin:{name:`Lokale Szenen`,description:`Szenen lokal durch Steuerung von Geräteeigenschaften ausführen`},actionCard:{device:`Gerät`,channel:`Kanal`,property:`Eigenschaft`,value:`Wert`,unknownDevice:`Unbekanntes Gerät`,unknownChannel:`Unbekannter Kanal`,unknownProperty:`Unbekannte Eigenschaft`,missingResource:`Diese Aktion verweist auf ein gelöschtes Gerät, einen Kanal oder eine Eigenschaft`},fields:{device:{title:`Gerät`,placeholder:`Gerät auswählen`,showAll:`Alle Geräte anzeigen`,hints:{recommended:`Empfohlene Geräte für diese Szenenkategorie werden angezeigt.`,allDevices:`Sie wählen Geräte außerhalb der empfohlenen Kategorie aus.`},groups:{recommended:`Empfohlen`,other:`Andere Geräte`},validation:{required:`Gerät ist erforderlich`}},channel:{title:`Kanal`,placeholder:`Kanal auswählen`,noChannels:`Keine Kanäle verfügbar`,validation:{required:`Kanal ist erforderlich`}},property:{title:`Eigenschaft`,placeholder:`Eigenschaft auswählen`,noProperties:`Keine beschreibbaren Eigenschaften`,validation:{required:`Eigenschaft ist erforderlich`}},value:{title:`Wert`,placeholder:`Wert eingeben`,validation:{required:`Wert ist erforderlich`}}},messages:{noDevices:`Keine Geräte verfügbar. Bitte fügen Sie zuerst Geräte im Geräte-Bereich hinzu.`}},"en-US":{plugin:{name:`Local Scenes`,description:`Execute scenes locally by controlling device properties`},actionCard:{device:`Device`,channel:`Channel`,property:`Property`,value:`Value`,unknownDevice:`Unknown device`,unknownChannel:`Unknown channel`,unknownProperty:`Unknown property`,missingResource:`This action references a deleted device, channel, or property`},fields:{device:{title:`Device`,placeholder:`Select a device`,showAll:`Show all devices`,hints:{recommended:`Showing devices recommended for this scene category.`,allDevices:`You are selecting devices outside the recommended category.`},groups:{recommended:`Recommended`,other:`Other devices`},validation:{required:`Device is required`}},channel:{title:`Channel`,placeholder:`Select a channel`,noChannels:`No channels available`,validation:{required:`Channel is required`}},property:{title:`Property`,placeholder:`Select a property`,noProperties:`No writable properties`,validation:{required:`Property is required`}},value:{title:`Value`,placeholder:`Enter a value`,validation:{required:`Value is required`}}},messages:{noDevices:`No devices available. Please add devices first in the Devices section.`}},"es-ES":{plugin:{name:`Escenas locales`,description:`Ejecutar escenas localmente controlando las propiedades de los dispositivos`},actionCard:{device:`Dispositivo`,channel:`Canal`,property:`Propiedad`,value:`Valor`,unknownDevice:`Dispositivo desconocido`,unknownChannel:`Canal desconocido`,unknownProperty:`Propiedad desconocida`,missingResource:`Esta acción hace referencia a un dispositivo, canal o propiedad eliminado`},fields:{device:{title:`Dispositivo`,placeholder:`Seleccione un dispositivo`,showAll:`Mostrar todos los dispositivos`,hints:{recommended:`Mostrando dispositivos recomendados para esta categoría de escena.`,allDevices:`Está seleccionando dispositivos fuera de la categoría recomendada.`},groups:{recommended:`Recomendados`,other:`Otros dispositivos`},validation:{required:`El dispositivo es obligatorio`}},channel:{title:`Canal`,placeholder:`Seleccione un canal`,noChannels:`No hay canales disponibles`,validation:{required:`El canal es obligatorio`}},property:{title:`Propiedad`,placeholder:`Seleccione una propiedad`,noProperties:`No hay propiedades editables`,validation:{required:`La propiedad es obligatoria`}},value:{title:`Valor`,placeholder:`Introduzca un valor`,validation:{required:`El valor es obligatorio`}}},messages:{noDevices:`No hay dispositivos disponibles. Por favor, añada dispositivos primero en la sección Dispositivos.`}},"pl-PL":{plugin:{name:`Lokalne sceny`,description:`Wykonuj sceny lokalnie, sterując właściwościami urządzeń`},actionCard:{device:`Urządzenie`,channel:`Kanał`,property:`Właściwość`,value:`Wartość`,unknownDevice:`Nieznane urządzenie`,unknownChannel:`Nieznany kanał`,unknownProperty:`Nieznana właściwość`,missingResource:`Ta akcja odwołuje się do usuniętego urządzenia, kanału lub właściwości`},fields:{device:{title:`Urządzenie`,placeholder:`Wybierz urządzenie`,showAll:`Pokaż wszystkie urządzenia`,hints:{recommended:`Wyświetlanie urządzeń zalecanych dla tej kategorii sceny.`,allDevices:`Wybierasz urządzenia spoza zalecanej kategorii.`},groups:{recommended:`Zalecane`,other:`Inne urządzenia`},validation:{required:`Urządzenie jest wymagane`}},channel:{title:`Kanał`,placeholder:`Wybierz kanał`,noChannels:`Brak dostępnych kanałów`,validation:{required:`Kanał jest wymagany`}},property:{title:`Właściwość`,placeholder:`Wybierz właściwość`,noProperties:`Brak właściwości do zapisu`,validation:{required:`Właściwość jest wymagana`}},value:{title:`Wartość`,placeholder:`Wprowadź wartość`,validation:{required:`Wartość jest wymagana`}}},messages:{noDevices:`Brak dostępnych urządzeń. Najpierw dodaj urządzenia w sekcji Urządzenia.`}},"sk-SK":{plugin:{name:`Lokálne scény`,description:`Vykonávajte scény lokálne ovládaním vlastností zariadení`},actionCard:{device:`Zariadenie`,channel:`Kanál`,property:`Vlastnosť`,value:`Hodnota`,unknownDevice:`Neznáme zariadenie`,unknownChannel:`Neznámy kanál`,unknownProperty:`Neznáma vlastnosť`,missingResource:`Táto akcia odkazuje na odstránené zariadenie, kanál alebo vlastnosť`},fields:{device:{title:`Zariadenie`,placeholder:`Vyberte zariadenie`,showAll:`Zobraziť všetky zariadenia`,hints:{recommended:`Zobrazujú sa zariadenia odporúčané pre túto kategóriu scény.`,allDevices:`Vyberáte zariadenia mimo odporúčanej kategórie.`},groups:{recommended:`Odporúčané`,other:`Ostatné zariadenia`},validation:{required:`Zariadenie je povinné`}},channel:{title:`Kanál`,placeholder:`Vyberte kanál`,noChannels:`Žiadne dostupné kanály`,validation:{required:`Kanál je povinný`}},property:{title:`Vlastnosť`,placeholder:`Vyberte vlastnosť`,noProperties:`Žiadne zapisovateľné vlastnosti`,validation:{required:`Vlastnosť je povinná`}},value:{title:`Hodnota`,placeholder:`Zadajte hodnotu`,validation:{required:`Hodnota je povinná`}}},messages:{noDevices:`Žiadne zariadenia nie sú dostupné. Najprv pridajte zariadenia v sekcii Zariadenia.`}}},aR=K({id:X().uuid().optional(),type:X().trim().nonempty(),deviceId:X().uuid(),channelId:X().uuid().nullable().optional(),propertyId:X().uuid().nullable().optional(),value:Er([X(),q(),J()]),order:q().int().min(0).optional(),enabled:J().default(!0)}),oR=K({id:X().uuid(),type:X().trim().nonempty(),deviceId:X().uuid().optional(),channelId:X().uuid().nullable().optional(),propertyId:X().uuid().nullable().optional(),value:Er([X(),q(),J()]).optional(),order:q().int().min(0).optional(),enabled:J().optional()}),sR=Symbol(`FB-Plugin-ScenesLocal`),cR={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(iR)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{scenesLocalPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(sR,{type:VL,source:`com.fastybird.smart-panel.plugin.scenes-local-plugin`,name:`Local Scenes`,description:`Execute scenes locally by controlling device properties`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:HL,name:`Device Property Action`,components:{sceneActionAddForm:GL,sceneActionEditForm:rR,sceneActionCard:nR},schemas:{sceneActionAddFormSchema:aR,sceneActionEditFormSchema:oR}}],modules:[mc],isCore:!0})}},lR=k({name:`SimulatorConfigForm`,__name:`simulator-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`simulatorPlugin.messages.config.edited`),error:a(`simulatorPlugin.messages.config.notEdited`)}}),f=Vc.map(e=>({value:e,label:a(`simulatorPlugin.fields.config.connectionStateOnStart.options.${e}`)})),p=P({simulationInterval:[{required:!0,message:a(`simulatorPlugin.fields.config.simulationInterval.validation.required`),trigger:`change`},{type:`integer`,message:a(`simulatorPlugin.fields.config.simulationInterval.validation.number`),validator:(e,t)=>typeof t==`number`&&t>=0&&t<=36e5,trigger:`change`}],latitude:[{required:!0,message:a(`simulatorPlugin.fields.config.latitude.validation.required`),trigger:`change`},{type:`number`,message:a(`simulatorPlugin.fields.config.latitude.validation.number`),validator:(e,t)=>typeof t==`number`&&t>=-90&&t<=90,trigger:`change`}],connectionStateOnStart:[{required:!0,message:a(`simulatorPlugin.fields.config.connectionStateOnStart.validation.required`),trigger:`change`}]});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:p,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`simulatorPlugin.headings.aboutPluginStatus`),description:L(a)(`simulatorPlugin.texts.aboutPluginStatus`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`simulatorPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[6]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(a)(`simulatorPlugin.headings.aboutSimulation`),description:L(a)(`simulatorPlugin.texts.aboutSimulation`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`simulatorPlugin.fields.config.updateOnStart.title`),prop:`updateOnStart`,class:`mt-3`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).updateOnStart,"onUpdate:modelValue":t[1]||=e=>L(s).updateOnStart=e,name:`updateOnStart`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`simulatorPlugin.fields.config.simulationInterval.title`),prop:`simulationInterval`},{default:B(()=>[D(L(Qr),{modelValue:L(s).simulationInterval,"onUpdate:modelValue":t[2]||=e=>L(s).simulationInterval=e,min:0,max:36e5,step:1e3,name:`simulationInterval`},null,8,[`modelValue`])]),_:1},8,[`label`]),t[7]||=l(`hr`,null,null,-1),D(L(Q),{type:`info`,title:L(a)(`simulatorPlugin.headings.aboutEnvironment`),description:L(a)(`simulatorPlugin.texts.aboutEnvironment`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`simulatorPlugin.fields.config.latitude.title`),prop:`latitude`,class:`mt-3`},{default:B(()=>[D(L(Qr),{modelValue:L(s).latitude,"onUpdate:modelValue":t[3]||=e=>L(s).latitude=e,min:-90,max:90,step:.1,name:`latitude`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`simulatorPlugin.fields.config.smoothTransitions.title`),prop:`smoothTransitions`,"label-position":`left`},{default:B(()=>[D(L(Vn),{modelValue:L(s).smoothTransitions,"onUpdate:modelValue":t[4]||=e=>L(s).smoothTransitions=e,name:`smoothTransitions`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`simulatorPlugin.fields.config.connectionStateOnStart.title`),prop:`connectionStateOnStart`},{default:B(()=>[D(L(ei),{modelValue:L(s).connectionStateOnStart,"onUpdate:modelValue":t[5]||=e=>L(s).connectionStateOnStart=e,name:`connectionStateOnStart`,placeholder:L(a)(`simulatorPlugin.fields.config.connectionStateOnStart.placeholder`)},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),uR={"cs-CZ":{wizard:{title:`Vygenerovat simulovaná zařízení`,subtitle:`Vytvořte dávku realistických zařízení z jednoho zkontrolovaného nastavení`,breadcrumb:`Generovat zařízení`,steps:{configure:`Nastavení`,review:`Kontrola`,results:`Výsledky`},actions:{generate:`Vygenerovat zařízení`,generateMore:`Vygenerovat další`,retryCategories:`Znovu načíst kategorie`,retryRooms:`Znovu načíst místnosti`,viewDevice:`Zobrazit zařízení`},errors:{roomsLoadFailed:`Místnosti se nepodařilo načíst.`},fields:{category:`Kategorie zařízení`,namePrefix:`Název nebo předpona názvu`,count:`Počet zařízení`,structure:`Generovaná struktura`,requiredChannelsOnly:`Generovat jen povinné kanály`,requiredPropertiesOnly:`Generovat jen povinné vlastnosti`,autoSimulate:`Automaticky simulovat změny hodnot`,simulateInterval:`Interval simulace (ms)`,behaviorMode:`Režim chování`,deviceName:`Název zařízení`},behaviorModes:{default:`Výchozí`,realistic:`Realistický`},review:{title:`Zkontrolovat {count} zařízení`,description:`Generování začne až po potvrzení tohoto úplného seznamu.`,noRoom:`Bez místnosti`},results:{summary:`Vytvořeno: {succeeded}, selhalo: {failed}`,status:`Stav`,details:`Podrobnosti`,created:`Vytvořeno`,failed:`Selhalo`}},headings:{aboutPluginStatus:`Stav pluginu`,aboutSimulation:`Chování simulace`,aboutEnvironment:`Nastavení prostředí`},fields:{devices:{id:{title:`Interní identifikátor`,placeholder:`ID zařízení`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zařízení`},category:{title:`Kategorie`,placeholder:`Kategorie zařízení`,validation:{required:`Vyberte prosím kategorii zařízení`}},name:{title:`Název`,placeholder:`Název zařízení`,validation:{required:`Vyplňte prosím název zařízení`}},description:{title:`Popis`,placeholder:`Popis zařízení`},enabled:{title:`Povoleno`}},config:{enabled:{title:`Povoleno`},updateOnStart:{title:`Simulovat při spuštění služby`},simulationInterval:{title:`Interval automatické simulace (ms)`,placeholder:`Nastavte 0 pro zakázání automatických aktualizací`,validation:{required:`Nastavte prosím interval simulace`,number:`Interval simulace musí být mezi 0 a 3 600 000`}},latitude:{title:`Zeměpisná šířka`,placeholder:`Zeměpisná šířka používaná pro simulace založené na prostředí`,validation:{required:`Nastavte prosím zeměpisnou šířku`,number:`Zeměpisná šířka musí být mezi -90 a 90`}},smoothTransitions:{title:`Plynulé přechody hodnot`},connectionStateOnStart:{title:`Počáteční stav připojení`,placeholder:`Vyberte stav připojení při spuštění`,validation:{required:`Vyberte prosím počáteční stav připojení`},options:{connected:`Připojeno`,disconnected:`Odpojeno`,init:`Inicializace`,ready:`Připraveno`,running:`Běží`,sleeping:`Uspáno`,stopped:`Zastaveno`,lost:`Ztraceno`,alert:`Výstraha`,unknown:`Neznámý`}}}},messages:{config:{edited:`Změny uloženy! Konfigurace simulátoru zařízení byla aktualizována.`,notEdited:`Něco se pokazilo. Aktualizace konfigurace simulátoru zařízení nebyla úspěšná.`}},texts:{aboutPluginStatus:`Povolte nebo zakažte integraci simulátoru zařízení, aby byla simulovaná zařízení dostupná v celém Smart Panelu.`,aboutSimulation:`Nakonfigurujte, jak simulátor automaticky aktualizuje hodnoty. Můžete spustit jednorázový průchod při startu služby nebo spustit opakovanou smyčku aktualizací.`,aboutEnvironment:`Nastavte parametry prostředí používané simulátorem při generování realistických hodnot. Ve výpočtech se používá pouze zeměpisná šířka; zeměpisná délka je ignorována.`}},"de-DE":{wizard:{title:`Simulierte Geräte erzeugen`,subtitle:`Erstellen Sie mehrere realistische Geräte aus einer geprüften Konfiguration`,breadcrumb:`Geräte erzeugen`,steps:{configure:`Konfigurieren`,review:`Prüfen`,results:`Ergebnisse`},actions:{generate:`Geräte erzeugen`,generateMore:`Weitere erzeugen`,retryCategories:`Kategorien erneut laden`,retryRooms:`Räume erneut laden`,viewDevice:`Gerät anzeigen`},errors:{roomsLoadFailed:`Räume konnten nicht geladen werden.`},fields:{category:`Gerätekategorie`,namePrefix:`Name oder Namenspräfix`,count:`Anzahl der Geräte`,structure:`Erzeugte Struktur`,requiredChannelsOnly:`Nur erforderliche Kanäle erzeugen`,requiredPropertiesOnly:`Nur erforderliche Eigenschaften erzeugen`,autoSimulate:`Wertänderungen automatisch simulieren`,simulateInterval:`Simulationsintervall (ms)`,behaviorMode:`Verhaltensmodus`,deviceName:`Gerätename`},behaviorModes:{default:`Standard`,realistic:`Realistisch`},review:{title:`{count} Geräte prüfen`,description:`Die Erzeugung beginnt erst nach Bestätigung dieser vollständigen Liste.`,noRoom:`Kein Raum`},results:{summary:`Erstellt: {succeeded}, fehlgeschlagen: {failed}`,status:`Status`,details:`Einzelheiten`,created:`Erstellt`,failed:`Fehlgeschlagen`}},headings:{aboutPluginStatus:`Plugin-Status`,aboutSimulation:`Simulationsverhalten`,aboutEnvironment:`Umgebungseinstellungen`},fields:{devices:{id:{title:`Interner Bezeichner`,placeholder:`Geräte-ID`},identifier:{title:`Systembezeichner`,placeholder:`Geräte-Systembezeichner`},category:{title:`Kategorie`,placeholder:`Gerätekategorie`,validation:{required:`Bitte wählen Sie eine Gerätekategorie`}},name:{title:`Name`,placeholder:`Gerätename`,validation:{required:`Bitte geben Sie den Gerätenamen ein`}},description:{title:`Beschreibung`,placeholder:`Gerätebeschreibung`},enabled:{title:`Aktiviert`}},config:{enabled:{title:`Aktiviert`},updateOnStart:{title:`Bei Dienststart simulieren`},simulationInterval:{title:`Automatisches Simulationsintervall (ms)`,placeholder:`0 setzen, um automatische Aktualisierungen zu deaktivieren`,validation:{required:`Bitte legen Sie das Simulationsintervall fest`,number:`Simulationsintervall muss zwischen 0 und 3 600 000 liegen`}},latitude:{title:`Breitengrad`,placeholder:`Breitengrad für umgebungsbasierte Simulationen`,validation:{required:`Bitte legen Sie den Breitengrad fest`,number:`Breitengrad muss zwischen -90 und 90 liegen`}},smoothTransitions:{title:`Sanfte Wertübergänge`},connectionStateOnStart:{title:`Anfänglicher Verbindungsstatus`,placeholder:`Wählen Sie den Verbindungsstatus beim Start`,validation:{required:`Bitte wählen Sie den anfänglichen Verbindungsstatus`},options:{connected:`Verbunden`,disconnected:`Getrennt`,init:`Initialisierung`,ready:`Bereit`,running:`Aktiv`,sleeping:`Ruhezustand`,stopped:`Gestoppt`,lost:`Verloren`,alert:`Alarm`,unknown:`Unbekannt`}}}},messages:{config:{edited:`Änderungen gespeichert! Die Gerätesimulator-Konfiguration wurde aktualisiert.`,notEdited:`Etwas ist schiefgelaufen. Die Aktualisierung der Gerätesimulator-Konfiguration war nicht erfolgreich.`}},texts:{aboutPluginStatus:`Aktivieren oder deaktivieren Sie die Gerätesimulator-Integration, damit simulierte Geräte im gesamten Smart Panel verfügbar sind.`,aboutSimulation:`Konfigurieren Sie, wie der Simulator Werte automatisch aktualisiert. Sie können einen einzelnen Durchlauf beim Dienststart auslösen oder eine wiederkehrende Aktualisierungsschleife ausführen.`,aboutEnvironment:`Legen Sie Umgebungsparameter fest, die der Simulator bei der Generierung realistischer Werte verwendet. Für Berechnungen wird nur der Breitengrad verwendet; der Längengrad wird ignoriert.`}},"en-US":{wizard:{title:`Generate simulated devices`,subtitle:`Create a batch of realistic devices from one reviewed configuration`,breadcrumb:`Generate devices`,steps:{configure:`Configure`,review:`Review`,results:`Results`},actions:{generate:`Generate devices`,generateMore:`Generate more`,retryCategories:`Retry loading categories`,retryRooms:`Retry loading rooms`,viewDevice:`View device`},errors:{roomsLoadFailed:`Rooms could not be loaded.`},fields:{category:`Device category`,namePrefix:`Name or name prefix`,count:`Number of devices`,structure:`Generated structure`,requiredChannelsOnly:`Generate required channels only`,requiredPropertiesOnly:`Generate required properties only`,autoSimulate:`Automatically simulate value changes`,simulateInterval:`Simulation interval (ms)`,behaviorMode:`Behaviour mode`,deviceName:`Device name`},behaviorModes:{default:`Default`,realistic:`Realistic`},review:{title:`Review {count} devices`,description:`Generation starts only after you confirm this complete list.`,noRoom:`No room`},results:{summary:`Created: {succeeded}, failed: {failed}`,status:`Status`,details:`Details`,created:`Created`,failed:`Failed`}},headings:{aboutPluginStatus:`Plugin status`,aboutSimulation:`Simulation behaviour`,aboutEnvironment:`Environment settings`},fields:{devices:{id:{title:`Internal identifier`,placeholder:`Device id`},identifier:{title:`System identifier`,placeholder:`Device system identifier`},category:{title:`Category`,placeholder:`Device category`,validation:{required:`Please select device category`}},name:{title:`Name`,placeholder:`Device name`,validation:{required:`Please fill in device name`}},description:{title:`Description`,placeholder:`Device description`},enabled:{title:`Enabled`}},config:{enabled:{title:`Enabled`},updateOnStart:{title:`Simulate on service start`},simulationInterval:{title:`Auto simulation interval (ms)`,placeholder:`Set 0 to disable automatic updates`,validation:{required:`Please set simulation interval`,number:`Simulation interval must be between 0 and 3 600 000`}},latitude:{title:`Latitude`,placeholder:`Latitude used for environment-based simulations`,validation:{required:`Please set latitude`,number:`Latitude must be between -90 and 90`}},smoothTransitions:{title:`Smooth value transitions`},connectionStateOnStart:{title:`Initial connection state`,placeholder:`Choose the connection state to set on startup`,validation:{required:`Please select initial connection state`},options:{connected:`Connected`,disconnected:`Disconnected`,init:`Initializing`,ready:`Ready`,running:`Running`,sleeping:`Sleeping`,stopped:`Stopped`,lost:`Lost`,alert:`Alert`,unknown:`Unknown`}}}},messages:{config:{edited:`Changes saved! The device simulator configuration has been updated.`,notEdited:`Something went wrong. Device simulator configuration update was not successful.`}},texts:{aboutPluginStatus:`Enable or disable the Device Simulator integration so that simulated devices are available across the Smart Panel.`,aboutSimulation:`Configure how the simulator updates values automatically. You can trigger a single pass on service start or run a recurring update loop.`,aboutEnvironment:`Set environmental parameters used by the simulator when generating realistic values. Only latitude is used in calculations; longitude is ignored.`}},"es-ES":{wizard:{title:`Generar dispositivos simulados`,subtitle:`Cree varios dispositivos realistas desde una configuración revisada`,breadcrumb:`Generar dispositivos`,steps:{configure:`Configurar`,review:`Revisar`,results:`Resultados`},actions:{generate:`Generar dispositivos`,generateMore:`Generar más`,retryCategories:`Reintentar cargar categorías`,retryRooms:`Reintentar cargar habitaciones`,viewDevice:`Ver dispositivo`},errors:{roomsLoadFailed:`No se pudieron cargar las habitaciones.`},fields:{category:`Categoría del dispositivo`,namePrefix:`Nombre o prefijo`,count:`Número de dispositivos`,structure:`Estructura generada`,requiredChannelsOnly:`Generar solo canales obligatorios`,requiredPropertiesOnly:`Generar solo propiedades obligatorias`,autoSimulate:`Simular cambios de valor automáticamente`,simulateInterval:`Intervalo de simulación (ms)`,behaviorMode:`Modo de comportamiento`,deviceName:`Nombre del dispositivo`},behaviorModes:{default:`Predeterminado`,realistic:`Realista`},review:{title:`Revisar {count} dispositivos`,description:`La generación comienza tras confirmar esta lista completa.`,noRoom:`Sin habitación`},results:{summary:`Creados: {succeeded}, fallidos: {failed}`,status:`Estado`,details:`Detalles`,created:`Creado`,failed:`Fallido`}},headings:{aboutPluginStatus:`Estado del plugin`,aboutSimulation:`Comportamiento de la simulación`,aboutEnvironment:`Configuración del entorno`},fields:{devices:{id:{title:`Identificador interno`,placeholder:`ID del dispositivo`},identifier:{title:`Identificador del sistema`,placeholder:`Identificador del sistema del dispositivo`},category:{title:`Categoría`,placeholder:`Categoría del dispositivo`,validation:{required:`Por favor, seleccione la categoría del dispositivo`}},name:{title:`Nombre`,placeholder:`Nombre del dispositivo`,validation:{required:`Por favor, introduzca el nombre del dispositivo`}},description:{title:`Descripción`,placeholder:`Descripción del dispositivo`},enabled:{title:`Habilitado`}},config:{enabled:{title:`Habilitado`},updateOnStart:{title:`Simular al iniciar el servicio`},simulationInterval:{title:`Intervalo de simulación automática (ms)`,placeholder:`Establezca 0 para desactivar las actualizaciones automáticas`,validation:{required:`Por favor, establezca el intervalo de simulación`,number:`El intervalo de simulación debe estar entre 0 y 3 600 000`}},latitude:{title:`Latitud`,placeholder:`Latitud utilizada para simulaciones basadas en el entorno`,validation:{required:`Por favor, establezca la latitud`,number:`La latitud debe estar entre -90 y 90`}},smoothTransitions:{title:`Transiciones suaves de valores`},connectionStateOnStart:{title:`Estado de conexión inicial`,placeholder:`Elija el estado de conexión al iniciar`,validation:{required:`Por favor, seleccione el estado de conexión inicial`},options:{connected:`Conectado`,disconnected:`Desconectado`,init:`Inicializando`,ready:`Listo`,running:`En ejecución`,sleeping:`En reposo`,stopped:`Detenido`,lost:`Perdido`,alert:`Alerta`,unknown:`Desconocido`}}}},messages:{config:{edited:`¡Cambios guardados! La configuración del simulador de dispositivos se ha actualizado.`,notEdited:`Algo salió mal. La actualización de la configuración del simulador de dispositivos no fue exitosa.`}},texts:{aboutPluginStatus:`Habilite o deshabilite la integración del simulador de dispositivos para que los dispositivos simulados estén disponibles en todo el panel inteligente.`,aboutSimulation:`Configure cómo el simulador actualiza los valores automáticamente. Puede activar una única pasada al iniciar el servicio o ejecutar un ciclo de actualización recurrente.`,aboutEnvironment:`Establezca los parámetros ambientales utilizados por el simulador al generar valores realistas. Solo se utiliza la latitud en los cálculos; la longitud se ignora.`}},"pl-PL":{wizard:{title:`Generuj symulowane urządzenia`,subtitle:`Utwórz zestaw realistycznych urządzeń z jednej sprawdzonej konfiguracji`,breadcrumb:`Generuj urządzenia`,steps:{configure:`Konfiguracja`,review:`Przegląd`,results:`Wyniki`},actions:{generate:`Generuj urządzenia`,generateMore:`Generuj więcej`,retryCategories:`Ponów ładowanie kategorii`,retryRooms:`Ponów ładowanie pomieszczeń`,viewDevice:`Pokaż urządzenie`},errors:{roomsLoadFailed:`Nie udało się załadować pomieszczeń.`},fields:{category:`Kategoria urządzenia`,namePrefix:`Nazwa lub prefiks nazwy`,count:`Liczba urządzeń`,structure:`Generowana struktura`,requiredChannelsOnly:`Generuj tylko wymagane kanały`,requiredPropertiesOnly:`Generuj tylko wymagane właściwości`,autoSimulate:`Automatycznie symuluj zmiany wartości`,simulateInterval:`Interwał symulacji (ms)`,behaviorMode:`Tryb zachowania`,deviceName:`Nazwa urządzenia`},behaviorModes:{default:`Domyślny`,realistic:`Realistyczny`},review:{title:`Sprawdź {count} urządzeń`,description:`Generowanie rozpocznie się po zatwierdzeniu pełnej listy.`,noRoom:`Bez pomieszczenia`},results:{summary:`Utworzono: {succeeded}, niepowodzenia: {failed}`,status:`Status`,details:`Szczegóły`,created:`Utworzono`,failed:`Niepowodzenie`}},headings:{aboutPluginStatus:`Status wtyczki`,aboutSimulation:`Zachowanie symulacji`,aboutEnvironment:`Ustawienia środowiska`},fields:{devices:{id:{title:`Identyfikator wewnętrzny`,placeholder:`ID urządzenia`},identifier:{title:`Identyfikator systemowy`,placeholder:`Identyfikator systemowy urządzenia`},category:{title:`Kategoria`,placeholder:`Kategoria urządzenia`,validation:{required:`Wybierz kategorię urządzenia`}},name:{title:`Nazwa`,placeholder:`Nazwa urządzenia`,validation:{required:`Wprowadź nazwę urządzenia`}},description:{title:`Opis`,placeholder:`Opis urządzenia`},enabled:{title:`Włączone`}},config:{enabled:{title:`Włączony`},updateOnStart:{title:`Symuluj przy starcie usługi`},simulationInterval:{title:`Interwał automatycznej symulacji (ms)`,placeholder:`Ustaw 0, aby wyłączyć automatyczne aktualizacje`,validation:{required:`Ustaw interwał symulacji`,number:`Interwał symulacji musi być między 0 a 3 600 000`}},latitude:{title:`Szerokość geograficzna`,placeholder:`Szerokość geograficzna używana do symulacji opartych na środowisku`,validation:{required:`Ustaw szerokość geograficzną`,number:`Szerokość geograficzna musi być między -90 a 90`}},smoothTransitions:{title:`Płynne przejścia wartości`},connectionStateOnStart:{title:`Początkowy stan połączenia`,placeholder:`Wybierz stan połączenia ustawiany przy starcie`,validation:{required:`Wybierz początkowy stan połączenia`},options:{connected:`Połączony`,disconnected:`Rozłączony`,init:`Inicjalizacja`,ready:`Gotowy`,running:`Uruchomiony`,sleeping:`Uśpiony`,stopped:`Zatrzymany`,lost:`Utracony`,alert:`Alarm`,unknown:`Nieznany`}}}},messages:{config:{edited:`Zmiany zapisane! Konfiguracja symulatora urządzeń została zaktualizowana.`,notEdited:`Coś poszło nie tak. Aktualizacja konfiguracji symulatora urządzeń nie powiodła się.`}},texts:{aboutPluginStatus:`Włącz lub wyłącz integrację symulatora urządzeń, aby symulowane urządzenia były dostępne w Smart Panel.`,aboutSimulation:`Skonfiguruj sposób automatycznej aktualizacji wartości przez symulator. Możesz uruchomić jednorazowy przebieg przy starcie usługi lub uruchomić cykliczną pętlę aktualizacji.`,aboutEnvironment:`Ustaw parametry środowiskowe używane przez symulator do generowania realistycznych wartości. W obliczeniach używana jest tylko szerokość geograficzna; długość geograficzna jest ignorowana.`}},"sk-SK":{wizard:{title:`Vygenerovať simulované zariadenia`,subtitle:`Vytvorte dávku realistických zariadení z jedného skontrolovaného nastavenia`,breadcrumb:`Generovať zariadenia`,steps:{configure:`Nastavenie`,review:`Kontrola`,results:`Výsledky`},actions:{generate:`Vygenerovať zariadenia`,generateMore:`Vygenerovať ďalšie`,retryCategories:`Znovu načítať kategórie`,retryRooms:`Znovu načítať miestnosti`,viewDevice:`Zobraziť zariadenie`},errors:{roomsLoadFailed:`Miestnosti sa nepodarilo načítať.`},fields:{category:`Kategória zariadenia`,namePrefix:`Názov alebo predpona názvu`,count:`Počet zariadení`,structure:`Generovaná štruktúra`,requiredChannelsOnly:`Generovať len povinné kanály`,requiredPropertiesOnly:`Generovať len povinné vlastnosti`,autoSimulate:`Automaticky simulovať zmeny hodnôt`,simulateInterval:`Interval simulácie (ms)`,behaviorMode:`Režim správania`,deviceName:`Názov zariadenia`},behaviorModes:{default:`Predvolený`,realistic:`Realistický`},review:{title:`Skontrolovať {count} zariadení`,description:`Generovanie začne až po potvrdení tohto úplného zoznamu.`,noRoom:`Bez miestnosti`},results:{summary:`Vytvorené: {succeeded}, zlyhania: {failed}`,status:`Stav`,details:`Podrobnosti`,created:`Vytvorené`,failed:`Zlyhalo`}},headings:{aboutPluginStatus:`Stav pluginu`,aboutSimulation:`Správanie simulácie`,aboutEnvironment:`Nastavenia prostredia`},fields:{devices:{id:{title:`Interný identifikátor`,placeholder:`ID zariadenia`},identifier:{title:`Systémový identifikátor`,placeholder:`Systémový identifikátor zariadenia`},category:{title:`Kategória`,placeholder:`Kategória zariadenia`,validation:{required:`Prosím vyberte kategóriu zariadenia`}},name:{title:`Názov`,placeholder:`Názov zariadenia`,validation:{required:`Prosím vyplňte názov zariadenia`}},description:{title:`Popis`,placeholder:`Popis zariadenia`},enabled:{title:`Povolené`}},config:{enabled:{title:`Povolené`},updateOnStart:{title:`Simulovať pri štarte služby`},simulationInterval:{title:`Interval automatickej simulácie (ms)`,placeholder:`Nastavte 0 na zakázanie automatických aktualizácií`,validation:{required:`Prosím nastavte interval simulácie`,number:`Interval simulácie musí byť medzi 0 a 3 600 000`}},latitude:{title:`Zemepisná šírka`,placeholder:`Zemepisná šírka používaná pre simulácie založené na prostredí`,validation:{required:`Prosím nastavte zemepisnú šírku`,number:`Zemepisná šírka musí byť medzi -90 a 90`}},smoothTransitions:{title:`Plynulé prechody hodnôt`},connectionStateOnStart:{title:`Počiatočný stav pripojenia`,placeholder:`Vyberte stav pripojenia pri štarte`,validation:{required:`Prosím vyberte počiatočný stav pripojenia`},options:{connected:`Pripojený`,disconnected:`Odpojený`,init:`Inicializácia`,ready:`Pripravený`,running:`Beží`,sleeping:`Spí`,stopped:`Zastavený`,lost:`Stratený`,alert:`Výstraha`,unknown:`Neznámy`}}}},messages:{config:{edited:`Zmeny uložené! Konfigurácia simulátora zariadení bola aktualizovaná.`,notEdited:`Niečo sa pokazilo. Aktualizácia konfigurácie simulátora zariadení nebola úspešná.`}},texts:{aboutPluginStatus:`Povoľte alebo zakážte integráciu Simulátora zariadení, aby boli simulované zariadenia dostupné v celom Smart Paneli.`,aboutSimulation:`Nakonfigurujte, ako simulátor automaticky aktualizuje hodnoty. Môžete spustiť jednorazový prechod pri štarte služby alebo bežať opakovanú aktualizačnú slučku.`,aboutEnvironment:`Nastavte parametre prostredia používané simulátorom pri generovaní realistických hodnôt. V výpočtoch sa používa iba zemepisná šírka; zemepisná dĺžka je ignorovaná.`}}},dR=[{path:`simulator/wizard`,name:Uc.WIZARD,component:()=>hr(()=>import(`./view-simulator-device-wizard-DO1CpTZ7.js`),__vite__mapDeps([179,2,3,4,11,5,6,68,14,15,16,17,18,19,65,20,21,7,51,33,40,56,102,78,146,147,49,66,38,23,8,42,67,69,22,32,24,70,71,53,52,72,73,74,75,9,59,76,25,77,79,132,133,55,106,107,134,109,110,103,60,61,80,148,123,137,180])),props:!0,meta:{guards:{authenticated:!0,roles:[H.admin,H.owner]},title:`Generate simulated devices`,icon:`mdi:test-tube`}}],fR=Ki.extend({updateOnStart:J().default(!1),simulationInterval:Dt().int().min(0).max(36e5),latitude:Dt().min(-90).max(90),smoothTransitions:J().default(!0),connectionStateOnStart:ir(Vc).default(`connected`)}),pR=xs,mR=ws,hR=os;Zo.and(K({type:Y(Bc)})),rs.and(K({type:Y(Bc)})),Qo.and(K({type:Y(Bc)}));var gR=ns;cs.and(K({type:Y(Bc)})),us.and(K({type:Y(Bc)})),Xo.and(K({type:Y(Bc)}));var _R=Wi.extend({updateOnStart:J(),simulationInterval:q().min(0).max(36e5),latitude:q().min(-90).max(90),smoothTransitions:J(),connectionStateOnStart:ir(Vc).optional()}),vR=Zi.and(K({type:Y(Hc),update_on_start:J().optional(),simulation_interval:q().min(0).max(36e5).optional(),latitude:q().min(-90).max(90).optional(),smooth_transitions:J().optional(),connection_state_on_start:ir(Vc).optional()}));Ri.and(K({type:Y(Hc),update_on_start:J(),simulation_interval:q(),latitude:q(),smooth_transitions:J(),connection_state_on_start:ir(Vc).optional()}));var yR=Yo,bR=ss.and(K({type:Y(Bc)})),xR=as.and(K({type:Y(Bc)}));ts.and(K({type:Y(Bc),auto_simulate:J(),simulate_interval:q(),behavior_mode:G(wt)}));var SR=Symbol(`FB-Plugin-Simulator`),CR={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(uR)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{simulatorPlugin:n});t.i18n.global.setLocaleMessage(e,r)}let r=t.router.getRoutes().find(e=>e.name===Jo.DEVICES);r&&dR.forEach(e=>{t.router.addRoute(Jo.DEVICES,e)}),n.addPlugin(SR,{type:Hc,source:`com.fastybird.smart-panel.plugin.simulator`,name:`Simulator`,description:`Create virtual devices, spaces, and scenes for testing and development without physical hardware`,links:{documentation:`https://smart-panel.fastybird.com/docs`,devDocumentation:`https://smart-panel.fastybird.com/docs`,bugsTracking:`https://github.com/FastyBird/smart-panel/issues`},elements:[{type:Ea,components:{pluginConfigEditForm:lR},schemas:{pluginConfigSchema:_R,pluginConfigEditFormSchema:fR,pluginConfigUpdateReqSchema:vR},modules:[ka]},{type:Bc,schemas:{deviceSchema:yR,deviceAddFormSchema:pR,deviceEditFormSchema:mR,deviceCreateReqSchema:bR,deviceUpdateReqSchema:xR,channelSchema:gR,channelPropertySchema:hR}}],...r?{routes:{wizard:{label:`simulatorPlugin.wizard.title`,icon:`mdi:test-tube`,to:{name:Uc.WIZARD},testId:`simulator-device-wizard`}}}:{},modules:[qo,ka],isCore:!1})}},wR={"cs-CZ":{plugin:{name:`Prostory domácí ovládání`,description:`Přidává fyzické místnosti a zóny s ovládáním osvětlení, klimatu, stínění, senzorů a médií.`},typeLabels:{room:`Místnost`,zone:`Zóna`},lightingRoles:{main:`Hlavní`,task:`Pracovní`,ambient:`Ambientní`,accent:`Akcentové`,night:`Noční`,other:`Ostatní`,hidden:`Skryté`,unassigned:`Nepřiřazeno`,descriptions:{main:`Hlavní osvětlení prostoru, obvykle stropní nebo centrální svítidla pro obecné osvětlení.`,task:`Zaměřené osvětlení pro specifické činnosti jako čtení, vaření nebo práci.`,ambient:`Jemné pozadí osvětlení pro vytvoření atmosféry a komfortu.`,accent:`Dekorativní osvětlení pro zvýraznění prvků nebo vytvoření vizuálního efektu.`,night:`Slabé osvětlení pro noční navigaci a bezpečnost.`,other:`Osvětlení, které nespadá do standardních kategorií.`,hidden:`Skrytá světla jsou vyloučena z panelového rozhraní a ovládání na základě záměrů.`}},climateRoles:{heating_only:`Pouze topení`,cooling_only:`Pouze chlazení`,auto:`Automaticky`,auxiliary:`Pomocné`,sensor:`Senzor`,hidden:`Skryté`,unassigned:`Nepřiřazeno`,descriptions:{heating_only:`Zařízení je používáno pouze pro topení v klimatické doméně.`,cooling_only:`Zařízení je používáno pouze pro chlazení v klimatické doméně.`,auto:`Zařízení může být automaticky použito pro topení i chlazení.`,auxiliary:`Pomocná klimatická zařízení jako odvlhčovače, zvlhčovače, čističky vzduchu a ventilátory.`,sensor:`Klimatický senzor poskytující hodnoty (teplota, vlhkost, kvalita vzduchu atd.) pro prostor.`,hidden:`Skrytá zařízení jsou vyloučena z rozhraní klimatické domény a ovládání.`}},coversRoles:{primary:`Primární`,blackout:`Zatemňovací`,sheer:`Záclonová`,outdoor:`Venkovní`,hidden:`Skryté`,unassigned:`Nepřiřazeno`,descriptions:{primary:`Hlavní okenní roleta prostoru, obvykle používaná pro obecné soukromí a regulaci světla.`,blackout:`Zatemňovací rolety navržené pro úplnou tmu, ideální pro ložnice nebo mediální místnosti.`,sheer:`Poloprůhledné záclony zajišťující soukromí a zároveň propouštějící přirozené světlo.`,outdoor:`Vnější žaluzie, markýzy nebo pergolové kryty pro venkovní ochranu.`,hidden:`Skryté rolety jsou vyloučeny z panelového rozhraní a ovládání na základě záměrů.`}},sensorRoles:{environment:`Prostředí`,safety:`Bezpečnost`,security:`Zabezpečení`,air_quality:`Kvalita vzduchu`,energy:`Energie`,other:`Ostatní`,hidden:`Skryté`,descriptions:{environment:`Senzory prostředí jako teplota, vlhkost, tlak nebo úroveň osvětlení.`,safety:`Bezpečnostní senzory jako detektory kouře, plynu, úniku vody nebo oxidu uhelnatého.`,security:`Zabezpečovací senzory a senzory přítomnosti jako pohybové, obsazenostní a kontaktní senzory.`,air_quality:`Senzory kvality vzduchu včetně CO2, VOC, pevných částic a dalších znečišťujících látek.`,energy:`Senzory pro monitoring energie jako spotřeba elektřiny nebo energie.`,other:`Senzory, které nespadají do specifické kategorie.`,hidden:`Skryté senzory jsou vyloučeny z rozhraní.`},categories:{temperature:`Teplota`,humidity:`Vlhkost`,pressure:`Tlak`,illuminance:`Osvětlení`,smoke:`Kouř`,gas:`Plyn`,carbon_monoxide:`Oxid uhelnatý`,carbon_dioxide:`Oxid uhličitý`,leak:`Únik`,motion:`Pohyb`,occupancy:`Obsazenost`,contact:`Kontakt`,air_quality:`Kvalita vzduchu`,air_particulate:`Pevné částice`,nitrogen_dioxide:`Oxid dusičitý`,ozone:`Ozón`,sulphur_dioxide:`Oxid siřičitý`,volatile_organic_compounds:`Těkavé organické sloučeniny`,electrical_energy:`Energie`,electrical_generation:`Výroba`,electrical_power:`Výkon`,battery:`Baterie`}},media:{endpointTypes:{display:`Displej`,audio_output:`Zvukový výstup`,source:`Zdroj`,remote_target:`Vzdálený cíl`},capabilities:{power:`Napájení`,input:`Vstup`,volume:`Hlasitost`,playback:`Přehrávání`,track:`Stopa`,remote:`Dálkové ovládání`,mute:`Ztlumení`},activityLabels:{watch:`Sledování`,listen:`Poslech`,gaming:`Hraní`,background:`Pozadí`,off:`Vypnuto`},activities:{loading:`Načítání konfigurace médií...`,description:`Přiřaďte displej, zvuk, zdroj a dálkově ovládaná zařízení ke každé mediální aktivitě. Změny se ukládají automaticky.`,applyDefaults:`Použít výchozí`,applyDefaultsHint:`Automaticky přiřadí koncové body na základě typů zařízení a jejich schopností`,defaultsApplied:`Výchozí vazby byly použity.`,defaultsFailed:`Nepodařilo se použít výchozí vazby.`,selectPrompt:`Vyberte aktivitu ze seznamu pro konfiguraci jejích vazeb.`,selectEndpoint:`Vyberte koncový bod...`,save:`Uložit`,reset:`Resetovat`,saveError:`Nepodařilo se uložit vazbu`,savedSuccessfully:`Vazba byla úspěšně uložena.`,slots:{display:`Displej`,audio:`Zvukový výstup`,source:`Zdroj`,remote:`Vzdálený cíl`},overrides:{displayInput:`Preset vstupu displeje`,displayInputPlaceholder:`např. HDMI1, Apps`,audioInput:`Preset zvukového vstupu`,audioInputPlaceholder:`např. HDMI1, ARC`,sourceInput:`Preset vstupu zdroje`,sourceInputPlaceholder:`např. HDMI1, Apps`,audioVolume:`Preset hlasitosti zvuku`},mediaInputSources:{hdmi1:`Vstup HDMI 1`,hdmi2:`Vstup HDMI 2`,hdmi3:`Vstup HDMI 3`,hdmi4:`Vstup HDMI 4`,hdmi5:`Vstup HDMI 5`,hdmi6:`Vstup HDMI 6`,arc:`OBLOUK`,earc:`eARC`,tv:`TV`,cable:`Kabel`,satellite:`Satelit`,antenna:`Anténa`,av1:`Vstup AV 1`,av2:`Vstup AV 2`,component:`Komponent`,vga:`VGA`,dvi:`DVI`,usb:`USB`,bluetooth:`Bluetooth`,wifi:`Wi-Fi`,airplay:`AirPlay`,cast:`Chromecast`,dlna:`DLNA`,miracast:`Miracast`,app_netflix:`Netflix`,app_youtube:`YouTube`,app_spotify:`Spotify`,app_prime_video:`Prime Video`,app_disney_plus:`Disney+`,app_hbo_max:`HBO Max`,app_apple_tv:`Apple TV`,app_plex:`Plex`,app_kodi:`Kodi`,other:`Ostatní`},status:{configured:`Nakonfigurováno`,incomplete:`Neúplné`,unconfigured:`Nenastaveno`},run:`Spustit`,deactivate:`Deaktivovat`,refreshStatus:`Obnovit stav`,rerun:`Spustit znovu`,copyDebugJson:`Kopírovat ladící JSON`,copiedToClipboard:`Ladící JSON byl zkopírován do schránky.`,activateSuccess:`Aktivita byla úspěšně aktivována.`,activateFailed:`Nepodařilo se aktivovat aktivitu.`,deactivateSuccess:`Aktivita byla deaktivována.`,deactivateFailed:`Nepodařilo se deaktivovat aktivitu.`,fetchFailed:`Nepodařilo se obnovit stav aktivity.`,preview:`Náhled`,previewFailed:`Nepodařilo se zobrazit náhled aktivity.`,previewDialog:{title:`Náhled plánu provedení`,resolvedDevices:`Rozpoznaná zařízení`,executionPlan:`Plán provedení`,step:`Krok`,action:`Akce`,device:`Zařízení`,critical:`Kritické`,criticalYes:`Kritické`,criticalNo:`Volitelné`,warnings:`Varování a přeskočené kroky`,noSteps:`V plánu nejsou žádné kroky provedení.`,close:`Zavřít`},activePanel:{title:`Aktivní stav`,currentActivity:`Aktuální aktivita`,none:`Žádná`,state:`Stav`,activatedAt:`Aktivováno v`,updatedAt:`Aktualizováno v`,resolvedDevices:`Rozpoznaná zařízení`,display:`Displej`,audio:`Zvuk`,source:`Zdroj`,remote:`Dálkové ovládání`},failures:{title:`Selhání`,total:`Celkem kroků`,succeeded:`Úspěšných`,failed:`Neúspěšných`,stepIndex:`Krok`,device:`Zařízení`,property:`Vlastnost`,reason:`Důvod`},activationState:{activating:`Aktivace`,active:`Aktivní`,failed:`Selhalo`,deactivated:`Deaktivováno`}}},dialogs:{lightingRoles:{title:`Upravit role osvětlení`},climateRoles:{title:`Upravit role klimatu`},coversRoles:{title:`Upravit role rolet`},sensorRoles:{title:`Upravit role senzorů`},mediaActivities:{title:`Upravit mediální aktivity`}},fields:{spaces:{lightingRoles:{title:`Role osvětlení`,description:`Přiřaďte role světlům, aby panel rozuměl, jak se každé světlo obvykle používá (Práce, Relax, Noc)`,noLights:`V tomto prostoru nebyla nalezena žádná světla`,role:{title:`Role`,placeholder:`Vyberte roli`},applyDefaults:`Použít výchozí`,applyDefaultsHint:`Nastaví první světlo jako Hlavní, ostatní jako Ambientní`},climateRoles:{title:`Role klimatu`,description:`Přiřaďte role klimatickým zařízením, aby panel rozuměl, jak každé zařízení ovládá teplotu a kvalitu vzduchu`,noDevices:`V tomto prostoru nebyla nalezena žádná klimatická zařízení`,role:{title:`Role`,placeholder:`Vyberte roli`},applyDefaults:`Použít výchozí`,applyDefaultsHint:`Automaticky přiřadí role na základě typu zařízení`},coversRoles:{title:`Role rolet`,description:`Přiřaďte role okenním roletám, aby panel rozuměl, jak se každá roleta používá (primární, zatemňovací, záclonová)`,noCovers:`V tomto prostoru nebyly nalezeny žádné okenní rolety`,role:{title:`Role`,placeholder:`Vyberte roli`},applyDefaults:`Použít výchozí`,applyDefaultsHint:`Nastaví první roletu jako Primární, ostatní na základě typu`},sensorRoles:{title:`Role senzorů`,description:`Přiřaďte role kanálům senzorů, aby panel mohl seskupit hodnoty prostředí, bezpečnosti, zabezpečení, kvality vzduchu a energie.`,noSensors:`V tomto prostoru nebyly nalezeny žádné senzory`,channel:{title:`Kanál`},role:{title:`Role`,placeholder:`Vyberte roli`},applyDefaults:`Použít výchozí`,applyDefaultsHint:`Automaticky přiřadí role na základě kategorie kanálu senzoru`}}},detail:{lightingRoles:{title:`Role osvětlení`,lightsAssigned:`Přiřazená světla`,noRolesAssigned:`Zatím nejsou přiřazeny žádné role`},climateRoles:{title:`Role klimatu`,devicesAssigned:`Přiřazená zařízení`,noRolesAssigned:`Zatím nejsou přiřazeny žádné role`},coversRoles:{title:`Role rolet`,coversAssigned:`Přiřazené rolety`,noRolesAssigned:`Zatím nejsou přiřazeny žádné role`},sensorRoles:{title:`Role senzorů`,sensorsAssigned:`Přiřazené senzory`,noRolesAssigned:`Zatím nejsou přiřazeny žádné role`},mediaActivities:{title:`Mediální aktivity`,noActivities:`Zatím nejsou nakonfigurovány žádné aktivity`},domains:{notConfigured:`Nenastaveno`,lighting:{title:`Osvětlení`,description:`Nastavte, jak se v tomto prostoru používají světla — hlavní, pracovní, ambientní, akcentové a noční role osvětlení.`},climate:{title:`Klima`,description:`Přiřaďte role vytápění, chlazení a senzorů ke klimatickým zařízením v tomto prostoru.`},covers:{title:`Žaluzie`,description:`Nastavte role okenních krytin — primární, zatemňovací, záclonové a venkovní žaluzie.`},sensor:{title:`Senzory`,description:`Seskupte senzorové kanály podle účelu — prostředí, bezpečnost, zabezpečení, kvalita vzduchu a energie.`},media:{title:`Média`,description:`Definujte mediální aktivity jako sledování, poslech a hraní her se směrováním koncových bodů zařízení.`}},scenes:{loading:`Načítání scén...`,name:`Název scény`,category:`Kategorie`,status:`Stav`,enabled:`Povoleno`,disabled:`Zakázáno`,remove:`Odebrat`,removeHeading:`Odebrat scénu z prostoru`,reassign:`Přeřadit`,reassigned:`Scéna "{name}" byla úspěšně přeřazena.`,selectScene:`Vyberte scénu k přidání`,selectSpace:`Vyberte prostor pro scénu`,searchPlaceholder:`Hledat scény...`,confirmRemove:`Odebrat scénu "{name}" z tohoto prostoru?`,assignedSpace:`Přiřazený prostor`,noAvailable:`Nejsou k dispozici žádné scény k přidání`,noFilteredScenes:`Žádné scény neodpovídají vašemu hledání`,assigned:`Scéna "{name}" byla přiřazena k tomuto prostoru.`,removed:`Scéna "{name}" byla odebrána z tohoto prostoru.`,removeCanceled:`Odebrání scény bylo zrušeno.`,empty:`K tomuto prostoru nejsou přiřazeny žádné scény`,assign:`Přiřadit`}},edit:{sections:{smartOverrides:{lightingRoles:`Role osvětlení`,climateRoles:`Role klimatu`,coversRoles:`Role rolet`,sensorRoles:`Role senzorů`}}}},"de-DE":{plugin:{name:`Heimsteuerungs-Räume`,description:`Fügt physische Räume und Zonen mit Steuerung für Beleuchtung, Klima, Beschattung, Sensoren und Medien hinzu.`},typeLabels:{room:`Raum`,zone:`Zone`},lightingRoles:{main:`Haupt`,task:`Aufgabe`,ambient:`Ambiente`,accent:`Akzent`,night:`Nacht`,other:`Sonstige`,hidden:`Verborgen`,unassigned:`Nicht zugewiesen`,descriptions:{main:`Primäre Beleuchtung für den Bereich, typischerweise Decken- oder zentrale Leuchten für die allgemeine Beleuchtung.`,task:`Gezielte Beleuchtung für bestimmte Aktivitäten wie Lesen, Kochen oder Arbeiten.`,ambient:`Sanfte Hintergrundbeleuchtung zur Schaffung von Atmosphäre und Behaglichkeit.`,accent:`Dekorative Beleuchtung zur Hervorhebung von Merkmalen oder zur Schaffung visueller Akzente.`,night:`Schwache Beleuchtung für die nächtliche Navigation und Sicherheit.`,other:`Beleuchtung, die nicht in Standardkategorien passt.`,hidden:`Verborgene Lichter werden von der Panel-Oberfläche und der absichtsbasierten Steuerung ausgeschlossen.`}},climateRoles:{heating_only:`Nur Heizen`,cooling_only:`Nur Kühlen`,auto:`Automatisch`,auxiliary:`Zusatz`,sensor:`Sensor`,hidden:`Verborgen`,unassigned:`Nicht zugewiesen`,descriptions:{heating_only:`Gerät wird nur zum Heizen im Klimabereich verwendet.`,cooling_only:`Gerät wird nur zum Kühlen im Klimabereich verwendet.`,auto:`Gerät kann automatisch zum Heizen und Kühlen verwendet werden.`,auxiliary:`Zusätzliche Klimageräte wie Luftentfeuchter, Luftbefeuchter, Luftreiniger und Ventilatoren.`,sensor:`Klimasensor, der Messwerte (Temperatur, Luftfeuchtigkeit, Luftqualität usw.) für den Bereich liefert.`,hidden:`Verborgene Geräte werden von der Klima-Oberfläche und der Steuerung ausgeschlossen.`}},coversRoles:{primary:`Primär`,blackout:`Verdunkelung`,sheer:`Transparent`,outdoor:`Außen`,hidden:`Verborgen`,unassigned:`Nicht zugewiesen`,descriptions:{primary:`Hauptfensterabdeckung für den Bereich, typischerweise für allgemeinen Sichtschutz und Lichtkontrolle.`,blackout:`Lichtblockierende Abdeckungen für vollständige Dunkelheit, ideal für Schlafzimmer oder Medienräume.`,sheer:`Halbtransparente Abdeckungen, die Privatsphäre bieten und gleichzeitig natürliches Licht durchlassen.`,outdoor:`Außenrollläden, Markisen oder Pergolaabdeckungen für den Außenschutz.`,hidden:`Verborgene Abdeckungen werden von der Panel-Oberfläche und der absichtsbasierten Steuerung ausgeschlossen.`}},sensorRoles:{environment:`Umgebung`,safety:`Sicherheit`,security:`Überwachung`,air_quality:`Luftqualität`,energy:`Energie`,other:`Sonstige`,hidden:`Verborgen`,descriptions:{environment:`Umgebungssensoren wie Temperatur, Luftfeuchtigkeit, Druck oder Lichtstärke.`,safety:`Sicherheitssensoren wie Rauch-, Gas-, Leck- oder Kohlenmonoxid-Melder.`,security:`Sicherheits- und Anwesenheitssensoren wie Bewegungs-, Belegungs- und Kontaktsensoren.`,air_quality:`Luftqualitätssensoren einschließlich CO2, VOC, Feinstaub und andere Schadstoffe.`,energy:`Energieüberwachungssensoren wie Leistungs- oder Energieverbrauch.`,other:`Sensoren, die keiner bestimmten Kategorie zugeordnet sind.`,hidden:`Verborgene Sensoren werden von der Oberfläche ausgeschlossen.`},categories:{temperature:`Temperatur`,humidity:`Luftfeuchtigkeit`,pressure:`Druck`,illuminance:`Beleuchtungsstärke`,smoke:`Rauch`,gas:`Gas`,carbon_monoxide:`Kohlenmonoxid`,carbon_dioxide:`Kohlendioxid`,leak:`Leck`,motion:`Bewegung`,occupancy:`Belegung`,contact:`Kontakt`,air_quality:`Luftqualität`,air_particulate:`Feinstaub`,nitrogen_dioxide:`Stickstoffdioxid`,ozone:`Ozon`,sulphur_dioxide:`Schwefeldioxid`,volatile_organic_compounds:`Flüchtige organische Verbindungen`,electrical_energy:`Energie`,electrical_generation:`Erzeugung`,electrical_power:`Leistung`,battery:`Batterie`}},media:{endpointTypes:{display:`Anzeige`,audio_output:`Audioausgang`,source:`Quelle`,remote_target:`Fernziel`},capabilities:{power:`Strom`,input:`Eingang`,volume:`Lautstärke`,playback:`Wiedergabe`,track:`Titel`,remote:`Fernbedienung`,mute:`Stummschaltung`},activityLabels:{watch:`Schauen`,listen:`Hören`,gaming:`Spielen`,background:`Hintergrund`,off:`Aus`},activities:{loading:`Medienkonfiguration wird geladen...`,description:`Weisen Sie jeder Medienaktivität Display-, Audio-, Quell- und Fernbedienungsgeräte zu. Änderungen werden automatisch gespeichert.`,applyDefaults:`Standards anwenden`,applyDefaultsHint:`Weist Endpunkte automatisch basierend auf Gerätetypen und Fähigkeiten zu`,defaultsApplied:`Standardzuordnungen wurden angewendet.`,defaultsFailed:`Standardzuordnungen konnten nicht angewendet werden.`,selectPrompt:`Wählen Sie eine Aktivität aus der Liste, um ihre Zuordnungen zu konfigurieren.`,selectEndpoint:`Endpunkt auswählen...`,save:`Speichern`,reset:`Zurücksetzen`,saveError:`Zuordnung konnte nicht gespeichert werden`,savedSuccessfully:`Zuordnung erfolgreich gespeichert.`,slots:{display:`Anzeige`,audio:`Audioausgang`,source:`Quelle`,remote:`Fernziel`},overrides:{displayInput:`Display-Eingangsvoreinstellung`,displayInputPlaceholder:`z. B. HDMI1, Apps`,audioInput:`Audio-Eingangsvoreinstellung`,audioInputPlaceholder:`z. B. HDMI1, ARC`,sourceInput:`Quell-Eingangsvoreinstellung`,sourceInputPlaceholder:`z. B. HDMI1, Apps`,audioVolume:`Audio-Lautstärkevoreinstellung`},mediaInputSources:{hdmi1:`HDMI-Eingang HDMI 1`,hdmi2:`HDMI-Eingang HDMI 2`,hdmi3:`HDMI-Eingang HDMI 3`,hdmi4:`HDMI-Eingang HDMI 4`,hdmi5:`HDMI-Eingang HDMI 5`,hdmi6:`HDMI-Eingang HDMI 6`,arc:`BOGEN`,earc:`eARC`,tv:`TV`,cable:`Kabel`,satellite:`Satellit`,antenna:`Antenne`,av1:`AV-Eingang AV 1`,av2:`AV-Eingang AV 2`,component:`Komponente`,vga:`VGA`,dvi:`DVI`,usb:`USB`,bluetooth:`Bluetooth`,wifi:`W-lan`,airplay:`AirPlay`,cast:`Chromecast`,dlna:`DLNA`,miracast:`Miracast`,app_netflix:`Netflix`,app_youtube:`YouTube`,app_spotify:`Spotify`,app_prime_video:`Prime Video`,app_disney_plus:`Disney+`,app_hbo_max:`HBO Max`,app_apple_tv:`Apple TV`,app_plex:`Plex`,app_kodi:`Kodi`,other:`Sonstige`},status:{configured:`Konfiguriert`,incomplete:`Unvollständig`,unconfigured:`Nicht eingerichtet`},run:`Ausführen`,deactivate:`Deaktivieren`,refreshStatus:`Status aktualisieren`,rerun:`Erneut ausführen`,copyDebugJson:`Debug-JSON kopieren`,copiedToClipboard:`Debug-JSON in die Zwischenablage kopiert.`,activateSuccess:`Aktivität erfolgreich aktiviert.`,activateFailed:`Aktivierung der Aktivität fehlgeschlagen.`,deactivateSuccess:`Aktivität deaktiviert.`,deactivateFailed:`Deaktivierung der Aktivität fehlgeschlagen.`,fetchFailed:`Aktualisierung des Aktivitätsstatus fehlgeschlagen.`,preview:`Vorschau`,previewFailed:`Vorschau der Aktivität fehlgeschlagen.`,previewDialog:{title:`Ausführungsplan-Vorschau`,resolvedDevices:`Aufgelöste Geräte`,executionPlan:`Ausführungsplan`,step:`Schritt`,action:`Aktion`,device:`Gerät`,critical:`Kritisch`,criticalYes:`Kritisch`,criticalNo:`Optional`,warnings:`Warnungen & übersprungene Schritte`,noSteps:`Keine Ausführungsschritte im Plan.`,close:`Schließen`},activePanel:{title:`Aktiver Zustand`,currentActivity:`Aktuelle Aktivität`,none:`Keine`,state:`Zustand`,activatedAt:`Aktiviert am`,updatedAt:`Aktualisiert am`,resolvedDevices:`Aufgelöste Geräte`,display:`Anzeige`,audio:`Audio`,source:`Quelle`,remote:`Fernbedienung`},failures:{title:`Fehler`,total:`Schritte gesamt`,succeeded:`Erfolgreich`,failed:`Fehlgeschlagen`,stepIndex:`Schritt`,device:`Gerät`,property:`Eigenschaft`,reason:`Grund`},activationState:{activating:`Wird aktiviert`,active:`Aktiv`,failed:`Fehlgeschlagen`,deactivated:`Deaktiviert`}}},dialogs:{lightingRoles:{title:`Beleuchtungsrollen bearbeiten`},climateRoles:{title:`Klimarollen bearbeiten`},coversRoles:{title:`Abdeckungsrollen bearbeiten`},sensorRoles:{title:`Sensorrollen bearbeiten`},mediaActivities:{title:`Medienaktivitäten bearbeiten`}},fields:{spaces:{lightingRoles:{title:`Beleuchtungsrollen`,description:`Weisen Sie Lichtern Rollen zu, damit das Panel versteht, wie jedes Licht typischerweise verwendet wird (Arbeit, Entspannung, Nacht)`,noLights:`Keine Lichter in diesem Bereich gefunden`,role:{title:`Rolle`,placeholder:`Rolle auswählen`},applyDefaults:`Standards anwenden`,applyDefaultsHint:`Setzt das erste Licht als Haupt, andere als Ambiente`},climateRoles:{title:`Klimarollen`,description:`Weisen Sie Klimageräten Rollen zu, damit das Panel versteht, wie jedes Gerät Temperatur und Luftqualität steuert`,noDevices:`Keine Klimageräte in diesem Bereich gefunden`,role:{title:`Rolle`,placeholder:`Rolle auswählen`},applyDefaults:`Standards anwenden`,applyDefaultsHint:`Weist Rollen automatisch basierend auf dem Gerätetyp zu`},coversRoles:{title:`Abdeckungsrollen`,description:`Weisen Sie Fensterabdeckungen Rollen zu, damit das Panel versteht, wie jede Abdeckung verwendet wird (primär, Verdunkelung, transparent)`,noCovers:`Keine Fensterabdeckungen in diesem Bereich gefunden`,role:{title:`Rolle`,placeholder:`Rolle auswählen`},applyDefaults:`Standards anwenden`,applyDefaultsHint:`Setzt die erste Abdeckung als Primär, andere basierend auf dem Typ`},sensorRoles:{title:`Sensorrollen`,description:`Weisen Sie Sensorkanälen Rollen zu, damit das Panel Umgebungs-, Sicherheits-, Luftqualitäts- und Energiemessungen gruppieren kann.`,noSensors:`Keine Sensoren in diesem Bereich gefunden`,channel:{title:`Kanal`},role:{title:`Rolle`,placeholder:`Rolle auswählen`},applyDefaults:`Standards anwenden`,applyDefaultsHint:`Weist Rollen automatisch basierend auf der Sensorkanal-Kategorie zu`}}},detail:{lightingRoles:{title:`Beleuchtungsrollen`,lightsAssigned:`Lichter zugewiesen`,noRolesAssigned:`Noch keine Rollen zugewiesen`},climateRoles:{title:`Klimarollen`,devicesAssigned:`Geräte zugewiesen`,noRolesAssigned:`Noch keine Rollen zugewiesen`},coversRoles:{title:`Abdeckungsrollen`,coversAssigned:`Abdeckungen zugewiesen`,noRolesAssigned:`Noch keine Rollen zugewiesen`},sensorRoles:{title:`Sensorrollen`,sensorsAssigned:`Sensoren zugewiesen`,noRolesAssigned:`Noch keine Rollen zugewiesen`},mediaActivities:{title:`Medienaktivitäten`,noActivities:`Noch keine Aktivitäten konfiguriert`},domains:{notConfigured:`Nicht konfiguriert`,lighting:{title:`Beleuchtung`,description:`Konfigurieren Sie, wie Lichter in diesem Bereich verwendet werden — Haupt-, Arbeits-, Ambiente-, Akzent- und Nachtbeleuchtungsrollen.`},climate:{title:`Klima`,description:`Weisen Sie Heiz-, Kühl- und Sensorrollen den Klimageräten in diesem Bereich zu.`},covers:{title:`Abdeckungen`,description:`Legen Sie Rollen für Fensterabdeckungen fest — Primär-, Verdunkelungs-, Gardinen- und Außenjalousien.`},sensor:{title:`Sensoren`,description:`Gruppieren Sie Sensorkanäle nach Zweck — Umgebung, Sicherheit, Schutz, Luftqualität und Energie.`},media:{title:`Medien`,description:`Definieren Sie Medienaktivitäten wie Fernsehen, Musik hören und Spielen mit Geräte-Endpunkt-Routing.`}},scenes:{loading:`Szenen werden geladen...`,name:`Szenenname`,category:`Kategorie`,status:`Status`,enabled:`Aktiviert`,disabled:`Deaktiviert`,remove:`Entfernen`,removeHeading:`Szene aus Bereich entfernen`,reassign:`Neu zuweisen`,reassigned:`Szene "{name}" wurde erfolgreich neu zugewiesen.`,selectScene:`Szene zum Hinzufügen auswählen`,selectSpace:`Bereich für Szene auswählen`,searchPlaceholder:`Szenen suchen...`,confirmRemove:`Szene "{name}" aus diesem Bereich entfernen?`,assignedSpace:`Zugewiesener Bereich`,noAvailable:`Keine Szenen zum Hinzufügen verfügbar`,noFilteredScenes:`Keine Szenen entsprechen Ihrer Suche`,assigned:`Szene "{name}" wurde diesem Bereich zugewiesen.`,removed:`Szene "{name}" wurde aus diesem Bereich entfernt.`,removeCanceled:`Szenenentfernung wurde abgebrochen.`,empty:`Diesem Bereich sind keine Szenen zugewiesen`,assign:`Zuweisen`}},edit:{sections:{smartOverrides:{lightingRoles:`Beleuchtungsrollen`,climateRoles:`Klimarollen`,coversRoles:`Abdeckungsrollen`,sensorRoles:`Sensorrollen`}}}},"en-US":{plugin:{name:`Home Control Spaces`,description:`Adds physical Room and Zone spaces with lighting, climate, covers, sensor and media controls.`},typeLabels:{room:`Room`,zone:`Zone`},lightingRoles:{main:`Main`,task:`Task`,ambient:`Ambient`,accent:`Accent`,night:`Night`,other:`Other`,hidden:`Hidden`,unassigned:`Unassigned`,descriptions:{main:`Primary lighting for the space, typically overhead or central fixtures used for general illumination.`,task:`Focused lighting for specific activities like reading, cooking, or working.`,ambient:`Soft background lighting used to create atmosphere and comfort.`,accent:`Decorative lighting used to highlight features or create visual interest.`,night:`Low-level lighting for nighttime navigation and safety.`,other:`Lighting that doesn't fit into standard categories.`,hidden:`Hidden lights are excluded from the panel UI and intent-based control.`}},climateRoles:{heating_only:`Heating Only`,cooling_only:`Cooling Only`,auto:`Auto`,auxiliary:`Auxiliary`,sensor:`Sensor`,hidden:`Hidden`,unassigned:`Unassigned`,descriptions:{heating_only:`Device is used only for heating in the climate domain.`,cooling_only:`Device is used only for cooling in the climate domain.`,auto:`Device can be used for both heating and cooling automatically.`,auxiliary:`Auxiliary climate devices like dehumidifiers, humidifiers, air purifiers, and fans.`,sensor:`Climate sensor providing readings (temperature, humidity, air quality, etc.) for the space.`,hidden:`Hidden devices are excluded from the climate domain UI and control.`}},coversRoles:{primary:`Primary`,blackout:`Blackout`,sheer:`Sheer`,outdoor:`Outdoor`,hidden:`Hidden`,unassigned:`Unassigned`,descriptions:{primary:`Main window covering for the space, typically used for general privacy and light control.`,blackout:`Light-blocking covers designed for complete darkness, ideal for bedrooms or media rooms.`,sheer:`Semi-transparent covers that provide privacy while allowing natural light to filter through.`,outdoor:`External shutters, awnings, or pergola covers for outdoor protection.`,hidden:`Hidden covers are excluded from the panel UI and intent-based control.`}},sensorRoles:{environment:`Environment`,safety:`Safety`,security:`Security`,air_quality:`Air quality`,energy:`Energy`,other:`Other`,hidden:`Hidden`,descriptions:{environment:`Environmental sensors such as temperature, humidity, pressure, or light levels.`,safety:`Safety sensors like smoke, gas, leak, or carbon monoxide detectors.`,security:`Security and presence sensors like motion, occupancy, and contact sensors.`,air_quality:`Air quality sensors including CO2, VOC, particulate matter, and other pollutants.`,energy:`Energy monitoring sensors such as power or energy consumption.`,other:`Sensors that don't fit a specific category.`,hidden:`Hidden sensors are excluded from the UI.`},categories:{temperature:`Temperature`,humidity:`Humidity`,pressure:`Pressure`,illuminance:`Illuminance`,smoke:`Smoke`,gas:`Gas`,carbon_monoxide:`Carbon monoxide`,carbon_dioxide:`Carbon dioxide`,leak:`Leak`,motion:`Motion`,occupancy:`Occupancy`,contact:`Contact`,air_quality:`Air quality`,air_particulate:`Air particulate`,nitrogen_dioxide:`Nitrogen dioxide`,ozone:`Ozone`,sulphur_dioxide:`Sulphur dioxide`,volatile_organic_compounds:`Volatile organic compounds`,electrical_energy:`Energy`,electrical_generation:`Generation`,electrical_power:`Power`,battery:`Battery`}},media:{endpointTypes:{display:`Display`,audio_output:`Audio Output`,source:`Source`,remote_target:`Remote Target`},capabilities:{power:`Power`,input:`Input`,volume:`Volume`,playback:`Playback`,track:`Track`,remote:`Remote`,mute:`Mute`},activityLabels:{watch:`Watch`,listen:`Listen`,gaming:`Gaming`,background:`Background`,off:`Off`},activities:{loading:`Loading media configuration...`,description:`Assign display, audio, source, and remote devices to each media activity. Changes are saved automatically.`,applyDefaults:`Apply defaults`,applyDefaultsHint:`Auto-assigns endpoints based on device types and capabilities`,defaultsApplied:`Default bindings have been applied.`,defaultsFailed:`Failed to apply default bindings.`,selectPrompt:`Select an activity from the list to configure its bindings.`,selectEndpoint:`Select endpoint...`,save:`Save`,reset:`Reset`,saveError:`Failed to save binding`,savedSuccessfully:`Binding saved successfully.`,slots:{display:`Display`,audio:`Audio output`,source:`Source`,remote:`Remote target`},overrides:{displayInput:`Display input preset`,displayInputPlaceholder:`e.g. HDMI1, Apps`,audioInput:`Audio input preset`,audioInputPlaceholder:`e.g. HDMI1, ARC`,sourceInput:`Source input preset`,sourceInputPlaceholder:`e.g. HDMI1, Apps`,audioVolume:`Audio volume preset`},mediaInputSources:{hdmi1:`HDMI 1`,hdmi2:`HDMI 2`,hdmi3:`HDMI 3`,hdmi4:`HDMI 4`,hdmi5:`HDMI 5`,hdmi6:`HDMI 6`,arc:`ARC`,earc:`eARC`,tv:`TV`,cable:`Cable`,satellite:`Satellite`,antenna:`Antenna`,av1:`AV 1`,av2:`AV 2`,component:`Component`,vga:`VGA`,dvi:`DVI`,usb:`USB`,bluetooth:`Bluetooth`,wifi:`Wi-Fi`,airplay:`AirPlay`,cast:`Chromecast`,dlna:`DLNA`,miracast:`Miracast`,app_netflix:`Netflix`,app_youtube:`YouTube`,app_spotify:`Spotify`,app_prime_video:`Prime Video`,app_disney_plus:`Disney+`,app_hbo_max:`HBO Max`,app_apple_tv:`Apple TV`,app_plex:`Plex`,app_kodi:`Kodi`,other:`Other`},status:{configured:`Configured`,incomplete:`Incomplete`,unconfigured:`Not set`},run:`Run`,deactivate:`Deactivate`,refreshStatus:`Refresh status`,rerun:`Re-run`,copyDebugJson:`Copy debug JSON`,copiedToClipboard:`Debug JSON copied to clipboard.`,activateSuccess:`Activity activated successfully.`,activateFailed:`Failed to activate activity.`,deactivateSuccess:`Activity deactivated.`,deactivateFailed:`Failed to deactivate activity.`,fetchFailed:`Failed to refresh activity status.`,preview:`Preview`,previewFailed:`Failed to preview activity.`,previewDialog:{title:`Execution Plan Preview`,resolvedDevices:`Resolved devices`,executionPlan:`Execution plan`,step:`#`,action:`Action`,device:`Device`,critical:`Critical`,criticalYes:`Critical`,criticalNo:`Optional`,warnings:`Warnings & skipped steps`,noSteps:`No execution steps in plan.`,close:`Close`},activePanel:{title:`Active State`,currentActivity:`Current activity`,none:`None`,state:`State`,activatedAt:`Activated at`,updatedAt:`Updated at`,resolvedDevices:`Resolved devices`,display:`Display`,audio:`Audio`,source:`Source`,remote:`Remote`},failures:{title:`Failures`,total:`Total steps`,succeeded:`Succeeded`,failed:`Failed`,stepIndex:`Step`,device:`Device`,property:`Property`,reason:`Reason`},activationState:{activating:`Activating`,active:`Active`,failed:`Failed`,deactivated:`Deactivated`}}},dialogs:{lightingRoles:{title:`Edit Lighting Roles`},climateRoles:{title:`Edit Climate Roles`},coversRoles:{title:`Edit Covers Roles`},sensorRoles:{title:`Edit Sensor Roles`},mediaActivities:{title:`Edit Media Activities`}},fields:{spaces:{lightingRoles:{title:`Lighting roles`,description:`Assign roles to lights to help the panel understand how each light is typically used (Work, Relax, Night)`,noLights:`No lights found in this space`,role:{title:`Role`,placeholder:`Select a role`},applyDefaults:`Apply defaults`,applyDefaultsHint:`Sets first light as Main, others as Ambient`},climateRoles:{title:`Climate roles`,description:`Assign roles to climate devices to help the panel understand how each device controls temperature and air quality`,noDevices:`No climate devices found in this space`,role:{title:`Role`,placeholder:`Select a role`},applyDefaults:`Apply defaults`,applyDefaultsHint:`Auto-assigns roles based on device type`},coversRoles:{title:`Covers roles`,description:`Assign roles to window coverings to help the panel understand how each cover is used (primary, blackout, sheer)`,noCovers:`No window coverings found in this space`,role:{title:`Role`,placeholder:`Select a role`},applyDefaults:`Apply defaults`,applyDefaultsHint:`Sets first cover as Primary, others based on type`},sensorRoles:{title:`Sensor roles`,description:`Assign roles to sensor channels so the panel can group environment, safety, security, air quality, and energy readings.`,noSensors:`No sensors found in this space`,channel:{title:`Channel`},role:{title:`Role`,placeholder:`Select a role`},applyDefaults:`Apply defaults`,applyDefaultsHint:`Auto-assigns roles based on sensor channel category`}}},detail:{lightingRoles:{title:`Lighting roles`,lightsAssigned:`Lights assigned`,noRolesAssigned:`No roles assigned yet`},climateRoles:{title:`Climate roles`,devicesAssigned:`Devices assigned`,noRolesAssigned:`No roles assigned yet`},coversRoles:{title:`Covers roles`,coversAssigned:`Covers assigned`,noRolesAssigned:`No roles assigned yet`},sensorRoles:{title:`Sensor roles`,sensorsAssigned:`Sensors assigned`,noRolesAssigned:`No roles assigned yet`},mediaActivities:{title:`Media Activities`,noActivities:`No activities configured yet`},domains:{notConfigured:`Not configured`,lighting:{title:`Lighting`,description:`Configure how lights in this space are used — main, task, ambient, accent, and night lighting roles.`},climate:{title:`Climate`,description:`Assign heating, cooling, and sensor roles to climate devices in this space.`},covers:{title:`Covers`,description:`Set roles for window coverings — primary, blackout, sheer, and outdoor blinds.`},sensor:{title:`Sensors`,description:`Group sensor channels by purpose — environment, safety, security, air quality, and energy.`},media:{title:`Media`,description:`Define media activities like watching, listening, and gaming with device endpoint routing.`}},scenes:{loading:`Loading scenes...`,name:`Scene name`,category:`Category`,status:`Status`,enabled:`Enabled`,disabled:`Disabled`,remove:`Remove`,removeHeading:`Remove scene from space`,reassign:`Reassign`,reassigned:`Scene "{name}" was reassigned successfully.`,selectScene:`Select scene to add`,selectSpace:`Select space for scene`,searchPlaceholder:`Search scenes...`,confirmRemove:`Remove scene "{name}" from this space?`,assignedSpace:`Assigned space`,noAvailable:`No scenes available to add`,noFilteredScenes:`No scenes match your search`,assigned:`Scene "{name}" was assigned to this space.`,removed:`Scene "{name}" was removed from this space.`,removeCanceled:`Scene removal was canceled.`,empty:`No scenes assigned to this space`,assign:`Assign`}},edit:{sections:{smartOverrides:{lightingRoles:`Lighting roles`,climateRoles:`Climate roles`,coversRoles:`Covers roles`,sensorRoles:`Sensor roles`}}}},"es-ES":{plugin:{name:`Espacios de control doméstico`,description:`Añade habitaciones y zonas físicas con controles de iluminación, clima, persianas, sensores y medios.`},typeLabels:{room:`Habitación`,zone:`Zona`},lightingRoles:{main:`Principal`,task:`Tarea`,ambient:`Ambiental`,accent:`Acento`,night:`Nocturna`,other:`Otra`,hidden:`Oculta`,unassigned:`Sin asignar`,descriptions:{main:`Iluminación principal del espacio, normalmente luminarias de techo o centrales utilizadas para la iluminación general.`,task:`Iluminación enfocada para actividades específicas como leer, cocinar o trabajar.`,ambient:`Iluminación suave de fondo utilizada para crear ambiente y confort.`,accent:`Iluminación decorativa utilizada para resaltar elementos o crear interés visual.`,night:`Iluminación de bajo nivel para la navegación y seguridad nocturna.`,other:`Iluminación que no encaja en las categorías estándar.`,hidden:`Las luces ocultas se excluyen de la interfaz del panel y del control basado en intenciones.`}},climateRoles:{heating_only:`Solo calefacción`,cooling_only:`Solo refrigeración`,auto:`Automático`,auxiliary:`Auxiliar`,sensor:`Sensor`,hidden:`Oculto`,unassigned:`Sin asignar`,descriptions:{heating_only:`El dispositivo se utiliza solo para calefacción en el dominio de climatización.`,cooling_only:`El dispositivo se utiliza solo para refrigeración en el dominio de climatización.`,auto:`El dispositivo puede utilizarse tanto para calefacción como para refrigeración automáticamente.`,auxiliary:`Dispositivos auxiliares de climatización como deshumidificadores, humidificadores, purificadores de aire y ventiladores.`,sensor:`Sensor de climatización que proporciona lecturas (temperatura, humedad, calidad del aire, etc.) del espacio.`,hidden:`Los dispositivos ocultos se excluyen de la interfaz de climatización y del control.`}},coversRoles:{primary:`Principal`,blackout:`Opaca`,sheer:`Translúcida`,outdoor:`Exterior`,hidden:`Oculta`,unassigned:`Sin asignar`,descriptions:{primary:`Cubierta de ventana principal del espacio, normalmente utilizada para privacidad general y control de luz.`,blackout:`Cubiertas que bloquean la luz diseñadas para oscuridad total, ideales para dormitorios o salas multimedia.`,sheer:`Cubiertas semitransparentes que proporcionan privacidad mientras permiten el paso de la luz natural.`,outdoor:`Persianas exteriores, toldos o cubiertas de pérgola para protección exterior.`,hidden:`Las cubiertas ocultas se excluyen de la interfaz del panel y del control basado en intenciones.`}},sensorRoles:{environment:`Entorno`,safety:`Seguridad`,security:`Vigilancia`,air_quality:`Calidad del aire`,energy:`Energía`,other:`Otro`,hidden:`Oculto`,descriptions:{environment:`Sensores ambientales como temperatura, humedad, presión o niveles de luz.`,safety:`Sensores de seguridad como detectores de humo, gas, fugas o monóxido de carbono.`,security:`Sensores de vigilancia y presencia como sensores de movimiento, ocupación y contacto.`,air_quality:`Sensores de calidad del aire incluyendo CO2, COV, partículas en suspensión y otros contaminantes.`,energy:`Sensores de monitorización energética como consumo de potencia o energía.`,other:`Sensores que no encajan en una categoría específica.`,hidden:`Los sensores ocultos se excluyen de la interfaz.`},categories:{temperature:`Temperatura`,humidity:`Humedad`,pressure:`Presión`,illuminance:`Iluminancia`,smoke:`Humo`,gas:`Gas`,carbon_monoxide:`Monóxido de carbono`,carbon_dioxide:`Dióxido de carbono`,leak:`Fuga`,motion:`Movimiento`,occupancy:`Ocupación`,contact:`Contacto`,air_quality:`Calidad del aire`,air_particulate:`Partículas en el aire`,nitrogen_dioxide:`Dióxido de nitrógeno`,ozone:`Ozono`,sulphur_dioxide:`Dióxido de azufre`,volatile_organic_compounds:`Compuestos orgánicos volátiles`,electrical_energy:`Energía`,electrical_generation:`Generación`,electrical_power:`Potencia`,battery:`Batería`}},media:{endpointTypes:{display:`Pantalla`,audio_output:`Salida de audio`,source:`Fuente`,remote_target:`Destino remoto`},capabilities:{power:`Alimentación`,input:`Entrada`,volume:`Volumen`,playback:`Reproducción`,track:`Pista`,remote:`Remoto`,mute:`Silencio`},activityLabels:{watch:`Ver`,listen:`Escuchar`,gaming:`Juegos`,background:`Fondo`,off:`Apagado`},activities:{loading:`Cargando configuración multimedia...`,description:`Asigne dispositivos de pantalla, audio, fuente y remoto a cada actividad multimedia. Los cambios se guardan automáticamente.`,applyDefaults:`Aplicar valores predeterminados`,applyDefaultsHint:`Asigna automáticamente los endpoints según los tipos de dispositivo y capacidades`,defaultsApplied:`Se han aplicado las asignaciones predeterminadas.`,defaultsFailed:`Error al aplicar las asignaciones predeterminadas.`,selectPrompt:`Seleccione una actividad de la lista para configurar sus asignaciones.`,selectEndpoint:`Seleccionar endpoint...`,save:`Guardar`,reset:`Restablecer`,saveError:`Error al guardar la asignación`,savedSuccessfully:`Asignación guardada correctamente.`,slots:{display:`Pantalla`,audio:`Salida de audio`,source:`Fuente`,remote:`Destino remoto`},overrides:{displayInput:`Preajuste de entrada de pantalla`,displayInputPlaceholder:`p. ej., HDMI1, Apps`,audioInput:`Preajuste de entrada de audio`,audioInputPlaceholder:`p. ej., HDMI1, ARC`,sourceInput:`Preajuste de entrada de fuente`,sourceInputPlaceholder:`p. ej., HDMI1, Apps`,audioVolume:`Preajuste de volumen de audio`},mediaInputSources:{hdmi1:`Entrada HDMI 1`,hdmi2:`Entrada HDMI 2`,hdmi3:`Entrada HDMI 3`,hdmi4:`Entrada HDMI 4`,hdmi5:`Entrada HDMI 5`,hdmi6:`Entrada HDMI 6`,arc:`ARCO`,earc:`ARCO`,tv:`TV`,cable:`Cable`,satellite:`Satélite`,antenna:`Antena`,av1:`Entrada AV 1`,av2:`Entrada AV 2`,component:`Componente`,vga:`VGA`,dvi:`DVI`,usb:`USB`,bluetooth:`bluetooth`,wifi:`Wifi`,airplay:`Salida en antena`,cast:`Chromecast`,dlna:`DLNA`,miracast:`miracast`,app_netflix:`netflix`,app_youtube:`YouTube`,app_spotify:`Spotify`,app_prime_video:`Vídeo principal`,app_disney_plus:`Disney+`,app_hbo_max:`HBO máximo`,app_apple_tv:`AppleTV`,app_plex:`plexo`,app_kodi:`Kodi`,other:`Otro`},status:{configured:`Configurado`,incomplete:`Incompleto`,unconfigured:`Sin configurar`},run:`Ejecutar`,deactivate:`Desactivar`,refreshStatus:`Actualizar estado`,rerun:`Volver a ejecutar`,copyDebugJson:`Copiar JSON de depuración`,copiedToClipboard:`JSON de depuración copiado al portapapeles.`,activateSuccess:`Actividad activada correctamente.`,activateFailed:`Error al activar la actividad.`,deactivateSuccess:`Actividad desactivada.`,deactivateFailed:`Error al desactivar la actividad.`,fetchFailed:`Error al actualizar el estado de la actividad.`,preview:`Vista previa`,previewFailed:`Error al previsualizar la actividad.`,previewDialog:{title:`Vista previa del plan de ejecución`,resolvedDevices:`Dispositivos resueltos`,executionPlan:`Plan de ejecución`,step:`Paso`,action:`Acción`,device:`Dispositivo`,critical:`Crítico`,criticalYes:`Crítico`,criticalNo:`Opcional`,warnings:`Advertencias y pasos omitidos`,noSteps:`No hay pasos de ejecución en el plan.`,close:`Cerrar`},activePanel:{title:`Estado activo`,currentActivity:`Actividad actual`,none:`Ninguna`,state:`Estado`,activatedAt:`Activado a las`,updatedAt:`Actualizado a las`,resolvedDevices:`Dispositivos resueltos`,display:`Pantalla`,audio:`Audio`,source:`Fuente`,remote:`Remoto`},failures:{title:`Errores`,total:`Pasos totales`,succeeded:`Exitosos`,failed:`Fallidos`,stepIndex:`Paso`,device:`Dispositivo`,property:`Propiedad`,reason:`Razón`},activationState:{activating:`Activando`,active:`Activo`,failed:`Fallido`,deactivated:`Desactivado`}}},dialogs:{lightingRoles:{title:`Editar roles de iluminación`},climateRoles:{title:`Editar roles de climatización`},coversRoles:{title:`Editar roles de cubiertas`},sensorRoles:{title:`Editar roles de sensores`},mediaActivities:{title:`Editar actividades multimedia`}},fields:{spaces:{lightingRoles:{title:`Roles de iluminación`,description:`Asigne roles a las luces para ayudar al panel a comprender cómo se usa normalmente cada luz (Trabajo, Relax, Noche)`,noLights:`No se encontraron luces en este espacio`,role:{title:`Rol`,placeholder:`Seleccione un rol`},applyDefaults:`Aplicar valores predeterminados`,applyDefaultsHint:`Establece la primera luz como Principal, las demás como Ambiental`},climateRoles:{title:`Roles de climatización`,description:`Asigne roles a los dispositivos de climatización para ayudar al panel a comprender cómo cada dispositivo controla la temperatura y la calidad del aire`,noDevices:`No se encontraron dispositivos de climatización en este espacio`,role:{title:`Rol`,placeholder:`Seleccione un rol`},applyDefaults:`Aplicar valores predeterminados`,applyDefaultsHint:`Asigna automáticamente roles según el tipo de dispositivo`},coversRoles:{title:`Roles de cubiertas`,description:`Asigne roles a las cubiertas de ventanas para ayudar al panel a comprender cómo se usa cada cubierta (principal, opaca, translúcida)`,noCovers:`No se encontraron cubiertas de ventanas en este espacio`,role:{title:`Rol`,placeholder:`Seleccione un rol`},applyDefaults:`Aplicar valores predeterminados`,applyDefaultsHint:`Establece la primera cubierta como Principal, las demás según el tipo`},sensorRoles:{title:`Roles de sensores`,description:`Asigne roles a los canales de sensores para que el panel pueda agrupar lecturas de entorno, seguridad, calidad del aire y energía.`,noSensors:`No se encontraron sensores en este espacio`,channel:{title:`Canal`},role:{title:`Rol`,placeholder:`Seleccione un rol`},applyDefaults:`Aplicar valores predeterminados`,applyDefaultsHint:`Asigna automáticamente roles según la categoría del canal del sensor`}}},detail:{lightingRoles:{title:`Roles de iluminación`,lightsAssigned:`Luces asignadas`,noRolesAssigned:`Aún no se han asignado roles`},climateRoles:{title:`Roles de climatización`,devicesAssigned:`Dispositivos asignados`,noRolesAssigned:`Aún no se han asignado roles`},coversRoles:{title:`Roles de cubiertas`,coversAssigned:`Cubiertas asignadas`,noRolesAssigned:`Aún no se han asignado roles`},sensorRoles:{title:`Roles de sensores`,sensorsAssigned:`Sensores asignados`,noRolesAssigned:`Aún no se han asignado roles`},mediaActivities:{title:`Actividades multimedia`,noActivities:`Aún no se han configurado actividades`},domains:{notConfigured:`No configurado`,lighting:{title:`Iluminación`,description:`Configure cómo se usan las luces en este espacio — roles de iluminación principal, de trabajo, ambiental, de acento y nocturna.`},climate:{title:`Clima`,description:`Asigne roles de calefacción, refrigeración y sensores a los dispositivos climáticos en este espacio.`},covers:{title:`Cubiertas`,description:`Establezca roles para las cubiertas de ventanas — persianas primarias, de oscurecimiento, visillos y exteriores.`},sensor:{title:`Sensores`,description:`Agrupe los canales de sensores por propósito — entorno, seguridad, protección, calidad del aire y energía.`},media:{title:`Medios`,description:`Defina actividades multimedia como ver, escuchar y jugar con enrutamiento de puntos finales de dispositivos.`}},scenes:{loading:`Cargando escenas...`,name:`Nombre de la escena`,category:`Categoría`,status:`Estado`,enabled:`Activada`,disabled:`Desactivada`,remove:`Eliminar`,removeHeading:`Eliminar escena del espacio`,reassign:`Reasignar`,reassigned:`La escena "{name}" fue reasignada correctamente.`,selectScene:`Seleccione la escena a añadir`,selectSpace:`Seleccione el espacio para la escena`,searchPlaceholder:`Buscar escenas...`,confirmRemove:`¿Eliminar la escena "{name}" de este espacio?`,assignedSpace:`Espacio asignado`,noAvailable:`No hay escenas disponibles para añadir`,noFilteredScenes:`Ninguna escena coincide con su búsqueda`,assigned:`La escena "{name}" fue asignada a este espacio.`,removed:`La escena "{name}" fue eliminada de este espacio.`,removeCanceled:`La eliminación de la escena ha sido cancelada.`,empty:`No hay escenas asignadas a este espacio`,assign:`Asignar`}},edit:{sections:{smartOverrides:{lightingRoles:`Roles de iluminación`,climateRoles:`Roles de climatización`,coversRoles:`Roles de cubiertas`,sensorRoles:`Roles de sensores`}}}},"pl-PL":{plugin:{name:`Przestrzenie sterowania domem`,description:`Dodaje fizyczne pokoje i strefy ze sterowaniem oświetleniem, klimatem, osłonami, czujnikami i mediami.`},typeLabels:{room:`Pokój`,zone:`Strefa`},lightingRoles:{main:`Glowne`,task:`Zadaniowe`,ambient:`Ambientowe`,accent:`Akcentowe`,night:`Nocne`,other:`Inne`,hidden:`Ukryte`,unassigned:`Nieprzypisane`,descriptions:{main:`Glowne oswietlenie przestrzeni.`,task:`Skupione oswietlenie do konkretnych czynnosci.`,ambient:`Miekkie oswietlenie tla.`,accent:`Oswietlenie dekoracyjne.`,night:`Oswietlenie o niskim natezeniu do nocnej nawigacji.`,other:`Oswietlenie niepasujace do standardowych kategorii.`,hidden:`Ukryte swiatla sa wykluczone z interfejsu panelu.`}},climateRoles:{heating_only:`Tylko ogrzewanie`,cooling_only:`Tylko chlodzenie`,auto:`Automatyczny`,auxiliary:`Pomocniczy`,sensor:`Czujnik`,hidden:`Ukryty`,unassigned:`Nieprzypisany`,descriptions:{heating_only:`Urzadzenie uzywane tylko do ogrzewania.`,cooling_only:`Urzadzenie uzywane tylko do chlodzenia.`,auto:`Urzadzenie moze byc uzywane do ogrzewania i chlodzenia automatycznie.`,auxiliary:`Pomocnicze urzadzenia klimatyczne.`,sensor:`Czujnik klimatu dostarczajacy odczyty dla przestrzeni.`,hidden:`Ukryte urzadzenia sa wykluczone z interfejsu klimatu.`}},coversRoles:{primary:`Glowna`,blackout:`Zaciemniajaca`,sheer:`Przezroczysta`,outdoor:`Zewnetrzna`,hidden:`Ukryta`,unassigned:`Nieprzypisana`,descriptions:{primary:`Glowna oslona okienna przestrzeni.`,blackout:`Oslony blokujace swiatlo.`,sheer:`Polprzezroczyste oslony.`,outdoor:`Zewnetrzne oslony.`,hidden:`Ukryte oslony sa wykluczone z interfejsu panelu.`}},sensorRoles:{environment:`Srodowisko`,safety:`Bezpieczenstwo`,security:`Ochrona`,air_quality:`Jakosc powietrza`,energy:`Energia`,other:`Inne`,hidden:`Ukryty`,descriptions:{environment:`Czujniki srodowiskowe.`,safety:`Czujniki bezpieczenstwa.`,security:`Czujniki ochrony i obecnosci.`,air_quality:`Czujniki jakosci powietrza.`,energy:`Czujniki monitorowania energii.`,other:`Czujniki niepasujace do kategorii.`,hidden:`Ukryte czujniki sa wykluczone z interfejsu.`},categories:{temperature:`Temperatura`,humidity:`Wilgotnosc`,pressure:`Cisnienie`,illuminance:`Natezenie oswietlenia`,smoke:`Dym`,gas:`Gaz`,carbon_monoxide:`Tlenek wegla`,carbon_dioxide:`Dwutlenek wegla`,leak:`Wyciek`,motion:`Ruch`,occupancy:`Obecnosc`,contact:`Kontakt`,air_quality:`Jakosc powietrza`,air_particulate:`Czastki w powietrzu`,nitrogen_dioxide:`Dwutlenek azotu`,ozone:`Ozon`,sulphur_dioxide:`Dwutlenek siarki`,volatile_organic_compounds:`Lotne zwiazki organiczne`,electrical_energy:`Energia`,electrical_generation:`Generacja`,electrical_power:`Moc`,battery:`Bateria`}},media:{endpointTypes:{display:`Ekran`,audio_output:`Wyjście audio`,source:`Źródło`,remote_target:`Cel zdalny`},capabilities:{power:`Moc`,input:`Wejście`,volume:`Głośność`,playback:`Odtwarzanie`,track:`Ścieżka`,remote:`Pilot`,mute:`Wycisz`},activityLabels:{watch:`Oglądaj`,listen:`Słuchaj`,gaming:`Graj`,background:`Tło`,off:`Wyłączone`},activities:{loading:`Ładowanie konfiguracji mediów...`,description:`Przypisz urządzenia wyświetlania, audio, źródła i pilota do każdej aktywności multimediów. Zmiany są zapisywane automatycznie.`,applyDefaults:`Zastosuj domyślne`,applyDefaultsHint:`Automatycznie przypisuje punkty końcowe na podstawie typu urządzeń i ich możliwości.`,defaultsApplied:`Zastosowano domyślne wiązania.`,defaultsFailed:`Nie udało się zastosować domyślnych wiązań.`,selectPrompt:`Wybierz aktywność z listy, aby skonfigurować jej wiązania.`,selectEndpoint:`Wybierz punkt końcowy...`,save:`Zapisz`,reset:`Resetuj`,saveError:`Nie udało się zapisać wiązania`,savedSuccessfully:`Wiązanie zapisane pomyślnie.`,slots:{display:`Ekran`,audio:`Wyjście audio`,source:`Źródło`,remote:`Cel zdalny`},overrides:{displayInput:`Szablon wejścia wyświetlacza`,displayInputPlaceholder:`np. HDMI1, Aplikacje`,audioInput:`Szablon wejścia audio`,audioInputPlaceholder:`np. HDMI1, ARC`,sourceInput:`Szablon wejścia źródła`,sourceInputPlaceholder:`np. HDMI1, Aplikacje`,audioVolume:`Szablon głośności audio`},mediaInputSources:{hdmi1:`Wejście HDMI 1`,hdmi2:`Wejście HDMI 2`,hdmi3:`Wejście HDMI 3`,hdmi4:`Wejście HDMI 4`,hdmi5:`Wejście HDMI 5`,hdmi6:`Wejście HDMI 6`,arc:`ŁUK`,earc:`eARC`,tv:`Telewizja`,cable:`Kabel`,satellite:`Satelita`,antenna:`Antena`,av1:`Wejście AV 1`,av2:`Wejście AV 2`,component:`Komponent`,vga:`VGA`,dvi:`DVI`,usb:`USB`,bluetooth:`Bluetooth`,wifi:`Wi‑Fi`,airplay:`AirPlay`,cast:`Chromecasta`,dlna:`DLNA`,miracast:`Miracast`,app_netflix:`Netflixa`,app_youtube:`YouTube`,app_spotify:`Spotify`,app_prime_video:`Najlepsze wideo`,app_disney_plus:`Disney+`,app_hbo_max:`HBO Max`,app_apple_tv:`Telewizja Apple`,app_plex:`Pleks`,app_kodi:`Kodi`,other:`Inny`},status:{configured:`Skonfigurowane`,incomplete:`Niepełne`,unconfigured:`Nieskonfigurowane`},run:`Uruchom`,deactivate:`Dezaktywuj`,refreshStatus:`Odśwież stan`,rerun:`Ponów`,copyDebugJson:`Kopiuj JSON diagnostyczny`,copiedToClipboard:`Skopiowano JSON diagnostyczny do schowka.`,activateSuccess:`Aktywacja aktywności zakończona pomyślnie.`,activateFailed:`Nie udało się aktywować aktywności.`,deactivateSuccess:`Aktywność została dezaktywowana.`,deactivateFailed:`Nie udało się dezaktywować aktywności.`,fetchFailed:`Nie udało się odświeżyć stanu aktywności.`,preview:`Podgląd`,previewFailed:`Nie udało się wyświetlić podglądu aktywności.`,previewDialog:{title:`Podgląd planu wykonania`,resolvedDevices:`Rozpoznane urządzenia`,executionPlan:`Plan wykonania`,step:`Krok`,action:`Akcja`,device:`Urządzenie`,critical:`Krytyczny`,criticalYes:`Krytyczny`,criticalNo:`Opcjonalnie`,warnings:`Ostrzeżenia i pominięte kroki`,noSteps:`Brak kroków wykonania w planie.`,close:`Zamknij`},activePanel:{title:`Stan aktywny`,currentActivity:`Bieżąca aktywność`,none:`Brak`,state:`Stan`,activatedAt:`Aktywowano o`,updatedAt:`Zaktualizowano o`,resolvedDevices:`Rozpoznane urządzenia`,display:`Ekran`,audio:`Dźwięk`,source:`Źródło`,remote:`Zdalny`},failures:{title:`Błędy`,total:`Łącznie kroków`,succeeded:`Pomyślne`,failed:`Nieudane`,stepIndex:`Krok`,device:`Urządzenie`,property:`Właściwość`,reason:`Przyczyna`},activationState:{activating:`Aktywowanie`,active:`Aktywne`,failed:`Niepowodzenie`,deactivated:`Dezaktywowane`}}},dialogs:{lightingRoles:{title:`Edytuj role oswietlenia`},climateRoles:{title:`Edytuj role klimatu`},coversRoles:{title:`Edytuj role oslon`},sensorRoles:{title:`Edytuj role czujnikow`},mediaActivities:{title:`Edytuj aktywnosci mediow`}},fields:{spaces:{lightingRoles:{title:`Role oswietlenia`,description:`Przypisz role do oswietlenia, aby pomoc panelowi zrozumiec, jak kazde swiatlo jest typowo uzywane (Praca, Relaks, Noc)`,noLights:`Nie znaleziono oswietlenia w tej przestrzeni`,role:{title:`Rola`,placeholder:`Wybierz role`},applyDefaults:`Zastosuj domyslne`,applyDefaultsHint:`Ustawia pierwsze swiatlo jako Glowne, pozostale jako Ambientowe`},climateRoles:{title:`Role klimatu`,description:`Przypisz role do urzadzen klimatycznych, aby pomoc panelowi zrozumiec, jak kazde urzadzenie steruje temperatura i jakoscia powietrza`,noDevices:`Nie znaleziono urzadzen klimatycznych w tej przestrzeni`,role:{title:`Rola`,placeholder:`Wybierz role`},applyDefaults:`Zastosuj domyslne`,applyDefaultsHint:`Automatycznie przypisuje role na podstawie typu urzadzenia`},coversRoles:{title:`Role oslon`,description:`Przypisz role do oslon okiennych, aby pomoc panelowi zrozumiec, jak kazda oslona jest uzywana (glowna, zaciemniajaca, przezroczysta)`,noCovers:`Nie znaleziono oslon okiennych w tej przestrzeni`,role:{title:`Rola`,placeholder:`Wybierz role`},applyDefaults:`Zastosuj domyslne`,applyDefaultsHint:`Ustawia pierwsza oslone jako Glowna, pozostale na podstawie typu`},sensorRoles:{title:`Role czujnikow`,description:`Przypisz role do kanalow czujnikow, aby panel mogl grupowac odczyty srodowiskowe, bezpieczenstwa, jakosci powietrza i energii.`,noSensors:`Nie znaleziono czujnikow w tej przestrzeni`,channel:{title:`Kanal`},role:{title:`Rola`,placeholder:`Wybierz role`},applyDefaults:`Zastosuj domyslne`,applyDefaultsHint:`Automatycznie przypisuje role na podstawie kategorii kanalu czujnika`}}},detail:{lightingRoles:{title:`Role oswietlenia`,lightsAssigned:`Przypisane oswietlenie`,noRolesAssigned:`Nie przypisano jeszcze zadnych rol`},climateRoles:{title:`Role klimatu`,devicesAssigned:`Przypisane urzadzenia`,noRolesAssigned:`Nie przypisano jeszcze zadnych rol`},coversRoles:{title:`Role oslon`,coversAssigned:`Przypisane oslony`,noRolesAssigned:`Nie przypisano jeszcze zadnych rol`},sensorRoles:{title:`Role czujnikow`,sensorsAssigned:`Przypisane czujniki`,noRolesAssigned:`Nie przypisano jeszcze zadnych rol`},mediaActivities:{title:`Aktywnosci mediow`,noActivities:`Nie skonfigurowano jeszcze zadnych aktywnosci`},domains:{notConfigured:`Nie skonfigurowano`,lighting:{title:`Oswietlenie`,description:`Skonfiguruj sposob uzycia swiatel w tej przestrzeni — role oswietlenia glownego, roboczego, nastrojowego, akcentowego i nocnego.`},climate:{title:`Klimat`,description:`Przypisz role ogrzewania, chlodzenia i czujnikow do urzadzen klimatycznych w tej przestrzeni.`},covers:{title:`Oslony`,description:`Ustaw role dla oslon okiennych — rolety glowne, zaciemniajace, firanki i zewnetrzne.`},sensor:{title:`Czujniki`,description:`Grupuj kanaly czujnikow wedlug przeznaczenia — srodowisko, bezpieczenstwo, ochrona, jakosc powietrza i energia.`},media:{title:`Multimedia`,description:`Zdefiniuj aktywnosci multimedialne, takie jak ogladanie, sluchanie i granie z routingiem punktow koncowych urzadzen.`}},scenes:{loading:`Ladowanie scen...`,name:`Nazwa sceny`,category:`Kategoria`,status:`Stan`,enabled:`Wlaczona`,disabled:`Wylaczona`,remove:`Usun`,removeHeading:`Usun scene z przestrzeni`,reassign:`Przypisz ponownie`,reassigned:`Scena "{name}" zostala pomyslnie przypisana ponownie.`,selectScene:`Wybierz scene do dodania`,selectSpace:`Wybierz przestrzen dla sceny`,searchPlaceholder:`Szukaj scen...`,confirmRemove:`Usunac scene "{name}" z tej przestrzeni?`,assignedSpace:`Przypisana przestrzen`,noAvailable:`Brak dostepnych scen do dodania`,noFilteredScenes:`Zadne sceny nie pasuja do wyszukiwania`,assigned:`Scena "{name}" zostala przypisana do tej przestrzeni.`,removed:`Scena "{name}" zostala usunieta z tej przestrzeni.`,removeCanceled:`Usuwanie sceny zostalo anulowane.`,empty:`Do tej przestrzeni nie przypisano zadnych scen`,assign:`Przypisz`}},edit:{sections:{smartOverrides:{lightingRoles:`Role oswietlenia`,climateRoles:`Role klimatu`,coversRoles:`Role oslon`,sensorRoles:`Role czujnikow`}}}},"sk-SK":{plugin:{name:`Priestory domáceho ovládania`,description:`Pridáva fyzické miestnosti a zóny s ovládaním osvetlenia, klímy, tienenia, senzorov a médií.`},typeLabels:{room:`Miestnosť`,zone:`Zóna`},lightingRoles:{main:`Hlavné`,task:`Úloha`,ambient:`Atmosférické`,accent:`Akcent`,night:`Nočné`,other:`Iné`,hidden:`Skryté`,unassigned:`Nepriradené`,descriptions:{main:`Hlavné osvetlenie pre priestor, zvyčajne stropové alebo centrálné svetlá pre všeobecné osvetlenie.`,task:`Cielené osvetlenie pre konkrétne činnosti, napríklad čítanie, varenie alebo prácu.`,ambient:`Mäkké podporné osvetlenie vytvárajúce atmosféru a príjemnú náladu.`,accent:`Dekoratívne osvetlenie zvýrazňujúce prvky alebo vytvárajúce vizuálny dojem.`,night:`Nízka hladina osvetlenia pre nočnú orientáciu a bezpečnosť.`,other:`Osvetlenie, ktoré sa nehodí do štandardných kategórií.`,hidden:`Skryté svetlá sú vylúčené z používateľského rozhrania panela a ovládania založeného na úmysloch.`}},climateRoles:{heating_only:`Iba vykurovanie`,cooling_only:`Iba chladenie`,auto:`Automatické`,auxiliary:`Pomocná`,sensor:`Senzor`,hidden:`Skryté`,unassigned:`Nepriradené`,descriptions:{heating_only:`Zariadenie sa používa len na vykurovanie.`,cooling_only:`Zariadenie sa používa len na chladenie.`,auto:`Zariadenie môže byť používané na vykurovanie aj chladenie automaticky.`,auxiliary:`Pomocné klimatizačné zariadenia, napríklad odvlhčovače, zvlhčovače, čističky vzduchu a ventilátory.`,sensor:`Senzor klímy poskytujúci odčítania (teplota, vlhkosť, kvalita vzduchu a pod.) pre priestor.`,hidden:`Skryté zariadenia sú vylúčené z používateľského rozhrania oblasti klímy a ovládania.`}},coversRoles:{primary:`Primárna`,blackout:`Zatienenie`,sheer:`Priehľadná`,outdoor:`Exteriérová`,hidden:`Skrytá`,unassigned:`Nepriradená`,descriptions:{primary:`Hlavné tienidlo pre priestor, zvyčajne používané na všeobecnú súkromnosť a kontrolu svetla.`,blackout:`Zatemňovacie tienidla navrhnuté na úplnú tmu, ideálne pre spálne alebo mediálne miestnosti.`,sheer:`Polopriehľadné tienidla poskytujúce súkromie a zároveň prepúšťajúce prirodzené svetlo.`,outdoor:`Vonkajšie rolety, markízy alebo pergoly na ochranu v exteriéri.`,hidden:`Skryté tienidla sú vylúčené z používateľského rozhrania panela a ovládania založeného na úmysloch.`}},sensorRoles:{environment:`Prostredie`,safety:`Bezpečnosť`,security:`Zabezpečenie`,air_quality:`Kvalita vzduchu`,energy:`Energia`,other:`Iné`,hidden:`Skryté`,descriptions:{environment:`Environmentálne senzory, napríklad teplota, vlhkosť, tlak alebo intenzita svetla.`,safety:`Bezpečnostné senzory, ako dymové, plynové, únikové a detektory oxidu uhoľnatého.`,security:`Bezpečnostné a prítomnostné senzory, ako napríklad senzory pohybu, obsadenosti a kontaktné senzory.`,air_quality:`Senzory kvality vzduchu vrátane CO2, VOC, prachových častíc a iných škodlivín.`,energy:`Senzory monitorovania energie, ako napríklad spotreba energie alebo výkonu.`,other:`Senzory, ktoré sa nehodia do konkrétnej kategórie.`,hidden:`Skryté senzory sú vylúčené z používateľského rozhrania.`},categories:{temperature:`Teplota`,humidity:`Vlhkosť`,pressure:`Tlak`,illuminance:`Svetlosť`,smoke:`Dym`,gas:`Plyn`,carbon_monoxide:`Oxid uhoľnatý`,carbon_dioxide:`Oxid uhličitý`,leak:`Únik`,motion:`Pohyb`,occupancy:`Pobyt`,contact:`Dotyk`,air_quality:`Kvalita vzduchu`,air_particulate:`Prachové častice`,nitrogen_dioxide:`Oxid dusičitý`,ozone:`Ozón`,sulphur_dioxide:`Oxid siričitý`,volatile_organic_compounds:`Prchavé organické látky`,electrical_energy:`Energia`,electrical_generation:`Výroba`,electrical_power:`Výkon`,battery:`Batéria`}},media:{endpointTypes:{display:`Obrazovka`,audio_output:`Zvukový výstup`,source:`Zdroj`,remote_target:`Diaľkový cieľ`},capabilities:{power:`Výkon`,input:`Vstup`,volume:`Hlasitosť`,playback:`Prehrávanie`,track:`Stopa`,remote:`Diaľkové`,mute:`Stlmiť`},activityLabels:{watch:`Sledovať`,listen:`Počúvať`,gaming:`Hranie`,background:`Pozadie`,off:`Vypnuté`},activities:{loading:`Načítava sa konfigurácia médií...`,description:`Priraďte zariadenia zobrazenia, zvuku, zdroja a diaľkového ovládania ku každej mediálnej aktivite. Zmeny sa ukladajú automaticky.`,applyDefaults:`Použiť predvolené`,applyDefaultsHint:`Automaticky priraďuje koncové body podľa typu zariadení a ich schopností.`,defaultsApplied:`Predvolené väzby boli použité.`,defaultsFailed:`Nepodarilo sa použiť predvolené väzby.`,selectPrompt:`Vyberte aktivitu zo zoznamu a nastavte jej väzby.`,selectEndpoint:`Vyberte koncový bod...`,save:`Uložiť`,reset:`Obnoviť`,saveError:`Nepodarilo sa uložiť väzbu.`,savedSuccessfully:`Väzba bola úspešne uložená.`,slots:{display:`Obrazovka`,audio:`Zvukový výstup`,source:`Zdroj`,remote:`Diaľkový cieľ`},overrides:{displayInput:`Predvoľba vstupu displeja`,displayInputPlaceholder:`napr. HDMI1, Aplikácie`,audioInput:`Predvoľba vstupu zvuku`,audioInputPlaceholder:`napr. HDMI1, ARC`,sourceInput:`Predvoľba vstupu zdroja`,sourceInputPlaceholder:`napr. HDMI1, Aplikácie`,audioVolume:`Predvoľba hlasitosti zvuku`},mediaInputSources:{hdmi1:`Vstup HDMI 1`,hdmi2:`Vstup HDMI 2`,hdmi3:`Vstup HDMI 3`,hdmi4:`Vstup HDMI 4`,hdmi5:`Vstup HDMI 5`,hdmi6:`Vstup HDMI 6`,arc:`ARC`,earc:`eARC`,tv:`Televízia`,cable:`Kábel`,satellite:`Satelit`,antenna:`Anténa`,av1:`Vstup AV 1`,av2:`Vstup AV 2`,component:`Komponent`,vga:`VGA`,dvi:`DVI`,usb:`USB`,bluetooth:`Bluetooth`,wifi:`Wi‑Fi`,airplay:`AirPlay`,cast:`Chromecast`,dlna:`DLNA`,miracast:`Miracast`,app_netflix:`Netflix`,app_youtube:`YouTube`,app_spotify:`Spotify`,app_prime_video:`Prime Video`,app_disney_plus:`Disney+`,app_hbo_max:`HBO Max`,app_apple_tv:`Apple TV`,app_plex:`Plex`,app_kodi:`Kodi`,other:`Iné`},status:{configured:`Nakonfigurované`,incomplete:`Nedokončené`,unconfigured:`Nenakonfigurované`},run:`Spustiť`,deactivate:`Deaktivovať`,refreshStatus:`Obnoviť stav`,rerun:`Znova spustiť`,copyDebugJson:`Kopírovať ladicí JSON`,copiedToClipboard:`Ladiaci JSON bol skopírovaný do schránky.`,activateSuccess:`Aktivita bola úspešne aktivovaná.`,activateFailed:`Nepodarilo sa aktivovať aktivitu.`,deactivateSuccess:`Aktivita bola deaktivovaná.`,deactivateFailed:`Nepodarilo sa deaktivovať aktivitu.`,fetchFailed:`Nepodarilo sa obnoviť stav aktivity.`,preview:`Náhľad`,previewFailed:`Nepodarilo sa náhľad aktivity.`,previewDialog:{title:`Náhľad plánu vykonania`,resolvedDevices:`Rozpoznané zariadenia`,executionPlan:`Plán vykonania`,step:`Krok`,action:`Akcia`,device:`Zariadenie`,critical:`Kritické`,criticalYes:`Kritické`,criticalNo:`Voliteľne`,warnings:`Výstrahy a preskočené kroky`,noSteps:`V pláne nie sú kroky vykonania.`,close:`Zatvoriť`},activePanel:{title:`Aktívny stav`,currentActivity:`Aktuálna aktivita`,none:`Žiadne`,state:`Stav`,activatedAt:`Aktivované o`,updatedAt:`Aktualizované o`,resolvedDevices:`Rozpoznané zariadenia`,display:`Obrazovka`,audio:`Zvuk`,source:`Zdroj`,remote:`Diaľkový`},failures:{title:`Neúspechy`,total:`Celkom krokov`,succeeded:`Úspešne`,failed:`Neúspešne`,stepIndex:`Krok`,device:`Zariadenie`,property:`Vlastnosť`,reason:`Dôvod`},activationState:{activating:`Aktivuje sa`,active:`Aktívne`,failed:`Neúspešné`,deactivated:`Deaktivované`}}},dialogs:{lightingRoles:{title:`Upraviť role osvetlenia`},climateRoles:{title:`Upraviť role klímy`},coversRoles:{title:`Upraviť role tienenia`},sensorRoles:{title:`Upraviť role senzorov`},mediaActivities:{title:`Upraviť mediálne aktivity`}},fields:{spaces:{lightingRoles:{title:`Role osvetlenia`,description:`Priraďte role svetlám, aby panel rozumel, ako sa každé svetlo typicky používa (Práca, Uvoľnenie, Noc)`,noLights:`V tejto oblasti sa nenašli žiadne svetlá`,role:{title:`Rola`,placeholder:`Vyberte rolu`},applyDefaults:`Použiť predvolené`,applyDefaultsHint:`Prvné svetlo nastaví ako Hlavné, ostatné ako Ambientné`},climateRoles:{title:`Role klímy`,description:`Priraďte role klimatizačným zariadeniam, aby panel rozumel, ako každé zariadenie reguluje teplotu a kvalitu vzduchu`,noDevices:`V tejto oblasti sa nenašli žiadne klimatické zariadenia`,role:{title:`Rola`,placeholder:`Vyberte rolu`},applyDefaults:`Použiť predvolené`,applyDefaultsHint:`Automaticky priradí role podľa typu zariadenia`},coversRoles:{title:`Role tienenia`,description:`Priraďte role okenným tienidlám, aby panel rozumel, ako sa každé tienidlo používa (primárne, zatemnené, priehľadné)`,noCovers:`V tejto oblasti sa nenašli žiadne tienenia okien`,role:{title:`Rola`,placeholder:`Vyberte rolu`},applyDefaults:`Použiť predvolené`,applyDefaultsHint:`Prvé tienenie nastaví ako Primárne, ostatné podľa typu`},sensorRoles:{title:`Role senzorov`,description:`Priraďte role senzorovým kanálom, aby panel mohol zoskupovať odčítania prostredia, bezpečnosti, ochrany, kvality vzduchu a energie.`,noSensors:`V tejto oblasti sa nenašli žiadne senzory`,channel:{title:`Kanál`},role:{title:`Rola`,placeholder:`Vyberte rolu`},applyDefaults:`Použiť predvolené`,applyDefaultsHint:`Automaticky priradí role podľa kategórie senzorového kanála`}}},detail:{lightingRoles:{title:`Role osvetlenia`,lightsAssigned:`Priradené svetlá`,noRolesAssigned:`Zatiaľ nie sú priradené žiadne role`},climateRoles:{title:`Role klímy`,devicesAssigned:`Priradené zariadenia`,noRolesAssigned:`Zatiaľ nie sú priradené žiadne role`},coversRoles:{title:`Role tienenia`,coversAssigned:`Priradené tiene`,noRolesAssigned:`Zatiaľ nie sú priradené žiadne role`},sensorRoles:{title:`Role senzorov`,sensorsAssigned:`Priradené senzory`,noRolesAssigned:`Zatiaľ nie sú priradené žiadne role`},mediaActivities:{title:`Mediálne aktivity`,noActivities:`Zatiaľ nie sú nakonfigurované žiadne aktivity`},domains:{notConfigured:`Nenakonfigurované`,lighting:{title:`Osvetlenie`,description:`Nastavte, ako sa v tomto priestore používajú svetlá — hlavné, pracovné, ambientné, akcentové a nočné role osvetlenia.`},climate:{title:`Klíma`,description:`Priraďte role vykurovania, chladenia a senzorov ku klimatickým zariadeniam v tomto priestore.`},covers:{title:`Žalúzie`,description:`Nastavte role okenných krytín — primárne, zatemňovacie, záclonové a vonkajšie žalúzie.`},sensor:{title:`Senzory`,description:`Zoskupte senzorové kanály podľa účelu — prostredie, bezpečnosť, zabezpečenie, kvalita vzduchu a energia.`},media:{title:`Médiá`,description:`Definujte mediálne aktivity ako sledovanie, počúvanie a hranie hier so smerovaním koncových bodov zariadení.`}},scenes:{loading:`Načítava sa zoznam scén...`,name:`Názov scény`,category:`Kategória`,status:`Stav`,enabled:`Povolené`,disabled:`Zakázané`,remove:`Odstrániť`,removeHeading:`Odstrániť scénu z priestoru`,reassign:`Prepriradiť`,reassigned:`Scéna "{name}" bola úspešne prepriradená.`,selectScene:`Vyberte scénu na pridanie`,selectSpace:`Vyberte priestor pre scénu`,searchPlaceholder:`Vyhľadať scény...`,confirmRemove:`Odstrániť scénu "{name}" z tohto priestoru?`,assignedSpace:`Priradený priestor`,noAvailable:`Nie sú dostupné žiadne scény na pridanie`,noFilteredScenes:`Žiadne scény sa nezhodujú s hľadaním`,assigned:`Scéna "{name}" bola priradená k tomuto priestoru.`,removed:`Scéna "{name}" bola odstránená z tohto priestoru.`,removeCanceled:`Odstraňovanie scény bolo zrušené.`,empty:`Pre tento priestor nie sú priradené žiadne scény`,assign:`Priradiť`}},edit:{sections:{smartOverrides:{lightingRoles:`Role osvetlenia`,climateRoles:`Role klímy`,coversRoles:`Role tienenia`,sensorRoles:`Role senzorov`}}}}},TR=[{path:`spaces-home-control/configure`,name:Ro.SPACE,component:()=>hr(()=>import(`./view-space-configure-DpiLxtMc.js`),__vite__mapDeps([181,2,3,4,5,6,7,38,23,32,17,15,21,33,133,14,16,18,19,65,20,66,8,42,24,56,55,106,70,71,40,53,52,72,73,74,107,102,134,130,182,11,64,22,132,51,44,109,110,78,103,59,60,61,111,149,183,184])),meta:{guards:{authenticated:!0},title:`Space configuration`,icon:`mdi:home-automation`},children:[{path:`edit`,name:Ro.SPACE_EDIT,component:()=>hr(()=>import(`./view-space-edit-uz1TPncu.js`),__vite__mapDeps([185,2,3,4,11,5,6,19,24,56,106,70,71,40,53,52,72,73,74,107,55,102])),props:!0,meta:{guards:{authenticated:!0},title:`Edit space`,icon:`mdi:pencil-circle`}}]}],ER=Symbol(`FB-Plugin-SpacesHomeControl`),DR={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(wR)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{spacesHomeControlPlugin:n});t.i18n.global.setLocaleMessage(e,r)}let r=t.router.getRoutes().find(e=>e.name===yo.SPACE_PLUGIN);r&&TR.forEach(e=>{t.router.addRoute(yo.SPACE_PLUGIN,e)}),n.addPlugin(ER,{type:Io,source:Lo,name:`Home Control Spaces`,description:`Adds physical Room and Zone spaces with lighting, climate, covers, sensor and media controls. Provides the interactive home-control surface of the Smart Panel.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:Fo.map(e=>({type:e,name:`spacesHomeControlPlugin.typeLabels.${e}`,components:{spaceDetail:Ni,spaceAddForm:Mi,spaceEditForm:Pi,spaceWizard:Po},schemas:{spaceSchema:To,spaceAddFormSchema:Ao,spaceEditFormSchema:ko,spaceCreateReqSchema:Eo,spaceUpdateReqSchema:Do}})),...r?{routes:{configure:e=>t.router.resolve({name:Ro.SPACE,params:{id:e}})}}:{},modules:[bo],isCore:!0})}},OR=`spaces-signage-info-panel`,kR=`spaces-signage-info-panel-plugin`,AR=`com.fastybird.smart-panel.plugin.spaces-signage-info-panel`,jR=[So.SIGNAGE_INFO_PANEL],MR=function(e){return e.CLOCK_WEATHER=`clock_weather`,e.CLOCK_WEATHER_ANNOUNCEMENTS=`clock_weather_announcements`,e.FULL=`full`,e}({}),NR=function(e){return e.ANNOUNCEMENT_CREATED=`SpacesSignageInfoPanelPlugin.Announcement.Created`,e.ANNOUNCEMENT_UPDATED=`SpacesSignageInfoPanelPlugin.Announcement.Updated`,e.ANNOUNCEMENT_DELETED=`SpacesSignageInfoPanelPlugin.Announcement.Deleted`,e}({}),PR={class:`flex items-center gap-2`},FR={class:`font-medium`},IR={class:`px-2`},LR={class:`flex items-center gap-2`},RR={class:`font-medium`},zR={class:`px-2`},BR={class:`text-sm text-gray-500 mb-3`},VR={key:0,class:`flex flex-row gap-2 justify-end items-center mt-4`},HR=k({__name:`signage-info-panel-space-add-form`,props:{type:{},hideActions:{type:Boolean,default:!1}},emits:[`saved`,`cancel`,`update:remote-form-changed`],setup(e,{expose:t,emit:n}){let r=e,a=n,{t:o}=M(),c=Zn(),u=Tn(),d=pn().getStore(Co),{locations:f,fetchLocations:p}=Bo(),m=Object.values(MR),h=j([`general`,`sections`]),_={name:``,description:null,layout:MR.CLOCK_WEATHER_ANNOUNCEMENTS,showClock:!0,showWeather:!0,showAnnouncements:!0,showFeed:!1,weatherLocationId:null,feedUrl:null},v=P({..._}),y=j(null),b=j(!1),x=j({name:[{required:!0,message:o(`spacesModule.fields.spaces.name.validation.required`),trigger:`blur`}],feedUrl:[{type:`url`,message:o(`spacesSignageInfoPanelPlugin.fields.feedUrl.validation.invalid`),trigger:`blur`}]});F(v,()=>{a(`update:remote-form-changed`,!(0,Xd.isEqual)({...v},_))});let S=async()=>{if(!b.value){if(y.value)try{await y.value.validate()}catch{return}b.value=!0;try{let e={id:cn().toString(),type:So.SIGNAGE_INFO_PANEL,name:v.name,description:v.description??null,layout:v.layout,show_clock:v.showClock,show_weather:v.showWeather,show_announcements:v.showAnnouncements,show_feed:v.showFeed,weather_location_id:v.weatherLocationId??null,feed_url:v.feedUrl??null},{data:t,error:n}=await c.client.POST(`/${je}/${xo}/spaces`,{body:{data:e}});if(n||!t){u.error(o(`spacesModule.messages.notCreated`,{space:v.name}));return}let r=wo(t.data);d.onEvent({id:r.id,data:t.data}),u.success(o(`spacesModule.messages.created`,{space:v.name})),a(`saved`,r)}catch{u.error(o(`spacesModule.messages.notCreated`,{space:v.name}))}finally{b.value=!1}}},C=()=>{a(`cancel`)};return le(async()=>{await p()}),t({submit:S}),(e,t)=>(A(),O(L(Ir),{ref_key:`formRef`,ref:y,model:v,rules:x.value,"label-position":`top`,onSubmit:qe(S,[`prevent`])},{default:B(()=>[D(L(ui),{modelValue:h.value,"onUpdate:modelValue":t[9]||=e=>h.value=e},{default:B(()=>[D(L(li),{name:`general`},{title:B(()=>[l(`div`,PR,[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:information-outline`})]),_:1}),l(`span`,FR,z(L(o)(`spacesModule.edit.sections.general.title`)),1)])]),default:B(()=>[l(`div`,IR,[D(L(Z),{label:L(o)(`spacesModule.fields.spaces.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:v.name,"onUpdate:modelValue":t[0]||=e=>v.name=e,placeholder:L(o)(`spacesModule.fields.spaces.name.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesModule.fields.spaces.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:v.description,"onUpdate:modelValue":t[1]||=e=>v.description=e,type:`textarea`,rows:3,placeholder:L(o)(`spacesModule.fields.spaces.description.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.layout.label`),prop:`layout`},{default:B(()=>[D(L(ei),{modelValue:v.layout,"onUpdate:modelValue":t[2]||=e=>v.layout=e},{default:B(()=>[(A(!0),i(V,null,I(L(m),e=>(A(),O(L(ti),{key:e,label:L(o)(`spacesSignageInfoPanelPlugin.fields.layout.options.${e}`),value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1},8,[`label`])])]),_:1}),D(L(li),{name:`sections`},{title:B(()=>[l(`div`,LR,[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:view-grid-outline`})]),_:1}),l(`span`,RR,z(L(o)(`spacesSignageInfoPanelPlugin.fields.sections.title`)),1)])]),default:B(()=>[l(`div`,zR,[l(`p`,BR,z(L(o)(`spacesSignageInfoPanelPlugin.fields.sections.description`)),1),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showClock`)},{default:B(()=>[D(L(Vn),{modelValue:v.showClock,"onUpdate:modelValue":t[3]||=e=>v.showClock=e},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showWeather`)},{default:B(()=>[D(L(Vn),{modelValue:v.showWeather,"onUpdate:modelValue":t[4]||=e=>v.showWeather=e},null,8,[`modelValue`])]),_:1},8,[`label`]),v.showWeather?(A(),O(L(Z),{key:0,label:L(o)(`spacesSignageInfoPanelPlugin.fields.weatherLocation.label`)},{default:B(()=>[D(L(ei),{modelValue:v.weatherLocationId,"onUpdate:modelValue":t[5]||=e=>v.weatherLocationId=e,clearable:``,placeholder:L(o)(`spacesSignageInfoPanelPlugin.fields.weatherLocation.placeholder`)},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showAnnouncements`)},{default:B(()=>[D(L(Vn),{modelValue:v.showAnnouncements,"onUpdate:modelValue":t[6]||=e=>v.showAnnouncements=e},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showFeed`)},{default:B(()=>[D(L(Vn),{modelValue:v.showFeed,"onUpdate:modelValue":t[7]||=e=>v.showFeed=e},null,8,[`modelValue`])]),_:1},8,[`label`]),v.showFeed?(A(),O(L(Z),{key:1,label:L(o)(`spacesSignageInfoPanelPlugin.fields.feedUrl.label`)},{default:B(()=>[D(L(U),{modelValue:v.feedUrl,"onUpdate:modelValue":t[8]||=e=>v.feedUrl=e,placeholder:L(o)(`spacesSignageInfoPanelPlugin.fields.feedUrl.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0)])]),_:1})]),_:1},8,[`modelValue`]),r.hideActions?R(``,!0):(A(),i(`div`,VR,[D(L(Oe),{onClick:C},{default:B(()=>[E(z(L(o)(`spacesModule.buttons.cancel.title`)),1)]),_:1}),D(L(Oe),{type:`primary`,loading:b.value,onClick:S},{default:B(()=>[E(z(L(o)(`spacesModule.buttons.save.title`)),1)]),_:1},8,[`loading`])]))]),_:1},8,[`model`,`rules`]))}}),UR=Symbol(`FB-Plugin-SpacesSignageInfoPanelAnnouncementsStore`),WR={class:`flex flex-col gap-3`},GR={key:0},KR={key:1},qR={key:0},JR={key:1},YR={class:`flex gap-2`},XR={class:`flex gap-2`},ZR=k({__name:`announcements-section`,props:{spaceId:{}},setup(e){let t=e,{t:n}=M(),r=Tn(),a=pn().getStore(UR),o=p(()=>a.listForSpace(t.spaceId)),c=j(!1),u=j(!1),d=j(null),f=()=>({title:``,body:null,icon:null,priority:0,order:0,activeFrom:null,activeUntil:null}),m=P(f()),h=()=>{Object.assign(m,f())},_=()=>{d.value=null,h(),c.value=!0},v=e=>{d.value=e,m.title=e.title,m.body=e.body,m.icon=e.icon,m.priority=e.priority,m.order=e.order,m.activeFrom=e.activeFrom,m.activeUntil=e.activeUntil,c.value=!0},y=async e=>{try{await gt.confirm(n(`spacesSignageInfoPanelPlugin.announcements.messages.confirmDelete`),n(`spacesSignageInfoPanelPlugin.announcements.actions.delete`),{type:`warning`})}catch{return}try{await a.remove(t.spaceId,e.id),r.success(n(`spacesSignageInfoPanelPlugin.announcements.messages.deleted`))}catch{r.error(n(`spacesSignageInfoPanelPlugin.announcements.messages.deleteFailed`))}},b=async()=>{if(m.title.trim()&&!u.value){u.value=!0;try{d.value?(await a.update(t.spaceId,d.value.id,{title:m.title,body:m.body,icon:m.icon,priority:m.priority,order:m.order,activeFrom:m.activeFrom,activeUntil:m.activeUntil}),r.success(n(`spacesSignageInfoPanelPlugin.announcements.messages.updated`))):(await a.create(t.spaceId,{title:m.title,body:m.body,icon:m.icon,priority:m.priority,order:m.order,activeFrom:m.activeFrom,activeUntil:m.activeUntil}),r.success(n(`spacesSignageInfoPanelPlugin.announcements.messages.created`))),c.value=!1}catch{r.error(n(`spacesSignageInfoPanelPlugin.announcements.messages.saveFailed`))}finally{u.value=!1}}},x=e=>e.toLocaleString();return pe(async()=>{try{await a.fetch(t.spaceId)}catch{}}),(e,t)=>(A(),i(`div`,WR,[o.value.length===0?(A(),O(L(Q),{key:0,title:L(n)(`spacesSignageInfoPanelPlugin.announcements.empty`),type:`info`,closable:!1,"show-icon":``},null,8,[`title`])):(A(),O(L(Pr),{key:1,data:o.value,stripe:``,size:`small`},{default:B(()=>[D(L(Mr),{prop:`title`,label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.title`)},null,8,[`label`]),D(L(Mr),{prop:`priority`,width:`90`,label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.priority`)},null,8,[`label`]),D(L(Mr),{prop:`order`,width:`80`,label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.order`)},null,8,[`label`]),D(L(Mr),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.activeFrom`),width:`180`},{default:B(({row:e})=>[e.activeFrom?(A(),i(`span`,GR,z(x(e.activeFrom)),1)):(A(),i(`span`,KR,`—`))]),_:1},8,[`label`]),D(L(Mr),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.activeUntil`),width:`180`},{default:B(({row:e})=>[e.activeUntil?(A(),i(`span`,qR,z(x(e.activeUntil)),1)):(A(),i(`span`,JR,`—`))]),_:1},8,[`label`]),D(L(Mr),{width:`150`,align:`right`},{default:B(({row:e})=>[D(L(Oe),{size:`small`,onClick:t=>v(e)},{default:B(()=>[E(z(L(n)(`spacesSignageInfoPanelPlugin.announcements.actions.edit`)),1)]),_:1},8,[`onClick`]),D(L(Oe),{size:`small`,type:`danger`,onClick:t=>y(e)},{default:B(()=>[E(z(L(n)(`spacesSignageInfoPanelPlugin.announcements.actions.delete`)),1)]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),D(L(Oe),{type:`primary`,plain:``,onClick:_},{default:B(()=>[D(L(g),{class:`mr-1`},{default:B(()=>[D(L(s),{icon:`mdi:plus`})]),_:1}),E(` `+z(L(n)(`spacesSignageInfoPanelPlugin.announcements.add`)),1)]),_:1}),D(L(di),{modelValue:c.value,"onUpdate:modelValue":t[8]||=e=>c.value=e,title:d.value?L(n)(`spacesSignageInfoPanelPlugin.announcements.actions.edit`):L(n)(`spacesSignageInfoPanelPlugin.announcements.add`),width:`520`},{footer:B(()=>[D(L(Oe),{onClick:t[7]||=e=>c.value=!1},{default:B(()=>[E(z(L(n)(`spacesSignageInfoPanelPlugin.announcements.actions.cancel`)),1)]),_:1}),D(L(Oe),{type:`primary`,loading:u.value,onClick:b},{default:B(()=>[E(z(L(n)(`spacesSignageInfoPanelPlugin.announcements.actions.save`)),1)]),_:1},8,[`loading`])]),default:B(()=>[D(L(Ir),{model:m,"label-position":`top`,onSubmit:qe(b,[`prevent`])},{default:B(()=>[D(L(Z),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.title`),required:``},{default:B(()=>[D(L(U),{modelValue:m.title,"onUpdate:modelValue":t[0]||=e=>m.title=e},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.body`)},{default:B(()=>[D(L(U),{modelValue:m.body,"onUpdate:modelValue":t[1]||=e=>m.body=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.icon`)},{default:B(()=>[D(L(U),{modelValue:m.icon,"onUpdate:modelValue":t[2]||=e=>m.icon=e,placeholder:`mdi:information`},null,8,[`modelValue`])]),_:1},8,[`label`]),l(`div`,YR,[D(L(Z),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.priority`),class:`flex-1`},{default:B(()=>[D(L(Qr),{modelValue:m.priority,"onUpdate:modelValue":t[3]||=e=>m.priority=e,min:0},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.order`),class:`flex-1`},{default:B(()=>[D(L(Qr),{modelValue:m.order,"onUpdate:modelValue":t[4]||=e=>m.order=e,min:0},null,8,[`modelValue`])]),_:1},8,[`label`])]),l(`div`,XR,[D(L(Z),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.activeFrom`),class:`flex-1`},{default:B(()=>[D(L(zd),{modelValue:m.activeFrom,"onUpdate:modelValue":t[5]||=e=>m.activeFrom=e,type:`datetime`,clearable:``},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(n)(`spacesSignageInfoPanelPlugin.announcements.fields.activeUntil`),class:`flex-1`},{default:B(()=>[D(L(zd),{modelValue:m.activeUntil,"onUpdate:modelValue":t[6]||=e=>m.activeUntil=e,type:`datetime`,clearable:``},null,8,[`modelValue`])]),_:1},8,[`label`])])]),_:1},8,[`model`])]),_:1},8,[`modelValue`,`title`])]))}}),QR={class:`flex items-center gap-2`},$R={class:`font-medium`},ez={class:`px-2`},tz={class:`flex items-center gap-2`},nz={class:`font-medium`},rz={class:`px-2`},iz={class:`text-sm text-gray-500 mb-3`},az={class:`flex items-center gap-2`},oz={class:`font-medium`},sz={class:`px-2`},cz={key:1,class:`flex flex-row gap-2 justify-end items-center mt-4`},lz=k({__name:`signage-info-panel-space-edit-form`,props:{space:{},hideActions:{type:Boolean,default:!1}},emits:[`saved`,`cancel`,`update:remote-form-changed`],setup(e,{expose:t,emit:n}){let r=e,a=n,{t:o}=M(),c=Zn(),u=Tn(),d=pn().getStore(Co),{locations:f,fetchLocations:m}=Bo(),h=Object.values(MR),_=j([`general`,`sections`,`announcements`]),v=P({name:r.space.name,description:r.space.description,layout:MR.CLOCK_WEATHER_ANNOUNCEMENTS,showClock:!0,showWeather:!0,showAnnouncements:!0,showFeed:!1,weatherLocationId:null,feedUrl:null}),y=j(null),b=j(!1),x=j({...v}),S=j(!1),C=j(!1),w=p(()=>({name:[{required:!0,message:o(`spacesModule.fields.spaces.name.validation.required`),trigger:`blur`}],feedUrl:[{type:`url`,message:o(`spacesSignageInfoPanelPlugin.fields.feedUrl.validation.invalid`),trigger:`blur`}]})),T=p(()=>C.value&&!S.value),ee=p(()=>x.value?Object.keys(v).some(e=>{let t=e;return v[t]!==x.value[t]}):!1);F(ee,e=>{a(`update:remote-form-changed`,e)});let te=e=>{C.value=!0,!ee.value&&(v.name=e.name??r.space.name,v.description=e.description??null,v.layout=e.layout??MR.CLOCK_WEATHER_ANNOUNCEMENTS,v.showClock=e.show_clock??!0,v.showWeather=e.show_weather??!0,v.showAnnouncements=e.show_announcements??!0,v.showFeed=e.show_feed??!1,v.weatherLocationId=e.weather_location_id??null,v.feedUrl=e.feed_url??null,x.value={...v})},ne=async()=>{S.value=!1;try{let{data:e,error:t}=await c.client.GET(`/${je}/${xo}/spaces/{id}`,{params:{path:{id:r.space.id}}});if(t||!e){S.value=!0,u.error(o(`spacesModule.messages.notFound`));return}te(e.data)}catch{S.value=!0,u.error(o(`spacesModule.messages.notFound`))}},re=async()=>{if(!b.value&&T.value){if(y.value)try{await y.value.validate()}catch{return}b.value=!0;try{let e={name:v.name,description:v.description??null,layout:v.layout,show_clock:v.showClock,show_weather:v.showWeather,show_announcements:v.showAnnouncements,show_feed:v.showFeed,weather_location_id:v.weatherLocationId??null,feed_url:v.feedUrl??null},{data:t,error:n}=await c.client.PATCH(`/${je}/${xo}/spaces/{id}`,{params:{path:{id:r.space.id}},body:{data:e}});if(n||!t){u.error(o(`spacesModule.messages.notEdited`,{space:r.space.name}));return}te(t.data);let i={...r.space,name:v.name,description:v.description};d.set({id:r.space.id,data:{name:i.name,description:i.description}}),a(`saved`,i)}catch{u.error(o(`spacesModule.messages.notEdited`,{space:r.space.name}))}finally{b.value=!1}}},k=()=>{a(`cancel`)};return le(async()=>{await Promise.all([ne(),m()])}),t({submit:re}),(e,t)=>(A(),O(L(Ir),{ref_key:`formRef`,ref:y,model:v,rules:w.value,"label-position":`top`,onSubmit:qe(re,[`prevent`])},{default:B(()=>[D(L(ui),{modelValue:_.value,"onUpdate:modelValue":t[9]||=e=>_.value=e},{default:B(()=>[D(L(li),{name:`general`},{title:B(()=>[l(`div`,QR,[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:information-outline`})]),_:1}),l(`span`,$R,z(L(o)(`spacesModule.edit.sections.general.title`)),1)])]),default:B(()=>[l(`div`,ez,[D(L(Z),{label:L(o)(`spacesModule.fields.spaces.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:v.name,"onUpdate:modelValue":t[0]||=e=>v.name=e},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesModule.fields.spaces.description.title`),prop:`description`},{default:B(()=>[D(L(U),{modelValue:v.description,"onUpdate:modelValue":t[1]||=e=>v.description=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.layout.label`),prop:`layout`},{default:B(()=>[D(L(ei),{modelValue:v.layout,"onUpdate:modelValue":t[2]||=e=>v.layout=e},{default:B(()=>[(A(!0),i(V,null,I(L(h),e=>(A(),O(L(ti),{key:e,label:L(o)(`spacesSignageInfoPanelPlugin.fields.layout.options.${e}`),value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1},8,[`label`])])]),_:1}),D(L(li),{name:`sections`},{title:B(()=>[l(`div`,tz,[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:view-grid-outline`})]),_:1}),l(`span`,nz,z(L(o)(`spacesSignageInfoPanelPlugin.fields.sections.title`)),1)])]),default:B(()=>[l(`div`,rz,[l(`p`,iz,z(L(o)(`spacesSignageInfoPanelPlugin.fields.sections.description`)),1),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showClock`)},{default:B(()=>[D(L(Vn),{modelValue:v.showClock,"onUpdate:modelValue":t[3]||=e=>v.showClock=e},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showWeather`)},{default:B(()=>[D(L(Vn),{modelValue:v.showWeather,"onUpdate:modelValue":t[4]||=e=>v.showWeather=e},null,8,[`modelValue`])]),_:1},8,[`label`]),v.showWeather?(A(),O(L(Z),{key:0,label:L(o)(`spacesSignageInfoPanelPlugin.fields.weatherLocation.label`)},{default:B(()=>[D(L(ei),{modelValue:v.weatherLocationId,"onUpdate:modelValue":t[5]||=e=>v.weatherLocationId=e,clearable:``,placeholder:L(o)(`spacesSignageInfoPanelPlugin.fields.weatherLocation.placeholder`)},{default:B(()=>[(A(!0),i(V,null,I(L(f),e=>(A(),O(L(ti),{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showAnnouncements`)},{default:B(()=>[D(L(Vn),{modelValue:v.showAnnouncements,"onUpdate:modelValue":t[6]||=e=>v.showAnnouncements=e},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(o)(`spacesSignageInfoPanelPlugin.fields.sections.showFeed`)},{default:B(()=>[D(L(Vn),{modelValue:v.showFeed,"onUpdate:modelValue":t[7]||=e=>v.showFeed=e},null,8,[`modelValue`])]),_:1},8,[`label`]),v.showFeed?(A(),O(L(Z),{key:1,label:L(o)(`spacesSignageInfoPanelPlugin.fields.feedUrl.label`)},{default:B(()=>[D(L(U),{modelValue:v.feedUrl,"onUpdate:modelValue":t[8]||=e=>v.feedUrl=e,placeholder:L(o)(`spacesSignageInfoPanelPlugin.fields.feedUrl.placeholder`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0)])]),_:1}),D(L(li),{name:`announcements`},{title:B(()=>[l(`div`,az,[D(L(g),{size:20},{default:B(()=>[D(L(s),{icon:`mdi:message-text-outline`})]),_:1}),l(`span`,oz,z(L(o)(`spacesSignageInfoPanelPlugin.announcements.heading`)),1)])]),default:B(()=>[l(`div`,sz,[D(ZR,{"space-id":r.space.id},null,8,[`space-id`])])]),_:1})]),_:1},8,[`modelValue`]),S.value?(A(),O(L(Q),{key:0,type:`error`,closable:!1,title:L(o)(`spacesModule.messages.notFound`),"show-icon":``,class:`!my-2`},null,8,[`title`])):R(``,!0),r.hideActions?R(``,!0):(A(),i(`div`,cz,[D(L(Oe),{onClick:k},{default:B(()=>[E(z(L(o)(`spacesModule.buttons.cancel.title`)),1)]),_:1}),D(L(Oe),{type:`primary`,loading:b.value,disabled:!T.value,onClick:re},{default:B(()=>[E(z(L(o)(`spacesModule.buttons.save.title`)),1)]),_:1},8,[`loading`,`disabled`])]))]),_:1},8,[`model`,`rules`]))}}),uz={"cs-CZ":{plugin:{name:`Informační panel`,description:`Informační obrazovka pouze pro zobrazení s hodinami, počasím, oznámeními a volitelným externím zdrojem.`},spaceType:{label:`Informační panel (signage)`},fields:{layout:{label:`Rozvržení`,options:{clock_weather:`Hodiny + počasí`,clock_weather_announcements:`Hodiny + počasí + oznámení`,full:`Úplné (všechny sekce)`}},sections:{title:`Sekce`,description:`Zapněte nebo vypněte jednotlivé sekce panelu.`,showClock:`Hodiny`,showWeather:`Počasí`,showAnnouncements:`Oznámení`,showFeed:`Externí zdroj`},weatherLocation:{label:`Lokalita počasí`,placeholder:`Vyberte lokalitu počasí`},feedUrl:{label:`URL zdroje`,placeholder:`https://…`,validation:{invalid:`Zadejte prosím platnou adresu URL (včetně protokolu, např. https://).`}}},announcements:{heading:`Oznámení`,empty:`Žádná oznámení. Přidejte první níže.`,add:`Přidat oznámení`,fields:{title:`Název`,body:`Text`,icon:`Ikona`,priority:`Priorita`,order:`Pořadí`,activeFrom:`Aktivní od`,activeUntil:`Aktivní do`},actions:{save:`Uložit`,edit:`Upravit`,delete:`Smazat`,cancel:`Zrušit`},messages:{created:`Oznámení vytvořeno.`,updated:`Oznámení upraveno.`,deleted:`Oznámení smazáno.`,saveFailed:`Uložení oznámení selhalo.`,deleteFailed:`Smazání oznámení selhalo.`,confirmDelete:`Smazat toto oznámení?`}}},"de-DE":{plugin:{name:`Informations-Signage`,description:`Nur-Lese-Vollbild-Signage mit Uhr, Wetter, Ankündigungen und optionalem externen Feed.`},spaceType:{label:`Informationspanel (Signage)`},fields:{layout:{label:`Layout`,options:{clock_weather:`Uhr + Wetter`,clock_weather_announcements:`Uhr + Wetter + Ankündigungen`,full:`Vollständig (alle Bereiche)`}},sections:{title:`Bereiche`,description:`Einzelne Bereiche des Panels aktivieren oder deaktivieren.`,showClock:`Uhr`,showWeather:`Wetter`,showAnnouncements:`Ankündigungen`,showFeed:`Externer Feed`},weatherLocation:{label:`Wetterstandort`,placeholder:`Wetterstandort auswählen`},feedUrl:{label:`Feed-URL`,placeholder:`https://…`,validation:{invalid:`Bitte geben Sie eine gültige URL ein (einschließlich Schema, z. B. https://).`}}},announcements:{heading:`Ankündigungen`,empty:`Noch keine Ankündigungen. Unten hinzufügen.`,add:`Ankündigung hinzufügen`,fields:{title:`Titel`,body:`Inhalt`,icon:`Symbol`,priority:`Priorität`,order:`Reihenfolge`,activeFrom:`Aktiv ab`,activeUntil:`Aktiv bis`},actions:{save:`Speichern`,edit:`Bearbeiten`,delete:`Löschen`,cancel:`Abbrechen`},messages:{created:`Ankündigung erstellt.`,updated:`Ankündigung aktualisiert.`,deleted:`Ankündigung gelöscht.`,saveFailed:`Ankündigung konnte nicht gespeichert werden.`,deleteFailed:`Ankündigung konnte nicht gelöscht werden.`,confirmDelete:`Diese Ankündigung löschen?`}}},"en-US":{plugin:{name:`Information Panel Signage`,description:`Read-only, full-screen signage surface with clock, weather, announcements, and optional external feed.`},spaceType:{label:`Information Panel (signage)`},fields:{layout:{label:`Layout`,options:{clock_weather:`Clock + weather`,clock_weather_announcements:`Clock + weather + announcements`,full:`Full (all sections)`}},sections:{title:`Sections`,description:`Enable or disable each section of the panel.`,showClock:`Clock`,showWeather:`Weather`,showAnnouncements:`Announcements`,showFeed:`External feed`},weatherLocation:{label:`Weather location`,placeholder:`Select a weather location`},feedUrl:{label:`Feed URL`,placeholder:`https://…`,validation:{invalid:`Please enter a valid URL (including the scheme, e.g. https://).`}}},announcements:{heading:`Announcements`,empty:`No announcements yet. Add one below.`,add:`Add announcement`,fields:{title:`Title`,body:`Body`,icon:`Icon`,priority:`Priority`,order:`Order`,activeFrom:`Active from`,activeUntil:`Active until`},actions:{save:`Save`,edit:`Edit`,delete:`Delete`,cancel:`Cancel`},messages:{created:`Announcement created.`,updated:`Announcement updated.`,deleted:`Announcement deleted.`,saveFailed:`Failed to save announcement.`,deleteFailed:`Failed to delete announcement.`,confirmDelete:`Delete this announcement?`}}},"es-ES":{plugin:{name:`Panel de información (signage)`,description:`Pantalla de señalización de solo lectura con reloj, tiempo, anuncios y feed externo opcional.`},spaceType:{label:`Panel de información (signage)`},fields:{layout:{label:`Diseño`,options:{clock_weather:`Reloj + tiempo`,clock_weather_announcements:`Reloj + tiempo + anuncios`,full:`Completo (todas las secciones)`}},sections:{title:`Secciones`,description:`Activa o desactiva cada sección del panel.`,showClock:`Reloj`,showWeather:`Tiempo`,showAnnouncements:`Anuncios`,showFeed:`Feed externo`},weatherLocation:{label:`Ubicación del tiempo`,placeholder:`Selecciona una ubicación`},feedUrl:{label:`URL del feed`,placeholder:`https://…`,validation:{invalid:`Introduzca una URL válida (incluido el esquema, p. ej. https://).`}}},announcements:{heading:`Anuncios`,empty:`No hay anuncios todavía. Añade uno abajo.`,add:`Añadir anuncio`,fields:{title:`Título`,body:`Texto`,icon:`Icono`,priority:`Prioridad`,order:`Orden`,activeFrom:`Activo desde`,activeUntil:`Activo hasta`},actions:{save:`Guardar`,edit:`Editar`,delete:`Eliminar`,cancel:`Cancelar`},messages:{created:`Anuncio creado.`,updated:`Anuncio actualizado.`,deleted:`Anuncio eliminado.`,saveFailed:`No se pudo guardar el anuncio.`,deleteFailed:`No se pudo eliminar el anuncio.`,confirmDelete:`¿Eliminar este anuncio?`}}},"pl-PL":{plugin:{name:`Panel informacyjny (signage)`,description:`Ekran informacyjny tylko do odczytu z zegarem, pogodą, ogłoszeniami i opcjonalnym zewnętrznym źródłem.`},spaceType:{label:`Panel informacyjny (signage)`},fields:{layout:{label:`Układ`,options:{clock_weather:`Zegar + pogoda`,clock_weather_announcements:`Zegar + pogoda + ogłoszenia`,full:`Pełny (wszystkie sekcje)`}},sections:{title:`Sekcje`,description:`Włącz lub wyłącz poszczególne sekcje panelu.`,showClock:`Zegar`,showWeather:`Pogoda`,showAnnouncements:`Ogłoszenia`,showFeed:`Zewnętrzne źródło`},weatherLocation:{label:`Lokalizacja pogody`,placeholder:`Wybierz lokalizację`},feedUrl:{label:`URL źródła`,placeholder:`https://…`,validation:{invalid:`Wprowadź prawidłowy adres URL (wraz z protokołem, np. https://).`}}},announcements:{heading:`Ogłoszenia`,empty:`Brak ogłoszeń. Dodaj pierwsze poniżej.`,add:`Dodaj ogłoszenie`,fields:{title:`Tytuł`,body:`Treść`,icon:`Ikona`,priority:`Priorytet`,order:`Kolejność`,activeFrom:`Aktywne od`,activeUntil:`Aktywne do`},actions:{save:`Zapisz`,edit:`Edytuj`,delete:`Usuń`,cancel:`Anuluj`},messages:{created:`Ogłoszenie utworzone.`,updated:`Ogłoszenie zaktualizowane.`,deleted:`Ogłoszenie usunięte.`,saveFailed:`Nie udało się zapisać ogłoszenia.`,deleteFailed:`Nie udało się usunąć ogłoszenia.`,confirmDelete:`Usunąć to ogłoszenie?`}}},"sk-SK":{plugin:{name:`Informačný panel (signage)`,description:`Informačná obrazovka len na čítanie s hodinami, počasím, oznámeniami a voliteľným externým zdrojom.`},spaceType:{label:`Informačný panel (signage)`},fields:{layout:{label:`Rozloženie`,options:{clock_weather:`Hodiny + počasie`,clock_weather_announcements:`Hodiny + počasie + oznámenia`,full:`Úplné (všetky sekcie)`}},sections:{title:`Sekcie`,description:`Zapnite alebo vypnite jednotlivé sekcie panela.`,showClock:`Hodiny`,showWeather:`Počasie`,showAnnouncements:`Oznámenia`,showFeed:`Externý zdroj`},weatherLocation:{label:`Lokalita počasia`,placeholder:`Vyberte lokalitu počasia`},feedUrl:{label:`URL zdroja`,placeholder:`https://…`,validation:{invalid:`Zadajte prosím platnú URL adresu (vrátane protokolu, napr. https://).`}}},announcements:{heading:`Oznámenia`,empty:`Žiadne oznámenia. Pridajte prvé nižšie.`,add:`Pridať oznámenie`,fields:{title:`Názov`,body:`Text`,icon:`Ikona`,priority:`Priorita`,order:`Poradie`,activeFrom:`Aktívne od`,activeUntil:`Aktívne do`},actions:{save:`Uložiť`,edit:`Upraviť`,delete:`Zmazať`,cancel:`Zrušiť`},messages:{created:`Oznámenie vytvorené.`,updated:`Oznámenie aktualizované.`,deleted:`Oznámenie zmazané.`,saveFailed:`Uloženie oznámenia zlyhalo.`,deleteFailed:`Zmazanie oznámenia zlyhalo.`,confirmDelete:`Zmazať toto oznámenie?`}}}},dz=e=>({id:e.id,spaceId:e.space_id,order:e.order??0,title:e.title,body:e.body??null,icon:e.icon??null,activeFrom:e.active_from?new Date(e.active_from):null,activeUntil:e.active_until?new Date(e.active_until):null,priority:e.priority??0,createdAt:new Date(e.created_at),updatedAt:e.updated_at?new Date(e.updated_at):null}),fz=e=>{let t={title:e.title};return`body`in e&&(t.body=e.body),`icon`in e&&(t.icon=e.icon),e.order!==void 0&&(t.order=e.order),e.priority!==void 0&&(t.priority=e.priority),`activeFrom`in e&&(t.active_from=e.activeFrom?e.activeFrom.toISOString():null),`activeUntil`in e&&(t.active_until=e.activeUntil?e.activeUntil.toISOString():null),t},pz=e=>{let t={};return e.title!==void 0&&(t.title=e.title),`body`in e&&(t.body=e.body),`icon`in e&&(t.icon=e.icon),e.order!==void 0&&(t.order=e.order),e.priority!==void 0&&(t.priority=e.priority),`activeFrom`in e&&(t.active_from=e.activeFrom?e.activeFrom.toISOString():null),`activeUntil`in e&&(t.active_until=e.activeUntil?e.activeUntil.toISOString():null),t},mz=jn(`spaces_signage_info_panel_plugin-announcements`,()=>{let e=Zn(),t=On(),n=j({}),r=j([]),i=j([]),a=e=>{n.value[e.id]=e};return{data:n,fetching:r,saving:i,fetch:async t=>{if(r.value.includes(t))return Object.values(n.value).filter(e=>e.spaceId===t);r.value.push(t);try{let{data:r,error:i}=await e.client.GET(`/${Ie}/${OR}/spaces/{spaceId}/announcements`,{params:{path:{spaceId:t}}});if(i||!r)throw Error(`Failed to fetch announcements`);for(let e of Object.values(n.value))e.spaceId===t&&delete n.value[e.id];let o=(r.data??[]).map(e=>dz(e));for(let e of o)a(e);return o}finally{r.value=r.value.filter(e=>e!==t)}},listForSpace:e=>Object.values(n.value).filter(t=>t.spaceId===e).sort((e,t)=>t.priority===e.priority?e.order===t.order?e.createdAt.getTime()-t.createdAt.getTime():e.order-t.order:t.priority-e.priority),create:async(n,r)=>{let{data:i,error:o}=await e.client.POST(`/${Ie}/${OR}/spaces/{spaceId}/announcements`,{params:{path:{spaceId:n}},body:{data:fz(r)}});if(o||!i)throw t.error(`[SPACES SIGNAGE INFO PANEL][ANNOUNCEMENTS STORE] Failed to create announcement`,{error:o}),Error(`Failed to create announcement`);let s=dz(i.data);return a(s),s},update:async(n,r,o)=>{i.value.push(r);try{let{data:i,error:s}=await e.client.PATCH(`/${Ie}/${OR}/spaces/{spaceId}/announcements/{id}`,{params:{path:{spaceId:n,id:r}},body:{data:pz(o)}});if(s||!i)throw t.error(`[SPACES SIGNAGE INFO PANEL][ANNOUNCEMENTS STORE] Failed to update announcement`,{error:s}),Error(`Failed to update announcement`);let c=dz(i.data);return a(c),c}finally{i.value=i.value.filter(e=>e!==r)}},remove:async(r,i)=>{let{error:a}=await e.client.DELETE(`/${Ie}/${OR}/spaces/{spaceId}/announcements/{id}`,{params:{path:{spaceId:r,id:i}}});if(a)throw t.error(`[SPACES SIGNAGE INFO PANEL][ANNOUNCEMENTS STORE] Failed to remove announcement`,{error:a}),Error(`Failed to delete announcement`);delete n.value[i]},reorder:async(r,i)=>{let{data:o,error:s}=await e.client.POST(`/${Ie}/${OR}/spaces/{spaceId}/announcements/reorder`,{params:{path:{spaceId:r}},body:{data:{items:i}}});if(s||!o)throw t.error(`[SPACES SIGNAGE INFO PANEL][ANNOUNCEMENTS STORE] Failed to reorder announcements`,{error:s}),Error(`Failed to reorder announcements`);let c=(o.data??[]).map(e=>dz(e));for(let e of Object.values(n.value))e.spaceId===r&&delete n.value[e.id];for(let e of c)a(e);return c},onEvent:e=>{a(e)},unset:e=>{delete n.value[e]}}}),hz=e=>mz(e),gz=Symbol(`FB-Plugin-SpacesSignageInfoPanel`),_z={install:(e,t)=>{let n=ra(e),r=pn(e),i=ut(e),a=_r(e);for(let[e,n]of Object.entries(uz)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{spacesSignageInfoPanelPlugin:n});t.i18n.global.setLocaleMessage(e,r)}let o=hz(t.store);e.provide(UR,o),r.addStore(UR,o),n.addPlugin(gz,{type:kR,source:AR,name:`Information Panel Signage`,description:`Read-only, full-screen signage surface with clock, weather, announcements, and optional external feed.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:jR.map(e=>({type:e,name:`spacesSignageInfoPanelPlugin.spaceType.label`,components:{spaceAddForm:HR,spaceEditForm:lz},schemas:{spaceSchema:To}})),modules:[bo],isCore:!0}),i.on(`event`,e=>{if(!e?.event?.startsWith(`SpacesSignageInfoPanelPlugin`))return;let t=e.payload;if(!(typeof t!=`object`||!t||typeof t.id!=`string`))switch(e.event){case NR.ANNOUNCEMENT_CREATED:case NR.ANNOUNCEMENT_UPDATED:{let n=t.space_id??t.spaceId;if(typeof n!=`string`||n.length===0){a.warn(`spaces-signage-info-panel event missing space id, dropping:`,e.event);return}o.onEvent({id:t.id,spaceId:n,order:typeof t.order==`number`?t.order:0,title:typeof t.title==`string`?t.title:``,body:typeof t.body==`string`?t.body:null,icon:typeof t.icon==`string`?t.icon:null,activeFrom:typeof t.active_from==`string`?new Date(t.active_from):null,activeUntil:typeof t.active_until==`string`?new Date(t.active_until):null,priority:typeof t.priority==`number`?t.priority:0,createdAt:typeof t.created_at==`string`?new Date(t.created_at):new Date,updatedAt:typeof t.updated_at==`string`?new Date(t.updated_at):null});break}case NR.ANNOUNCEMENT_DELETED:o.unset(t.id);break;default:a.warn(`Unhandled spaces-signage-info-panel event:`,e.event)}})}},vz={"cs-CZ":{plugin:{name:`Vstupní prostor`,description:`Přidává jedinečný syntetický prostor Vstup — plochu pro zabezpečení / vstupní dveře, která zobrazuje stav zabezpečení a kontrolu přístupu.`},typeLabels:{entry:`Vstup / zabezpečení`}},"de-DE":{plugin:{name:`Eingangsbereich`,description:`Fügt den Singleton-Eingangs-Synthetikraum hinzu — die Sicherheits- / Eingangsoberfläche, die den Scharfschaltzustand und die Zugriffskontrolle anzeigt.`},typeLabels:{entry:`Eingang / Sicherheit`}},"en-US":{plugin:{name:`Entry Space`,description:`Contributes the singleton Entry synthetic space — the security / front-door surface that surfaces arming state and access control.`},typeLabels:{entry:`Entry / security`}},"es-ES":{plugin:{name:`Espacio de entrada`,description:`Contribuye el espacio sintético único Entrada, la superficie de seguridad / puerta de entrada que muestra el estado de armado y el control de acceso.`},typeLabels:{entry:`Entrada / seguridad`}},"pl-PL":{plugin:{name:`Przestrzeń wejścia`,description:`Udostępnia syntetyczną przestrzeń Wejście — powierzchnię bezpieczeństwa / drzwi wejściowych, która pokazuje stan uzbrojenia i kontrolę dostępu.`},typeLabels:{entry:`Wejście / bezpieczeństwo`}},"sk-SK":{plugin:{name:`Vstupný priestor`,description:`Pridáva jedinečný syntetický priestor Vstup — plochu pre zabezpečenie / vstupné dvere, ktorá zobrazuje stav zabezpečenia a kontrolu prístupu.`},typeLabels:{entry:`Vstup / zabezpečenie`}}},yz=`spaces-synthetic-entry-plugin`,bz=`com.fastybird.smart-panel.plugin.spaces-synthetic-entry`,xz=[So.ENTRY],Sz=Symbol(`FB-Plugin-SpacesSyntheticEntry`),Cz={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(vz)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{spacesSyntheticEntryPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Sz,{type:yz,source:bz,name:`Entry Space`,description:`Contributes the singleton Entry synthetic space — the security / front-door surface that surfaces arming state and access control.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:xz.map(e=>({type:e,name:`spacesSyntheticEntryPlugin.typeLabels.${e}`,components:{},schemas:{spaceSchema:To}})),modules:[bo],isCore:!0})}},wz={"cs-CZ":{plugin:{name:`Hlavní prostor`,description:`Přidává jedinečný syntetický prostor Hlavní — přehledovou plochu celé domácnosti, která agreguje stav napříč všemi místnostmi.`},typeLabels:{master:`Přehled domu (master)`}},"de-DE":{plugin:{name:`Hauptraum`,description:`Fügt den Singleton-Master-Synthetikraum hinzu — die Übersichtsoberfläche für das gesamte Haus, die den Zustand aller Räume zusammenfasst.`},typeLabels:{master:`Hausübersicht (Master)`}},"en-US":{plugin:{name:`Master Space`,description:`Contributes the singleton Master synthetic space — the whole-house overview surface that aggregates state across all rooms.`},typeLabels:{master:`Home overview (master)`}},"es-ES":{plugin:{name:`Espacio principal`,description:`Contribuye el espacio sintético único Principal, la superficie de visión general de toda la casa que agrega el estado de todas las habitaciones.`},typeLabels:{master:`Resumen del hogar (master)`}},"pl-PL":{plugin:{name:`Przestrzeń główna`,description:`Udostępnia syntetyczną przestrzeń Główna — powierzchnię przeglądu całego domu, która agreguje stan wszystkich pokoi.`},typeLabels:{master:`Przegląd domu (master)`}},"sk-SK":{plugin:{name:`Hlavný priestor`,description:`Pridáva jedinečný syntetický priestor Hlavný — prehľadovú plochu celej domácnosti, ktorá agreguje stav naprieč všetkými miestnosťami.`},typeLabels:{master:`Prehľad domu (master)`}}},Tz=`spaces-synthetic-master-plugin`,Ez=`com.fastybird.smart-panel.plugin.spaces-synthetic-master`,Dz=[So.MASTER],Oz=Symbol(`FB-Plugin-SpacesSyntheticMaster`),kz={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(wz)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{spacesSyntheticMasterPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Oz,{type:Tz,source:Ez,name:`Master Space`,description:`Contributes the singleton Master synthetic space — the whole-house overview surface that aggregates state across all rooms.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:Dz.map(e=>({type:e,name:`spacesSyntheticMasterPlugin.typeLabels.${e}`,components:{},schemas:{spaceSchema:To}})),modules:[bo],isCore:!0})}},Az=`tiles-device-preview-plugin`,jz=`tiles-device-preview`,Mz=k({name:`DevicePreviewTileAddForm`,__name:`device-preview-tile-add-form`,props:{id:{},parent:{},parentId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean,default:!1},withPosition:{type:Boolean,default:!0},withSize:{type:Boolean,default:!0}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=ao({id:n.id,type:jz,parent:n.parent,parentId:n.parentId,onlyDraft:n.onlyDraft}),{devices:d,fetchDevices:f,areLoading:m}=fs(),h=P({row:[{required:!0,message:a(`dashboardModule.fields.tiles.row.validation.required`),trigger:`change`}],col:[{required:!0,message:a(`dashboardModule.fields.tiles.col.validation.required`),trigger:`change`}],device:[{required:!0,message:a(`tilesDevicePreviewPlugin.fields.device.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value.filter(e=>!e.hidden),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.tiles.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`pagesDeviceDetailPlugin.fields.device.title`),prop:`device`},{default:B(()=>[D(L(ei),{modelValue:L(o).device,"onUpdate:modelValue":t[1]||=e=>L(o).device=e,placeholder:L(a)(`pagesDeviceDetailPlugin.fields.device.placeholder`),name:`device`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),n.withPosition?(A(),O(L(si),{key:0},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.row.title`),prop:`row`},{default:B(()=>[D(L(Qr),{modelValue:L(o).row,"onUpdate:modelValue":t[2]||=e=>L(o).row=e,placeholder:L(a)(`dashboardModule.fields.tiles.row.placeholder`),name:`row`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.col.title`),prop:`col`},{default:B(()=>[D(L(Qr),{modelValue:L(o).col,"onUpdate:modelValue":t[3]||=e=>L(o).col=e,placeholder:L(a)(`dashboardModule.fields.tiles.col.placeholder`),name:`col`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0),n.withSize?(A(),O(L(si),{key:1},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.rowSpan.title`),prop:`rowSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).rowSpan,"onUpdate:modelValue":t[4]||=e=>L(o).rowSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.rowSpan.placeholder`),name:`rowSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.colSpan.title`),prop:`colSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).colSpan,"onUpdate:modelValue":t[5]||=e=>L(o).colSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.colSpan.placeholder`),name:`colSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),Nz=k({name:`DevicePreviewTileEditForm`,__name:`device-preview-tile-edit-form`,props:{tile:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean,default:!1},withPosition:{type:Boolean,default:!0},withSize:{type:Boolean,default:!0}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=no({tile:n.tile,onlyDraft:n.onlyDraft}),{devices:d,fetchDevices:f,areLoading:m}=fs(),h=P({row:[{required:!0,message:a(`dashboardModule.fields.tiles.row.validation.required`),trigger:`change`}],col:[{required:!0,message:a(`dashboardModule.fields.tiles.col.validation.required`),trigger:`change`}],device:[{required:!0,message:a(`tilesDevicePreviewPlugin.fields.device.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value.filter(e=>!e.hidden),[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.tiles.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`pagesDeviceDetailPlugin.fields.device.title`),prop:`device`},{default:B(()=>[D(L(ei),{modelValue:L(o).device,"onUpdate:modelValue":t[1]||=e=>L(o).device=e,placeholder:L(a)(`pagesDeviceDetailPlugin.fields.device.placeholder`),name:`device`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),n.withPosition?(A(),O(L(si),{key:0},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.row.title`),prop:`row`},{default:B(()=>[D(L(Qr),{modelValue:L(o).row,"onUpdate:modelValue":t[2]||=e=>L(o).row=e,placeholder:L(a)(`dashboardModule.fields.tiles.row.placeholder`),name:`row`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.col.title`),prop:`col`},{default:B(()=>[D(L(Qr),{modelValue:L(o).col,"onUpdate:modelValue":t[3]||=e=>L(o).col=e,placeholder:L(a)(`dashboardModule.fields.tiles.col.placeholder`),name:`col`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0),n.withSize?(A(),O(L(si),{key:1},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.rowSpan.title`),prop:`rowSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).rowSpan,"onUpdate:modelValue":t[4]||=e=>L(o).rowSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.rowSpan.placeholder`),name:`rowSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.colSpan.title`),prop:`colSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).colSpan,"onUpdate:modelValue":t[5]||=e=>L(o).colSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.colSpan.placeholder`),name:`colSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),Pz={key:0,class:`flex flex-col justify-center min-w-0`},Fz=k({name:`DevicePreviewTilePreview`,__name:`tile-preview`,props:{tile:{}},setup(e){let t=e,{t:n}=M(),r=t.tile.device??null,{device:a,fetchDevice:o}=bs({id:r??``}),{icon:c}=vs({id:r??``}),u=p(()=>t.tile.icon??null),d=p(()=>u.value??c.value??`mdi:devices`),f=p(()=>a.value?.name??n(`tilesDevicePreviewPlugin.preview.defaultName`)),m=p(()=>a.value?a.value.status?.online?n(`tilesDevicePreviewPlugin.preview.statusOnline`):n(`tilesDevicePreviewPlugin.preview.statusOffline`):``),h=p(()=>t.tile.rowSpan===1&&t.tile.colSpan===1),_=p(()=>t.tile.rowSpan===t.tile.colSpan),v=p(()=>_.value?`flex-col items-center justify-center`:`flex-row items-center`),y=p(()=>t.tile.rowSpan>=2?`w-10 h-10`:`w-7 h-7`),b=p(()=>t.tile.rowSpan>=2?22:16);return le(()=>{r&&o().catch(()=>{})}),(e,t)=>(A(),i(`div`,{class:N([`flex h-full w-full p-2 gap-2 overflow-hidden`,v.value])},[l(`div`,{class:N([`flex items-center justify-center rounded-full shrink-0`,y.value]),style:{backgroundColor:`var(--el-color-primary-light-9)`}},[D(L(g),{size:b.value,color:`var(--el-color-primary)`},{default:B(()=>[D(L(s),{icon:d.value},null,8,[`icon`])]),_:1},8,[`size`])],2),h.value?R(``,!0):(A(),i(`div`,Pz,[D(L(zt),{size:`small`,class:`font-bold truncate`},{default:B(()=>[E(z(f.value),1)]),_:1}),D(L(zt),{type:`info`,size:`small`,class:`truncate`},{default:B(()=>[E(z(m.value),1)]),_:1})]))],2))}}),Iz={"cs-CZ":{preview:{defaultName:`Zařízení`,statusOnline:`Online`,statusOffline:`Offline`},fields:{device:{title:`Zařízení`,placeholder:`Zařízení dlaždice`,validation:{required:`Vyberte prosím zařízení dlaždice`}}}},"de-DE":{preview:{defaultName:`Gerät`,statusOnline:`Online`,statusOffline:`Offline`},fields:{device:{title:`Gerät`,placeholder:`Kachel-Gerät`,validation:{required:`Bitte wählen Sie ein Kachel-Gerät`}}}},"en-US":{preview:{defaultName:`Device`,statusOnline:`Online`,statusOffline:`Offline`},fields:{device:{title:`Device`,placeholder:`Tile device`,validation:{required:`Please select tile device`}}}},"es-ES":{preview:{defaultName:`Dispositivo`,statusOnline:`En línea`,statusOffline:`Desconectado`},fields:{device:{title:`Dispositivo`,placeholder:`Dispositivo del mosaico`,validation:{required:`Por favor, seleccione un dispositivo para el mosaico`}}}},"pl-PL":{preview:{defaultName:`Urządzenie`,statusOnline:`W Internecie`,statusOffline:`Nieaktywny`},fields:{device:{title:`Urządzenie`,placeholder:`Urządzenie kafelka`,validation:{required:`Wybierz urządzenie kafelka`}}}},"sk-SK":{preview:{defaultName:`Zariadenie`,statusOnline:`Online`,statusOffline:`Offline`},fields:{device:{title:`Zariadenie`,placeholder:`Zariadenie dlaždice`,validation:{required:`Prosím vyberte zariadenie dlaždice`}}}}},Lz=Ya.extend({device:X().uuid()}),Rz=eo.extend({device:X().uuid()}),zz=po.extend({device:Ga,icon:X().trim().nullable().default(null)}),Bz=ho.and(K({type:Y(jz),device:X().uuid(),icon:X().trim().nullable()})),Vz=lo.and(K({type:Y(jz),device:X().uuid().optional(),icon:X().trim().nullable().optional()}));fo.and(K({type:Y(jz),device:X().uuid(),icon:X().trim().nullable()}));var Hz=He(Fz),Uz=Symbol(`FB-Plugin-TilesDevicePreview`),Wz={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Iz)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{tilesDevicePreviewPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(Uz,{type:Az,source:`com.fastybird.smart-panel.plugin.tiles-device-preview`,name:`Device Preview Tile`,description:`A compact tile for previewing the state of a device, including icons and key attributes. Ideal for at-a-glance control or status display.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:jz,name:`Device Preview`,components:{tileAddForm:Mz,tileEditForm:Nz,tilePreview:Hz},schemas:{tileSchema:zz,tileAddFormSchema:Lz,tileEditFormSchema:Rz,tileCreateReqSchema:Bz,tileUpdateReqSchema:Vz}}],modules:[Na],isCore:!0})}},Gz=`tiles-scene-plugin`,Kz=`tiles-scene`,qz=k({name:`SceneTileAddForm`,__name:`scene-tile-add-form`,props:{id:{},parent:{},parentId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean,default:!1},withPosition:{type:Boolean,default:!0},withSize:{type:Boolean,default:!0}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=ao({id:n.id,type:Kz,parent:n.parent,parentId:n.parentId,onlyDraft:n.onlyDraft}),{scenes:d,fetchScenes:f,fetching:m}=dc(),h=P({row:[{required:!0,message:a(`dashboardModule.fields.tiles.row.validation.required`),trigger:`change`}],col:[{required:!0,message:a(`dashboardModule.fields.tiles.col.validation.required`),trigger:`change`}],scene:[{required:!0,message:a(`tilesScenePlugin.fields.scene.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value,[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.tiles.id.placeholder`),name:`id`,required:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`tilesScenePlugin.fields.scene.title`),prop:`scene`},{default:B(()=>[D(L(ei),{modelValue:L(o).scene,"onUpdate:modelValue":t[1]||=e=>L(o).scene=e,placeholder:L(a)(`tilesScenePlugin.fields.scene.placeholder`),name:`scene`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),n.withPosition?(A(),O(L(si),{key:0},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.row.title`),prop:`row`},{default:B(()=>[D(L(Qr),{modelValue:L(o).row,"onUpdate:modelValue":t[2]||=e=>L(o).row=e,placeholder:L(a)(`dashboardModule.fields.tiles.row.placeholder`),name:`row`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.col.title`),prop:`col`},{default:B(()=>[D(L(Qr),{modelValue:L(o).col,"onUpdate:modelValue":t[3]||=e=>L(o).col=e,placeholder:L(a)(`dashboardModule.fields.tiles.col.placeholder`),name:`col`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0),n.withSize?(A(),O(L(si),{key:1},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.rowSpan.title`),prop:`rowSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).rowSpan,"onUpdate:modelValue":t[4]||=e=>L(o).rowSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.rowSpan.placeholder`),name:`rowSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.colSpan.title`),prop:`colSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).colSpan,"onUpdate:modelValue":t[5]||=e=>L(o).colSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.colSpan.placeholder`),name:`colSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),Jz=k({name:`SceneTileEditForm`,__name:`scene-tile-edit-form`,props:{tile:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean,default:!1},withPosition:{type:Boolean,default:!0},withSize:{type:Boolean,default:!0}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=no({tile:n.tile,onlyDraft:n.onlyDraft}),{scenes:d,fetchScenes:f,fetching:m}=dc(),h=P({row:[{required:!0,message:a(`dashboardModule.fields.tiles.row.validation.required`),trigger:`change`}],col:[{required:!0,message:a(`dashboardModule.fields.tiles.col.validation.required`),trigger:`change`}],scene:[{required:!0,message:a(`tilesScenePlugin.fields.scene.validation.required`),trigger:`change`}]}),g=p(()=>wa(d.value,[e=>e.name],[`asc`]).map(e=>({value:e.id,label:e.name})));return le(()=>{m.value||f().catch(e=>{throw new Ma(`Something went wrong`,e)})}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:h,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.id.title`),prop:`id`},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.tiles.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`tilesScenePlugin.fields.scene.title`),prop:`scene`},{default:B(()=>[D(L(ei),{modelValue:L(o).scene,"onUpdate:modelValue":t[1]||=e=>L(o).scene=e,placeholder:L(a)(`tilesScenePlugin.fields.scene.placeholder`),name:`scene`,loading:L(m),filterable:``},{default:B(()=>[(A(!0),i(V,null,I(g.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),n.withPosition?(A(),O(L(si),{key:0},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.row.title`),prop:`row`},{default:B(()=>[D(L(Qr),{modelValue:L(o).row,"onUpdate:modelValue":t[2]||=e=>L(o).row=e,placeholder:L(a)(`dashboardModule.fields.tiles.row.placeholder`),name:`row`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.col.title`),prop:`col`},{default:B(()=>[D(L(Qr),{modelValue:L(o).col,"onUpdate:modelValue":t[3]||=e=>L(o).col=e,placeholder:L(a)(`dashboardModule.fields.tiles.col.placeholder`),name:`col`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0),n.withSize?(A(),O(L(si),{key:1},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.rowSpan.title`),prop:`rowSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).rowSpan,"onUpdate:modelValue":t[4]||=e=>L(o).rowSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.rowSpan.placeholder`),name:`rowSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.colSpan.title`),prop:`colSpan`},{default:B(()=>[D(L(Qr),{modelValue:L(o).colSpan,"onUpdate:modelValue":t[5]||=e=>L(o).colSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.colSpan.placeholder`),name:`colSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),Yz={class:`flex flex-col items-center justify-center h-full w-full p-2 gap-1 overflow-hidden`},Xz=k({name:`SceneTilePreview`,__name:`tile-preview`,props:{tile:{}},setup(e){let t=e,{t:n}=M(),r=t.tile.scene??null,{scene:a,fetchScene:o}=pc({id:r??``}),{icon:c}=sc({id:r??``}),l=p(()=>t.tile.icon??null),u=p(()=>l.value??c.value??`mdi:movie-open-outline`),d=p(()=>a.value?.name??n(`tilesScenePlugin.preview.defaultName`)),f=p(()=>t.tile.rowSpan>=2?32:22);return le(()=>{r&&o().catch(()=>{})}),(e,n)=>(A(),i(`div`,Yz,[D(L(g),{size:f.value,color:`var(--el-color-primary)`},{default:B(()=>[D(L(s),{icon:u.value},null,8,[`icon`])]),_:1},8,[`size`]),t.tile.rowSpan>1||t.tile.colSpan>1?(A(),O(L(zt),{key:0,size:`small`,class:`truncate max-w-full text-center`},{default:B(()=>[E(z(d.value),1)]),_:1})):R(``,!0)]))}}),Zz={"cs-CZ":{preview:{defaultName:`Scéna`},fields:{scene:{title:`Scéna`,placeholder:`Vyberte scénu`,validation:{required:`Vyberte prosím scénu`}}}},"de-DE":{preview:{defaultName:`Szene`},fields:{scene:{title:`Szene`,placeholder:`Szene auswählen`,validation:{required:`Bitte wählen Sie eine Szene`}}}},"en-US":{preview:{defaultName:`Scene`},fields:{scene:{title:`Scene`,placeholder:`Select scene`,validation:{required:`Please select a scene`}}}},"es-ES":{preview:{defaultName:`Escena`},fields:{scene:{title:`Escena`,placeholder:`Seleccionar escena`,validation:{required:`Por favor, seleccione una escena`}}}},"pl-PL":{preview:{defaultName:`Scena`},fields:{scene:{title:`Scena`,placeholder:`Wybierz scenę`,validation:{required:`Wybierz scenę`}}}},"sk-SK":{preview:{defaultName:`Scéna`},fields:{scene:{title:`Scéna`,placeholder:`Vyberte scénu`,validation:{required:`Prosím vyberte scénu`}}}}},Qz=Ya.extend({scene:X().uuid()}),$z=eo.extend({scene:X().uuid()}),eB=po.extend({scene:Ga,icon:X().trim().nullable().default(null)}),tB=ho.and(K({type:Y(Kz),scene:X().uuid(),icon:X().trim().nullable()})),nB=lo.and(K({type:Y(Kz),scene:X().uuid().optional(),icon:X().trim().nullable().optional()}));fo.and(K({type:Y(Kz),scene:X().uuid(),icon:X().trim().nullable()}));var rB=He(Xz),iB=Symbol(`FB-Plugin-TilesScene`),aB={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(Zz)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{tilesScenePlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(iB,{type:Gz,source:`com.fastybird.smart-panel.plugin.tiles-scene`,name:`Scene Tile`,description:`A compact tile for displaying and triggering scenes. Ideal for quick access to your favorite scenes from the dashboard.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Kz,name:`Scene`,components:{tileAddForm:qz,tileEditForm:Jz,tilePreview:rB},schemas:{tileSchema:eB,tileAddFormSchema:Qz,tileEditFormSchema:$z,tileCreateReqSchema:tB,tileUpdateReqSchema:nB}}],modules:[Na],isCore:!0})}},oB={class:`flex flex-col items-start justify-center h-full w-full p-2 overflow-hidden`},sB=k({name:`TimeTilePreview`,__name:`tile-preview`,props:{tile:{}},setup(e){let t=j(``),n=j(``),r,a=()=>{let e=new Date;t.value=e.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}),n.value=e.toLocaleDateString([],{weekday:`short`,month:`short`,day:`numeric`})};return pe(()=>{a(),r=setInterval(a,1e3)}),h(()=>{r&&clearInterval(r)}),(e,r)=>(A(),i(`div`,oB,[D(L(zt),{class:`font-mono font-bold leading-none`,style:{"font-size":`clamp(14px, 2.5vw, 28px)`}},{default:B(()=>[E(z(t.value),1)]),_:1}),D(L(zt),{class:`font-mono mt-1`,type:`info`,size:`small`},{default:B(()=>[E(z(n.value),1)]),_:1})]))}}),cB=`tiles-time-plugin`,lB=`tiles-time`,uB=po.extend({}),dB=ho.and(K({type:Y(lB)})),fB=lo.and(K({type:Y(lB)}));fo.and(K({type:Y(lB)}));var pB=He(sB),mB=Symbol(`FB-Plugin-TilesTime`),hB={install:e=>{ra(e).addPlugin(mB,{type:cB,source:`com.fastybird.smart-panel.plugin.tiles-time`,name:`Clock Tile`,description:`A simple tile for displaying the current time, optionally with the date. Great for keeping your smart panel visually synced with real-time.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:lB,name:`Clock`,components:{tilePreview:pB},schemas:{tileSchema:uB,tileCreateReqSchema:dB,tileUpdateReqSchema:fB}}],modules:[Na],isCore:!0})}},gB=`tiles-weather-plugin`,_B=`tiles-weather-day`,vB=`tiles-weather-forecast`,yB=k({name:`WeatherTileAddForm`,__name:`weather-tile-add-form`,props:{id:{},type:{default:_B},parent:{},parentId:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean,default:!1},withPosition:{type:Boolean,default:!0},withSize:{type:Boolean,default:!0}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=ao({id:n.id,type:n.type,parent:n.parent,parentId:n.parentId,onlyDraft:n.onlyDraft}),{locations:d,areLoading:f,fetchLocations:p}=Bo(),m=P({row:[{required:!0,message:a(`dashboardModule.fields.tiles.row.validation.required`),trigger:`change`}],col:[{required:!0,message:a(`dashboardModule.fields.tiles.col.validation.required`),trigger:`change`}]});return le(async()=>{await p()}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:m,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.id.title`),prop:[`id`]},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.tiles.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`tilesWeatherPlugin.fields.locationId.title`),prop:[`locationId`]},{default:B(()=>[D(L(ei),{modelValue:L(o).locationId,"onUpdate:modelValue":t[1]||=e=>L(o).locationId=e,placeholder:L(a)(`tilesWeatherPlugin.fields.locationId.placeholder`),name:`locationId`,clearable:``,loading:L(f)},{default:B(()=>[(A(!0),i(V,null,I(L(d),e=>(A(),O(L(ti),{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Q),{description:L(a)(`tilesWeatherPlugin.fields.locationId.description`),closable:!1,"show-icon":``,type:`info`,class:`mb-4`},null,8,[`description`]),n.withPosition?(A(),O(L(si),{key:0},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.row.title`),prop:[`row`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).row,"onUpdate:modelValue":t[2]||=e=>L(o).row=e,placeholder:L(a)(`dashboardModule.fields.tiles.row.placeholder`),name:`row`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.col.title`),prop:[`col`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).col,"onUpdate:modelValue":t[3]||=e=>L(o).col=e,placeholder:L(a)(`dashboardModule.fields.tiles.col.placeholder`),name:`col`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0),n.withSize?(A(),O(L(si),{key:1},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.rowSpan.title`),prop:[`rowSpan`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).rowSpan,"onUpdate:modelValue":t[4]||=e=>L(o).rowSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.rowSpan.placeholder`),name:`rowSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.colSpan.title`),prop:[`colSpan`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).colSpan,"onUpdate:modelValue":t[5]||=e=>L(o).colSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.colSpan.placeholder`),name:`colSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),bB=k({name:`WeatherTileEditForm`,__name:`weather-tile-edit-form`,props:{tile:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Pa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},onlyDraft:{type:Boolean,default:!1},withPosition:{type:Boolean,default:!0},withSize:{type:Boolean,default:!0}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{model:o,formEl:s,formChanged:c,submit:l,formResult:u}=no({tile:n.tile,onlyDraft:n.onlyDraft}),{locations:d,areLoading:f,fetchLocations:p}=Bo(),m=P({row:[{required:!0,message:a(`dashboardModule.fields.tiles.row.validation.required`),trigger:`change`}],col:[{required:!0,message:a(`dashboardModule.fields.tiles.col.validation.required`),trigger:`change`}]});return le(async()=>{await p()}),F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!s.value)return;s.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:s,model:L(o),rules:m,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.id.title`),prop:[`id`]},{default:B(()=>[D(L(U),{modelValue:L(o).id,"onUpdate:modelValue":t[0]||=e=>L(o).id=e,placeholder:L(a)(`dashboardModule.fields.tiles.id.placeholder`),name:`id`,readonly:``,disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`tilesWeatherPlugin.fields.locationId.title`),prop:[`locationId`]},{default:B(()=>[D(L(ei),{modelValue:L(o).locationId,"onUpdate:modelValue":t[1]||=e=>L(o).locationId=e,placeholder:L(a)(`tilesWeatherPlugin.fields.locationId.placeholder`),name:`locationId`,clearable:``,loading:L(f)},{default:B(()=>[(A(!0),i(V,null,I(L(d),e=>(A(),O(L(ti),{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`,`loading`])]),_:1},8,[`label`]),D(L(Q),{description:L(a)(`tilesWeatherPlugin.fields.locationId.description`),closable:!1,"show-icon":``,type:`info`,class:`mb-4`},null,8,[`description`]),n.withPosition?(A(),O(L(si),{key:0},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.row.title`),prop:[`row`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).row,"onUpdate:modelValue":t[2]||=e=>L(o).row=e,placeholder:L(a)(`dashboardModule.fields.tiles.row.placeholder`),name:`row`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.col.title`),prop:[`col`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).col,"onUpdate:modelValue":t[3]||=e=>L(o).col=e,placeholder:L(a)(`dashboardModule.fields.tiles.col.placeholder`),name:`col`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0),n.withSize?(A(),O(L(si),{key:1},{default:B(()=>[D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.rowSpan.title`),prop:[`rowSpan`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).rowSpan,"onUpdate:modelValue":t[4]||=e=>L(o).rowSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.rowSpan.placeholder`),name:`rowSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1}),D(L(ci),{span:12},{default:B(()=>[D(L(Z),{label:L(a)(`dashboardModule.fields.tiles.colSpan.title`),prop:[`colSpan`]},{default:B(()=>[D(L(Qr),{modelValue:L(o).colSpan,"onUpdate:modelValue":t[5]||=e=>L(o).colSpan=e,placeholder:L(a)(`dashboardModule.fields.tiles.colSpan.placeholder`),name:`colSpan`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1})):R(``,!0)]),_:1},8,[`model`,`rules`]))}}),xB={class:`flex flex-row items-center justify-center h-full w-full p-2 gap-2 overflow-hidden`},SB={class:`flex flex-col min-w-0`},CB=k({name:`DayWeatherTilePreview`,__name:`tile-preview-day`,props:{tile:{}},setup(e){let t=e,{t:n}=M(),r=p(()=>t.tile.rowSpan>=2?36:24);return(e,t)=>(A(),i(`div`,xB,[D(L(g),{size:r.value,color:`var(--el-color-warning)`},{default:B(()=>[D(L(s),{icon:`mdi:weather-sunny`})]),_:1},8,[`size`]),l(`div`,SB,[D(L(zt),{class:`font-bold leading-none`,style:{"font-size":`clamp(14px, 2.5vw, 24px)`}},{default:B(()=>[E(z(L(n)(`tilesWeatherPlugin.preview.day.temperature`)),1)]),_:1}),D(L(zt),{type:`info`,size:`small`,class:`truncate`},{default:B(()=>[E(z(L(n)(`tilesWeatherPlugin.preview.day.condition`)),1)]),_:1})])]))}}),wB={class:`flex flex-row items-center justify-around h-full w-full p-2 gap-1 overflow-hidden`},TB=k({name:`ForecastWeatherTilePreview`,__name:`tile-preview-forecast`,props:{tile:{}},setup(e){let{t}=M(),n=p(()=>[{label:t(`tilesWeatherPlugin.preview.forecast.mon`),icon:`mdi:weather-sunny`,color:`var(--el-color-warning)`,temp:`22°`},{label:t(`tilesWeatherPlugin.preview.forecast.tue`),icon:`mdi:weather-partly-cloudy`,color:`var(--el-color-info)`,temp:`19°`},{label:t(`tilesWeatherPlugin.preview.forecast.wed`),icon:`mdi:weather-rainy`,color:`var(--el-color-primary)`,temp:`16°`},{label:t(`tilesWeatherPlugin.preview.forecast.thu`),icon:`mdi:weather-sunny`,color:`var(--el-color-warning)`,temp:`21°`}]);return(e,t)=>(A(),i(`div`,wB,[(A(!0),i(V,null,I(n.value,e=>(A(),i(`div`,{key:e.label,class:`flex flex-col items-center min-w-0`},[D(L(zt),{size:`small`,type:`info`,class:`truncate`},{default:B(()=>[E(z(e.label),1)]),_:2},1024),D(L(g),{size:18,color:e.color},{default:B(()=>[D(L(s),{icon:e.icon},null,8,[`icon`])]),_:2},1032,[`color`]),D(L(zt),{size:`small`},{default:B(()=>[E(z(e.temp),1)]),_:2},1024)]))),128))]))}}),EB={"cs-CZ":{preview:{day:{temperature:`22 °C`,condition:`Slunečno`},forecast:{mon:`Po`,tue:`Út`,wed:`St`,thu:`Čt`}},fields:{locationId:{title:`Meteorologická lokace`,placeholder:`Vyberte lokaci`,description:`Vyberte meteorologickou lokaci k zobrazení. Pokud není nastavena, bude použita primární lokace z nastavení počasí.`}}},"de-DE":{preview:{day:{temperature:`22°C`,condition:`Sonnig`},forecast:{mon:`Mo`,tue:`Di`,wed:`Mi`,thu:`Do`}},fields:{locationId:{title:`Wetterstandort`,placeholder:`Standort auswählen`,description:`Wählen Sie einen Wetterstandort zur Anzeige. Wenn nicht festgelegt, wird der primäre Standort aus den Wettereinstellungen verwendet.`}}},"en-US":{preview:{day:{temperature:`22°C`,condition:`Sunny`},forecast:{mon:`Mon`,tue:`Tue`,wed:`Wed`,thu:`Thu`}},fields:{locationId:{title:`Weather location`,placeholder:`Select a location`,description:`Select a weather location to display. If not set, the primary location from weather settings will be used.`}}},"es-ES":{preview:{day:{temperature:`22ºC`,condition:`Soleado`},forecast:{mon:`Lun`,tue:`Mar`,wed:`Mié`,thu:`Jue`}},fields:{locationId:{title:`Ubicación meteorológica`,placeholder:`Seleccione una ubicación`,description:`Seleccione una ubicación meteorológica para mostrar. Si no se establece, se utilizará la ubicación principal de la configuración meteorológica.`}}},"pl-PL":{preview:{day:{temperature:`22°C`,condition:`Słonecznie`},forecast:{mon:`Pon`,tue:`Wt`,wed:`Śr`,thu:`Czw`}},fields:{locationId:{title:`Lokalizacja pogodowa`,placeholder:`Wybierz lokalizację`,description:`Wybierz lokalizację pogodową do wyświetlenia. Jeśli nie ustawiono, zostanie użyta główna lokalizacja z ustawień pogody.`}}},"sk-SK":{preview:{day:{temperature:`22 °C`,condition:`Slnečno`},forecast:{mon:`Po`,tue:`Ut`,wed:`St`,thu:`Št`}},fields:{locationId:{title:`Poloha počasia`,placeholder:`Vyberte polohu`,description:`Vyberte polohu počasia na zobrazenie. Ak nie je nastavená, použije sa primárna poloha z nastavení počasia.`}}}},DB=Ya.extend({locationId:X().uuid().optional().nullable()}),OB=eo.extend({locationId:X().uuid().optional().nullable()}),kB=po.extend({locationId:X().uuid().optional().nullable().default(null)}),AB=po.extend({locationId:X().uuid().optional().nullable().default(null)}),jB=ho.and(K({type:Y(_B),location_id:X().uuid().optional().nullable()})),MB=ho.and(K({type:Y(vB),location_id:X().uuid().optional().nullable()})),NB=lo.and(K({type:Y(_B),location_id:X().uuid().optional().nullable()})),PB=lo.and(K({type:Y(vB),location_id:X().uuid().optional().nullable()}));fo.and(K({type:Y(_B),location_id:X().uuid().optional()})),fo.and(K({type:Y(vB),location_id:X().uuid().optional()}));var FB=He(yB),IB=He(bB),LB=He(CB),RB=He(TB),zB=Symbol(`FB-Plugin-TilesWeather`),BB={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(EB)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{tilesWeatherPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(zB,{type:gB,source:`com.fastybird.smart-panel.plugin.tiles-weather`,name:`Weather Tiles`,description:`Displays current weather conditions and daily details alongside a multi-day forecast. Provides temperature, conditions, and icons in a clear, compact tile layout - perfect for checking today's weather or planning ahead at a glance.`,links:{documentation:`https://smart-panel.fastybird.com`,devDocumentation:`https://smart-panel.fastybird.com`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:_B,name:`Day Weather`,description:`Displays daily weather information including temperature, conditions, and icons. Perfect for showing today's forecast in a compact tile.`,components:{tileAddForm:FB,tileEditForm:IB,tilePreview:LB},schemas:{tileSchema:kB,tileAddFormSchema:DB,tileEditFormSchema:OB,tileCreateReqSchema:jB,tileUpdateReqSchema:NB}},{type:vB,name:`Forecast Weather`,description:`Shows a multi-day weather forecast in a clear and informative tile layout. Ideal for planning ahead at a glance.`,components:{tileAddForm:FB,tileEditForm:IB,tilePreview:RB},schemas:{tileSchema:AB,tileAddFormSchema:DB,tileEditFormSchema:OB,tileCreateReqSchema:MB,tileUpdateReqSchema:PB}}],modules:[Na],isCore:!0})}},VB=k({name:`OpenMeteoConfigForm`,__name:`open-meteo-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:l,formResult:u}=Xi({config:n.config,messages:{success:a(`weatherOpenMeteoPlugin.messages.config.edited`),error:a(`weatherOpenMeteoPlugin.messages.config.notEdited`)}}),d=p(()=>[{value:an.celsius,label:a(`weatherOpenMeteoPlugin.fields.config.unit.values.celsius`)},{value:an.fahrenheit,label:a(`weatherOpenMeteoPlugin.fields.config.unit.values.fahrenheit`)}]),f=P({});return F(()=>u.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),l().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(e){if(r(`update:remote-form-reset`,!1),!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:f,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`weatherOpenMeteoPlugin.headings.aboutSettings`),description:L(a)(`weatherOpenMeteoPlugin.texts.aboutSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.config.unit.title`),prop:`unit`},{default:B(()=>[D(L(ei),{modelValue:L(s).unit,"onUpdate:modelValue":t[1]||=e=>L(s).unit=e,placeholder:L(a)(`weatherOpenMeteoPlugin.fields.config.unit.placeholder`),class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(d.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),HB=e=>{let{t}=M(),n=Tn(),{searchCities:r,isSearching:i}=Yr(),a=j(``),o=j(!1),s=j(10),c=j([50.083328,14.46667]),l=j(null),u=e=>{if(e==null||e===``)return!1;let t=Number(e);return!isNaN(t)&&isFinite(t)},d=(e,t,n)=>{l.value=[e,t],c.value=[e,t],n!==void 0&&(s.value=n)};return le(()=>{u(e.latitude)&&u(e.longitude)&&d(Number(e.latitude),Number(e.longitude),18)}),F(()=>[e.latitude,e.longitude],([e,t])=>{if(u(e)&&u(t)){let n=Number(e),r=Number(t);l.value=[n,r],c.value=[n,r]}}),{searchQuery:a,isSearching:i,isGettingLocation:o,zoom:s,center:c,marker:l,setMarker:d,onMapClick:t=>{let{lat:n,lng:r}=t.latlng;e.latitude=n,e.longitude=r,l.value=[n,r]},onMarkerMoveEnd:t=>{let{lat:n,lng:r}=t.target.getLatLng();e.latitude=n,e.longitude=r,l.value=[n,r]},handleCitySearch:(e,t)=>{if(!e||e.length<2){t([]);return}r(e).then(e=>{t(e.map(e=>({...e,value:`${e.name}${e.state?`, ${e.state}`:``}, ${e.country}`})))}).catch(()=>{t([])})},handleCitySelect:t=>{let n=t;e.name=`${n.name}${n.state?`, ${n.state}`:``}, ${n.country}`,e.latitude=n.lat,e.longitude=n.lon,e.countryCode=n.country_code,a.value=``,d(n.lat,n.lon,12)},getMyLocation:r=>{let i=typeof r==`function`?r:void 0;if(!navigator.geolocation){n.error(t(`weatherOpenMeteoPlugin.messages.geolocationNotSupported`));return}o.value=!0,navigator.geolocation.getCurrentPosition(t=>{let n=t.coords.latitude,r=t.coords.longitude;e.latitude=n,e.longitude=r,d(n,r,12),i?.(),o.value=!1},e=>{switch(o.value=!1,e.code){case e.PERMISSION_DENIED:n.error(t(`weatherOpenMeteoPlugin.messages.geolocationDenied`));break;case e.POSITION_UNAVAILABLE:n.error(t(`weatherOpenMeteoPlugin.messages.geolocationUnavailable`));break;case e.TIMEOUT:n.error(t(`weatherOpenMeteoPlugin.messages.geolocationTimeout`));break;default:n.error(t(`weatherOpenMeteoPlugin.messages.geolocationError`))}},{enableHighAccuracy:!0,timeout:1e4,maximumAge:0})}}},UB={class:`text-xs text-gray-500 mt-1`},WB={class:`flex flex-row items-center gap-2 w-full`},GB={class:`flex flex-col py-1`},KB={class:`font-medium`},qB={class:`text-xs text-gray-500`},JB={class:`ml-2 text-gray-400`},YB={class:`text-xs text-gray-500 mt-1`},XB={class:`flex flex-row items-start gap-4`},ZB={style:{height:`35vh`,width:`100%`}},QB=k({name:`OpenMeteoLocationAddForm`,__name:`open-meteo-location-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Go.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),{add:c}=Uo(),u=j(void 0),d=P({name:``,latitude:null,longitude:null,countryCode:``}),{searchQuery:f,isSearching:p,isGettingLocation:m,zoom:h,center:g,marker:_,onMapClick:v,onMarkerMoveEnd:y,handleCitySearch:b,handleCitySelect:x,getMyLocation:S}=HB(d),C={name:[{required:!0,message:a(`weatherOpenMeteoPlugin.fields.locations.name.validation.required`),trigger:`blur`}],latitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.latitude.validation.required`))):isNaN(Number(t))||Number(t)<-90||Number(t)>90?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.latitude.validation.range`))):n()},trigger:[`change`,`blur`]}],longitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.longitude.validation.required`))):isNaN(Number(t))||Number(t)<-180||Number(t)>180?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.longitude.validation.range`))):n()},trigger:[`change`,`blur`]}]},w=async()=>{if(u.value){if(r(`update:remote-form-result`,Go.WORKING),!await u.value.validate().catch(()=>!1)){r(`update:remote-form-result`,Go.NONE);return}try{let e={name:d.name,type:n.type,latitude:d.latitude===null?void 0:Number(d.latitude),longitude:d.longitude===null?void 0:Number(d.longitude)};d.countryCode&&(e.country_code=d.countryCode),await c({id:n.id,draft:!1,data:e}),o.success(a(`weatherOpenMeteoPlugin.messages.locations.created`,{location:d.name})),r(`update:remote-form-result`,Go.OK)}catch{o.error(a(`weatherOpenMeteoPlugin.messages.locations.notCreated`,{location:d.name})),r(`update:remote-form-result`,Go.ERROR),setTimeout(()=>{r(`update:remote-form-result`,Go.NONE)},2e3)}}};return F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),w())}),F(()=>n.remoteFormReset,e=>{e&&(r(`update:remote-form-reset`,!1),u.value?.resetFields())}),F(d,()=>{r(`update:remote-form-changed`,!0)},{deep:!0}),(e,t)=>(A(),i(V,null,[D(L(Ir),{ref_key:`formEl`,ref:u,model:d,rules:C,"label-position":`top`,"status-icon":``,onSubmit:qe(w,[`prevent`])},{default:B(()=>[D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:d.name,"onUpdate:modelValue":t[0]||=e=>d.name=e,placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.name.placeholder`)},null,8,[`modelValue`,`placeholder`]),l(`div`,UB,z(L(a)(`weatherOpenMeteoPlugin.fields.locations.name.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.citySearch.title`)},{default:B(()=>[l(`div`,WB,[D(L(Ur),{modelValue:L(f),"onUpdate:modelValue":t[1]||=e=>he(f)?f.value=e:null,"fetch-suggestions":L(b),placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.citySearch.placeholder`),loading:L(p),debounce:500,clearable:``,class:`flex-1`,onSelect:L(x)},{default:B(({item:e})=>[l(`div`,GB,[l(`span`,KB,z(e.name),1),l(`span`,qB,[E(z(e.state?`${e.state}, `:``)+z(e.country)+` `,1),l(`span`,JB,` (`+z(e.lat.toFixed(4))+`, `+z(e.lon.toFixed(4))+`) `,1)])])]),_:1},8,[`modelValue`,`fetch-suggestions`,`placeholder`,`loading`,`onSelect`]),D(L(Oe),{loading:L(m),class:`px-2!`,onClick:L(S)},{icon:B(()=>[D(L(s),{icon:`mdi:map-marker-account-outline`})]),default:B(()=>[E(` `+z(L(a)(`weatherOpenMeteoPlugin.buttons.myLocation.title`)),1)]),_:1},8,[`loading`,`onClick`])]),l(`div`,YB,z(L(a)(`weatherOpenMeteoPlugin.fields.locations.citySearch.description`)),1)]),_:1},8,[`label`]),D(L(Vt),{"content-position":`left`,class:`mt-6!`},{default:B(()=>[E(z(L(a)(`weatherOpenMeteoPlugin.texts.orEnterManually`)),1)]),_:1}),l(`div`,XB,[D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.latitude.title`),prop:`latitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:d.latitude,"onUpdate:modelValue":t[2]||=e=>d.latitude=e,placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.latitude.placeholder`),name:`latitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.longitude.title`),prop:`longitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:d.longitude,"onUpdate:modelValue":t[3]||=e=>d.longitude=e,placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.longitude.placeholder`),name:`longitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),_:1},8,[`model`]),l(`div`,ZB,[D(L(Wr),{zoom:L(h),"onUpdate:zoom":t[4]||=e=>he(h)?h.value=e:null,"use-global-leaflet":!1,center:L(g),onClick:L(v)},{default:B(()=>[D(L(Vr),{url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`}),L(_)?(A(),O(L(qr),{key:0,"lat-lng":L(_),draggable:!0,onMoveend:L(y)},null,8,[`lat-lng`,`onMoveend`])):R(``,!0)]),_:1},8,[`zoom`,`center`,`onClick`])])],64))}}),$B={class:`text-xs text-gray-500 mt-1`},eV={class:`flex flex-row items-center gap-2 w-full`},tV={class:`flex flex-col py-1`},nV={class:`font-medium`},rV={class:`text-xs text-gray-500`},iV={class:`ml-2 text-gray-400`},aV={class:`text-xs text-gray-500 mt-1`},oV={class:`flex flex-row items-start gap-4`},sV={style:{height:`35vh`,width:`100%`}},cV=k({name:`OpenMeteoLocationEditForm`,__name:`open-meteo-location-edit-form`,props:{location:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Go.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),{edit:c}=Uo(),u=j(void 0),d=()=>{let e=n.location;return{name:e.name||``,latitude:e.latitude??null,longitude:e.longitude??null,countryCode:e.countryCode||``}},f=P(d()),{searchQuery:p,isSearching:m,isGettingLocation:h,zoom:g,center:_,marker:v,onMapClick:y,onMarkerMoveEnd:b,handleCitySearch:x,handleCitySelect:S,getMyLocation:C}=HB(f),w={name:[{required:!0,message:a(`weatherOpenMeteoPlugin.fields.locations.name.validation.required`),trigger:`blur`}],latitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.latitude.validation.required`))):isNaN(Number(t))||Number(t)<-90||Number(t)>90?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.latitude.validation.range`))):n()},trigger:[`change`,`blur`]}],longitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.longitude.validation.required`))):isNaN(Number(t))||Number(t)<-180||Number(t)>180?n(Error(a(`weatherOpenMeteoPlugin.fields.locations.longitude.validation.range`))):n()},trigger:[`change`,`blur`]}]},T=async()=>{if(u.value){if(r(`update:remote-form-result`,Go.WORKING),!await u.value.validate().catch(()=>!1)){r(`update:remote-form-result`,Go.NONE);return}try{let e={type:Gr,name:f.name,latitude:f.latitude===null?void 0:Number(f.latitude),longitude:f.longitude===null?void 0:Number(f.longitude)};f.countryCode&&(e.country_code=f.countryCode),await c({id:n.location.id,data:e}),o.success(a(`weatherOpenMeteoPlugin.messages.locations.edited`,{location:f.name})),r(`update:remote-form-result`,Go.OK)}catch{o.error(a(`weatherOpenMeteoPlugin.messages.locations.notEdited`,{location:f.name})),r(`update:remote-form-result`,Go.ERROR),setTimeout(()=>{r(`update:remote-form-result`,Go.NONE)},2e3)}}};return F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),T())}),F(()=>n.remoteFormReset,e=>{e&&(r(`update:remote-form-reset`,!1),Object.assign(f,d()),u.value?.clearValidate())}),F(f,()=>{r(`update:remote-form-changed`,!0)},{deep:!0}),(e,t)=>(A(),i(V,null,[D(L(Ir),{ref_key:`formEl`,ref:u,model:f,rules:w,"label-position":`top`,"status-icon":``,onSubmit:qe(T,[`prevent`])},{default:B(()=>[D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:f.name,"onUpdate:modelValue":t[0]||=e=>f.name=e,placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.name.placeholder`)},null,8,[`modelValue`,`placeholder`]),l(`div`,$B,z(L(a)(`weatherOpenMeteoPlugin.fields.locations.name.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.citySearch.title`)},{default:B(()=>[l(`div`,eV,[D(L(Ur),{modelValue:L(p),"onUpdate:modelValue":t[1]||=e=>he(p)?p.value=e:null,"fetch-suggestions":L(x),placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.citySearch.placeholder`),loading:L(m),debounce:500,clearable:``,class:`flex-1`,onSelect:L(S)},{default:B(({item:e})=>[l(`div`,tV,[l(`span`,nV,z(e.name),1),l(`span`,rV,[E(z(e.state?`${e.state}, `:``)+z(e.country)+` `,1),l(`span`,iV,` (`+z(e.lat.toFixed(4))+`, `+z(e.lon.toFixed(4))+`) `,1)])])]),_:1},8,[`modelValue`,`fetch-suggestions`,`placeholder`,`loading`,`onSelect`]),D(L(Oe),{loading:L(h),class:`px-2!`,onClick:L(C)},{icon:B(()=>[D(L(s),{icon:`mdi:map-marker-account-outline`})]),default:B(()=>[E(` `+z(L(a)(`weatherOpenMeteoPlugin.buttons.myLocation.title`)),1)]),_:1},8,[`loading`,`onClick`])]),l(`div`,aV,z(L(a)(`weatherOpenMeteoPlugin.fields.locations.citySearch.description`)),1)]),_:1},8,[`label`]),D(L(Vt),{"content-position":`left`,class:`mt-6!`},{default:B(()=>[E(z(L(a)(`weatherOpenMeteoPlugin.texts.orEnterManually`)),1)]),_:1}),l(`div`,oV,[D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.latitude.title`),prop:`latitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:f.latitude,"onUpdate:modelValue":t[2]||=e=>f.latitude=e,placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.latitude.placeholder`),name:`latitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenMeteoPlugin.fields.locations.longitude.title`),prop:`longitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:f.longitude,"onUpdate:modelValue":t[3]||=e=>f.longitude=e,placeholder:L(a)(`weatherOpenMeteoPlugin.fields.locations.longitude.placeholder`),name:`longitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),_:1},8,[`model`]),l(`div`,sV,[D(L(Wr),{zoom:L(g),"onUpdate:zoom":t[4]||=e=>he(g)?g.value=e:null,"use-global-leaflet":!1,center:L(_),onClick:L(y)},{default:B(()=>[D(L(Vr),{url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`}),L(v)?(A(),O(L(qr),{key:0,"lat-lng":L(v),draggable:!0,onMoveend:L(b)},null,8,[`lat-lng`,`onMoveend`])):R(``,!0)]),_:1},8,[`zoom`,`center`,`onClick`])])],64))}}),lV={"cs-CZ":{headings:{aboutSettings:`Nastavení Open-Meteo počasí`},fields:{config:{enabled:{title:`Povoleno`},unit:{title:`Jednotka teploty`,placeholder:`Vyberte jednotku teploty`,values:{celsius:`Celsia (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Název`,description:`Přátelský název pro tuto lokaci`,placeholder:`např. Domov, Kancelář, Chata`,validation:{required:`Název je povinný`}},citySearch:{title:`Hledat město`,placeholder:`Začněte psát pro vyhledání města...`,description:`Vyhledejte město a automaticky vyplníme souřadnice`},latitude:{title:`Zeměpisná šířka`,placeholder:`např. 51.5074`,validation:{required:`Zeměpisná šířka je povinná`,range:`Zeměpisná šířka musí být mezi -90 a 90`}},longitude:{title:`Zeměpisná délka`,placeholder:`např. -0.1278`,validation:{required:`Zeměpisná délka je povinná`,range:`Zeměpisná délka musí být mezi -180 a 180`}}}},buttons:{myLocation:{title:`Moje poloha`}},messages:{config:{edited:`Nastavení Open-Meteo bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení Open-Meteo`},locations:{created:`Lokace "{location}" byla vytvořena`,notCreated:`Nepodařilo se vytvořit lokaci "{location}"`,edited:`Lokace "{location}" byla aktualizována`,notEdited:`Nepodařilo se aktualizovat lokaci "{location}"`},geolocationNotSupported:`Geolokace není podporována vaším prohlížečem`,geolocationDenied:`Přístup k poloze byl zamítnut. Povolte prosím oprávnění k poloze.`,geolocationUnavailable:`Informace o poloze jsou nedostupné`,geolocationTimeout:`Požadavek na zjištění vaší polohy vypršel`,geolocationError:`Při zjišťování vaší polohy došlo k chybě`},texts:{aboutSettings:`Nakonfigurujte nastavení počasí Open-Meteo. Tento poskytovatel je zdarma a nevyžaduje API klíč.`,orEnterManually:`Nebo zadejte lokaci ručně`}},"de-DE":{headings:{aboutSettings:`Open-Meteo Wetter-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},unit:{title:`Temperatureinheit`,placeholder:`Temperatureinheit auswählen`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Name`,description:`Ein freundlicher Name für diesen Standort`,placeholder:`z.B. Zuhause, Büro, Ferienhaus`,validation:{required:`Name ist erforderlich`}},citySearch:{title:`Stadt suchen`,placeholder:`Beginnen Sie zu tippen, um eine Stadt zu suchen...`,description:`Suchen Sie eine Stadt und wir füllen die Koordinaten automatisch aus`},latitude:{title:`Breitengrad`,placeholder:`z.B. 51.5074`,validation:{required:`Breitengrad ist erforderlich`,range:`Breitengrad muss zwischen -90 und 90 liegen`}},longitude:{title:`Längengrad`,placeholder:`z.B. -0.1278`,validation:{required:`Längengrad ist erforderlich`,range:`Längengrad muss zwischen -180 und 180 liegen`}}}},buttons:{myLocation:{title:`Mein Standort`}},messages:{config:{edited:`Open-Meteo-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der Open-Meteo-Einstellungen fehlgeschlagen`},locations:{created:`Standort "{location}" wurde erstellt`,notCreated:`Standort "{location}" konnte nicht erstellt werden`,edited:`Standort "{location}" wurde aktualisiert`,notEdited:`Standort "{location}" konnte nicht aktualisiert werden`},geolocationNotSupported:`Geolokalisierung wird von Ihrem Browser nicht unterstützt`,geolocationDenied:`Standortzugriff wurde verweigert. Bitte aktivieren Sie die Standortberechtigung.`,geolocationUnavailable:`Standortinformationen sind nicht verfügbar`,geolocationTimeout:`Die Anfrage zur Standortermittlung hat das Zeitlimit überschritten`,geolocationError:`Beim Abrufen Ihres Standorts ist ein Fehler aufgetreten`},texts:{aboutSettings:`Konfigurieren Sie Ihre Open-Meteo Wetter-Einstellungen. Dieser Anbieter ist kostenlos und erfordert keinen API-Schlüssel.`,orEnterManually:`Oder Standort manuell eingeben`}},"en-US":{headings:{aboutSettings:`Open-Meteo weather settings`},fields:{config:{enabled:{title:`Enabled`},unit:{title:`Temperature unit`,placeholder:`Select temperature unit`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Name`,description:`A friendly name for this location`,placeholder:`e.g., Home, Office, Beach House`,validation:{required:`Name is required`}},citySearch:{title:`Search city`,placeholder:`Start typing to search for a city...`,description:`Search for a city and we'll auto-fill the coordinates`},latitude:{title:`Latitude`,placeholder:`e.g., 51.5074`,validation:{required:`Latitude is required`,range:`Latitude must be between -90 and 90`}},longitude:{title:`Longitude`,placeholder:`e.g., -0.1278`,validation:{required:`Longitude is required`,range:`Longitude must be between -180 and 180`}}}},buttons:{myLocation:{title:`My location`}},messages:{config:{edited:`Open-Meteo settings have been updated`,notEdited:`Failed to update Open-Meteo settings`},locations:{created:`Location "{location}" has been created`,notCreated:`Failed to create location "{location}"`,edited:`Location "{location}" has been updated`,notEdited:`Failed to update location "{location}"`},geolocationNotSupported:`Geolocation is not supported by your browser`,geolocationDenied:`Location access was denied. Please enable location permissions.`,geolocationUnavailable:`Location information is unavailable`,geolocationTimeout:`The request to get your location timed out`,geolocationError:`An error occurred while getting your location`},texts:{aboutSettings:`Configure your Open-Meteo weather settings. This provider is free and requires no API key.`,orEnterManually:`Or enter location manually`}},"es-ES":{headings:{aboutSettings:`Configuración del clima Open-Meteo`},fields:{config:{enabled:{title:`Habilitado`},unit:{title:`Unidad de temperatura`,placeholder:`Seleccione la unidad de temperatura`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Nombre`,description:`Un nombre descriptivo para esta ubicación`,placeholder:`p. ej., Casa, Oficina, Casa de playa`,validation:{required:`El nombre es obligatorio`}},citySearch:{title:`Buscar ciudad`,placeholder:`Comience a escribir para buscar una ciudad...`,description:`Busque una ciudad y completaremos automáticamente las coordenadas`},latitude:{title:`Latitud`,placeholder:`p. ej., 51.5074`,validation:{required:`La latitud es obligatoria`,range:`La latitud debe estar entre -90 y 90`}},longitude:{title:`Longitud`,placeholder:`p. ej., -0.1278`,validation:{required:`La longitud es obligatoria`,range:`La longitud debe estar entre -180 y 180`}}}},buttons:{myLocation:{title:`Mi ubicación`}},messages:{config:{edited:`La configuración de Open-Meteo se ha actualizado`,notEdited:`No se pudo actualizar la configuración de Open-Meteo`},locations:{created:`La ubicación "{location}" ha sido creada`,notCreated:`No se pudo crear la ubicación "{location}"`,edited:`La ubicación "{location}" ha sido actualizada`,notEdited:`No se pudo actualizar la ubicación "{location}"`},geolocationNotSupported:`La geolocalización no es compatible con su navegador`,geolocationDenied:`Se denegó el acceso a la ubicación. Por favor, habilite los permisos de ubicación.`,geolocationUnavailable:`La información de ubicación no está disponible`,geolocationTimeout:`La solicitud para obtener su ubicación ha expirado`,geolocationError:`Se produjo un error al obtener su ubicación`},texts:{aboutSettings:`Configure los ajustes del clima Open-Meteo. Este proveedor es gratuito y no requiere clave API.`,orEnterManually:`O introduzca la ubicación manualmente`}},"pl-PL":{headings:{aboutSettings:`Ustawienia pogody Open-Meteo`},fields:{config:{enabled:{title:`Włączony`},unit:{title:`Jednostka temperatury`,placeholder:`Wybierz jednostkę temperatury`,values:{celsius:`Celsjusz (°C)`,fahrenheit:`Fahrenheita (°F)`}}},locations:{name:{title:`Nazwa`,description:`Przyjazna nazwa dla tej lokalizacji`,placeholder:`np. Dom, Biuro, Domek na plaży`,validation:{required:`Nazwa jest wymagana`}},citySearch:{title:`Wyszukaj miasto`,placeholder:`Zacznij pisać, aby wyszukać miasto...`,description:`Wyszukaj miasto, a współrzędne zostaną uzupełnione automatycznie`},latitude:{title:`Szerokość geograficzna`,placeholder:`np. 51.5074`,validation:{required:`Szerokość geograficzna jest wymagana`,range:`Szerokość geograficzna musi być między -90 a 90`}},longitude:{title:`Długość geograficzna`,placeholder:`np. -0.1278`,validation:{required:`Długość geograficzna jest wymagana`,range:`Długość geograficzna musi być między -180 a 180`}}}},buttons:{myLocation:{title:`Moja lokalizacja`}},messages:{config:{edited:`Ustawienia Open-Meteo zostały zaktualizowane`,notEdited:`Nie udało się zaktualizować ustawień Open-Meteo`},locations:{created:`Lokalizacja "{location}" została utworzona`,notCreated:`Nie udało się utworzyć lokalizacji "{location}"`,edited:`Lokalizacja "{location}" została zaktualizowana`,notEdited:`Nie udało się zaktualizować lokalizacji "{location}"`},geolocationNotSupported:`Geolokalizacja nie jest obsługiwana przez Twoją przeglądarkę`,geolocationDenied:`Dostęp do lokalizacji został odrzucony. Włącz uprawnienia do lokalizacji.`,geolocationUnavailable:`Informacje o lokalizacji są niedostępne`,geolocationTimeout:`Żądanie pobrania Twojej lokalizacji przekroczyło limit czasu`,geolocationError:`Wystąpił błąd podczas pobierania Twojej lokalizacji`},texts:{aboutSettings:`Skonfiguruj ustawienia pogody Open-Meteo. Ten dostawca jest darmowy i nie wymaga klucza API.`,orEnterManually:`Lub wprowadź lokalizację ręcznie`}},"sk-SK":{headings:{aboutSettings:`Nastavenia počasia Open-Meteo`},fields:{config:{enabled:{title:`Povolený`},unit:{title:`Jednotka teploty`,placeholder:`Vyberte jednotku teploty`,values:{celsius:`Celzia (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Názov`,description:`Priateľský názov pre túto polohu`,placeholder:`napr. Domov, Kancelária, Chata`,validation:{required:`Názov je povinný`}},citySearch:{title:`Vyhľadať mesto`,placeholder:`Začnite písať na vyhľadanie mesta...`,description:`Vyhľadajte mesto a automaticky vyplníme súradnice`},latitude:{title:`Zemepisná šírka`,placeholder:`napr. 51.5074`,validation:{required:`Zemepisná šírka je povinná`,range:`Zemepisná šírka musí byť medzi -90 a 90`}},longitude:{title:`Zemepisná dĺžka`,placeholder:`napr. -0.1278`,validation:{required:`Zemepisná dĺžka je povinná`,range:`Zemepisná dĺžka musí byť medzi -180 a 180`}}}},buttons:{myLocation:{title:`Moja poloha`}},messages:{config:{edited:`Nastavenia Open-Meteo boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia Open-Meteo`},locations:{created:`Poloha "{location}" bola vytvorená`,notCreated:`Nepodarilo sa vytvoriť polohu "{location}"`,edited:`Poloha "{location}" bola aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať polohu "{location}"`},geolocationNotSupported:`Geolokácia nie je podporovaná vaším prehliadačom`,geolocationDenied:`Prístup k polohe bol zamietnutý. Prosím povoľte oprávnenia polohy.`,geolocationUnavailable:`Informácie o polohe nie sú dostupné`,geolocationTimeout:`Požiadavka na získanie polohy vypršala`,geolocationError:`Pri získavaní vašej polohy sa vyskytla chyba`},texts:{aboutSettings:`Nakonfigurujte nastavenia počasia Open-Meteo. Tento poskytovateľ je zadarmo a nevyžaduje API kľúč.`,orEnterManually:`Alebo zadajte polohu manuálne`}}},uV=Ki.extend({unit:G(an)}),dV=Sc.extend({latitude:q().min(-90).max(90),longitude:q().min(-180).max(180),countryCode:X().nullable().optional()}),fV=bc.extend({latitude:q().min(-90).max(90).optional(),longitude:q().min(-180).max(180).optional(),countryCode:X().nullable().optional()}),pV=Wi.extend({unit:G(an).default(an.celsius)}),mV=Zi.and(K({type:Y(Lr),unit:G(an).optional()})),hV=zo.extend({latitude:q(),longitude:q(),countryCode:X().nullable().optional()}),gV=Vo.and(K({type:Y(Gr),latitude:q(),longitude:q(),country_code:X().optional()})),_V=Ho.and(K({type:Y(Gr),latitude:q().optional(),longitude:q().optional(),country_code:X().optional()})),vV=Symbol(`FB-Plugin-WeatherOpenMeteo`),yV={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(lV)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{weatherOpenMeteoPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(vV,{type:Lr,source:`com.fastybird.smart-panel.plugin.weather-open-meteo`,name:`Open-Meteo`,description:`Free weather data provider using Open-Meteo API. No API key required.`,links:{documentation:`https://open-meteo.com/en/docs`,devDocumentation:`https://open-meteo.com/en/docs`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:VB},schemas:{pluginConfigSchema:pV,pluginConfigEditFormSchema:uV,pluginConfigUpdateReqSchema:mV},modules:[ka]},{type:Gr,components:{locationAddForm:QB,locationEditForm:cV},schemas:{locationSchema:hV,locationAddFormSchema:dV,locationEditFormSchema:fV,locationCreateReqSchema:gV,locationUpdateReqSchema:_V},modules:[Wo]}],modules:[ka,Wo],isCore:!0})}},bV=`weather-openweathermap-plugin`,xV=`weather-openweathermap`,SV=wn,CV={class:`text-xs text-gray-500 mt-1`},wV=k({name:`OpenWeatherMapConfigForm`,__name:`openweathermap-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`weatherOpenweathermapPlugin.messages.config.edited`),error:a(`weatherOpenweathermapPlugin.messages.config.notEdited`)}}),f=p(()=>[{value:an.celsius,label:a(`weatherOpenweathermapPlugin.fields.config.unit.values.celsius`)},{value:an.fahrenheit,label:a(`weatherOpenweathermapPlugin.fields.config.unit.values.fahrenheit`)}]),m=P({});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:m,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`weatherOpenweathermapPlugin.headings.aboutApiSettings`),description:L(a)(`weatherOpenweathermapPlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.config.apiKey.title`),prop:`apiKey`},{default:B(()=>[D(L(Zp),{modelValue:L(s).apiKey,"onUpdate:modelValue":t[1]||=e=>L(s).apiKey=e,configured:L(s).apiKeyConfigured,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.config.apiKey.placeholder`),name:`apiKey`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,CV,z(L(a)(`weatherOpenweathermapPlugin.fields.config.apiKey.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.config.unit.title`),prop:`unit`},{default:B(()=>[D(L(ei),{modelValue:L(s).unit,"onUpdate:modelValue":t[2]||=e=>L(s).unit=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.config.unit.placeholder`),class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(f.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),TV={class:`text-xs text-gray-500 mt-1`},EV={class:`flex flex-row items-center gap-2 w-full`},DV={key:0,class:`flex flex-row items-start gap-4`},OV={class:`text-xs text-gray-500 mt-1`},kV={key:0,style:{height:`35vh`,width:`100%`}},AV=k({name:`OpenWeatherMapLocationAddForm`,__name:`openweathermap-location-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Go.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),{add:c}=Uo(),u=j(void 0),d=j(!1),f=j(10),p=j([50.083328,14.46667]),m=j(null),h=P({name:``,locationType:SV.lat_lon,latitude:null,longitude:null,cityName:``,countryCode:``,cityId:``,zipCode:``,zipCountryCode:``}),g={name:[{required:!0,message:a(`weatherOpenweathermapPlugin.fields.locations.name.validation.required`),trigger:`blur`}],locationType:[{required:!0,message:a(`weatherOpenweathermapPlugin.fields.locations.locationType.validation.required`),trigger:`change`}],latitude:[{validator:(e,t,n)=>{h.locationType===SV.lat_lon&&(t==null||t===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.latitude.validation.required`))):h.locationType===SV.lat_lon&&(Number(t)<-90||Number(t)>90)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.latitude.validation.range`))):n()},trigger:[`change`,`blur`]}],longitude:[{validator:(e,t,n)=>{h.locationType===SV.lat_lon&&(t==null||t===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.longitude.validation.required`))):h.locationType===SV.lat_lon&&(Number(t)<-180||Number(t)>180)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.longitude.validation.range`))):n()},trigger:[`change`,`blur`]}],cityName:[{validator:(e,t,n)=>{h.locationType===SV.city_name&&(!t||t.trim()===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.cityName.validation.required`))):n()},trigger:[`change`,`blur`]}],cityId:[{validator:(e,t,n)=>{h.locationType===SV.city_id&&(!t||t.trim()===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.cityId.validation.required`))):n()},trigger:[`change`,`blur`]}],zipCode:[{validator:(e,t,n)=>{h.locationType===SV.zip_code&&(!t||t.trim()===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.zipCode.validation.required`))):n()},trigger:[`change`,`blur`]}]},_=(e,t)=>{m.value=[e,t],p.value=[e,t],h.locationType===SV.lat_lon?f.value=18:f.value=13},v=e=>{if(h.locationType!==SV.lat_lon)return;let{lat:t,lng:n}=e.latlng;_(t,n),h.latitude=t,h.longitude=n},y=e=>{let{lat:t,lng:n}=e.target.getLatLng();h.latitude=t,h.longitude=n,m.value=[t,n]},b=()=>{if(!navigator.geolocation){o.error(a(`weatherOpenweathermapPlugin.messages.geolocationNotSupported`));return}d.value=!0,navigator.geolocation.getCurrentPosition(e=>{let t=e.coords.latitude,n=e.coords.longitude;h.latitude=t,h.longitude=n,h.locationType=SV.lat_lon,_(t,n),d.value=!1},e=>{switch(d.value=!1,e.code){case e.PERMISSION_DENIED:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationDenied`));break;case e.POSITION_UNAVAILABLE:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationUnavailable`));break;case e.TIMEOUT:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationTimeout`));break;default:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationError`))}},{enableHighAccuracy:!0,timeout:1e4,maximumAge:0})},x=async()=>{if(u.value){if(r(`update:remote-form-result`,Go.WORKING),!await u.value.validate().catch(()=>!1)){r(`update:remote-form-result`,Go.NONE);return}try{let e={name:h.name,type:xV,location_type:h.locationType};h.locationType===SV.lat_lon?(e.latitude=h.latitude===null?void 0:Number(h.latitude),e.longitude=h.longitude===null?void 0:Number(h.longitude)):h.locationType===SV.city_name?(e.city_name=h.cityName,e.country_code=h.countryCode||void 0):h.locationType===SV.city_id?e.city_id=h.cityId?parseInt(h.cityId,10):void 0:h.locationType===SV.zip_code&&(e.zip_code=h.zipCode,e.country_code=h.zipCountryCode||void 0),await c({id:n.id,draft:!1,data:e}),o.success(a(`weatherOpenweathermapPlugin.messages.locations.created`,{location:h.name})),r(`update:remote-form-result`,Go.OK)}catch{o.error(a(`weatherOpenweathermapPlugin.messages.locations.notCreated`,{location:h.name})),r(`update:remote-form-result`,Go.ERROR),setTimeout(()=>{r(`update:remote-form-result`,Go.NONE)},2e3)}}};return le(()=>{h.latitude&&h.longitude&&_(h.latitude,h.longitude)}),F(()=>h.locationType,()=>{h.locationType===SV.lat_lon&&h.latitude&&h.longitude&&_(h.latitude,h.longitude)}),F(()=>h.latitude,()=>{h.locationType===SV.lat_lon&&h.latitude!==null&&h.latitude!==void 0&&h.longitude!==null&&h.longitude!==void 0&&_(h.latitude,h.longitude)}),F(()=>h.longitude,()=>{h.locationType===SV.lat_lon&&h.latitude!==null&&h.latitude!==void 0&&h.longitude!==null&&h.longitude!==void 0&&_(h.latitude,h.longitude)}),F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),x())}),F(()=>n.remoteFormReset,e=>{e&&(r(`update:remote-form-reset`,!1),u.value?.resetFields())}),F(h,()=>{r(`update:remote-form-changed`,!0)},{deep:!0}),(e,t)=>(A(),i(V,null,[D(L(Ir),{ref_key:`formEl`,ref:u,model:h,rules:g,"label-position":`top`,"status-icon":``,onSubmit:qe(x,[`prevent`])},{default:B(()=>[D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:h.name,"onUpdate:modelValue":t[0]||=e=>h.name=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.name.placeholder`)},null,8,[`modelValue`,`placeholder`]),l(`div`,TV,z(L(a)(`weatherOpenweathermapPlugin.fields.locations.name.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.title`),prop:`locationType`},{default:B(()=>[l(`div`,EV,[D(L(ei),{modelValue:h.locationType,"onUpdate:modelValue":t[1]||=e=>h.locationType=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.placeholder`),name:`locationType`,class:`flex-1`},{default:B(()=>[D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.latLon`),value:L(SV).lat_lon},null,8,[`label`,`value`]),D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.cityName`),value:L(SV).city_name},null,8,[`label`,`value`]),D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.cityId`),value:L(SV).city_id},null,8,[`label`,`value`]),D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.zipCode`),value:L(SV).zip_code},null,8,[`label`,`value`])]),_:1},8,[`modelValue`,`placeholder`]),D(L(Oe),{loading:d.value,disabled:h.locationType!==L(SV).lat_lon,class:`px-2!`,onClick:b},{icon:B(()=>[D(L(s),{icon:`mdi:map-marker-account-outline`})]),default:B(()=>[E(` `+z(L(a)(`weatherOpenweathermapPlugin.buttons.myLocation.title`)),1)]),_:1},8,[`loading`,`disabled`])])]),_:1},8,[`label`]),h.locationType===L(SV).lat_lon?(A(),i(`div`,DV,[D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.latitude.title`),prop:`latitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:h.latitude,"onUpdate:modelValue":t[2]||=e=>h.latitude=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.latitude.placeholder`),name:`latitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.longitude.title`),prop:`longitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:h.longitude,"onUpdate:modelValue":t[3]||=e=>h.longitude=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.longitude.placeholder`),name:`longitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])):R(``,!0),h.locationType===L(SV).city_name?(A(),O(L(Z),{key:1,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityName.title`),prop:`cityName`},{default:B(()=>[D(L(U),{modelValue:h.cityName,"onUpdate:modelValue":t[4]||=e=>h.cityName=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityName.placeholder`),name:`cityName`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),h.locationType===L(SV).city_name?(A(),O(L(Z),{key:2,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.title`),prop:`countryCode`},{default:B(()=>[D(L(U),{modelValue:h.countryCode,"onUpdate:modelValue":t[5]||=e=>h.countryCode=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.placeholder`),name:`countryCode`,maxlength:`2`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),h.locationType===L(SV).city_id?(A(),O(L(Z),{key:3,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityId.title`),prop:`cityId`},{default:B(()=>[D(L(U),{modelValue:h.cityId,"onUpdate:modelValue":t[6]||=e=>h.cityId=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityId.placeholder`),name:`cityId`,type:`number`},null,8,[`modelValue`,`placeholder`]),l(`div`,OV,z(L(a)(`weatherOpenweathermapPlugin.fields.locations.cityId.description`)),1)]),_:1},8,[`label`])):R(``,!0),h.locationType===L(SV).zip_code?(A(),O(L(Z),{key:4,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.zipCode.title`),prop:`zipCode`},{default:B(()=>[D(L(U),{modelValue:h.zipCode,"onUpdate:modelValue":t[7]||=e=>h.zipCode=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.zipCode.placeholder`),name:`zipCode`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),h.locationType===L(SV).zip_code?(A(),O(L(Z),{key:5,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.title`),prop:`zipCountryCode`},{default:B(()=>[D(L(U),{modelValue:h.zipCountryCode,"onUpdate:modelValue":t[8]||=e=>h.zipCountryCode=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.placeholder`),name:`zipCountryCode`,maxlength:`2`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0)]),_:1},8,[`model`]),h.locationType===L(SV).lat_lon?(A(),i(`div`,kV,[D(L(Wr),{zoom:f.value,"onUpdate:zoom":t[9]||=e=>f.value=e,"use-global-leaflet":!1,center:p.value,onClick:v},{default:B(()=>[D(L(Vr),{url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`}),m.value?(A(),O(L(qr),{key:0,"lat-lng":m.value,draggable:!0,onMoveend:y},null,8,[`lat-lng`])):R(``,!0)]),_:1},8,[`zoom`,`center`])])):R(``,!0)],64))}}),jV={class:`text-xs text-gray-500 mt-1`},MV={class:`flex flex-row items-center gap-2 w-full`},NV={key:0,class:`flex flex-row items-start gap-4`},PV={class:`text-xs text-gray-500 mt-1`},FV={key:0,style:{height:`35vh`,width:`100%`}},IV=k({name:`OpenWeatherMapLocationEditForm`,__name:`openweathermap-location-edit-form`,props:{location:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Go.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),{edit:c}=Uo(),u=j(void 0),d=j(!1),f=j(10),p=j([50.083328,14.46667]),m=j(null),h=()=>{let e=n.location;return{name:e.name||``,locationType:e.locationType||SV.lat_lon,latitude:e.latitude??null,longitude:e.longitude??null,cityName:e.cityName||``,countryCode:e.countryCode||``,cityId:e.cityId!==null&&e.cityId!==void 0?String(e.cityId):``,zipCode:e.zipCode||``,zipCountryCode:e.countryCode||``}},g=P(h()),_={name:[{required:!0,message:a(`weatherOpenweathermapPlugin.fields.locations.name.validation.required`),trigger:`blur`}],locationType:[{required:!0,message:a(`weatherOpenweathermapPlugin.fields.locations.locationType.validation.required`),trigger:`change`}],latitude:[{validator:(e,t,n)=>{g.locationType===SV.lat_lon&&(t==null||t===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.latitude.validation.required`))):g.locationType===SV.lat_lon&&(Number(t)<-90||Number(t)>90)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.latitude.validation.range`))):n()},trigger:[`change`,`blur`]}],longitude:[{validator:(e,t,n)=>{g.locationType===SV.lat_lon&&(t==null||t===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.longitude.validation.required`))):g.locationType===SV.lat_lon&&(Number(t)<-180||Number(t)>180)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.longitude.validation.range`))):n()},trigger:[`change`,`blur`]}],cityName:[{validator:(e,t,n)=>{g.locationType===SV.city_name&&(!t||t.trim()===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.cityName.validation.required`))):n()},trigger:[`change`,`blur`]}],cityId:[{validator:(e,t,n)=>{g.locationType===SV.city_id&&(!t||t.trim()===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.cityId.validation.required`))):n()},trigger:[`change`,`blur`]}],zipCode:[{validator:(e,t,n)=>{g.locationType===SV.zip_code&&(!t||t.trim()===``)?n(Error(a(`weatherOpenweathermapPlugin.fields.locations.zipCode.validation.required`))):n()},trigger:[`change`,`blur`]}]},v=(e,t)=>{m.value=[e,t],p.value=[e,t],g.locationType===SV.lat_lon?f.value=18:f.value=13},y=e=>{if(g.locationType!==SV.lat_lon)return;let{lat:t,lng:n}=e.latlng;v(t,n),g.latitude=t,g.longitude=n},b=e=>{let{lat:t,lng:n}=e.target.getLatLng();g.latitude=t,g.longitude=n,m.value=[t,n]},x=()=>{if(!navigator.geolocation){o.error(a(`weatherOpenweathermapPlugin.messages.geolocationNotSupported`));return}d.value=!0,navigator.geolocation.getCurrentPosition(e=>{let t=e.coords.latitude,n=e.coords.longitude;g.latitude=t,g.longitude=n,g.locationType=SV.lat_lon,v(t,n),d.value=!1},e=>{switch(d.value=!1,e.code){case e.PERMISSION_DENIED:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationDenied`));break;case e.POSITION_UNAVAILABLE:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationUnavailable`));break;case e.TIMEOUT:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationTimeout`));break;default:o.error(a(`weatherOpenweathermapPlugin.messages.geolocationError`))}},{enableHighAccuracy:!0,timeout:1e4,maximumAge:0})},S=async()=>{if(u.value){if(r(`update:remote-form-result`,Go.WORKING),!await u.value.validate().catch(()=>!1)){r(`update:remote-form-result`,Go.NONE);return}try{let e={type:xV,name:g.name,location_type:g.locationType};g.locationType===SV.lat_lon?(e.latitude=g.latitude===null?void 0:Number(g.latitude),e.longitude=g.longitude===null?void 0:Number(g.longitude)):g.locationType===SV.city_name?(e.city_name=g.cityName,e.country_code=g.countryCode||void 0):g.locationType===SV.city_id?e.city_id=g.cityId?parseInt(g.cityId,10):void 0:g.locationType===SV.zip_code&&(e.zip_code=g.zipCode,e.country_code=g.zipCountryCode||void 0),await c({id:n.location.id,data:e}),o.success(a(`weatherOpenweathermapPlugin.messages.locations.edited`,{location:g.name})),r(`update:remote-form-result`,Go.OK)}catch{o.error(a(`weatherOpenweathermapPlugin.messages.locations.notEdited`,{location:g.name})),r(`update:remote-form-result`,Go.ERROR),setTimeout(()=>{r(`update:remote-form-result`,Go.NONE)},2e3)}}};return le(()=>{g.latitude&&g.longitude&&v(g.latitude,g.longitude)}),F(()=>g.locationType,()=>{g.locationType===SV.lat_lon&&g.latitude&&g.longitude&&v(g.latitude,g.longitude)}),F(()=>g.latitude,()=>{g.locationType===SV.lat_lon&&g.latitude!==null&&g.latitude!==void 0&&g.longitude!==null&&g.longitude!==void 0&&v(g.latitude,g.longitude)}),F(()=>g.longitude,()=>{g.locationType===SV.lat_lon&&g.latitude!==null&&g.latitude!==void 0&&g.longitude!==null&&g.longitude!==void 0&&v(g.latitude,g.longitude)}),F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),S())}),F(()=>n.remoteFormReset,e=>{e&&(r(`update:remote-form-reset`,!1),Object.assign(g,h()),u.value?.clearValidate())}),F(g,()=>{r(`update:remote-form-changed`,!0)},{deep:!0}),(e,t)=>(A(),i(V,null,[D(L(Ir),{ref_key:`formEl`,ref:u,model:g,rules:_,"label-position":`top`,"status-icon":``,onSubmit:qe(S,[`prevent`])},{default:B(()=>[D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:g.name,"onUpdate:modelValue":t[0]||=e=>g.name=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.name.placeholder`)},null,8,[`modelValue`,`placeholder`]),l(`div`,jV,z(L(a)(`weatherOpenweathermapPlugin.fields.locations.name.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.title`),prop:`locationType`},{default:B(()=>[l(`div`,MV,[D(L(ei),{modelValue:g.locationType,"onUpdate:modelValue":t[1]||=e=>g.locationType=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.placeholder`),name:`locationType`,class:`flex-1`},{default:B(()=>[D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.latLon`),value:L(SV).lat_lon},null,8,[`label`,`value`]),D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.cityName`),value:L(SV).city_name},null,8,[`label`,`value`]),D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.cityId`),value:L(SV).city_id},null,8,[`label`,`value`]),D(L(ti),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.locationType.values.zipCode`),value:L(SV).zip_code},null,8,[`label`,`value`])]),_:1},8,[`modelValue`,`placeholder`]),D(L(Oe),{loading:d.value,disabled:g.locationType!==L(SV).lat_lon,class:`px-2!`,onClick:x},{icon:B(()=>[D(L(s),{icon:`mdi:map-marker-account-outline`})]),default:B(()=>[E(` `+z(L(a)(`weatherOpenweathermapPlugin.buttons.myLocation.title`)),1)]),_:1},8,[`loading`,`disabled`])])]),_:1},8,[`label`]),g.locationType===L(SV).lat_lon?(A(),i(`div`,NV,[D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.latitude.title`),prop:`latitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:g.latitude,"onUpdate:modelValue":t[2]||=e=>g.latitude=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.latitude.placeholder`),name:`latitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapPlugin.fields.locations.longitude.title`),prop:`longitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:g.longitude,"onUpdate:modelValue":t[3]||=e=>g.longitude=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.longitude.placeholder`),name:`longitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])):R(``,!0),g.locationType===L(SV).city_name?(A(),O(L(Z),{key:1,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityName.title`),prop:`cityName`},{default:B(()=>[D(L(U),{modelValue:g.cityName,"onUpdate:modelValue":t[4]||=e=>g.cityName=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityName.placeholder`),name:`cityName`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),g.locationType===L(SV).city_name?(A(),O(L(Z),{key:2,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.title`),prop:`countryCode`},{default:B(()=>[D(L(U),{modelValue:g.countryCode,"onUpdate:modelValue":t[5]||=e=>g.countryCode=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.placeholder`),name:`countryCode`,maxlength:`2`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),g.locationType===L(SV).city_id?(A(),O(L(Z),{key:3,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityId.title`),prop:`cityId`},{default:B(()=>[D(L(U),{modelValue:g.cityId,"onUpdate:modelValue":t[6]||=e=>g.cityId=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.cityId.placeholder`),name:`cityId`,type:`number`},null,8,[`modelValue`,`placeholder`]),l(`div`,PV,z(L(a)(`weatherOpenweathermapPlugin.fields.locations.cityId.description`)),1)]),_:1},8,[`label`])):R(``,!0),g.locationType===L(SV).zip_code?(A(),O(L(Z),{key:4,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.zipCode.title`),prop:`zipCode`},{default:B(()=>[D(L(U),{modelValue:g.zipCode,"onUpdate:modelValue":t[7]||=e=>g.zipCode=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.zipCode.placeholder`),name:`zipCode`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0),g.locationType===L(SV).zip_code?(A(),O(L(Z),{key:5,label:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.title`),prop:`zipCountryCode`},{default:B(()=>[D(L(U),{modelValue:g.zipCountryCode,"onUpdate:modelValue":t[8]||=e=>g.zipCountryCode=e,placeholder:L(a)(`weatherOpenweathermapPlugin.fields.locations.countryCode.placeholder`),name:`zipCountryCode`,maxlength:`2`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])):R(``,!0)]),_:1},8,[`model`]),g.locationType===L(SV).lat_lon?(A(),i(`div`,FV,[D(L(Wr),{zoom:f.value,"onUpdate:zoom":t[9]||=e=>f.value=e,"use-global-leaflet":!1,center:p.value,onClick:y},{default:B(()=>[D(L(Vr),{url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`}),m.value?(A(),O(L(qr),{key:0,"lat-lng":m.value,draggable:!0,onMoveend:b},null,8,[`lat-lng`])):R(``,!0)]),_:1},8,[`zoom`,`center`])])):R(``,!0)],64))}}),LV={"cs-CZ":{headings:{aboutApiSettings:`Nastavení OpenWeatherMap API`},fields:{config:{enabled:{title:`Povoleno`},apiKey:{title:`API klíč`,placeholder:`Zadejte svůj OpenWeatherMap API klíč`,description:`Získejte svůj bezplatný API klíč na openweathermap.org`,validation:{required:`Zadejte prosím svůj API klíč`}},unit:{title:`Jednotka teploty`,placeholder:`Vyberte jednotku teploty`,values:{celsius:`Celsia (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Název`,description:`Přátelský název pro tuto lokaci`,placeholder:`např. Domov, Kancelář, Chata`,validation:{required:`Název je povinný`}},citySearch:{title:`Hledat město`,placeholder:`Začněte psát pro vyhledání města...`,description:`Vyhledejte město a automaticky vyplníme souřadnice`},locationType:{title:`Typ lokace`,placeholder:`Vyberte způsob identifikace lokace`,values:{latLon:`GPS souřadnice`,cityName:`Název města`,cityId:`ID města`,zipCode:`PSČ`},validation:{required:`Typ lokace je povinný`}},coordinates:{title:`Souřadnice`},latitude:{title:`Zeměpisná šířka`,placeholder:`např. 51.5074`,validation:{required:`Zeměpisná šířka je povinná`,range:`Zeměpisná šířka musí být mezi -90 a 90`}},longitude:{title:`Zeměpisná délka`,placeholder:`např. -0.1278`,validation:{required:`Zeměpisná délka je povinná`,range:`Zeměpisná délka musí být mezi -180 a 180`}},map:{title:`Lokace na mapě`},cityName:{title:`Název města`,placeholder:`např. Praha`,validation:{required:`Název města je povinný`}},countryCode:{title:`Kód země`,placeholder:`např. CZ`},cityId:{title:`ID města`,placeholder:`např. 2643743`,description:`ID města na OpenWeatherMap (najdete na openweathermap.org)`,validation:{required:`ID města je povinné`}},zipCode:{title:`PSČ`,placeholder:`např. 10000`,validation:{required:`PSČ je povinné`}}}},buttons:{myLocation:{title:`Moje poloha`}},messages:{config:{edited:`Nastavení OpenWeatherMap bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení OpenWeatherMap`},locations:{created:`Lokace "{location}" byla vytvořena`,notCreated:`Nepodařilo se vytvořit lokaci "{location}"`,edited:`Lokace "{location}" byla aktualizována`,notEdited:`Nepodařilo se aktualizovat lokaci "{location}"`},geolocationNotSupported:`Geolokace není podporována vaším prohlížečem`,geolocationDenied:`Přístup k poloze byl zamítnut. Povolte prosím oprávnění k poloze.`,geolocationUnavailable:`Informace o poloze jsou nedostupné`,geolocationTimeout:`Požadavek na zjištění vaší polohy vypršel`,geolocationError:`Při zjišťování vaší polohy došlo k chybě`},texts:{aboutApiSettings:`Nakonfigurujte nastavení OpenWeatherMap API. Pro načítání dat o počasí potřebujete platný API klíč. Vyberte preferovanou jednotku teploty pro zobrazení počasí.`}},"de-DE":{headings:{aboutApiSettings:`OpenWeatherMap API-Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},apiKey:{title:`API-Schlüssel`,placeholder:`Geben Sie Ihren OpenWeatherMap API-Schlüssel ein`,description:`Holen Sie sich Ihren kostenlosen API-Schlüssel von openweathermap.org`,validation:{required:`Bitte geben Sie Ihren API-Schlüssel ein`}},unit:{title:`Temperatureinheit`,placeholder:`Temperatureinheit auswählen`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Name`,description:`Ein freundlicher Name für diesen Standort`,placeholder:`z.B. Zuhause, Büro, Ferienhaus`,validation:{required:`Name ist erforderlich`}},citySearch:{title:`Stadt suchen`,placeholder:`Beginnen Sie zu tippen, um eine Stadt zu suchen...`,description:`Suchen Sie eine Stadt und wir füllen die Koordinaten automatisch aus`},locationType:{title:`Standorttyp`,placeholder:`Wählen Sie, wie der Standort identifiziert wird`,values:{latLon:`GPS-Koordinaten`,cityName:`Stadtname`,cityId:`Stadt-ID`,zipCode:`Postleitzahl`},validation:{required:`Standorttyp ist erforderlich`}},coordinates:{title:`Koordinaten`},latitude:{title:`Breitengrad`,placeholder:`z.B. 51.5074`,validation:{required:`Breitengrad ist erforderlich`,range:`Breitengrad muss zwischen -90 und 90 liegen`}},longitude:{title:`Längengrad`,placeholder:`z.B. -0.1278`,validation:{required:`Längengrad ist erforderlich`,range:`Längengrad muss zwischen -180 und 180 liegen`}},map:{title:`Standort auf Karte`},cityName:{title:`Stadtname`,placeholder:`z.B. Berlin`,validation:{required:`Stadtname ist erforderlich`}},countryCode:{title:`Ländercode`,placeholder:`z.B. DE`},cityId:{title:`Stadt-ID`,placeholder:`z.B. 2643743`,description:`OpenWeatherMap Stadt-ID (finden Sie unter openweathermap.org)`,validation:{required:`Stadt-ID ist erforderlich`}},zipCode:{title:`Postleitzahl`,placeholder:`z.B. 10115`,validation:{required:`Postleitzahl ist erforderlich`}}}},buttons:{myLocation:{title:`Mein Standort`}},messages:{config:{edited:`OpenWeatherMap-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der OpenWeatherMap-Einstellungen fehlgeschlagen`},locations:{created:`Standort "{location}" wurde erstellt`,notCreated:`Standort "{location}" konnte nicht erstellt werden`,edited:`Standort "{location}" wurde aktualisiert`,notEdited:`Standort "{location}" konnte nicht aktualisiert werden`},geolocationNotSupported:`Geolokalisierung wird von Ihrem Browser nicht unterstützt`,geolocationDenied:`Standortzugriff wurde verweigert. Bitte aktivieren Sie die Standortberechtigung.`,geolocationUnavailable:`Standortinformationen sind nicht verfügbar`,geolocationTimeout:`Die Anfrage zur Standortermittlung hat das Zeitlimit überschritten`,geolocationError:`Beim Abrufen Ihres Standorts ist ein Fehler aufgetreten`},texts:{aboutApiSettings:`Konfigurieren Sie Ihre OpenWeatherMap API-Einstellungen. Sie benötigen einen gültigen API-Schlüssel, um Wetterdaten abzurufen. Wählen Sie Ihre bevorzugte Temperatureinheit für die Wetteranzeige.`}},"en-US":{headings:{aboutApiSettings:`OpenWeatherMap API settings`},fields:{config:{enabled:{title:`Enabled`},apiKey:{title:`API key`,placeholder:`Enter your OpenWeatherMap API key`,description:`Get your free API key from openweathermap.org`,validation:{required:`Please enter your API key`}},unit:{title:`Temperature unit`,placeholder:`Select temperature unit`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Name`,description:`A friendly name for this location`,placeholder:`e.g., Home, Office, Beach House`,validation:{required:`Name is required`}},citySearch:{title:`Search city`,placeholder:`Start typing to search for a city...`,description:`Search for a city and we'll auto-fill the coordinates`},locationType:{title:`Location type`,placeholder:`Select how to identify the location`,values:{latLon:`GPS coordinates`,cityName:`City name`,cityId:`City ID`,zipCode:`ZIP code`},validation:{required:`Location type is required`}},coordinates:{title:`Coordinates`},latitude:{title:`Latitude`,placeholder:`e.g., 51.5074`,validation:{required:`Latitude is required`,range:`Latitude must be between -90 and 90`}},longitude:{title:`Longitude`,placeholder:`e.g., -0.1278`,validation:{required:`Longitude is required`,range:`Longitude must be between -180 and 180`}},map:{title:`Location on map`},cityName:{title:`City name`,placeholder:`e.g., London`,validation:{required:`City name is required`}},countryCode:{title:`Country code`,placeholder:`e.g., GB`},cityId:{title:`City ID`,placeholder:`e.g., 2643743`,description:`OpenWeatherMap city ID (find it at openweathermap.org)`,validation:{required:`City ID is required`}},zipCode:{title:`ZIP code`,placeholder:`e.g., 10001`,validation:{required:`ZIP code is required`}}}},buttons:{myLocation:{title:`My location`}},messages:{config:{edited:`OpenWeatherMap settings have been updated`,notEdited:`Failed to update OpenWeatherMap settings`},locations:{created:`Location "{location}" has been created`,notCreated:`Failed to create location "{location}"`,edited:`Location "{location}" has been updated`,notEdited:`Failed to update location "{location}"`},geolocationNotSupported:`Geolocation is not supported by your browser`,geolocationDenied:`Location access was denied. Please enable location permissions.`,geolocationUnavailable:`Location information is unavailable`,geolocationTimeout:`The request to get your location timed out`,geolocationError:`An error occurred while getting your location`},texts:{aboutApiSettings:`Configure your OpenWeatherMap API settings. You need a valid API key to fetch weather data. Select your preferred temperature unit for weather displays.`}},"es-ES":{headings:{aboutApiSettings:`Configuración de la API de OpenWeatherMap`},fields:{config:{enabled:{title:`Habilitado`},apiKey:{title:`Clave API`,placeholder:`Introduzca su clave API de OpenWeatherMap`,description:`Obtenga su clave API gratuita en openweathermap.org`,validation:{required:`Por favor, introduzca su clave API`}},unit:{title:`Unidad de temperatura`,placeholder:`Seleccione la unidad de temperatura`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Nombre`,description:`Un nombre descriptivo para esta ubicación`,placeholder:`p. ej., Casa, Oficina, Casa de playa`,validation:{required:`El nombre es obligatorio`}},citySearch:{title:`Buscar ciudad`,placeholder:`Comience a escribir para buscar una ciudad...`,description:`Busque una ciudad y completaremos automáticamente las coordenadas`},locationType:{title:`Tipo de ubicación`,placeholder:`Seleccione cómo identificar la ubicación`,values:{latLon:`Coordenadas GPS`,cityName:`Nombre de ciudad`,cityId:`ID de ciudad`,zipCode:`Código postal`},validation:{required:`El tipo de ubicación es obligatorio`}},coordinates:{title:`Coordenadas`},latitude:{title:`Latitud`,placeholder:`p. ej., 51.5074`,validation:{required:`La latitud es obligatoria`,range:`La latitud debe estar entre -90 y 90`}},longitude:{title:`Longitud`,placeholder:`p. ej., -0.1278`,validation:{required:`La longitud es obligatoria`,range:`La longitud debe estar entre -180 y 180`}},map:{title:`Ubicación en el mapa`},cityName:{title:`Nombre de ciudad`,placeholder:`p. ej., Londres`,validation:{required:`El nombre de ciudad es obligatorio`}},countryCode:{title:`Código de país`,placeholder:`p. ej., ES`},cityId:{title:`ID de ciudad`,placeholder:`p. ej., 2643743`,description:`ID de ciudad de OpenWeatherMap (encuéntrelo en openweathermap.org)`,validation:{required:`El ID de ciudad es obligatorio`}},zipCode:{title:`Código postal`,placeholder:`p. ej., 10001`,validation:{required:`El código postal es obligatorio`}}}},buttons:{myLocation:{title:`Mi ubicación`}},messages:{config:{edited:`La configuración de OpenWeatherMap se ha actualizado`,notEdited:`No se pudo actualizar la configuración de OpenWeatherMap`},locations:{created:`La ubicación "{location}" ha sido creada`,notCreated:`No se pudo crear la ubicación "{location}"`,edited:`La ubicación "{location}" ha sido actualizada`,notEdited:`No se pudo actualizar la ubicación "{location}"`},geolocationNotSupported:`La geolocalización no es compatible con su navegador`,geolocationDenied:`Se denegó el acceso a la ubicación. Por favor, habilite los permisos de ubicación.`,geolocationUnavailable:`La información de ubicación no está disponible`,geolocationTimeout:`La solicitud para obtener su ubicación ha expirado`,geolocationError:`Se produjo un error al obtener su ubicación`},texts:{aboutApiSettings:`Configure los ajustes de la API de OpenWeatherMap. Necesita una clave API válida para obtener datos del clima. Seleccione su unidad de temperatura preferida para las visualizaciones del clima.`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia API OpenWeatherMap`},fields:{config:{enabled:{title:`Włączony`},apiKey:{title:`Klucz API`,placeholder:`Wprowadź swój klucz API OpenWeatherMap`,description:`Uzyskaj darmowy klucz API na openweathermap.org`,validation:{required:`Wprowadź swój klucz API`}},unit:{title:`Jednostka temperatury`,placeholder:`Wybierz jednostkę temperatury`,values:{celsius:`Celsjusz (°C)`,fahrenheit:`Fahrenheita (°F)`}}},locations:{name:{title:`Nazwa`,description:`Przyjazna nazwa dla tej lokalizacji`,placeholder:`np. Dom, Biuro, Domek na plaży`,validation:{required:`Nazwa jest wymagana`}},citySearch:{title:`Wyszukaj miasto`,placeholder:`Zacznij pisać, aby wyszukać miasto...`,description:`Wyszukaj miasto, a współrzędne zostaną uzupełnione automatycznie`},locationType:{title:`Typ lokalizacji`,placeholder:`Wybierz sposób identyfikacji lokalizacji`,values:{latLon:`Współrzędne GPS`,cityName:`Nazwa miasta`,cityId:`ID miasta`,zipCode:`Kod pocztowy`},validation:{required:`Typ lokalizacji jest wymagany`}},coordinates:{title:`Współrzędne`},latitude:{title:`Szerokość geograficzna`,placeholder:`np. 51.5074`,validation:{required:`Szerokość geograficzna jest wymagana`,range:`Szerokość geograficzna musi być między -90 a 90`}},longitude:{title:`Długość geograficzna`,placeholder:`np. -0.1278`,validation:{required:`Długość geograficzna jest wymagana`,range:`Długość geograficzna musi być między -180 a 180`}},map:{title:`Lokalizacja na mapie`},cityName:{title:`Nazwa miasta`,placeholder:`np. Warszawa`,validation:{required:`Nazwa miasta jest wymagana`}},countryCode:{title:`Kod kraju`,placeholder:`np. PL`},cityId:{title:`ID miasta`,placeholder:`np. 2643743`,description:`ID miasta OpenWeatherMap (znajdziesz je na openweathermap.org)`,validation:{required:`ID miasta jest wymagane`}},zipCode:{title:`Kod pocztowy`,placeholder:`np. 00-001`,validation:{required:`Kod pocztowy jest wymagany`}}}},buttons:{myLocation:{title:`Moja lokalizacja`}},messages:{config:{edited:`Ustawienia OpenWeatherMap zostały zaktualizowane`,notEdited:`Nie udało się zaktualizować ustawień OpenWeatherMap`},locations:{created:`Lokalizacja "{location}" została utworzona`,notCreated:`Nie udało się utworzyć lokalizacji "{location}"`,edited:`Lokalizacja "{location}" została zaktualizowana`,notEdited:`Nie udało się zaktualizować lokalizacji "{location}"`},geolocationNotSupported:`Geolokalizacja nie jest obsługiwana przez Twoją przeglądarkę`,geolocationDenied:`Dostęp do lokalizacji został odrzucony. Włącz uprawnienia do lokalizacji.`,geolocationUnavailable:`Informacje o lokalizacji są niedostępne`,geolocationTimeout:`Żądanie pobrania Twojej lokalizacji przekroczyło limit czasu`,geolocationError:`Wystąpił błąd podczas pobierania Twojej lokalizacji`},texts:{aboutApiSettings:`Skonfiguruj ustawienia API OpenWeatherMap. Potrzebujesz prawidłowego klucza API, aby pobierać dane pogodowe. Wybierz preferowaną jednostkę temperatury dla wyświetlania pogody.`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia API OpenWeatherMap`},fields:{config:{enabled:{title:`Povolený`},apiKey:{title:`API kľúč`,placeholder:`Zadajte svoj API kľúč OpenWeatherMap`,description:`Získajte svoj bezplatný API kľúč z openweathermap.org`,validation:{required:`Prosím zadajte svoj API kľúč`}},unit:{title:`Jednotka teploty`,placeholder:`Vyberte jednotku teploty`,values:{celsius:`Celzia (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Názov`,description:`Priateľský názov pre túto polohu`,placeholder:`napr. Domov, Kancelária, Chata`,validation:{required:`Názov je povinný`}},citySearch:{title:`Vyhľadať mesto`,placeholder:`Začnite písať na vyhľadanie mesta...`,description:`Vyhľadajte mesto a automaticky vyplníme súradnice`},locationType:{title:`Typ polohy`,placeholder:`Vyberte spôsob identifikácie polohy`,values:{latLon:`GPS súradnice`,cityName:`Názov mesta`,cityId:`ID mesta`,zipCode:`PSČ`},validation:{required:`Typ polohy je povinný`}},coordinates:{title:`Súradnice`},latitude:{title:`Zemepisná šírka`,placeholder:`napr. 51.5074`,validation:{required:`Zemepisná šírka je povinná`,range:`Zemepisná šírka musí byť medzi -90 a 90`}},longitude:{title:`Zemepisná dĺžka`,placeholder:`napr. -0.1278`,validation:{required:`Zemepisná dĺžka je povinná`,range:`Zemepisná dĺžka musí byť medzi -180 a 180`}},map:{title:`Poloha na mape`},cityName:{title:`Názov mesta`,placeholder:`napr. Bratislava`,validation:{required:`Názov mesta je povinný`}},countryCode:{title:`Kód krajiny`,placeholder:`napr. SK`},cityId:{title:`ID mesta`,placeholder:`napr. 2643743`,description:`ID mesta OpenWeatherMap (nájdete ho na openweathermap.org)`,validation:{required:`ID mesta je povinné`}},zipCode:{title:`PSČ`,placeholder:`napr. 81101`,validation:{required:`PSČ je povinné`}}}},buttons:{myLocation:{title:`Moja poloha`}},messages:{config:{edited:`Nastavenia OpenWeatherMap boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia OpenWeatherMap`},locations:{created:`Poloha "{location}" bola vytvorená`,notCreated:`Nepodarilo sa vytvoriť polohu "{location}"`,edited:`Poloha "{location}" bola aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať polohu "{location}"`},geolocationNotSupported:`Geolokácia nie je podporovaná vaším prehliadačom`,geolocationDenied:`Prístup k polohe bol zamietnutý. Prosím povoľte oprávnenia polohy.`,geolocationUnavailable:`Informácie o polohe nie sú dostupné`,geolocationTimeout:`Požiadavka na získanie polohy vypršala`,geolocationError:`Pri získavaní vašej polohy sa vyskytla chyba`},texts:{aboutApiSettings:`Nakonfigurujte nastavenia API OpenWeatherMap. Na získavanie údajov o počasí potrebujete platný API kľúč. Vyberte preferovanú jednotku teploty pre zobrazenie počasia.`}}},RV=Ki.extend({apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),unit:G(an)}),zV=Sc.extend({locationType:G(wn),latitude:q().min(-90).max(90).nullable().optional(),longitude:q().min(-180).max(180).nullable().optional(),cityName:X().nullable().optional(),countryCode:X().nullable().optional(),cityId:q().nullable().optional(),zipCode:X().nullable().optional()}),BV=bc.extend({locationType:G(wn).optional(),latitude:q().min(-90).max(90).nullable().optional(),longitude:q().min(-180).max(180).nullable().optional(),cityName:X().nullable().optional(),countryCode:X().nullable().optional(),cityId:q().nullable().optional(),zipCode:X().nullable().optional()}),VV=Wi.extend({apiKey:X().trim().nullable().optional(),apiKeyConfigured:J().default(!1),unit:G(an).default(an.celsius)}),HV=Zi.and(K({type:Y(bV),api_key:X().trim().nullable().optional(),unit:G(an).optional()}));Ri.and(K({type:Y(bV),api_key:X().trim().nullable().optional(),api_key_configured:J(),unit:G(an)}));var UV=zo.extend({locationType:G(wn),latitude:q().nullable().optional(),longitude:q().nullable().optional(),cityName:X().nullable().optional(),countryCode:X().nullable().optional(),cityId:q().nullable().optional(),zipCode:X().nullable().optional()}),WV=Vo.and(K({type:Y(xV),location_type:G(wn),latitude:q().optional(),longitude:q().optional(),city_name:X().optional(),country_code:X().optional(),city_id:q().optional(),zip_code:X().optional()})),GV=Ho.and(K({type:Y(xV),location_type:G(wn).optional(),latitude:q().optional(),longitude:q().optional(),city_name:X().optional(),country_code:X().optional(),city_id:q().optional(),zip_code:X().optional()})),KV=Symbol(`FB-Plugin-WeatherOpenweathermap`),qV={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(LV)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{weatherOpenweathermapPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(KV,{type:bV,source:`com.fastybird.smart-panel.plugin.weather-openweathermap`,name:`OpenWeatherMap`,description:`Weather data provider using OpenWeatherMap API 2.5`,links:{documentation:`https://openweathermap.org/api`,devDocumentation:`https://openweathermap.org/api`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:wV},schemas:{pluginConfigSchema:VV,pluginConfigEditFormSchema:RV,pluginConfigUpdateReqSchema:HV},modules:[ka]},{type:xV,components:{locationAddForm:AV,locationEditForm:IV},schemas:{locationSchema:UV,locationAddFormSchema:zV,locationEditFormSchema:BV,locationCreateReqSchema:WV,locationUpdateReqSchema:GV},modules:[Wo]}],modules:[ka,Wo],isCore:!0})}},JV=`weather-openweathermap-onecall`,YV=`weather-openweathermap-onecall-plugin`,XV=`weather-openweathermap-onecall`,ZV={class:`text-xs text-gray-500 mt-1`},QV=k({name:`OpenWeatherMapOneCallConfigForm`,__name:`openweathermap-onecall-config-form`,props:{config:{},remoteFormSubmit:{type:Boolean},remoteFormResult:{default:Aa.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1},layout:{default:Ta.DEFAULT}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),{formEl:o,model:s,formChanged:c,submit:u,formResult:d}=Xi({config:n.config,messages:{success:a(`weatherOpenweathermapOnecallPlugin.messages.config.edited`),error:a(`weatherOpenweathermapOnecallPlugin.messages.config.notEdited`)}}),f=p(()=>[{value:an.celsius,label:a(`weatherOpenweathermapOnecallPlugin.fields.config.unit.values.celsius`)},{value:an.fahrenheit,label:a(`weatherOpenweathermapOnecallPlugin.fields.config.unit.values.fahrenheit`)}]),m=P({});return F(()=>d.value,async e=>{r(`update:remote-form-result`,e)}),F(()=>n.remoteFormSubmit,async e=>{e&&(r(`update:remote-form-submit`,!1),u().catch(()=>{}))}),F(()=>n.remoteFormReset,e=>{if(r(`update:remote-form-reset`,!1),e){if(!o.value)return;o.value.resetFields()}}),F(()=>c.value,e=>{r(`update:remote-form-changed`,e)}),(e,t)=>(A(),O(L(Ir),{ref_key:`formEl`,ref:o,model:L(s),rules:m,"label-position":`top`,"status-icon":``},{default:B(()=>[D(L(Q),{type:`info`,title:L(a)(`weatherOpenweathermapOnecallPlugin.headings.aboutApiSettings`),description:L(a)(`weatherOpenweathermapOnecallPlugin.texts.aboutApiSettings`),closable:!1},null,8,[`title`,`description`]),D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.config.enabled.title`),prop:`enabled`,"label-position":`left`,class:`mt-3`},{default:B(()=>[D(L(Vn),{modelValue:L(s).enabled,"onUpdate:modelValue":t[0]||=e=>L(s).enabled=e,name:`enabled`},null,8,[`modelValue`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.config.apiKey.title`),prop:`apiKey`},{default:B(()=>[D(L(Zp),{modelValue:L(s).apiKey,"onUpdate:modelValue":t[1]||=e=>L(s).apiKey=e,configured:L(s).apiKeyConfigured,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.config.apiKey.placeholder`),name:`apiKey`},null,8,[`modelValue`,`configured`,`placeholder`]),l(`div`,ZV,z(L(a)(`weatherOpenweathermapOnecallPlugin.fields.config.apiKey.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.config.unit.title`),prop:`unit`},{default:B(()=>[D(L(ei),{modelValue:L(s).unit,"onUpdate:modelValue":t[2]||=e=>L(s).unit=e,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.config.unit.placeholder`),class:`w-full`},{default:B(()=>[(A(!0),i(V,null,I(f.value,e=>(A(),O(L(ti),{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`model`,`rules`]))}}),$V=()=>{let e=Zn(),t=j(!1);return{searchCities:async n=>{if(!n||n.length<2)return[];t.value=!0;try{let{data:t,response:r}=await e.client.GET(`/${Ie}/${JV}/geolocation/city-to-coordinates`,{params:{query:{city:n}}});return r.ok&&t&&t.data||[]}catch{return[]}finally{t.value=!1}},isSearching:t}},eH={class:`text-xs text-gray-500 mt-1`},tH={class:`flex flex-row items-center gap-2 w-full`},nH={class:`flex flex-col py-1`},rH={class:`font-medium`},iH={class:`text-xs text-gray-500`},aH={class:`ml-2 text-gray-400`},oH={class:`text-xs text-gray-500 mt-1`},sH={class:`flex flex-row items-start gap-4`},cH={style:{height:`35vh`,width:`100%`}},lH=k({name:`OpenWeatherMapOneCallLocationAddForm`,__name:`openweathermap-onecall-location-add-form`,props:{id:{},type:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Go.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),{add:c}=Uo(),{searchCities:u,isSearching:d}=$V(),f=j(void 0),p=j(``),m=j(!1),h=j(10),g=j([50.083328,14.46667]),_=j(null),v=P({name:``,latitude:null,longitude:null,countryCode:``}),y={name:[{required:!0,message:a(`weatherOpenweathermapOnecallPlugin.fields.locations.name.validation.required`),trigger:`blur`}],latitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.validation.required`))):Number(t)<-90||Number(t)>90?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.validation.range`))):n()},trigger:[`change`,`blur`]}],longitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.validation.required`))):Number(t)<-180||Number(t)>180?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.validation.range`))):n()},trigger:[`change`,`blur`]}]},b=(e,t)=>{_.value=[e,t],g.value=[e,t],h.value=18},x=e=>{let{lat:t,lng:n}=e.latlng;b(t,n),v.latitude=t,v.longitude=n},S=e=>{let{lat:t,lng:n}=e.target.getLatLng();v.latitude=t,v.longitude=n,_.value=[t,n]},C=(e,t)=>{if(!e||e.length<2){t([]);return}u(e).then(e=>{t(e.map(e=>({...e,value:`${e.name}${e.state?`, ${e.state}`:``}, ${e.country}`})))})},w=e=>{let t=e;v.name=`${t.name}${t.state?`, ${t.state}`:``}, ${t.country}`,v.latitude=t.lat,v.longitude=t.lon,v.countryCode=t.country,p.value=``,b(t.lat,t.lon)},T=()=>{if(!navigator.geolocation){o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationNotSupported`));return}m.value=!0,navigator.geolocation.getCurrentPosition(e=>{let t=e.coords.latitude,n=e.coords.longitude;v.latitude=t,v.longitude=n,b(t,n),m.value=!1},e=>{switch(m.value=!1,e.code){case e.PERMISSION_DENIED:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationDenied`));break;case e.POSITION_UNAVAILABLE:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationUnavailable`));break;case e.TIMEOUT:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationTimeout`));break;default:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationError`))}},{enableHighAccuracy:!0,timeout:1e4,maximumAge:0})},ee=async()=>{if(f.value){if(r(`update:remote-form-result`,Go.WORKING),!await f.value.validate().catch(()=>!1)){r(`update:remote-form-result`,Go.NONE);return}try{let e={name:v.name,type:XV,latitude:v.latitude===null?void 0:Number(v.latitude),longitude:v.longitude===null?void 0:Number(v.longitude)};v.countryCode&&(e.country_code=v.countryCode),await c({id:n.id,draft:!1,data:e}),o.success(a(`weatherOpenweathermapOnecallPlugin.messages.locations.created`,{location:v.name})),r(`update:remote-form-result`,Go.OK)}catch{o.error(a(`weatherOpenweathermapOnecallPlugin.messages.locations.notCreated`,{location:v.name})),r(`update:remote-form-result`,Go.ERROR),setTimeout(()=>{r(`update:remote-form-result`,Go.NONE)},2e3)}}};return le(()=>{v.latitude&&v.longitude&&b(v.latitude,v.longitude)}),F(()=>v.latitude,()=>{v.latitude!==null&&v.latitude!==void 0&&v.longitude!==null&&v.longitude!==void 0&&b(v.latitude,v.longitude)}),F(()=>v.longitude,()=>{v.latitude!==null&&v.latitude!==void 0&&v.longitude!==null&&v.longitude!==void 0&&b(v.latitude,v.longitude)}),F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),ee())}),F(()=>n.remoteFormReset,e=>{e&&(r(`update:remote-form-reset`,!1),f.value?.resetFields())}),F(v,()=>{r(`update:remote-form-changed`,!0)},{deep:!0}),(e,t)=>(A(),i(V,null,[D(L(Ir),{ref_key:`formEl`,ref:f,model:v,rules:y,"label-position":`top`,"status-icon":``,onSubmit:qe(ee,[`prevent`])},{default:B(()=>[D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:v.name,"onUpdate:modelValue":t[0]||=e=>v.name=e,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.name.placeholder`)},null,8,[`modelValue`,`placeholder`]),l(`div`,eH,z(L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.name.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.citySearch.title`)},{default:B(()=>[l(`div`,tH,[D(L(Ur),{modelValue:p.value,"onUpdate:modelValue":t[1]||=e=>p.value=e,"fetch-suggestions":C,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.citySearch.placeholder`),loading:L(d),debounce:500,clearable:``,class:`flex-1`,onSelect:w},{default:B(({item:e})=>[l(`div`,nH,[l(`span`,rH,z(e.name),1),l(`span`,iH,[E(z(e.state?`${e.state}, `:``)+z(e.country)+` `,1),l(`span`,aH,` (`+z(e.lat.toFixed(4))+`, `+z(e.lon.toFixed(4))+`) `,1)])])]),_:1},8,[`modelValue`,`placeholder`,`loading`]),D(L(Oe),{loading:m.value,class:`px-2!`,onClick:T},{icon:B(()=>[D(L(s),{icon:`mdi:map-marker-account-outline`})]),default:B(()=>[E(` `+z(L(a)(`weatherOpenweathermapOnecallPlugin.buttons.myLocation.title`)),1)]),_:1},8,[`loading`])]),l(`div`,oH,z(L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.citySearch.description`)),1)]),_:1},8,[`label`]),D(L(Vt),{"content-position":`left`,class:`mt-6!`},{default:B(()=>[E(z(L(a)(`weatherOpenweathermapOnecallPlugin.texts.orEnterManually`)),1)]),_:1}),l(`div`,sH,[D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.title`),prop:`latitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:v.latitude,"onUpdate:modelValue":t[2]||=e=>v.latitude=e,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.placeholder`),name:`latitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.title`),prop:`longitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:v.longitude,"onUpdate:modelValue":t[3]||=e=>v.longitude=e,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.placeholder`),name:`longitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),_:1},8,[`model`]),l(`div`,cH,[D(L(Wr),{zoom:h.value,"onUpdate:zoom":t[4]||=e=>h.value=e,"use-global-leaflet":!1,center:g.value,onClick:x},{default:B(()=>[D(L(Vr),{url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`}),_.value?(A(),O(L(qr),{key:0,"lat-lng":_.value,draggable:!0,onMoveend:S},null,8,[`lat-lng`])):R(``,!0)]),_:1},8,[`zoom`,`center`])])],64))}}),uH={class:`text-xs text-gray-500 mt-1`},dH={class:`flex flex-row items-center gap-2 w-full`},fH={class:`flex flex-col py-1`},pH={class:`font-medium`},mH={class:`text-xs text-gray-500`},hH={class:`ml-2 text-gray-400`},gH={class:`text-xs text-gray-500 mt-1`},_H={class:`flex flex-row items-start gap-4`},vH={style:{height:`35vh`,width:`100%`}},yH=k({name:`OpenWeatherMapOneCallLocationEditForm`,__name:`openweathermap-onecall-location-edit-form`,props:{location:{},remoteFormSubmit:{type:Boolean,default:!1},remoteFormResult:{default:Go.NONE},remoteFormReset:{type:Boolean,default:!1},remoteFormChanged:{type:Boolean,default:!1}},emits:[`update:remote-form-submit`,`update:remote-form-result`,`update:remote-form-reset`,`update:remote-form-changed`],setup(e,{emit:t}){let n=e,r=t,{t:a}=M(),o=Tn(),{edit:c}=Uo(),{searchCities:u,isSearching:d}=$V(),f=j(void 0),p=j(``),m=j(!1),h=j(10),g=j([50.083328,14.46667]),_=j(null),v=()=>{let e=n.location;return{name:e.name||``,latitude:e.latitude??null,longitude:e.longitude??null,countryCode:e.countryCode||``}},y=P(v()),b={name:[{required:!0,message:a(`weatherOpenweathermapOnecallPlugin.fields.locations.name.validation.required`),trigger:`blur`}],latitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.validation.required`))):Number(t)<-90||Number(t)>90?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.validation.range`))):n()},trigger:[`change`,`blur`]}],longitude:[{validator:(e,t,n)=>{t==null||t===``?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.validation.required`))):Number(t)<-180||Number(t)>180?n(Error(a(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.validation.range`))):n()},trigger:[`change`,`blur`]}]},x=(e,t)=>{_.value=[e,t],g.value=[e,t],h.value=18},S=e=>{let{lat:t,lng:n}=e.latlng;x(t,n),y.latitude=t,y.longitude=n},C=e=>{let{lat:t,lng:n}=e.target.getLatLng();y.latitude=t,y.longitude=n,_.value=[t,n]},w=(e,t)=>{if(!e||e.length<2){t([]);return}u(e).then(e=>{t(e.map(e=>({...e,value:`${e.name}${e.state?`, ${e.state}`:``}, ${e.country}`})))})},T=e=>{let t=e;y.name=`${t.name}${t.state?`, ${t.state}`:``}, ${t.country}`,y.latitude=t.lat,y.longitude=t.lon,y.countryCode=t.country,p.value=``,x(t.lat,t.lon)},ee=()=>{if(!navigator.geolocation){o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationNotSupported`));return}m.value=!0,navigator.geolocation.getCurrentPosition(e=>{let t=e.coords.latitude,n=e.coords.longitude;y.latitude=t,y.longitude=n,x(t,n),m.value=!1},e=>{switch(m.value=!1,e.code){case e.PERMISSION_DENIED:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationDenied`));break;case e.POSITION_UNAVAILABLE:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationUnavailable`));break;case e.TIMEOUT:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationTimeout`));break;default:o.error(a(`weatherOpenweathermapOnecallPlugin.messages.geolocationError`))}},{enableHighAccuracy:!0,timeout:1e4,maximumAge:0})},te=async()=>{if(f.value){if(r(`update:remote-form-result`,Go.WORKING),!await f.value.validate().catch(()=>!1)){r(`update:remote-form-result`,Go.NONE);return}try{let e={type:XV,name:y.name,latitude:y.latitude===null?void 0:Number(y.latitude),longitude:y.longitude===null?void 0:Number(y.longitude)};y.countryCode&&(e.country_code=y.countryCode),await c({id:n.location.id,data:e}),o.success(a(`weatherOpenweathermapOnecallPlugin.messages.locations.edited`,{location:y.name})),r(`update:remote-form-result`,Go.OK)}catch{o.error(a(`weatherOpenweathermapOnecallPlugin.messages.locations.notEdited`,{location:y.name})),r(`update:remote-form-result`,Go.ERROR),setTimeout(()=>{r(`update:remote-form-result`,Go.NONE)},2e3)}}};return le(()=>{y.latitude&&y.longitude&&x(y.latitude,y.longitude)}),F(()=>y.latitude,()=>{y.latitude!==null&&y.latitude!==void 0&&y.longitude!==null&&y.longitude!==void 0&&x(y.latitude,y.longitude)}),F(()=>y.longitude,()=>{y.latitude!==null&&y.latitude!==void 0&&y.longitude!==null&&y.longitude!==void 0&&x(y.latitude,y.longitude)}),F(()=>n.remoteFormSubmit,e=>{e&&(r(`update:remote-form-submit`,!1),te())}),F(()=>n.remoteFormReset,e=>{e&&(r(`update:remote-form-reset`,!1),Object.assign(y,v()),f.value?.clearValidate())}),F(y,()=>{r(`update:remote-form-changed`,!0)},{deep:!0}),(e,t)=>(A(),i(V,null,[D(L(Ir),{ref_key:`formEl`,ref:f,model:y,rules:b,"label-position":`top`,"status-icon":``,onSubmit:qe(te,[`prevent`])},{default:B(()=>[D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.name.title`),prop:`name`},{default:B(()=>[D(L(U),{modelValue:y.name,"onUpdate:modelValue":t[0]||=e=>y.name=e,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.name.placeholder`)},null,8,[`modelValue`,`placeholder`]),l(`div`,uH,z(L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.name.description`)),1)]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.citySearch.title`)},{default:B(()=>[l(`div`,dH,[D(L(Ur),{modelValue:p.value,"onUpdate:modelValue":t[1]||=e=>p.value=e,"fetch-suggestions":w,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.citySearch.placeholder`),loading:L(d),debounce:500,clearable:``,class:`flex-1`,onSelect:T},{default:B(({item:e})=>[l(`div`,fH,[l(`span`,pH,z(e.name),1),l(`span`,mH,[E(z(e.state?`${e.state}, `:``)+z(e.country)+` `,1),l(`span`,hH,` (`+z(e.lat.toFixed(4))+`, `+z(e.lon.toFixed(4))+`) `,1)])])]),_:1},8,[`modelValue`,`placeholder`,`loading`]),D(L(Oe),{loading:m.value,class:`px-2!`,onClick:ee},{icon:B(()=>[D(L(s),{icon:`mdi:map-marker-account-outline`})]),default:B(()=>[E(` `+z(L(a)(`weatherOpenweathermapOnecallPlugin.buttons.myLocation.title`)),1)]),_:1},8,[`loading`])]),l(`div`,gH,z(L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.citySearch.description`)),1)]),_:1},8,[`label`]),D(L(Vt),{"content-position":`left`,class:`mt-6!`},{default:B(()=>[E(z(L(a)(`weatherOpenweathermapOnecallPlugin.texts.orEnterManually`)),1)]),_:1}),l(`div`,_H,[D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.title`),prop:`latitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:y.latitude,"onUpdate:modelValue":t[2]||=e=>y.latitude=e,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.latitude.placeholder`),name:`latitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),D(L(Z),{label:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.title`),prop:`longitude`,class:`flex-1`},{default:B(()=>[D(L(U),{modelValue:y.longitude,"onUpdate:modelValue":t[3]||=e=>y.longitude=e,placeholder:L(a)(`weatherOpenweathermapOnecallPlugin.fields.locations.longitude.placeholder`),name:`longitude`,type:`number`,step:`0.0001`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])])]),_:1},8,[`model`]),l(`div`,vH,[D(L(Wr),{zoom:h.value,"onUpdate:zoom":t[4]||=e=>h.value=e,"use-global-leaflet":!1,center:g.value,onClick:S},{default:B(()=>[D(L(Vr),{url:`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`}),_.value?(A(),O(L(qr),{key:0,"lat-lng":_.value,draggable:!0,onMoveend:C},null,8,[`lat-lng`])):R(``,!0)]),_:1},8,[`zoom`,`center`])])],64))}}),bH={"cs-CZ":{headings:{aboutApiSettings:`Nastavení OpenWeatherMap One Call API 3.0`},fields:{config:{enabled:{title:`Povoleno`},apiKey:{title:`API klíč`,placeholder:`Zadejte svůj OpenWeatherMap One Call API klíč`,description:`Vyžaduje placené předplatné OpenWeatherMap One Call API 3.0`},unit:{title:`Jednotka teploty`,placeholder:`Vyberte jednotku teploty`,values:{celsius:`Celsia (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Název`,description:`Přátelský název pro tuto lokaci`,placeholder:`např. Domov, Kancelář, Chata`,validation:{required:`Název je povinný`}},citySearch:{title:`Hledat město`,placeholder:`Začněte psát pro vyhledání města...`,description:`Vyhledejte město a automaticky vyplníme souřadnice`},latitude:{title:`Zeměpisná šířka`,placeholder:`např. 51.5074`,validation:{required:`Zeměpisná šířka je povinná`,range:`Zeměpisná šířka musí být mezi -90 a 90`}},longitude:{title:`Zeměpisná délka`,placeholder:`např. -0.1278`,validation:{required:`Zeměpisná délka je povinná`,range:`Zeměpisná délka musí být mezi -180 a 180`}}}},buttons:{myLocation:{title:`Moje poloha`}},messages:{config:{edited:`Nastavení OpenWeatherMap One Call bylo aktualizováno`,notEdited:`Nepodařilo se aktualizovat nastavení OpenWeatherMap One Call`},locations:{created:`Lokace "{location}" byla vytvořena`,notCreated:`Nepodařilo se vytvořit lokaci "{location}"`,edited:`Lokace "{location}" byla aktualizována`,notEdited:`Nepodařilo se aktualizovat lokaci "{location}"`},geolocationNotSupported:`Geolokace není podporována vaším prohlížečem`,geolocationDenied:`Přístup k poloze byl zamítnut. Povolte prosím oprávnění k poloze.`,geolocationUnavailable:`Informace o poloze jsou nedostupné`,geolocationTimeout:`Požadavek na zjištění vaší polohy vypršel`,geolocationError:`Při zjišťování vaší polohy došlo k chybě`},texts:{aboutApiSettings:`Nakonfigurujte nastavení OpenWeatherMap One Call API 3.0. Toto API vyžaduje placené předplatné a poskytuje podrobnější data o počasí včetně upozornění na počasí.`,orEnterManually:`Nebo zadejte lokaci ručně`}},"de-DE":{headings:{aboutApiSettings:`OpenWeatherMap One Call API 3.0 Einstellungen`},fields:{config:{enabled:{title:`Aktiviert`},apiKey:{title:`API-Schlüssel`,placeholder:`Geben Sie Ihren OpenWeatherMap One Call API-Schlüssel ein`,description:`Erfordert ein kostenpflichtiges Abonnement der OpenWeatherMap One Call API 3.0`},unit:{title:`Temperatureinheit`,placeholder:`Temperatureinheit auswählen`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Name`,description:`Ein freundlicher Name für diesen Standort`,placeholder:`z.B. Zuhause, Büro, Ferienhaus`,validation:{required:`Name ist erforderlich`}},citySearch:{title:`Stadt suchen`,placeholder:`Beginnen Sie zu tippen, um eine Stadt zu suchen...`,description:`Suchen Sie eine Stadt und wir füllen die Koordinaten automatisch aus`},latitude:{title:`Breitengrad`,placeholder:`z.B. 51.5074`,validation:{required:`Breitengrad ist erforderlich`,range:`Breitengrad muss zwischen -90 und 90 liegen`}},longitude:{title:`Längengrad`,placeholder:`z.B. -0.1278`,validation:{required:`Längengrad ist erforderlich`,range:`Längengrad muss zwischen -180 und 180 liegen`}}}},buttons:{myLocation:{title:`Mein Standort`}},messages:{config:{edited:`OpenWeatherMap One Call-Einstellungen wurden aktualisiert`,notEdited:`Aktualisierung der OpenWeatherMap One Call-Einstellungen fehlgeschlagen`},locations:{created:`Standort "{location}" wurde erstellt`,notCreated:`Standort "{location}" konnte nicht erstellt werden`,edited:`Standort "{location}" wurde aktualisiert`,notEdited:`Standort "{location}" konnte nicht aktualisiert werden`},geolocationNotSupported:`Geolokalisierung wird von Ihrem Browser nicht unterstützt`,geolocationDenied:`Standortzugriff wurde verweigert. Bitte aktivieren Sie die Standortberechtigung.`,geolocationUnavailable:`Standortinformationen sind nicht verfügbar`,geolocationTimeout:`Die Anfrage zur Standortermittlung hat das Zeitlimit überschritten`,geolocationError:`Beim Abrufen Ihres Standorts ist ein Fehler aufgetreten`},texts:{aboutApiSettings:`Konfigurieren Sie Ihre OpenWeatherMap One Call API 3.0 Einstellungen. Diese API erfordert ein kostenpflichtiges Abonnement und bietet detailliertere Wetterdaten einschließlich Wetterwarnungen.`,orEnterManually:`Oder Standort manuell eingeben`}},"en-US":{headings:{aboutApiSettings:`OpenWeatherMap One Call API 3.0 settings`},fields:{config:{enabled:{title:`Enabled`},apiKey:{title:`API key`,placeholder:`Enter your OpenWeatherMap One Call API key`,description:`Requires a paid subscription to OpenWeatherMap One Call API 3.0`},unit:{title:`Temperature unit`,placeholder:`Select temperature unit`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Name`,description:`A friendly name for this location`,placeholder:`e.g., Home, Office, Beach House`,validation:{required:`Name is required`}},citySearch:{title:`Search city`,placeholder:`Start typing to search for a city...`,description:`Search for a city and we'll auto-fill the coordinates`},latitude:{title:`Latitude`,placeholder:`e.g., 51.5074`,validation:{required:`Latitude is required`,range:`Latitude must be between -90 and 90`}},longitude:{title:`Longitude`,placeholder:`e.g., -0.1278`,validation:{required:`Longitude is required`,range:`Longitude must be between -180 and 180`}}}},buttons:{myLocation:{title:`My location`}},messages:{config:{edited:`OpenWeatherMap One Call settings have been updated`,notEdited:`Failed to update OpenWeatherMap One Call settings`},locations:{created:`Location "{location}" has been created`,notCreated:`Failed to create location "{location}"`,edited:`Location "{location}" has been updated`,notEdited:`Failed to update location "{location}"`},geolocationNotSupported:`Geolocation is not supported by your browser`,geolocationDenied:`Location access was denied. Please enable location permissions.`,geolocationUnavailable:`Location information is unavailable`,geolocationTimeout:`The request to get your location timed out`,geolocationError:`An error occurred while getting your location`},texts:{aboutApiSettings:`Configure your OpenWeatherMap One Call API 3.0 settings. This API requires a paid subscription and provides more detailed weather data including weather alerts.`,orEnterManually:`Or enter location manually`}},"es-ES":{headings:{aboutApiSettings:`Configuración de OpenWeatherMap One Call API 3.0`},fields:{config:{enabled:{title:`Habilitado`},apiKey:{title:`Clave API`,placeholder:`Introduzca su clave API de OpenWeatherMap One Call`,description:`Requiere una suscripción de pago a OpenWeatherMap One Call API 3.0`},unit:{title:`Unidad de temperatura`,placeholder:`Seleccione la unidad de temperatura`,values:{celsius:`Celsius (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Nombre`,description:`Un nombre descriptivo para esta ubicación`,placeholder:`p. ej., Casa, Oficina, Casa de playa`,validation:{required:`El nombre es obligatorio`}},citySearch:{title:`Buscar ciudad`,placeholder:`Comience a escribir para buscar una ciudad...`,description:`Busque una ciudad y completaremos automáticamente las coordenadas`},latitude:{title:`Latitud`,placeholder:`p. ej., 51.5074`,validation:{required:`La latitud es obligatoria`,range:`La latitud debe estar entre -90 y 90`}},longitude:{title:`Longitud`,placeholder:`p. ej., -0.1278`,validation:{required:`La longitud es obligatoria`,range:`La longitud debe estar entre -180 y 180`}}}},buttons:{myLocation:{title:`Mi ubicación`}},messages:{config:{edited:`La configuración de OpenWeatherMap One Call se ha actualizado`,notEdited:`No se pudo actualizar la configuración de OpenWeatherMap One Call`},locations:{created:`La ubicación "{location}" ha sido creada`,notCreated:`No se pudo crear la ubicación "{location}"`,edited:`La ubicación "{location}" ha sido actualizada`,notEdited:`No se pudo actualizar la ubicación "{location}"`},geolocationNotSupported:`La geolocalización no es compatible con su navegador`,geolocationDenied:`Se denegó el acceso a la ubicación. Por favor, habilite los permisos de ubicación.`,geolocationUnavailable:`La información de ubicación no está disponible`,geolocationTimeout:`La solicitud para obtener su ubicación ha expirado`,geolocationError:`Se produjo un error al obtener su ubicación`},texts:{aboutApiSettings:`Configure los ajustes de OpenWeatherMap One Call API 3.0. Esta API requiere una suscripción de pago y proporciona datos del clima más detallados, incluidas alertas meteorológicas.`,orEnterManually:`O introduzca la ubicación manualmente`}},"pl-PL":{headings:{aboutApiSettings:`Ustawienia OpenWeatherMap One Call API 3.0`},fields:{config:{enabled:{title:`Włączony`},apiKey:{title:`Klucz API`,placeholder:`Wprowadź swój klucz API OpenWeatherMap One Call`,description:`Wymaga płatnej subskrypcji OpenWeatherMap One Call API 3.0`},unit:{title:`Jednostka temperatury`,placeholder:`Wybierz jednostkę temperatury`,values:{celsius:`Celsjusz (°C)`,fahrenheit:`Fahrenheita (°F)`}}},locations:{name:{title:`Nazwa`,description:`Przyjazna nazwa dla tej lokalizacji`,placeholder:`np. Dom, Biuro, Domek na plaży`,validation:{required:`Nazwa jest wymagana`}},citySearch:{title:`Wyszukaj miasto`,placeholder:`Zacznij pisać, aby wyszukać miasto...`,description:`Wyszukaj miasto, a współrzędne zostaną uzupełnione automatycznie`},latitude:{title:`Szerokość geograficzna`,placeholder:`np. 51.5074`,validation:{required:`Szerokość geograficzna jest wymagana`,range:`Szerokość geograficzna musi być między -90 a 90`}},longitude:{title:`Długość geograficzna`,placeholder:`np. -0.1278`,validation:{required:`Długość geograficzna jest wymagana`,range:`Długość geograficzna musi być między -180 a 180`}}}},buttons:{myLocation:{title:`Moja lokalizacja`}},messages:{config:{edited:`Ustawienia OpenWeatherMap One Call zostały zaktualizowane`,notEdited:`Nie udało się zaktualizować ustawień OpenWeatherMap One Call`},locations:{created:`Lokalizacja "{location}" została utworzona`,notCreated:`Nie udało się utworzyć lokalizacji "{location}"`,edited:`Lokalizacja "{location}" została zaktualizowana`,notEdited:`Nie udało się zaktualizować lokalizacji "{location}"`},geolocationNotSupported:`Geolokalizacja nie jest obsługiwana przez Twoją przeglądarkę`,geolocationDenied:`Dostęp do lokalizacji został odrzucony. Włącz uprawnienia do lokalizacji.`,geolocationUnavailable:`Informacje o lokalizacji są niedostępne`,geolocationTimeout:`Żądanie pobrania Twojej lokalizacji przekroczyło limit czasu`,geolocationError:`Wystąpił błąd podczas pobierania Twojej lokalizacji`},texts:{aboutApiSettings:`Skonfiguruj ustawienia OpenWeatherMap One Call API 3.0. To API wymaga płatnej subskrypcji i zapewnia bardziej szczegółowe dane pogodowe, w tym alerty pogodowe.`,orEnterManually:`Lub wprowadź lokalizację ręcznie`}},"sk-SK":{headings:{aboutApiSettings:`Nastavenia OpenWeatherMap One Call API 3.0`},fields:{config:{enabled:{title:`Povolený`},apiKey:{title:`API kľúč`,placeholder:`Zadajte svoj API kľúč OpenWeatherMap One Call`,description:`Vyžaduje platené predplatné OpenWeatherMap One Call API 3.0`},unit:{title:`Jednotka teploty`,placeholder:`Vyberte jednotku teploty`,values:{celsius:`Celzia (°C)`,fahrenheit:`Fahrenheit (°F)`}}},locations:{name:{title:`Názov`,description:`Priateľský názov pre túto polohu`,placeholder:`napr. Domov, Kancelária, Chata`,validation:{required:`Názov je povinný`}},citySearch:{title:`Vyhľadať mesto`,placeholder:`Začnite písať na vyhľadanie mesta...`,description:`Vyhľadajte mesto a automaticky vyplníme súradnice`},latitude:{title:`Zemepisná šírka`,placeholder:`napr. 51.5074`,validation:{required:`Zemepisná šírka je povinná`,range:`Zemepisná šírka musí byť medzi -90 a 90`}},longitude:{title:`Zemepisná dĺžka`,placeholder:`napr. -0.1278`,validation:{required:`Zemepisná dĺžka je povinná`,range:`Zemepisná dĺžka musí byť medzi -180 a 180`}}}},buttons:{myLocation:{title:`Moja poloha`}},messages:{config:{edited:`Nastavenia OpenWeatherMap One Call boli aktualizované`,notEdited:`Nepodarilo sa aktualizovať nastavenia OpenWeatherMap One Call`},locations:{created:`Poloha "{location}" bola vytvorená`,notCreated:`Nepodarilo sa vytvoriť polohu "{location}"`,edited:`Poloha "{location}" bola aktualizovaná`,notEdited:`Nepodarilo sa aktualizovať polohu "{location}"`},geolocationNotSupported:`Geolokácia nie je podporovaná vaším prehliadačom`,geolocationDenied:`Prístup k polohe bol zamietnutý. Prosím povoľte oprávnenia polohy.`,geolocationUnavailable:`Informácie o polohe nie sú dostupné`,geolocationTimeout:`Požiadavka na získanie polohy vypršala`,geolocationError:`Pri získavaní vašej polohy sa vyskytla chyba`},texts:{aboutApiSettings:`Nakonfigurujte nastavenia OpenWeatherMap One Call API 3.0. Toto API vyžaduje platené predplatné a poskytuje podrobnejšie údaje o počasí vrátane výstrah.`,orEnterManually:`Alebo zadajte polohu manuálne`}}},xH=Ki.extend({apiKey:X().nullable().optional(),apiKeyConfigured:J().optional(),unit:G(an)}),SH=Sc.extend({latitude:q().min(-90).max(90),longitude:q().min(-180).max(180),countryCode:X().nullable().optional()}),CH=bc.extend({latitude:q().min(-90).max(90).optional(),longitude:q().min(-180).max(180).optional(),countryCode:X().nullable().optional()}),wH=Wi.extend({apiKey:X().trim().nullable().optional(),apiKeyConfigured:J().default(!1),unit:G(an).default(an.celsius)}),TH=Zi.and(K({type:Y(YV),api_key:X().trim().nullable().optional(),unit:G(an).optional()}));Ri.and(K({type:Y(YV),api_key:X().trim().nullable().optional(),api_key_configured:J(),unit:G(an)}));var EH=zo.extend({latitude:q(),longitude:q(),countryCode:X().nullable().optional()}),DH=Vo.and(K({type:Y(XV),latitude:q(),longitude:q(),country_code:X().optional()})),OH=Ho.and(K({type:Y(XV),latitude:q().optional(),longitude:q().optional(),country_code:X().optional()})),kH=Symbol(`FB-Plugin-WeatherOpenweathermapOnecall`),AH={install:(e,t)=>{let n=ra(e);for(let[e,n]of Object.entries(bH)){let r=(0,Xd.defaultsDeep)(t.i18n.global.getLocaleMessage(e),{weatherOpenweathermapOnecallPlugin:n});t.i18n.global.setLocaleMessage(e,r)}n.addPlugin(kH,{type:YV,source:`com.fastybird.smart-panel.plugin.weather-openweathermap-onecall`,name:`OpenWeatherMap OneCall 3.0`,description:`Weather data provider using OpenWeatherMap One Call API 3.0`,links:{documentation:`https://openweathermap.org/api/one-call-3`,devDocumentation:`https://openweathermap.org/api/one-call-3`,bugsTracking:`https://smart-panel.fastybird.com`},elements:[{type:Ea,components:{pluginConfigEditForm:QV},schemas:{pluginConfigSchema:wH,pluginConfigEditFormSchema:xH,pluginConfigUpdateReqSchema:TH},modules:[ka]},{type:XV,components:{locationAddForm:lH,locationEditForm:yH},schemas:{locationSchema:EH,locationAddFormSchema:SH,locationEditFormSchema:CH,locationCreateReqSchema:DH,locationUpdateReqSchema:OH},modules:[Wo]}],modules:[ka,Wo],isCore:!0})}},jH=Se(Jd);jH.use($t);var MH=Ut()??jt();$t.global.locale.value=MH,Dr(MH),jH.use(Ze()),jH.use(Qe);var NH=nr();jH.use(NH);var PH=new Sr;jH.config.globalProperties.storesManager=PH,yr(jH,PH);var FH=new na;jH.config.globalProperties.pluginsManager=FH,ta(jH,FH);var IH=new $i;jH.config.globalProperties.modulesManager=IH,Qi(jH,IH);var LH=new Gi(e=>{cr.error(`Refreshing module data after a reconnect failed`,e)});jH.config.globalProperties.dataRefreshRegistry=LH,Vi(jH,LH);var RH=window.location.pathname.match(/^(\/api\/hassio_ingress\/[^/]+)/),zH=RH?RH[1]:``,BH=Jc({baseUrl:`${window.location.origin}${zH}/api/v1`});jH.config.globalProperties.backend=BH,mt(jH,BH),jH.config.globalProperties.logger=cr,qt(jH,cr);var VH=Wc();jH.config.globalProperties.eventBus=VH,Zt(jH,VH);var HH=new Nn;jH.config.globalProperties.routerGuards=HH,Xn(jH,HH),jH.use(Gt,{baseUrl:window.location.origin,...zH?{path:`${zH}/socket.io/`}:{}}),jH.use(Yd,{store:NH});var UH={router:rn,store:NH,i18n:$t};jH.use(js,UH),jH.use(Ag,UH),jH.use(Yi,UH),jH.use(Pg,UH),jH.use(Kp,UH),jH.use(Ha,UH),jH.use(ls,UH),jH.use(_o,UH),jH.use(hc,UH),jH.use(Pm,UH),jH.use(Ip,UH),jH.use(A_,UH),jH.use(xc,UH),jH.use(sg,UH),jH.use($h,UH),jH.use(m_,UH),jH.use(z_,UH),jH.use(oh,UH),jH.use(__,UH),jH.use(lm,UH),jH.use(om,UH),jH.use(Ph,UH);var WH={router:rn,store:NH,i18n:$t};jH.use(Uk,WH),jH.use(Pw,WH),jH.use(QT,WH),jH.use(dD,WH),jH.use(zD,WH),jH.use(IO,WH),jH.use(kk,WH),jH.use(iA,WH),jH.use(CR,WH),jH.use(VA,WH),jH.use(CN,WH),jH.use(DR,WH),jH.use(kz,WH),jH.use(Cz,WH),jH.use(_z,WH),jH.use(HF,WH),jH.use(eI,WH),jH.use(dI,WH),jH.use(Wz,WH),jH.use(aB,WH),jH.use(hB),jH.use(BB,WH),jH.use(Ob,WH),jH.use(Jb,WH),jH.use(fP,WH),jH.use(yV,WH),jH.use(qV,WH),jH.use(AH,WH),jH.use(cR,WH),jH.use(jN,WH),jH.use(zN,WH),jH.use(gP,WH),jH.use(Xv,WH),jH.use(X_,WH),jH.use(zv,WH),jH.use(av,WH),jH.use(my,WH),jH.use(kv,WH),jH.use(Py,WH),jH.use(eb,WH),jH.use(wy,WH),jH.use(Wy,WH),jH.use(gb,WH),jH.use(yv,WH),jH.use(BL,WH),jH.use(yF,WH),jH.use(jP,WH),jH.use(GP,WH),jH.use(nF,WH);var GH=new Set;Fm(jH,cr,{router:rn,store:NH,i18n:$t},GH,il);try{await zm(jH,BH,cr,{router:rn,store:NH,i18n:$t},GH)}catch(e){cr.error(`Failed to load remote extensions, continuing without them`,e)}rn.beforeEach(e=>{let t=or(jH);return HH.handle(t?.details.value??void 0,e)}),rn.addRoute({path:`/:pathMatch(.*)*`,name:`not-found`,component:()=>hr(()=>import(`./view-not-found-G5Aj98MD.js`),__vite__mapDeps([186,2,3,4])),meta:{title:`Page not found`}}),jH.use(rn),rn.isReady().then(()=>jH.mount(`#app`));
|