@camstack/ui-library 1.2.356 → 1.2.358

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/CHANGELOG.md CHANGED
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.2.358] - 2026-10-30
11
+
12
+ ### Changed
13
+
14
+ - Notification targets pick a broker and list their options inside the add/edit form; the page-wide Find devices dialog is gone
15
+
16
+ ## [1.2.357] - 2026-10-30
17
+
18
+ ### Added
19
+
20
+ - Generated hooks for the new network scan and saved scan subnets calls
21
+
22
+ ### Changed
23
+
24
+ - DevicePicker: fillHeight stretches the list to its container and scrolls the rows inside
25
+ - Dialog text now wraps when a dialog is opened from a table row action instead of scrolling sideways
26
+ - Collapsible section headers (settings sections, groups, device-picker groups, response log) use a larger chevron and are real buttons with keyboard support
27
+ - DialogContent accepts the native dialog attributes such as onCancel, so a caller can refuse Escape while work is in flight
28
+ - Renaming a node updates its name on the Cluster page immediately instead of after a reload
29
+
10
30
  ## [1.2.356] - 2026-10-30
11
31
 
12
32
  ### Changed
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `broker-select` — the control of a schema field that picks a broker of one
3
+ * kind. The host's picker (list + "Create new…") when it provided one, else a
4
+ * plain select over the existing brokers. The kind is data, never named here.
5
+ */
6
+ import type { JSX } from "react";
7
+ import type { ConfigBrokerSelectField } from "@camstack/types";
8
+ export declare function ConfigBrokerSelectControl({ field, value, onChange, disabled, controlId }: {
9
+ readonly field: ConfigBrokerSelectField;
10
+ readonly value: unknown;
11
+ readonly onChange: (brokerId: string) => void;
12
+ readonly disabled?: boolean;
13
+ readonly controlId: string;
14
+ }): JSX.Element;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A `select` whose options come from a notification kind's `discoverTargets`,
3
+ * asked for the form's CURRENT values.
4
+ *
5
+ * Nothing is fetched until every `dependsOn` field has a value, so a kind that
6
+ * needs a broker or a token is never asked without it. Each state is its own
7
+ * line (not yet / loading / failed / nothing found) and the field stays a free
8
+ * text input in all of them but "found", so the operator is never stuck behind
9
+ * a list that did not come.
10
+ */
11
+ import { type JSX } from "react";
12
+ import type { ConfigSelectField } from "@camstack/types";
13
+ export declare function ConfigDiscoveredSelectControl({ field, values, value, onChange, disabled, controlId }: {
14
+ readonly field: ConfigSelectField;
15
+ readonly values: Readonly<Record<string, unknown>>;
16
+ readonly value: unknown;
17
+ readonly onChange: (next: string) => void;
18
+ readonly disabled?: boolean;
19
+ readonly controlId: string;
20
+ }): JSX.Element;
@@ -83,6 +83,12 @@ export interface DevicePickerProps<Id extends PickerId = number> {
83
83
  */
84
84
  readonly showAll?: boolean;
85
85
  /**
86
+ * Stretch to the height of a flex parent and scroll the rows inside the
87
+ * panel, instead of capping the list at a fixed height. Needs a parent with
88
+ * a definite height (a `fill` dialog column).
89
+ */
90
+ readonly fillHeight?: boolean;
91
+ /**
86
92
  * Devices that are ALREADY part of the thing being edited (linked to the
87
93
  * camera, assigned to the room): drawn checked and disabled with
88
94
  * `lockedNote`, never part of `value`, never emitted by `onChange`.
@@ -91,4 +97,4 @@ export interface DevicePickerProps<Id extends PickerId = number> {
91
97
  /** The line under a locked device. Default "Already added". */
92
98
  readonly lockedNote?: string;
93
99
  }
94
- export declare function DevicePicker<Id extends PickerId = number>({ devices: devicesIn, listState, fleet, value, onChange, selection, groupBy: pinnedGroupBy, emptyMeansAll, savedHadDevices, noun, groupTitle: groupTitleProp, emptyLabel, annotate, disabled, testId, showAll, lockedIds, lockedNote: lockedNoteProp }: DevicePickerProps<Id>): JSX.Element;
100
+ export declare function DevicePicker<Id extends PickerId = number>({ devices: devicesIn, listState, fleet, value, onChange, selection, groupBy: pinnedGroupBy, emptyMeansAll, savedHadDevices, noun, groupTitle: groupTitleProp, emptyLabel, annotate, disabled, testId, showAll, fillHeight, lockedIds, lockedNote: lockedNoteProp }: DevicePickerProps<Id>): JSX.Element;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The broker picker a host mounts for `broker-select` fields.
3
+ *
4
+ * Creating a broker needs the host's sign-in dialogs, which the library does
5
+ * not carry, so the host supplies the picker (`BrokerPicker` in admin-ui) here.
6
+ * Without one, `broker-select` still lists the existing brokers and lets the
7
+ * operator choose; it just cannot create.
8
+ */
9
+ import { type ComponentType, type JSX, type ReactNode } from "react";
10
+ export interface BrokerPickerSlotProps {
11
+ /** Broker kind to list and to create. */
12
+ readonly kind: string;
13
+ readonly value: string | null;
14
+ readonly onChange: (brokerId: string | null) => void;
15
+ }
16
+ export type BrokerPickerSlot = ComponentType<BrokerPickerSlotProps>;
17
+ export declare function BrokerPickerSlotProvider({ picker, children }: {
18
+ readonly picker: BrokerPickerSlot;
19
+ readonly children: ReactNode;
20
+ }): JSX.Element;
21
+ export declare function useBrokerPickerSlot(): BrokerPickerSlot | null;
@@ -125,6 +125,10 @@ export declare const useAddonSettingsGetGlobalSettings: typeof trpc.addonSetting
125
125
  export declare const useAddonSettingsUpdateGlobalSettings: typeof trpc.addonSettings.updateGlobalSettings.useMutation;
