@camstack/ui-library 1.2.349 → 1.2.351

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,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.2.351] - 2026-10-29
11
+
12
+ ### Added
13
+
14
+ - Generated hooks for the node launch overrides
15
+
16
+ ## [1.2.350] - 2026-10-29
17
+
18
+ ### Added
19
+
20
+ - The device export table also lists actions and notification targets, for the exporters that support them, with the same Expose toggle and type filter.
21
+ - Pages with a fixed-height body (Build-your-self Automations, Actions and Code tabs, OSD Manager) now scroll when their content is taller than the screen
22
+ - A pet fountain hero card with tank gauge, drinking totals and pump controls; the feeder shows the bowl in grams
23
+
24
+ ### Changed
25
+
26
+ - server-management hooks gain the launch override methods (generated)
27
+
10
28
  ## [1.2.349] - 2026-10-29
11
29
 
12
30
  ### Changed
@@ -1,5 +1,5 @@
1
1
  import { t as Settings2 } from "./settings-2-jT1iBqHD.js";
2
- import { A as Trash2, SCENE_CAPTURE_VARIANTS, Sr as Camera, TEXT_HINT, UiTrans, badgeFor, coverageLine, fn as ImageOff, hubPath, isAbsentProvider, pt as RotateCcw, roiTooLarge, statusLine, useConfirm, useDeviceProxy, useDeviceSnapshotImage, useDeviceStateSlice, useSystem, useUiText, variantLabel } from "./index.js";
2
+ import { A as Trash2, Cr as Camera, SCENE_CAPTURE_VARIANTS, TEXT_HINT, UiTrans, badgeFor, coverageLine, fn as ImageOff, hubPath, isAbsentProvider, pt as RotateCcw, roiTooLarge, statusLine, useConfirm, useDeviceProxy, useDeviceSnapshotImage, useDeviceStateSlice, useSystem, useUiText, variantLabel } from "./index.js";
3
3
  import { MaskShapeCanvas } from "./MaskShapeCanvas-C9cJlxvG.js";
