@camstack/ui-library 1.2.164 → 1.2.165

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.
@@ -1,13 +1,58 @@
1
1
  import { ReactNode } from 'react';
2
- interface ConfirmOptions {
3
- title: string;
4
- message: string;
5
- confirmLabel?: string;
6
- cancelLabel?: string;
7
- variant?: 'danger' | 'warning' | 'default';
2
+ export type DialogVariant = 'danger' | 'warning' | 'default';
3
+ export interface ConfirmOptions {
4
+ readonly title: string;
5
+ readonly message: string;
6
+ readonly confirmLabel?: string;
7
+ readonly cancelLabel?: string;
8
+ readonly variant?: DialogVariant;
9
+ }
10
+ export interface AlertOptions {
11
+ readonly title: string;
12
+ readonly message: string;
13
+ readonly acknowledgeLabel?: string;
14
+ readonly variant?: DialogVariant;
15
+ }
16
+ export type PromptInputType = 'text' | 'password';
17
+ export interface PromptOptions {
18
+ readonly title: string;
19
+ /** Explanatory paragraph above the field. */
20
+ readonly message?: string;
21
+ /** Label rendered against the input. Defaults to the title. */
22
+ readonly label?: string;
23
+ readonly defaultValue?: string;
24
+ /** `password` masks the value and opts out of autofill/remember. */
25
+ readonly inputType?: PromptInputType;
26
+ readonly placeholder?: string;
27
+ readonly confirmLabel?: string;
28
+ readonly cancelLabel?: string;
29
+ /**
30
+ * A field the operator reads/copies rather than edits (the clipboard
31
+ * fallback). Rendered unmasked, selected on open, with no validation.
32
+ */
33
+ readonly readOnly?: boolean;
34
+ /**
35
+ * Returns an error message to REFUSE the value and keep the dialog open, or
36
+ * `null` to accept. Runs on submit — the dialog is the validation surface, so
37
+ * a refusal never needs a second `alert`.
38
+ */
39
+ readonly validate?: (value: string) => string | null;
40
+ }
41
+ export interface DialogContextValue {
42
+ readonly confirm: (options: ConfirmOptions) => Promise<boolean>;
43
+ readonly alert: (options: AlertOptions) => Promise<void>;
44
+ readonly prompt: (options: PromptOptions) => Promise<string | null>;
8
45
  }
9
46
  export declare function useConfirm(): (options: ConfirmOptions) => Promise<boolean>;
47
+ /** An error/notice with a single acknowledge. Replaces `window.alert`. */
48
+ export declare function useAlert(): (options: AlertOptions) => Promise<void>;
49
+ /** One text input with OK/Cancel. Replaces `window.prompt`. */
50
+ export declare function usePrompt(): (options: PromptOptions) => Promise<string | null>;
10
51
  export declare function ConfirmDialogProvider({ children }: {
11
52
  children: ReactNode;
12
53
  }): import("react").JSX.Element;
13
- export {};
54
+ /**
55
+ * Promotes `el` to the top layer. jsdom has `<dialog>` but no `showModal`, so
56
+ * the attribute is the fallback — see the file docblock.
57
+ */
58
+ export declare function openTopLayer(el: HTMLDialogElement): void;
@@ -1039,6 +1039,8 @@ export declare const useNotificationRulesUpdateRule: typeof trpc.notificationRul
1039
1039
  export declare const useNotificationRulesDeleteRule: typeof trpc.notificationRules.deleteRule.useMutation;
1040
1040
  /** Generated alias around `trpc.notificationRules.setRuleEnabled.useMutation`. */
1041
1041
  export declare const useNotificationRulesSetRuleEnabled: typeof trpc.notificationRules.setRuleEnabled.useMutation;
1042
+ /** Generated alias around `trpc.notificationRules.getClipRetentionAsks.useQuery`. */
1043
+ export declare const useNotificationRulesGetClipRetentionAsks: typeof trpc.notificationRules.getClipRetentionAsks.useQuery;
1042
1044
  /** Generated alias around `trpc.notificationRules.listDeviceMutes.useQuery`. */
1043
1045
  export declare const useNotificationRulesListDeviceMutes: typeof trpc.notificationRules.listDeviceMutes.useQuery;
1044
1046
  /** Generated alias around `trpc.notificationRules.setDeviceMuted.useMutation`. */
package/dist/index.cjs CHANGED
@@ -6091,6 +6091,8 @@ var useNotificationRulesUpdateRule = trpc.notificationRules.updateRule.useMutati
6091
6091
  var useNotificationRulesDeleteRule = trpc.notificationRules.deleteRule.useMutation;
6092
6092
  /** Generated alias around `trpc.notificationRules.setRuleEnabled.useMutation`. */
6093
6093
  var useNotificationRulesSetRuleEnabled = trpc.notificationRules.setRuleEnabled.useMutation;
6094
+ /** Generated alias around `trpc.notificationRules.getClipRetentionAsks.useQuery`. */
6095
+ var useNotificationRulesGetClipRetentionAsks = trpc.notificationRules.getClipRetentionAsks.useQuery;
6094
6096
  /** Generated alias around `trpc.notificationRules.listDeviceMutes.useQuery`. */
6095
6097
  var useNotificationRulesListDeviceMutes = trpc.notificationRules.listDeviceMutes.useQuery;
6096
6098
  /** Generated alias around `trpc.notificationRules.setDeviceMuted.useMutation`. */
@@ -11271,82 +11273,340 @@ function EventKindGlyph({ iconId, size = 16, color, className }) {
11271
11273
  }
11272
11274
  //#endregion
11273
11275
  //#region src/composites/confirm-dialog.tsx
11276
+ /**
11277
+ * The ONE modal dialog of the product — confirm, alert and prompt.
11278
+ *
11279
+ * ## Why all three live here
11280
+ *
11281
+ * The admin UI used to reach for `window.confirm` / `window.alert` /
11282
+ * `window.prompt` wherever a `useConfirm()` call was inconvenient. A native
11283
+ * dialog is wrong on three counts, and the operator hit the worst one on
11284
+ * Identity → Users: resetting a password opened `window.prompt`, which
11285
+ * **cannot mask its input**. A new password was typed in clear text, into a
11286
+ * box the browser may offer to remember. On top of that a native dialog
11287
+ * matches none of the product's visual language and the host can neither style
11288
+ * nor test it.
11289
+ *
11290
+ * So the fix is not "a password modal" — a second dialog component is the
11291
+ * defect, not the cure. The provider that already served every confirm in the
11292
+ * admin UI (and in the viewer, which documents its own copy as "deliberately
11293
+ * the same one `@camstack/ui-library` exposes to the admin UI") grew two more
11294
+ * intents. One provider, one backdrop, one visual language, one set of
11295
+ * keyboard rules.
11296
+ *
11297
+ * ## The three intents are NOT one control
11298
+ *
11299
+ * - `confirm` — a destructive yes/no. It names what is destroyed, and for the
11300
+ * `danger` variant the destructive button is the NON-default: opening focus
11301
+ * lands on Cancel, so a reflexive Enter cancels.
11302
+ * - `alert` — an error/notice with a single acknowledge.
11303
+ * - `prompt` — one text input with OK/Cancel. `inputType: 'password'` masks it
11304
+ * (and opts out of autofill/remember); `readOnly` turns it into a readable,
11305
+ * select-all-on-open field, which is the shape the copy-to-clipboard
11306
+ * fallback needs — a password box would be actively wrong there.
11307
+ *
11308
+ * ## Why the surface is a native `<dialog>`
11309
+ *
11310
+ * These dialogs open OVER surfaces that are themselves native `<dialog>`s
11311
+ * opened with `showModal()` — the event detail panel, the similar-groups
11312
+ * modal. A `showModal()` dialog is promoted to the TOP LAYER and everything
11313
+ * outside it is inert, so a plain `fixed inset-0` overlay rendered at the app
11314
+ * root would be drawn behind that backdrop and could not be clicked at all.
11315
+ * Confirming a track delete from the detail panel would have been impossible.
11316
+ * So this surface is a `<dialog>` of its own: the top layer stacks, the newest
11317
+ * `showModal()` wins, and the confirm sits above the panel that asked for it.
11318
+ *
11319
+ * jsdom implements `<dialog>` but not `showModal()`, so the open falls back to
11320
+ * the `open` attribute there. Everything this component does — focus, keys,
11321
+ * resolution — is identical on both paths; only the top-layer promotion, which
11322
+ * jsdom cannot model at all, is missing. The fallback is asserted below.
11323
+ *
11324
+ * ## Focus, and why there is NO focus trap
11325
+ *
11326
+ * A `showModal()` dialog already scopes the tab ring to itself, and the
11327
+ * surfaces underneath (`SlideOverPanel`) implement no trap of their own. A
11328
+ * second, hand-rolled focus trap on top of that is how a page becomes
11329
+ * unescapable, so this component deliberately does not trap. What it does do:
11330
+ *
11331
+ * - focuses the input (prompt) or the DEFAULT button on open,
11332
+ * - restores focus to the previously focused element on close,
11333
+ * - handles Escape/Enter from a `keydown` on the dialog itself and calls
11334
+ * `stopPropagation()`. React attaches its listeners at the root container, so
11335
+ * stopping there keeps the event from reaching the `window` Escape listener
11336
+ * of whatever modal is underneath: one Escape closes ONE dialog.
11337
+ */
11274
11338
  var ConfirmContext = createSharedContext("camstack:confirm-dialog", null);
11275
- function useConfirm() {
11339
+ function useDialogContext$1() {
11276
11340
  const ctx = (0, react$1.useContext)(ConfirmContext);
11277
11341
  if (!ctx) throw new Error("useConfirm must be used within ConfirmDialogProvider");
11278
- return ctx.confirm;
11342
+ return ctx;
11343
+ }
11344
+ function useConfirm() {
11345
+ return useDialogContext$1().confirm;
11346
+ }
11347
+ /** An error/notice with a single acknowledge. Replaces `window.alert`. */
11348
+ function useAlert() {
11349
+ return useDialogContext$1().alert;
11350
+ }
11351
+ /** One text input with OK/Cancel. Replaces `window.prompt`. */
11352
+ function usePrompt() {
11353
+ return useDialogContext$1().prompt;
11354
+ }
11355
+ var VARIANT_STYLES$2 = {
11356
+ danger: { button: "bg-red-500 hover:bg-red-600 text-white" },
11357
+ warning: { button: "bg-orange-500 hover:bg-orange-600 text-white" },
11358
+ default: { button: "bg-primary hover:bg-primary/90 text-white" }
11359
+ };
11360
+ var CANCEL_CLASS = "px-3 py-1.5 text-xs font-medium rounded-md border border-border text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors";
11361
+ function variantOf(state) {
11362
+ if (state.kind === "prompt") return "default";
11363
+ return state.options.variant ?? "default";
11364
+ }
11365
+ /**
11366
+ * Whether the affirmative button is the DEFAULT (initially focused) control.
11367
+ * A `danger` confirm says no: the destructive action must be deliberate.
11368
+ */
11369
+ function affirmativeIsDefault(state) {
11370
+ return variantOf(state) !== "danger";
11279
11371
  }
11280
11372
  function ConfirmDialogProvider({ children }) {
11281
11373
  const [dialog, setDialog] = (0, react$1.useState)(null);
11282
- const confirm = (0, react$1.useCallback)((options) => {
11283
- return new Promise((resolve) => {
11284
- setDialog({
11285
- ...options,
11286
- resolve
11287
- });
11374
+ const confirm = (0, react$1.useCallback)((options) => new Promise((resolve) => {
11375
+ setDialog({
11376
+ kind: "confirm",
11377
+ options,
11378
+ resolve
11379
+ });
11380
+ }), []);
11381
+ const alert = (0, react$1.useCallback)((options) => new Promise((resolve) => {
11382
+ setDialog({
11383
+ kind: "alert",
11384
+ options,
11385
+ resolve: () => resolve()
11288
11386
  });
11387
+ }), []);
11388
+ const prompt = (0, react$1.useCallback)((options) => new Promise((resolve) => {
11389
+ setDialog({
11390
+ kind: "prompt",
11391
+ options,
11392
+ resolve
11393
+ });
11394
+ }), []);
11395
+ const close = (0, react$1.useCallback)(() => setDialog(null), []);
11396
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ConfirmContext.Provider, {
11397
+ value: {
11398
+ confirm,
11399
+ alert,
11400
+ prompt
11401
+ },
11402
+ children: [children, dialog && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DialogSurface, {
11403
+ state: dialog,
11404
+ onClose: close
11405
+ }, dialogKey(dialog))]
11406
+ });
11407
+ }
11408
+ /**
11409
+ * A key that changes per OPENED dialog, so a second dialog opened while one is
11410
+ * showing remounts the surface (fresh input value, fresh focus) instead of
11411
+ * inheriting the previous one's state.
11412
+ */
11413
+ function dialogKey(state) {
11414
+ return `${state.kind}:${state.options.title}`;
11415
+ }
11416
+ /**
11417
+ * Promotes `el` to the top layer. jsdom has `<dialog>` but no `showModal`, so
11418
+ * the attribute is the fallback — see the file docblock.
11419
+ */
11420
+ function openTopLayer(el) {
11421
+ if (typeof el.showModal === "function") el.showModal();
11422
+ else el.setAttribute("open", "");
11423
+ }
11424
+ function closeTopLayer(el) {
11425
+ if (!el.open) return;
11426
+ if (typeof el.close === "function") el.close();
11427
+ else el.removeAttribute("open");
11428
+ }
11429
+ function DialogSurface({ state, onClose }) {
11430
+ const dialogRef = (0, react$1.useRef)(null);
11431
+ const inputRef = (0, react$1.useRef)(null);
11432
+ const defaultButtonRef = (0, react$1.useRef)(null);
11433
+ const settled = (0, react$1.useRef)(false);
11434
+ const [value, setValue] = (0, react$1.useState)(state.kind === "prompt" ? state.options.defaultValue ?? "" : "");
11435
+ const [error, setError] = (0, react$1.useState)(null);
11436
+ (0, react$1.useEffect)(() => {
11437
+ const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;
11438
+ const el = dialogRef.current;
11439
+ if (el) openTopLayer(el);
11440
+ const input = inputRef.current;
11441
+ if (input) {
11442
+ input.focus();
11443
+ if (state.kind === "prompt" && state.options.readOnly === true) input.select();
11444
+ } else defaultButtonRef.current?.focus();
11445
+ return () => {
11446
+ if (el) closeTopLayer(el);
11447
+ previous?.focus();
11448
+ };
11289
11449
  }, []);
11290
- const handleConfirm = () => {
11291
- dialog?.resolve(true);
11292
- setDialog(null);
11293
- };
11294
- const handleCancel = () => {
11295
- dialog?.resolve(false);
11296
- setDialog(null);
11297
- };
11298
- const variantStyles = {
11299
- danger: {
11300
- icon: "text-red-400",
11301
- button: "bg-red-500 hover:bg-red-600 text-white"
11450
+ const cancel = (0, react$1.useCallback)(() => {
11451
+ if (settled.current) return;
11452
+ settled.current = true;
11453
+ if (state.kind === "confirm") state.resolve(false);
11454
+ else if (state.kind === "prompt") state.resolve(null);
11455
+ else state.resolve();
11456
+ onClose();
11457
+ }, [state, onClose]);
11458
+ const accept = (0, react$1.useCallback)(() => {
11459
+ if (settled.current) return;
11460
+ if (state.kind === "confirm") {
11461
+ settled.current = true;
11462
+ state.resolve(true);
11463
+ onClose();
11464
+ return;
11465
+ }
11466
+ if (state.kind === "alert") {
11467
+ settled.current = true;
11468
+ state.resolve();
11469
+ onClose();
11470
+ return;
11471
+ }
11472
+ if (state.options.readOnly !== true) {
11473
+ const problem = state.options.validate?.(value) ?? null;
11474
+ if (problem !== null) {
11475
+ setError(problem);
11476
+ inputRef.current?.focus();
11477
+ return;
11478
+ }
11479
+ }
11480
+ settled.current = true;
11481
+ state.resolve(state.options.readOnly === true ? null : value);
11482
+ onClose();
11483
+ }, [
11484
+ state,
11485
+ onClose,
11486
+ value
11487
+ ]);
11488
+ const onKeyDown = (0, react$1.useCallback)((e) => {
11489
+ if (e.key === "Escape") {
11490
+ e.stopPropagation();
11491
+ e.preventDefault();
11492
+ cancel();
11493
+ return;
11494
+ }
11495
+ if (e.key !== "Enter") return;
11496
+ if (e.target === inputRef.current) return;
11497
+ if (!affirmativeIsDefault(state)) return;
11498
+ e.stopPropagation();
11499
+ e.preventDefault();
11500
+ accept();
11501
+ }, [
11502
+ state,
11503
+ cancel,
11504
+ accept
11505
+ ]);
11506
+ const onSubmit = (0, react$1.useCallback)((e) => {
11507
+ e.preventDefault();
11508
+ e.stopPropagation();
11509
+ accept();
11510
+ }, [accept]);
11511
+ const style = VARIANT_STYLES$2[variantOf(state)];
11512
+ const titleId = "camstack-dialog-title";
11513
+ const body = state.kind === "prompt" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptBody, {
11514
+ options: state.options,
11515
+ value,
11516
+ error,
11517
+ inputRef,
11518
+ onChange: (next) => {
11519
+ setValue(next);
11520
+ setError(null);
11521
+ }
11522
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11523
+ className: "mt-2 text-xs text-foreground-subtle leading-relaxed",
11524
+ children: state.options.message
11525
+ });
11526
+ const footer = state.kind === "alert" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11527
+ type: "button",
11528
+ ref: defaultButtonRef,
11529
+ onClick: accept,
11530
+ className: `px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${style.button}`,
11531
+ children: state.options.acknowledgeLabel ?? "OK"
11532
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11533
+ type: "button",
11534
+ ref: affirmativeIsDefault(state) ? null : defaultButtonRef,
11535
+ onClick: cancel,
11536
+ className: CANCEL_CLASS,
11537
+ children: state.options.cancelLabel ?? "Cancel"
11538
+ }), !(state.kind === "prompt" && state.options.readOnly === true) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11539
+ type: state.kind === "prompt" ? "submit" : "button",
11540
+ ref: affirmativeIsDefault(state) ? defaultButtonRef : null,
11541
+ onClick: state.kind === "prompt" ? void 0 : accept,
11542
+ className: `px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${style.button}`,
11543
+ children: state.options.confirmLabel ?? (state.kind === "prompt" ? "OK" : "Confirm")
11544
+ })] });
11545
+ const inner = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11546
+ className: "px-5 pt-5 pb-4",
11547
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
11548
+ id: titleId,
11549
+ className: "text-sm font-semibold text-foreground",
11550
+ children: state.options.title
11551
+ }), body]
11552
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11553
+ className: "flex justify-end gap-2 px-5 py-3 border-t border-border bg-surface-hover/30",
11554
+ children: footer
11555
+ })] });
11556
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dialog", {
11557
+ ref: dialogRef,
11558
+ "aria-modal": "true",
11559
+ "aria-labelledby": titleId,
11560
+ onKeyDown,
11561
+ onCancel: (e) => {
11562
+ e.preventDefault();
11563
+ cancel();
11302
11564
  },
