@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.
- package/dist/composites/addon-global-settings-form.d.ts +1 -1
- package/dist/composites/agent-step-editor.d.ts +1 -1
- package/dist/composites/app-shell/app-shell.d.ts +1 -1
- package/dist/composites/app-shell/sidebar-item.d.ts +1 -1
- package/dist/composites/app-shell/sidebar.d.ts +1 -1
- package/dist/composites/audio-classification-list.d.ts +1 -1
- package/dist/composites/audio-level-waveform.d.ts +1 -1
- package/dist/composites/audio-waveform.d.ts +1 -1
- package/dist/composites/battery-badge.d.ts +4 -1
- package/dist/composites/breadcrumb.d.ts +2 -1
- package/dist/composites/camera-stream-player.d.ts +94 -2
- package/dist/composites/cap-settings/AutotrackSection.d.ts +1 -1
- package/dist/composites/cap-settings/ConsumablesPanel.d.ts +2 -0
- package/dist/composites/cap-settings/CoverageTrack.d.ts +12 -0
- package/dist/composites/cap-settings/EventBucketStrip.d.ts +25 -0
- package/dist/composites/cap-settings/EventHeatmap.d.ts +10 -0
- package/dist/composites/cap-settings/MaskShapeCanvas.d.ts +1 -1
- package/dist/composites/cap-settings/MotionZonesSettings.d.ts +1 -1
- package/dist/composites/cap-settings/PrivacyMaskSettings.d.ts +1 -1
- package/dist/composites/cap-settings/PtzPanel.d.ts +1 -1
- package/dist/composites/cap-settings/RecordingPanel.d.ts +2 -0
- package/dist/composites/cap-settings/RecordingRulesEditor.d.ts +7 -0
- package/dist/composites/cap-settings/RecordingSettings.d.ts +8 -0
- package/dist/composites/cap-settings/RecordingTimeline.d.ts +5 -0
- package/dist/composites/cap-settings/ScheduleBandsEditor.d.ts +7 -0
- package/dist/composites/cap-settings/TimelineControls.d.ts +21 -0
- package/dist/composites/cap-settings/event-thumb.d.ts +11 -0
- package/dist/composites/cap-settings/index.d.ts +4 -0
- package/dist/composites/cap-settings/recording-config-form.d.ts +34 -0
- package/dist/composites/cap-settings/recording-spans.d.ts +22 -0
- package/dist/composites/cap-settings/recording-timeline-model.d.ts +84 -0
- package/dist/composites/code-block.d.ts +1 -1
- package/dist/composites/config-form-builder.d.ts +1 -1
- package/dist/composites/config-form-field.d.ts +3 -3
- package/dist/composites/confirm-action-button.d.ts +1 -1
- package/dist/composites/confirm-dialog.d.ts +1 -1
- package/dist/composites/data-table/data-table-header.d.ts +1 -1
- package/dist/composites/data-table/data-table-pagination.d.ts +1 -1
- package/dist/composites/data-table/data-table-row.d.ts +1 -1
- package/dist/composites/data-table/data-table.d.ts +1 -1
- package/dist/composites/data-table.d.ts +1 -1
- package/dist/composites/detection-canvas.d.ts +1 -1
- package/dist/composites/detection-overlay.d.ts +1 -1
- package/dist/composites/detection-result-tree.d.ts +1 -1
- package/dist/composites/dev-shell.d.ts +1 -1
- package/dist/composites/device-activity-panel.d.ts +5 -1
- package/dist/composites/device-card.d.ts +1 -1
- package/dist/composites/device-controls/alarm-hero-card.d.ts +24 -0
- package/dist/composites/device-controls/atoms.d.ts +81 -0
- package/dist/composites/device-controls/brightness-panel.d.ts +3 -0
- package/dist/composites/device-controls/button-control.d.ts +18 -0
- package/dist/composites/device-controls/climate-panel.d.ts +16 -0
- package/dist/composites/device-controls/container-primary-hero.d.ts +24 -0
- package/dist/composites/device-controls/container-primary.d.ts +46 -0
- package/dist/composites/device-controls/control-panel.d.ts +10 -0
- package/dist/composites/device-controls/control-registry.d.ts +74 -0
- package/dist/composites/device-controls/cover-hero-card.d.ts +27 -0
- package/dist/composites/device-controls/cover-inline.d.ts +27 -0
- package/dist/composites/device-controls/cover-panel.d.ts +3 -0
- package/dist/composites/device-controls/dummy-hero-card.d.ts +6 -0
- package/dist/composites/device-controls/fan-hero-card.d.ts +21 -0
- package/dist/composites/device-controls/fan-panel.d.ts +3 -0
- package/dist/composites/device-controls/humidifier-control.d.ts +37 -0
- package/dist/composites/device-controls/image-control.d.ts +24 -0
- package/dist/composites/device-controls/index.d.ts +33 -0
- package/dist/composites/device-controls/lawn-mower-control.d.ts +24 -0
- package/dist/composites/device-controls/light-hero-card.d.ts +16 -0
- package/dist/composites/device-controls/lock-hero-card.d.ts +15 -0
- package/dist/composites/device-controls/lock-panel.d.ts +3 -0
- package/dist/composites/device-controls/media-player-hero-card.d.ts +17 -0
- package/dist/composites/device-controls/media-player-panel.d.ts +9 -0
- package/dist/composites/device-controls/offline-badge.d.ts +11 -0
- package/dist/composites/device-controls/panel-controls.d.ts +17 -0
- package/dist/composites/device-controls/popover-row-action.d.ts +9 -0
- package/dist/composites/device-controls/primary-child.d.ts +18 -0
- package/dist/composites/device-controls/radial-gauge.d.ts +20 -0
- package/dist/composites/device-controls/sensor-hero-card.d.ts +10 -0
- package/dist/composites/device-controls/sensor-inline-control.d.ts +11 -0
- package/dist/composites/device-controls/sensor-value-atom.d.ts +106 -0
- package/dist/composites/device-controls/switch-hero-card.d.ts +13 -0
- package/dist/composites/device-controls/switch-panel.d.ts +3 -0
- package/dist/composites/device-controls/tap-toggle.d.ts +17 -0
- package/dist/composites/device-controls/thermostat-hero-card.d.ts +17 -0
- package/dist/composites/device-controls/types.d.ts +17 -0
- package/dist/composites/device-controls/update-control.d.ts +11 -0
- package/dist/composites/device-controls/vacuum-control.d.ts +36 -0
- package/dist/composites/device-controls/valve-control.d.ts +46 -0
- package/dist/composites/device-controls/water-heater-control.d.ts +41 -0
- package/dist/composites/device-controls/weather-control.d.ts +41 -0
- package/dist/composites/device-export-panel.d.ts +1 -1
- package/dist/composites/device-grid.d.ts +1 -1
- package/dist/composites/device-item/actions.d.ts +12 -1
- package/dist/composites/device-item/child-layout.d.ts +32 -0
- package/dist/composites/device-item/child-section-accordion.d.ts +9 -0
- package/dist/composites/device-item/children-accordion.d.ts +1 -1
- package/dist/composites/device-item/container-children-context.d.ts +15 -0
- package/dist/composites/device-item/device-delete-action.d.ts +8 -0
- package/dist/composites/device-item/header.d.ts +8 -1
- package/dist/composites/device-item/helpers.d.ts +108 -2
- package/dist/composites/device-item/index.d.ts +4 -0
- package/dist/composites/device-item/preview.d.ts +3 -3
- package/dist/composites/device-item/reboot-quick-action.d.ts +9 -0
- package/dist/composites/device-item/status-dot.d.ts +4 -1
- package/dist/composites/device-list/batch-actions-bar.d.ts +15 -0
- package/dist/composites/device-list/batch-toolbar.d.ts +15 -0
- package/dist/composites/device-list/cards-layout.d.ts +18 -0
- package/dist/composites/device-list/columns.d.ts +68 -0
- package/dist/composites/device-list/device-mode.d.ts +115 -0
- package/dist/composites/device-list/filter-chips.d.ts +15 -6
- package/dist/composites/device-list/fuzzy-match.d.ts +27 -0
- package/dist/composites/device-list/generic-mode.d.ts +81 -0
- package/dist/composites/device-list/group.d.ts +19 -0
- package/dist/composites/device-list/hardware-cell.d.ts +7 -0
- package/dist/composites/device-list/hardware.d.ts +26 -0
- package/dist/composites/device-list/icon-action.d.ts +17 -0
- package/dist/composites/device-list/index.d.ts +23 -39
- package/dist/composites/device-list/multi-select.d.ts +22 -0
- package/dist/composites/device-list/sort.d.ts +18 -0
- package/dist/composites/device-list/sortable-header.d.ts +10 -0
- package/dist/composites/device-list/table-layout.d.ts +25 -0
- package/dist/composites/device-list/type-filter.d.ts +19 -0
- package/dist/composites/device-list/url-state.d.ts +7 -2
- package/dist/composites/device-meta.d.ts +38 -0
- package/dist/composites/discovery-panel.d.ts +4 -4
- package/dist/composites/doorbell-recent-panel.d.ts +1 -1
- package/dist/composites/empty-state.d.ts +1 -1
- package/dist/composites/error-box.d.ts +1 -1
- package/dist/composites/event-stream.d.ts +2 -2
- package/dist/composites/filter-bar.d.ts +1 -1
- package/dist/composites/form-field.d.ts +1 -1
- package/dist/composites/hls-quality.d.ts +35 -0
- package/dist/composites/hls-video.d.ts +26 -0
- package/dist/composites/hover-zoom-image.d.ts +18 -0
- package/dist/composites/image-selector.d.ts +1 -1
- package/dist/composites/index.d.ts +15 -4
- package/dist/composites/inference-config-selector.d.ts +1 -1
- package/dist/composites/kebab-menu.d.ts +1 -1
- package/dist/composites/key-value-list.d.ts +1 -1
- package/dist/composites/log-stream-scroll.d.ts +32 -0
- package/dist/composites/log-stream.d.ts +9 -2
- package/dist/composites/login-form.d.ts +1 -1
- package/dist/composites/node-picker.d.ts +1 -1
- package/dist/composites/page-header.d.ts +1 -1
- package/dist/composites/phase-icon.d.ts +1 -1
- package/dist/composites/pipeline-builder.d.ts +1 -1
- package/dist/composites/pipeline-runtime-selector.d.ts +1 -1
- package/dist/composites/pipeline-step.d.ts +3 -3
- package/dist/composites/pipeline-tree-matrix.d.ts +1 -1
- package/dist/composites/provider-badge.d.ts +1 -1
- package/dist/composites/ptz-overlay.d.ts +1 -1
- package/dist/composites/qr-code.d.ts +1 -1
- package/dist/composites/response-log.d.ts +1 -1
- package/dist/composites/scope-picker.d.ts +1 -1
- package/dist/composites/slide-over-panel.d.ts +1 -1
- package/dist/composites/snapshot-button.d.ts +1 -1
- package/dist/composites/stat-card.d.ts +1 -1
- package/dist/composites/state-values-stream.d.ts +1 -1
- package/dist/composites/status-badge.d.ts +1 -1
- package/dist/composites/step-timings.d.ts +1 -1
- package/dist/composites/step-tree-master.d.ts +1 -1
- package/dist/composites/stream-panel.d.ts +45 -10
- package/dist/composites/timezone-selector.d.ts +18 -0
- package/dist/composites/version-badge.d.ts +2 -2
- package/dist/composites/widget-panel.d.ts +28 -0
- package/dist/contexts/custom-field-renderers.d.ts +1 -1
- package/dist/contexts/device-context.d.ts +1 -1
- package/dist/contexts/player-overlays.d.ts +1 -1
- package/dist/contexts/system-context.d.ts +1 -1
- package/dist/contexts/vod-playback.d.ts +17 -0
- package/dist/contexts/widget-registry.d.ts +1 -1
- package/dist/contexts/zone-editing.d.ts +1 -1
- package/dist/generated/system-hooks.d.ts +386 -56
- package/dist/hooks/index.d.ts +8 -2
- package/dist/hooks/use-device-cap-slice.d.ts +19 -0
- package/dist/hooks/use-device-capability.d.ts +12 -0
- package/dist/hooks/use-device-list-page-size.d.ts +14 -0
- package/dist/hooks/use-device-webrtc.d.ts +36 -4
- package/dist/hooks/use-optimistic-slice.d.ts +11 -0
- package/dist/index.cjs +54834 -11195
- package/dist/index.d.ts +1 -0
- package/dist/index.js +54483 -11136
- package/dist/lib/format-control-datetime.d.ts +18 -0
- package/dist/lib/format-last-seen.d.ts +12 -0
- package/dist/lib/format-numeric.d.ts +9 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/primitives/bottom-sheet.d.ts +1 -1
- package/dist/primitives/collapsible-card.d.ts +1 -1
- package/dist/primitives/dialog.d.ts +19 -6
- package/dist/primitives/dropdown.d.ts +3 -3
- package/dist/primitives/floating-panel.d.ts +1 -1
- package/dist/primitives/mobile-drawer.d.ts +1 -1
- package/dist/primitives/popover.d.ts +3 -3
- package/dist/primitives/tabs.d.ts +4 -4
- package/dist/primitives/tooltip.d.ts +11 -5
- package/dist/theme/index.cjs +0 -3
- package/dist/theme/index.js +0 -2
- package/dist/theme/theme-provider.d.ts +1 -1
- package/package.json +13 -5
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/theme/index.cjs.map +0 -1
- 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 {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
31
|
+
export declare function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled, }: PipelineTreeMatrixProps): import("react").JSX.Element;
|