@camstack/ui-library 1.2.195 → 1.2.196

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,4 +1,4 @@
1
- import { TEXT_HINT, WidgetPanel, isAbsentProvider, o as Grid2x2, useDeviceProxy, usePlayerOverlayLayer, useSystem } from "./index.js";
1
+ import { TEXT_HINT, WidgetPanel, isAbsentProvider, s as Grid2x2, useDeviceProxy, usePlayerOverlayLayer, useSystem } from "./index.js";
2
2
  import { MaskShapeCanvas } from "./MaskShapeCanvas-DI4BY7W2.js";
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -12,38 +12,6 @@ var Hexagon = require_index.createLucideIcon("hexagon", [["path", {
12
12
  d: "M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",
13
13
  key: "yt0hxn"
14
14
  }]]);
15
- /**
16
- * @license lucide-react v0.576.0 - ISC
17
- *
18
- * This source code is licensed under the ISC license.
19
- * See the LICENSE file in the root directory of this source tree.
20
- */
21
- var MicOff = require_index.createLucideIcon("mic-off", [
22
- ["path", {
23
- d: "M12 19v3",
24
- key: "npa21l"
25
- }],
26
- ["path", {
27
- d: "M15 9.34V5a3 3 0 0 0-5.68-1.33",
28
- key: "1gzdoj"
29
- }],
30
- ["path", {
31
- d: "M16.95 16.95A7 7 0 0 1 5 12v-2",
32
- key: "cqa7eg"
33
- }],
34
- ["path", {
35
- d: "M18.89 13.23A7 7 0 0 0 19 12v-2",
36
- key: "16hl24"
37
- }],
38
- ["path", {
39
- d: "m2 2 20 20",
40
- key: "1ooewy"
41
- }],
42
- ["path", {
43
- d: "M9 9v3a3 3 0 0 0 5.12 2.12",
44
- key: "r2i35w"
45
- }]
46
- ]);
47
15
  //#endregion
48
16
  //#region src/composites/cap-settings/privacy-mask-audio.ts
49
17
  var CAMERA_MICROPHONE_LABEL = "Microphone";
@@ -470,7 +438,7 @@ function PrivacyMaskSettings({ deviceId }) {
470
438
  className: microphone.on === false || microphone.on === null ? BTN_NEUTRAL : BTN_PRIMARY,
471
439
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
472
440
  className: "inline-flex items-center gap-1.5",
473
- children: [microphone.on === false ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MicOff, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.Mic, { className: "h-3.5 w-3.5" }), microphone.on === null ? "Microphone unknown" : microphone.on ? "Microphone on" : "Microphone off"]
441
+ children: [microphone.on === false ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.MicOff, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.Mic, { className: "h-3.5 w-3.5" }), microphone.on === null ? "Microphone unknown" : microphone.on ? "Microphone on" : "Microphone off"]
474
442
  })
475
443
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
476
444
  className: `text-[10px] text-foreground-subtle flex-1 leading-relaxed`,
@@ -1,4 +1,4 @@
1
- import { TEXT_HINT, WidgetPanel, i as Mic, isAbsentProvider, l as createLucideIcon, n as Square, s as EyeOff, t as Trash2, useDeviceProxy, usePlayerOverlayLayer, useSystem } from "./index.js";
1
+ import { TEXT_HINT, WidgetPanel, a as MicOff, c as EyeOff, i as Mic, isAbsentProvider, n as Square, t as Trash2, u as createLucideIcon, useDeviceProxy, usePlayerOverlayLayer, useSystem } from "./index.js";
2
2
  import { MaskShapeCanvas } from "./MaskShapeCanvas-DI4BY7W2.js";
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -12,38 +12,6 @@ var Hexagon = createLucideIcon("hexagon", [["path", {
12
12
  d: "M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",
13
13
  key: "yt0hxn"
14
14
  }]]);