11303
- warning: {
11304
- icon: "text-orange-400",
11305
- button: "bg-orange-500 hover:bg-orange-600 text-white"
11565
+ onClick: (e) => {
11566
+ if (e.target === e.currentTarget) cancel();
11306
11567
  },
11307
- default: {
11308
- icon: "text-primary",
11309
- button: "bg-primary hover:bg-primary/90 text-white"
11310
- }
11311
- };
11312
- const style = dialog ? variantStyles[dialog.variant ?? "default"] : variantStyles.default;
11313
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ConfirmContext.Provider, {
11314
- value: { confirm },
11315
- children: [children, dialog && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11316
- className: "fixed inset-0 z-50 flex items-center justify-center",
11317
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
11318
- className: "absolute inset-0 bg-black/50 backdrop-blur-sm",
11319
- onClick: handleCancel
11320
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11321
- className: "relative z-10 w-full max-w-sm mx-4 rounded-xl border border-border bg-surface shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-150",
11322
- onClick: (e) => e.stopPropagation(),
11323
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11324
- className: "px-5 pt-5 pb-4",
11325
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
11326
- className: "text-sm font-semibold text-foreground",
11327
- children: dialog.title
11328
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11329
- className: "mt-2 text-xs text-foreground-subtle leading-relaxed",
11330
- children: dialog.message
11331
- })]
11332
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11333
- className: "flex justify-end gap-2 px-5 py-3 border-t border-border bg-surface-hover/30",
11334
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11335
- type: "button",
11336
- onClick: handleCancel,
11337
- className: "px-3 py-1.5 text-xs font-medium rounded-md border border-border text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors",
11338
- children: dialog.cancelLabel ?? "Cancel"
11339
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
11340
- type: "button",
11341
- onClick: handleConfirm,
11342
- className: `px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${style.button}`,
11343
- children: dialog.confirmLabel ?? "Confirm"
11344
- })]
11345
- })]
11346
- })]
11347
- })]
11568
+ className: "fixed left-1/2 top-1/2 z-50 m-0 w-[calc(100vw-2rem)] max-w-sm -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-xl border border-border bg-surface p-0 text-foreground shadow-2xl backdrop:bg-black/50 backdrop:backdrop-blur-sm [&:not([open])]:hidden",
11569
+ children: state.kind === "prompt" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("form", {
11570
+ onSubmit,
11571
+ children: inner
11572
+ }) : inner
11348
11573
  });
