@camstack/addon-osd-manager 0.1.161 → 0.1.164

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (18) hide show
  1. package/dist/{MotionZonesSettings-CSheC3_V.mjs → MotionZonesSettings-sqWBK5nw.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-I6eE4GFM.mjs → PrivacyMaskSettings-xEGyOq4f.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-mNJ89n0T.mjs → SceneMonitorEditor-BF58OFQ-.mjs} +3 -3
  4. package/dist/_stub.js +201 -172
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-BYQUZdGL.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-BVXN8N5v.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DaKJWQOl.mjs +26 -0
  7. package/dist/{hostInit-DFyjx8Xk.mjs → hostInit-CNzckgbj.mjs} +2 -2
  8. package/dist/index.js +179 -8
  9. package/dist/index.mjs +179 -8
  10. package/dist/{player-overlays-DFXmMB9Y.mjs → player-overlays-DiRRm15u.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-DLFs-5i_.mjs → responsive-DRg2S9WJ.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-DVNcikwa.mjs → scene-monitor-copy-viJey82o.mjs} +1 -1
  14. package/dist/{square-Co3Eglp3.mjs → square-R4lwwyF4.mjs} +1 -1
  15. package/dist/{trash-2-DnKldIWK.mjs → trash-2-CdSVfqT4.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-C3yC0JaQ.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-CdD-t4Hz.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B2mEdhqd.mjs +0 -26
package/dist/_stub.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import "./virtualExposes-BgZ5Cn7S.mjs";
2
- import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-C3yC0JaQ.mjs";
2
+ import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-CdD-t4Hz.mjs";
3
3
  import { _ as e, b as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, p as d, r as f, t as p, u as m, v as h } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C5jUMd7X.mjs";
4
- import { a as g, c as _, i as v, n as y, o as b, r as x, s as S } from "./responsive-DLFs-5i_.mjs";
5
- import { d as C, l as w, s as T, u as E } from "./scene-monitor-copy-DVNcikwa.mjs";
6
- import { i as D, r as O } from "./player-overlays-DFXmMB9Y.mjs";
7
- import { i as ee, n as te, r as ne, t as k } from "./square-Co3Eglp3.mjs";
8
- import { t as re } from "./trash-2-DnKldIWK.mjs";
4
+ import { a as g, c as _, i as v, n as y, o as b, r as x, s as S } from "./responsive-DRg2S9WJ.mjs";
5
+ import { d as C, l as w, s as T, u as E } from "./scene-monitor-copy-viJey82o.mjs";
6
+ import { i as D, r as O } from "./player-overlays-DiRRm15u.mjs";
7
+ import { i as ee, n as te, r as ne, t as k } from "./square-R4lwwyF4.mjs";
8
+ import { t as re } from "./trash-2-CdSVfqT4.mjs";
9
9
  import { t as ie } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.js-BpP33rwB.mjs";
10
10
  import { n as A, r as j, t as M } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
11
11
  import { t as ae } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_2_dom__loadShare__.js-qB5uHZAd.mjs";
12
12
  import { n as N, t as oe } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CHxDN0gE.mjs";
13
13
  import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-Dhy3m6Ij.mjs";
14
14
  import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_trpc_mf_1_client__loadShare__.js-C7omKvJr.mjs";
15
- import { _ as P, a as F, b as I, c as se, d as L, f as ce, g as le, h as ue, l as de, m as fe, n as pe, o as me, p as he, r as ge, s as _e, t as ve, u as ye, v as R, y as be } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B2mEdhqd.mjs";
15
+ import { _ as P, a as F, b as I, c as se, d as L, f as ce, g as le, h as ue, l as de, m as fe, n as pe, o as me, p as he, r as ge, s as _e, t as ve, u as ye, v as R, y as be } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DaKJWQOl.mjs";
16
16
  import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_sdk__loadShare__.js-B_4MkXHU.mjs";
17
17
  var xe = _("activity", [["path", {
18
18
  d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",
@@ -3486,7 +3486,7 @@ var zr = _("user-check", [
3486
3486
  //#region ../ui-library/src/trpc-react.ts
3487
3487
  t();
3488
3488
  var di = typeof globalThis < "u" ? globalThis.__camstackTrpcReact : void 0, z = di ?? ie();
3489
- typeof globalThis < "u" && !di && (globalThis.__camstackTrpcReact = z), t(), t(), z.accessories.setChildHidden.useMutation, z.accessories.getStatus.useQuery, z.addonPages.listPages.useQuery, z.addons.list.useQuery, z.addons.getLogs.useQuery, z.addons.listPackages.useQuery, z.addons.installPackage.useMutation, z.addons.installFromWorkspace.useMutation, z.addons.isWorkspaceAvailable.useQuery, z.addons.listWorkspacePackages.useQuery, z.addons.uninstallPackage.useMutation, z.addons.reloadPackages.useMutation, z.addons.searchAvailable.useQuery, z.addons.listUpdates.useQuery, z.addons.updatePackage.useMutation, z.addons.rollbackPackage.useMutation, z.addons.forceRefresh.useMutation, z.addons.restartServer.useMutation, z.addons.getLastRestart.useQuery, z.addons.listFrameworkPackages.useQuery, z.addons.listCapabilityProviders.useQuery, z.addons.setCapabilityProviderEnabled.useMutation, z.addons.getVersions.useQuery, z.addons.restartAddon.useMutation, z.addons.retryLoad.useMutation, z.addons.getAutoUpdateSettings.useQuery, z.addons.setAutoUpdateSettings.useMutation, z.addons.getAddonAutoUpdate.useQuery, z.addons.setAddonAutoUpdate.useMutation, z.addons.applyAutoUpdateToAll.useMutation, z.addons.custom.useMutation, z.addons.startJob.useMutation, z.addons.getJob.useQuery, z.addons.listJobs.useQuery, z.addons.cancelJob.useMutation, z.addons.onAddonLogs.useSubscription, z.addonSettings.getGlobalSettings.useQuery, z.addonSettings.updateGlobalSettings.useMutation, z.addonSettings.getIntegrationSettings.useQuery, z.addonSettings.getDeviceSettings.useQuery, z.addonSettings.updateDeviceSettings.useMutation, z.addonWidgets.listWidgets.useQuery, z.airQualitySensor.getStatus.useQuery, z.alarmPanel.arm.useMutation, z.alarmPanel.disarm.useMutation, z.alarmPanel.trigger.useMutation, z.alarmPanel.getStatus.useQuery, z.alerts.emit.useMutation, z.alerts.update.useMutation, z.alerts.list.useQuery, z.alerts.getUnreadCount.useQuery, z.alerts.markRead.useMutation, z.alerts.markAllRead.useMutation, z.alerts.dismiss.useMutation, z.ambientLightSensor.getStatus.useQuery, z.audioAnalysis.resolveDeviceSettings.useQuery, z.audioAnalysis.getDeviceSettingsContribution.useQuery, z.audioAnalysis.getDeviceLiveContribution.useQuery, z.audioAnalysis.applyDeviceSettingsPatch.useMutation, z.audioAnalyzer.analyseChunk.useMutation, z.audioAnalyzer.classify.useQuery, z.audioAnalyzer.attachDevice.useMutation, z.audioAnalyzer.detachDevice.useMutation, z.audioAnalyzer.isReady.useQuery, z.audioAnalyzer.dispose.useMutation, z.audioAnalyzer.reprobeAudioEngine.useMutation, z.audioCodec.listSupportedCodecs.useQuery, z.audioCodec.canHandle.useQuery, z.audioCodec.createDecodeSession.useMutation, z.audioCodec.createEncodeSession.useMutation, z.audioCodec.closeSession.useMutation, z.audioCodec.pushEncodedFrame.useMutation, z.audioCodec.pullPcm.useQuery, z.audioCodec.pushPcm.useMutation, z.audioCodec.pullEncoded.useQuery, z.audioCodec.flushEncode.useMutation, z.audioCodec.listActiveSessions.useQuery, z.audioMetrics.getCurrentSnapshot.useQuery, z.audioMetrics.getHistory.useQuery, z.automationControl.enable.useMutation, z.automationControl.disable.useMutation, z.automationControl.trigger.useMutation, z.automationControl.getStatus.useQuery, z.backup.listDestinations.useQuery, z.backup.trigger.useMutation, z.backup.listRuns.useQuery, z.backup.cancel.useMutation, z.backup.list.useQuery, z.backup.listLocations.useQuery, z.backup.getEntries.useQuery, z.backup.restore.useMutation, z.backup.delete.useMutation, z.backup.listArchives.useQuery, z.backup.upsertDestinationPolicy.useMutation, z.backup.previewSchedule.useQuery, z.backup.listSchedules.useQuery, z.backup.upsertSchedule.useMutation, z.backup.deleteSchedule.useMutation, z.battery.wakeForStream.useMutation, z.battery.getStatus.useQuery, z.binary.getStatus.useQuery, z.brightness.setBrightness.useMutation, z.brightness.getStatus.useQuery, z.broker.list.useQuery, z.broker.get.useQuery, z.broker.listProviders.useQuery, z.broker.add.useMutation, z.broker.remove.useMutation, z.broker.testConnection.useMutation, z.broker.getSettings.useQuery, z.broker.setSettings.useMutation, z.broker.getBrokerConfig.useQuery, z.broker.getSettingsSchema.useQuery, z.broker.testSettings.useMutation, z.broker.publish.useMutation, z.broker.subscribe.useMutation, z.broker.unsubscribe.useMutation, z.broker.getState.useQuery, z.broker.getStatus.useQuery, z.button.press.useMutation, z.cameraCredentials.getCredentials.useQuery, z.cameraCredentials.getStatus.useQuery, z.cameraGridLayout.getLayout.useQuery, z.cameraGridLayout.saveLayout.useMutation, z.cameraGridLayout.getDeviceSettingsContribution.useQuery, z.cameraGridLayout.getDeviceLiveContribution.useQuery, z.cameraGridLayout.applyDeviceSettingsPatch.useMutation, z.cameraPipelineConfig.getDeviceSettingsContribution.useQuery, z.cameraPipelineConfig.getDeviceLiveContribution.useQuery, z.cameraPipelineConfig.applyDeviceSettingsPatch.useMutation, z.cameraStreams.getCameraStreams.useQuery, z.cameraStreams.getBrokerStreams.useQuery, z.cameraStreams.getRtspEntries.useQuery, z.cameraStreams.getProfileRtspEntries.useQuery, z.cameraStreams.pickStream.useQuery, z.carbonMonoxide.getStatus.useQuery, z.climateControl.setMode.useMutation, z.climateControl.setFanMode.useMutation, z.climateControl.setPreset.useMutation, z.climateControl.setTarget.useMutation, z.climateControl.setTargetRange.useMutation, z.climateControl.setTargetHumidity.useMutation, z.climateControl.setSwingVertical.useMutation, z.climateControl.setSwingHorizontal.useMutation, z.climateControl.getStatus.useQuery, z.color.setColor.useMutation, z.color.getStatus.useQuery, z.connectionTest.testSettings.useMutation, z.connectionTest.describeTest.useQuery, z.connectivity.getStatus.useQuery, z.consumables.reset.useMutation, z.consumables.getStatus.useQuery, z.contact.getStatus.useQuery, z.control.setValue.useMutation, z.control.getStatus.useQuery, z.coreBlocks.list.useQuery, z.coreBlocks.get.useQuery, z.coreBlocks.create.useMutation, z.coreBlocks.update.useMutation, z.coreBlocks.delete.useMutation, z.coreBlocks.setEnabled.useMutation, z.coreBlocks.restart.useMutation, z.coreBlocks.compile.useMutation, z.coreBlocks.getTypeDefs.useQuery, z.coreBlocks.createComposition.useMutation, z.coreBlocks.updateComposition.useMutation, z.coreBlocks.getComposition.useQuery, z.coreBlocks.listCompositions.useQuery, z.coreBlocks.getCustomization.useQuery, z.coreBlocks.listComposableCaps.useQuery, z.coreBlocks.validateComposition.useMutation, z.cover.open.useMutation, z.cover.close.useMutation, z.cover.stop.useMutation, z.cover.setPosition.useMutation, z.cover.setTiltPosition.useMutation, z.cover.getStatus.useQuery, z.dayNight.getOptions.useQuery, z.dayNight.setSettings.useMutation, z.dayNight.getStatus.useQuery, z.decoder.supportsCodec.useQuery, z.decoder.getInfo.useQuery, z.decoder.createSession.useQuery, z.decoder.destroySession.useQuery, z.decoder.pushPacket.useQuery, z.decoder.openStream.useQuery, z.decoder.pullFrames.useQuery, z.decoder.pullHandles.useQuery, z.decoder.getFrame.useQuery, z.decoder.getShmStats.useQuery, z.decoder.updateConfig.useQuery, z.decoder.getStats.useQuery, z.decoder.listActiveSessions.useQuery, z.decoder.reprobeHwaccel.useMutation, z.detectionPipeline.getDeviceSettingsContribution.useQuery, z.detectionPipeline.getDeviceLiveContribution.useQuery, z.detectionPipeline.applyDeviceSettingsPatch.useMutation, z.deviceAdminLink.getAdminLink.useQuery, z.deviceAdoption.listCandidateFilters.useQuery, z.deviceAdoption.listCandidates.useQuery, z.deviceAdoption.getCandidate.useQuery, z.deviceAdoption.refresh.useMutation, z.deviceAdoption.adopt.useMutation, z.deviceAdoption.release.useMutation, z.deviceAdoption.resync.useMutation, z.deviceAdoption.getStatus.useQuery, z.deviceDiscovery.listDiscovered.useQuery, z.deviceDiscovery.refreshDiscovery.useMutation, z.deviceDiscovery.adoptDevice.useMutation, z.deviceDiscovery.releaseDevice.useMutation, z.deviceDiscovery.getStatus.useQuery, z.deviceExport.getStatus.useQuery, z.deviceExport.listSupportedDeviceKinds.useQuery, z.deviceExport.listExposedDevices.useQuery, z.deviceExport.exposeDevice.useMutation, z.deviceExport.unexposeDevice.useMutation, z.deviceExport.getDeviceSettingsContribution.useQuery, z.deviceExport.getDeviceLiveContribution.useQuery, z.deviceExport.applyDeviceSettingsPatch.useMutation, z.deviceExtension.listSources.useQuery, z.deviceExtension.listSlots.useQuery, z.deviceExtension.listCandidates.useQuery, z.deviceExtension.setSlot.useMutation, z.deviceManager.allocateDeviceId.useMutation, z.deviceManager.migrateDevice.useMutation, z.deviceManager.registerDevice.useMutation, z.deviceManager.removeDevice.useMutation, z.deviceManager.persistConfig.useMutation, z.deviceManager.loadConfig.useQuery, z.deviceManager.loadRuntimeState.useQuery, z.deviceManager.loadMeta.useQuery, z.deviceManager.setName.useMutation, z.deviceManager.setLocation.useMutation, z.deviceManager.setType.useMutation, z.deviceManager.setIntegrationId.useMutation, z.deviceManager.setLinkDeviceId.useMutation, z.deviceManager.setPrimaryChildEntityId.useMutation, z.deviceManager.setChildLayout.useMutation, z.deviceManager.setDisplay.useMutation;
3489
+ typeof globalThis < "u" && !di && (globalThis.__camstackTrpcReact = z), t(), t(), z.accessories.setChildHidden.useMutation, z.accessories.getStatus.useQuery, z.addonPages.listPages.useQuery, z.addons.list.useQuery, z.addons.getLogs.useQuery, z.addons.listPackages.useQuery, z.addons.installPackage.useMutation, z.addons.installFromWorkspace.useMutation, z.addons.isWorkspaceAvailable.useQuery, z.addons.listWorkspacePackages.useQuery, z.addons.uninstallPackage.useMutation, z.addons.reloadPackages.useMutation, z.addons.searchAvailable.useQuery, z.addons.listUpdates.useQuery, z.addons.updatePackage.useMutation, z.addons.rollbackPackage.useMutation, z.addons.forceRefresh.useMutation, z.addons.restartServer.useMutation, z.addons.getLastRestart.useQuery, z.addons.listFrameworkPackages.useQuery, z.addons.listCapabilityProviders.useQuery, z.addons.setCapabilityProviderEnabled.useMutation, z.addons.getVersions.useQuery, z.addons.restartAddon.useMutation, z.addons.retryLoad.useMutation, z.addons.getAutoUpdateSettings.useQuery, z.addons.setAutoUpdateSettings.useMutation, z.addons.getAddonAutoUpdate.useQuery, z.addons.setAddonAutoUpdate.useMutation, z.addons.applyAutoUpdateToAll.useMutation, z.addons.custom.useMutation, z.addons.startJob.useMutation, z.addons.getJob.useQuery, z.addons.listJobs.useQuery, z.addons.cancelJob.useMutation, z.addons.onAddonLogs.useSubscription, z.addonSettings.getGlobalSettings.useQuery, z.addonSettings.updateGlobalSettings.useMutation, z.addonSettings.getIntegrationSettings.useQuery, z.addonSettings.getDeviceSettings.useQuery, z.addonSettings.updateDeviceSettings.useMutation, z.addonWidgets.listWidgets.useQuery, z.airQualitySensor.getStatus.useQuery, z.alarmPanel.arm.useMutation, z.alarmPanel.disarm.useMutation, z.alarmPanel.trigger.useMutation, z.alarmPanel.getStatus.useQuery, z.alerts.emit.useMutation, z.alerts.update.useMutation, z.alerts.list.useQuery, z.alerts.getUnreadCount.useQuery, z.alerts.markRead.useMutation, z.alerts.markAllRead.useMutation, z.alerts.dismiss.useMutation, z.ambientLightSensor.getStatus.useQuery, z.audioAnalysis.resolveDeviceSettings.useQuery, z.audioAnalysis.getDeviceSettingsContribution.useQuery, z.audioAnalysis.getDeviceLiveContribution.useQuery, z.audioAnalysis.applyDeviceSettingsPatch.useMutation, z.audioAnalyzer.analyseChunk.useMutation, z.audioAnalyzer.classify.useQuery, z.audioAnalyzer.attachDevice.useMutation, z.audioAnalyzer.detachDevice.useMutation, z.audioAnalyzer.isReady.useQuery, z.audioAnalyzer.dispose.useMutation, z.audioAnalyzer.reprobeAudioEngine.useMutation, z.audioCodec.listSupportedCodecs.useQuery, z.audioCodec.canHandle.useQuery, z.audioCodec.createDecodeSession.useMutation, z.audioCodec.createEncodeSession.useMutation, z.audioCodec.closeSession.useMutation, z.audioCodec.pushEncodedFrame.useMutation, z.audioCodec.pullPcm.useQuery, z.audioCodec.pushPcm.useMutation, z.audioCodec.pullEncoded.useQuery, z.audioCodec.flushEncode.useMutation, z.audioCodec.listActiveSessions.useQuery, z.audioMetrics.getCurrentSnapshot.useQuery, z.audioMetrics.getHistory.useQuery, z.automationControl.enable.useMutation, z.automationControl.disable.useMutation, z.automationControl.trigger.useMutation, z.automationControl.getStatus.useQuery, z.backup.listDestinations.useQuery, z.backup.trigger.useMutation, z.backup.listRuns.useQuery, z.backup.cancel.useMutation, z.backup.list.useQuery, z.backup.listLocations.useQuery, z.backup.getEntries.useQuery, z.backup.restore.useMutation, z.backup.delete.useMutation, z.backup.listArchives.useQuery, z.backup.upsertDestinationPolicy.useMutation, z.backup.previewSchedule.useQuery, z.backup.listSchedules.useQuery, z.backup.upsertSchedule.useMutation, z.backup.deleteSchedule.useMutation, z.battery.wakeForStream.useMutation, z.battery.getStatus.useQuery, z.binary.getStatus.useQuery, z.brightness.setBrightness.useMutation, z.brightness.getStatus.useQuery, z.broker.list.useQuery, z.broker.get.useQuery, z.broker.listProviders.useQuery, z.broker.add.useMutation, z.broker.remove.useMutation, z.broker.testConnection.useMutation, z.broker.getSettings.useQuery, z.broker.setSettings.useMutation, z.broker.getBrokerConfig.useQuery, z.broker.getSettingsSchema.useQuery, z.broker.testSettings.useMutation, z.broker.publish.useMutation, z.broker.subscribe.useMutation, z.broker.unsubscribe.useMutation, z.broker.getState.useQuery, z.broker.getStatus.useQuery, z.button.press.useMutation, z.calendars.listCalendars.useQuery, z.calendars.listEvents.useQuery, z.calendars.importFromHomeAssistant.useMutation, z.cameraCredentials.getCredentials.useQuery, z.cameraCredentials.getStatus.useQuery, z.cameraGridLayout.getLayout.useQuery, z.cameraGridLayout.saveLayout.useMutation, z.cameraGridLayout.getDeviceSettingsContribution.useQuery, z.cameraGridLayout.getDeviceLiveContribution.useQuery, z.cameraGridLayout.applyDeviceSettingsPatch.useMutation, z.cameraPipelineConfig.getDeviceSettingsContribution.useQuery, z.cameraPipelineConfig.getDeviceLiveContribution.useQuery, z.cameraPipelineConfig.applyDeviceSettingsPatch.useMutation, z.cameraStreams.getCameraStreams.useQuery, z.cameraStreams.getBrokerStreams.useQuery, z.cameraStreams.getRtspEntries.useQuery, z.cameraStreams.getProfileRtspEntries.useQuery, z.cameraStreams.pickStream.useQuery, z.carbonMonoxide.getStatus.useQuery, z.climateControl.setMode.useMutation, z.climateControl.setFanMode.useMutation, z.climateControl.setPreset.useMutation, z.climateControl.setTarget.useMutation, z.climateControl.setTargetRange.useMutation, z.climateControl.setTargetHumidity.useMutation, z.climateControl.setSwingVertical.useMutation, z.climateControl.setSwingHorizontal.useMutation, z.climateControl.getStatus.useQuery, z.color.setColor.useMutation, z.color.getStatus.useQuery, z.connectionTest.testSettings.useMutation, z.connectionTest.describeTest.useQuery, z.connectivity.getStatus.useQuery, z.consumables.reset.useMutation, z.consumables.getStatus.useQuery, z.contact.getStatus.useQuery, z.control.setValue.useMutation, z.control.getStatus.useQuery, z.coreBlocks.list.useQuery, z.coreBlocks.get.useQuery, z.coreBlocks.create.useMutation, z.coreBlocks.update.useMutation, z.coreBlocks.delete.useMutation, z.coreBlocks.setEnabled.useMutation, z.coreBlocks.restart.useMutation, z.coreBlocks.compile.useMutation, z.coreBlocks.getTypeDefs.useQuery, z.coreBlocks.createComposition.useMutation, z.coreBlocks.updateComposition.useMutation, z.coreBlocks.getComposition.useQuery, z.coreBlocks.listCompositions.useQuery, z.coreBlocks.getCustomization.useQuery, z.coreBlocks.listComposableCaps.useQuery, z.coreBlocks.validateComposition.useMutation, z.cover.open.useMutation, z.cover.close.useMutation, z.cover.stop.useMutation, z.cover.setPosition.useMutation, z.cover.setTiltPosition.useMutation, z.cover.getStatus.useQuery, z.dayNight.getOptions.useQuery, z.dayNight.setSettings.useMutation, z.dayNight.getStatus.useQuery, z.decoder.supportsCodec.useQuery, z.decoder.getInfo.useQuery, z.decoder.createSession.useQuery, z.decoder.destroySession.useQuery, z.decoder.pushPacket.useQuery, z.decoder.openStream.useQuery, z.decoder.pullFrames.useQuery, z.decoder.pullHandles.useQuery, z.decoder.getFrame.useQuery, z.decoder.getShmStats.useQuery, z.decoder.updateConfig.useQuery, z.decoder.getStats.useQuery, z.decoder.listActiveSessions.useQuery, z.decoder.reprobeHwaccel.useMutation, z.detectionPipeline.getDeviceSettingsContribution.useQuery, z.detectionPipeline.getDeviceLiveContribution.useQuery, z.detectionPipeline.applyDeviceSettingsPatch.useMutation, z.deviceAdminLink.getAdminLink.useQuery, z.deviceAdoption.listCandidateFilters.useQuery, z.deviceAdoption.listCandidates.useQuery, z.deviceAdoption.getCandidate.useQuery, z.deviceAdoption.refresh.useMutation, z.deviceAdoption.adopt.useMutation, z.deviceAdoption.release.useMutation, z.deviceAdoption.resync.useMutation, z.deviceAdoption.getStatus.useQuery, z.deviceDiscovery.listDiscovered.useQuery, z.deviceDiscovery.refreshDiscovery.useMutation, z.deviceDiscovery.adoptDevice.useMutation, z.deviceDiscovery.releaseDevice.useMutation, z.deviceDiscovery.getStatus.useQuery, z.deviceExport.getStatus.useQuery, z.deviceExport.listSupportedDeviceKinds.useQuery, z.deviceExport.listExposedDevices.useQuery, z.deviceExport.exposeDevice.useMutation, z.deviceExport.unexposeDevice.useMutation, z.deviceExport.getDeviceSettingsContribution.useQuery, z.deviceExport.getDeviceLiveContribution.useQuery, z.deviceExport.applyDeviceSettingsPatch.useMutation, z.deviceExtension.listSources.useQuery, z.deviceExtension.listSlots.useQuery, z.deviceExtension.listCandidates.useQuery, z.deviceExtension.setSlot.useMutation, z.deviceManager.allocateDeviceId.useMutation, z.deviceManager.migrateDevice.useMutation, z.deviceManager.registerDevice.useMutation, z.deviceManager.removeDevice.useMutation, z.deviceManager.persistConfig.useMutation, z.deviceManager.loadConfig.useQuery, z.deviceManager.loadRuntimeState.useQuery, z.deviceManager.loadMeta.useQuery, z.deviceManager.setName.useMutation, z.deviceManager.setLocation.useMutation, z.deviceManager.setType.useMutation, z.deviceManager.setIntegrationId.useMutation, z.deviceManager.setLinkDeviceId.useMutation, z.deviceManager.setPrimaryChildEntityId.useMutation, z.deviceManager.setChildLayout.useMutation, z.deviceManager.setDisplay.useMutation;
3490
3490
  var fi = z.deviceManager.getRoleDisplayDefaults.useQuery;
3491
3491
  z.deviceManager.setRoleDisplayDefaults.useMutation, z.deviceManager.getWireableFields.useQuery, z.deviceManager.setRole.useMutation, z.deviceManager.applyInitialMeta.useMutation, z.deviceManager.setMetadata.useMutation, z.deviceManager.listLocations.useQuery, z.deviceManager.addLocation.useMutation, z.deviceManager.removeLocation.useMutation, z.deviceManager.renameLocation.useMutation, z.deviceManager.listLocationIcons.useQuery, z.deviceManager.setLocationIcon.useMutation, z.deviceManager.listLocationDescriptions.useQuery, z.deviceManager.setLocationDescription.useMutation, z.deviceManager.listSiteZones.useQuery, z.deviceManager.setSiteZone.useMutation, z.deviceManager.removeSiteZone.useMutation, z.deviceManager.renameSiteZone.useMutation, z.deviceManager.setLocationZone.useMutation, z.deviceManager.setDisabled.useMutation, z.deviceManager.listPersistedByAddon.useQuery;
3492
3492
  var pi = z.deviceManager.listAll.useQuery, mi = z.deviceManager.getDevice.useQuery;
@@ -6100,7 +6100,7 @@ t(), t(), t(), S("camstack:recorded-playback", {
6100
6100
  mode: "live",
6101
6101
  positionMs: null,
6102
6102
  send: () => !1
6103
- }), t(), t(), t(), t(), t(), t(), s(() => import("./MotionZonesSettings-CSheC3_V.mjs").then((e) => ({ default: e.MotionZonesSettings }))), s(() => import("./PrivacyMaskSettings-I6eE4GFM.mjs").then((e) => ({ default: e.PrivacyMaskSettings }))), t(), t();
6103
+ }), t(), t(), t(), t(), t(), t(), s(() => import("./MotionZonesSettings-sqWBK5nw.mjs").then((e) => ({ default: e.MotionZonesSettings }))), s(() => import("./PrivacyMaskSettings-xEGyOq4f.mjs").then((e) => ({ default: e.PrivacyMaskSettings }))), t(), t();
6104
6104
  var Oo = Object.defineProperty, ko = Object.getOwnPropertySymbols, Ao = Object.prototype.hasOwnProperty, jo = Object.prototype.propertyIsEnumerable, Mo = (e, t, n) => t in e ? Oo(e, t, {
6105
6105
  enumerable: !0,
6106
6106
  configurable: !0,
@@ -8412,7 +8412,7 @@ function Il({ trpc: e, deviceId: t, layout: n, optimistic: r, features: i }) {
8412
8412
  slice: (e) => e.state.lockControl
8413
8413
  }), { display: l, applyOptimistic: u } = J(s, { enabled: r ?? !0 }), [d, f] = a(null), [p, m] = a(!1), [h, g] = a(null);
8414
8414
  if (l === void 0) return null;
8415
- let _ = l.state === "locked" || l.state === "locking", v = !c || l.state === "jammed", y = i?.includes(ue.LockOpen) === !0, b = n === "compact", x = () => {
8415
+ let _ = l.state === "locked" || l.state === "locking", v = !c || l.state === "jammed", y = i?.includes(le.LockOpen) === !0, b = n === "compact", x = () => {
8416
8416
  u({ state: "locking" }), o?.lock({});
8417
8417
  }, S = () => {
8418
8418
  u({ state: "unlocking" }), o?.unlock({});
@@ -9792,7 +9792,7 @@ function Nu({ trpc: e, deviceId: t, features: n, optimistic: r }) {
9792
9792
  slice: (e) => e.state.cover
9793
9793
  }), { display: s, applyOptimistic: c } = J(a, { enabled: r ?? !0 });
9794
9794
  if (i === void 0) return null;
9795
- let l = !o, u = (n ?? []).includes(ue.CoverPositionable), d = (n ?? []).includes(ue.CoverTilt), f = Tu(s?.state), p = s?.position ?? null, m = p !== null, h = s?.state === "open" || s?.state === "opening", g = (e, t) => {
9795
+ let l = !o, u = (n ?? []).includes(le.CoverPositionable), d = (n ?? []).includes(le.CoverTilt), f = Tu(s?.state), p = s?.position ?? null, m = p !== null, h = s?.state === "open" || s?.state === "opening", g = (e, t) => {
9796
9796
  l || !e || (t !== void 0 && c(t), e({}));
9797
9797
  }, _ = (e) => {
9798
9798
  l || (c({ position: e }), i?.setPosition({ position: e }));
@@ -11424,7 +11424,7 @@ function Nd({ label: e, busy: t, variant: n, onClick: r, children: i }) {
11424
11424
  function Pd({ trpc: e, deviceId: t, features: n, optimistic: r }) {
11425
11425
  let { cap: i, slice: a, available: o } = Ed(e, t), { display: s, applyOptimistic: c } = J(a, { enabled: r ?? !0 });
11426
11426
  if (i === void 0) return null;
11427
- let l = !o, u = (n ?? []).includes(ue.ValvePositionable), d = Tu(s?.state), f = Td(s?.state), p = s?.position ?? null, m = p !== null, h = (e, t) => {
11427
+ let l = !o, u = (n ?? []).includes(le.ValvePositionable), d = Tu(s?.state), f = Td(s?.state), p = s?.position ?? null, m = p !== null, h = (e, t) => {
11428
11428
  l || !e || (t !== void 0 && c(t), e({}));
11429
11429
  }, g = (e) => {
11430
11430
  l || (c({ position: e }), i.setPosition({ position: e }));
@@ -13918,7 +13918,7 @@ function up({ trpc: e, deviceId: t, features: n, optimistic: r }) {
13918
13918
  slice: (e) => e.state.lockControl
13919
13919
  }), { display: s, applyOptimistic: c } = J(a, { enabled: r ?? !0 });
13920
13920
  if (i === void 0 || s === void 0) return null;
13921
- let l = ip(s.state), u = ap(s.state) || !o, d = n?.includes(ue.LockOpen) === !0, f = () => {
13921
+ let l = ip(s.state), u = ap(s.state) || !o, d = n?.includes(le.LockOpen) === !0, f = () => {
13922
13922
  u || (l ? (c({ state: "unlocking" }), i.unlock({})) : (c({ state: "locking" }), i.lock({})));
13923
13923
  }, p = () => {
13924
13924
  u || i.open({});
@@ -13976,7 +13976,7 @@ function vp({ trpc: e, deviceId: t, features: n, optimistic: r }) {
13976
13976
  slice: (e) => e.state.color
13977
13977
  }), s = J(i.slice, { enabled: r ?? !0 }), c = J(a.slice, { enabled: r ?? !0 }), l = J(o.slice, { enabled: r ?? !0 });
13978
13978
  if (i.cap === void 0 || s.display === void 0) return null;
13979
- let u = s.display.on === !0, d = !i.available, f = c.display?.percentage ?? 0, p = !a.available, m = u ? f / 100 : 0, h = u ? gp : _p, g = (n?.includes(ue.LightColorMired) ?? !1) && o.cap !== void 0, _ = l.display?.mireds, v = !o.available;
13979
+ let u = s.display.on === !0, d = !i.available, f = c.display?.percentage ?? 0, p = !a.available, m = u ? f / 100 : 0, h = u ? gp : _p, g = (n?.includes(le.LightColorMired) ?? !1) && o.cap !== void 0, _ = l.display?.mireds, v = !o.available;
13980
13980
  return /* @__PURE__ */ j("div", {
13981
13981
  className: "flex flex-col items-stretch gap-4 rounded-lg border border-border bg-surface p-4",
13982
13982
  children: [
@@ -14101,7 +14101,7 @@ function xp({ trpc: e, deviceId: t, features: n, optimistic: r }) {
14101
14101
  slice: (e) => e.state.fanControl
14102
14102
  }), o = J(i.slice, { enabled: r ?? !0 }), s = J(a.slice, { enabled: r ?? !0 });
14103
14103
  if (i.cap === void 0 || o.display === void 0) return null;
14104
- let c = o.display.on === !0, l = !i.available, u = s.display?.percentage ?? 0, d = !a.available, f = c ? u / 100 : 0, p = c ? yp : bp, m = n?.includes(ue.FanSpeed) ?? !1, h = (n?.includes(ue.FanOscillating) ?? !1) && a.cap !== void 0, g = s.display?.availablePresets ?? [], _ = (n?.includes(ue.FanPreset) ?? !1) && a.cap !== void 0 && g.length > 0, v = s.display?.preset ?? "", y = s.display?.oscillating === !0, b = () => {
14104
+ let c = o.display.on === !0, l = !i.available, u = s.display?.percentage ?? 0, d = !a.available, f = c ? u / 100 : 0, p = c ? yp : bp, m = n?.includes(le.FanSpeed) ?? !1, h = (n?.includes(le.FanOscillating) ?? !1) && a.cap !== void 0, g = s.display?.availablePresets ?? [], _ = (n?.includes(le.FanPreset) ?? !1) && a.cap !== void 0 && g.length > 0, v = s.display?.preset ?? "", y = s.display?.oscillating === !0, b = () => {
14105
14105
  if (l) return;
14106
14106
  let e = !c;
14107
14107
  o.applyOptimistic({ on: e }), i.cap?.setState({ on: e });
@@ -14290,7 +14290,7 @@ function Op({ trpc: e, deviceId: t, features: n, optimistic: r }) {
14290
14290
  slice: (e) => e.state.mediaPlayer
14291
14291
  }), { display: s, applyOptimistic: c } = J(a, { enabled: r ?? !0 });
14292
14292
  if (i === void 0 || s === void 0) return null;
14293
- let l = !o, u = Cp(s.state), d = (n?.includes(ue.MediaPlayerSeek) ?? !1) && s.durationMs !== null && s.durationMs > 0, f = n?.includes(ue.MediaPlayerNext) ?? !1, p = n?.includes(ue.MediaPlayerPrevious) ?? !1, m = (n?.includes(ue.MediaPlayerVolume) ?? !1) && s.volumeLevel !== null, h = () => {
14293
+ let l = !o, u = Cp(s.state), d = (n?.includes(le.MediaPlayerSeek) ?? !1) && s.durationMs !== null && s.durationMs > 0, f = n?.includes(le.MediaPlayerNext) ?? !1, p = n?.includes(le.MediaPlayerPrevious) ?? !1, m = (n?.includes(le.MediaPlayerVolume) ?? !1) && s.volumeLevel !== null, h = () => {
14294
14294
  l || (u === "play" ? (c({ state: "playing" }), i.play({})) : (c({ state: "paused" }), i.pause({})));
14295
14295
  }, g = s.currentMedia?.artist ?? s.currentMedia?.album ?? null, _ = wp(s.positionMs, s.durationMs), v = s.volumeLevel ?? 0;
14296
14296
  return /* @__PURE__ */ j("div", {
@@ -21915,7 +21915,8 @@ var cT = {
21915
21915
  package: "packages",
21916
21916
  class: "classes",
21917
21917
  zone: "zones",
21918
- face: "faces"
21918
+ face: "faces",
21919
+ calendar: "calendars"
21919
21920
  };
21920
21921
  function lT(e, t = "device") {
21921
21922
  let n = String(e.id);
@@ -21925,6 +21926,7 @@ function lT(e, t = "device") {
21925
21926
  case "class": return e.removed ? `${n} — not in the class list` : e.name ?? n;
21926
21927
  case "zone": return e.removed ? `${n} — zone not found` : e.name ?? `${n} — zone unavailable`;
21927
21928
  case "face": return e.removed ? `${n} — not in the face gallery` : e.name ?? n;
21929
+ case "calendar": return e.removed ? `${n} — calendar not found` : e.name ?? n;
21928
21930
  case "camera":
21929
21931
  case "device": return e.removed ? `Device #${n} — removed` : e.name ?? `Device #${n}`;
21930
21932
  }
@@ -22468,7 +22470,7 @@ var IT = class {
22468
22470
  } catch {}
22469
22471
  }
22470
22472
  };
22471
- t(), new IT(), t(), t(), t(), s(() => import("./MaskShapeCanvas-BT714ljC.mjs").then((e) => ({ default: e.MaskShapeCanvas }))), s(() => import("./MotionZonesSettings-CSheC3_V.mjs").then((e) => ({ default: e.MotionZonesSettings }))), s(() => import("./SceneMonitorEditor-mNJ89n0T.mjs").then((e) => ({ default: e.SceneMonitorEditor }))), s(() => import("./PrivacyMaskSettings-I6eE4GFM.mjs").then((e) => ({ default: e.PrivacyMaskSettings })));
22473
+ t(), new IT(), t(), t(), t(), s(() => import("./MaskShapeCanvas-BT714ljC.mjs").then((e) => ({ default: e.MaskShapeCanvas }))), s(() => import("./MotionZonesSettings-sqWBK5nw.mjs").then((e) => ({ default: e.MotionZonesSettings }))), s(() => import("./SceneMonitorEditor-BF58OFQ-.mjs").then((e) => ({ default: e.SceneMonitorEditor }))), s(() => import("./PrivacyMaskSettings-xEGyOq4f.mjs").then((e) => ({ default: e.PrivacyMaskSettings })));
22472
22474
  //#endregion
22473
22475
  //#region src/ui/osd-page-model.ts
22474
22476
  function LT() {
@@ -22634,7 +22636,7 @@ function sE(e, t) {
22634
22636
  days: r
22635
22637
  };
22636
22638
  }
22637
- var cE = le.options;
22639
+ var cE = ue.options;
22638
22640
  function lE(e) {
22639
22641
  return e === void 0 ? [] : de(e, cE);
22640
22642
  }
@@ -24011,15 +24013,25 @@ function ZE() {
24011
24013
  //#endregion
24012
24014
  //#region src/components/TemplatesPanel.tsx
24013
24015
  t();
24014
- function QE(e) {
24015
- return e.pick.containerId ?? e.pick.deviceId;
24016
- }
24016
+ var QE = 0;
24017
24017
  function $E(e, t) {
24018
24018
  let n = /* @__PURE__ */ new Set();
24019
24019
  for (let r = 0; r < e.length; r += 1) r !== t && n.add(e[r].alias);
24020
24020
  return n;
24021
24021
  }
24022
- function eD() {
24022
+ function eD(e) {
24023
+ return {
24024
+ alias: KE("sensor", e),
24025
+ pick: { deviceId: QE },
24026
+ capName: "",
24027
+ valuePath: "",
24028
+ maxDecimals: 1
24029
+ };
24030
+ }
24031
+ function tD(e) {
24032
+ return e.pick.deviceId > 0 && e.capName !== "" && e.valuePath !== "" && e.alias !== "";
24033
+ }
24034
+ function nD() {
24023
24035
  let e = Ei({}), t = pi({ projection: "slim" }), n = Di(), r = Oi(), [i, o] = a(null), s = l(() => _E(t.data ?? []), [t.data]), c = t.isError ? "failed" : t.isSuccess ? "answered" : "pending", u = e.error ?? n.error ?? r.error;
24024
24036
  return /* @__PURE__ */ j("div", {
24025
24037
  className: "space-y-4",
@@ -24032,7 +24044,7 @@ function eD() {
24032
24044
  children: "Named templates"
24033
24045
  }), /* @__PURE__ */ A("p", {
24034
24046
  className: "text-xs text-foreground-muted mt-0.5",
24035
- children: "Combine sensors into one overlay string via alias bindings. Slot kind Template picks one of these by id."
24047
+ children: "Combine sensors into one overlay string via alias bindings. Each binding picks its own device (a container may contribute more than one child). Slot kind Template picks one of these by id."
24036
24048
  })] }), /* @__PURE__ */ A(G, {
24037
24049
  type: "button",
24038
24050
  size: "sm",
@@ -24095,7 +24107,7 @@ function eD() {
24095
24107
  })]
24096
24108
  }, t.id))
24097
24109
  }),
24098
- i !== null && /* @__PURE__ */ A(tD, {
24110
+ i !== null && /* @__PURE__ */ A(rD, {
24099
24111
  draft: i,
24100
24112
  pickerDevices: s,
24101
24113
  listState: c,
@@ -24109,11 +24121,11 @@ function eD() {
24109
24121
  ]
24110
24122
  });
24111
24123
  }
24112
- function tD({ draft: e, pickerDevices: t, listState: n, busy: r, onChange: i, onCancel: o, onSave: s }) {
24113
- let c = t.find((e) => !gE(e.type))?.id ?? 0, u = yi({ deviceId: c }, { enabled: c > 0 }).data?.sources ?? [], d = l(() => new Set(u.map((e) => e.deviceId)), [u]), [f, p] = a([]), m = l(() => {
24114
- let t = e.bindings.map(QE);
24115
- return [...new Set([...t, ...f])];
24116
- }, [e.bindings, f]), h = l(() => e.bindings.flatMap((e) => WE(e)), [e.bindings]), g = rD(e.bindings), _ = l(() => XE(e, { stateByDevice: g }), [e, g]), v = e.name.trim().length > 0 && f.length === 0 && e.bindings.every((e) => e.capName !== "" && e.valuePath !== "" && e.alias !== "");
24124
+ function rD({ draft: e, pickerDevices: t, listState: n, busy: r, onChange: i, onCancel: a, onSave: o }) {
24125
+ let s = t.find((e) => !gE(e.type))?.id ?? 0, c = yi({ deviceId: s }, { enabled: s > 0 }).data?.sources ?? [], u = l(() => e.bindings.filter(tD).flatMap((e) => WE(e)), [e.bindings]), d = aD(e.bindings), f = l(() => XE({
24126
+ ...e,
24127
+ bindings: e.bindings.filter(tD)
24128
+ }, { stateByDevice: d }), [e, d]), p = e.name.trim().length > 0 && e.bindings.every(tD);
24117
24129
  return /* @__PURE__ */ j(xo, {
24118
24130
  className: "p-4 space-y-3",
24119
24131
  "data-testid": "osd-template-editor",
@@ -24131,119 +24143,48 @@ function tD({ draft: e, pickerDevices: t, listState: n, busy: r, onChange: i, on
24131
24143
  name: t.target.value
24132
24144
  })
24133
24145
  })] }),
24134
- /* @__PURE__ */ j("div", { children: [
24135
- /* @__PURE__ */ A(K, { children: "Devices" }),
24136
- /* @__PURE__ */ A(vT, {
24137
- devices: t,
24138
- listState: n,
24139
- value: m,
24140
- onChange: (n) => {
24141
- let r = new Set(n), a = e.bindings.filter((e) => r.has(QE(e))), o = new Set(a.map(QE)), s = [], c = [], l = $E(a);
24142
- for (let e of n) {
24143
- if (o.has(e) || f.includes(e)) {
24144
- f.includes(e) && r.has(e) && s.push(e);
24145
- continue;
24146
- }
24147
- let n = yE(t, e);
24148
- if (n === void 0) continue;
24149
- if (gE(n.type)) {
24150
- s.push(e);
24151
- continue;
24152
- }
24153
- if (!d.has(e)) continue;
24154
- let i = dE(u, e), a = i.auto ?? fE(i.fields);
24155
- if (a === void 0) continue;
24156
- let p = KE(n.name || a.valuePath, l);
24157
- l.add(p), c.push({
24158
- alias: p,
24159
- pick: { deviceId: e },
24160
- capName: a.capName,
24161
- valuePath: a.valuePath,
24162
- maxDecimals: 1
24163
- });
24164
- }
24165
- for (let e of f) r.has(e) && !s.includes(e) && !o.has(e) && s.push(e);
24166
- p(s), i({
24167
- ...e,
24168
- bindings: [...a, ...c]
24169
- });
24170
- },
24171
- noun: "device",
24172
- testId: "osd-tpl-devices"
24173
- }),
24174
- /* @__PURE__ */ A("p", {
24175
- className: "text-[10px] text-foreground-muted mt-1",
24176
- children: "Containers are allowed — pick an OSD-supported child next."
24177
- })
24178
- ] }),
24179
- f.map((n) => {
24180
- let r = yE(t, n), a = vE(n, t, d);
24181
- return /* @__PURE__ */ j("div", {
24182
- className: "rounded border border-border p-2 space-y-2",
24183
- "data-testid": `osd-tpl-pending-container-${n}`,
24184
- children: [
24185
- /* @__PURE__ */ j("p", {
24146
+ /* @__PURE__ */ j("div", {
24147
+ className: "space-y-2",
24148
+ children: [
24149
+ /* @__PURE__ */ j("div", {
24150
+ className: "flex items-center justify-between gap-2",
24151
+ children: [/* @__PURE__ */ A("p", {
24186
24152
  className: "text-xs font-medium text-foreground",
24187
- children: [r?.name ?? `#${n}`, " — pick a child"]
24188
- }),
24189
- a.length === 0 ? /* @__PURE__ */ A("p", {
24190
- className: "text-xs text-foreground-muted",
24191
- children: "No OSD-supported children on this container."
24192
- }) : /* @__PURE__ */ A(po, {
24193
- "data-testid": `osd-tpl-child-${n}`,
24194
- value: "",
24195
- options: [{
24196
- value: "",
24197
- label: "Select child…"
24198
- }, ...a.map((e) => ({
24199
- value: String(e.id),
24200
- label: e.name
24201
- }))],
24202
- onChange: (r) => {
24203
- let a = Number(r.target.value);
24204
- if (!Number.isFinite(a) || a <= 0) return;
24205
- let o = yE(t, a), s = dE(u, a), c = s.auto ?? fE(s.fields);
24206
- if (c === void 0) return;
24207
- let l = $E(e.bindings), d = KE(o?.name ?? c.valuePath, l);
24208
- p(f.filter((e) => e !== n)), i({
24209
- ...e,
24210
- bindings: [...e.bindings, {
24211
- alias: d,
24212
- pick: {
24213
- containerId: n,
24214
- deviceId: a
24215
- },
24216
- capName: c.capName,
24217
- valuePath: c.valuePath,
24218
- maxDecimals: 1
24219
- }]
24220
- });
24221
- }
24222
- }),
24223
- /* @__PURE__ */ A(G, {
24153
+ children: "Bindings"
24154
+ }), /* @__PURE__ */ A(G, {
24224
24155
  type: "button",
24225
24156
  size: "sm",
24226
- variant: "ghost",
24227
- onClick: () => p(f.filter((e) => e !== n)),
24228
- children: "Cancel"
24229
- })
24230
- ]
24231
- }, `pending-${n}`);
24232
- }),
24233
- e.bindings.length > 0 && /* @__PURE__ */ j("div", {
24234
- className: "space-y-2",
24235
- children: [/* @__PURE__ */ A("p", {
24236
- className: "text-xs font-medium text-foreground",
24237
- children: "Bindings"
24238
- }), e.bindings.map((n, r) => /* @__PURE__ */ A(nD, {
24239
- binding: n,
24240
- index: r,
24241
- draft: e,
24242
- pickerDevices: t,
24243
- sources: u,
24244
- stateByDevice: g,
24245
- onChange: i
24246
- }, `${n.alias}-${r}`))]
24157
+ variant: "secondary",
24158
+ "data-testid": "osd-tpl-add-binding",
24159
+ onClick: () => {
24160
+ let t = $E(e.bindings);
24161
+ i({
24162
+ ...e,
24163
+ bindings: [...e.bindings, eD(t)]
24164
+ });
24165
+ },
24166
+ children: "Add binding"
24167
+ })]
24168
+ }),
24169
+ /* @__PURE__ */ A("p", {
24170
+ className: "text-[10px] text-foreground-muted",
24171
+ children: "Each binding picks device → child (if a container) → field. The same container can appear on more than one binding."
24172
+ }),
24173
+ e.bindings.length === 0 && /* @__PURE__ */ A("p", {
24174
+ className: "text-xs text-foreground-muted",
24175
+ children: "No bindings yet — add one to start."
24176
+ }),
24177
+ e.bindings.map((r, a) => /* @__PURE__ */ A(iD, {
24178
+ binding: r,
24179
+ index: a,
24180
+ draft: e,
24181
+ pickerDevices: t,
24182
+ listState: n,
24183
+ sources: c,
24184
+ stateByDevice: d,
24185
+ onChange: i
24186
+ }, `binding-${a}`))
24187
+ ]
24247
24188
  }),
24248
24189
  /* @__PURE__ */ A(AT, {
24249
24190
  label: "Parser",
@@ -24252,7 +24193,7 @@ function tD({ draft: e, pickerDevices: t, listState: n, busy: r, onChange: i, on
24252
24193
  ...e,
24253
24194
  parser: t
24254
24195
  }),
24255
- chips: h,
24196
+ chips: u,
24256
24197
  multiline: !0,
24257
24198
  placeholder: "e.g. {t.value} {t.unit} / {h.full}",
24258
24199
  testId: "osd-tpl-parser",
@@ -24264,12 +24205,12 @@ function tD({ draft: e, pickerDevices: t, listState: n, busy: r, onChange: i, on
24264
24205
  children: [/* @__PURE__ */ A("p", {
24265
24206
  className: "text-[10px] uppercase tracking-wide text-foreground-muted",
24266
24207
  children: "Live preview"
24267
- }), "text" in _ ? /* @__PURE__ */ A("p", {
24208
+ }), "text" in f ? /* @__PURE__ */ A("p", {
24268
24209
  className: "text-sm font-mono text-foreground mt-0.5",
24269
- children: _.text === "" ? "(empty)" : _.text
24210
+ children: f.text === "" ? "(empty)" : f.text
24270
24211
  }) : /* @__PURE__ */ A("p", {
24271
24212
  className: "text-xs text-foreground-muted mt-0.5",
24272
- children: _.reason
24213
+ children: f.reason
24273
24214
  })]
24274
24215
  }),
24275
24216
  /* @__PURE__ */ j("div", {
@@ -24277,37 +24218,53 @@ function tD({ draft: e, pickerDevices: t, listState: n, busy: r, onChange: i, on
24277
24218
  children: [/* @__PURE__ */ A(G, {
24278
24219
  type: "button",
24279
24220
  size: "sm",
24280
- disabled: r || !v,
24281
- onClick: () => void s(),
24221
+ disabled: r || !p,
24222
+ onClick: () => void o(),
24282
24223
  children: "Save template"
24283
24224
  }), /* @__PURE__ */ A(G, {
24284
24225
  type: "button",
24285
24226
  size: "sm",
24286
24227
  variant: "ghost",
24287
- onClick: o,
24228
+ onClick: a,
24288
24229
  children: "Cancel"
24289
24230
  })]
24290
24231
  })
24291
24232
  ]
24292
24233
  });
24293
24234
  }
24294
- function nD({ binding: e, index: t, draft: n, pickerDevices: r, sources: i, stateByDevice: a, onChange: o }) {
24295
- let s = dE(i, e.pick.deviceId), c = yE(r, e.pick.deviceId), l = e.pick.containerId === void 0 ? void 0 : yE(r, e.pick.containerId), u = l === void 0 ? c?.name ?? `#${e.pick.deviceId}` : `${l.name} › ${c?.name ?? `#${e.pick.deviceId}`}`, d = JE(e, { stateByDevice: a }), f = a.get(e.pick.deviceId)?.[e.capName], p = SE(f, e.valuePath), m = bE(p), h = (e) => {
24296
- o({
24235
+ function iD({ binding: e, index: t, draft: n, pickerDevices: r, listState: i, sources: o, stateByDevice: s, onChange: c }) {
24236
+ let u = l(() => new Set(o.map((e) => e.deviceId)), [o]), [d, f] = a(e.pick.containerId);
24237
+ m(() => {
24238
+ f(e.pick.containerId);
24239
+ }, [e.pick.containerId, e.pick.deviceId]);
24240
+ let p = e.pick.deviceId > 0 ? e.pick.deviceId : void 0, h = d ?? p, g = d !== void 0 && gE(yE(r, d)?.type) ? d : void 0, _ = g === void 0 ? [] : vE(g, r, u), v = p === void 0 ? void 0 : dE(o, p), y = p === void 0 ? void 0 : yE(r, p), b = e.pick.containerId === void 0 ? void 0 : yE(r, e.pick.containerId), x = g !== void 0 && p === void 0 ? `${yE(r, g)?.name ?? `#${g}`} › …` : b === void 0 ? y?.name ?? (p === void 0 ? "No device" : `#${e.pick.deviceId}`) : `${b.name} › ${y?.name ?? `#${e.pick.deviceId}`}`, S = tD(e) ? JE(e, { stateByDevice: s }) : { reason: "Pick a device and field" }, C = SE(p === void 0 ? void 0 : s.get(p)?.[e.capName], e.valuePath), w = bE(C), T = (e) => {
24241
+ c({
24297
24242
  ...n,
24298
24243
  bindings: n.bindings.map((n, r) => r === t ? e : n)
24299
24244
  });
24245
+ }, E = (i, a) => {
24246
+ let s = dE(o, i), c = s.auto ?? fE(s.fields), l = yE(r, i), u = $E(n.bindings, t), d = e.alias !== "" && !u.has(e.alias) ? e.alias : KE(l?.name ?? c?.valuePath ?? "sensor", u);
24247
+ T({
24248
+ ...e,
24249
+ alias: d,
24250
+ pick: a === void 0 ? { deviceId: i } : {
24251
+ containerId: a,
24252
+ deviceId: i
24253
+ },
24254
+ capName: c?.capName ?? "",
24255
+ valuePath: c?.valuePath ?? ""
24256
+ });
24300
24257
  };
24301
24258
  return /* @__PURE__ */ j("div", {
24302
24259
  className: "rounded border border-border p-2 grid grid-cols-3 gap-2",
24303
- "data-testid": `osd-tpl-binding-${e.alias}`,
24260
+ "data-testid": `osd-tpl-binding-${t}`,
24304
24261
  children: [
24305
24262
  /* @__PURE__ */ j("div", {
24306
24263
  className: "col-span-3 flex items-center justify-between gap-2",
24307
24264
  children: [/* @__PURE__ */ A("p", {
24308
24265
  className: "text-[11px] text-foreground-muted truncate",
24309
- children: u
24310
- }), /* @__PURE__ */ j("p", {
24266
+ children: x
24267
+ }), e.alias !== "" && /* @__PURE__ */ j("p", {
24311
24268
  className: "text-[10px] font-mono text-foreground-muted shrink-0",
24312
24269
  children: [
24313
24270
  HE(e.alias),
@@ -24319,29 +24276,100 @@ function nD({ binding: e, index: t, draft: n, pickerDevices: r, sources: i, stat
24319
24276
  ]
24320
24277
  })]
24321
24278
  }),
24279
+ /* @__PURE__ */ j("div", {
24280
+ className: "col-span-3 space-y-2",
24281
+ children: [
24282
+ /* @__PURE__ */ A(K, { children: "Device" }),
24283
+ /* @__PURE__ */ A(vT, {
24284
+ devices: r,
24285
+ listState: i,
24286
+ value: h === void 0 ? [] : [h],
24287
+ onChange: (t) => {
24288
+ let n = t.length === 0 ? void 0 : t.length === 1 ? t[0] : t.find((e) => e !== h) ?? t[t.length - 1];
24289
+ if (n === void 0) {
24290
+ f(void 0), T({
24291
+ ...e,
24292
+ pick: { deviceId: QE },
24293
+ capName: "",
24294
+ valuePath: ""
24295
+ });
24296
+ return;
24297
+ }
24298
+ let i = yE(r, n);
24299
+ if (i !== void 0 && gE(i.type)) {
24300
+ f(n), T({
24301
+ ...e,
24302
+ pick: {
24303
+ containerId: n,
24304
+ deviceId: QE
24305
+ },
24306
+ capName: "",
24307
+ valuePath: ""
24308
+ });
24309
+ return;
24310
+ }
24311
+ f(void 0), E(n, void 0);
24312
+ },
24313
+ noun: "device",
24314
+ emptyLabel: "Pick a device",
24315
+ testId: `osd-tpl-device-${t}`
24316
+ }),
24317
+ /* @__PURE__ */ A("p", {
24318
+ className: "text-[10px] text-foreground-muted",
24319
+ children: "Single selection for this binding. Containers are allowed — then pick a child."
24320
+ })
24321
+ ]
24322
+ }),
24323
+ g !== void 0 && /* @__PURE__ */ j("div", {
24324
+ className: "col-span-3",
24325
+ "data-testid": `osd-tpl-child-pick-${t}`,
24326
+ children: [/* @__PURE__ */ A(K, { children: "Child" }), _.length === 0 ? /* @__PURE__ */ A("p", {
24327
+ className: "text-xs text-foreground-muted",
24328
+ children: "No OSD-supported children on this container."
24329
+ }) : /* @__PURE__ */ A(po, {
24330
+ "data-testid": `osd-tpl-child-${t}`,
24331
+ value: p === void 0 ? "" : String(p),
24332
+ options: [{
24333
+ value: "",
24334
+ label: "Select child…"
24335
+ }, ..._.map((e) => ({
24336
+ value: String(e.id),
24337
+ label: e.name
24338
+ }))],
24339
+ onChange: (e) => {
24340
+ let t = Number(e.target.value);
24341
+ !Number.isFinite(t) || t <= 0 || E(t, g);
24342
+ }
24343
+ })]
24344
+ }),
24322
24345
  /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A(K, { children: "Alias" }), /* @__PURE__ */ A(os, {
24323
24346
  "data-testid": `osd-tpl-alias-${t}`,
24324
24347
  value: e.alias,
24325
24348
  maxLength: 32,
24326
24349
  onChange: (r) => {
24327
24350
  let i = r.target.value, a = $E(n.bindings, t);
24328
- i !== "" && a.has(i) || h({
24351
+ i !== "" && a.has(i) || T({
24329
24352
  ...e,
24330
24353
  alias: i
24331
24354
  });
24332
24355
  }
24333
24356
  })] }),
24334
- (s.mode === "pick" || s.mode === "auto") && /* @__PURE__ */ j("div", {
24357
+ v !== void 0 && (v.mode === "pick" || v.mode === "auto") && /* @__PURE__ */ j("div", {
24335
24358
  className: "col-span-2",
24336
- children: [/* @__PURE__ */ A(K, { children: "Field" }), /* @__PURE__ */ A(po, {
24359
+ children: [/* @__PURE__ */ A(K, { children: "Field" }), v.mode === "auto" && v.auto !== void 0 ? /* @__PURE__ */ A("p", {
24360
+ className: "text-xs text-foreground-muted mt-1.5",
24361
+ "data-testid": `osd-tpl-field-auto-${t}`,
24362
+ children: v.auto.label
24363
+ }) : /* @__PURE__ */ A(po, {
24364
+ "data-testid": `osd-tpl-field-${t}`,
24337
24365
  value: `${e.capName}:${e.valuePath}`,
24338
- options: s.fields.map((e) => ({
24366
+ options: v.fields.map((e) => ({
24339
24367
  value: `${e.capName}:${e.valuePath}`,
24340
24368
  label: e.label
24341
24369
  })),
24342
24370
  onChange: (t) => {
24343
- let n = s.fields.find((e) => `${e.capName}:${e.valuePath}` === t.target.value);
24344
- n && h({
24371
+ let n = v.fields.find((e) => `${e.capName}:${e.valuePath}` === t.target.value);
24372
+ n && T({
24345
24373
  ...e,
24346
24374
  capName: n.capName,
24347
24375
  valuePath: n.valuePath
@@ -24350,22 +24378,22 @@ function nD({ binding: e, index: t, draft: n, pickerDevices: r, sources: i, stat
24350
24378
  })]
24351
24379
  }),
24352
24380
  /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A(K, { children: "Unit" }), /* @__PURE__ */ A(ET, {
24353
- dimension: m,
24381
+ dimension: w,
24354
24382
  value: e.displayUnit ?? "",
24355
- onChange: (t) => h({
24383
+ onChange: (t) => T({
24356
24384
  ...e,
24357
24385
  displayUnit: t === "" ? void 0 : t
24358
24386
  }),
24359
24387
  inheritLabel: "Source",
24360
- emptyReason: p === void 0 ? "Source unit unknown (waiting for sensor state)" : "Source unit has no same-dimension conversions",
24361
- "aria-label": `Unit for ${e.alias}`
24388
+ emptyReason: C === void 0 ? "Source unit unknown (waiting for sensor state)" : "Source unit has no same-dimension conversions",
24389
+ "aria-label": `Unit for ${e.alias || `binding ${t + 1}`}`
24362
24390
  })] }),
24363
24391
  /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A(K, { children: "Decimals" }), /* @__PURE__ */ A(os, {
24364
24392
  type: "number",
24365
24393
  min: 0,
24366
24394
  max: 4,
24367
24395
  value: e.maxDecimals,
24368
- onChange: (t) => h({
24396
+ onChange: (t) => T({
24369
24397
  ...e,
24370
24398
  maxDecimals: Number(t.target.value)
24371
24399
  })
@@ -24376,7 +24404,8 @@ function nD({ binding: e, index: t, draft: n, pickerDevices: r, sources: i, stat
24376
24404
  type: "button",
24377
24405
  size: "sm",
24378
24406
  variant: "ghost",
24379
- onClick: () => o({
24407
+ "data-testid": `osd-tpl-remove-${t}`,
24408
+ onClick: () => c({
24380
24409
  ...n,
24381
24410
  bindings: n.bindings.filter((e, n) => n !== t)
24382
24411
  }),
@@ -24386,16 +24415,16 @@ function nD({ binding: e, index: t, draft: n, pickerDevices: r, sources: i, stat
24386
24415
  /* @__PURE__ */ A("p", {
24387
24416
  className: "col-span-3 text-xs font-mono text-foreground",
24388
24417
  "data-testid": `osd-tpl-live-${t}`,
24389
- children: "formatted" in d ? /* @__PURE__ */ j(M, { children: ["Live: ", d.formatted === "" ? "(empty)" : d.formatted] }) : /* @__PURE__ */ A("span", {
24418
+ children: "formatted" in S ? /* @__PURE__ */ j(M, { children: ["Live: ", S.formatted === "" ? "(empty)" : S.formatted] }) : /* @__PURE__ */ A("span", {
24390
24419
  className: "text-foreground-muted",
24391
- children: d.reason
24420
+ children: S.reason
24392
24421
  })
24393
24422
  })
24394
24423
  ]
24395
24424
  });
24396
24425
  }
24397
- function rD(e) {
24398
- let t = l(() => new Set(e.map((e) => e.pick.deviceId)), [e]), n = _i({}, {
24426
+ function aD(e) {
24427
+ let t = l(() => new Set(e.map((e) => e.pick.deviceId).filter((e) => e > 0)), [e]), n = _i({}, {
24399
24428
  enabled: t.size > 0,
24400
24429
  refetchInterval: 5e3
24401
24430
  });
@@ -24412,7 +24441,7 @@ function rD(e) {
24412
24441
  //#endregion
24413
24442
  //#region src/page.tsx
24414
24443
  t();
24415
- function iD(e) {
24444
+ function oD(e) {
24416
24445
  let [t, n] = a("cameras"), r = pi({ projection: "slim" }), i = hi({}), o = Ei({}), s = l(() => (r.data ?? []).filter((e) => e.isCamera).map((e) => ({
24417
24446
  id: e.id,
24418
24447
  name: e.name
@@ -24459,7 +24488,7 @@ function iD(e) {
24459
24488
  }) : null,
24460
24489
  !h && t === "templates" ? /* @__PURE__ */ A(xo, {
24461
24490
  className: "p-4",
24462
- children: /* @__PURE__ */ A(eD, {})
24491
+ children: /* @__PURE__ */ A(nD, {})
24463
24492
  }) : null,
24464
24493
  !h && t === "cameras" && s.length === 0 ? /* @__PURE__ */ A("div", {
24465
24494
  className: "text-xs text-foreground-subtle text-center py-16",
@@ -24482,4 +24511,4 @@ function iD(e) {
24482
24511
  });
24483
24512
  }
24484
24513
  //#endregion
24485
- export { iD as default };
24514
+ export { oD as default };