4
4
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,12 @@
1
+ import type { ReactNode } from "react";
2
+ import type { ControlPanelProps } from "./types";
3
+ export declare function PetFountainPanel({ trpc, deviceId, layout, optimistic }: ControlPanelProps): ReactNode;
4
+ interface DeviceControlProps {
5
+ readonly trpc: ControlPanelProps["trpc"];
6
+ readonly deviceId: number;
7
+ readonly features: readonly string[] | undefined;
8
+ readonly optimistic?: boolean;
9
+ }
10
+ export declare function PetFountainInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
11
+ export declare function PetFountainHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
12
+ export {};
@@ -13,5 +13,5 @@ export interface ControlPanelProps {
13
13
  /** Cap names whose presence (bound on a device) means it has a control surface.
14
14
  * Single source of truth shared by the row registry and the detail Controls tab
15
15
  * so the two never drift. */
16
- export declare const CONTROL_CAP_NAMES: readonly ["cover", "lock-control", "switch", "brightness", "fan-control", "climate-control", "media-player", "control", "pet-feeder", "dishwasher"];
16
+ export declare const CONTROL_CAP_NAMES: readonly ["cover", "lock-control", "switch", "brightness", "fan-control", "climate-control", "media-player", "control", "pet-feeder", "pet-fountain", "dishwasher"];
17
17
  export type ControlCapName = (typeof CONTROL_CAP_NAMES)[number];
@@ -0,0 +1,33 @@
1
+ /** The kinds this module builds rows for. A device is the table's own row. */
2
+ export type ExportEntityRowKind = "action" | "notifier";
3
+ export type ExportEntityRowRef = {
4
+ readonly kind: "action";
5
+ readonly actionId: string;
6
+ } | {
7
+ readonly kind: "notifier";
8
+ readonly targetId: string;
9
+ };
10
+ export interface ExportEntityRow {
11
+ readonly kind: ExportEntityRowKind;
12
+ /** Unique in the table and never a device id (those are numeric). */
13
+ readonly key: string;
14
+ readonly ref: ExportEntityRowRef;
15
+ readonly name: string;
16
+ readonly exposed: boolean;
17
+ }
18
+ /** The type-filter ids of the entity kinds, apart from every device type. */
19
+ export declare const ENTITY_FILTER_IDS: Readonly<Record<ExportEntityRowKind, string>>;
20
+ /**
21
+ * The non-device kinds the exporter answered, or null when it did not answer
22
+ * (unknown — never an empty set).
23
+ */
24
+ export declare function supportedEntityKinds(data: unknown): ReadonlySet<ExportEntityRowKind> | null;
25
+ export interface BuildEntityRowsInput {
26
+ readonly kinds: ReadonlySet<ExportEntityRowKind> | null;
27
+ readonly actions: unknown;
28
+ readonly targets: unknown;
29
+ readonly exposed: unknown;
30
+ }
31
+ export declare function buildEntityRows(input: BuildEntityRowsInput): readonly ExportEntityRow[];
32
+ /** The type-filter ids to add beside the device types: one per SUPPORTED kind. */
33
+ export declare function entityFilterOptionIds(kinds: ReadonlySet<ExportEntityRowKind> | null): readonly string[];
@@ -45,6 +45,9 @@ export interface SectionedPageProps {
45
45
  readonly onSectionChange?: (id: string, ownedParamsToClear: readonly string[]) => void;
46
46
  /**
47
47
  * Fill the parent height so a section body can host a flex-filling DataTable.
48
+ * The section body scrolls vertically on its own, so a section that is plain
49
+ * flow content (a form, an editor) stays reachable when the host `<main>`
50
+ * does not scroll; a `DataTable fill` inside fits the body and scrolls itself.
48
51
  * Forwarded to `PageShell`; ignored for `sectionsOnly`.
49
52
  */
50
53
  readonly fill?: boolean;
@@ -501,6 +501,14 @@ export declare const useDeviceExportListExposedDevices: typeof trpc.deviceExport
501
501
  export declare const useDeviceExportExposeDevice: typeof trpc.deviceExport.exposeDevice.useMutation;
502
502
  /** Generated alias around `trpc.deviceExport.unexposeDevice.useMutation`. */
503
503
  export declare const useDeviceExportUnexposeDevice: typeof trpc.deviceExport.unexposeDevice.useMutation;
504
+ /** Generated alias around `trpc.deviceExport.listSupportedEntityKinds.useQuery`. */
505
+ export declare const useDeviceExportListSupportedEntityKinds: typeof trpc.deviceExport.listSupportedEntityKinds.useQuery;
506
+ /** Generated alias around `trpc.deviceExport.listExposedEntities.useQuery`. */
507
+ export declare const useDeviceExportListExposedEntities: typeof trpc.deviceExport.listExposedEntities.useQuery;
508
+ /** Generated alias around `trpc.deviceExport.exposeEntity.useMutation`. */
509
+ export declare const useDeviceExportExposeEntity: typeof trpc.deviceExport.exposeEntity.useMutation;
510
+ /** Generated alias around `trpc.deviceExport.unexposeEntity.useMutation`. */
511
+ export declare const useDeviceExportUnexposeEntity: typeof trpc.deviceExport.unexposeEntity.useMutation;
504
512
  /** Generated alias around `trpc.deviceExport.getDeviceSettingsContribution.useQuery`. */
505
513
  export declare const useDeviceExportGetDeviceSettingsContribution: typeof trpc.deviceExport.getDeviceSettingsContribution.useQuery;
506
514
  /** Generated alias around `trpc.deviceExport.getDeviceLiveContribution.useQuery`. */
@@ -1403,6 +1411,18 @@ export declare const usePetFeederSetFeedSound: typeof trpc.petFeeder.setFeedSoun
1403
1411
  export declare const usePetFeederSetVolume: typeof trpc.petFeeder.setVolume.useMutation;
1404
1412
  /** Generated alias around `trpc.petFeeder.getStatus.useQuery`. */
1405
1413
  export declare const usePetFeederGetStatus: typeof trpc.petFeeder.getStatus.useQuery;
1414
+ /** Generated alias around `trpc.petFountain.setPump.useMutation`. */
1415
+ export declare const usePetFountainSetPump: typeof trpc.petFountain.setPump.useMutation;
1416
+ /** Generated alias around `trpc.petFountain.setPumpInterval.useMutation`. */
1417
+ export declare const usePetFountainSetPumpInterval: typeof trpc.petFountain.setPumpInterval.useMutation;
1418
+ /** Generated alias around `trpc.petFountain.setPumpOnMinutes.useMutation`. */
1419
+ export declare const usePetFountainSetPumpOnMinutes: typeof trpc.petFountain.setPumpOnMinutes.useMutation;
1420
+ /** Generated alias around `trpc.petFountain.setPumpOffMinutes.useMutation`. */
1421
+ export declare const usePetFountainSetPumpOffMinutes: typeof trpc.petFountain.setPumpOffMinutes.useMutation;
1422
+ /** Generated alias around `trpc.petFountain.resetDailyConsumption.useMutation`. */
1423
+ export declare const usePetFountainResetDailyConsumption: typeof trpc.petFountain.resetDailyConsumption.useMutation;
1424
+ /** Generated alias around `trpc.petFountain.getStatus.useQuery`. */
1425
+ export declare const usePetFountainGetStatus: typeof trpc.petFountain.getStatus.useQuery;
1406
1426
  /** Generated alias around `trpc.pipelineAnalytics.getActiveTracks.useQuery`. */
1407
1427
  export declare const usePipelineAnalyticsGetActiveTracks: typeof trpc.pipelineAnalytics.getActiveTracks.useQuery;
1408
1428
  /** Generated alias around `trpc.pipelineAnalytics.getTrack.useQuery`. */
@@ -2051,6 +2071,10 @@ export declare const useServerManagementApplyServerUpdate: typeof trpc.serverMan
2051
2071
  export declare const useServerManagementRollbackServerUpdate: typeof trpc.serverManagement.rollbackServerUpdate.useMutation;
2052
2072
  /** Generated alias around `trpc.serverManagement.restartServer.useMutation`. */
2053
2073
  export declare const useServerManagementRestartServer: typeof trpc.serverManagement.restartServer.useMutation;
2074
+ /** Generated alias around `trpc.serverManagement.getLaunchOverrides.useQuery`. */
2075
+ export declare const useServerManagementGetLaunchOverrides: typeof trpc.serverManagement.getLaunchOverrides.useQuery;
2076
+ /** Generated alias around `trpc.serverManagement.setLaunchOverrides.useMutation`. */
2077
+ export declare const useServerManagementSetLaunchOverrides: typeof trpc.serverManagement.setLaunchOverrides.useMutation;
2054
2078
  /** Generated alias around `trpc.settingsStore.get.useQuery`. */
2055
2079
  export declare const useSettingsStoreGet: typeof trpc.settingsStore.get.useQuery;
2056
2080
  /** Generated alias around `trpc.settingsStore.set.useMutation`. */
@@ -12748,19 +12748,6 @@ var Equal = require_createLucideIcon.createLucideIcon("equal", [["line", {
12748
12748
  * This source code is licensed under the ISC license.
12749
12749
  * See the LICENSE file in the root directory of this source tree.
12750
12750
  */
12751
- var Eraser = require_createLucideIcon.createLucideIcon("eraser", [["path", {
12752
- d: "M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21",
12753
- key: "g5wo59"
12754
- }], ["path", {
12755
- d: "m5.082 11.09 8.828 8.828",
12756
- key: "1wx5vj"
12757
- }]]);
12758
- /**
12759
- * @license lucide-react v0.576.0 - ISC
12760
- *
12761
- * This source code is licensed under the ISC license.
12762
- * See the LICENSE file in the root directory of this source tree.
12763
- */
12764
12751
  var EthernetPort = require_createLucideIcon.createLucideIcon("ethernet-port", [
12765
12752
  ["path", {
12766
12753
  d: "m15 20 3-3h2a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h2l3 3z",
@@ -38376,7 +38363,7 @@ exports.EllipsisVertical = require_index.EllipsisVertical;
38376
38363
  exports.Equal = Equal;
38377
38364
  exports.EqualApproximately = EqualApproximately;
38378
38365
  exports.EqualNot = EqualNot;
38379
- exports.Eraser = Eraser;
38366
+ exports.Eraser = require_index.Eraser;
38380
38367
  exports.EthernetPort = EthernetPort;
38381
38368
  exports.Euro = Euro;
38382
38369
  exports.EvCharger = EvCharger;
@@ -1,7 +1,7 @@
1
1
  import { t as createLucideIcon } from "./createLucideIcon-kNomBP27.js";
2
2
  import { n as Hexagon, t as MicOff } from "./mic-off-C2VTYr91.js";
3
3
  import { t as Settings2 } from "./settings-2-jT1iBqHD.js";
4
- import { $ as Shield, $n as CloudFog, $t as LocateFixed, A as Trash2, An as Film, Ar as Bird, At as PawPrint, B as Sun, Bn as DoorOpen, Br as Ban, Bt as Moon, C as Unlink2, Cn as Gauge, Cr as Cable, Ct as Plus, D as TriangleAlert, Dn as Flashlight, Dr as Bot, Dt as Pin, E as Truck, En as Footprints, Er as Box, Et as Pipette, F as Timer, Fn as ExternalLink, Fr as BatteryWarning, Ft as Music, G as Sparkles, Gn as Cpu, Gr as ArrowLeft, Gt as MessageSquare, H as Star, Hn as Dog, Hr as ArrowUp, Ht as Minus, I as Thermometer, In as EllipsisVertical, Ir as BatteryMedium, It as Move, J as SlidersHorizontal, Jn as Cloud, Jr as AlarmSmoke, Jt as Maximize2, K as Snowflake, Kn as Copy, Kr as ArrowDown, Kt as Menu, L as Target, Ln as Droplets, Lr as BatteryLow, Lt as MoveVertical, M as Tractor, Mn as Fan, Mr as Bell, Mt as Package, N as ToggleRight, Nn as Eye, Nr as BellRing, Nt as Network, O as TrendingDown, On as FlashlightOff, Or as Bone, Ot as Phone, P as ToggleLeft, Pn as EyeOff, Pr as Battery, Pt as Navigation, Q as Ship, Qn as CloudLightning, Qt as LockOpen, R as Tag, Rn as Droplet, Rr as BatteryFull, Rt as MoveHorizontal, S as Upload, Sn as GraduationCap, Sr as Camera, St as Plug, T as Type, Tn as Funnel, Tr as Bug, Tt as Plane, U as Square, Un as Database, Ur as ArrowUpToLine, Ut as Minimize2, V as SunMedium, Vn as DoorClosed, Vr as Baby, Vt as MonitorPlay, W as Sprout, Wn as Crosshair, Wr as ArrowRight, Wt as Mic, X as SkipBack, Xn as CloudSnow, Xr as Activity, Xt as Mail, Y as SkipForward, Yn as CloudSun, Yr as AirVent, Yt as MapPin, Z as Siren, Zn as CloudRain, Zt as Lock, _ as Vibrate, _n as HardDrive, _r as Check, _t as Radar, a as Wrench, an as Leaf, ar as CirclePlus, at as Server, b as User, bn as GripHorizontal, br as Cast, bt as Power, c as Wifi, cr as CircleCheck, ct as Scan, d as WifiLow, dn as Image, dr as ChevronsUpDown, dt as Route, en as LoaderCircle, er as Clock, et as ShieldOff, f as WifiHigh, fn as ImageOff, fr as ChevronsDownUp, ft as RotateCw, g as Volume2, gn as Hash, gr as ChevronDown, gt as RadioTower, h as VolumeX, hn as Heater, hr as ChevronLeft, ht as Radio, i as X, in as Lightbulb, ir as CircleQuestionMark, it as Settings, j as TrainFront, jn as Feather, jr as Bike, jt as Pause, k as TrendingUp, kn as Flame, kr as Blinds, kt as Pencil, l as WifiZero, ln as Info, lr as CircleCheckBig, lt as Save, m as WashingMachine, mn as History, mr as ChevronRight, mt as RefreshCw, n as ZoomIn, nn as ListChecks, nr as CircleX, nt as ShieldAlert, o as Workflow, on as LayoutGrid, or as CirclePause, ot as Search, p as Waves, pn as House, pr as ChevronUp, pt as RotateCcw, q as Smartphone, qn as Cog, qr as ArrowDownToLine, qt as Megaphone, r as Zap, rn as Link2, rr as CircleStop, rt as Share2, s as Wind, sn as Laugh, sr as CircleDot, st as ScrollText, t as ZoomOut, tn as List, tr as Clapperboard, tt as ShieldCheck, u as WifiOff, un as Inbox, ur as CircleAlert, ut as Sailboat, v as UtensilsCrossed, vn as Hand, vr as ChartLine, vt as QrCode, w as Undo2, wn as Gamepad2, wr as Bus, wt as Play, x as UserCheck, xn as Grid2x2, xr as Car, xt as PowerOff, y as Users, yn as Hammer, yr as Cat, yt as Puzzle, z as Sunrise, zn as Download, zr as Bath, zt as MousePointerClick } from "./index.js";
4
+ import { $ as Shield, $n as CloudLightning, $t as LocateFixed, A as Trash2, An as Film, Ar as Blinds, At as PawPrint, B as Sun, Bn as Download, Br as Bath, Bt as Moon, C as Unlink2, Cn as Gauge, Cr as Camera, Ct as Plus, D as TriangleAlert, Dn as Flashlight, Dr as Box, Dt as Pin, E as Truck, En as Footprints, Er as Bug, Et as Pipette, F as Timer, Fn as ExternalLink, Fr as Battery, Ft as Music, G as Sparkles, Gn as Crosshair, Gr as ArrowRight, Gt as MessageSquare, H as Star, Hn as DoorClosed, Hr as Baby, Ht as Minus, I as Thermometer, In as Eraser, Ir as BatteryWarning, It as Move, J as SlidersHorizontal, Jn as Cog, Jr as ArrowDownToLine, Jt as Maximize2, K as Snowflake, Kn as Cpu, Kr as ArrowLeft, Kt as Menu, L as Target, Ln as EllipsisVertical, Lr as BatteryMedium, Lt as MoveVertical, M as Tractor, Mn as Fan, Mr as Bike, Mt as Package, N as ToggleRight, Nn as Eye, Nr as Bell, Nt as Network, O as TrendingDown, On as FlashlightOff, Or as Bot, Ot as Phone, P as ToggleLeft, Pn as EyeOff, Pr as BellRing, Pt as Navigation, Q as Ship, Qn as CloudRain, Qt as LockOpen, R as Tag, Rn as Droplets, Rr as BatteryLow, Rt as MoveHorizontal, S as Upload, Sn as GraduationCap, Sr as Car, St as Plug, T as Type, Tn as Funnel, Tr as Bus, Tt as Plane, U as Square, Un as Dog, Ur as ArrowUp, Ut as Minimize2, V as SunMedium, Vn as DoorOpen, Vr as Ban, Vt as MonitorPlay, W as Sprout, Wn as Database, Wr as ArrowUpToLine, Wt as Mic, X as SkipBack, Xn as CloudSun, Xr as AirVent, Xt as Mail, Y as SkipForward, Yn as Cloud, Yr as AlarmSmoke, Yt as MapPin, Z as Siren, Zn as CloudSnow, Zr as Activity, Zt as Lock, _ as Vibrate, _n as HardDrive, _r as ChevronDown, _t as Radar, a as Wrench, an as Leaf, ar as CircleQuestionMark, at as Server, b as User, bn as GripHorizontal, br as Cat, bt as Power, c as Wifi, cr as CircleDot, ct as Scan, d as WifiLow, dn as Image, dr as CircleAlert, dt as Route, en as LoaderCircle, er as CloudFog, et as ShieldOff, f as WifiHigh, fn as ImageOff, fr as ChevronsUpDown, ft as RotateCw, g as Volume2, gn as Hash, gr as ChevronLeft, gt as RadioTower, h as VolumeX, hn as Heater, hr as ChevronRight, ht as Radio, i as X, in as Lightbulb, ir as CircleStop, it as Settings, j as TrainFront, jn as Feather, jr as Bird, jt as Pause, k as TrendingUp, kn as Flame, kr as Bone, kt as Pencil, l as WifiZero, ln as Info, lr as CircleCheck, lt as Save, m as WashingMachine, mn as History, mr as ChevronUp, mt as RefreshCw, n as ZoomIn, nn as ListChecks, nr as Clapperboard, nt as ShieldAlert, o as Workflow, on as LayoutGrid, or as CirclePlus, ot as Search, p as Waves, pn as House, pr as ChevronsDownUp, pt as RotateCcw, q as Smartphone, qn as Copy, qr as ArrowDown, qt as Megaphone, r as Zap, rn as Link2, rr as CircleX, rt as Share2, s as Wind, sn as Laugh, sr as CirclePause, st as ScrollText, t as ZoomOut, tn as List, tr as Clock, tt as ShieldCheck, u as WifiOff, un as Inbox, ur as CircleCheckBig, ut as Sailboat, v as UtensilsCrossed, vn as Hand, vr as Check, vt as QrCode, w as Undo2, wn as Gamepad2, wr as Cable, wt as Play, x as UserCheck, xn as Grid2x2, xr as Cast, xt as PowerOff, y as Users, yn as Hammer, yr as ChartLine, yt as Puzzle, z as Sunrise, zn as Droplet, zr as BatteryFull, zt as MousePointerClick } from "./index.js";
5
5
  /**
6
6
  * @license lucide-react v0.576.0 - ISC
7
7
  *
@@ -12748,19 +12748,6 @@ var Equal = createLucideIcon("equal", [["line", {
12748
12748
  * This source code is licensed under the ISC license.
12749
12749
  * See the LICENSE file in the root directory of this source tree.
12750
12750
  */
12751
- var Eraser = createLucideIcon("eraser", [["path", {
12752
- d: "M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21",
12753
- key: "g5wo59"
12754
- }], ["path", {
12755
- d: "m5.082 11.09 8.828 8.828",
12756
- key: "1wx5vj"
12757
- }]]);
12758
- /**
12759
- * @license lucide-react v0.576.0 - ISC
12760
- *
12761
- * This source code is licensed under the ISC license.
12762
- * See the LICENSE file in the root directory of this source tree.
12763
- */
12764
12751
  var EthernetPort = createLucideIcon("ethernet-port", [
12765
12752
  ["path", {
12766
12753
  d: "m15 20 3-3h2a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h2l3 3z",