@camstack/ui-library 0.1.57 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/composites/addon-global-settings-form.d.ts +1 -1
  2. package/dist/composites/agent-step-editor.d.ts +1 -1
  3. package/dist/composites/app-shell/app-shell.d.ts +1 -1
  4. package/dist/composites/app-shell/sidebar-item.d.ts +1 -1
  5. package/dist/composites/app-shell/sidebar.d.ts +1 -1
  6. package/dist/composites/audio-classification-list.d.ts +1 -1
  7. package/dist/composites/audio-level-waveform.d.ts +1 -1
  8. package/dist/composites/audio-waveform.d.ts +1 -1
  9. package/dist/composites/battery-badge.d.ts +4 -1
  10. package/dist/composites/breadcrumb.d.ts +2 -1
  11. package/dist/composites/camera-stream-player.d.ts +94 -2
  12. package/dist/composites/cap-settings/AutotrackSection.d.ts +1 -1
  13. package/dist/composites/cap-settings/ConsumablesPanel.d.ts +2 -0
  14. package/dist/composites/cap-settings/CoverageTrack.d.ts +12 -0
  15. package/dist/composites/cap-settings/EventBucketStrip.d.ts +25 -0
  16. package/dist/composites/cap-settings/EventHeatmap.d.ts +10 -0
  17. package/dist/composites/cap-settings/MaskShapeCanvas.d.ts +1 -1
  18. package/dist/composites/cap-settings/MotionZonesSettings.d.ts +1 -1
  19. package/dist/composites/cap-settings/PrivacyMaskSettings.d.ts +1 -1
  20. package/dist/composites/cap-settings/PtzPanel.d.ts +1 -1
  21. package/dist/composites/cap-settings/RecordingPanel.d.ts +2 -0
  22. package/dist/composites/cap-settings/RecordingRulesEditor.d.ts +7 -0
  23. package/dist/composites/cap-settings/RecordingSettings.d.ts +8 -0
  24. package/dist/composites/cap-settings/RecordingTimeline.d.ts +5 -0
  25. package/dist/composites/cap-settings/ScheduleBandsEditor.d.ts +7 -0
  26. package/dist/composites/cap-settings/TimelineControls.d.ts +21 -0
  27. package/dist/composites/cap-settings/event-thumb.d.ts +11 -0
  28. package/dist/composites/cap-settings/index.d.ts +4 -0
  29. package/dist/composites/cap-settings/recording-config-form.d.ts +34 -0
  30. package/dist/composites/cap-settings/recording-spans.d.ts +22 -0
  31. package/dist/composites/cap-settings/recording-timeline-model.d.ts +84 -0
  32. package/dist/composites/code-block.d.ts +1 -1
  33. package/dist/composites/config-form-builder.d.ts +1 -1
  34. package/dist/composites/config-form-field.d.ts +3 -3
  35. package/dist/composites/confirm-action-button.d.ts +1 -1
  36. package/dist/composites/confirm-dialog.d.ts +1 -1
  37. package/dist/composites/data-table/data-table-header.d.ts +1 -1
  38. package/dist/composites/data-table/data-table-pagination.d.ts +1 -1
  39. package/dist/composites/data-table/data-table-row.d.ts +1 -1
  40. package/dist/composites/data-table/data-table.d.ts +1 -1
  41. package/dist/composites/data-table.d.ts +1 -1
  42. package/dist/composites/detection-canvas.d.ts +1 -1
  43. package/dist/composites/detection-overlay.d.ts +1 -1
  44. package/dist/composites/detection-result-tree.d.ts +1 -1
  45. package/dist/composites/dev-shell.d.ts +1 -1
  46. package/dist/composites/device-activity-panel.d.ts +5 -1
  47. package/dist/composites/device-card.d.ts +1 -1
  48. package/dist/composites/device-controls/alarm-hero-card.d.ts +24 -0
  49. package/dist/composites/device-controls/atoms.d.ts +81 -0
  50. package/dist/composites/device-controls/brightness-panel.d.ts +3 -0
  51. package/dist/composites/device-controls/button-control.d.ts +18 -0
  52. package/dist/composites/device-controls/climate-panel.d.ts +16 -0
  53. package/dist/composites/device-controls/container-primary-hero.d.ts +24 -0
  54. package/dist/composites/device-controls/container-primary.d.ts +46 -0
  55. package/dist/composites/device-controls/control-panel.d.ts +10 -0
  56. package/dist/composites/device-controls/control-registry.d.ts +74 -0
  57. package/dist/composites/device-controls/cover-hero-card.d.ts +27 -0
  58. package/dist/composites/device-controls/cover-inline.d.ts +27 -0
  59. package/dist/composites/device-controls/cover-panel.d.ts +3 -0
  60. package/dist/composites/device-controls/dummy-hero-card.d.ts +6 -0
  61. package/dist/composites/device-controls/fan-hero-card.d.ts +21 -0
  62. package/dist/composites/device-controls/fan-panel.d.ts +3 -0
  63. package/dist/composites/device-controls/humidifier-control.d.ts +37 -0
  64. package/dist/composites/device-controls/image-control.d.ts +24 -0
  65. package/dist/composites/device-controls/index.d.ts +33 -0
  66. package/dist/composites/device-controls/lawn-mower-control.d.ts +24 -0
  67. package/dist/composites/device-controls/light-hero-card.d.ts +16 -0
  68. package/dist/composites/device-controls/lock-hero-card.d.ts +15 -0
  69. package/dist/composites/device-controls/lock-panel.d.ts +3 -0
  70. package/dist/composites/device-controls/media-player-hero-card.d.ts +17 -0
  71. package/dist/composites/device-controls/media-player-panel.d.ts +9 -0
  72. package/dist/composites/device-controls/offline-badge.d.ts +11 -0
  73. package/dist/composites/device-controls/panel-controls.d.ts +17 -0
  74. package/dist/composites/device-controls/popover-row-action.d.ts +9 -0
  75. package/dist/composites/device-controls/primary-child.d.ts +18 -0
  76. package/dist/composites/device-controls/radial-gauge.d.ts +20 -0
  77. package/dist/composites/device-controls/sensor-hero-card.d.ts +10 -0
  78. package/dist/composites/device-controls/sensor-inline-control.d.ts +11 -0
  79. package/dist/composites/device-controls/sensor-value-atom.d.ts +106 -0
  80. package/dist/composites/device-controls/switch-hero-card.d.ts +13 -0
  81. package/dist/composites/device-controls/switch-panel.d.ts +3 -0
  82. package/dist/composites/device-controls/tap-toggle.d.ts +17 -0
  83. package/dist/composites/device-controls/thermostat-hero-card.d.ts +17 -0
  84. package/dist/composites/device-controls/types.d.ts +17 -0
  85. package/dist/composites/device-controls/update-control.d.ts +11 -0
  86. package/dist/composites/device-controls/vacuum-control.d.ts +36 -0
  87. package/dist/composites/device-controls/valve-control.d.ts +46 -0
  88. package/dist/composites/device-controls/water-heater-control.d.ts +41 -0
  89. package/dist/composites/device-controls/weather-control.d.ts +41 -0
  90. package/dist/composites/device-export-panel.d.ts +1 -1
  91. package/dist/composites/device-grid.d.ts +1 -1
  92. package/dist/composites/device-item/actions.d.ts +12 -1
  93. package/dist/composites/device-item/child-layout.d.ts +32 -0
  94. package/dist/composites/device-item/child-section-accordion.d.ts +9 -0
  95. package/dist/composites/device-item/children-accordion.d.ts +1 -1
  96. package/dist/composites/device-item/container-children-context.d.ts +15 -0
  97. package/dist/composites/device-item/device-delete-action.d.ts +8 -0
  98. package/dist/composites/device-item/header.d.ts +8 -1
  99. package/dist/composites/device-item/helpers.d.ts +108 -2
  100. package/dist/composites/device-item/index.d.ts +4 -0
  101. package/dist/composites/device-item/preview.d.ts +3 -3
  102. package/dist/composites/device-item/reboot-quick-action.d.ts +9 -0
  103. package/dist/composites/device-item/status-dot.d.ts +4 -1
  104. package/dist/composites/device-list/batch-actions-bar.d.ts +15 -0
  105. package/dist/composites/device-list/batch-toolbar.d.ts +15 -0
  106. package/dist/composites/device-list/cards-layout.d.ts +18 -0
  107. package/dist/composites/device-list/columns.d.ts +68 -0
  108. package/dist/composites/device-list/device-mode.d.ts +115 -0
  109. package/dist/composites/device-list/filter-chips.d.ts +15 -6
  110. package/dist/composites/device-list/fuzzy-match.d.ts +27 -0
  111. package/dist/composites/device-list/generic-mode.d.ts +81 -0
  112. package/dist/composites/device-list/group.d.ts +19 -0
  113. package/dist/composites/device-list/hardware-cell.d.ts +7 -0
  114. package/dist/composites/device-list/hardware.d.ts +26 -0
  115. package/dist/composites/device-list/icon-action.d.ts +17 -0
  116. package/dist/composites/device-list/index.d.ts +23 -39
  117. package/dist/composites/device-list/multi-select.d.ts +22 -0
  118. package/dist/composites/device-list/sort.d.ts +18 -0
  119. package/dist/composites/device-list/sortable-header.d.ts +10 -0
  120. package/dist/composites/device-list/table-layout.d.ts +25 -0
  121. package/dist/composites/device-list/type-filter.d.ts +19 -0
  122. package/dist/composites/device-list/url-state.d.ts +7 -2
  123. package/dist/composites/device-meta.d.ts +38 -0
  124. package/dist/composites/discovery-panel.d.ts +4 -4
  125. package/dist/composites/doorbell-recent-panel.d.ts +1 -1
  126. package/dist/composites/empty-state.d.ts +1 -1
  127. package/dist/composites/error-box.d.ts +1 -1
  128. package/dist/composites/event-stream.d.ts +2 -2
  129. package/dist/composites/filter-bar.d.ts +1 -1
  130. package/dist/composites/form-field.d.ts +1 -1
  131. package/dist/composites/hls-quality.d.ts +35 -0
  132. package/dist/composites/hls-video.d.ts +26 -0
  133. package/dist/composites/hover-zoom-image.d.ts +18 -0
  134. package/dist/composites/image-selector.d.ts +1 -1
  135. package/dist/composites/index.d.ts +15 -4
  136. package/dist/composites/inference-config-selector.d.ts +1 -1
  137. package/dist/composites/kebab-menu.d.ts +1 -1
  138. package/dist/composites/key-value-list.d.ts +1 -1
  139. package/dist/composites/log-stream-scroll.d.ts +32 -0
  140. package/dist/composites/log-stream.d.ts +9 -2
  141. package/dist/composites/login-form.d.ts +1 -1
  142. package/dist/composites/node-picker.d.ts +1 -1
  143. package/dist/composites/page-header.d.ts +1 -1
  144. package/dist/composites/phase-icon.d.ts +1 -1
  145. package/dist/composites/pipeline-builder.d.ts +1 -1
  146. package/dist/composites/pipeline-runtime-selector.d.ts +1 -1
  147. package/dist/composites/pipeline-step.d.ts +3 -3
  148. package/dist/composites/pipeline-tree-matrix.d.ts +1 -1
  149. package/dist/composites/provider-badge.d.ts +1 -1
  150. package/dist/composites/ptz-overlay.d.ts +1 -1
  151. package/dist/composites/qr-code.d.ts +1 -1
  152. package/dist/composites/response-log.d.ts +1 -1
  153. package/dist/composites/scope-picker.d.ts +1 -1
  154. package/dist/composites/slide-over-panel.d.ts +1 -1
  155. package/dist/composites/snapshot-button.d.ts +1 -1
  156. package/dist/composites/stat-card.d.ts +1 -1
  157. package/dist/composites/state-values-stream.d.ts +1 -1
  158. package/dist/composites/status-badge.d.ts +1 -1
  159. package/dist/composites/step-timings.d.ts +1 -1
  160. package/dist/composites/step-tree-master.d.ts +1 -1
  161. package/dist/composites/stream-panel.d.ts +45 -10
  162. package/dist/composites/timezone-selector.d.ts +18 -0
  163. package/dist/composites/version-badge.d.ts +2 -2
  164. package/dist/composites/widget-panel.d.ts +28 -0
  165. package/dist/contexts/custom-field-renderers.d.ts +1 -1
  166. package/dist/contexts/device-context.d.ts +1 -1
  167. package/dist/contexts/player-overlays.d.ts +1 -1
  168. package/dist/contexts/system-context.d.ts +1 -1
  169. package/dist/contexts/vod-playback.d.ts +17 -0
  170. package/dist/contexts/widget-registry.d.ts +1 -1
  171. package/dist/contexts/zone-editing.d.ts +1 -1
  172. package/dist/generated/system-hooks.d.ts +386 -56
  173. package/dist/hooks/index.d.ts +8 -2
  174. package/dist/hooks/use-device-cap-slice.d.ts +19 -0
  175. package/dist/hooks/use-device-capability.d.ts +12 -0
  176. package/dist/hooks/use-device-list-page-size.d.ts +14 -0
  177. package/dist/hooks/use-device-webrtc.d.ts +36 -4
  178. package/dist/hooks/use-optimistic-slice.d.ts +11 -0
  179. package/dist/index.cjs +54834 -11195
  180. package/dist/index.d.ts +1 -0
  181. package/dist/index.js +54483 -11136
  182. package/dist/lib/format-control-datetime.d.ts +18 -0
  183. package/dist/lib/format-last-seen.d.ts +12 -0
  184. package/dist/lib/format-numeric.d.ts +9 -0
  185. package/dist/lib/index.d.ts +3 -0
  186. package/dist/primitives/bottom-sheet.d.ts +1 -1
  187. package/dist/primitives/collapsible-card.d.ts +1 -1
  188. package/dist/primitives/dialog.d.ts +19 -6
  189. package/dist/primitives/dropdown.d.ts +3 -3
  190. package/dist/primitives/floating-panel.d.ts +1 -1
  191. package/dist/primitives/mobile-drawer.d.ts +1 -1
  192. package/dist/primitives/popover.d.ts +3 -3
  193. package/dist/primitives/tabs.d.ts +4 -4
  194. package/dist/primitives/tooltip.d.ts +11 -5
  195. package/dist/theme/index.cjs +0 -3
  196. package/dist/theme/index.js +0 -2
  197. package/dist/theme/theme-provider.d.ts +1 -1
  198. package/package.json +13 -5
  199. package/dist/index.cjs.map +0 -1
  200. package/dist/index.js.map +0 -1
  201. package/dist/theme/index.cjs.map +0 -1
  202. package/dist/theme/index.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ import { ComponentType, ReactNode } from 'react';
