@camstack/addon-osd-manager 0.1.157 → 0.1.160

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 (17) hide show
  1. package/dist/{MotionZonesSettings-vYt4dibj.mjs → MotionZonesSettings-gJgHYJJc.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-BiQ78hst.mjs → PrivacyMaskSettings-HmUc5RFn.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-CJtJIyMf.mjs → SceneMonitorEditor-Dqc4eAZT.mjs} +3 -3
  4. package/dist/_stub.js +3065 -2707
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-DdAtpC7z.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-BX8u4O5k.mjs} +2 -2
  6. package/dist/{_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BtgV-Ym5.mjs → _virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BzuGVFNp.mjs} +1 -1
  7. package/dist/{hostInit-0Mc7Fm1R.mjs → hostInit-o9ggbWOT.mjs} +1 -1
  8. package/dist/index.js +260 -46
  9. package/dist/index.mjs +240 -47
  10. package/dist/{player-overlays-BPyna-eI.mjs → player-overlays-BgDqoYs3.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-B0yDP9vf.mjs → responsive-B7zCyVCX.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-BzX20O6q.mjs → scene-monitor-copy-DWIcj1X6.mjs} +1 -1
  14. package/dist/{square-BOMOn_6j.mjs → square-D0YQUHMC.mjs} +1 -1
  15. package/dist/{trash-2-BolGRl2P.mjs → trash-2-C_1H5SIl.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-UY9P_4V2.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BAuPDG6y.mjs} +1 -1
  17. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -39340,24 +39340,45 @@ setOverlay: method(object({
39340
39340
  * conditions it is shown at all. Named TEMPLATES combine many device
39341
39341
  * fields into one overlay string (Scrypted OSD Manager parity).
39342
39342
  */
39343
- /** One field reference inside a named multi-device template. */
39344
- var OsdTemplateFieldSchema = object({
39345
- deviceId: number().int(),
39343
+ /** What `{alias}` expands to for one template binding. Exactly one choice. */
39344
+ var OsdTemplateFormatSchema = _enum([
39345
+ "value+unit",
39346
+ "value",
39347
+ "unit"
39348
+ ]);
39349
+ /**
39350
+ * How the operator reached the leaf device. `deviceId` is ALWAYS the
39351
+ * OSD-supported leaf that is read; `containerId` is set when the pick
39352
+ * went through a container (gateway) first.
39353
+ */
39354
+ var OsdTemplatePickSchema = object({
39355
+ containerId: number().int().optional(),
39356
+ deviceId: number().int()
39357
+ });
39358
+ /**
39359
+ * One named binding inside a multi-device template. The parser only
39360
+ * sees `{alias}`; format / unit / decimals live here structurally.
39361
+ */
39362
+ var OsdTemplateBindingSchema = object({
39363
+ /** Token in the parser, e.g. `t` → `{t}`. Unique within the template. */
39364
+ alias: string().min(1).max(32).regex(/^[A-Za-z][A-Za-z0-9_-]*$/, "alias must start with a letter"),
39365
+ pick: OsdTemplatePickSchema,
39346
39366
  capName: string().min(1).max(64),
39347
39367
  valuePath: string().min(1).max(64),
39368
+ format: OsdTemplateFormatSchema.default("value+unit"),
39348
39369
  /** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
39349
39370
  displayUnit: string().max(16).optional(),
39350
39371
  maxDecimals: number().int().min(0).max(4).default(1)
39351
39372
  });
39352
39373
  /**
39353
- * A named template: several device fields → one parser string with
39354
- * `{deviceId.capName.valuePath}` tokens (Scrypted `{deviceId.sensorId}`).
39374
+ * A named template: bindings (alias → leaf field) + a parser that only
39375
+ * references `{alias}` tokens.
39355
39376
  */
39356
39377
  var OsdNamedTemplateSchema = object({
39357
39378
  id: string().min(1).max(64),
39358
39379
  name: string().min(1).max(64),
39359
- fields: array(OsdTemplateFieldSchema).max(32).default([]),
39360
- /** Parser with multi-token placeholders, e.g. `T {12.thermometer.value}°`. */
39380
+ bindings: array(OsdTemplateBindingSchema).max(32).default([]),
39381
+ /** Parser with alias placeholders, e.g. `{t} / {h}`. */
39361
39382
  parser: string().max(256).default("")
39362
39383
  });
39363
39384
  /** Where a slot's value comes from. */
@@ -58364,14 +58385,42 @@ function readStatePath(slice, path) {
58364
58385
  }
58365
58386
  //#endregion
58366
58387
  //#region src/template-tokens.ts
58367
- /** Build the placeholder token for one template field. */
58368
- function fieldToken(field) {
58369
- return `{${field.deviceId}.${field.capName}.${field.valuePath}}`;
58388
+ /** Build the placeholder token for one binding alias. */
58389
+ function aliasToken(alias) {
58390
+ return `{${alias}}`;
58391
+ }
58392
+ /** Chip / parser token for a binding. */
58393
+ function bindingToken(binding) {
58394
+ return aliasToken(binding.alias);
58395
+ }
58396
+ /** Parse `{alias}` tokens from a parser string (letters, digits, `_`, `-`). */
58397
+ function parseAliasTokens(parser) {
58398
+ const out = [];
58399
+ for (const match of parser.matchAll(/\{([A-Za-z][A-Za-z0-9_-]*)\}/g)) {
58400
+ const alias = match[1];
58401
+ if (alias === void 0 || alias === "") continue;
58402
+ if (!out.includes(alias)) out.push(alias);
58403
+ }
58404
+ return out;
58370
58405
  }
58371
58406
  /** Replace every occurrence of `token` in `parser` with `value`. */
58372
58407
  function replaceToken(parser, token, value) {
58373
58408
  return parser.replaceAll(token, value);
58374
58409
  }
58410
+ /**
58411
+ * Suggest a short unique alias from a device/field name.
58412
+ * Falls back to `b1`, `b2`, … when the slug collides.
58413
+ */
58414
+ function suggestAlias(seed, taken, fallbackPrefix = "b") {
58415
+ const slug = seed.trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "").replace(/^(\d)/, "a$1").slice(0, 24);
58416
+ const base = slug.length > 0 ? slug : fallbackPrefix;
58417
+ if (!taken.has(base)) return base;
58418
+ for (let i = 2; i < 1e3; i += 1) {
58419
+ const candidate = `${base}${i}`.slice(0, 32);
58420
+ if (!taken.has(candidate)) return candidate;
58421
+ }
58422
+ return `${fallbackPrefix}${Date.now().toString(36)}`;
58423
+ }
58375
58424
  //#endregion
58376
58425
  //#region src/unit-display.ts
58377
58426
  /**
@@ -58427,24 +58476,48 @@ function inferSourceUnit(slice, valuePath) {
58427
58476
  }
58428
58477
  //#endregion
58429
58478
  //#region src/named-template-render.ts
58479
+ /** Combine value/unit according to the binding's single format choice. */
58480
+ function applyTemplateFormat(value, unit, format) {
58481
+ if (format === "value") return value;
58482
+ if (format === "unit") return unit;
58483
+ const v = value.trim();
58484
+ const u = unit.trim();
58485
+ if (v === "") return u;
58486
+ if (u === "") return v;
58487
+ return `${v} ${u}`;
58488
+ }
58489
+ /** Resolve one binding to live value/unit/formatted parts (or a reason). */
58490
+ function resolveBindingLive(binding, facts) {
58491
+ const deviceId = binding.pick.deviceId;
58492
+ const deviceState = facts.stateByDevice.get(deviceId);
58493
+ if (deviceState === void 0) return { reason: `no state mirrored for device ${deviceId}` };
58494
+ const slice = deviceState[binding.capName];
58495
+ if (slice === void 0) return { reason: `device ${deviceId} publishes no "${binding.capName}" state` };
58496
+ const raw = readStatePath(slice, binding.valuePath);
58497
+ if (raw === void 0) return { reason: `"${binding.capName}.${binding.valuePath}" is absent on device ${deviceId}` };
58498
+ let value;
58499
+ let unit = "";
58500
+ if (typeof raw === "number") {
58501
+ const converted = convertForDisplay(raw, inferSourceUnit(slice, binding.valuePath), binding.displayUnit);
58502
+ value = truncateDecimals(converted.value, binding.maxDecimals);
58503
+ unit = converted.unit;
58504
+ } else if (typeof raw === "boolean") value = raw ? "ON" : "OFF";
58505
+ else if (raw === null) value = "";
58506
+ else value = String(raw);
58507
+ return {
58508
+ value,
58509
+ unit,
58510
+ formatted: applyTemplateFormat(value, unit, binding.format)
58511
+ };
58512
+ }
58430
58513
  /** Render one named template's parser from live states. */
58431
58514
  function renderNamedTemplate(template, facts) {
58432
58515
  let text = template.parser;
58433
- if (template.fields.length === 0) return text.trim() === "" ? { reason: `template "${template.id}" has no fields` } : { text };
58434
- for (const field of template.fields) {
58435
- const token = fieldToken(field);
58436
- const deviceState = facts.stateByDevice.get(field.deviceId);
58437
- if (deviceState === void 0) return { reason: `no state mirrored for device ${field.deviceId}` };
58438
- const slice = deviceState[field.capName];
58439
- if (slice === void 0) return { reason: `device ${field.deviceId} publishes no "${field.capName}" state` };
58440
- const raw = readStatePath(slice, field.valuePath);
58441
- if (raw === void 0) return { reason: `"${field.capName}.${field.valuePath}" is absent on device ${field.deviceId}` };
58442
- let rendered;
58443
- if (typeof raw === "number") rendered = truncateDecimals(convertForDisplay(raw, inferSourceUnit(slice, field.valuePath), field.displayUnit).value, field.maxDecimals);
58444
- else if (typeof raw === "boolean") rendered = raw ? "ON" : "OFF";
58445
- else if (raw === null) rendered = "";
58446
- else rendered = String(raw);
58447
- text = replaceToken(text, token, rendered);
58516
+ if (template.bindings.length === 0) return text.trim() === "" ? { reason: `template "${template.id}" has no bindings` } : { text };
58517
+ for (const binding of template.bindings) {
58518
+ const live = resolveBindingLive(binding, facts);
58519
+ if ("reason" in live) return live;
58520
+ text = replaceToken(text, aliasToken(binding.alias), live.formatted);
58448
58521
  }
58449
58522
  return { text };
58450
58523
  }
@@ -58546,20 +58619,98 @@ function settle(slotId, text, previousText, outcome, reason) {
58546
58619
  };
58547
58620
  }
58548
58621
  //#endregion
58622
+ //#region src/osd-source-fields.ts
58623
+ /** Caps the OSD source picker may bind. */
58624
+ var OSD_SOURCE_CAP_NAMES = new Set([
58625
+ "temperature-sensor",
58626
+ "humidity-sensor",
58627
+ "climate-control",
58628
+ "numeric-sensor",
58629
+ "weather",
58630
+ "air-quality-sensor",
58631
+ "lock-control",
58632
+ "contact",
58633
+ "binary",
58634
+ "battery"
58635
+ ]);
58636
+ /**
58637
+ * Per-cap leaf allowlist. Absent entry ⇒ every leaf from `stateLeavesOf`
58638
+ * that survives bookkeeping (single-metric sensors). Present ⇒ only these
58639
+ * paths (climate / weather / battery).
58640
+ */
58641
+ var OSD_SOURCE_PATHS = new Map([
58642
+ ["climate-control", new Set([
58643
+ "currentTemp",
58644
+ "currentHumidity",
58645
+ "target",
58646
+ "targetHumidity",
58647
+ "mode"
58648
+ ])],
58649
+ ["weather", new Set([
58650
+ "condition",
58651
+ "temperature",
58652
+ "humidity",
58653
+ "pressure",
58654
+ "windSpeed",
58655
+ "windBearing"
58656
+ ])],
58657
+ ["battery", new Set(["percentage"])],
58658
+ ["temperature-sensor", new Set(["celsius"])],
58659
+ ["humidity-sensor", new Set(["percent"])],
58660
+ ["numeric-sensor", new Set(["value"])],
58661
+ ["air-quality-sensor", new Set([
58662
+ "co2Ppm",
58663
+ "vocPpb",
58664
+ "pm25",
58665
+ "pm10",
58666
+ "aqi"
58667
+ ])],
58668
+ ["binary", new Set(["on"])],
58669
+ ["contact", new Set(["entryOpen"])],
58670
+ ["lock-control", new Set(["state"])]
58671
+ ]);
58672
+ function isOsdSourceCap(capName) {
58673
+ return OSD_SOURCE_CAP_NAMES.has(capName);
58674
+ }
58675
+ /** Bindable OSD leaves for one cap — empty when the cap is not OSD-relevant. */
58676
+ function osdStateLeavesOf(cap) {
58677
+ if (!isOsdSourceCap(cap.name)) return [];
58678
+ const leaves = stateLeavesOf(cap);
58679
+ const allowed = OSD_SOURCE_PATHS.get(cap.name);
58680
+ if (allowed === void 0) return leaves;
58681
+ return leaves.filter((leaf) => allowed.has(leaf.path));
58682
+ }
58683
+ /** Device types that never contribute their OWN catalog leaves. */
58684
+ var OSD_NON_LEAF_TYPES = new Set(["container"]);
58685
+ /** True when this device type may expose OSD leaves (not a container gateway). */
58686
+ function isOsdLeafDeviceType(type) {
58687
+ if (type === null || type === void 0) return true;
58688
+ return !OSD_NON_LEAF_TYPES.has(type);
58689
+ }
58690
+ /** @deprecated Prefer {@link isOsdLeafDeviceType}. */
58691
+ var OSD_PICKER_EXCLUDED_TYPES = OSD_NON_LEAF_TYPES;
58692
+ /** @deprecated Prefer {@link isOsdLeafDeviceType}. */
58693
+ function isOsdPickerDeviceType(type) {
58694
+ return isOsdLeafDeviceType(type);
58695
+ }
58696
+ function isContainerDeviceType(type) {
58697
+ return type === "container";
58698
+ }
58699
+ //#endregion
58549
58700
  //#region src/source-catalog.ts
58550
58701
  /**
58551
- * Build the editor's source picker from the CAP DEFINITIONS — never a
58552
- * hand-written list. A cap that ships a new runtime-state field becomes
58553
- * bindable the moment it deploys, with no change here.
58702
+ * Build the editor's source picker from OSD-relevant cap definitions.
58703
+ * Gateway / infrastructure caps (broker, mqtt, deviceExport, …) never
58704
+ * appear — see `osd-source-fields.ts`.
58554
58705
  */
58555
58706
  /** Turn `air-quality-sensor` + `pm25` into `Air Quality Sensor · pm25`. */
58556
58707
  function humanizeCapName(capName) {
58557
58708
  return capName.split("-").map((part) => part.length === 0 ? part : part[0].toUpperCase() + part.slice(1)).join(" ");
58558
58709
  }
58559
58710
  /**
58560
- * Every bindable value across the cluster, with the camera's own state
58561
- * first — that is what an operator reaches for, and a picker that buries
58562
- * it under 200 other devices is a picker nobody uses.
58711
+ * Every OSD-bindable value across the cluster, with the camera's own
58712
+ * state first — that is what an operator reaches for, and a picker that
58713
+ * buries it under 200 other devices is a picker nobody uses.
58563
58714
  */
58564
58715
  function sourceOptionsFor(cameraDeviceId, devices, capsByDevice) {
58565
58716
  const capsByName = new Map(ALL_CAPABILITY_DEFINITIONS.map((cap) => [cap.name, cap]));
@@ -58569,18 +58720,22 @@ function sourceOptionsFor(cameraDeviceId, devices, capsByDevice) {
58569
58720
  return a.id - b.id;
58570
58721
  });
58571
58722
  const options = [];
58572
- for (const device of ordered) for (const capName of capsByDevice.get(device.id) ?? []) {
58573
- const cap = capsByName.get(capName);
58574
- if (cap === void 0) continue;
58575
- for (const leaf of stateLeavesOf(cap)) options.push({
58576
- deviceId: device.id,
58577
- deviceName: device.name,
58578
- capName,
58579
- valuePath: leaf.path,
58580
- label: `${humanizeCapName(capName)} · ${leaf.path}`,
58581
- valueType: leaf.valueType,
58582
- ...leaf.enumValues !== void 0 ? { enumValues: leaf.enumValues } : {}
58583
- });
58723
+ for (const device of ordered) {
58724
+ if (!isOsdLeafDeviceType(device.type ?? null)) continue;
58725
+ for (const capName of capsByDevice.get(device.id) ?? []) {
58726
+ if (!isOsdSourceCap(capName)) continue;
58727
+ const cap = capsByName.get(capName);
58728
+ if (cap === void 0) continue;
58729
+ for (const leaf of osdStateLeavesOf(cap)) options.push({
58730
+ deviceId: device.id,
58731
+ deviceName: device.name,
58732
+ capName,
58733
+ valuePath: leaf.path,
58734
+ label: `${humanizeCapName(capName)} · ${leaf.path}`,
58735
+ valueType: leaf.valueType,
58736
+ ...leaf.enumValues !== void 0 ? { enumValues: leaf.enumValues } : {}
58737
+ });
58738
+ }
58584
58739
  }
58585
58740
  return options;
58586
58741
  }
@@ -58976,7 +59131,7 @@ var OsdManager = class {
58976
59131
  if (stored === void 0) throw new Error(`osd-manager: template "${template.id}" missing after upsert`);
58977
59132
  this.logger.info("osd-manager: named template upserted", { meta: {
58978
59133
  templateId: stored.id,
58979
- fieldCount: stored.fields.length
59134
+ bindingCount: stored.bindings.length
58980
59135
  } });
58981
59136
  return { template: stored };
58982
59137
  };
@@ -59064,7 +59219,7 @@ var OsdManager = class {
59064
59219
  const templatesById = /* @__PURE__ */ new Map();
59065
59220
  for (const named of allTemplates) {
59066
59221
  templatesById.set(named.id, named);
59067
- if (templateIds.has(named.id)) for (const field of named.fields) wanted.add(field.deviceId);
59222
+ if (templateIds.has(named.id)) for (const binding of named.bindings) wanted.add(binding.pick.deviceId);
59068
59223
  }
59069
59224
  const stateByDevice = /* @__PURE__ */ new Map();
59070
59225
  const gateState = /* @__PURE__ */ new Map();
@@ -59266,7 +59421,8 @@ var OsdManagerAddon = class extends BaseAddon {
59266
59421
  listDevices: async () => {
59267
59422
  return (await ctx.api.deviceManager.listAll.query({ projection: "slim" })).map((d) => ({
59268
59423
  id: d.id,
59269
- name: d.name
59424
+ name: d.name,
59425
+ type: d.type ?? null
59270
59426
  }));
59271
59427
  },
59272
59428
  listCameras: async () => {
@@ -59364,4 +59520,41 @@ var OsdManagerAddon = class extends BaseAddon {
59364
59520
  }
59365
59521
  };
59366
59522
  //#endregion
59367
- export { DEFAULT_TICK_MS, EMPTY_BINDINGS, OSD_BINDINGS_KEY, OSD_SUPPORTED_CONDITIONS, OsdBindingsStore, OsdDeviceBindingsSchema, OsdManager, OsdManagerAddon, OsdManagerAddon as default, applyTemplate, assertSupportedConditions, displayValue, evaluateGate, formatClock, formatSlotText, humanizeCapName, limitText, readStatePath, renderSlot, resolveSource, sourceOptionsFor, stateLeavesOf, truncateDecimals, unsupportedConditionKeys, withBinding, withoutBinding };
59523
+ //#region src/osd-picker-devices.ts
59524
+ /**
59525
+ * Devices offered to the OSD DevicePicker — containers INCLUDED so the
59526
+ * operator can pick a gateway, then an OSD-supported child.
59527
+ */
59528
+ function toOsdPickerDevices(devices) {
59529
+ return devices.map((d) => ({
59530
+ id: d.id,
59531
+ name: d.name,
59532
+ type: d.type ?? null,
59533
+ location: d.location ?? null,
59534
+ parentDeviceId: d.parentDeviceId ?? null
59535
+ }));
59536
+ }
59537
+ /** Children of a container that have at least one OSD catalog field. */
59538
+ function osdSupportedChildrenOf(containerId, devices, deviceIdsWithOsdFields) {
59539
+ return devices.filter((d) => d.parentDeviceId === containerId && isOsdLeafDeviceType(d.type) && deviceIdsWithOsdFields.has(d.id)).toSorted((a, b) => a.name.localeCompare(b.name));
59540
+ }
59541
+ function deviceById(devices, id) {
59542
+ return devices.find((d) => d.id === id);
59543
+ }
59544
+ //#endregion
59545
+ //#region src/template-id.ts
59546
+ /**
59547
+ * Named-template ids are system-generated — never an operator text field.
59548
+ * Create uses a uuid; the editable surface is the template name.
59549
+ */
59550
+ function generateTemplateId() {
59551
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") return crypto.randomUUID();
59552
+ return `tpl-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
59553
+ }
59554
+ /** Optional slug helper when a stable short id from the name is preferred. */
59555
+ function templateIdFromName(name) {
59556
+ const slug = name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 48);
59557
+ return `${slug.length > 0 ? slug : "template"}-${Date.now().toString(36)}`;
59558
+ }
59559
+ //#endregion
59560
+ export { DEFAULT_TICK_MS, EMPTY_BINDINGS, OSD_BINDINGS_KEY, OSD_NON_LEAF_TYPES, OSD_PICKER_EXCLUDED_TYPES, OSD_SOURCE_CAP_NAMES, OSD_SUPPORTED_CONDITIONS, OsdBindingsStore, OsdDeviceBindingsSchema, OsdManager, OsdManagerAddon, OsdManagerAddon as default, aliasToken, applyTemplate, applyTemplateFormat, assertSupportedConditions, bindingToken, deviceById, displayValue, evaluateGate, formatClock, formatSlotText, generateTemplateId, humanizeCapName, isContainerDeviceType, isOsdLeafDeviceType, isOsdPickerDeviceType, isOsdSourceCap, limitText, osdStateLeavesOf, osdSupportedChildrenOf, parseAliasTokens, readStatePath, renderNamedTemplate, renderSlot, replaceToken, resolveBindingLive, resolveSource, sourceOptionsFor, stateLeavesOf, suggestAlias, templateIdFromName, toOsdPickerDevices, truncateDecimals, unsupportedConditionKeys, withBinding, withoutBinding };
@@ -1,5 +1,5 @@
1
1
  import { b as e, g as t, l as n, u as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C5jUMd7X.mjs";
2
- import { c as i, s as a } from "./responsive-B0yDP9vf.mjs";
2
+ import { c as i, s as a } from "./responsive-B7zCyVCX.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
4
4
  var l = i("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-UY9P_4V2.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BAuPDG6y.mjs";
2
2
  export { t as get, e as init };
@@ -1,6 +1,6 @@
1
1
  import { _ as e, b as t, c as n, g as r, l as i, m as a, n as o, r as s, t as c, u as l } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C5jUMd7X.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
3
- import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BtgV-Ym5.mjs";
3
+ import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BzuGVFNp.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
5
  t();
6
6
  var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
@@ -1,5 +1,5 @@
1
1
  import { b as e, c as t, g as n, m as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C5jUMd7X.mjs";
2
- import { c as i } from "./responsive-B0yDP9vf.mjs";
2
+ import { c as i } from "./responsive-B7zCyVCX.mjs";
3
3
  var a = i("camera", [["path", {
4
4
  d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
5
5
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { c as e } from "./responsive-B0yDP9vf.mjs";
1
+ import { c as e } from "./responsive-B7zCyVCX.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { c as e } from "./responsive-B0yDP9vf.mjs";
1
+ import { c as e } from "./responsive-B7zCyVCX.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",
@@ -2753,7 +2753,7 @@ async function rr(e) {
2753
2753
  }
2754
2754
  }
2755
2755
  async function ir() {
2756
- return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-DdAtpC7z.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-BX8u4O5k.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-osd-manager",
3
- "version": "0.1.157",
3
+ "version": "0.1.160",
4
4
  "description": "Binds camera on-screen-display slots to live state and recognitions",
5
5
  "keywords": [
6
6
  "camstack",