@camstack/ui-library 1.2.375 → 1.2.377

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.377] - 2026-11-03
11
+
12
+ ### Changed
13
+
14
+ - Media-player hero card rewritten: power, running state, power-meter watts and every declared control, unknown shown as unknown; artwork with cross-fade; a declared volume or mute always shows (unknown level) instead of hiding
15
+ - A wireless link badge with no signal reading shows no percentage (it showed NaN%)
16
+ - Media-player hero: a status with no state draws an unknown orb and unknown running, never on or Not running
17
+ - A Power line under every device's hero card shows watts and energy; heater and appliance cards no longer draw watts themselves
18
+ - The media-player hero no longer draws its own running line and watts; the device page's running line and Power line show them
19
+
20
+ ## [1.2.376] - 2026-11-03
21
+
22
+ ### Changed
23
+
24
+ - Generated hooks include the media-player power and step methods
25
+ - Media-player hero shows only what the device reports: no fake 0% volume, no empty now-playing, and an assumed state is marked as assumed
26
+ - A closed mobile drawer or bottom sheet mounts nothing, so no off-screen layer blurs the top bar on iPhone; the app shell top bar is opaque
27
+
10
28
  ## [1.2.375] - 2026-11-02
11
29
 
12
30
  ### Changed
@@ -1,4 +1,4 @@
1
- import { Cn as Grid2x2, TEXT_HINT, UiTrans, WidgetPanel, isAbsentProvider, useDeviceProxy, usePlayerOverlayLayer, useSystem, useUiText } from "./index.js";
1
+ import { En as Grid2x2, TEXT_HINT, UiTrans, WidgetPanel, isAbsentProvider, useDeviceProxy, usePlayerOverlayLayer, useSystem, useUiText } from "./index.js";
2
2
  import { MaskShapeCanvas } from "./MaskShapeCanvas-C9cJlxvG.js";
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  import { n as Hexagon, t as MicOff } from "./mic-off-C2VTYr91.js";
2
- import { A as Trash2, In as EyeOff, Kt as Mic, TEXT_HINT, UiTrans, W as Square, WidgetPanel, isAbsentProvider, useDeviceProxy, usePlayerOverlayLayer, useSystem, useUiText } from "./index.js";
2
+ import { A as Trash2, TEXT_HINT, UiTrans, W as Square, WidgetPanel, Yt as Mic, isAbsentProvider, useDeviceProxy, usePlayerOverlayLayer, useSystem, useUiText, zn as EyeOff } 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";
@@ -1,5 +1,5 @@
1
1
  import { t as Settings2 } from "./settings-2-jT1iBqHD.js";