11349
11574
  }
11575
+ function PromptBody({ options, value, error, inputRef, onChange }) {
11576
+ const readOnly = options.readOnly === true;
11577
+ const isPassword = !readOnly && options.inputType === "password";
11578
+ const inputId = "camstack-dialog-input";
11579
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
11580
+ options.message !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11581
+ className: "mt-2 text-xs text-foreground-subtle leading-relaxed",
11582
+ children: options.message
11583
+ }),
11584
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
11585
+ htmlFor: inputId,
11586
+ className: "mt-3 block text-[11px] font-medium text-foreground-subtle",
11587
+ children: options.label ?? options.title
11588
+ }),
11589
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
11590
+ id: inputId,
11591
+ ref: inputRef,
11592
+ type: isPassword ? "password" : "text",
11593
+ value,
11594
+ readOnly,
11595
+ placeholder: options.placeholder,
11596
+ onChange: (e) => onChange(e.target.value),
11597
+ onFocus: readOnly ? (e) => e.currentTarget.select() : void 0,
11598
+ autoComplete: isPassword ? "new-password" : "off",
11599
+ autoCorrect: "off",
11600
+ autoCapitalize: "off",
11601
+ spellCheck: false,
11602
+ className: "mt-1 w-full rounded-md border border-border bg-surface px-2 py-1.5 text-xs text-foreground outline-none focus:border-primary"
11603
+ }),
11604
+ error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
11605
+ className: "mt-1.5 text-[11px] text-red-400",
11606
+ children: error
11607
+ })
11608
+ ] });
11609
+ }
11350
11610
  //#endregion