126
126
  /** Generated alias around `trpc.addonSettings.getIntegrationSettings.useQuery`. */
127
127
  export declare const useAddonSettingsGetIntegrationSettings: typeof trpc.addonSettings.getIntegrationSettings.useQuery;
128
+ /** Generated alias around `trpc.addonSettings.getDeclaredSettingsKeys.useQuery`. */
129
+ export declare const useAddonSettingsGetDeclaredSettingsKeys: typeof trpc.addonSettings.getDeclaredSettingsKeys.useQuery;
130
+ /** Generated alias around `trpc.addonSettings.unsetStoredSettingsKeys.useMutation`. */
131
+ export declare const useAddonSettingsUnsetStoredSettingsKeys: typeof trpc.addonSettings.unsetStoredSettingsKeys.useMutation;
128
132
  /** Generated alias around `trpc.addonSettings.getDeviceSettings.useQuery`. */
129
133
  export declare const useAddonSettingsGetDeviceSettings: typeof trpc.addonSettings.getDeviceSettings.useQuery;
130
134
  /** Generated alias around `trpc.addonSettings.updateDeviceSettings.useMutation`. */
@@ -761,6 +765,10 @@ export declare const useDeviceProviderReloadDevice: typeof trpc.deviceProvider.r
761
765
  export declare const useDeviceProviderSupportsDiscovery: typeof trpc.deviceProvider.supportsDiscovery.useQuery;
762
766
  /** Generated alias around `trpc.deviceProvider.discoverDevices.useMutation`. */
763
767
  export declare const useDeviceProviderDiscoverDevices: typeof trpc.deviceProvider.discoverDevices.useMutation;
768
+ /** Generated alias around `trpc.deviceProvider.getDiscoveryModes.useQuery`. */
769
+ export declare const useDeviceProviderGetDiscoveryModes: typeof trpc.deviceProvider.getDiscoveryModes.useQuery;
770
+ /** Generated alias around `trpc.deviceProvider.classifyDiscoveryHits.useMutation`. */
771
+ export declare const useDeviceProviderClassifyDiscoveryHits: typeof trpc.deviceProvider.classifyDiscoveryHits.useMutation;
764
772
  /** Generated alias around `trpc.deviceProvider.getDiscoveryParamsSchema.useQuery`. */
765
773
  export declare const useDeviceProviderGetDiscoveryParamsSchema: typeof trpc.deviceProvider.getDiscoveryParamsSchema.useQuery;
766
774
  /** Generated alias around `trpc.deviceProvider.getManualCreationType.useQuery`. */
@@ -1067,6 +1075,12 @@ export declare const useLocalNetworkUploadCertificate: typeof trpc.localNetwork.
1067
1075
  export declare const useLocalNetworkDownloadCa: typeof trpc.localNetwork.downloadCa.useQuery;
1068
1076
  /** Generated alias around `trpc.localNetwork.useStoredUploadedCertificate.useMutation`. */
1069
1077
  export declare const useLocalNetworkUseStoredUploadedCertificate: typeof trpc.localNetwork.useStoredUploadedCertificate.useMutation;
1078
+ /** Generated alias around `trpc.localNetwork.scanNetwork.useMutation`. */
1079
+ export declare const useLocalNetworkScanNetwork: typeof trpc.localNetwork.scanNetwork.useMutation;
1080
+ /** Generated alias around `trpc.localNetwork.getScanSubnets.useQuery`. */
1081
+ export declare const useLocalNetworkGetScanSubnets: typeof trpc.localNetwork.getScanSubnets.useQuery;
1082
+ /** Generated alias around `trpc.localNetwork.setScanSubnets.useMutation`. */
1083
+ export declare const useLocalNetworkSetScanSubnets: typeof trpc.localNetwork.setScanSubnets.useMutation;
1070
1084
  /** Generated alias around `trpc.localNetwork.revertToGeneratedCertificate.useMutation`. */
1071
1085
  export declare const useLocalNetworkRevertToGeneratedCertificate: typeof trpc.localNetwork.revertToGeneratedCertificate.useMutation;
1072
1086
  /** Generated alias around `trpc.lockControl.lock.useMutation`. */