@camstack/addon-osd-manager 0.1.167 → 0.1.168

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-BS0B2G3Q.mjs → MotionZonesSettings-DhDDa0bz.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-DLJ0DHZT.mjs → PrivacyMaskSettings-DmS2zpnE.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-CDDYaoCX.mjs → SceneMonitorEditor-BxmFUCwZ.mjs} +3 -3
  4. package/dist/_stub.js +3124 -3039
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-B4Z53O4w.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-JEkxlTfr.mjs} +3 -3
  6. package/dist/{_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BZTcxI6n.mjs → _virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C4hB87q5.mjs} +1 -1
  7. package/dist/addon-osd-manager.css +1 -1
  8. package/dist/{hostInit-K1eoWfNR.mjs → hostInit-DEgR--Q3.mjs} +2 -2
  9. package/dist/index.js +103 -3
  10. package/dist/index.mjs +103 -3
  11. package/dist/{player-overlays-BX9_cgYi.mjs → player-overlays-D7L52jFC.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-DQHzOXvm.mjs → responsive-CdooTJcu.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-CVQQynEG.mjs → scene-monitor-copy-D4ak_-Mj.mjs} +1 -1
  15. package/dist/{square-BjnEKMWp.mjs → square-D7eXLmVB.mjs} +1 -1
  16. package/dist/{trash-2-CUYOgymv.mjs → trash-2-DetbCjTC.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-C2WG2Ab3.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BPA6LSjQ.mjs} +1 -1
  18. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -5382,7 +5382,7 @@ var ZodIssueCode = {
5382
5382
  var ZodFirstPartyTypeKind;
5383
5383
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5384
5384
  //#endregion
5385
- //#region ../types/dist/sleep-CDCONfkt.mjs
5385
+ //#region ../types/dist/sleep-DXKLNFvA.mjs
5386
5386
  /**
5387
5387
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5388
5388
  * window to float samples (D455).
@@ -5690,6 +5690,43 @@ function hydrateField(field, values) {
5690
5690
  }
5691
5691
  const rawValue = storedValue !== void 0 ? storedValue : defaultValue !== void 0 ? defaultValue : null;
5692
5692
  const value = field.type === "textarea" && field.isJson && rawValue !== null && typeof rawValue === "object" ? JSON.stringify(rawValue, null, 2) : rawValue;
5693
+ if (field.type === "tags" && typeof field.suggestionsFrom === "string") {
5694
+ const from = values[field.suggestionsFrom];
5695
+ const extra = Array.isArray(from) ? from.filter((s) => typeof s === "string" && s.length > 0) : [];
5696
+ const merged = [...new Set([...field.suggestions ?? [], ...extra])];
5697
+ return {
5698
+ ...field,
5699
+ suggestions: merged,
5700
+ value
5701
+ };
5702
+ }
5703
+ if ((field.type === "select" || field.type === "multiselect") && typeof field.optionsFrom === "string") {
5704
+ const from = values[field.optionsFrom];
5705
+ const byValue = /* @__PURE__ */ new Map();
5706
+ for (const opt of field.options) byValue.set(opt.value, opt);
5707
+ if (Array.isArray(from)) for (const entry of from) {
5708
+ if (typeof entry === "string" && entry.length > 0) {
5709
+ if (!byValue.has(entry)) byValue.set(entry, {
5710
+ value: entry,
5711
+ label: entry
5712
+ });
5713
+ continue;
5714
+ }
5715
+ if (entry === null || typeof entry !== "object") continue;
5716
+ const v = Reflect.get(entry, "value");
5717
+ const lbl = Reflect.get(entry, "label");
5718
+ if (typeof v !== "string" || v.length === 0) continue;
5719
+ if (!byValue.has(v)) byValue.set(v, {
5720
+ value: v,
5721
+ label: typeof lbl === "string" && lbl.length > 0 ? lbl : v
5722
+ });
5723
+ }
5724
+ return {
5725
+ ...field,
5726
+ options: [...byValue.values()],
5727
+ value
5728
+ };
5729
+ }
5693
5730
  return {
5694
5731
  ...field,
5695
5732
  value
@@ -20279,6 +20316,17 @@ var SendResultSchema = object({
20279
20316
  });
20280
20317
  /** Same shape as SendResult — kept as a distinct name for the test panel. */
20281
20318
  var TestResultSchema = SendResultSchema;
20319
+ /**
20320
+ * Pre-save credential probe against a partial (unsaved) target config.
20321
+ * `resolvedUrl` never includes secrets (token stripped from path).
20322
+ */
20323
+ var ProbeTargetConfigResultSchema = object({
20324
+ ok: boolean(),
20325
+ resolvedUrl: string(),
20326
+ httpStatus: number().int().optional(),
20327
+ stateInstance: string().optional(),
20328
+ error: string().optional()
20329
+ });
20282
20330
  var notificationOutputCapability = {
20283
20331
  name: "notification-output",
20284
20332
  scope: "system",
@@ -20286,10 +20334,32 @@ var notificationOutputCapability = {
20286
20334
  methods: {
20287
20335
  listTargetKinds: method(object({}), array(TargetKindSchema)),
20288
20336
  listTargets: method(object({}), array(TargetSchema), { auth: "admin" }),
20337
+ /**
20338
+ * One target WITH secrets — admin edit / duplicate hydration only.
20339
+ * `listTargets` stays redacted; the editor loads this so password fields
20340
+ * are filled (masked in the input) and a save can round-trip the token
20341
+ * when a destination changes (Duplicate with a new chatId, etc.).
20342
+ */
20343
+ getTarget: method(object({ targetId: string() }), TargetSchema, { auth: "admin" }),
20289
20344
  discoverTargets: method(object({
20290
20345
  kind: string(),
20291
- config: record(string(), unknown()).optional()
20346
+ config: record(string(), unknown()).optional(),
20347
+ /**
20348
+ * When editing / duplicating, the blank password field never round-trips
20349
+ * the stored token. Pass the source target id so the provider can restore
20350
+ * secrets server-side before dialling (same merge as upsert).
20351
+ */
20352
+ targetId: string().optional()
20292
20353
  }), array(DiscoveredTargetSchema), { auth: "admin" }),
20354
+ probeTargetConfig: method(object({
20355
+ kind: string(),
20356
+ config: record(string(), unknown()),
20357
+ /** See `discoverTargets.targetId` — restore stored secrets for a blank password. */
20358
+ targetId: string().optional()
20359
+ }), ProbeTargetConfigResultSchema, {
20360
+ kind: "mutation",
20361
+ auth: "admin"
20362
+ }),
20293
20363
  send: method(object({
20294
20364
  targetId: string(),
20295
20365
  notification: NotificationSchema
@@ -20304,7 +20374,16 @@ var notificationOutputCapability = {
20304
20374
  kind: "mutation",
20305
20375
  auth: "admin"
20306
20376
  }),
20307
- upsertTarget: method(object({ target: TargetSchema }), TargetSchema, {
20377
+ upsertTarget: method(object({
20378
+ target: TargetSchema,
20379
+ /**
20380
+ * Duplicate flow: create a NEW target id while copying secrets from an
20381
+ * existing row. The UI never holds the stored token; blank / redacted
20382
+ * password fields are restored from this source (D634 still applies if
20383
+ * destinations diverge without a re-typed secret).
20384
+ */
20385
+ cloneSecretsFrom: string().optional()
20386
+ }), TargetSchema, {
20308
20387
  kind: "mutation",
20309
20388
  auth: "admin"
20310
20389
  }),
@@ -20945,6 +21024,15 @@ var AlarmArmModeSchema = _enum([
20945
21024
  var AlarmPanelStatusSchema = object({
20946
21025
  /** Current lifecycle state. */
20947
21026
  state: AlarmStateSchema,
21027
+ /**
21028
+ * The arm mode the machine belongs to under transitional words
21029
+ * (`arming` / `pending` / `triggered` / `disarming`). `null` when
21030
+ * disarmed or when a provider cannot name one. Exporters MUST prefer
21031
+ * this over an in-process memo — a HomeKit accessory that missed the
21032
+ * settled `armed_*` slice used to map `pending` to DISARMED and hide
21033
+ * an entry delay.
21034
+ */
21035
+ targetMode: AlarmArmModeSchema.nullable().optional(),
20948
21036
  /** Subset of arm modes the panel accepts. UI renders one button per
20949
21037
  * mode in this list. */
20950
21038
  availableModes: array(AlarmArmModeSchema),
@@ -49670,6 +49758,12 @@ Object.freeze({
49670
49758
  addonId: null,
49671
49759
  access: "view"
49672
49760
  },
49761
+ "notificationOutput.getTarget": {
49762
+ capName: "notification-output",
49763
+ capScope: "system",
49764
+ addonId: null,
49765
+ access: "view"
49766
+ },
49673
49767
  "notificationOutput.listTargetKinds": {
49674
49768
  capName: "notification-output",
49675
49769
  capScope: "system",
@@ -49682,6 +49776,12 @@ Object.freeze({
49682
49776
  addonId: null,
49683
49777
  access: "view"
49684
49778
  },
49779
+ "notificationOutput.probeTargetConfig": {
49780
+ capName: "notification-output",
49781
+ capScope: "system",
49782
+ addonId: null,
49783
+ access: "create"
49784
+ },
49685
49785
  "notificationOutput.send": {
49686
49786
  capName: "notification-output",
49687
49787
  capScope: "system",
package/dist/index.mjs CHANGED
@@ -5378,7 +5378,7 @@ var ZodIssueCode = {
5378
5378
  var ZodFirstPartyTypeKind;
5379
5379
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5380
5380
  //#endregion
5381
- //#region ../types/dist/sleep-CDCONfkt.mjs
5381
+ //#region ../types/dist/sleep-DXKLNFvA.mjs
5382
5382
  /**
5383
5383
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5384
5384
  * window to float samples (D455).
@@ -5686,6 +5686,43 @@ function hydrateField(field, values) {
5686
5686
  }
5687
5687
  const rawValue = storedValue !== void 0 ? storedValue : defaultValue !== void 0 ? defaultValue : null;
5688
5688
  const value = field.type === "textarea" && field.isJson && rawValue !== null && typeof rawValue === "object" ? JSON.stringify(rawValue, null, 2) : rawValue;
5689
+ if (field.type === "tags" && typeof field.suggestionsFrom === "string") {
5690
+ const from = values[field.suggestionsFrom];
5691
+ const extra = Array.isArray(from) ? from.filter((s) => typeof s === "string" && s.length > 0) : [];
5692
+ const merged = [...new Set([...field.suggestions ?? [], ...extra])];
5693
+ return {
5694
+ ...field,
5695
+ suggestions: merged,
5696
+ value
5697
+ };
5698
+ }
5699
+ if ((field.type === "select" || field.type === "multiselect") && typeof field.optionsFrom === "string") {
5700
+ const from = values[field.optionsFrom];
5701
+ const byValue = /* @__PURE__ */ new Map();
5702
+ for (const opt of field.options) byValue.set(opt.value, opt);
5703
+ if (Array.isArray(from)) for (const entry of from) {
5704
+ if (typeof entry === "string" && entry.length > 0) {
5705
+ if (!byValue.has(entry)) byValue.set(entry, {
5706
+ value: entry,
5707
+ label: entry
5708
+ });
5709
+ continue;
5710
+ }
5711
+ if (entry === null || typeof entry !== "object") continue;
5712
+ const v = Reflect.get(entry, "value");
5713
+ const lbl = Reflect.get(entry, "label");
5714
+ if (typeof v !== "string" || v.length === 0) continue;
5715
+ if (!byValue.has(v)) byValue.set(v, {
5716
+ value: v,
5717
+ label: typeof lbl === "string" && lbl.length > 0 ? lbl : v
5718
+ });
5719
+ }
5720
+ return {
5721
+ ...field,
5722
+ options: [...byValue.values()],
5723
+ value
5724
+ };
5725
+ }
5689
5726
  return {
5690
5727
  ...field,
5691
5728
  value
@@ -20275,6 +20312,17 @@ var SendResultSchema = object({
20275
20312
  });
20276
20313
  /** Same shape as SendResult — kept as a distinct name for the test panel. */
20277
20314
  var TestResultSchema = SendResultSchema;
20315
+ /**
20316
+ * Pre-save credential probe against a partial (unsaved) target config.
20317
+ * `resolvedUrl` never includes secrets (token stripped from path).
20318
+ */
20319
+ var ProbeTargetConfigResultSchema = object({
20320
+ ok: boolean(),
20321
+ resolvedUrl: string(),
20322
+ httpStatus: number().int().optional(),
20323
+ stateInstance: string().optional(),
20324
+ error: string().optional()
20325
+ });
20278
20326
  var notificationOutputCapability = {
20279
20327
  name: "notification-output",
20280
20328
  scope: "system",
@@ -20282,10 +20330,32 @@ var notificationOutputCapability = {
20282
20330
  methods: {
20283
20331
  listTargetKinds: method(object({}), array(TargetKindSchema)),
20284
20332
  listTargets: method(object({}), array(TargetSchema), { auth: "admin" }),
20333
+ /**
20334
+ * One target WITH secrets — admin edit / duplicate hydration only.
20335
+ * `listTargets` stays redacted; the editor loads this so password fields
20336
+ * are filled (masked in the input) and a save can round-trip the token
20337
+ * when a destination changes (Duplicate with a new chatId, etc.).
20338
+ */
20339
+ getTarget: method(object({ targetId: string() }), TargetSchema, { auth: "admin" }),
20285
20340
  discoverTargets: method(object({
20286
20341
  kind: string(),
20287
- config: record(string(), unknown()).optional()
20342
+ config: record(string(), unknown()).optional(),
20343
+ /**
20344
+ * When editing / duplicating, the blank password field never round-trips
20345
+ * the stored token. Pass the source target id so the provider can restore
20346
+ * secrets server-side before dialling (same merge as upsert).
20347
+ */
20348
+ targetId: string().optional()
20288
20349
  }), array(DiscoveredTargetSchema), { auth: "admin" }),
20350
+ probeTargetConfig: method(object({
20351
+ kind: string(),
20352
+ config: record(string(), unknown()),
20353
+ /** See `discoverTargets.targetId` — restore stored secrets for a blank password. */
20354
+ targetId: string().optional()
20355
+ }), ProbeTargetConfigResultSchema, {
20356
+ kind: "mutation",
20357
+ auth: "admin"
20358
+ }),
20289
20359
  send: method(object({
20290
20360
  targetId: string(),
20291
20361
  notification: NotificationSchema
@@ -20300,7 +20370,16 @@ var notificationOutputCapability = {
20300
20370
  kind: "mutation",
20301
20371
  auth: "admin"
20302
20372
  }),
20303
- upsertTarget: method(object({ target: TargetSchema }), TargetSchema, {
20373
+ upsertTarget: method(object({
20374
+ target: TargetSchema,
20375
+ /**
20376
+ * Duplicate flow: create a NEW target id while copying secrets from an
20377
+ * existing row. The UI never holds the stored token; blank / redacted
20378
+ * password fields are restored from this source (D634 still applies if
20379
+ * destinations diverge without a re-typed secret).
20380
+ */
20381
+ cloneSecretsFrom: string().optional()
20382
+ }), TargetSchema, {
20304
20383
  kind: "mutation",
20305
20384
  auth: "admin"
20306
20385
  }),
@@ -20941,6 +21020,15 @@ var AlarmArmModeSchema = _enum([
20941
21020
  var AlarmPanelStatusSchema = object({
20942
21021
  /** Current lifecycle state. */
20943
21022
  state: AlarmStateSchema,
21023
+ /**
21024
+ * The arm mode the machine belongs to under transitional words
21025
+ * (`arming` / `pending` / `triggered` / `disarming`). `null` when
21026
+ * disarmed or when a provider cannot name one. Exporters MUST prefer
21027
+ * this over an in-process memo — a HomeKit accessory that missed the
21028
+ * settled `armed_*` slice used to map `pending` to DISARMED and hide
21029
+ * an entry delay.
21030
+ */
21031
+ targetMode: AlarmArmModeSchema.nullable().optional(),
20944
21032
  /** Subset of arm modes the panel accepts. UI renders one button per
20945
21033
  * mode in this list. */
20946
21034
  availableModes: array(AlarmArmModeSchema),
@@ -49666,6 +49754,12 @@ Object.freeze({
49666
49754
  addonId: null,
49667
49755
  access: "view"
49668
49756
  },
49757
+ "notificationOutput.getTarget": {
49758
+ capName: "notification-output",
49759
+ capScope: "system",
49760
+ addonId: null,
49761
+ access: "view"
49762
+ },
49669
49763
  "notificationOutput.listTargetKinds": {
49670
49764
  capName: "notification-output",
49671
49765
  capScope: "system",
@@ -49678,6 +49772,12 @@ Object.freeze({
49678
49772
  addonId: null,
49679
49773
  access: "view"
49680
49774
  },
49775
+ "notificationOutput.probeTargetConfig": {
49776
+ capName: "notification-output",
49777
+ capScope: "system",
49778
+ addonId: null,
49779
+ access: "create"
49780
+ },
49681
49781
  "notificationOutput.send": {
49682
49782
  capName: "notification-output",
49683
49783
  capScope: "system",
@@ -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-DQHzOXvm.mjs";
2
+ import { c as i, s as a } from "./responsive-CdooTJcu.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-C2WG2Ab3.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-BPA6LSjQ.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-BZTcxI6n.mjs";
3
+ import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C4hB87q5.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-DQHzOXvm.mjs";
2
+ import { c as i } from "./responsive-CdooTJcu.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-DQHzOXvm.mjs";
1
+ import { c as e } from "./responsive-CdooTJcu.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-DQHzOXvm.mjs";
1
+ import { c as e } from "./responsive-CdooTJcu.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-B4Z53O4w.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-JEkxlTfr.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.167",
3
+ "version": "0.1.168",
4
4
  "description": "Binds camera on-screen-display slots to live state and recognitions",
5
5
  "keywords": [
6
6
  "camstack",