11351
11611
  //#region src/contexts/device-context.tsx
11352
11612
  /**
@@ -50798,6 +51058,7 @@ exports.nextSort = nextSort;
50798
51058
  exports.nextSortDirection = nextSortDirection;
50799
51059
  exports.nextTableSort = nextTableSort;
50800
51060
  exports.normalizeForSearch = normalizeForSearch;
51061
+ exports.openTopLayer = openTopLayer;
50801
51062
  exports.overrideEntityIdFromLink = overrideEntityIdFromLink;
50802
51063
  exports.parseRecordedServerMessage = parseRecordedServerMessage;
50803
51064
  exports.providerIcons = providerIcons;
@@ -50882,6 +51143,7 @@ exports.useAlarmPanelArm = useAlarmPanelArm;
50882
51143
  exports.useAlarmPanelDisarm = useAlarmPanelDisarm;
50883
51144
  exports.useAlarmPanelGetStatus = useAlarmPanelGetStatus;
50884
51145
  exports.useAlarmPanelTrigger = useAlarmPanelTrigger;
51146
+ exports.useAlert = useAlert;
50885
51147
  exports.useAlertsDismiss = useAlertsDismiss;
50886
51148
  exports.useAlertsEmit = useAlertsEmit;
50887
51149
  exports.useAlertsGetUnreadCount = useAlertsGetUnreadCount;
@@ -51390,6 +51652,7 @@ exports.useNotificationRulesCreateRule = useNotificationRulesCreateRule;
51390
51652
  exports.useNotificationRulesCreateSnooze = useNotificationRulesCreateSnooze;
51391
51653
  exports.useNotificationRulesDeleteRule = useNotificationRulesDeleteRule;
51392
51654
  exports.useNotificationRulesGetAlarmConfig = useNotificationRulesGetAlarmConfig;
51655
+ exports.useNotificationRulesGetClipRetentionAsks = useNotificationRulesGetClipRetentionAsks;
51393
51656
  exports.useNotificationRulesGetConditionCatalog = useNotificationRulesGetConditionCatalog;
51394
51657
  exports.useNotificationRulesGetHistory = useNotificationRulesGetHistory;
51395
51658
  exports.useNotificationRulesGetRule = useNotificationRulesGetRule;
@@ -51632,6 +51895,7 @@ exports.usePrivacyMaskGetOptions = usePrivacyMaskGetOptions;
51632
51895
  exports.usePrivacyMaskGetStatus = usePrivacyMaskGetStatus;
51633
51896
  exports.usePrivacyMaskSetAudioEnabled = usePrivacyMaskSetAudioEnabled;
51634
51897
  exports.usePrivacyMaskSetMask = usePrivacyMaskSetMask;
51898
+ exports.usePrompt = usePrompt;
51635
51899
  exports.usePtzAutotrackGetSettings = usePtzAutotrackGetSettings;
51636
51900
  exports.usePtzAutotrackGetStatus = usePtzAutotrackGetStatus;
51637
51901
  exports.usePtzAutotrackSetEnabled = usePtzAutotrackSetEnabled;
package/dist/index.js CHANGED
@@ -6067,6 +6067,8 @@ var useNotificationRulesUpdateRule = trpc.notificationRules.updateRule.useMutati
6067
6067
  var useNotificationRulesDeleteRule = trpc.notificationRules.deleteRule.useMutation;
6068
6068
  /** Generated alias around `trpc.notificationRules.setRuleEnabled.useMutation`. */