15
- /**
16
- * @license lucide-react v0.576.0 - ISC
17
- *
18
- * This source code is licensed under the ISC license.
19
- * See the LICENSE file in the root directory of this source tree.
20
- */
21
- var MicOff = createLucideIcon("mic-off", [
22
- ["path", {
23
- d: "M12 19v3",
24
- key: "npa21l"
25
- }],
26
- ["path", {
27
- d: "M15 9.34V5a3 3 0 0 0-5.68-1.33",
28
- key: "1gzdoj"
29
- }],
30
- ["path", {
31
- d: "M16.95 16.95A7 7 0 0 1 5 12v-2",
32
- key: "cqa7eg"
33
- }],
34
- ["path", {
35
- d: "M18.89 13.23A7 7 0 0 0 19 12v-2",
36
- key: "16hl24"
37
- }],
38
- ["path", {
39
- d: "m2 2 20 20",
40
- key: "1ooewy"
41
- }],
42
- ["path", {
43
- d: "M9 9v3a3 3 0 0 0 5.12 2.12",
44
- key: "r2i35w"
45
- }]
46
- ]);
47
15
  //#endregion
48
16
  //#region src/composites/cap-settings/privacy-mask-audio.ts
49
17
  var CAMERA_MICROPHONE_LABEL = "Microphone";
@@ -1,4 +1,4 @@
1
- import { SCENE_CAPTURE_VARIANTS, TEXT_HINT, a as ImageOff, badgeFor, c as Camera, coverageLine, hubPath, isAbsentProvider, l as createLucideIcon, r as RotateCcw, roiTooLarge, statusLine, t as Trash2, useDeviceProxy, useDeviceSnapshotImage, useDeviceStateSlice, useSystem, variantLabel } from "./index.js";
1
+ import { SCENE_CAPTURE_VARIANTS, TEXT_HINT, badgeFor, coverageLine, hubPath, isAbsentProvider, l as Camera, o as ImageOff, r as RotateCcw, roiTooLarge, statusLine, t as Trash2, u as createLucideIcon, useDeviceProxy, useDeviceSnapshotImage, useDeviceStateSlice, useSystem, variantLabel } from "./index.js";
2
2
  import { MaskShapeCanvas } from "./MaskShapeCanvas-DI4BY7W2.js";
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,23 @@
1
+ import { DataTableFacet, DataTableFilterState } from './data-table-filter';
2
+ export interface DataTableFilterBarLabels {
3
+ /** Placeholder of the search box. */
4
+ readonly searchPlaceholder: string;
5
+ /** Accessible name of the search box — say WHICH table, two of them on one
6
+ * page are otherwise indistinguishable to a screen reader. */
7
+ readonly searchLabel: string;
8
+ /** Accessible name of the chip group. */
9
+ readonly facetsLabel: string;
10
+ /** The clear-filters button. */
11
+ readonly clearLabel: string;
12
+ }
13
+ export interface DataTableFilterBarProps {
14
+ readonly state: DataTableFilterState;
15
+ readonly facets: readonly DataTableFacet[];
16
+ readonly labels: DataTableFilterBarLabels;
17
+ readonly onSearch: (search: string) => void;
18
+ readonly onToggleFacet: (value: string) => void;
19
+ readonly onClear: () => void;
20
+ /** Render a chip's caption. Default: the raw value. */
21
+ readonly facetLabel?: (value: string) => string;
22
+ }
23
+ export declare function DataTableFilterBar({ state, facets, labels, onSearch, onToggleFacet, onClear, facetLabel, }: DataTableFilterBarProps): import("react").JSX.Element;
@@ -0,0 +1,36 @@
1
+ export interface DataTableFilterState {
2
+ /** Case- and separator-insensitive substring, see `fuzzyMatch`. */
3
+ readonly search: string;
4
+ /** Selected facet values. Empty = every row. */
5
+ readonly facets: readonly string[];
6
+ }
7
+ export declare const EMPTY_DATA_TABLE_FILTER: DataTableFilterState;
8
+ /** One facet chip, with how many of the rows carry it. */
9
+ export interface DataTableFacet {
10
+ readonly value: string;
11
+ readonly count: number;
12
+ }
13
+ export interface DataTableFilterConfig<T> {
14
+ /** Every text the search is matched against for this row — a name, and
15
+ * whatever else an operator would type to find it (a nested accessory's
16
+ * name, an id). */
17
+ readonly searchText: (row: T) => readonly string[];
18
+ /** The value this row contributes to the facet chips. Omit for a table
19
+ * with a search box only. */
20
+ readonly facetValue?: (row: T) => string;
21
+ }
22
+ /**
23
+ * The facet chips for these rows: one per distinct value, most common first,
24
+ * ties by value.
25
+ */
26
+ export declare function dataTableFacets<T>(rows: readonly T[], facetValue: ((row: T) => string) | undefined): readonly DataTableFacet[];
27
+ export declare function isDataTableFilterActive(state: DataTableFilterState): boolean;
28
+ /** A new state with `value` added to, or removed from, the selected facets. */
29
+ export declare function toggleDataTableFacet(state: DataTableFilterState, value: string): DataTableFilterState;
30
+ /**
31
+ * The rows that survive the filter, in their incoming order.
32
+ *
33
+ * A selected facet that none of `rows` carries is dropped from the effective
34
+ * selection (see the header), so a chip that is not on screen never filters.
35
+ */
36
+ export declare function filterDataTableRows<T>(rows: readonly T[], state: DataTableFilterState, config: DataTableFilterConfig<T>): readonly T[];
@@ -1,4 +1,4 @@
1
- import { ChildLayout, DeviceDisplayOverride, SourceInfo } from '@camstack/types';
1
+ import { ChildLayout, DeviceDisplayOverride, RoleDisplayDefault, SourceInfo } from '@camstack/types';
2
2
  import { LucideIcon } from 'lucide-react';