2
+ export interface IconActionProps {
3
+ /** Lucide icon component (or any component accepting `className?: string`). */
4
+ readonly icon: ComponentType<{
5
+ className?: string;
6
+ }>;
7
+ /** Human-readable label — exposed via aria-label + title, NOT as visible text. */
8
+ readonly label: string;
9
+ /** Click handler. */
10
+ readonly onClick: () => void;
11
+ /**
12
+ * When true, applies a red/destructive accent to the button. Use for Delete
13
+ * and other irreversible actions — Delete keeps red even icon-only.
14
+ */
15
+ readonly danger?: boolean;
16
+ }
17
+ export declare function IconAction({ icon: Icon, label, onClick, danger, }: IconActionProps): ReactNode;
@@ -1,40 +1,24 @@
1
1
  import { ReactNode } from 'react';
2
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
3
- import { DeviceItemDevice, DeviceItemParent } from '../device-item/helpers';
4
- import { DeviceListView } from './url-state';
5
- export interface DeviceListAddonOption {
6
- readonly id: string;
7
- readonly name: string;
8
- readonly icon?: ReactNode;
9
- }
10
- export interface DeviceListProps {
11
- readonly devices: readonly DeviceItemDevice[];
12
- readonly trpc: UseDeviceProxyTrpc;
13
- readonly defaultView?: DeviceListView;
14
- readonly filters?: {
15
- readonly types?: readonly string[];
16
- readonly addons?: readonly DeviceListAddonOption[];
17
- };
18
- /** Pre-applied addon filter hides the addon-chip group. */
19
- readonly forceAddon?: string;
20
- readonly resolveIntegrationIcon?: (addonId: string) => ReactNode | null;
21
- readonly resolveParent?: (parentId: number) => DeviceItemParent | null;
22
- readonly onNavigate?: (deviceId: number) => void;
23
- readonly pageSize?: {
24
- readonly cards: number;
25
- readonly table: number;
26
- };
27
- readonly urlScope?: 'root' | 'nested';
28
- /** LocalStorage key prefix. Default 'devices' for root scope, 'integrations:nested' for nested. */
29
- readonly lsKey?: string;
30
- /**
31
- * Optional trailing per-row control rendered beside each row's
32
- * built-in actions (both card + table views, top-level rows only —
33
- * accessory sub-rows are excluded). Threaded straight through to
34
- * `<DeviceItem renderRowAction>`. Omitted ⇒ every current call site
35
- * (Devices, IntegrationDetail, Integrations nested) renders unchanged.
36
- * Used by `<DeviceExportPanel>` to surface a per-device Expose toggle.
37
- */
38
- readonly renderRowAction?: (device: DeviceItemDevice) => ReactNode;
39
- }
40
- export declare function DeviceList(props: DeviceListProps): ReactNode;
2
+ import { DeviceListDeviceProps } from './device-mode';
3
+ import { DeviceListGenericProps } from './generic-mode';
4
+ export { countableDevices } from './group';
5
+ export { fuzzyMatch, normalizeForSearch } from './fuzzy-match';
6
+ export { DEVICE_COLUMNS, columnsForContext, COLUMN_PRIORITY, COLUMN_BREAKPOINT_CLASS, } from './columns';
7
+ export type { DeviceColumnId, TableContext } from './columns';
8
+ export { nextSort, sortRows } from './sort';
9
+ export type { DeviceSort, SortDirection, SortableColumnId } from './sort';
10
+ export { hardwareLabel, metadataEntries, metadataString } from './hardware';
11
+ export { IconAction, type IconActionProps } from './icon-action';
12
+ export type { DeviceListAddonOption, DeviceListDeviceProps, DeviceListBatchActions, } from './device-mode';
13
+ export type { DeviceListColumn, DeviceListGenericProps } from './generic-mode';
14
+ /**
15
+ * Default registry-device list, or a generic render-prop list (`mode:'generic'`).
16
+ * Existing call sites pass no `mode` and resolve to the device variant unchanged.
17
+ */
18
+ export type DeviceListProps<T = unknown> = DeviceListDeviceProps | DeviceListGenericProps<T>;
19
+ /**
20
+ * Dispatcher: default registry-device list, or a generic render-prop list when
21
+ * `mode:'generic'`. The two paths are separate component instances so their
22
+ * hooks never interleave (a given call site's mode is stable).
23
+ */
24
+ export declare function DeviceList<T = unknown>(props: DeviceListProps<T>): ReactNode;
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from 'react';
2
+ import { LucideIcon } from 'lucide-react';
3
+ export interface MultiSelectOption {
4
+ readonly id: string;
5
+ readonly label: string;
6
+ readonly icon?: LucideIcon;
7
+ }
8
+ export interface MultiSelectDropdownProps {
9
+ /** Trigger label, e.g. "Type". A count badge is appended when items are selected. */
10
+ readonly label: string;
11
+ readonly options: readonly MultiSelectOption[];
12
+ readonly selected: readonly string[];
13
+ readonly onChange: (selected: readonly string[]) => void;
14
+ }
15
+ /**
16
+ * Compact multi-select dropdown — a single chip-sized trigger ("Label · N")
17
+ * that opens a checklist. Self-contained (outside-click / Escape dismiss), so
18
+ * it stays compressed regardless of how many options exist or how little
19
+ * horizontal room the container has. Shared by the device list's generic-mode
20
+ * type filter and any other multi-select needs.
21
+ */
22
+ export declare function MultiSelectDropdown({ label, options, selected, onChange, }: MultiSelectDropdownProps): ReactNode;
@@ -0,0 +1,18 @@
1
+ import { DeviceItemDevice } from '../device-item/helpers';
2
+ /** Columns that expose a clickable sort header. */
3
+ export type SortableColumnId = 'name' | 'type' | 'manufacturer';
4
+ export type SortDirection = 'asc' | 'desc';
5
+ export interface DeviceSort {
6
+ readonly columnId: SortableColumnId;
7
+ readonly dir: SortDirection;
8
+ }
9
+ /**
10
+ * Toggle a column's sort on header click: none → asc → desc → none.
11
+ * Clicking a DIFFERENT column starts it fresh at `asc`.
12
+ */
13
+ export declare function nextSort(current: DeviceSort | null, columnId: SortableColumnId): DeviceSort | null;
14
+ /**
15
+ * Return a NEW array of the top-level rows in sorted order. `null` ⇒ a fresh
16
+ * copy in the original order. Stable + immutable; the input is never mutated.
17
+ */
18
+ export declare function sortRows(rows: readonly DeviceItemDevice[], sort: DeviceSort | null): readonly DeviceItemDevice[];
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeviceSort, SortableColumnId } from './sort';
3
+ interface SortableHeaderButtonProps {
4
+ readonly columnId: SortableColumnId;
5
+ readonly label: string;
6
+ readonly sort: DeviceSort | null;
7
+ readonly onSort: (columnId: SortableColumnId) => void;
8
+ }
9
+ export declare function SortableHeaderButton({ columnId, label, sort, onSort, }: SortableHeaderButtonProps): ReactNode;
10
+ export {};
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeviceItemDevice } from '../device-item/helpers';
3
+ import { CardsLayoutProps } from './cards-layout';
4
+ import { DeviceColumnId } from './columns';
5
+ import { DeviceSort, SortableColumnId } from './sort';
6
+ interface TableLayoutProps extends CardsLayoutProps {
7
+ /** Built-in confirmed delete (table feature). Null ⇒ no trash. Only
8
+ * top-level rows carry it (accessory sub-rows are excluded — same gate
9
+ * as `renderRowAction`). */
10
+ readonly onDeleteDevice: ((device: DeviceItemDevice) => void) | null;
11
+ readonly autoExpandedParents: ReadonlySet<number>;
12
+ /** Full unfiltered device list — used to resolve parent.type for the
13
+ * adopted-row indent. We can't rely on `resolveParent` returning the
14
+ * parent's type (callers historically only project id+name). */
15
+ readonly devices: readonly DeviceItemDevice[];
16
+ /** Context-selected columns to render (header + cells). `name` always on. */
17
+ readonly visibleColumns: readonly DeviceColumnId[];
18
+ /** Active sort (top-level rows), or `null` for the default incoming order.
19
+ * Owned by the device-mode wrapper so the sort applies before pagination. */
20
+ readonly sort: DeviceSort | null;
21
+ /** Header-click handler — toggles the column's sort (asc→desc→none). */
22
+ readonly onSort: (columnId: SortableColumnId) => void;
23
+ }
24
+ export declare function TableLayout({ rows, accessoriesByParent, autoExpandedParents, devices, visibleColumns, trpc, resolveIntegrationIcon, resolveParent, onNavigate, renderRowAction, onDeleteDevice, selectable, rowClickSelects, activeSelected, onToggleSelection, sort, onSort, }: TableLayoutProps): ReactNode;
25
+ export {};
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from 'react';
2
+ import { MultiSelectOption } from './multi-select';
3
+ export interface ResponsiveTypeFilterProps {
4
+ readonly label: string;
5
+ readonly options: readonly MultiSelectOption[];
6
+ readonly selected: readonly string[];
7
+ readonly onChange: (selected: readonly string[]) => void;
8
+ }
9
+ /**
10
+ * Shared, multi-select type filter that adapts to its OWN available width
11
+ * (measured via ResizeObserver, NOT the viewport — the adoption modal and the
12
+ * Devices page differ at the same screen size):
13
+ * - wide enough → inline toggle chips (Devices page stays chips)
14
+ * - too narrow → the compact <MultiSelectDropdown> (adoption modal collapses)
15
+ *
16
+ * One component for every list consumer, so the filter looks and behaves the
17
+ * same everywhere and only the FORM changes with available room.
18
+ */
19
+ export declare function ResponsiveTypeFilter({ label, options, selected, onChange, }: ResponsiveTypeFilterProps): ReactNode;
@@ -8,7 +8,12 @@ export interface DeviceListUrlState {
8
8
  * comma-joined `addon` value so existing single-value links keep working.
9
9
  */
10
10
  readonly addons: readonly string[];
11
- readonly type: string | null;
11
+ /**
12
+ * Selected device types. Multi-select: empty array = no type filter.
13
+ * Serialised in the URL / localStorage as a single comma-joined `type`
14
+ * value so existing single-value links keep working.
15
+ */
16
+ readonly types: readonly string[];
12
17
  readonly q: string;
13
18
  }