6069
6069
  var useNotificationRulesSetRuleEnabled = trpc.notificationRules.setRuleEnabled.useMutation;
6070
+ /** Generated alias around `trpc.notificationRules.getClipRetentionAsks.useQuery`. */
6071
+ var useNotificationRulesGetClipRetentionAsks = trpc.notificationRules.getClipRetentionAsks.useQuery;
6070
6072
  /** Generated alias around `trpc.notificationRules.listDeviceMutes.useQuery`. */
6071
6073
  var useNotificationRulesListDeviceMutes = trpc.notificationRules.listDeviceMutes.useQuery;
6072
6074
  /** Generated alias around `trpc.notificationRules.setDeviceMuted.useMutation`. */
@@ -11247,82 +11249,340 @@ function EventKindGlyph({ iconId, size = 16, color, className }) {
11247
11249
  }
11248
11250
  //#endregion
11249
11251
  //#region src/composites/confirm-dialog.tsx
11252
+ /**
11253
+ * The ONE modal dialog of the product — confirm, alert and prompt.
11254
+ *
11255
+ * ## Why all three live here
11256
+ *
11257
+ * The admin UI used to reach for `window.confirm` / `window.alert` /
11258
+ * `window.prompt` wherever a `useConfirm()` call was inconvenient. A native
11259
+ * dialog is wrong on three counts, and the operator hit the worst one on
11260
+ * Identity → Users: resetting a password opened `window.prompt`, which
11261
+ * **cannot mask its input**. A new password was typed in clear text, into a
11262
+ * box the browser may offer to remember. On top of that a native dialog
11263
+ * matches none of the product's visual language and the host can neither style
11264
+ * nor test it.
11265
+ *
11266
+ * So the fix is not "a password modal" — a second dialog component is the
11267
+ * defect, not the cure. The provider that already served every confirm in the
11268
+ * admin UI (and in the viewer, which documents its own copy as "deliberately
11269
+ * the same one `@camstack/ui-library` exposes to the admin UI") grew two more
11270
+ * intents. One provider, one backdrop, one visual language, one set of
11271
+ * keyboard rules.
11272
+ *
11273
+ * ## The three intents are NOT one control
11274
+ *
11275
+ * - `confirm` — a destructive yes/no. It names what is destroyed, and for the
11276
+ * `danger` variant the destructive button is the NON-default: opening focus
11277
+ * lands on Cancel, so a reflexive Enter cancels.
11278
+ * - `alert` — an error/notice with a single acknowledge.
11279
+ * - `prompt` — one text input with OK/Cancel. `inputType: 'password'` masks it
11280
+ * (and opts out of autofill/remember); `readOnly` turns it into a readable,
11281
+ * select-all-on-open field, which is the shape the copy-to-clipboard
11282
+ * fallback needs — a password box would be actively wrong there.
11283
+ *
11284
+ * ## Why the surface is a native `<dialog>`
11285
+ *
11286
+ * These dialogs open OVER surfaces that are themselves native `<dialog>`s
11287
+ * opened with `showModal()` — the event detail panel, the similar-groups
11288
+ * modal. A `showModal()` dialog is promoted to the TOP LAYER and everything
11289
+ * outside it is inert, so a plain `fixed inset-0` overlay rendered at the app
11290
+ * root would be drawn behind that backdrop and could not be clicked at all.
11291
+ * Confirming a track delete from the detail panel would have been impossible.
11292
+ * So this surface is a `<dialog>` of its own: the top layer stacks, the newest
11293
+ * `showModal()` wins, and the confirm sits above the panel that asked for it.
11294
+ *
11295
+ * jsdom implements `<dialog>` but not `showModal()`, so the open falls back to
11296
+ * the `open` attribute there. Everything this component does — focus, keys,
11297
+ * resolution — is identical on both paths; only the top-layer promotion, which
11298
+ * jsdom cannot model at all, is missing. The fallback is asserted below.
11299
+ *
11300
+ * ## Focus, and why there is NO focus trap
11301
+ *
11302
+ * A `showModal()` dialog already scopes the tab ring to itself, and the
11303
+ * surfaces underneath (`SlideOverPanel`) implement no trap of their own. A
11304
+ * second, hand-rolled focus trap on top of that is how a page becomes
11305
+ * unescapable, so this component deliberately does not trap. What it does do:
11306
+ *
11307
+ * - focuses the input (prompt) or the DEFAULT button on open,
11308
+ * - restores focus to the previously focused element on close,
11309
+ * - handles Escape/Enter from a `keydown` on the dialog itself and calls
11310
+ * `stopPropagation()`. React attaches its listeners at the root container, so
11311
+ * stopping there keeps the event from reaching the `window` Escape listener
11312
+ * of whatever modal is underneath: one Escape closes ONE dialog.
11313
+ */
11250
11314
  var ConfirmContext = createSharedContext("camstack:confirm-dialog", null);