3
3
  import { ReactNode } from 'react';
4
4
  import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
@@ -199,7 +199,23 @@ export interface VariantDefaults {
199
199
  readonly showChildrenAccordion: boolean;
200
200
  }
201
201
  export declare function resolveFlags(props: DeviceItemProps): VariantDefaults;
202
- export declare function deviceLeadIcon(device: DeviceItemDevice): LucideIcon;
202
+ /**
203
+ * The row's lead icon — the ONE resolution order, the same one
204
+ * `resolveSensorDisplay` applies to unit and precision:
205
+ *
206
+ * device override → operator role default → built-in role glyph → type glyph
207
+ *
208
+ * `roleDefaults` is what the nearest `RoleDisplayDefaultsProvider` publishes;
209
+ * callers outside a provider pass nothing and the second level is skipped.
210
+ * Each level FALLS THROUGH when it names a glyph the registry cannot draw —
211
+ * an unknown key at any level must never leave the row without an icon, and
212
+ * must never shadow a lower level that would have drawn one.
213
+ *
214
+ * "Set as default for all X sensors" writes the second level. It was written
215
+ * for a year and read by nothing: this function went straight from the device
216
+ * override to `DEVICE_ROLE_META`.
217
+ */
218
+ export declare function deviceLeadIcon(device: DeviceItemDevice, roleDefaults?: Readonly<Record<string, RoleDisplayDefault>>): LucideIcon;
203
219
  /**
204
220
  * Role label for a device row, honouring an operator's per-device `display.label`
205
221
  * override (falls back to the `DEVICE_ROLE_META` label). NOT the device name —
@@ -4,6 +4,7 @@ export type { ChildLayoutSection, GroupedChildren } from './child-layout';
4
4
  export { groupChildrenByLayout } from './child-layout';
5
5
  export { ChildSectionAccordion } from './child-section-accordion';
6
6
  export { ContainerChildrenProvider, useContainerChildren } from './container-children-context';
7
+ export { RoleDisplayDefaultsFromServer, RoleDisplayDefaultsProvider, useRoleDisplayDefaults, type RoleDisplayDefaults, } from './role-display-defaults-context';
7
8
  export type { DeviceItemDevice, DeviceItemKind, DeviceItemParent, DeviceItemProps, DeviceItemVariant, DeviceItemView, } from './helpers';
8
9
  export { childListName, deriveDeviceKind, stripParentNamePrefix } from './helpers';
9
10
  export declare function DeviceItem(props: DeviceItemProps): ReactNode;
@@ -0,0 +1,21 @@
1
+ import { RoleDisplayDefault } from '@camstack/types';
2
+ import { ReactNode } from 'react';
3
+ /** `role string → default`. Absent role = no default. */
4
+ export type RoleDisplayDefaults = Readonly<Record<string, RoleDisplayDefault>>;
5
+ export interface RoleDisplayDefaultsProviderProps {
6
+ readonly value: RoleDisplayDefaults;
7
+ readonly children: ReactNode;
8
+ }
9
+ export declare function RoleDisplayDefaultsProvider({ value, children, }: RoleDisplayDefaultsProviderProps): ReactNode;
10
+ /** The defaults published by the nearest provider — an empty record outside
11
+ * one, never `undefined`, so a caller can index it without a guard. */
12
+ export declare function useRoleDisplayDefaults(): RoleDisplayDefaults;
13
+ export interface RoleDisplayDefaultsFromServerProps {
14
+ readonly children: ReactNode;
15
+ }
16
+ /**
17
+ * Reads the defaults from the hub and publishes them. Until the query lands
18
+ * the children see no defaults — the built-in role glyph, which is what they
19
+ * would see with no operator default at all, so nothing flashes wrong.
20
+ */
21
+ export declare function RoleDisplayDefaultsFromServer({ children, }: RoleDisplayDefaultsFromServerProps): ReactNode;
@@ -28,7 +28,10 @@ interface TableLayoutProps extends DeviceRowsProps {
28
28
  * top-level rows carry it (accessory sub-rows are excluded — same gate
29
29
  * as `renderRowAction`). */
30
30
  readonly onDeleteDevice: ((device: DeviceItemDevice) => void) | null;
31
- readonly autoExpandedParents: ReadonlySet<number>;
31
+ /** Parent rows the OPERATOR opened. Only the chevron writes it — a search
32
+ * never does (it narrows the rows; it does not open them). */
33
+ readonly expandedParents: ReadonlySet<number>;
34
+ readonly onToggleExpand: (parentId: number) => void;
32
35
  /** Full unfiltered device list — used to resolve parent.type for the
33
36
  * adopted-row indent. We can't rely on `resolveParent` returning the
34
37
  * parent's type (callers historically only project id+name). */
@@ -41,5 +44,5 @@ interface TableLayoutProps extends DeviceRowsProps {
41
44
  /** Header-click handler — toggles the column's sort (asc→desc→none). */
42
45
  readonly onSort: (columnId: SortableColumnId) => void;
43
46
  }
44
- export declare function TableLayout({ rows, accessoriesByParent, autoExpandedParents, devices, visibleColumns, trpc, resolveIntegrationIcon, resolveParent, onNavigate, renderRowAction, onDeleteDevice, selectable, rowClickSelects, activeSelected, onToggleSelection, sort, onSort, }: TableLayoutProps): ReactNode;
47
+ export declare function TableLayout({ rows, accessoriesByParent, expandedParents, onToggleExpand, devices, visibleColumns, trpc, resolveIntegrationIcon, resolveParent, onNavigate, renderRowAction, onDeleteDevice, selectable, rowClickSelects, activeSelected, onToggleSelection, sort, onSort, }: TableLayoutProps): ReactNode;
45
48
  export {};
@@ -40,11 +40,21 @@ export declare function deviceTypeMetaOf(type: string): DeviceTypeMeta;
40
40
  /** Runtime-string-safe role lookup; unknown roles fall back to `GenericSensor`. */
41
41
  export declare function deviceRoleMetaOf(role: string): DeviceRoleMeta;
42
42
  /**
43
- * Icons an operator may pick for a per-device `display.icon` override, keyed by
44
- * a stable kebab-case name. Built ONLY from the lucide icons already imported by
45
- * this module — no new imports, no dynamic indexing — so it stays bundle-size
46
- * neutral and the picker offers a curated, sensor-relevant set. Unknown keys
47
- * resolve to `undefined` (caller keeps the role/type default).
43
+ * Icons an operator may pick for a per-device `display.icon` override (and for
44
+ * a per-role default), keyed by a stable kebab-case name. Named imports only —
45
+ * no dynamic indexing into lucide, so the bundle carries exactly this set.
46
+ * Unknown keys resolve to `undefined` (caller falls through to the next level).
47
+ *
48
+ * The vocabulary is the one the VIEWER draws from too (its own icon module,
49
+ * keyed by these same strings): a key added here that the phone cannot draw
50
+ * falls through to the next resolution level there, which reads as "my change
51
+ * did nothing". So the KEY is the contract — a stable kebab-case string, never
52
+ * a glyph identity — and `device-meta.test.ts` pins that every key resolves
53
+ * and that the set never loses a key an operator may already have persisted.
54
+ *
55
+ * Grouped by what an operator is naming: a device, a light or appliance, a
56
+ * sensor or the weather it reads, a room, or what moves through it. `gauge2`
57
+ * is a legacy alias kept for rows that persisted it.
48
58
  */
49
59
  export declare const DISPLAY_ICON_REGISTRY: Readonly<Record<string, LucideIcon>>;
50
60
  /** Resolve a `display.icon` name to a lucide component, or `undefined` when the
@@ -0,0 +1,55 @@
1
+ import { DisplayIconGroup } from '@camstack/types';
2
+ import { LucideIcon } from 'lucide-react';
3
+ /** The strings this control shows. All of them, so nothing is hardcoded. */
4
+ export interface IconPickerLabels {
5
+ /** The trigger button's accessible name, e.g. "Change the icon of Kitchen". */
6
+ readonly trigger: string;
7
+ /** The popover's accessible name. */
8
+ readonly panel: string;
9
+ /** The backdrop button's accessible name. */
10
+ readonly close: string;
11
+ readonly searchPlaceholder: string;
12
+ /** The tile that clears the pick — "No icon", "Inherit from the role", … */
13
+ readonly clear: string;
14
+ /** Shown in place of the grid when the query matches nothing. */
15
+ readonly noMatches: string;
16
+ /** One per group, keyed by group id. */
17
+ readonly groups: Readonly<Record<DisplayIconGroup, string>>;
18
+ }
19
+ export interface IconPickerProps {
20
+ /** The chosen key, or `null` for "nothing chosen". */
21
+ readonly value: string | null;
22
+ /** `null` clears the choice. */
23
+ readonly onPick: (key: string | null) => void | Promise<void>;
24
+ /**
25
+ * The glyph for a key, or `undefined` when this build cannot draw it. The
26
+ * caller's table, never a lookup this component makes.
27
+ */
28
+ readonly resolveGlyph: (key: string) => LucideIcon | undefined;
29
+ /** What the trigger draws when `value` is null or undrawable. */
30
+ readonly fallbackGlyph: LucideIcon;
31
+ /**
32
+ * The glyph on the clear tile. Defaults to {@link fallbackGlyph}, which is
33
+ * right when clearing means "inherit" and the tile should show what will be
34
+ * inherited. A picker where clearing means "none at all" passes its own.
35
+ */
36
+ readonly clearGlyph?: LucideIcon;
37
+ /**
38
+ * A human name for a key, for the tile's title and accessible name. The key
39
+ * itself when absent — which is honest, since the key IS what gets stored.
40
+ */
41
+ readonly labelFor?: (key: string) => string | undefined;
42
+ readonly labels: IconPickerLabels;
43
+ /**
44
+ * Restrict the vocabulary to these keys — the room picker offers only
45
+ * `LOCATION_ICON_IDS`. Absent means the whole vocabulary.
46
+ */
47
+ readonly only?: readonly string[];
48
+ /**
49
+ * Extra searchable words per key, for a caller that has translations this
50
+ * package cannot see. Scored exactly like a synonym.
51
+ */
52
+ readonly extraWords?: ReadonlyMap<string, readonly string[]>;
53
+ readonly disabled?: boolean;
54
+ }
55
+ export declare function IconPicker({ value, onPick, resolveGlyph, fallbackGlyph, labels, only, extraWords, clearGlyph, labelFor, disabled, }: IconPickerProps): import("react").JSX.Element;
@@ -44,6 +44,12 @@ export { CopyButton } from './copy-button';
44
44
  export type { DataColumn, DataTableProps } from './data-table';
45
45
  export * from './data-table';
46
46
  export { DataTable } from './data-table';
47
+ export type { DataTableFacet, DataTableFilterConfig, DataTableFilterState, } from './data-table-filter';
48
+ export { dataTableFacets, EMPTY_DATA_TABLE_FILTER, filterDataTableRows, isDataTableFilterActive, toggleDataTableFacet, } from './data-table-filter';
49
+ export type { DataTableFilterBarLabels, DataTableFilterBarProps } from './data-table-filter-bar';
50
+ export { DataTableFilterBar } from './data-table-filter-bar';
51
+ export type { DataTableFilter } from './use-data-table-filter';
52
+ export { useDataTableFilter } from './use-data-table-filter';
47
53
  export type { TableLayoutKind, TableMobileMode } from './data-table-layout';
48
54
  export { CARD_MODE_MIN_COLUMNS, resolveTableLayout } from './data-table-layout';
49
55
  export type { SortHeaderButtonProps } from './sort-header-button';
@@ -71,6 +77,7 @@ export * from './device-list';
71
77
  export type { DeviceBatchToolbarProps } from './device-list/batch-toolbar';
72
78
  export { DeviceBatchToolbar } from './device-list/batch-toolbar';
73
79
  export * from './device-meta';
80
+ export * from './icon-picker';
74
81
  export { DeviceMultiSelectField, DeviceSelectField } from './device-select-field';
75
82
  export type { DeviceSelectCandidate } from './device-select-filter';
76
83
  export { deviceMatchesFilter, deviceOptionLabel, devicesToOptions, filterDeviceOptions, selectedDeviceOptions, } from './device-select-filter';
@@ -0,0 +1,16 @@
1
+ import { DataTableFacet, DataTableFilterConfig, DataTableFilterState } from './data-table-filter';
2
+ export interface DataTableFilter<T> {
3
+ readonly state: DataTableFilterState;
4
+ readonly setSearch: (search: string) => void;
5
+ readonly toggleFacet: (value: string) => void;
6
+ readonly clear: () => void;
7
+ /** Chips derived from the UNFILTERED rows — a chip never disappears because
8
+ * it was the one just pressed. */
9
+ readonly facets: readonly DataTableFacet[];
10
+ /** The rows that survive the filter. */
11
+ readonly rows: readonly T[];
12
+ /** True when the filter is narrowing anything — what an empty state should
13
+ * read before it says "there is nothing here". */
14
+ readonly active: boolean;
15
+ }
16
+ export declare function useDataTableFilter<T>(rows: readonly T[], config: DataTableFilterConfig<T>): DataTableFilter<T>;
@@ -2075,6 +2075,8 @@ export declare const useVideoclipsListSources: typeof trpc.videoclips.listSource
2075
2075
  export declare const useVideoclipsGetClipPlayback: typeof trpc.videoclips.getClipPlayback.useQuery;
2076
2076
  /** Generated alias around `trpc.videoclips.readClipBytes.useQuery`. */
2077
2077
  export declare const useVideoclipsReadClipBytes: typeof trpc.videoclips.readClipBytes.useQuery;
2078
+ /** Generated alias around `trpc.videoclips.dialClipStream.useQuery`. */
2079
+ export declare const useVideoclipsDialClipStream: typeof trpc.videoclips.dialClipStream.useQuery;
2078
2080
  /** Generated alias around `trpc.waterHeater.setTargetTemp.useMutation`. */
2079
2081
  export declare const useWaterHeaterSetTargetTemp: typeof trpc.waterHeater.setTargetTemp.useMutation;
2080
2082
  /** Generated alias around `trpc.waterHeater.setOperationMode.useMutation`. */