2
- import { A as Trash2, SCENE_CAPTURE_VARIANTS, TEXT_HINT, Tr as Camera, UiTrans, badgeFor, coverageLine, ht as RotateCcw, hubPath, isAbsentProvider, mn as ImageOff, roiTooLarge, statusLine, useConfirm, useDeviceProxy, useDeviceSnapshotImage, useDeviceStateSlice, useSystem, useUiText, variantLabel } from "./index.js";
2
+ import { A as Trash2, Or as Camera, SCENE_CAPTURE_VARIANTS, TEXT_HINT, UiTrans, _n as ImageOff, badgeFor, coverageLine, gt as RotateCcw, hubPath, isAbsentProvider, 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,10 @@
1
+ import type { JSX } from "react";
2
+ import type { CapSettingsComponentProps } from "./index";
3
+ /** Whole watts below a kilowatt, one decimal above. */
4
+ export declare function formatPowerWatts(watts: number): {
5
+ readonly value: string;
6
+ readonly unit: string;
7
+ };
8
+ /** Two decimals under 100 kWh, whole kWh above. */
9
+ export declare function formatEnergyKwh(kwh: number): string;
10
+ export declare function PowerMeterLine({ deviceId }: CapSettingsComponentProps): JSX.Element | null;
@@ -1,5 +1,6 @@
1
1
  export { AutotrackSection } from "./AutotrackSection";
2
2
  export { ConsumablesPanel } from "./ConsumablesPanel";
3
+ export { PowerMeterLine } from "./PowerMeterLine";
3
4
  export type { MaskShapeCanvasProps, MaskShapeItem } from "./MaskShapeCanvas";
4
5
  export { MaskShapeCanvas } from "./MaskShapeCanvas";
5
6
  export { MotionZonesSettings } from "./MotionZonesSettings";
@@ -1,8 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { type UiTextFn } from "../../contexts/ui-text";
3
3
  import type { DeviceControlProps } from "./control-registry";
4
- /** Whole watts, or a dash when the appliance has not reported a reading. */
5
- export declare function formatWatts(power: number | undefined): string;
6
4
  interface StateLabel {
7
5
  readonly label: string;
8
6
  readonly tone: string;
@@ -1,17 +1,22 @@
1
- import type { ReactNode } from "react";
1
+ import { type ReactNode } from "react";
2
2
  import type { DeviceControlProps } from "./control-registry";
3
3
  /**
4
- * MediaPlayerHeroCard — now-playing hero for MediaPlayer devices.
4
+ * MediaPlayerHeroCard — the state of a MediaPlayer device and every control it
5
+ * exposes, drawn from `deriveMediaPlayerView` (the state → view mapping and
6
+ * its spec live in `media-player-view.ts`).
5
7
  *
6
- * Renders (Spec §3):
7
- * - Now-playing block: cover glyph + title + artist/album.
8
- * - Seek GripTrack with a native range overlay (gated on DeviceFeature
9
- * MediaPlayerSeek + a known duration).
10
- * - Transport row: SkipBack / Play-Pause / SkipForward (lucide icons). Skip
11
- * buttons are gated on MediaPlayerPrevious / MediaPlayerNext.
12
- * - Volume GripTrack with a native range overlay + mute toggle (gated on a
13
- * non-null volume surface + DeviceFeature.MediaPlayerVolume).
8
+ * - Power orb: glowing when on, amber in standby, flat when off, dashed with a
9
+ * question mark while the state is unknown (never drawn as off). It is the
10
+ * power switch when the device declares `MediaPlayerPower`.
11
+ * - Running line: equalizer while playing, spinner while buffering, pause
12
+ * glyph when paused; a value the driver only guesses carries an "assumed" mark.
13
+ * - Only while the device is on: now-playing, seek, transport (previous /
14
+ * play-pause / stop / next), volume (slider with mute, or steps when the
15
+ * device has no level reading), the source (a picker when it can switch),
16
+ * shuffle and repeat. Each appears only when the status fills it or a
17
+ * `DeviceFeature` declares it — no per-vendor list.
14
18
  *
15
19
  * Cap-gated on `media-player` — returns null when the device lacks the cap.
20
+ * Motion respects `prefers-reduced-motion`.
16
21
  */
17
22
  export declare function MediaPlayerHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from "react";
2
+ import type { PowerView, RunningView } from "./media-player-view";
3
+ export declare const MEDIA_HERO_KEYFRAMES = "\n@keyframes mph-eq { 0%, 100% { transform: scaleY(.3) } 50% { transform: scaleY(1) } }\n@keyframes mph-halo { 0% { transform: scale(.92); opacity: .55 } 100% { transform: scale(1.4); opacity: 0 } }\n.mph-eq { transform-origin: bottom; animation: mph-eq 1s ease-in-out infinite; }\n.mph-eq:nth-child(2) { animation-duration: .8s; animation-delay: -.3s; }\n.mph-eq:nth-child(3) { animation-duration: 1.2s; animation-delay: -.6s; }\n.mph-eq:nth-child(4) { animation-duration: .9s; animation-delay: -.1s; }\n.mph-halo { animation: mph-halo 2.8s ease-out infinite; }\n@keyframes mph-in { from { opacity: 0 } to { opacity: 1 } }\n@keyframes mph-out { from { opacity: 1 } to { opacity: 0 } }\n.mph-fade-in { animation: mph-in .6s ease-out both; }\n.mph-fade-out { animation: mph-out .6s ease-out both; }\n@media (prefers-reduced-motion: reduce) {\n .mph-eq, .mph-halo, .mph-fade-in, .mph-fade-out { animation: none !important; }\n .mph-fade-out { opacity: 0; }\n .mph-eq:nth-child(odd) { transform: scaleY(.6); }\n .mph-halo { opacity: 0; }\n}\n";
4
+ interface PowerOrbProps {
5
+ readonly power: PowerView;
6
+ /** Present = the orb is the power switch. */
7
+ readonly onPress: (() => void) | undefined;
8
+ readonly label: string;
9
+ readonly busy: boolean;
10
+ }
11
+ /** The device's power: a glowing ring when on, amber in standby, flat when off, dashed when unknown. */
12
+ export declare function PowerOrb({ power, onPress, label, busy }: PowerOrbProps): ReactNode;
13
+ interface RunningIndicatorProps {
14
+ readonly running: RunningView;
15
+ }
16
+ /** Equalizer while playing, a spinner while buffering, a pause glyph when paused; nothing otherwise. */
17
+ export declare function RunningIndicator({ running }: RunningIndicatorProps): ReactNode;
18
+ export {};
@@ -6,4 +6,4 @@ import type { MediaPlayerState } from "@camstack/types";
6
6
  * Build fails if a state is added and not reflected here.
7
7
  */
8
8
  export declare const STATE_COLOR: Record<MediaPlayerState, string>;
9
- export declare function MediaPlayerPanel({ trpc, deviceId, features: _features, layout, optimistic }: ControlPanelProps): ReactNode;
9
+ export declare function MediaPlayerPanel({ trpc, deviceId, features, layout, optimistic }: ControlPanelProps): ReactNode;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The state → view mapping of the media-player hero card, kept pure so it can
3
+ * be specified without rendering.
4
+ *
5
+ * Two questions are answered separately. POWER is whether the device is on
6
+ * (`off` / `standby` / on); RUNNING is what a powered device is doing
7
+ * (`playing` / `paused` / `buffering` / `idle`). A status that never arrived
8
+ * is `unknown` for both, and an unknown state is never drawn as off: it is
9
+ * its own look. A value the driver only guesses (infrared has no feedback)
10
+ * carries an `assumed` flag so the card can draw it as a guess.
11
+ *
12
+ * The controls are derived from what the device exposes — the status fields
13
+ * it fills and the `DeviceFeature` flags it declares — never from a vendor.
14
+ */
15
+ import { type MediaPlayerStatus } from "@camstack/types";
16
+ export type PowerView = "on" | "off" | "standby" | "unknown";
17
+ /** `none` = powered but the device reports no activity (an infrared TV that is simply on). */
18
+ export type RunningView = "playing" | "paused" | "buffering" | "idle" | "none" | "unknown";
19
+ export type VolumeView = "slider" | "steps" | "none";
20
+ export interface SourceView {
21
+ readonly current: string;
22
+ readonly options: readonly string[];
23
+ /** Several sources and the device can switch between them. */
24
+ readonly selectable: boolean;
25
+ }
26
+ export interface TransportView {
27
+ /** Play / pause is drawn at all. */
28
+ readonly playPause: boolean;
29
+ readonly previous: boolean;
30
+ readonly next: boolean;
31
+ readonly stop: boolean;
32
+ }
33
+ /** What the device's `running-state` cap says: a reading, or `unknown` (null, unanswered or not bound). */
34
+ export type RunningReading = "running" | "idle" | "unknown";
35
+ /** Readings from sibling caps bound to the same device; `undefined` = not bound or not answered. */
36
+ export interface MediaPlayerExtras {
37
+ /** `running-state` slice's `running`. */
38
+ readonly running?: boolean | null | undefined;
39
+ }
40
+ export interface MediaPlayerView {
41
+ readonly power: PowerView;
42
+ /** The `running-state` cap's reading; `unknown` when the cap is absent or has no answer. */
43
+ readonly runningReading: RunningReading;
44
+ readonly running: RunningView;
45
+ /** The power / running state is the driver's own bookkeeping, not a reading. */
46
+ readonly stateAssumed: boolean;
47
+ /** Power can be switched from here. */
48
+ readonly canSwitchPower: boolean;
49
+ readonly transport: TransportView;
50
+ readonly seek: boolean;
51
+ readonly volume: VolumeView;
52
+ readonly volumeAssumed: boolean;
53
+ /** The device reported a level; false draws the slider as unknown. */
54
+ readonly volumeKnown: boolean;
55
+ readonly muteKnown: boolean;
56
+ /** Artwork of what is playing; null when there is none. */
57
+ readonly artworkUrl: string | null;
58
+ /** A mute toggle with a known state. */
59
+ readonly mute: boolean;
60
+ readonly muteAssumed: boolean;
61
+ readonly source: SourceView | null;
62
+ readonly sourceAssumed: boolean;
63
+ readonly shuffle: boolean;
64
+ readonly repeat: boolean;
65
+ }
66
+ export declare function deriveMediaPlayerView(status: MediaPlayerStatus | undefined, features: readonly string[] | undefined, extras?: MediaPlayerExtras): MediaPlayerView;
@@ -54,6 +54,7 @@ export type { DiagnosticIcePolicy, SessionVerdict, SessionVerdictLayer } from ".
54
54
  export type { EndpointTestRow, IceServerEntry, NatCheckResult } from "./webrtc-diagnostics/endpoint-test";
55
55
  export { AutotrackSection } from "./cap-settings/AutotrackSection";
56
56
  export { ConsumablesPanel } from "./cap-settings/ConsumablesPanel";
57
+ export { PowerMeterLine } from "./cap-settings/PowerMeterLine";
57
58
  export type { CapSettingsComponentProps } from "./cap-settings/index";
58
59
  export type { MaskShapeCanvasProps, MaskShapeItem } from "./cap-settings/MaskShapeCanvas";
59
60
  export { NavigationPanel } from "./cap-settings/NavigationPanel";
@@ -1137,6 +1137,18 @@ export declare const useLockControlUnlock: typeof trpc.lockControl.unlock.useMut
1137
1137
  export declare const useLockControlOpen: typeof trpc.lockControl.open.useMutation;
1138
1138
  /** Generated alias around `trpc.lockControl.getStatus.useQuery`. */
1139
1139
  export declare const useLockControlGetStatus: typeof trpc.lockControl.getStatus.useQuery;
1140
+ /** Generated alias around `trpc.mediaPlayer.turnOn.useMutation`. */
1141
+ export declare const useMediaPlayerTurnOn: typeof trpc.mediaPlayer.turnOn.useMutation;
1142
+ /** Generated alias around `trpc.mediaPlayer.turnOff.useMutation`. */
1143
+ export declare const useMediaPlayerTurnOff: typeof trpc.mediaPlayer.turnOff.useMutation;
1144
+ /** Generated alias around `trpc.mediaPlayer.volumeUp.useMutation`. */
1145
+ export declare const useMediaPlayerVolumeUp: typeof trpc.mediaPlayer.volumeUp.useMutation;
1146
+ /** Generated alias around `trpc.mediaPlayer.volumeDown.useMutation`. */
1147
+ export declare const useMediaPlayerVolumeDown: typeof trpc.mediaPlayer.volumeDown.useMutation;
1148
+ /** Generated alias around `trpc.mediaPlayer.channelUp.useMutation`. */
1149
+ export declare const useMediaPlayerChannelUp: typeof trpc.mediaPlayer.channelUp.useMutation;
1150
+ /** Generated alias around `trpc.mediaPlayer.channelDown.useMutation`. */
1151
+ export declare const useMediaPlayerChannelDown: typeof trpc.mediaPlayer.channelDown.useMutation;
1140
1152
  /** Generated alias around `trpc.mediaPlayer.play.useMutation`. */
1141
1153
  export declare const useMediaPlayerPlay: typeof trpc.mediaPlayer.play.useMutation;
1142
1154
  /** Generated alias around `trpc.mediaPlayer.pause.useMutation`. */
@@ -2111,6 +2123,8 @@ export declare const useRemoteSetConfig: typeof trpc.remote.setConfig.useMutatio
2111
2123
  export declare const useRemoteListCommands: typeof trpc.remote.listCommands.useQuery;
2112
2124
  /** Generated alias around `trpc.remote.sendCommand.useMutation`. */
2113
2125
  export declare const useRemoteSendCommand: typeof trpc.remote.sendCommand.useMutation;
2126
+ /** Generated alias around `trpc.remote.getAssumedStatus.useQuery`. */
2127
+ export declare const useRemoteGetAssumedStatus: typeof trpc.remote.getAssumedStatus.useQuery;
2114
2128
  /** Generated alias around `trpc.remote.sendMediaCommand.useMutation`. */
2115
2129
  export declare const useRemoteSendMediaCommand: typeof trpc.remote.sendMediaCommand.useMutation;
2116
2130
  /** Generated alias around `trpc.remoteLayoutComponents.listComponents.useQuery`. */
@@ -27093,34 +27093,6 @@ var RemoveFormatting = require_createLucideIcon.createLucideIcon("remove-formatt
27093
27093
  * This source code is licensed under the ISC license.
27094
27094
  * See the LICENSE file in the root directory of this source tree.
27095
27095
  */
27096
- var Repeat1 = require_createLucideIcon.createLucideIcon("repeat-1", [
27097
- ["path", {
27098
- d: "m17 2 4 4-4 4",
27099
- key: "nntrym"
27100
- }],
27101
- ["path", {
27102
- d: "M3 11v-1a4 4 0 0 1 4-4h14",
27103
- key: "84bu3i"
27104
- }],
27105
- ["path", {
27106
- d: "m7 22-4-4 4-4",
27107
- key: "1wqhfi"
27108
- }],
27109
- ["path", {
27110
- d: "M21 13v1a4 4 0 0 1-4 4H3",
27111
- key: "1rx37r"
27112
- }],
27113
- ["path", {
27114
- d: "M11 10h1v4",
27115
- key: "70cz1p"
27116
- }]
27117
- ]);
27118
- /**
27119
- * @license lucide-react v0.576.0 - ISC
27120
- *
27121
- * This source code is licensed under the ISC license.
27122
- * See the LICENSE file in the root directory of this source tree.
27123
- */
27124
27096
  var Repeat2 = require_createLucideIcon.createLucideIcon("repeat-2", [
27125
27097
  ["path", {
27126
27098
  d: "m2 9 3-3 3 3",
@@ -27145,30 +27117,6 @@ var Repeat2 = require_createLucideIcon.createLucideIcon("repeat-2", [
27145
27117
  * This source code is licensed under the ISC license.
27146
27118
  * See the LICENSE file in the root directory of this source tree.
27147
27119
  */
27148
- var Repeat = require_createLucideIcon.createLucideIcon("repeat", [
27149
- ["path", {
27150
- d: "m17 2 4 4-4 4",
27151
- key: "nntrym"
27152
- }],
27153
- ["path", {
27154
- d: "M3 11v-1a4 4 0 0 1 4-4h14",
27155
- key: "84bu3i"
27156
- }],
27157
- ["path", {
27158
- d: "m7 22-4-4 4-4",
27159
- key: "1wqhfi"
27160
- }],
27161
- ["path", {
27162
- d: "M21 13v1a4 4 0 0 1-4 4H3",
27163
- key: "1rx37r"
27164
- }]
27165
- ]);
27166
- /**
27167
- * @license lucide-react v0.576.0 - ISC
27168
- *
27169
- * This source code is licensed under the ISC license.
27170
- * See the LICENSE file in the root directory of this source tree.
27171
- */
27172
27120
  var ReplaceAll = require_createLucideIcon.createLucideIcon("replace-all", [
27173
27121
  ["path", {
27174
27122
  d: "M14 14a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1",
@@ -29455,34 +29403,6 @@ var Shrub = require_createLucideIcon.createLucideIcon("shrub", [
29455
29403
  * This source code is licensed under the ISC license.
29456
29404
  * See the LICENSE file in the root directory of this source tree.
29457
29405
  */
29458
- var Shuffle = require_createLucideIcon.createLucideIcon("shuffle", [
29459
- ["path", {
29460
- d: "m18 14 4 4-4 4",
29461
- key: "10pe0f"
29462
- }],
29463
- ["path", {
29464
- d: "m18 2 4 4-4 4",
29465
- key: "pucp1d"
29466
- }],
29467
- ["path", {
29468
- d: "M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",
29469
- key: "1ailkh"
29470
- }],
29471
- ["path", {
29472
- d: "M2 6h1.972a4 4 0 0 1 3.6 2.2",
29473
- key: "km57vx"
29474
- }],
29475
- ["path", {
29476
- d: "M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",
29477
- key: "os18l9"
29478
- }]
29479
- ]);
29480
- /**
29481
- * @license lucide-react v0.576.0 - ISC
29482
- *
29483
- * This source code is licensed under the ISC license.
29484
- * See the LICENSE file in the root directory of this source tree.
29485
- */
29486
29406
  var Sigma = require_createLucideIcon.createLucideIcon("sigma", [["path", {
29487
29407
  d: "M18 7V5a1 1 0 0 0-1-1H6.5a.5.5 0 0 0-.4.8l4.5 6a2 2 0 0 1 0 2.4l-4.5 6a.5.5 0 0 0 .4.8H17a1 1 0 0 0 1-1v-2",
29488
29408
  key: "wuwx1p"
@@ -38957,8 +38877,8 @@ exports.RefreshCwOff = RefreshCwOff;
38957
38877
  exports.Refrigerator = Refrigerator;
38958
38878
  exports.Regex = Regex;
38959
38879
  exports.RemoveFormatting = RemoveFormatting;
38960
- exports.Repeat = Repeat;
38961
- exports.Repeat1 = Repeat1;
38880
+ exports.Repeat = require_index.Repeat;
38881
+ exports.Repeat1 = require_index.Repeat1;
38962
38882
  exports.Repeat2 = Repeat2;
38963
38883
  exports.Replace = Replace;
38964
38884
  exports.ReplaceAll = ReplaceAll;
@@ -39063,7 +38983,7 @@ exports.Shredder = Shredder;
39063
38983
  exports.Shrimp = Shrimp;
39064
38984
  exports.Shrink = Shrink;
39065
38985
  exports.Shrub = Shrub;
39066
- exports.Shuffle = Shuffle;
38986
+ exports.Shuffle = require_index.Shuffle;
39067
38987
  exports.Sigma = Sigma;
39068
38988
  exports.Signal = Signal;
39069
38989
  exports.SignalHigh = SignalHigh;
@@ -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 Ship, $n as CloudSnow, $r as Activity, $t as Lock, A as Trash2, An as FlashlightOff, Ar as Bot, At as Phone, B as Sunrise, Bn as Droplets, Br as BatteryLow, Bt as MoveHorizontal, C as Unlink2, Cn as Grid2x2, Cr as Cast, Ct as PowerOff, D as TriangleAlert, Dn as Funnel, Dr as Bus, Dt as Plane, E as Truck, En as Gamepad2, Er as Cable, Et as Play, F as Timer, Fn as Eye, Fr as Bell, Ft as Network, G as Sprout, Gn as Dog, Gr as ArrowUp, Gt as Minimize2, H as SunMedium, Hn as Download, Hr as Bath, Ht as Moon, I as TimerOff, In as EyeOff, Ir as BellRing, It as Navigation, J as Smartphone, Jn as Cpu, Jr as ArrowLeft, Jt as Menu, K as Sparkles, Kn as Database, Kr as ArrowUpToLine, Kt as Mic, L as Thermometer, Ln as ExternalLink, Lr as Battery, Lt as Music, M as Tractor, Mn as Film, Mr as Blinds, Mt as PawPrint, N as ToggleRight, Nn as Feather, Nr as Bird, Nt as Pause, O as TrendingDown, On as Footprints, Or as Bug, Ot as Pipette, P as ToggleLeft, Pn as Fan, Pr as Bike, Pt as Package, Q as Siren, Qn as CloudSun, Qr as AirVent, Qt as Mail, R as Target, Rn as Eraser, Rr as BatteryWarning, Rt as Move, S as Upload, Sn as GripHorizontal, Sr as Cat, St as Power, T as Type, Tn as Gauge, Tr as Camera, Tt as Plus, U as Star, Un as DoorOpen, Ur as Ban, Ut as MonitorPlay, V as Sun, Vn as Droplet, Vr as BatteryFull, Vt as MousePointerClick, W as Square, Wn as DoorClosed, Wr as Baby, Wt as Minus, X as SkipForward, Xn as Cog, Xr as ArrowDownToLine, Xt as Maximize2, Y as SlidersHorizontal, Yn as Copy, Yr as ArrowDown, Yt as Megaphone, Z as SkipBack, Zn as Cloud, Zr as AlarmSmoke, Zt as MapPin, _ as Vibrate, _n as Heater, _r as ChevronRight, _t as Radio, a as Wrench, an as Link2, ar as CircleX, at as Settings, b as User, bn as Hand, br as Check, bt as QrCode, c as Wifi, cr as CirclePlus, ct as ScrollText, d as WifiLow, dn as Info, dr as CircleCheck, dt as Sailboat, en as LockOpen, er as CloudRain, et as Shield, f as WifiHigh, fn as Inbox, fr as CircleCheckBig, ft as Router, g as Volume2, gn as History, gr as ChevronUp, gt as RefreshCw, h as VolumeX, hn as House, hr as ChevronsDownUp, ht as RotateCcw, i as X, in as ListChecks, ir as Clapperboard, it as Share2, j as TrainFront, jn as Flame, jr as Bone, jt as Pencil, k as TrendingUp, kn as Flashlight, kr as Box, kt as Pin, l as WifiZero, ln as LayoutGrid, lr as CirclePause, lt as Scan, m as WashingMachine, mn as ImageOff, mr as ChevronsUpDown, mt as RotateCw, n as ZoomIn, nn as LoaderCircle, nr as CloudFog, nt as ShieldCheck, o as Workflow, on as Lightbulb, or as CircleStop, ot as Server, p as Waves, pn as Image, pr as CircleAlert, pt as Route, q as Snowflake, qn as Crosshair, qr as ArrowRight, qt as MessageSquare, r as Zap, rn as List, rr as Clock, rt as ShieldAlert, s as Wind, sn as Leaf, sr as CircleQuestionMark, st as Search, t as ZoomOut, tn as LocateFixed, tr as CloudLightning, tt as ShieldOff, u as WifiOff, un as Laugh, ur as CircleDot, ut as Save, v as UtensilsCrossed, vn as Hash, vr as ChevronLeft, vt as RadioTower, w as Undo2, wn as GraduationCap, wr as Car, wt as Plug, x as UserCheck, xn as Hammer, xr as ChartLine, xt as Puzzle, y as Users, yn as HardDrive, yr as ChevronDown, yt as Radar, z as Tag, zn as EllipsisVertical, zr as BatteryMedium, zt as MoveVertical } from "./index.js";
4
+ import { $ as Shuffle, $n as Cog, $r as ArrowDownToLine, $t as Maximize2, A as Trash2, An as Funnel, Ar as Bus, At as Plane, B as Sunrise, Bn as ExternalLink, Br as Battery, Bt as Music, C as Unlink2, Cn as Hand, Cr as Check, Ct as QrCode, D as TriangleAlert, Dn as GraduationCap, Dr as Car, Dt as Plug, E as Truck, En as Grid2x2, Er as Cast, Et as PowerOff, F as Timer, Fn as Film, Fr as Blinds, Ft as PawPrint, G as Sprout, Gn as Download, Gr as Bath, Gt as Moon, H as SunMedium, Hn as EllipsisVertical, Hr as BatteryMedium, Ht as MoveVertical, I as TimerOff, In as Feather, Ir as Bird, It as Pause, J as Smartphone, Jn as Dog, Jr as ArrowUp, Jt as Minimize2, K as Sparkles, Kn as DoorOpen, Kr as Ban, Kt as MonitorPlay, L as Thermometer, Ln as Fan, Lr as Bike, Lt as Package, M as Tractor, Mn as Flashlight, Mr as Box, Mt as Pin, N as ToggleRight, Nn as FlashlightOff, Nr as Bot, Nt as Phone, O as TrendingDown, On as Gauge, Or as Camera, Ot as Plus, P as ToggleLeft, Pn as Flame, Pr as Bone, Pt as Pencil, Q as Siren, Qn as Copy, Qr as ArrowDown, Qt as Megaphone, R as Target, Rn as Eye, Rr as Bell, Rt as Network, S as Upload, Sn as HardDrive, Sr as ChevronDown, St as Radar, T as Type, Tn as GripHorizontal, Tr as Cat, Tt as Power, U as Star, Un as Droplets, Ur as BatteryLow, Ut as MoveHorizontal, V as Sun, Vn as Eraser, Vr as BatteryWarning, Vt as Move, W as Square, Wn as Droplet, Wr as BatteryFull, Wt as MousePointerClick, X as SkipForward, Xn as Crosshair, Xr as ArrowRight, Xt as MessageSquare, Y as SlidersHorizontal, Yn as Database, Yr as ArrowUpToLine, Yt as Mic, Z as SkipBack, Zn as Cpu, Zr as ArrowLeft, Zt as Menu, _ as Vibrate, _n as ImageOff, _r as ChevronsUpDown, _t as Repeat, a as Wrench, an as LoaderCircle, ar as CloudFog, at as Share2, b as User, bn as Heater, br as ChevronRight, bt as Radio, c as Wifi, cr as CircleX, ct as Search, d as WifiLow, dn as Leaf, dr as CirclePlus, dt as Save, ei as AlarmSmoke, en as MapPin, er as Cloud, et as Ship, f as WifiHigh, fn as LayoutGrid, fr as CirclePause, ft as Sailboat, g as Volume2, gn as Image, gr as CircleAlert, gt as RotateCcw, h as VolumeX, hn as Inbox, hr as CircleCheckBig, ht as RotateCw, i as X, in as LocateFixed, ir as CloudLightning, it as ShieldAlert, j as TrainFront, jn as Footprints, jr as Bug, jt as Pipette, k as TrendingUp, kn as Gamepad2, kr as Cable, kt as Play, l as WifiZero, ln as Link2, lr as CircleStop, lt as ScrollText, m as WashingMachine, mn as Info, mr as CircleCheck, mt as Route, n as ZoomIn, ni as Activity, nn as Lock, nr as CloudSnow, nt as ShieldOff, o as Workflow, on as List, or as Clock, ot as Settings, p as Waves, pn as Laugh, pr as CircleDot, pt as Router, q as Snowflake, qn as DoorClosed, qr as Baby, qt as Minus, r as Zap, rn as LockOpen, rr as CloudRain, rt as ShieldCheck, s as Wind, sn as ListChecks, sr as Clapperboard, st as Server, t as ZoomOut, ti as AirVent, tn as Mail, tr as CloudSun, tt as Shield, u as WifiOff, un as Lightbulb, ur as CircleQuestionMark, ut as Scan, v as UtensilsCrossed, vn as House, vr as ChevronsDownUp, vt as Repeat1, w as Undo2, wn as Hammer, wr as ChartLine, wt as Puzzle, x as UserCheck, xn as Hash, xr as ChevronLeft, xt as RadioTower, y as Users, yn as History, yr as ChevronUp, yt as RefreshCw, z as Tag, zn as EyeOff, zr as BellRing, zt as Navigation } from "./index.js";
5
5
  /**
6
6
  * @license lucide-react v0.576.0 - ISC
7
7
  *
@@ -27093,34 +27093,6 @@ var RemoveFormatting = createLucideIcon("remove-formatting", [
27093
27093
  * This source code is licensed under the ISC license.
27094
27094
  * See the LICENSE file in the root directory of this source tree.
27095
27095
  */
27096
- var Repeat1 = createLucideIcon("repeat-1", [
27097
- ["path", {
27098
- d: "m17 2 4 4-4 4",
27099
- key: "nntrym"
27100
- }],
27101
- ["path", {
27102
- d: "M3 11v-1a4 4 0 0 1 4-4h14",
27103
- key: "84bu3i"
27104
- }],
27105
- ["path", {
27106
- d: "m7 22-4-4 4-4",
27107
- key: "1wqhfi"
27108
- }],
27109
- ["path", {
27110
- d: "M21 13v1a4 4 0 0 1-4 4H3",
27111
- key: "1rx37r"
27112
- }],
27113
- ["path", {
27114
- d: "M11 10h1v4",
27115
- key: "70cz1p"
27116
- }]
27117
- ]);
27118
- /**
27119
- * @license lucide-react v0.576.0 - ISC
27120
- *
27121
- * This source code is licensed under the ISC license.
27122
- * See the LICENSE file in the root directory of this source tree.
27123
- */
27124
27096
  var Repeat2 = createLucideIcon("repeat-2", [
27125
27097
  ["path", {
27126
27098
  d: "m2 9 3-3 3 3",
@@ -27145,30 +27117,6 @@ var Repeat2 = createLucideIcon("repeat-2", [
27145
27117
  * This source code is licensed under the ISC license.
27146
27118
  * See the LICENSE file in the root directory of this source tree.
27147
27119
  */
27148
- var Repeat = createLucideIcon("repeat", [
27149
- ["path", {
27150
- d: "m17 2 4 4-4 4",
27151
- key: "nntrym"
27152
- }],
27153
- ["path", {
27154
- d: "M3 11v-1a4 4 0 0 1 4-4h14",
27155
- key: "84bu3i"
27156
- }],
27157
- ["path", {
27158
- d: "m7 22-4-4 4-4",
27159
- key: "1wqhfi"
27160
- }],
27161
- ["path", {
27162
- d: "M21 13v1a4 4 0 0 1-4 4H3",
27163
- key: "1rx37r"
27164
- }]
27165
- ]);
27166
- /**
27167
- * @license lucide-react v0.576.0 - ISC
27168
- *
27169
- * This source code is licensed under the ISC license.
27170
- * See the LICENSE file in the root directory of this source tree.
27171
- */
27172
27120
  var ReplaceAll = createLucideIcon("replace-all", [
27173
27121
  ["path", {
27174
27122
  d: "M14 14a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1",
@@ -29455,34 +29403,6 @@ var Shrub = createLucideIcon("shrub", [
29455
29403
  * This source code is licensed under the ISC license.
29456
29404
  * See the LICENSE file in the root directory of this source tree.
29457
29405
  */
29458
- var Shuffle = createLucideIcon("shuffle", [
29459
- ["path", {
29460
- d: "m18 14 4 4-4 4",
29461
- key: "10pe0f"
29462
- }],
29463
- ["path", {
29464
- d: "m18 2 4 4-4 4",
29465
- key: "pucp1d"
29466
- }],
29467
- ["path", {
29468
- d: "M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",
29469
- key: "1ailkh"
29470
- }],
29471
- ["path", {
29472
- d: "M2 6h1.972a4 4 0 0 1 3.6 2.2",
29473
- key: "km57vx"
29474
- }],
29475
- ["path", {
29476
- d: "M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",
29477
- key: "os18l9"
29478
- }]
29479
- ]);
29480
- /**
29481
- * @license lucide-react v0.576.0 - ISC
29482
- *
29483
- * This source code is licensed under the ISC license.
29484
- * See the LICENSE file in the root directory of this source tree.
29485
- */
29486
29406
  var Sigma = createLucideIcon("sigma", [["path", {
29487
29407
  d: "M18 7V5a1 1 0 0 0-1-1H6.5a.5.5 0 0 0-.4.8l4.5 6a2 2 0 0 1 0 2.4l-4.5 6a.5.5 0 0 0 .4.8H17a1 1 0 0 0 1-1v-2",
29488
29408
  key: "wuwx1p"