14
19
  export interface UseDeviceListUrlStateOptions {
@@ -22,7 +27,7 @@ export interface UseDeviceListUrlStateResult {
22
27
  readonly setView: (view: DeviceListView) => void;
23
28
  readonly setPage: (page: number) => void;
24
29
  readonly setAddons: (addons: readonly string[]) => void;
25
- readonly setType: (type: string | null) => void;
30
+ readonly setTypes: (types: readonly string[]) => void;
26
31
  readonly setQ: (q: string) => void;
27
32
  readonly clearFilters: () => void;
28
33
  }
@@ -0,0 +1,38 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+ import { DeviceType, DeviceRole } from '@camstack/types';
3
+ import { MultiSelectOption } from './device-list/multi-select';
4
+ /**
5
+ * Single source of truth for rendering a device TYPE or ROLE: its icon + label.
6
+ *
7
+ * Both maps are `Record<DeviceType | DeviceRole, …>`, so adding a new enum
8
+ * member makes the object literal incomplete and the build FAILS until the new
9
+ * type/role is given an icon + label here. That is the whole point — UI never
10
+ * silently falls back to a generic glyph for a freshly-added type/role.
11
+ *
12
+ * Lives in `@camstack/ui-library` because the icons are `lucide-react`
13
+ * components; the labels are the user-facing defaults (wire i18n at the call
14
+ * site if a translation is needed).
15
+ */
16
+ export interface DeviceTypeMeta {
17
+ readonly icon: LucideIcon;
18
+ readonly label: string;
19
+ }
20
+ export interface DeviceRoleMeta {
21
+ readonly icon: LucideIcon;
22
+ readonly label: string;
23
+ }
24
+ export declare const DEVICE_TYPE_META: Record<DeviceType, DeviceTypeMeta>;
25
+ export declare const DEVICE_ROLE_META: Record<DeviceRole, DeviceRoleMeta>;
26
+ /** Meta for a known `DeviceType`. */
27
+ export declare function deviceTypeMeta(type: DeviceType): DeviceTypeMeta;
28
+ /** Meta for a known `DeviceRole`. */
29
+ export declare function deviceRoleMeta(role: DeviceRole): DeviceRoleMeta;
30
+ /**
31
+ * Runtime-string-safe lookup: device data crosses process / network boundaries
32
+ * as plain strings, so an unrecognised value falls back to the `Generic` meta
33
+ * instead of throwing.
34
+ */
35
+ export declare function deviceTypeMetaOf(type: string): DeviceTypeMeta;
36
+ /** Runtime-string-safe role lookup; unknown roles fall back to `GenericSensor`. */
37
+ export declare function deviceRoleMetaOf(role: string): DeviceRoleMeta;
38
+ export declare function allDeviceTypeFilterOptions(): readonly MultiSelectOption[];
@@ -6,9 +6,9 @@
6
6
  * renders the channel list with status badges, refresh, adopt, and
7
7
  * release controls.
8
8
  *
9
- * Mirrors the Scrypted device-discovery affordance pattern: a single
10
- * generic UI used by every plugin that exposes children behind a
11
- * gateway. Keeps the operator UX consistent across integrations.
9
+ * A single generic UI used by every provider that exposes children
10
+ * behind a gateway. Keeps the operator UX consistent across
11
+ * integrations.
12
12
  */
13
13
  interface DiscoveryPanelProps {
14
14
  readonly deviceId: number;
@@ -22,5 +22,5 @@ interface DiscoveryPanelProps {
22
22
  */
23
23
  readonly onOpenChild?: (childDeviceId: number) => void;
24
24
  }
25
- export declare function DiscoveryPanel({ deviceId, className, onOpenChild }: DiscoveryPanelProps): React.ReactElement;
25
+ export declare function DiscoveryPanel({ deviceId, className, onOpenChild, }: DiscoveryPanelProps): React.ReactElement;
26
26
  export {};
@@ -7,4 +7,4 @@ export interface DoorbellRecentPanelProps {
7
7
  readonly latestIsFresh?: boolean;
8
8
  readonly className?: string;
9
9
  }
10
- export declare function DoorbellRecentPanel({ history, limit, latestIsFresh, className, }: DoorbellRecentPanelProps): import("react/jsx-runtime").JSX.Element | null;
10
+ export declare function DoorbellRecentPanel({ history, limit, latestIsFresh, className, }: DoorbellRecentPanelProps): import("react").JSX.Element | null;
@@ -7,4 +7,4 @@ export interface EmptyStateProps {
7
7
  action?: ReactNode;
8
8
  className?: string;
9
9
  }
10
- export declare function EmptyState({ icon: Icon, title, description, action, className, }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function EmptyState({ icon: Icon, title, description, action, className }: EmptyStateProps): import("react").JSX.Element;
@@ -16,4 +16,4 @@ export interface ErrorBoxProps {
16
16
  variant?: ErrorBoxVariant;
17
17
  className?: string;
18
18
  }
19
- export declare function ErrorBox({ message, title, onRetry, action, variant, className, }: ErrorBoxProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function ErrorBox({ message, title, onRetry, action, variant, className, }: ErrorBoxProps): import("react").JSX.Element;
@@ -40,9 +40,9 @@ export interface EventStreamProps {
40
40
  readonly onClose?: () => void;
41
41
  readonly className?: string;
42
42
  }
43
- export declare function EventStream({ agentId, addonId, deviceId, defaultCategories, categories: legacyCategories, category: propsCategory, maxHeight, limit, showCategoryFilter, showFilters: _showFilters, liveBuffer: externalBuffer, onClose, className, }: EventStreamProps): import("react/jsx-runtime").JSX.Element;
43
+ export declare function EventStream({ agentId, addonId, deviceId, defaultCategories, categories: legacyCategories, category: propsCategory, maxHeight, limit, showCategoryFilter, showFilters: _showFilters, liveBuffer: externalBuffer, onClose, className, }: EventStreamProps): import("react").JSX.Element;
44
44
  export interface FloatingEventStreamProps extends EventStreamProps {
45
45
  readonly position?: 'bottom' | 'overlay';
46
46
  }
47
- export declare function FloatingEventStream({ position, className, ...props }: FloatingEventStreamProps): import("react/jsx-runtime").JSX.Element;
47
+ export declare function FloatingEventStream({ position, className, ...props }: FloatingEventStreamProps): import("react").JSX.Element;
48
48
  export {};
@@ -25,4 +25,4 @@ export interface FilterBarProps {
25
25
  onChange: (values: Record<string, unknown>) => void;
26
26
  className?: string;
27
27
  }
28
- export declare function FilterBar({ filters, values, onChange, className }: FilterBarProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function FilterBar({ filters, values, onChange, className }: FilterBarProps): import("react").JSX.Element;
@@ -8,4 +8,4 @@ export interface FormFieldProps {
8
8
  orientation?: 'vertical' | 'horizontal';
9
9
  className?: string;
10
10
  }
11
- export declare function FormField({ label, description, error, required, children, orientation, className, }: FormFieldProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function FormField({ label, description, error, required, children, orientation, className, }: FormFieldProps): import("react").JSX.Element;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Pure helpers for the HLS playback quality selector.
3
+ *
4
+ * Intentionally decoupled from hls.js types so this module can be
5
+ * imported and tested without a DOM or MSE environment.
6
+ */
7
+ export interface QualityOption {
8
+ readonly value: number;
9
+ readonly label: string;
10
+ }
11
+ export interface HlsLevelInfo {
12
+ readonly height?: number;
13
+ readonly bitrate?: number;
14
+ readonly name?: string;
15
+ }
16
+ /**
17
+ * Build a human-readable label for a single HLS level.
18
+ *
19
+ * Priority:
20
+ * 1. `name` (non-empty) → verbatim. The recorder stamps the master variant
21
+ * NAME with the recording profile (high/mid/low), and the VOD selector must
22
+ * match the live stream-profile selector's labels — the profile name wins
23
+ * over resolution/bitrate.
24
+ * 2. `height` (> 0) → e.g. "1080p"
25
+ * 3. `bitrate` (> 0) → e.g. "2500 kbps"
26
+ * 4. Fallback → "Level N" (1-based)
27
+ */
28
+ export declare function levelLabel(level: HlsLevelInfo, index: number): string;
29
+ /**
30
+ * Build the full list of quality options for the selector overlay.
31
+ *
32
+ * Always starts with the Auto entry (`value: -1`), followed by one
33
+ * entry per available HLS level in manifest order.
34
+ */
35
+ export declare function qualityOptions(levels: readonly HlsLevelInfo[]): QualityOption[];
@@ -0,0 +1,26 @@
1
+ import { QualityOption } from './hls-quality';
2
+ export interface HlsVideoProps {
3
+ /** Master `.m3u8` URL (typically relative, through the hub data-plane). */
4
+ readonly url: string;
5
+ /** Bearer token for the admin-gated data-plane route (optional). */
6
+ readonly authToken?: string | null;
7
+ /** Poster painted until the first frame decodes (optional). */
8
+ readonly posterUrl?: string;
9
+ /** Auto-play once the manifest is parsed (default: true). */
10
+ readonly autoPlay?: boolean;
11
+ readonly className?: string;
12
+ /**
13
+ * Called on MANIFEST_PARSED (and reset to `[]` on a new URL) with the
14
+ * full list of quality options (`qualityOptions(hls.levels)`). The caller
15
+ * renders the selector; this component owns only the hls instance.
16
+ * Emits `[]` when the manifest has ≤1 real level (no selector needed).
17
+ */
18
+ readonly onQualityOptions?: (options: readonly QualityOption[]) => void;
19
+ /**
20
+ * The level index to apply to `hls.currentLevel`. `-1` = Auto/ABR
21
+ * (default). When this prop changes, the component sets `hls.currentLevel`
22
+ * immediately. Has no effect in the native HLS fallback path.
23
+ */
24
+ readonly selectedLevel?: number;
25
+ }
26
+ export declare function HlsVideo({ url, authToken, posterUrl, autoPlay, className, onQualityOptions, selectedLevel, }: HlsVideoProps): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { ReactNode } from 'react';
2
+ export interface HoverZoomImageProps {
3
+ /** Image URL (signed url for Image entities; snapshot object url for cameras). Null → placeholder. */
4
+ readonly src: string | null;
5
+ /** Accessible alt / default preview caption (e.g. the device name). */
6
+ readonly alt: string;
7
+ /** Optional small label under the enlarged preview. Defaults to `alt`. */
8
+ readonly caption?: string;
9
+ /** Text shown in the enlarged preview (and implied by the thumbnail's empty state) when there is no image. */
10
+ readonly placeholder?: string;
11
+ /** Sizing override for the thumbnail box. Defaults to a compact `h-7 w-7 rounded`. */
12
+ readonly thumbClassName?: string;
13
+ /** Enlarged-preview width in px. */
14
+ readonly expandedWidth?: number;
15
+ /** Enlarged-preview height in px (drives the flip-on-collision math). */
16
+ readonly expandedHeight?: number;
17
+ }
18
+ export declare function HoverZoomImage({ src, alt, caption, placeholder, thumbClassName, expandedWidth, expandedHeight, }: HoverZoomImageProps): ReactNode;
@@ -22,4 +22,4 @@ export interface ImageSelectorProps {
22
22
  /** Override the upload button label. Default: `Upload...`. */
23
23
  readonly uploadLabel?: string;
24
24
  }
25
- export declare function ImageSelector({ images, selectedFilename, uploadedName, onSelect, onUpload, className, accept, uploadLabel, }: ImageSelectorProps): import("react/jsx-runtime").JSX.Element;
25
+ export declare function ImageSelector({ images, selectedFilename, uploadedName, onSelect, onUpload, className, accept, uploadLabel, }: ImageSelectorProps): import("react").JSX.Element;
@@ -29,6 +29,10 @@ export * from './device-card';
29
29
  export * from './device-grid';
30
30
  export * from './device-item';
31
31
  export * from './device-list';
32
+ export { DeviceBatchToolbar } from './device-list/batch-toolbar';
33
+ export type { DeviceBatchToolbarProps } from './device-list/batch-toolbar';
34
+ export * from './device-meta';
35
+ export * from './device-controls';
32
36
  export { PipelineStep, ConfigSchemaField } from './pipeline-step';
33
37
  export type { PipelineStepDisplayConfig, PipelineStepProps } from './pipeline-step';
34
38
  export { PipelineRuntimeSelector } from './pipeline-runtime-selector';
@@ -45,21 +49,25 @@ export type { StepTimingsProps } from './step-timings';
45
49
  export { ImageSelector } from './image-selector';
46
50
  export type { ImageSelectorProps, ReferenceImage } from './image-selector';
47
51
  export { InferenceConfigSelector } from './inference-config-selector';
48
- export type { InferenceConfigSelectorProps, InferenceBackendOption, InferenceModelOption, InferenceAgentOption } from './inference-config-selector';
52
+ export type { InferenceConfigSelectorProps, InferenceBackendOption, InferenceModelOption, InferenceAgentOption, } from './inference-config-selector';
49
53
  export type { AddonPageProps } from './addon-page-props';
50
54
  export { mountAddonPage } from './mount-addon-page';
51
55
  export type { MountAddonPageOptions } from './mount-addon-page';
52
56
  export { ConfigFormBuilder } from './config-form-builder';
53
57
  export type { TranslationFn } from './config-form-builder';
54
- export { ConfigFormField, NodeSelectField, NodeMultiSelectField, isFieldVisible } from './config-form-field';
58
+ export { ConfigFormField, NodeSelectField, NodeMultiSelectField, isFieldVisible, } from './config-form-field';
59
+ export { TimezoneSelector, TIMEZONES, findTimezone } from './timezone-selector';
60
+ export type { TimezoneSelectorProps, Timezone, TimezoneDstRule, Weekday } from './timezone-selector';
55
61
  export { AddonGlobalSettingsForm } from './addon-global-settings-form';
56
62
  export type { ProbeState } from './config-form-field';
57
63
  export { DetectionOverlay } from './detection-overlay';
58
64
  export type { DetectionOverlayProps } from './detection-overlay';
59
65
  export { CameraStreamPlayer } from './camera-stream-player';
60
- export type { CameraStreamPlayerProps, PlayerConnectionState, SignalingResult, ClientStreamHints } from './camera-stream-player';
66
+ export type { CameraStreamPlayerProps, PlayerConnectionState, PlayerWebrtcTarget, SignalingResult, ClientOfferResult, ClientStreamHints, SessionSignalingState, } from './camera-stream-player';
61
67
  export { StreamPanel } from './stream-panel';
62
68
  export type { StreamPanelProps, StreamChoice, StreamStats } from './stream-panel';
69
+ export { HlsVideo } from './hls-video';
70
+ export type { HlsVideoProps } from './hls-video';
63
71
  export { StreamBrokerSelector } from './stream-broker-selector';
64
72
  export type { StreamBrokerSelectorProps } from './stream-broker-selector';
65
73
  export { DeviceExportPanel } from './device-export-panel';
@@ -97,6 +105,8 @@ export { PTZOverlay } from './ptz-overlay';
97
105
  export type { PTZOverlayProps } from './ptz-overlay';
98
106
  export { BatteryBadge } from './battery-badge';
99
107
  export type { BatteryBadgeProps, BatteryStatusLike } from './battery-badge';
108
+ export { HoverZoomImage } from './hover-zoom-image';
109
+ export type { HoverZoomImageProps } from './hover-zoom-image';
100
110
  export { SnapshotButton } from './snapshot-button';
101
111
  export type { SnapshotButtonProps, SnapshotButtonTrpc } from './snapshot-button';
102
112
  export { DoorbellRecentPanel } from './doorbell-recent-panel';
@@ -108,5 +118,6 @@ export { WidgetSlot } from './widget-slot';
108
118
  export type { WidgetSlotProps } from './widget-slot';
109
119
  export { ScopePicker, validateScopes } from './scope-picker';
110
120
  export type { ScopeAccess } from './scope-picker';
111
- export { PtzPanel, AutotrackSection, MotionZonesSettings, MaskShapeCanvas } from './cap-settings';
121
+ export { PtzPanel, ConsumablesPanel, AutotrackSection, MotionZonesSettings, MaskShapeCanvas, RecordingPanel, } from './cap-settings';
112
122
  export type { CapSettingsComponentProps, MaskShapeItem, MaskShapeCanvasProps } from './cap-settings';
123
+ export * from './widget-panel.js';
@@ -41,4 +41,4 @@ export interface InferenceConfigSelectorProps {
41
41
  /** Show agent selector (default: false) */
42
42
  readonly showAgent?: boolean;
43
43
  }
44
- export declare function InferenceConfigSelector({ runtime, backend, modelId, agentId, runtimes, backends, models, agents, onRuntimeChange, onBackendChange, onModelChange, onAgentChange, layout, className, showAgent, }: InferenceConfigSelectorProps): import("react/jsx-runtime").JSX.Element;
44
+ export declare function InferenceConfigSelector({ runtime, backend, modelId, agentId, runtimes, backends, models, agents, onRuntimeChange, onBackendChange, onModelChange, onAgentChange, layout, className, showAgent, }: InferenceConfigSelectorProps): import("react").JSX.Element;
@@ -36,4 +36,4 @@ export interface KebabMenuProps {
36
36
  /** Tooltip text on the trigger (defaults to "More actions"). */
37
37
  readonly title?: string;
38
38
  }
39
- export declare function KebabMenu({ items, header, triggerClassName, title }: KebabMenuProps): import("react/jsx-runtime").JSX.Element | null;
39
+ export declare function KebabMenu({ items, header, triggerClassName, title, }: KebabMenuProps): import("react").JSX.Element | null;
@@ -6,4 +6,4 @@ export interface KeyValueListProps {
6
6
  }[];
7
7
  className?: string;
8
8
  }
9
- export declare function KeyValueList({ items, className }: KeyValueListProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function KeyValueList({ items, className }: KeyValueListProps): import("react").JSX.Element;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Pure scroll-geometry helpers for LogStream's follow-the-tail behaviour.
3
+ *
4
+ * Kept free of React/DOM lifecycle so the (subtle) "is the viewport pinned
5
+ * to the bottom?" decision is unit-testable in isolation. The component
6
+ * wires these into a `useLayoutEffect` (capture pinned-state BEFORE rows
7
+ * grow) + a user-scroll handler (re-pin when the operator returns to the
8
+ * bottom). See log-stream.tsx for the lifecycle.
9
+ */
10
+ /** Default distance (px) from the bottom within which we treat the
11
+ * viewport as "pinned". Generous enough to absorb sub-pixel rounding and
12
+ * the height of a partially-revealed last row, tight enough that a
13
+ * deliberate scroll-up of even one full row reads as "not pinned". */
14
+ export declare const PIN_THRESHOLD_PX = 40;
15
+ /** The slice of scroll geometry the pin decision needs. Matches the
16
+ * properties of an `HTMLElement` (`scrollTop` / `scrollHeight` /
17
+ * `clientHeight`) so callers can pass the element fields directly. */
18
+ export interface ScrollGeometry {
19
+ readonly scrollTop: number;
20
+ readonly scrollHeight: number;
21
+ readonly clientHeight: number;
22
+ }
23
+ /**
24
+ * True when the viewport is scrolled to (or within `threshold` px of) the
25
+ * bottom of its content.
26
+ *
27
+ * `scrollHeight - scrollTop - clientHeight` is the distance from the
28
+ * bottom: 0 when fully scrolled down, growing as the operator scrolls up.
29
+ * A `<=` comparison against the threshold means an exact-bottom geometry
30
+ * (distance 0) always counts as pinned even with a 0 threshold.
31
+ */
32
+ export declare function isPinnedToBottom(geometry: ScrollGeometry, threshold?: number): boolean;
@@ -14,6 +14,13 @@ export interface LogStreamProps {
14
14
  readonly addonId?: string;
15
15
  /** Lock to a specific device. When set, the device selector is hidden. */
16
16
  readonly deviceId?: number;
17
+ /**
18
+ * Lock to a container SUBTREE: filters by `containerDeviceId`, returning the
19
+ * container's own logs AND every accessory child's logs in one view (each
20
+ * child stamps its parent's id; a container stamps its own). Pass this
21
+ * INSTEAD of `deviceId` for a container's Logs tab.
22
+ */
23
+ readonly containerDeviceId?: number;
17
24
  /**
18
25
  * Lock to a specific integration. Filter is ALWAYS applied when
19
26
  * provided — current providers don't yet tag loggers with
@@ -52,10 +59,10 @@ export interface LogStreamProps {
52
59
  readonly onClose?: () => void;
53
60
  readonly className?: string;
54
61
  }
55
- export declare function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: propsDeviceId, integrationId: propsIntegrationId, requestId: propsRequestId, level: initialLevel, maxHeight, showScope, showFilters, limit, liveBuffer: externalBuffer, onClose, className, }: LogStreamProps): import("react/jsx-runtime").JSX.Element;
62
+ export declare function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: propsDeviceId, containerDeviceId: propsContainerDeviceId, integrationId: propsIntegrationId, requestId: propsRequestId, level: initialLevel, maxHeight, showScope, showFilters, limit, liveBuffer: externalBuffer, onClose, className, }: LogStreamProps): import("react").JSX.Element;
56
63
  export interface FloatingLogStreamProps extends LogStreamProps {
57
64
  /** Position: 'bottom' anchors to parent bottom, 'overlay' is absolute positioned. */
58
65
  readonly position?: 'bottom' | 'overlay';
59
66
  }
60
- export declare function FloatingLogStream({ position, className, ...props }: FloatingLogStreamProps): import("react/jsx-runtime").JSX.Element;
67
+ export declare function FloatingLogStream({ position, className, ...props }: FloatingLogStreamProps): import("react").JSX.Element;
61
68
  export {};
@@ -5,4 +5,4 @@ export interface LoginFormProps {
5
5
  error?: string;
6
6
  className?: string;
7
7
  }
8
- export declare function LoginForm({ onLogin, serverUrl, logoSrc, error: externalError, className, }: LoginFormProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function LoginForm({ onLogin, serverUrl, logoSrc, error: externalError, className, }: LoginFormProps): import("react").JSX.Element;
@@ -12,4 +12,4 @@ export interface NodePickerProps {
12
12
  */
13
13
  readonly alwaysShow?: boolean;
14
14
  }
15
- export declare function NodePicker({ selectedNodeId, onSelect, label, hideIcon, alwaysShow, }: NodePickerProps): import("react/jsx-runtime").JSX.Element | null;
15
+ export declare function NodePicker({ selectedNodeId, onSelect, label, hideIcon, alwaysShow, }: NodePickerProps): import("react").JSX.Element | null;
@@ -5,4 +5,4 @@ export interface PageHeaderProps {
5
5
  actions?: ReactNode;
6
6
  className?: string;
7
7
  }
8
- export declare function PageHeader({ title, subtitle, actions, className }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function PageHeader({ title, subtitle, actions, className }: PageHeaderProps): import("react").JSX.Element;
@@ -2,4 +2,4 @@ import { LucideProps } from 'lucide-react';
2
2
  export interface PhaseIconProps extends LucideProps {
3
3
  readonly phase: string;
4
4
  }
5
- export declare function PhaseIcon({ phase, ...props }: PhaseIconProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function PhaseIcon({ phase, ...props }: PhaseIconProps): import("react").JSX.Element;
@@ -40,4 +40,4 @@ export interface PipelineBuilderProps {
40
40
  */
41
41
  readonly hideModelAndSettings?: boolean;
42
42
  }
43
- export declare function PipelineBuilder({ schema, steps, onChange, templates, selectedTemplateId, onSelectTemplate, onSaveTemplate, onUpdateTemplate, onDeleteTemplate, readOnly, excludeAddons, hideTemplates, showOnlyEnabled, showSlotLabels, toggleMode, overrides, onOverrideChange, inheritedEnabledByAddon, hideModelAndSettings, }: PipelineBuilderProps): import("react/jsx-runtime").JSX.Element;
43
+ export declare function PipelineBuilder({ schema, steps, onChange, templates, selectedTemplateId, onSelectTemplate, onSaveTemplate, onUpdateTemplate, onDeleteTemplate, readOnly, excludeAddons, hideTemplates, showOnlyEnabled, showSlotLabels, toggleMode, overrides, onOverrideChange, inheritedEnabledByAddon, hideModelAndSettings, }: PipelineBuilderProps): import("react").JSX.Element;
@@ -12,5 +12,5 @@ interface PipelineRuntimeSelectorProps {
12
12
  readonly value: string;
13
13
  readonly onChange: (value: string) => void;
14
14
  }
15
- export declare function PipelineRuntimeSelector({ options, value, onChange }: PipelineRuntimeSelectorProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function PipelineRuntimeSelector({ options, value, onChange, }: PipelineRuntimeSelectorProps): import("react").JSX.Element;
16
16
  export {};
@@ -55,11 +55,11 @@ export interface PipelineStepProps {
55
55
  */
56
56
  readonly hideModelAndSettings?: boolean;
57
57
  }
58
- export declare function PipelineStep({ step, schema, allSchemas: _allSchemas, depth: _depth, onChange, onDelete: _onDelete, readOnly, toggleMode, overrideState, onOverrideChange, inheritedEnabled, hideModelAndSettings, }: PipelineStepProps): import("react/jsx-runtime").JSX.Element;
59
- export declare function ConfigSchemaField({ field, allFields, step, disabled, onChange }: {
58
+ export declare function PipelineStep({ step, schema, allSchemas: _allSchemas, depth: _depth, onChange, onDelete: _onDelete, readOnly, toggleMode, overrideState, onOverrideChange, inheritedEnabled, hideModelAndSettings, }: PipelineStepProps): import("react").JSX.Element;
59
+ export declare function ConfigSchemaField({ field, allFields, step, disabled, onChange, }: {
60
60
  field: ConfigField;
61
61
  allFields: readonly ConfigField[];
62
62
  step: PipelineStepDisplayConfig;
63
63
  disabled: boolean;
64
64
  onChange: (updated: PipelineStepDisplayConfig) => void;
65
- }): import("react/jsx-runtime").JSX.Element | null;
65
+ }): import("react").JSX.Element | null;
@@ -28,4 +28,4 @@ export interface PipelineTreeMatrixProps {
28
28
  */
29
29
  readonly onToggleEnabled?: (addonId: string, next: boolean) => void;
30
30
  }
31
- export declare function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled, }: PipelineTreeMatrixProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled, }: PipelineTreeMatrixProps): import("react").JSX.Element;