11251
- function useConfirm() {
11315
+ function useDialogContext$1() {
11252
11316
  const ctx = useContext(ConfirmContext);
11253
11317
  if (!ctx) throw new Error("useConfirm must be used within ConfirmDialogProvider");
11254
- return ctx.confirm;
11318
+ return ctx;
11319
+ }
11320
+ function useConfirm() {
11321
+ return useDialogContext$1().confirm;
11322
+ }
11323
+ /** An error/notice with a single acknowledge. Replaces `window.alert`. */
11324
+ function useAlert() {
11325
+ return useDialogContext$1().alert;
11326
+ }
11327
+ /** One text input with OK/Cancel. Replaces `window.prompt`. */
11328
+ function usePrompt() {
11329
+ return useDialogContext$1().prompt;
11330
+ }
11331
+ var VARIANT_STYLES$2 = {
11332
+ danger: { button: "bg-red-500 hover:bg-red-600 text-white" },
11333
+ warning: { button: "bg-orange-500 hover:bg-orange-600 text-white" },
11334
+ default: { button: "bg-primary hover:bg-primary/90 text-white" }
11335
+ };
11336
+ var CANCEL_CLASS = "px-3 py-1.5 text-xs font-medium rounded-md border border-border text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors";
11337
+ function variantOf(state) {
11338
+ if (state.kind === "prompt") return "default";
11339
+ return state.options.variant ?? "default";
11340
+ }
11341
+ /**
11342
+ * Whether the affirmative button is the DEFAULT (initially focused) control.
11343
+ * A `danger` confirm says no: the destructive action must be deliberate.
11344
+ */
11345
+ function affirmativeIsDefault(state) {
11346
+ return variantOf(state) !== "danger";
11255
11347
  }
11256
11348
  function ConfirmDialogProvider({ children }) {
11257
11349
  const [dialog, setDialog] = useState(null);
11258
- const confirm = useCallback((options) => {
11259
- return new Promise((resolve) => {
11260
- setDialog({
11261
- ...options,
11262
- resolve
11263
- });
11350
+ const confirm = useCallback((options) => new Promise((resolve) => {
11351
+ setDialog({
11352
+ kind: "confirm",
11353
+ options,
11354
+ resolve
11355
+ });
11356
+ }), []);
11357
+ const alert = useCallback((options) => new Promise((resolve) => {
11358
+ setDialog({
11359
+ kind: "alert",
11360
+ options,
11361
+ resolve: () => resolve()
11264
11362
  });
11363
+ }), []);
11364
+ const prompt = useCallback((options) => new Promise((resolve) => {
11365
+ setDialog({
11366
+ kind: "prompt",
11367
+ options,
11368
+ resolve
11369
+ });
11370
+ }), []);
11371
+ const close = useCallback(() => setDialog(null), []);
11372
+ return /* @__PURE__ */ jsxs(ConfirmContext.Provider, {
11373
+ value: {
11374
+ confirm,
11375
+ alert,
11376
+ prompt
11377
+ },
11378
+ children: [children, dialog && /* @__PURE__ */ jsx(DialogSurface, {
11379
+ state: dialog,
11380
+ onClose: close
11381
+ }, dialogKey(dialog))]
11382
+ });
11383
+ }
11384
+ /**
11385
+ * A key that changes per OPENED dialog, so a second dialog opened while one is
11386
+ * showing remounts the surface (fresh input value, fresh focus) instead of
11387
+ * inheriting the previous one's state.
11388
+ */
11389
+ function dialogKey(state) {
11390
+ return `${state.kind}:${state.options.title}`;
11391
+ }
11392
+ /**
11393
+ * Promotes `el` to the top layer. jsdom has `<dialog>` but no `showModal`, so
11394
+ * the attribute is the fallback — see the file docblock.
11395
+ */
11396
+ function openTopLayer(el) {
11397
+ if (typeof el.showModal === "function") el.showModal();
11398
+ else el.setAttribute("open", "");
11399
+ }
11400
+ function closeTopLayer(el) {
11401
+ if (!el.open) return;
11402
+ if (typeof el.close === "function") el.close();
11403
+ else el.removeAttribute("open");
11404
+ }
11405
+ function DialogSurface({ state, onClose }) {
11406
+ const dialogRef = useRef(null);
11407
+ const inputRef = useRef(null);
11408
+ const defaultButtonRef = useRef(null);
11409
+ const settled = useRef(false);
11410
+ const [value, setValue] = useState(state.kind === "prompt" ? state.options.defaultValue ?? "" : "");
11411
+ const [error, setError] = useState(null);
11412
+ useEffect(() => {
11413
+ const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;
11414
+ const el = dialogRef.current;
11415
+ if (el) openTopLayer(el);
11416
+ const input = inputRef.current;
11417
+ if (input) {
11418
+ input.focus();
11419
+ if (state.kind === "prompt" && state.options.readOnly === true) input.select();
11420
+ } else defaultButtonRef.current?.focus();
11421
+ return () => {
11422
+ if (el) closeTopLayer(el);
11423
+ previous?.focus();
11424
+ };
11265
11425
  }, []);
11266
- const handleConfirm = () => {
11267
- dialog?.resolve(true);
11268
- setDialog(null);
11269
- };
11270
- const handleCancel = () => {
11271
- dialog?.resolve(false);
11272
- setDialog(null);
11273
- };
11274
- const variantStyles = {
11275
- danger: {
11276
- icon: "text-red-400",
11277
- button: "bg-red-500 hover:bg-red-600 text-white"
11426
+ const cancel = useCallback(() => {
11427
+ if (settled.current) return;
11428
+ settled.current = true;
11429
+ if (state.kind === "confirm") state.resolve(false);
11430
+ else if (state.kind === "prompt") state.resolve(null);
11431
+ else state.resolve();
11432
+ onClose();
11433
+ }, [state, onClose]);
11434
+ const accept = useCallback(() => {
11435
+ if (settled.current) return;
11436
+ if (state.kind === "confirm") {
11437
+ settled.current = true;
11438
+ state.resolve(true);
11439
+ onClose();
11440
+ return;
11441
+ }
11442
+ if (state.kind === "alert") {
11443
+ settled.current = true;
11444
+ state.resolve();
11445
+ onClose();
11446
+ return;
11447
+ }
11448
+ if (state.options.readOnly !== true) {
11449
+ const problem = state.options.validate?.(value) ?? null;
11450
+ if (problem !== null) {
11451
+ setError(problem);
11452
+ inputRef.current?.focus();
11453
+ return;
11454
+ }
11455
+ }
11456
+ settled.current = true;
11457
+ state.resolve(state.options.readOnly === true ? null : value);
11458
+ onClose();
11459
+ }, [
11460
+ state,
11461
+ onClose,
11462
+ value
11463
+ ]);
11464
+ const onKeyDown = useCallback((e) => {
11465
+ if (e.key === "Escape") {
11466
+ e.stopPropagation();
11467
+ e.preventDefault();
11468
+ cancel();
11469
+ return;
11470
+ }
11471
+ if (e.key !== "Enter") return;
11472
+ if (e.target === inputRef.current) return;
11473
+ if (!affirmativeIsDefault(state)) return;
11474
+ e.stopPropagation();
11475
+ e.preventDefault();
11476
+ accept();
11477
+ }, [
11478
+ state,
11479
+ cancel,
11480
+ accept
11481
+ ]);
11482
+ const onSubmit = useCallback((e) => {
11483
+ e.preventDefault();
11484
+ e.stopPropagation();
11485
+ accept();
11486
+ }, [accept]);
11487
+ const style = VARIANT_STYLES$2[variantOf(state)];
11488
+ const titleId = "camstack-dialog-title";
11489
+ const body = state.kind === "prompt" ? /* @__PURE__ */ jsx(PromptBody, {
11490
+ options: state.options,
11491
+ value,
11492
+ error,
11493
+ inputRef,
11494
+ onChange: (next) => {
11495
+ setValue(next);
11496
+ setError(null);
11497
+ }
11498
+ }) : /* @__PURE__ */ jsx("p", {
11499
+ className: "mt-2 text-xs text-foreground-subtle leading-relaxed",
11500
+ children: state.options.message
11501
+ });
11502
+ const footer = state.kind === "alert" ? /* @__PURE__ */ jsx("button", {
11503
+ type: "button",
11504
+ ref: defaultButtonRef,
11505
+ onClick: accept,
11506
+ className: `px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${style.button}`,
11507
+ children: state.options.acknowledgeLabel ?? "OK"
11508
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
11509
+ type: "button",
11510
+ ref: affirmativeIsDefault(state) ? null : defaultButtonRef,
11511
+ onClick: cancel,
11512
+ className: CANCEL_CLASS,
11513
+ children: state.options.cancelLabel ?? "Cancel"
11514
+ }), !(state.kind === "prompt" && state.options.readOnly === true) && /* @__PURE__ */ jsx("button", {
11515
+ type: state.kind === "prompt" ? "submit" : "button",
11516
+ ref: affirmativeIsDefault(state) ? defaultButtonRef : null,
11517
+ onClick: state.kind === "prompt" ? void 0 : accept,
11518
+ className: `px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${style.button}`,
11519
+ children: state.options.confirmLabel ?? (state.kind === "prompt" ? "OK" : "Confirm")
11520
+ })] });
11521
+ const inner = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
11522
+ className: "px-5 pt-5 pb-4",
11523
+ children: [/* @__PURE__ */ jsx("h3", {
11524
+ id: titleId,
11525
+ className: "text-sm font-semibold text-foreground",
11526
+ children: state.options.title
11527
+ }), body]
11528
+ }), /* @__PURE__ */ jsx("div", {
11529
+ className: "flex justify-end gap-2 px-5 py-3 border-t border-border bg-surface-hover/30",
11530
+ children: footer
11531
+ })] });
11532
+ return /* @__PURE__ */ jsx("dialog", {
11533
+ ref: dialogRef,
11534
+ "aria-modal": "true",
11535
+ "aria-labelledby": titleId,
11536
+ onKeyDown,
11537
+ onCancel: (e) => {
11538
+ e.preventDefault();
11539
+ cancel();
11278
11540
  },
11279
- warning: {
11280
- icon: "text-orange-400",
11281
- button: "bg-orange-500 hover:bg-orange-600 text-white"
11541
+ onClick: (e) => {
11542
+ if (e.target === e.currentTarget) cancel();
11282
11543
  },
11283
- default: {
11284
- icon: "text-primary",
11285
- button: "bg-primary hover:bg-primary/90 text-white"
11286
- }
11287
- };
11288
- const style = dialog ? variantStyles[dialog.variant ?? "default"] : variantStyles.default;
11289
- return /* @__PURE__ */ jsxs(ConfirmContext.Provider, {
11290
- value: { confirm },
11291
- children: [children, dialog && /* @__PURE__ */ jsxs("div", {
11292
- className: "fixed inset-0 z-50 flex items-center justify-center",
11293
- children: [/* @__PURE__ */ jsx("div", {
11294
- className: "absolute inset-0 bg-black/50 backdrop-blur-sm",
11295
- onClick: handleCancel
11296
- }), /* @__PURE__ */ jsxs("div", {
11297
- className: "relative z-10 w-full max-w-sm mx-4 rounded-xl border border-border bg-surface shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-150",
11298
- onClick: (e) => e.stopPropagation(),
11299
- children: [/* @__PURE__ */ jsxs("div", {
11300
- className: "px-5 pt-5 pb-4",
11301
- children: [/* @__PURE__ */ jsx("h3", {
11302
- className: "text-sm font-semibold text-foreground",
11303
- children: dialog.title
11304
- }), /* @__PURE__ */ jsx("p", {
11305
- className: "mt-2 text-xs text-foreground-subtle leading-relaxed",
11306
- children: dialog.message
11307
- })]
11308
- }), /* @__PURE__ */ jsxs("div", {
11309
- className: "flex justify-end gap-2 px-5 py-3 border-t border-border bg-surface-hover/30",
11310
- children: [/* @__PURE__ */ jsx("button", {
11311
- type: "button",
11312
- onClick: handleCancel,
11313
- className: "px-3 py-1.5 text-xs font-medium rounded-md border border-border text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors",
11314
- children: dialog.cancelLabel ?? "Cancel"
11315
- }), /* @__PURE__ */ jsx("button", {
11316
- type: "button",
11317
- onClick: handleConfirm,
11318
- className: `px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${style.button}`,
11319
- children: dialog.confirmLabel ?? "Confirm"
11320
- })]
11321
- })]
11322
- })]
11323
- })]
11544
+ className: "fixed left-1/2 top-1/2 z-50 m-0 w-[calc(100vw-2rem)] max-w-sm -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-xl border border-border bg-surface p-0 text-foreground shadow-2xl backdrop:bg-black/50 backdrop:backdrop-blur-sm [&:not([open])]:hidden",
11545
+ children: state.kind === "prompt" ? /* @__PURE__ */ jsx("form", {
11546
+ onSubmit,
11547
+ children: inner
11548
+ }) : inner
11324
11549
  });
11325
11550
  }
11551
+ function PromptBody({ options, value, error, inputRef, onChange }) {
11552
+ const readOnly = options.readOnly === true;
11553
+ const isPassword = !readOnly && options.inputType === "password";
11554
+ const inputId = "camstack-dialog-input";
11555
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
11556
+ options.message !== void 0 && /* @__PURE__ */ jsx("p", {
11557
+ className: "mt-2 text-xs text-foreground-subtle leading-relaxed",
11558
+ children: options.message
11559
+ }),
11560
+ /* @__PURE__ */ jsx("label", {
11561
+ htmlFor: inputId,
11562
+ className: "mt-3 block text-[11px] font-medium text-foreground-subtle",
11563
+ children: options.label ?? options.title
11564
+ }),
11565
+ /* @__PURE__ */ jsx("input", {
11566
+ id: inputId,
11567
+ ref: inputRef,
11568
+ type: isPassword ? "password" : "text",
11569
+ value,
11570
+ readOnly,
11571
+ placeholder: options.placeholder,
11572
+ onChange: (e) => onChange(e.target.value),
11573
+ onFocus: readOnly ? (e) => e.currentTarget.select() : void 0,
11574
+ autoComplete: isPassword ? "new-password" : "off",
11575
+ autoCorrect: "off",
11576
+ autoCapitalize: "off",
11577
+ spellCheck: false,
11578
+ className: "mt-1 w-full rounded-md border border-border bg-surface px-2 py-1.5 text-xs text-foreground outline-none focus:border-primary"
11579
+ }),
11580
+ error !== null && /* @__PURE__ */ jsx("p", {
11581
+ className: "mt-1.5 text-[11px] text-red-400",
11582
+ children: error
11583
+ })
11584
+ ] });
11585
+ }
11326
11586
  //#endregion
11327
11587
  //#region src/contexts/device-context.tsx
11328
11588
  /**
@@ -50423,4 +50683,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-Bfo4BNqA.js").t
50423
50683
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
50424
50684
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-CooCVUmA.js").then((m) => ({ default: m.PrivacyMaskSettings })));
50425
50685
  //#endregion
50426
- export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, EyeOff as o, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRenameLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
50686
+ export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, EyeOff as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRenameLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/ui-library",
3
- "version": "1.2.164",
3
+ "version": "1.2.165",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
@@ -32,7 +32,7 @@
32
32
  "build": "vite build",
33
33
  "typecheck": "tsc --noEmit",
34
34
  "test": "vitest run",
35
- "publish": "npm publish --access public"
35
+ "publish:npm": "npm publish --access public"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "@camstack/sdk": "*",