@glasshome/widget-sdk 1.21.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +408 -404
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -2,14 +2,14 @@ import { deprecate as e, deprecations as t, formatDeprecation as n } from "./dep
2
2
  import { WidgetManifestSchema as r, formatSchemaError as i } from "./schemas.js";
3
3
  import { z as a, z as o } from "zod";
4
4
  import { getForecasts as s, getStream as c, getWebRtcClientConfig as l, hassMediaUrl as u, sendWebRtcCandidate as d, startWebRtcSession as f, state as p, trackEntityHistory as m, untrackEntityHistory as h } from "@glasshome/sync-layer";
5
- import { byDomain as ee, useArea as g, useCalendarEvents as _, useCamera as v, useConnection as y, useCurrency as b, useEntities as x, useEntity as te, useEntity as S, useEntityHistory as ne, useEntityStatistics as re, useForecast as ie, useHassConfig as ae, useLocale as oe, useService as se, useStore as ce, useTemperatureUnit as le, useToggle as ue, useTurnOff as de, useTurnOn as fe, useUnitSystem as pe } from "@glasshome/sync-layer/solid";
6
- import { For as C, Show as w, children as me, createContext as he, createEffect as T, createMemo as E, createSignal as D, on as ge, onCleanup as O, onMount as _e, splitProps as ve, useContext as k } from "solid-js";
7
- import { addEventListener as A, className as j, createComponent as M, delegateEvents as ye, effect as N, insert as P, memo as F, setAttribute as I, setStyleProperty as L, style as R, template as z, use as B } from "solid-js/web";
8
- import { Accordion as be, AccordionContent as xe, AccordionItem as Se, AccordionTrigger as Ce, Badge as we, Badge as Te, Button as Ee, Button as De, ButtonGroup as Oe, ButtonGroup as ke, Carousel as Ae, CarouselContent as je, CarouselDots as Me, CarouselItem as Ne, CarouselNext as Pe, CarouselPrevious as Fe, ColorDisc as Ie, ColorSlider as Le, ColorWheel as Re, CountPill as ze, CountPill as Be, Empty as Ve, EmptyDescription as He, EmptyHeader as Ue, EmptyTitle as We, FactRow as V, FieldGroup as Ge, FieldTitle as Ke, HOLD_GRACE_MS as qe, HOLD_MS as Je, Icon as Ye, Icon as H, Input as Xe, Label as Ze, Popover as Qe, PopoverContent as $e, Progress as et, ResponsiveDialog as tt, ResponsiveDialogBody as nt, ResponsiveDialogBody as rt, ResponsiveDialogClose as it, ResponsiveDialogContent as at, ResponsiveDialogDescription as ot, ResponsiveDialogFooter as st, ResponsiveDialogFooter as ct, ResponsiveDialogHeader as lt, ResponsiveDialogTitle as ut, SchemaForm as dt, SectionIcon as ft, SectionIcon as pt, SectionMeta as mt, SectionRow as ht, SectionTitle as gt, Select as _t, SelectContent as vt, SelectItem as yt, SelectTrigger as bt, SelectValue as xt, Slider as St, SwatchPicker as Ct, Switch as wt, Tabs as Tt, Tabs as Et, TabsContent as Dt, TabsContent as Ot, TabsList as kt, TabsList as At, TabsTrigger as jt, TabsTrigger as Mt, TemperatureBar as Nt, Toggle as Pt, ToggleGroup as Ft, ToggleGroup as It, ToggleGroupItem as Lt, ToggleGroupItem as Rt, buttonVariants as zt, imagePreset as Bt, imagePreset as Vt, imageUrl as Ht, imageUrl as Ut, mediaUrl as Wt, parseColor as Gt, presetValue as Kt } from "@glasshome/ui/solid";
9
- import { clsx as qt } from "clsx";
10
- import { twMerge as Jt } from "tailwind-merge";
5
+ import { byDomain as g, useArea as _, useCalendarEvents as v, useCamera as y, useConnection as b, useCurrency as x, useEntities as S, useEntity as ee, useEntity as C, useEntityHistory as w, useEntityStatistics as te, useForecast as ne, useHassConfig as re, useLocale as ie, useService as ae, useStore as oe, useTemperatureUnit as se, useToggle as ce, useTurnOff as le, useTurnOn as ue, useUnitSystem as de } from "@glasshome/sync-layer/solid";
6
+ import { For as T, Show as E, children as fe, createContext as pe, createEffect as D, createMemo as O, createSignal as k, on as me, onCleanup as A, onMount as he, splitProps as ge, useContext as j } from "solid-js";
7
+ import { addEventListener as M, className as N, createComponent as P, delegateEvents as _e, effect as F, insert as I, memo as L, setAttribute as R, setStyleProperty as z, style as B, template as V, use as H } from "solid-js/web";
8
+ import { Accordion as ve, AccordionContent as ye, AccordionItem as be, AccordionTrigger as xe, Badge as Se, Badge as Ce, Button as we, Button as Te, ButtonGroup as Ee, ButtonGroup as De, Carousel as Oe, CarouselContent as ke, CarouselDots as Ae, CarouselItem as je, CarouselNext as Me, CarouselPrevious as Ne, ColorDisc as Pe, ColorSlider as Fe, ColorWheel as Ie, CountPill as Le, CountPill as Re, Empty as ze, EmptyDescription as Be, EmptyHeader as Ve, EmptyTitle as He, FactRow as Ue, FieldGroup as We, FieldTitle as Ge, HOLD_GRACE_MS as Ke, HOLD_MS as qe, Icon as Je, Icon as U, Input as Ye, Label as Xe, Popover as Ze, PopoverContent as Qe, Progress as $e, ResponsiveDialog as et, ResponsiveDialogBody as tt, ResponsiveDialogBody as nt, ResponsiveDialogClose as rt, ResponsiveDialogContent as it, ResponsiveDialogDescription as at, ResponsiveDialogFooter as ot, ResponsiveDialogFooter as st, ResponsiveDialogHeader as ct, ResponsiveDialogTitle as lt, SchemaForm as ut, SectionIcon as dt, SectionIcon as ft, SectionMeta as pt, SectionRow as mt, SectionTitle as ht, Select as gt, SelectContent as _t, SelectItem as vt, SelectTrigger as yt, SelectValue as bt, Slider as xt, SwatchPicker as St, Switch as Ct, Tabs as wt, Tabs as Tt, TabsContent as Et, TabsContent as Dt, TabsList as Ot, TabsList as kt, TabsTrigger as At, TabsTrigger as jt, TemperatureBar as Mt, Toggle as Nt, ToggleGroup as Pt, ToggleGroup as Ft, ToggleGroupItem as It, ToggleGroupItem as Lt, buttonVariants as Rt, imagePreset as zt, imagePreset as Bt, imageUrl as Vt, imageUrl as Ht, mediaUrl as Ut, parseColor as Wt, presetValue as Gt } from "@glasshome/ui/solid";
9
+ import { clsx as Kt } from "clsx";
10
+ import { twMerge as qt } from "tailwind-merge";
11
11
  //#region src/framework/to-form-schema.ts
12
- function Yt(e) {
12
+ function Jt(e) {
13
13
  return o.toJSONSchema(e, { override: (e) => {
14
14
  let t = o.globalRegistry.get(e.zodSchema);
15
15
  return t && typeof t == "object" && Object.keys(t).length > 0 ? {
@@ -18,7 +18,7 @@ function Yt(e) {
18
18
  } : e.jsonSchema;
19
19
  } });
20
20
  }
21
- function Xt(e) {
21
+ function Yt(e) {
22
22
  try {
23
23
  return e.parse({});
24
24
  } catch {
@@ -27,49 +27,49 @@ function Xt(e) {
27
27
  }
28
28
  //#endregion
29
29
  //#region src/define-widget.ts
30
- function Zt(e) {
31
- return e.configSchema && (e.manifest.schema || (e.manifest.schema = Yt(e.configSchema)), e.manifest.defaultConfig || (e.manifest.defaultConfig = Xt(e.configSchema))), e;
30
+ function Xt(e) {
31
+ return e.configSchema && (e.manifest.schema || (e.manifest.schema = Jt(e.configSchema)), e.manifest.defaultConfig || (e.manifest.defaultConfig = Yt(e.configSchema))), e;
32
32
  }
33
33
  //#endregion
34
34
  //#region src/framework/hooks/use-widget-context.ts
35
- var U = he();
36
- function Qt() {
37
- let e = k(U);
35
+ var W = pe();
36
+ function Zt() {
37
+ let e = j(W);
38
38
  if (!e) throw Error("useWidgetContext must be used within a Widget component");
39
39
  return e;
40
40
  }
41
41
  //#endregion
42
42
  //#region src/framework/hooks/use-service.ts
43
- function $t(e) {
43
+ function Qt(e) {
44
44
  let t = Array.isArray(e) ? e[0] : e, n = t?.split(".")[0];
45
45
  if (!n) throw Error(`Invalid entity ID: ${String(t)}`);
46
46
  return n;
47
47
  }
48
- function W(e, t) {
48
+ function $t(e, t) {
49
49
  return async (n, r = {}) => {
50
- await e($t(n), t, r, { entity_id: n });
50
+ await e(Qt(n), t, r, { entity_id: n });
51
51
  };
52
52
  }
53
53
  function en() {
54
- let e = k(U)?.callService;
54
+ let e = j(W)?.callService;
55
55
  return e ? {
56
56
  callService: e,
57
- turnOn: W(e, "turn_on"),
58
- turnOff: W(e, "turn_off"),
59
- toggle: W(e, "toggle")
60
- } : se();
57
+ turnOn: $t(e, "turn_on"),
58
+ turnOff: $t(e, "turn_off"),
59
+ toggle: $t(e, "toggle")
60
+ } : ae();
61
61
  }
62
62
  function tn() {
63
- let e = k(U)?.callService;
64
- return e ? W(e, "turn_on") : fe();
63
+ let e = j(W)?.callService;
64
+ return e ? $t(e, "turn_on") : ue();
65
65
  }
66
66
  function nn() {
67
- let e = k(U)?.callService;
68
- return e ? W(e, "turn_off") : de();
67
+ let e = j(W)?.callService;
68
+ return e ? $t(e, "turn_off") : le();
69
69
  }
70
70
  function rn() {
71
- let e = k(U)?.callService;
72
- return e ? W(e, "toggle") : ue();
71
+ let e = j(W)?.callService;
72
+ return e ? $t(e, "toggle") : ce();
73
73
  }
74
74
  //#endregion
75
75
  //#region src/framework/design-system/z-index.ts
@@ -80,10 +80,10 @@ var an = {
80
80
  ACTIONS: 30
81
81
  }, G = /* @__PURE__ */ new WeakMap();
82
82
  function on(e = "controls") {
83
- let [t, n] = D(!1), [r, i] = D(e), a = (t) => {
83
+ let [t, n] = k(!1), [r, i] = k(e), a = (t) => {
84
84
  i(t ?? e), n(!0);
85
- }, o = k(U);
86
- return o?.registerDialogOpener?.(a), o && G.set(o, a), O(() => {
85
+ }, o = j(W);
86
+ return o?.registerDialogOpener?.(a), o && G.set(o, a), A(() => {
87
87
  o?.registerDialogOpener?.(null), o && G.get(o) === a && G.delete(o);
88
88
  }), {
89
89
  showDialog: t,
@@ -114,7 +114,7 @@ function un(e) {
114
114
  if (!e) return;
115
115
  let t = ln(e), n = sn.get(t);
116
116
  if (!n) {
117
- let [e, r] = D(!1), [i, a] = D(), [o, s] = D(), [c, l] = D(), [u, d] = D(!1);
117
+ let [e, r] = k(!1), [i, a] = k(), [o, s] = k(), [c, l] = k(), [u, d] = k(!1);
118
118
  n = {
119
119
  hasSheet: e,
120
120
  setHasSheet: r,
@@ -276,7 +276,7 @@ var En = {
276
276
  }
277
277
  }, Dn = "button, a, input, select, textarea, [role=\"slider\"], [role=\"radio\"], [role=\"switch\"]";
278
278
  function On(e, t) {
279
- let n = k(U), r = un(n), i = () => {
279
+ let n = j(W), r = un(n), i = () => {
280
280
  let t = e();
281
281
  return t.hold || !n ? t : {
282
282
  ...t,
@@ -294,7 +294,7 @@ function On(e, t) {
294
294
  holdTimer: null,
295
295
  graceTimer: null,
296
296
  element: null
297
- }, [o, s] = D(null), c = null, l = null, u = null, [d, f] = D(null);
297
+ }, [o, s] = k(null), c = null, l = null, u = null, [d, f] = k(null);
298
298
  function p(e) {
299
299
  e !== l && (u && u.disconnect(), u = new ResizeObserver((e) => {
300
300
  let t = e[0];
@@ -323,16 +323,16 @@ function On(e, t) {
323
323
  capture: !0,
324
324
  once: !0
325
325
  });
326
- }, ee = () => {
326
+ }, g = () => {
327
327
  a.isDown = !1, a.hasMoved = !1, a.sliding = !1, a.holdOnly = !1;
328
- }, g = (e) => {
328
+ }, _ = (e) => {
329
329
  let n = i().slide;
330
330
  return n?.orientation === "horizontal" ? "horizontal" : n?.orientation === "vertical" ? "vertical" : e && (c || p(e), c) ? c.height > c.width ? "vertical" : "horizontal" : (t?.() ?? "horizontal") === "horizontal" ? "horizontal" : "vertical";
331
- }, _ = (e) => {
331
+ }, v = (e) => {
332
332
  let t = i(), r = e.target instanceof Element ? e.target.closest(`${Dn}, .glasshome-widget-controls`) : null, o = r !== null && r !== e.currentTarget;
333
333
  if (!(o ? !t.hold : !t.tap && !t.hold && !t.slide)) {
334
334
  if (a.isDown = !0, a.holdOnly = o, a.isTouch = e.pointerType === "touch", a.element = e.currentTarget, p(a.element), a.startX = e.clientX, a.startY = e.clientY, a.startTime = Date.now(), a.hasMoved = !1, a.sliding = !1, t.hold) {
335
- let r = t.hold.delay ?? Je, i = a.element.getBoundingClientRect(), o = e.clientX - i.left, c = e.clientY - i.top, l = Math.hypot(Math.max(o, i.width - o), Math.max(c, i.height - c));
335
+ let r = t.hold.delay ?? qe, i = a.element.getBoundingClientRect(), o = e.clientX - i.left, c = e.clientY - i.top, l = Math.hypot(Math.max(o, i.width - o), Math.max(c, i.height - c));
336
336
  a.graceTimer = setTimeout(() => {
337
337
  a.graceTimer = null, s({
338
338
  x: o,
@@ -340,7 +340,7 @@ function On(e, t) {
340
340
  r: l,
341
341
  fired: !1
342
342
  });
343
- }, Math.min(qe, r)), a.holdTimer = setTimeout(() => {
343
+ }, Math.min(Ke, r)), a.holdTimer = setTimeout(() => {
344
344
  a.holdTimer = null, a.isDown && !a.hasMoved && (s((e) => e && {
345
345
  ...e,
346
346
  fired: !0
@@ -351,11 +351,11 @@ function On(e, t) {
351
351
  e.currentTarget.setPointerCapture(e.pointerId);
352
352
  } catch {}
353
353
  }
354
- }, v = (e) => {
354
+ }, y = (e) => {
355
355
  if (!a.isDown) return;
356
356
  let t = i(), n = e.clientX - a.startX, r = e.clientY - a.startY;
357
357
  if (Math.sqrt(n * n + r * r) > 10 && (m(), a.hasMoved = !0), t.slide && a.hasMoved && !a.holdOnly) {
358
- let i = e.currentTarget, o = g(i);
358
+ let i = e.currentTarget, o = _(i);
359
359
  if (a.isTouch && !a.sliding && Math.abs(o === "vertical" ? r : n) < Math.abs(o === "vertical" ? n : r)) return;
360
360
  a.sliding = !0;
361
361
  let s = t.slide.min ?? 0, l = t.slide.max ?? 100, u = l - s, d = o === "vertical" ? -r : n, f = c ?? {
@@ -364,20 +364,20 @@ function On(e, t) {
364
364
  }, p = d / (o === "vertical" ? f.height : f.width) * u, m = Math.max(s, Math.min(l, t.slide.value + p));
365
365
  t.slide.onChange(Math.round(m)), a.startX = e.clientX, a.startY = e.clientY, e.preventDefault();
366
366
  }
367
- }, y = (e) => {
368
- let t = i(), n = a.isDown, r = Date.now() - a.startTime, o = t.hold?.delay ?? Je;
367
+ }, b = (e) => {
368
+ let t = i(), n = a.isDown, r = Date.now() - a.startTime, o = t.hold?.delay ?? qe;
369
369
  m(), n && t.tap && !a.hasMoved && !a.holdOnly && r < o && t.tap();
370
370
  try {
371
371
  e.currentTarget.releasePointerCapture(e.pointerId);
372
372
  } catch {}
373
- ee();
374
- }, b = (e) => {
373
+ g();
374
+ }, x = (e) => {
375
375
  m();
376
376
  try {
377
377
  e.currentTarget.releasePointerCapture(e.pointerId);
378
378
  } catch {}
379
- ee();
380
- }, x = (e) => {
379
+ g();
380
+ }, S = (e) => {
381
381
  let t = i();
382
382
  if (t.slide) {
383
383
  let n = t.slide.orientation;
@@ -391,13 +391,13 @@ function On(e, t) {
391
391
  let t = i();
392
392
  (e.key === "Enter" || e.key === " ") && t.tap ? (e.preventDefault(), t.tap()) : (e.key === "ContextMenu" || e.shiftKey && e.key === "F10") && t.hold && (e.preventDefault(), t.hold.action(), n?.onHeld?.());
393
393
  },
394
- onPointerDown: _,
395
- onPointerMove: v,
396
- onPointerUp: y,
397
- onPointerCancel: b,
394
+ onPointerDown: v,
395
+ onPointerMove: y,
396
+ onPointerUp: b,
397
+ onPointerCancel: x,
398
398
  onPointerEnter: (e) => {
399
399
  let t = e.currentTarget;
400
- a.element = t, t.style.cursor = x(t);
400
+ a.element = t, t.style.cursor = S(t);
401
401
  },
402
402
  bindElement: (e) => {
403
403
  e && (a.element = e, p(e));
@@ -419,9 +419,9 @@ function On(e, t) {
419
419
  }
420
420
  //#endregion
421
421
  //#region src/framework/hooks/use-widget-dimensions.ts
422
- var kn = he();
422
+ var kn = pe();
423
423
  function An() {
424
- let e = k(kn);
424
+ let e = j(kn);
425
425
  if (!e) throw Error("useWidgetDimensions must be called inside <Widget>: move the call into a component rendered within <Widget> (the top-level widget scope only sees the host stub).");
426
426
  return e;
427
427
  }
@@ -429,8 +429,8 @@ function An() {
429
429
  //#region src/framework/hooks/use-confirm.ts
430
430
  var jn = 1600;
431
431
  function Mn() {
432
- let [e, t] = D(/* @__PURE__ */ new Set()), n;
433
- return O(() => clearTimeout(n)), {
432
+ let [e, t] = k(/* @__PURE__ */ new Set()), n;
433
+ return A(() => clearTimeout(n)), {
434
434
  has: (t) => e().has(t),
435
435
  any: () => e().size > 0,
436
436
  run: async (e, r) => {
@@ -446,32 +446,32 @@ function Mn() {
446
446
  //#endregion
447
447
  //#region src/framework/utils/cn.ts
448
448
  function J(...e) {
449
- return Jt(qt(e));
449
+ return qt(Kt(e));
450
450
  }
451
451
  //#endregion
452
452
  //#region src/framework/components/WidgetIcon.tsx
453
- var Nn = /*#__PURE__*/ z("<div class=\"glasshome-widget-icon glasshome-widget-icon-stack glasshome-widget-icon-stack-2 glass glass-tint\">"), Pn = /*#__PURE__*/ z("<div class=\"glasshome-widget-icon glasshome-widget-icon-stack glasshome-widget-icon-stack-3 glass glass-tint\">"), Fn = /*#__PURE__*/ z("<div><div class=\"glasshome-widget-icon-glyph flex items-center justify-center\">");
453
+ var Nn = /*#__PURE__*/ V("<div class=\"glasshome-widget-icon glasshome-widget-icon-stack glasshome-widget-icon-stack-2 glass glass-tint\">"), Pn = /*#__PURE__*/ V("<div class=\"glasshome-widget-icon glasshome-widget-icon-stack glasshome-widget-icon-stack-3 glass glass-tint\">"), Fn = /*#__PURE__*/ V("<div><div class=\"glasshome-widget-icon-glyph flex items-center justify-center\">");
454
454
  function In(e) {
455
455
  let t = () => e.entityCount ?? 1;
456
456
  return (() => {
457
457
  var n = Fn(), r = n.firstChild;
458
- return P(n, M(w, {
458
+ return I(n, P(E, {
459
459
  get when() {
460
460
  return t() >= 2;
461
461
  },
462
462
  get children() {
463
463
  return Nn();
464
464
  }
465
- }), r), P(n, M(w, {
465
+ }), r), I(n, P(E, {
466
466
  get when() {
467
467
  return t() >= 3;
468
468
  },
469
469
  get children() {
470
470
  return Pn();
471
471
  }
472
- }), r), P(r, () => e.icon), N((t) => {
472
+ }), r), I(r, () => e.icon), F((t) => {
473
473
  var r = J("glasshome-widget-icon glass glass-tint", "pointer-events-none relative flex shrink-0 items-center justify-center transition-all", e.dimmed && "opacity-50", e.class), i = e.color ? { "--widget-icon-color": e.color } : void 0;
474
- return r !== t.e && j(n, t.e = r), t.t = R(n, i, t.t), t;
474
+ return r !== t.e && N(n, t.e = r), t.t = B(n, i, t.t), t;
475
475
  }, {
476
476
  e: void 0,
477
477
  t: void 0
@@ -480,26 +480,26 @@ function In(e) {
480
480
  }
481
481
  //#endregion
482
482
  //#region src/framework/components/anatomy.tsx
483
- var Ln = /*#__PURE__*/ z("<span class=glasshome-widget-eyebrow>"), Rn = /*#__PURE__*/ z("<div class=glasshome-widget-head-aside>"), zn = /*#__PURE__*/ z("<div class=glasshome-widget-head><div class=glasshome-widget-head-text><span class=glasshome-widget-name>"), Bn = /*#__PURE__*/ z("<span class=glasshome-widget-sub>"), Vn = /*#__PURE__*/ z("<span class=glasshome-widget-unit>"), Hn = /*#__PURE__*/ z("<div class=glasshome-widget-art>"), Un = /*#__PURE__*/ z("<div><div class=glasshome-widget-reading><span class=glasshome-widget-reading-value>"), Wn = /*#__PURE__*/ z("<div class=glasshome-widget-controls>"), Gn = /*#__PURE__*/ z("<div>"), Kn = /*#__PURE__*/ z("<div class=glasshome-widget-backdrop>"), qn = /*#__PURE__*/ z("<div class=glasshome-widget-glyph aria-hidden=true>"), Jn = he(() => !1), Yn = "mdi:check";
483
+ var Ln = /*#__PURE__*/ V("<span class=glasshome-widget-eyebrow>"), Rn = /*#__PURE__*/ V("<div class=glasshome-widget-head-aside>"), zn = /*#__PURE__*/ V("<div class=glasshome-widget-head><div class=glasshome-widget-head-text><span class=glasshome-widget-name>"), Bn = /*#__PURE__*/ V("<span class=glasshome-widget-sub>"), Vn = /*#__PURE__*/ V("<span class=glasshome-widget-unit>"), Hn = /*#__PURE__*/ V("<div class=glasshome-widget-art>"), Un = /*#__PURE__*/ V("<div><div class=glasshome-widget-reading><span class=glasshome-widget-reading-value>"), Wn = /*#__PURE__*/ V("<div class=glasshome-widget-controls>"), Gn = /*#__PURE__*/ V("<div>"), Kn = /*#__PURE__*/ V("<div class=glasshome-widget-backdrop>"), qn = /*#__PURE__*/ V("<div class=glasshome-widget-glyph aria-hidden=true>"), Jn = pe(() => !1), Yn = "mdi:check";
484
484
  function Xn(e) {
485
- let t = k(Jn), n = un(k(U));
486
- T(() => n?.setIcon(e.icon)), O(() => {
485
+ let t = j(Jn), n = un(j(W));
486
+ D(() => n?.setIcon(e.icon)), A(() => {
487
487
  n?.icon() === e.icon && n?.setIcon(void 0);
488
488
  });
489
- let r = me(() => e.eyebrow), i = me(() => e.aside), a = () => {
489
+ let r = fe(() => e.eyebrow), i = fe(() => e.aside), a = () => {
490
490
  let t = r();
491
491
  return typeof t == "string" && typeof e.name == "string" && t.trim().toLowerCase() === e.name.trim().toLowerCase();
492
492
  };
493
493
  return (() => {
494
494
  var n = zn(), o = n.firstChild, s = o.firstChild;
495
- return P(n, M(w, {
495
+ return I(n, P(E, {
496
496
  get when() {
497
497
  return e.icon;
498
498
  },
499
- children: (n) => M(In, {
499
+ children: (n) => P(In, {
500
500
  get icon() {
501
- return M(H, { get icon() {
502
- return F(() => !!t())() ? Yn : n();
501
+ return P(U, { get icon() {
502
+ return L(() => !!t())() ? Yn : n();
503
503
  } });
504
504
  },
505
505
  get entityCount() {
@@ -510,56 +510,56 @@ function Xn(e) {
510
510
  },
511
511
  class: "glasshome-widget-head-icon"
512
512
  })
513
- }), o), P(o, M(w, {
513
+ }), o), I(o, P(E, {
514
514
  get when() {
515
- return F(() => !!r())() && !a();
515
+ return L(() => !!r())() && !a();
516
516
  },
517
517
  get children() {
518
518
  var e = Ln();
519
- return P(e, r), e;
519
+ return I(e, r), e;
520
520
  }
521
- }), s), P(s, () => e.name), P(n, M(w, {
521
+ }), s), I(s, () => e.name), I(n, P(E, {
522
522
  get when() {
523
523
  return i();
524
524
  },
525
525
  get children() {
526
526
  var e = Rn();
527
- return P(e, i), e;
527
+ return I(e, i), e;
528
528
  }
529
529
  }), null), n;
530
530
  })();
531
531
  }
532
532
  function Zn(e) {
533
- let t = me(() => e.sub), n = me(() => e.art), r = E(() => typeof e.value == "string" ? e.value.replace(/[\d\s.,:/%°+\-−]/g, "") : void 0), i = () => typeof e.value == "string" || typeof e.value == "number" ? String(e.value).length + (e.unit ? .5 : 0) : void 0, [a, o] = D();
534
- return T(ge(r, () => o((e) => e === "a" ? "b" : "a"), { defer: !0 })), (() => {
533
+ let t = fe(() => e.sub), n = fe(() => e.art), r = O(() => typeof e.value == "string" ? e.value.replace(/[\d\s.,:/%°+\-−]/g, "") : void 0), i = () => typeof e.value == "string" || typeof e.value == "number" ? String(e.value).length + (e.unit ? .5 : 0) : void 0, [a, o] = k();
534
+ return D(me(r, () => o((e) => e === "a" ? "b" : "a"), { defer: !0 })), (() => {
535
535
  var r = Un(), o = r.firstChild, s = o.firstChild;
536
- return P(o, M(w, {
536
+ return I(o, P(E, {
537
537
  get when() {
538
538
  return t();
539
539
  },
540
540
  get children() {
541
541
  var e = Bn();
542
- return P(e, t), e;
542
+ return I(e, t), e;
543
543
  }
544
- }), s), P(s, () => e.value, null), P(s, M(w, {
544
+ }), s), I(s, () => e.value, null), I(s, P(E, {
545
545
  get when() {
546
546
  return e.unit;
547
547
  },
548
548
  get children() {
549
549
  var t = Vn();
550
- return P(t, () => e.unit), N(() => I(t, "data-degree", e.unit === "°" || void 0)), t;
550
+ return I(t, () => e.unit), F(() => R(t, "data-degree", e.unit === "°" || void 0)), t;
551
551
  }
552
- }), null), P(r, M(w, {
552
+ }), null), I(r, P(E, {
553
553
  get when() {
554
554
  return n();
555
555
  },
556
556
  get children() {
557
557
  var e = Hn();
558
- return P(e, n), e;
558
+ return I(e, n), e;
559
559
  }
560
- }), null), N((o) => {
560
+ }), null), F((o) => {
561
561
  var c = J("glasshome-widget-hero", e.class), l = n() ? "" : void 0, u = e.value === "" && !t() ? "" : void 0, d = a(), f = i();
562
- return c !== o.e && j(r, o.e = c), l !== o.t && I(r, "data-art", o.t = l), u !== o.a && I(r, "data-empty", o.a = u), d !== o.o && I(s, "data-turn", o.o = d), f !== o.i && L(s, "--value-len", o.i = f), o;
562
+ return c !== o.e && N(r, o.e = c), l !== o.t && R(r, "data-art", o.t = l), u !== o.a && R(r, "data-empty", o.a = u), d !== o.o && R(s, "data-turn", o.o = d), f !== o.i && z(s, "--value-len", o.i = f), o;
563
563
  }, {
564
564
  e: void 0,
565
565
  t: void 0,
@@ -572,40 +572,40 @@ function Zn(e) {
572
572
  function Qn(e) {
573
573
  return (() => {
574
574
  var t = Wn();
575
- return P(t, () => e.children), t;
575
+ return I(t, () => e.children), t;
576
576
  })();
577
577
  }
578
578
  function $n(e) {
579
- return M(ke, {
579
+ return P(De, {
580
580
  get "aria-label"() {
581
581
  return e.label;
582
582
  },
583
583
  class: "glasshome-widget-stepper",
584
584
  get children() {
585
- return [M(De, {
585
+ return [P(Te, {
586
586
  variant: "outline",
587
587
  size: "icon",
588
588
  "aria-label": "Lower",
589
589
  class: "glasshome-widget-control",
590
590
  onClick: () => e.onStep(-1),
591
591
  get children() {
592
- return M(H, { icon: "mdi:minus" });
592
+ return P(U, { icon: "mdi:minus" });
593
593
  }
594
- }), M(De, {
594
+ }), P(Te, {
595
595
  variant: "outline",
596
596
  size: "icon",
597
597
  "aria-label": "Raise",
598
598
  class: "glasshome-widget-control",
599
599
  onClick: () => e.onStep(1),
600
600
  get children() {
601
- return M(H, { icon: "mdi:plus" });
601
+ return P(U, { icon: "mdi:plus" });
602
602
  }
603
603
  })];
604
604
  }
605
605
  });
606
606
  }
607
607
  function er(e) {
608
- return M(It, {
608
+ return P(Ft, {
609
609
  get "aria-label"() {
610
610
  return e.label;
611
611
  },
@@ -618,11 +618,11 @@ function er(e) {
618
618
  onChange: (t) => t && e.onChange(t),
619
619
  class: "glasshome-widget-choice",
620
620
  get children() {
621
- return M(C, {
621
+ return P(T, {
622
622
  get each() {
623
623
  return e.options;
624
624
  },
625
- children: (t) => M(Rt, {
625
+ children: (t) => P(Lt, {
626
626
  get value() {
627
627
  return t.value;
628
628
  },
@@ -634,7 +634,7 @@ function er(e) {
634
634
  return t.value === e.value ? void 0 : "";
635
635
  },
636
636
  get children() {
637
- return M(H, { get icon() {
637
+ return P(U, { get icon() {
638
638
  return t.icon;
639
639
  } });
640
640
  }
@@ -645,7 +645,7 @@ function er(e) {
645
645
  }
646
646
  function tr(e) {
647
647
  let t = Mn(), n = () => e.confirm ?? t, r = () => e.id ?? e["aria-label"] ?? e.icon, i = () => n().has(r());
648
- return M(De, {
648
+ return P(Te, {
649
649
  variant: "outline",
650
650
  get size() {
651
651
  return e.children ? "default" : "icon";
@@ -661,54 +661,54 @@ function tr(e) {
661
661
  },
662
662
  onClick: () => void n().run([r()], e.run),
663
663
  get children() {
664
- return [M(H, { get icon() {
665
- return F(() => !!i())() ? Yn : e.icon;
666
- } }), F(() => e.children)];
664
+ return [P(U, { get icon() {
665
+ return L(() => !!i())() ? Yn : e.icon;
666
+ } }), L(() => e.children)];
667
667
  }
668
668
  });
669
669
  }
670
670
  function nr(e) {
671
- return M(Te, {
671
+ return P(Ce, {
672
672
  get tone() {
673
673
  return e.tone ?? "var(--muted-foreground)";
674
674
  },
675
675
  class: "gap-1 tabular-nums",
676
676
  get children() {
677
- return [M(w, {
677
+ return [P(E, {
678
678
  get when() {
679
679
  return e.icon;
680
680
  },
681
- children: (e) => M(H, { get icon() {
681
+ children: (e) => P(U, { get icon() {
682
682
  return e();
683
683
  } })
684
- }), F(() => e.children)];
684
+ }), L(() => e.children)];
685
685
  }
686
686
  });
687
687
  }
688
688
  function rr(e) {
689
689
  return (() => {
690
690
  var t = Gn();
691
- return P(t, () => e.children), N(() => j(t, J("glasshome-widget-layer", e.class))), t;
691
+ return I(t, () => e.children), F(() => N(t, J("glasshome-widget-layer", e.class))), t;
692
692
  })();
693
693
  }
694
694
  function ir(e) {
695
695
  return (() => {
696
696
  var t = Kn();
697
- return P(t, () => e.children), t;
697
+ return I(t, () => e.children), t;
698
698
  })();
699
699
  }
700
700
  function ar(e) {
701
- let t = k(Jn);
701
+ let t = j(Jn);
702
702
  return (() => {
703
703
  var n = qn();
704
- return P(n, M(H, { get icon() {
705
- return F(() => !!t())() ? Yn : e.icon;
704
+ return I(n, P(U, { get icon() {
705
+ return L(() => !!t())() ? Yn : e.icon;
706
706
  } })), n;
707
707
  })();
708
708
  }
709
709
  //#endregion
710
710
  //#region src/framework/theming/tokens.css?raw
711
- var or = "/* Authoritative SDK CSS contract. Injected once on first Widget mount\n * via framework/theming/tokens.ts.\n *\n * All widget-internal visual scale is driven from CSS custom properties +\n * container queries on the `.glasshome-widget` shell (`container-type: size`).\n * No JS classifier, no size tier enum.\n */\n\n:root {\n --tone-success: oklch(0.7 0.18 145);\n --tone-warning: oklch(0.8 0.17 75);\n --tone-danger: oklch(0.64 0.22 27);\n --tone-info: oklch(0.66 0.2 245);\n --tone-neutral: oklch(0.65 0.02 250);\n --tone-accent: oklch(0.74 0.18 60);\n\n --widget-glow-default: 0.4;\n}\n\n.dark {\n --tone-success: oklch(0.74 0.18 145);\n --tone-warning: oklch(0.82 0.17 75);\n --tone-danger: oklch(0.68 0.22 27);\n --tone-info: oklch(0.7 0.2 245);\n --tone-neutral: oklch(0.69 0.02 250);\n --tone-accent: oklch(0.78 0.18 60);\n\n --widget-glow-default: 0.5;\n}\n\n@property --widget-color {\n syntax: \"<color>\";\n inherits: true;\n initial-value: oklch(0.65 0.02 250);\n}\n\n/* === Widget shell ===\n * One scale: --widget-unit is 1% of the shell's short side. Each size is a floor,\n * a line through the designed 2x2 and 4x4 sizes, and past 4x4 the share it has\n * at 4x4. A widget sizes its own text with these tokens and scales with every tile. */\n.glasshome-widget {\n --widget-color: var(--tone-neutral);\n --widget-glow-strength: var(--widget-glow-default);\n --widget-radius: var(--radius-xl, 12px);\n\n --widget-unit: 1cqmin;\n --widget-text-value: max(\n 22px,\n calc(8.5px + 13.4 * var(--widget-unit)),\n calc(16 * var(--widget-unit))\n );\n --widget-text-name: max(\n 14px,\n calc(8.9px + 4.37 * var(--widget-unit)),\n calc(7.07 * var(--widget-unit))\n );\n --widget-text-meta: max(\n 11px,\n calc(8px + 2.44 * var(--widget-unit)),\n calc(4.88 * var(--widget-unit))\n );\n --widget-text-sub: max(\n 12px,\n calc(10.1px + 1.22 * var(--widget-unit)),\n calc(4.3 * var(--widget-unit))\n );\n --widget-text-caption: max(11px, calc(3.6 * var(--widget-unit)));\n --widget-control-h: max(36px, calc(30px + 3.84 * var(--widget-unit)));\n --widget-grid-pad: max(\n 10px,\n calc(1.2px + 5.64 * var(--widget-unit)),\n calc(6 * var(--widget-unit))\n );\n --widget-grid-gap: max(6px, calc(2.5px + 2.23 * var(--widget-unit)));\n --widget-icon-box: max(\n 44px,\n calc(31.3px + 8.14 * var(--widget-unit)),\n calc(17.7 * var(--widget-unit))\n );\n --widget-icon-glyph: max(\n 24px,\n calc(16px + 5.12 * var(--widget-unit)),\n calc(10 * var(--widget-unit))\n );\n --widget-pad: clamp(8px, 3.5cqb, 22px);\n --widget-gap: clamp(6px, 2cqb, 14px);\n --widget-title-size: clamp(12px, 2cqi, 18px);\n --widget-subtitle: clamp(12px, 2.5cqi, 20px);\n --widget-status-size: clamp(14px, 5cqi, 36px);\n --widget-value-size: clamp(18px, 7cqi, 48px);\n --widget-badge-size: clamp(11px, 1.6cqi, 14px);\n}\n\n/* Shell material: ui's .glass, worn through the class Widget.tsx carries.\n * Unlayered and class-specific, so these beat the formula's :where() defaults\n * (wash-2 is re-declared there and cannot be set from a utility). The tone\n * stays the formula's transparent default until Widget.tsx sets one inline:\n * a widget without a tone is the plain card, never a neutral-grey wash. */\n.glasshome-widget {\n --widget-wash: 22%;\n --widget-wash-2: 11%;\n --glass-wash: var(--widget-wash);\n /* The material's wash style: fade keeps --widget-wash-2, flat runs it up to --widget-wash. */\n --glass-wash-2: calc(\n var(--widget-wash-2) + (var(--widget-wash) - var(--widget-wash-2)) *\n (3 - var(--_material-wash-split, 3)) / 2\n );\n --glass-wash-angle: var(--_material-wash-angle, 135deg);\n --glass-base: color-mix(in srgb, var(--card) var(--material-clarity, 60%), transparent);\n --glass-rim: 0.3;\n --glass-lift: 0.45;\n --glass-shade: 0.05;\n --glass-grain: var(--_material-grain, none);\n backdrop-filter: var(--widget-backdrop, none);\n -webkit-backdrop-filter: var(--widget-backdrop, none);\n}\n/* The material's fill: an accent wash on a widget that passes no tone of its own. */\n.glasshome-widget:not([data-toned]) {\n --glass-tone: color-mix(\n in srgb,\n var(--material-accent, var(--primary)) calc(var(--_material-fill, 0) * 100%),\n transparent\n );\n --glass-wash: 100%;\n --glass-wash-2: 50%;\n}\n/* A fill widget keeps a neutral card; the fill carries the tone, so a full fill is the toned card. */\n.glasshome-widget:has(.glasshome-widget-slider-fill) {\n --glass-wash: 0%;\n --glass-wash-2: 0%;\n}\n.dark .glasshome-widget {\n --glass-shade: 0;\n}\n/* Ink: the shell's line goes above every widget layer (they stack to 30), or full-bleed media buries it. */\n@container not style(--material-ink-level: 0) {\n .glasshome-widget::after {\n z-index: 40;\n }\n}\n\n/* === Slot: content layout === */\n/* Default: column. Flip to row only on wide-and-short widgets (matches the\n * old contentLayout heuristic: aspect > 1 AND height < 150px). */\n.glasshome-widget-content {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: var(--widget-pad);\n gap: var(--widget-gap);\n overflow: hidden;\n border-radius: var(--widget-radius);\n}\n@container widget (min-aspect-ratio: 1) and (max-height: 149px) {\n .glasshome-widget-content {\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n }\n}\n\n/* === Compact 1×1 ===\n * Small in BOTH axes → stack the tile: icon on top, label + status centered\n * under it. Icon stays moderate (not a hero) so the text keeps room. Wide\n * tiles (2×1) fail the width test and keep the row layout above. Placed after\n * the row-flip so it wins. */\n@container widget (max-width: 189px) and (max-height: 189px) {\n .glasshome-widget-content {\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: clamp(4px, 2.5cqmin, 8px);\n }\n .glasshome-widget-content > * {\n align-items: center;\n text-align: center;\n }\n .glasshome-widget-icon {\n --widget-icon-box: clamp(36px, 30cqmin, 56px);\n --widget-icon-glyph: clamp(20px, 17cqmin, 32px);\n }\n .glasshome-widget-title {\n font-size: clamp(11px, 6cqmin, 14px);\n max-width: 100%;\n }\n .glasshome-widget-status,\n .glasshome-widget-value {\n font-size: clamp(13px, 7cqmin, 17px);\n }\n .glasshome-widget-content [class*=\"ml-auto\"] {\n margin-left: 0 !important;\n }\n}\n.glasshome-widget-content [class*=\"ml-auto\"] {\n position: relative;\n z-index: 30;\n}\n\n/* === Slot: icon ===\n * ui's tinted icon pill (ICON_PILL_TINT): the disc is .glass, so the material shapes it. */\n.glasshome-widget-icon {\n width: var(--widget-icon-box);\n height: var(--widget-icon-box);\n border-radius: var(--radius-sm, 12px);\n --glass-tone: var(--widget-icon-color, var(--widget-color));\n --glass-rim: 0.4;\n --glass-wash: 18%;\n}\n.glasshome-widget-icon-glyph {\n font-size: var(--widget-icon-glyph);\n line-height: 1;\n}\n.glasshome-widget-icon-stack {\n --stack-step: calc(var(--widget-icon-box) * 0.12);\n position: absolute;\n /* The pill's border would otherwise shrink each plate and widen the first step. */\n inset: -1px;\n width: auto;\n height: auto;\n border-radius: var(--radius-sm, 12px);\n}\n.glasshome-widget-icon-stack-2 {\n translate: var(--stack-step) var(--stack-step);\n opacity: 0.45;\n z-index: -2;\n}\n.glasshome-widget-icon-stack-3 {\n translate: calc(2 * var(--stack-step)) calc(2 * var(--stack-step));\n opacity: 0.2;\n z-index: -3;\n}\n\n/* === Slot: text === */\n.glasshome-widget-title {\n font-size: var(--widget-title-size);\n line-height: 1.2;\n color: var(--color-muted-foreground, currentColor);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.glasshome-widget-subtitle {\n font-size: var(--widget-subtitle);\n color: var(--color-muted-foreground, currentColor);\n}\n.glasshome-widget-status {\n font-size: var(--widget-status-size);\n font-weight: 700;\n color: var(--color-foreground, currentColor);\n line-height: 1.1;\n}\n.glasshome-widget-value {\n font-size: var(--widget-value-size);\n font-weight: 700;\n color: var(--color-foreground, currentColor);\n line-height: 1.05;\n}\n.glasshome-widget-badge {\n font-size: var(--widget-badge-size);\n font-weight: 500;\n padding: 0.125rem 0.5rem;\n border-radius: 9999px;\n background: color-mix(in oklch, var(--color-foreground, currentColor) 20%, transparent);\n color: var(--color-foreground, currentColor);\n}\n\n.glasshome-widget-loading {\n background: color-mix(in oklch, var(--widget-color) 20%, transparent);\n}\n\n/* === Slider fill ===\n * Value flows in via --widget-fill-value (0-100). Vertical orientation auto-\n * detected via container query. */\n.glasshome-widget-slider-fill {\n --widget-fill-value: 0;\n background: linear-gradient(\n 135deg,\n color-mix(\n in srgb,\n var(--widget-color) calc(var(--widget-wash) * var(--material-tint, 1)),\n transparent\n ),\n color-mix(\n in srgb,\n var(--widget-color-to, var(--widget-color))\n calc(var(--widget-wash-2) * var(--material-tint, 1)),\n transparent\n )\n );\n /* Inset: the clip-path cuts any outer shadow. */\n box-shadow: inset 0 0 calc(var(--material-glow, 0px) * 1.2)\n oklch(from var(--widget-color) l c h / 0.55);\n clip-path: inset(0 calc((100 - var(--widget-fill-value)) * 1%) 0 0 round var(--widget-radius));\n}\n@container widget (max-aspect-ratio: 1) {\n .glasshome-widget-slider-fill {\n clip-path: inset(calc((100 - var(--widget-fill-value)) * 1%) 0 0 0 round var(--widget-radius));\n }\n}\n\n/* === Anatomy: Widget.Content with a Widget.Head lays its parts out as a tile === */\n.glasshome-widget-grid {\n position: relative;\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr) auto;\n gap: var(--widget-grid-gap);\n height: 100%;\n padding: var(--widget-grid-pad);\n overflow: hidden;\n isolation: isolate;\n color: var(--foreground);\n}\n\n/* In-flow content spans the tile (the max-content first column would collapse it); absolute parts keep the padding box. */\n.glasshome-widget-grid\n > :where(:not(.glasshome-widget-backdrop, .glasshome-widget-layer, .glasshome-widget-glyph)) {\n grid-column: 1 / -1;\n}\n.glasshome-widget-layer {\n position: absolute;\n inset: 0;\n z-index: -1;\n overflow: hidden;\n}\n.glasshome-widget-head {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n min-width: 0;\n}\n.glasshome-widget-head-text {\n min-height: var(--widget-icon-box);\n justify-content: center;\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n flex: 1;\n}\n.glasshome-widget-head-aside {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 6px;\n max-height: 26px;\n overflow: hidden;\n flex-shrink: 1;\n}\n.glasshome-widget-eyebrow {\n font-size: var(--widget-text-meta);\n font-weight: 500;\n line-height: 1.25;\n color: var(--muted-foreground);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.glasshome-widget-name {\n font-size: var(--widget-text-name);\n font-weight: 650;\n line-height: 1.2;\n letter-spacing: -0.01em;\n color: var(--foreground);\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n overflow-wrap: break-word;\n}\n\n.glasshome-widget-hero {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: var(--widget-grid-gap);\n min-height: 0;\n min-width: 0;\n}\n.glasshome-widget-reading {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n z-index: 1;\n}\n.glasshome-widget-reading-value {\n font-size: var(--widget-text-value);\n font-weight: 650;\n line-height: 1;\n letter-spacing: -0.03em;\n font-variant-numeric: tabular-nums;\n color: var(--foreground);\n white-space: nowrap;\n}\n/* Alternating names restart the rise on each change without rebuilding the text. */\n.glasshome-widget-reading-value[data-turn=\"a\"] {\n animation: tile-value-in-a var(--duration-morph) var(--ease-morph);\n}\n.glasshome-widget-reading-value[data-turn=\"b\"] {\n animation: tile-value-in-b var(--duration-morph) var(--ease-morph);\n}\n@keyframes tile-value-in-a {\n from {\n opacity: 0;\n transform: translateY(0.25em);\n }\n}\n@keyframes tile-value-in-b {\n from {\n opacity: 0;\n transform: translateY(0.25em);\n }\n}\n.glasshome-widget-unit {\n font-size: 0.5em;\n font-weight: 550;\n letter-spacing: 0;\n margin-left: 0.08em;\n color: var(--muted-foreground);\n}\n.glasshome-widget-sub {\n font-size: var(--widget-text-sub);\n font-weight: 500;\n color: var(--muted-foreground);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Placed on the tile, not the hero, so a control row never moves or shrinks it. */\n.glasshome-widget-art {\n position: absolute;\n right: var(--widget-grid-pad);\n bottom: var(--widget-grid-pad);\n height: min(\n calc(100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - var(--widget-grid-gap)),\n 48cqi\n );\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n pointer-events: none;\n}\n/* Beside art a long word (\"Unlocked\") shrinks to end where the art starts, at about 50cqi; short values keep full size. */\n@container widget (min-width: 180px) and (min-height: 130px) {\n .glasshome-widget-hero[data-art] .glasshome-widget-reading-value {\n font-size: max(18px, min(var(--widget-text-value), calc(50cqi / (var(--value-len, 1) * 0.56))));\n }\n}\n.glasshome-widget-backdrop > img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n/* Art keeps its shape and clears a state word at its largest (15cqi, about 3.4em); each art sets --art-aspect. */\n.glasshome-widget-grid .glasshome-widget-art > * {\n height: min(\n 100%,\n calc((52cqi - 2 * var(--widget-grid-pad) - var(--widget-grid-gap)) / var(--art-aspect, 1))\n );\n flex-shrink: 0;\n}\n.glasshome-widget-grid .glasshome-widget-art > img {\n width: auto;\n height: auto;\n max-height: 100%;\n max-width: calc(52cqi - 2 * var(--widget-grid-pad) - var(--widget-grid-gap));\n}\n\n.glasshome-widget-controls {\n display: flex;\n gap: 8px;\n min-width: 0;\n}\n\n.glasshome-widget-glyph {\n display: none;\n position: absolute;\n right: -8%;\n bottom: -22%;\n font-size: min(130cqb, 80cqi);\n line-height: 1;\n color: var(--widget-color);\n opacity: 0.16;\n pointer-events: none;\n z-index: -1;\n}\n\n/* Controls sit on the bottom row beside the value, or under it on a narrow tile; the art lifts above them. */\n.glasshome-widget-head {\n grid-column: 1 / -1;\n}\n.glasshome-widget-hero {\n grid-row: 3;\n grid-column: 1 / -1;\n}\n.glasshome-widget-grid:has(> .glasshome-widget-controls) > .glasshome-widget-hero {\n grid-column: 1;\n}\n.glasshome-widget-controls {\n grid-row: 3;\n grid-column: 2;\n align-self: end;\n position: relative;\n z-index: 1;\n}\n.glasshome-widget-grid:has(> .glasshome-widget-hero[data-empty]) > .glasshome-widget-controls {\n grid-column: 1 / -1;\n}\n@container widget (max-width: 519px) {\n .glasshome-widget-grid:has(> .glasshome-widget-controls) {\n grid-template-rows: auto minmax(0, 1fr) auto auto;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) > .glasshome-widget-hero {\n grid-column: 1 / -1;\n }\n .glasshome-widget-controls {\n grid-row: 4;\n grid-column: 1 / -1;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) .glasshome-widget-art {\n bottom: calc(var(--widget-grid-pad) + var(--widget-control-h) + var(--widget-grid-gap));\n height: min(\n calc(\n 100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - 2 * var(--widget-grid-gap) -\n var(--widget-control-h)\n ),\n 48cqi\n );\n }\n}\n@container widget (max-height: 229px) {\n .glasshome-widget-controls {\n display: none;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) {\n grid-template-rows: auto minmax(0, 1fr) auto;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) .glasshome-widget-art {\n bottom: var(--widget-grid-pad);\n height: min(\n calc(100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - var(--widget-grid-gap)),\n 48cqi\n );\n }\n}\n@container widget (max-width: 179px) {\n .glasshome-widget-art {\n display: none;\n }\n}\n@container widget (max-height: 169px) {\n .glasshome-widget-head-aside {\n display: none;\n }\n}\n@container widget ((max-height: 129px) or (max-width: 139px)) {\n .glasshome-widget-head-text {\n min-height: 0;\n }\n .glasshome-widget-name {\n -webkit-line-clamp: 1;\n }\n .glasshome-widget-grid {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 2px;\n }\n .glasshome-widget-head-icon,\n .glasshome-widget-art,\n .glasshome-widget-eyebrow,\n .glasshome-widget-sub {\n display: none;\n }\n .glasshome-widget-glyph {\n display: block;\n }\n .glasshome-widget-reading-value {\n font-size: clamp(18px, min(34cqb, 20cqi), 30px);\n }\n .glasshome-widget-name {\n font-size: clamp(12px, min(18cqb, 11cqi), 15px);\n font-weight: 550;\n color: var(--muted-foreground);\n }\n}\n@container widget (max-height: 129px) and (min-width: 260px) {\n .glasshome-widget-grid {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: var(--widget-grid-gap);\n }\n .glasshome-widget-name {\n font-size: clamp(14px, 22cqb, 18px);\n font-weight: 650;\n color: var(--foreground);\n }\n .glasshome-widget-eyebrow {\n display: block;\n }\n}\n\n.glasshome-widget-backdrop {\n position: absolute;\n inset: 0;\n z-index: -2;\n overflow: hidden;\n}\n.glasshome-widget-backdrop > img.area-night {\n opacity: 0;\n transition: opacity 700ms ease;\n}\n.glasshome-widget-backdrop > img.area-night[data-visible] {\n opacity: 1;\n}\n.glasshome-widget-backdrop > .glasshome-widget-backdrop-light {\n position: absolute;\n inset: 0;\n background: radial-gradient(90% 80% at 25% 30%, oklch(0.8 0.14 70), transparent 70%);\n mix-blend-mode: soft-light;\n opacity: var(--backdrop-light, 0);\n transition: opacity 500ms ease;\n}\n.glasshome-widget-backdrop::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: linear-gradient(\n to bottom,\n color-mix(in oklch, var(--card) 82%, transparent) 0%,\n color-mix(in oklch, var(--card) 40%, transparent) 22%,\n transparent 42%,\n transparent 62%,\n color-mix(in oklch, var(--card) 45%, transparent) 82%,\n color-mix(in oklch, var(--card) 80%, transparent) 100%\n );\n}\n\n@container widget (max-width: 239px) {\n .glasshome-widget-choice [data-optional] {\n display: none;\n }\n}\n@container widget (max-width: 259px) {\n .glasshome-widget-head-aside {\n display: none;\n }\n}\n@container widget (max-width: 139px) {\n .glasshome-widget-controls {\n display: none;\n }\n}\n\n.glasshome-widget-controls {\n justify-content: flex-start;\n align-items: center;\n}\n.glasshome-widget-control.glasshome-widget-control {\n width: var(--widget-control-h);\n height: var(--widget-control-h);\n}\n.glasshome-widget-choice .glasshome-widget-control.glasshome-widget-control {\n width: calc(var(--widget-control-h) - 8px);\n height: calc(var(--widget-control-h) - 8px);\n}\n@container widget (max-width: 179px) and (min-height: 130px) {\n .glasshome-widget-grid:not(:has(> .glasshome-widget-backdrop)) .glasshome-widget-head-text {\n min-height: 0;\n }\n .glasshome-widget-grid:not(:has(> .glasshome-widget-backdrop)) .glasshome-widget-head {\n flex-direction: column;\n gap: 6px;\n }\n}\n.glasshome-widget-unit[data-degree] {\n vertical-align: top;\n margin-left: 0.02em;\n color: var(--foreground);\n}\n.glasshome-widget-control-wide.glasshome-widget-control-wide {\n height: var(--widget-control-h);\n gap: 6px;\n padding: 0 14px;\n}\n@container widget (max-width: 179px) {\n .glasshome-widget-grid:has(> .glasshome-widget-backdrop) .glasshome-widget-head-icon {\n display: none;\n }\n}\n.glasshome-widget-grid:has(> .glasshome-widget-backdrop)\n :is(\n .glasshome-widget-reading-value,\n .glasshome-widget-sub,\n .glasshome-widget-name,\n .glasshome-widget-eyebrow\n ) {\n text-shadow: 0 1px 8px color-mix(in oklch, var(--card) 75%, transparent);\n}\n.glasshome-widget-grid:has(> .glasshome-widget-backdrop)\n :is(.glasshome-widget-sub, .glasshome-widget-eyebrow) {\n color: color-mix(in oklch, var(--foreground) 82%, transparent);\n}\n/* Control glyphs and words keep their share of a control as it grows past 4x4. */\n.glasshome-widget-grid\n :is(.glasshome-widget-control, .glasshome-widget-control-wide)\n :is(iconify-icon, svg) {\n font-size: calc(var(--widget-control-h) * 0.43);\n width: 1em;\n height: 1em;\n}\n:is(.glasshome-widget-controls, .glasshome-widget-control-wide) {\n font-size: max(13px, calc(var(--widget-control-h) * 0.3));\n}\n/* A big tile with no art of its own carries its icon large and faint, so the glass is not an empty box. */\n@container widget (min-width: 300px) and (min-height: 260px) {\n .glasshome-widget-grid:not(\n :has(> .glasshome-widget-backdrop),\n :has(> .glasshome-widget-hero[data-art], > .glasshome-widget-art, > .glasshome-widget-layer)\n )\n > .glasshome-widget-glyph {\n display: block;\n right: -3%;\n bottom: -12%;\n font-size: min(78cqb, 52cqi);\n opacity: 0.1;\n }\n}\n/* A one-shot action confirms on its control and on the glyph, the one thing a compact tile shows. */\n.glasshome-widget-grid > .glasshome-widget-glyph {\n transition: opacity var(--duration-state) var(--ease-morph);\n}\n.glasshome-widget[data-confirmed] .glasshome-widget-glyph {\n opacity: 0.5;\n}\n.glasshome-widget-grid\n [data-confirmed]:is(.glasshome-widget-control, .glasshome-widget-control-wide) {\n --glass-base: color-mix(in srgb, var(--widget-color) 35%, transparent);\n transition: background-color var(--duration-state) var(--ease-morph);\n}\n\n/* === Sheet: what a held tile opens (framework/panel) ===\n * Rendered in a popover or dialog outside the widget's shadow root, so every rule\n * the sheet needs lives here, never in a widget's own utilities. */\n.glasshome-sheet {\n display: flex;\n flex-direction: column;\n gap: 18px;\n color: var(--foreground);\n}\n.glasshome-sheet [data-slot=\"swatch-picker\"] {\n max-width: 360px;\n}\n.glasshome-panel-section {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n.glasshome-panel-label {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n color: var(--muted-foreground);\n}\n.glasshome-panel-rows {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 8px;\n}\n.glasshome-panel-row-wrap {\n position: relative;\n min-width: 0;\n}\n.glasshome-panel-row {\n --widget-wash: 22%;\n --widget-wash-2: 11%;\n --widget-radius: var(--radius-lg, 16px);\n --widget-icon-box: 34px;\n --widget-icon-glyph: 19px;\n position: relative;\n width: 100%;\n height: 56px;\n justify-content: flex-start;\n gap: 10px;\n padding: 0 12px 0 10px;\n overflow: hidden;\n text-align: left;\n touch-action: pan-y;\n}\n.glasshome-panel-row-static {\n cursor: default;\n scale: none;\n}\n.glasshome-panel-row-fill {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n.glasshome-panel-row-icon {\n position: relative;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n}\n.glasshome-panel-row-icon-off {\n color: var(--muted-foreground);\n}\n.glasshome-panel-row-text {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.glasshome-panel-row-name,\n.glasshome-panel-row-state,\n.glasshome-panel-fact-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n/* A reading may take a second line rather than lose its end (\"3 Moderate\"). */\n.glasshome-panel-fact-value {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.glasshome-panel-row-name,\n.glasshome-panel-fact-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--foreground);\n}\n.glasshome-panel-row-state,\n.glasshome-panel-fact-label {\n font-size: 12px;\n font-weight: 400;\n color: var(--muted-foreground);\n}\n.glasshome-panel-row-trailing {\n position: absolute;\n top: 50%;\n right: 10px;\n translate: 0 -50%;\n}\n.glasshome-panel-facts {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));\n row-gap: 10px;\n padding: 10px 4px 10px 0;\n overflow: hidden;\n border-radius: var(--radius-lg, 16px);\n --glass-base: color-mix(in srgb, var(--card) var(--material-clarity, 60%), transparent);\n backdrop-filter: blur(calc(var(--material-blur, 24px) * 0.6)) saturate(1.6);\n -webkit-backdrop-filter: blur(calc(var(--material-blur, 24px) * 0.6)) saturate(1.6);\n}\n/* Without blur a see-through strip is just see-through: it takes the card fill. */\n.reduce-blur .glasshome-panel-facts {\n --glass-base: var(--card);\n}\n.glasshome-panel-fact {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 8px;\n padding: 0 12px;\n box-shadow: -1px 0 0 color-mix(in oklch, var(--foreground) 10%, transparent);\n}\n.glasshome-panel-fact-icon {\n flex-shrink: 0;\n font-size: 18px;\n color: var(--muted-foreground);\n}\n\n/* Inset: the grid cell clips anything drawn outside the tile. */\n.glasshome-widget:focus-visible {\n outline: 2px solid var(--ring);\n outline-offset: -2px;\n}\n\n/* === Hold flood: the dock's hold fill (ui HOLD_MOTION), grown from the finger === */\n.glasshome-widget-hold-flood {\n position: absolute;\n translate: -50% -50%;\n border-radius: 9999px;\n background: color-mix(in oklch, var(--primary) 45%, transparent);\n pointer-events: none;\n scale: 0;\n opacity: 0;\n transition:\n scale var(--duration-state, 200ms) var(--ease-contract, ease-in),\n opacity var(--duration-state, 200ms) var(--ease-contract, ease-in);\n}\n.glasshome-widget-hold-flood[data-hold] {\n scale: 1;\n opacity: 1;\n transition-duration: var(--duration-hold, 250ms);\n transition-timing-function: linear;\n}\n.glasshome-widget-hold-flood[data-fired] {\n scale: 1;\n opacity: 0;\n}\n/* A row of ui buttons in a sheet (scenes, one-tap actions). */\n.glasshome-sheet-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n/* The sheet wears its tile: the tile's tone washed into the glass, its picture as a band behind\n the head that fades into the glass, so the tile reads as having grown open. */\n.glasshome-sheet-surface {\n --glass-wash: 20%;\n --glass-wash-2: 7%;\n --widget-icon-box: 48px;\n --widget-icon-glyph: 26px;\n}\n.glasshome-sheet-band {\n position: absolute;\n inset: 0 0 auto;\n height: 150px;\n overflow: hidden;\n pointer-events: none;\n mask-image: linear-gradient(180deg, #000 30%, transparent);\n}\n.glasshome-sheet-band > img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n opacity: 0.55;\n}\n.glasshome-sheet-surface > [data-slot$=\"-header\"],\n.glasshome-sheet-surface > [data-slot$=\"-body\"] {\n position: relative;\n}\n.glasshome-sheet-icon {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n", sr = !1, cr, lr = /* @__PURE__ */ new WeakSet();
711
+ var or = "/* Authoritative SDK CSS contract. Injected once on first Widget mount\n * via framework/theming/tokens.ts.\n *\n * All widget-internal visual scale is driven from CSS custom properties +\n * container queries on the `.glasshome-widget` shell (`container-type: size`).\n * No JS classifier, no size tier enum.\n */\n\n:root {\n --tone-success: oklch(0.7 0.18 145);\n --tone-warning: oklch(0.8 0.17 75);\n --tone-danger: oklch(0.64 0.22 27);\n --tone-info: oklch(0.66 0.2 245);\n --tone-neutral: oklch(0.65 0.02 250);\n --tone-accent: oklch(0.74 0.18 60);\n\n --widget-glow-default: 0.4;\n}\n\n.dark {\n --tone-success: oklch(0.74 0.18 145);\n --tone-warning: oklch(0.82 0.17 75);\n --tone-danger: oklch(0.68 0.22 27);\n --tone-info: oklch(0.7 0.2 245);\n --tone-neutral: oklch(0.69 0.02 250);\n --tone-accent: oklch(0.78 0.18 60);\n\n --widget-glow-default: 0.5;\n}\n\n@property --widget-color {\n syntax: \"<color>\";\n inherits: true;\n initial-value: oklch(0.65 0.02 250);\n}\n\n/* === Widget shell ===\n * One scale: --widget-unit is 1% of the shell's short side. Each size is a floor,\n * a line through the designed 2x2 and 4x4 sizes, and past 4x4 the share it has\n * at 4x4. A widget sizes its own text with these tokens and scales with every tile. */\n.glasshome-widget {\n --widget-color: var(--tone-neutral);\n --widget-glow-strength: var(--widget-glow-default);\n --widget-radius: var(--radius-xl, 12px);\n\n --widget-unit: 1cqmin;\n --widget-text-value: max(\n 22px,\n calc(8.5px + 13.4 * var(--widget-unit)),\n calc(16 * var(--widget-unit))\n );\n --widget-text-name: max(\n 14px,\n calc(8.9px + 4.37 * var(--widget-unit)),\n calc(7.07 * var(--widget-unit))\n );\n --widget-text-meta: max(\n 11px,\n calc(8px + 2.44 * var(--widget-unit)),\n calc(4.88 * var(--widget-unit))\n );\n --widget-text-sub: max(\n 12px,\n calc(10.1px + 1.22 * var(--widget-unit)),\n calc(4.3 * var(--widget-unit))\n );\n --widget-text-caption: max(11px, calc(3.6 * var(--widget-unit)));\n --widget-control-h: max(36px, calc(30px + 3.84 * var(--widget-unit)));\n --widget-grid-pad: max(\n 10px,\n calc(1.2px + 5.64 * var(--widget-unit)),\n calc(6 * var(--widget-unit))\n );\n --widget-grid-gap: max(6px, calc(2.5px + 2.23 * var(--widget-unit)));\n --widget-icon-box: max(\n 44px,\n calc(31.3px + 8.14 * var(--widget-unit)),\n calc(17.7 * var(--widget-unit))\n );\n --widget-icon-glyph: max(\n 24px,\n calc(16px + 5.12 * var(--widget-unit)),\n calc(10 * var(--widget-unit))\n );\n --widget-pad: clamp(8px, 3.5cqb, 22px);\n --widget-gap: clamp(6px, 2cqb, 14px);\n --widget-title-size: clamp(12px, 2cqi, 18px);\n --widget-subtitle: clamp(12px, 2.5cqi, 20px);\n --widget-status-size: clamp(14px, 5cqi, 36px);\n --widget-value-size: clamp(18px, 7cqi, 48px);\n --widget-badge-size: clamp(11px, 1.6cqi, 14px);\n}\n\n/* Shell material: ui's .glass, worn through the class Widget.tsx carries.\n * Unlayered and class-specific, so these beat the formula's :where() defaults\n * (wash-2 is re-declared there and cannot be set from a utility). The tone\n * stays the formula's transparent default until Widget.tsx sets one inline:\n * a widget without a tone is the plain card, never a neutral-grey wash. */\n.glasshome-widget {\n --widget-wash: 22%;\n --widget-wash-2: 11%;\n --glass-wash: var(--widget-wash);\n /* The material's wash style: fade keeps --widget-wash-2, flat runs it up to --widget-wash. */\n --glass-wash-2: calc(\n var(--widget-wash-2) + (var(--widget-wash) - var(--widget-wash-2)) *\n (3 - var(--_material-wash-split, 3)) / 2\n );\n --glass-wash-angle: var(--_material-wash-angle, 135deg);\n --glass-base: color-mix(in srgb, var(--card) var(--material-clarity, 60%), transparent);\n --glass-rim: 0.3;\n --glass-lift: 0.45;\n --glass-shade: 0.05;\n --glass-grain: var(--_material-grain, none);\n --glass-halo: 1;\n backdrop-filter: var(--widget-backdrop, none);\n -webkit-backdrop-filter: var(--widget-backdrop, none);\n}\n/* The shell's outer glow, beside it so the glow can lie over neighbouring widgets. */\n.glasshome-widget-halo {\n --glass-lift: 0.45;\n}\n/* The material's fill: an accent wash on a widget that passes no tone of its own. */\n.glasshome-widget:not([data-toned]),\n.glasshome-widget-halo:not([data-toned]) {\n --glass-tone: color-mix(\n in srgb,\n var(--material-accent, var(--primary)) calc(var(--_material-fill, 0) * 100%),\n transparent\n );\n --glass-wash: 100%;\n --glass-wash-2: 50%;\n}\n/* A fill widget keeps a neutral card; the fill carries the tone, so a full fill is the toned card. */\n.glasshome-widget:has(.glasshome-widget-slider-fill) {\n --glass-wash: 0%;\n --glass-wash-2: 0%;\n}\n.dark .glasshome-widget {\n --glass-shade: 0;\n}\n/* Ink: the shell's line goes above every widget layer (they stack to 30), or full-bleed media buries it. */\n@container not style(--material-ink-level: 0) {\n .glasshome-widget::after {\n z-index: 40;\n }\n}\n\n/* === Slot: content layout === */\n/* Default: column. Flip to row only on wide-and-short widgets (matches the\n * old contentLayout heuristic: aspect > 1 AND height < 150px). */\n.glasshome-widget-content {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: var(--widget-pad);\n gap: var(--widget-gap);\n overflow: hidden;\n border-radius: var(--widget-radius);\n}\n@container widget (min-aspect-ratio: 1) and (max-height: 149px) {\n .glasshome-widget-content {\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n }\n}\n\n/* === Compact 1×1 ===\n * Small in BOTH axes → stack the tile: icon on top, label + status centered\n * under it. Icon stays moderate (not a hero) so the text keeps room. Wide\n * tiles (2×1) fail the width test and keep the row layout above. Placed after\n * the row-flip so it wins. */\n@container widget (max-width: 189px) and (max-height: 189px) {\n .glasshome-widget-content {\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: clamp(4px, 2.5cqmin, 8px);\n }\n .glasshome-widget-content > * {\n align-items: center;\n text-align: center;\n }\n .glasshome-widget-icon {\n --widget-icon-box: clamp(36px, 30cqmin, 56px);\n --widget-icon-glyph: clamp(20px, 17cqmin, 32px);\n }\n .glasshome-widget-title {\n font-size: clamp(11px, 6cqmin, 14px);\n max-width: 100%;\n }\n .glasshome-widget-status,\n .glasshome-widget-value {\n font-size: clamp(13px, 7cqmin, 17px);\n }\n .glasshome-widget-content [class*=\"ml-auto\"] {\n margin-left: 0 !important;\n }\n}\n.glasshome-widget-content [class*=\"ml-auto\"] {\n position: relative;\n z-index: 30;\n}\n\n/* === Slot: icon ===\n * ui's tinted icon pill (ICON_PILL_TINT): the disc is .glass, so the material shapes it. */\n.glasshome-widget-icon {\n width: var(--widget-icon-box);\n height: var(--widget-icon-box);\n border-radius: var(--radius-sm, 12px);\n --glass-tone: var(--widget-icon-color, var(--widget-color));\n --glass-rim: 0.4;\n --glass-wash: 18%;\n}\n.glasshome-widget-icon-glyph {\n font-size: var(--widget-icon-glyph);\n line-height: 1;\n}\n.glasshome-widget-icon-stack {\n --stack-step: calc(var(--widget-icon-box) * 0.12);\n position: absolute;\n /* The pill's border would otherwise shrink each plate and widen the first step. */\n inset: -1px;\n width: auto;\n height: auto;\n border-radius: var(--radius-sm, 12px);\n}\n.glasshome-widget-icon-stack-2 {\n translate: var(--stack-step) var(--stack-step);\n opacity: 0.45;\n z-index: -2;\n}\n.glasshome-widget-icon-stack-3 {\n translate: calc(2 * var(--stack-step)) calc(2 * var(--stack-step));\n opacity: 0.2;\n z-index: -3;\n}\n\n/* === Slot: text === */\n.glasshome-widget-title {\n font-size: var(--widget-title-size);\n line-height: 1.2;\n color: var(--color-muted-foreground, currentColor);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.glasshome-widget-subtitle {\n font-size: var(--widget-subtitle);\n color: var(--color-muted-foreground, currentColor);\n}\n.glasshome-widget-status {\n font-size: var(--widget-status-size);\n font-weight: 700;\n color: var(--color-foreground, currentColor);\n line-height: 1.1;\n}\n.glasshome-widget-value {\n font-size: var(--widget-value-size);\n font-weight: 700;\n color: var(--color-foreground, currentColor);\n line-height: 1.05;\n}\n.glasshome-widget-badge {\n font-size: var(--widget-badge-size);\n font-weight: 500;\n padding: 0.125rem 0.5rem;\n border-radius: 9999px;\n background: color-mix(in oklch, var(--color-foreground, currentColor) 20%, transparent);\n color: var(--color-foreground, currentColor);\n}\n\n.glasshome-widget-loading {\n background: color-mix(in oklch, var(--widget-color) 20%, transparent);\n}\n\n/* === Slider fill ===\n * Value flows in via --widget-fill-value (0-100). Vertical orientation auto-\n * detected via container query. */\n.glasshome-widget-slider-fill {\n --widget-fill-value: 0;\n background: linear-gradient(\n 135deg,\n color-mix(\n in srgb,\n var(--widget-color) calc(var(--widget-wash) * var(--material-tint, 1)),\n transparent\n ),\n color-mix(\n in srgb,\n var(--widget-color-to, var(--widget-color))\n calc(var(--widget-wash-2) * var(--material-tint, 1)),\n transparent\n )\n );\n /* Inset: the clip-path cuts any outer shadow. */\n box-shadow: inset 0 0 calc(var(--material-glow, 0px) * 1.2)\n oklch(from var(--widget-color) l c h / 0.55);\n clip-path: inset(0 calc((100 - var(--widget-fill-value)) * 1%) 0 0 round var(--widget-radius));\n}\n@container widget (max-aspect-ratio: 1) {\n .glasshome-widget-slider-fill {\n clip-path: inset(calc((100 - var(--widget-fill-value)) * 1%) 0 0 0 round var(--widget-radius));\n }\n}\n\n/* === Anatomy: Widget.Content with a Widget.Head lays its parts out as a tile === */\n.glasshome-widget-grid {\n position: relative;\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr) auto;\n gap: var(--widget-grid-gap);\n height: 100%;\n padding: var(--widget-grid-pad);\n overflow: hidden;\n isolation: isolate;\n color: var(--foreground);\n}\n\n/* In-flow content spans the tile (the max-content first column would collapse it); absolute parts keep the padding box. */\n.glasshome-widget-grid\n > :where(:not(.glasshome-widget-backdrop, .glasshome-widget-layer, .glasshome-widget-glyph)) {\n grid-column: 1 / -1;\n}\n.glasshome-widget-layer {\n position: absolute;\n inset: 0;\n z-index: -1;\n overflow: hidden;\n}\n.glasshome-widget-head {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n min-width: 0;\n}\n.glasshome-widget-head-text {\n min-height: var(--widget-icon-box);\n justify-content: center;\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n flex: 1;\n}\n.glasshome-widget-head-aside {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 6px;\n max-height: 26px;\n overflow: hidden;\n flex-shrink: 1;\n}\n.glasshome-widget-eyebrow {\n font-size: var(--widget-text-meta);\n font-weight: 500;\n line-height: 1.25;\n color: var(--muted-foreground);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.glasshome-widget-name {\n font-size: var(--widget-text-name);\n font-weight: 650;\n line-height: 1.2;\n letter-spacing: -0.01em;\n color: var(--foreground);\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n overflow-wrap: break-word;\n}\n\n.glasshome-widget-hero {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: var(--widget-grid-gap);\n min-height: 0;\n min-width: 0;\n}\n.glasshome-widget-reading {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n z-index: 1;\n}\n.glasshome-widget-reading-value {\n font-size: var(--widget-text-value);\n font-weight: 650;\n line-height: 1;\n letter-spacing: -0.03em;\n font-variant-numeric: tabular-nums;\n color: var(--foreground);\n white-space: nowrap;\n}\n/* Alternating names restart the rise on each change without rebuilding the text. */\n.glasshome-widget-reading-value[data-turn=\"a\"] {\n animation: tile-value-in-a var(--duration-morph) var(--ease-morph);\n}\n.glasshome-widget-reading-value[data-turn=\"b\"] {\n animation: tile-value-in-b var(--duration-morph) var(--ease-morph);\n}\n@keyframes tile-value-in-a {\n from {\n opacity: 0;\n transform: translateY(0.25em);\n }\n}\n@keyframes tile-value-in-b {\n from {\n opacity: 0;\n transform: translateY(0.25em);\n }\n}\n.glasshome-widget-unit {\n font-size: 0.5em;\n font-weight: 550;\n letter-spacing: 0;\n margin-left: 0.08em;\n color: var(--muted-foreground);\n}\n.glasshome-widget-sub {\n font-size: var(--widget-text-sub);\n font-weight: 500;\n color: var(--muted-foreground);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Placed on the tile, not the hero, so a control row never moves or shrinks it. */\n.glasshome-widget-art {\n position: absolute;\n right: var(--widget-grid-pad);\n bottom: var(--widget-grid-pad);\n height: min(\n calc(100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - var(--widget-grid-gap)),\n 48cqi\n );\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n pointer-events: none;\n}\n/* Beside art a long word (\"Unlocked\") shrinks to end where the art starts, at about 50cqi; short values keep full size. */\n@container widget (min-width: 180px) and (min-height: 130px) {\n .glasshome-widget-hero[data-art] .glasshome-widget-reading-value {\n font-size: max(18px, min(var(--widget-text-value), calc(50cqi / (var(--value-len, 1) * 0.56))));\n }\n}\n.glasshome-widget-backdrop > img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n/* Art keeps its shape and clears a state word at its largest (15cqi, about 3.4em); each art sets --art-aspect. */\n.glasshome-widget-grid .glasshome-widget-art > * {\n height: min(\n 100%,\n calc((52cqi - 2 * var(--widget-grid-pad) - var(--widget-grid-gap)) / var(--art-aspect, 1))\n );\n flex-shrink: 0;\n}\n.glasshome-widget-grid .glasshome-widget-art > img {\n width: auto;\n height: auto;\n max-height: 100%;\n max-width: calc(52cqi - 2 * var(--widget-grid-pad) - var(--widget-grid-gap));\n}\n\n.glasshome-widget-controls {\n display: flex;\n gap: 8px;\n min-width: 0;\n}\n\n.glasshome-widget-glyph {\n display: none;\n position: absolute;\n right: -8%;\n bottom: -22%;\n font-size: min(130cqb, 80cqi);\n line-height: 1;\n color: var(--widget-color);\n opacity: 0.16;\n pointer-events: none;\n z-index: -1;\n}\n\n/* Controls sit on the bottom row beside the value, or under it on a narrow tile; the art lifts above them. */\n.glasshome-widget-head {\n grid-column: 1 / -1;\n}\n.glasshome-widget-hero {\n grid-row: 3;\n grid-column: 1 / -1;\n}\n.glasshome-widget-grid:has(> .glasshome-widget-controls) > .glasshome-widget-hero {\n grid-column: 1;\n}\n.glasshome-widget-controls {\n grid-row: 3;\n grid-column: 2;\n align-self: end;\n position: relative;\n z-index: 1;\n}\n.glasshome-widget-grid:has(> .glasshome-widget-hero[data-empty]) > .glasshome-widget-controls {\n grid-column: 1 / -1;\n}\n@container widget (max-width: 519px) {\n .glasshome-widget-grid:has(> .glasshome-widget-controls) {\n grid-template-rows: auto minmax(0, 1fr) auto auto;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) > .glasshome-widget-hero {\n grid-column: 1 / -1;\n }\n .glasshome-widget-controls {\n grid-row: 4;\n grid-column: 1 / -1;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) .glasshome-widget-art {\n bottom: calc(var(--widget-grid-pad) + var(--widget-control-h) + var(--widget-grid-gap));\n height: min(\n calc(\n 100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - 2 * var(--widget-grid-gap) -\n var(--widget-control-h)\n ),\n 48cqi\n );\n }\n}\n@container widget (max-height: 229px) {\n .glasshome-widget-controls {\n display: none;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) {\n grid-template-rows: auto minmax(0, 1fr) auto;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) .glasshome-widget-art {\n bottom: var(--widget-grid-pad);\n height: min(\n calc(100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - var(--widget-grid-gap)),\n 48cqi\n );\n }\n}\n@container widget (max-width: 179px) {\n .glasshome-widget-art {\n display: none;\n }\n}\n@container widget (max-height: 169px) {\n .glasshome-widget-head-aside {\n display: none;\n }\n}\n@container widget ((max-height: 129px) or (max-width: 139px)) {\n .glasshome-widget-head-text {\n min-height: 0;\n }\n .glasshome-widget-name {\n -webkit-line-clamp: 1;\n }\n .glasshome-widget-grid {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 2px;\n }\n .glasshome-widget-head-icon,\n .glasshome-widget-art,\n .glasshome-widget-eyebrow,\n .glasshome-widget-sub {\n display: none;\n }\n .glasshome-widget-glyph {\n display: block;\n }\n .glasshome-widget-reading-value {\n font-size: clamp(18px, min(34cqb, 20cqi), 30px);\n }\n .glasshome-widget-name {\n font-size: clamp(12px, min(18cqb, 11cqi), 15px);\n font-weight: 550;\n color: var(--muted-foreground);\n }\n}\n@container widget (max-height: 129px) and (min-width: 260px) {\n .glasshome-widget-grid {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: var(--widget-grid-gap);\n }\n .glasshome-widget-name {\n font-size: clamp(14px, 22cqb, 18px);\n font-weight: 650;\n color: var(--foreground);\n }\n .glasshome-widget-eyebrow {\n display: block;\n }\n}\n\n.glasshome-widget-backdrop {\n position: absolute;\n inset: 0;\n z-index: -2;\n overflow: hidden;\n}\n.glasshome-widget-backdrop > img.area-night {\n opacity: 0;\n transition: opacity 700ms ease;\n}\n.glasshome-widget-backdrop > img.area-night[data-visible] {\n opacity: 1;\n}\n.glasshome-widget-backdrop > .glasshome-widget-backdrop-light {\n position: absolute;\n inset: 0;\n background: radial-gradient(90% 80% at 25% 30%, oklch(0.8 0.14 70), transparent 70%);\n mix-blend-mode: soft-light;\n opacity: var(--backdrop-light, 0);\n transition: opacity 500ms ease;\n}\n.glasshome-widget-backdrop::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: linear-gradient(\n to bottom,\n color-mix(in oklch, var(--card) 82%, transparent) 0%,\n color-mix(in oklch, var(--card) 40%, transparent) 22%,\n transparent 42%,\n transparent 62%,\n color-mix(in oklch, var(--card) 45%, transparent) 82%,\n color-mix(in oklch, var(--card) 80%, transparent) 100%\n );\n}\n\n@container widget (max-width: 239px) {\n .glasshome-widget-choice [data-optional] {\n display: none;\n }\n}\n@container widget (max-width: 259px) {\n .glasshome-widget-head-aside {\n display: none;\n }\n}\n@container widget (max-width: 139px) {\n .glasshome-widget-controls {\n display: none;\n }\n}\n\n.glasshome-widget-controls {\n justify-content: flex-start;\n align-items: center;\n}\n.glasshome-widget-control.glasshome-widget-control {\n width: var(--widget-control-h);\n height: var(--widget-control-h);\n}\n.glasshome-widget-choice .glasshome-widget-control.glasshome-widget-control {\n width: calc(var(--widget-control-h) - 8px);\n height: calc(var(--widget-control-h) - 8px);\n}\n@container widget (max-width: 179px) and (min-height: 130px) {\n .glasshome-widget-grid:not(:has(> .glasshome-widget-backdrop)) .glasshome-widget-head-text {\n min-height: 0;\n }\n .glasshome-widget-grid:not(:has(> .glasshome-widget-backdrop)) .glasshome-widget-head {\n flex-direction: column;\n gap: 6px;\n }\n}\n.glasshome-widget-unit[data-degree] {\n vertical-align: top;\n margin-left: 0.02em;\n color: var(--foreground);\n}\n.glasshome-widget-control-wide.glasshome-widget-control-wide {\n height: var(--widget-control-h);\n gap: 6px;\n padding: 0 14px;\n}\n@container widget (max-width: 179px) {\n .glasshome-widget-grid:has(> .glasshome-widget-backdrop) .glasshome-widget-head-icon {\n display: none;\n }\n}\n.glasshome-widget-grid:has(> .glasshome-widget-backdrop)\n :is(\n .glasshome-widget-reading-value,\n .glasshome-widget-sub,\n .glasshome-widget-name,\n .glasshome-widget-eyebrow\n ) {\n text-shadow: 0 1px 8px color-mix(in oklch, var(--card) 75%, transparent);\n}\n.glasshome-widget-grid:has(> .glasshome-widget-backdrop)\n :is(.glasshome-widget-sub, .glasshome-widget-eyebrow) {\n color: color-mix(in oklch, var(--foreground) 82%, transparent);\n}\n/* Control glyphs and words keep their share of a control as it grows past 4x4. */\n.glasshome-widget-grid\n :is(.glasshome-widget-control, .glasshome-widget-control-wide)\n :is(iconify-icon, svg) {\n font-size: calc(var(--widget-control-h) * 0.43);\n width: 1em;\n height: 1em;\n}\n:is(.glasshome-widget-controls, .glasshome-widget-control-wide) {\n font-size: max(13px, calc(var(--widget-control-h) * 0.3));\n}\n/* A big tile with no art of its own carries its icon large and faint, so the glass is not an empty box. */\n@container widget (min-width: 300px) and (min-height: 260px) {\n .glasshome-widget-grid:not(\n :has(> .glasshome-widget-backdrop),\n :has(> .glasshome-widget-hero[data-art], > .glasshome-widget-art, > .glasshome-widget-layer)\n )\n > .glasshome-widget-glyph {\n display: block;\n right: -3%;\n bottom: -12%;\n font-size: min(78cqb, 52cqi);\n opacity: 0.1;\n }\n}\n/* A one-shot action confirms on its control and on the glyph, the one thing a compact tile shows. */\n.glasshome-widget-grid > .glasshome-widget-glyph {\n transition: opacity var(--duration-state) var(--ease-morph);\n}\n.glasshome-widget[data-confirmed] .glasshome-widget-glyph {\n opacity: 0.5;\n}\n.glasshome-widget-grid\n [data-confirmed]:is(.glasshome-widget-control, .glasshome-widget-control-wide) {\n --glass-base: color-mix(in srgb, var(--widget-color) 35%, transparent);\n transition: background-color var(--duration-state) var(--ease-morph);\n}\n\n/* === Sheet: what a held tile opens (framework/panel) ===\n * Rendered in a popover or dialog outside the widget's shadow root, so every rule\n * the sheet needs lives here, never in a widget's own utilities. */\n.glasshome-sheet {\n display: flex;\n flex-direction: column;\n gap: 18px;\n color: var(--foreground);\n}\n.glasshome-sheet [data-slot=\"swatch-picker\"] {\n max-width: 360px;\n}\n.glasshome-panel-section {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n.glasshome-panel-label {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n color: var(--muted-foreground);\n}\n.glasshome-panel-rows {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 8px;\n}\n.glasshome-panel-row-wrap {\n position: relative;\n min-width: 0;\n}\n.glasshome-panel-row {\n --widget-wash: 22%;\n --widget-wash-2: 11%;\n --widget-radius: var(--radius-lg, 16px);\n --widget-icon-box: 34px;\n --widget-icon-glyph: 19px;\n position: relative;\n width: 100%;\n height: 56px;\n justify-content: flex-start;\n gap: 10px;\n padding: 0 12px 0 10px;\n overflow: hidden;\n text-align: left;\n touch-action: pan-y;\n}\n.glasshome-panel-row-static {\n cursor: default;\n scale: none;\n}\n.glasshome-panel-row-fill {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n.glasshome-panel-row-icon {\n position: relative;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n}\n.glasshome-panel-row-icon-off {\n color: var(--muted-foreground);\n}\n.glasshome-panel-row-text {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.glasshome-panel-row-name,\n.glasshome-panel-row-state,\n.glasshome-panel-fact-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n/* A reading may take a second line rather than lose its end (\"3 Moderate\"). */\n.glasshome-panel-fact-value {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.glasshome-panel-row-name,\n.glasshome-panel-fact-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--foreground);\n}\n.glasshome-panel-row-state,\n.glasshome-panel-fact-label {\n font-size: 12px;\n font-weight: 400;\n color: var(--muted-foreground);\n}\n.glasshome-panel-row-trailing {\n position: absolute;\n top: 50%;\n right: 10px;\n translate: 0 -50%;\n}\n.glasshome-panel-facts {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));\n row-gap: 10px;\n padding: 10px 4px 10px 0;\n overflow: hidden;\n border-radius: var(--radius-lg, 16px);\n --glass-base: color-mix(in srgb, var(--card) var(--material-clarity, 60%), transparent);\n backdrop-filter: blur(calc(var(--material-blur, 24px) * 0.6)) saturate(1.6);\n -webkit-backdrop-filter: blur(calc(var(--material-blur, 24px) * 0.6)) saturate(1.6);\n}\n/* Without blur a see-through strip is just see-through: it takes the card fill. */\n.reduce-blur .glasshome-panel-facts {\n --glass-base: var(--card);\n}\n.glasshome-panel-fact {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 8px;\n padding: 0 12px;\n box-shadow: -1px 0 0 color-mix(in oklch, var(--foreground) 10%, transparent);\n}\n.glasshome-panel-fact-icon {\n flex-shrink: 0;\n font-size: 18px;\n color: var(--muted-foreground);\n}\n\n/* Inset: the grid cell clips anything drawn outside the tile. */\n.glasshome-widget:focus-visible {\n outline: 2px solid var(--ring);\n outline-offset: -2px;\n}\n\n/* === Hold flood: the dock's hold fill (ui HOLD_MOTION), grown from the finger === */\n.glasshome-widget-hold-flood {\n position: absolute;\n translate: -50% -50%;\n border-radius: 9999px;\n background: color-mix(in oklch, var(--primary) 45%, transparent);\n pointer-events: none;\n scale: 0;\n opacity: 0;\n transition:\n scale var(--duration-state, 200ms) var(--ease-contract, ease-in),\n opacity var(--duration-state, 200ms) var(--ease-contract, ease-in);\n}\n.glasshome-widget-hold-flood[data-hold] {\n scale: 1;\n opacity: 1;\n transition-duration: var(--duration-hold, 250ms);\n transition-timing-function: linear;\n}\n.glasshome-widget-hold-flood[data-fired] {\n scale: 1;\n opacity: 0;\n}\n/* A row of ui buttons in a sheet (scenes, one-tap actions). */\n.glasshome-sheet-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n/* The sheet wears its tile: the tile's tone washed into the glass, its picture as a band behind\n the head that fades into the glass, so the tile reads as having grown open. */\n.glasshome-sheet-surface {\n --glass-wash: 20%;\n --glass-wash-2: 7%;\n --widget-icon-box: 48px;\n --widget-icon-glyph: 26px;\n}\n.glasshome-sheet-band {\n position: absolute;\n inset: 0 0 auto;\n height: 150px;\n overflow: hidden;\n pointer-events: none;\n mask-image: linear-gradient(180deg, #000 30%, transparent);\n}\n.glasshome-sheet-band > img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n opacity: 0.55;\n}\n.glasshome-sheet-surface > [data-slot$=\"-header\"],\n.glasshome-sheet-surface > [data-slot$=\"-body\"] {\n position: relative;\n}\n.glasshome-sheet-icon {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n", sr = !1, cr, lr = /* @__PURE__ */ new WeakSet();
712
712
  function ur() {
713
713
  return cr || (cr = new CSSStyleSheet(), cr.replaceSync(or.replace(/:root\b/g, ":host").replace(/^\.dark\b/gm, ":host(.dark)"))), cr;
714
714
  }
@@ -756,16 +756,16 @@ function pr(e) {
756
756
  }
757
757
  //#endregion
758
758
  //#region src/framework/backgrounds/WidgetSliderFill.tsx
759
- var mr = /*#__PURE__*/ z("<div>"), hr = e(() => void 0, "sliderFill.color");
759
+ var mr = /*#__PURE__*/ V("<div>"), hr = e(() => void 0, "sliderFill.color");
760
760
  function gr(e) {
761
761
  return e.color !== void 0 && hr(), (() => {
762
762
  var t = mr();
763
- return N((n) => {
763
+ return F((n) => {
764
764
  var r = J("glasshome-widget-slider-fill pointer-events-none absolute inset-0", e.isDragging ? "duration-0" : "transition-all duration-300 ease-out", e.class), i = {
765
765
  "--widget-fill-value": e.value,
766
766
  "z-index": an.BACKGROUND
767
767
  };
768
- return r !== n.e && j(t, n.e = r), n.t = R(t, i, n.t), n;
768
+ return r !== n.e && N(t, n.e = r), n.t = B(t, i, n.t), n;
769
769
  }, {
770
770
  e: void 0,
771
771
  t: void 0
@@ -774,16 +774,16 @@ function gr(e) {
774
774
  }
775
775
  //#endregion
776
776
  //#region src/framework/components/WidgetContent.tsx
777
- var _r = /*#__PURE__*/ z("<div>"), vr = /\bglasshome-widget-(head|hero|controls|backdrop|glyph|layer)\b/;
777
+ var _r = /*#__PURE__*/ V("<div>"), vr = /\bglasshome-widget-(head|hero|controls|backdrop|glyph|layer)\b/;
778
778
  function yr(e) {
779
- let t = un(k(U));
780
- T(() => t?.setAccent(e.accent)), O(() => t?.setAccent(void 0));
781
- let n = me(() => e.children), r = E(() => n.toArray().some((e) => e instanceof Element && vr.test(e.className)));
779
+ let t = un(j(W));
780
+ D(() => t?.setAccent(e.accent)), A(() => t?.setAccent(void 0));
781
+ let n = fe(() => e.children), r = O(() => n.toArray().some((e) => e instanceof Element && vr.test(e.className)));
782
782
  return (() => {
783
783
  var t = _r();
784
- return P(t, n), N((n) => {
784
+ return I(t, n), F((n) => {
785
785
  var i = J(r() ? "glasshome-widget-grid" : "glasshome-widget-content", e.class), a = e.accent ? { "--widget-color": e.accent } : void 0;
786
- return i !== n.e && j(t, n.e = i), n.t = R(t, a, n.t), n;
786
+ return i !== n.e && N(t, n.e = i), n.t = B(t, a, n.t), n;
787
787
  }, {
788
788
  e: void 0,
789
789
  t: void 0
@@ -792,16 +792,16 @@ function yr(e) {
792
792
  }
793
793
  //#endregion
794
794
  //#region src/framework/components/WidgetStatus.tsx
795
- var br = /*#__PURE__*/ z("<p>");
795
+ var br = /*#__PURE__*/ V("<p>");
796
796
  function xr(e) {
797
797
  return (() => {
798
798
  var t = br();
799
- return P(t, (() => {
800
- var t = F(() => !!e.isUnavailable);
799
+ return I(t, (() => {
800
+ var t = L(() => !!e.isUnavailable);
801
801
  return () => t() ? "Unavailable" : e.children;
802
- })()), N((n) => {
802
+ })()), F((n) => {
803
803
  var r = J("glasshome-widget-status", "relative", e.dimmed && "opacity-40", e.class), i = an.ACTIONS;
804
- return r !== n.e && j(t, n.e = r), i !== n.t && L(t, "z-index", n.t = i), n;
804
+ return r !== n.e && N(t, n.e = r), i !== n.t && z(t, "z-index", n.t = i), n;
805
805
  }, {
806
806
  e: void 0,
807
807
  t: void 0
@@ -810,21 +810,21 @@ function xr(e) {
810
810
  }
811
811
  //#endregion
812
812
  //#region src/framework/components/WidgetTitle.tsx
813
- var Sr = /*#__PURE__*/ z("<span class=\"glasshome-widget-badge shrink-0\">"), Cr = /*#__PURE__*/ z("<div><h3 class=glasshome-widget-title>");
813
+ var Sr = /*#__PURE__*/ V("<span class=\"glasshome-widget-badge shrink-0\">"), Cr = /*#__PURE__*/ V("<div><h3 class=glasshome-widget-title>");
814
814
  function wr(e) {
815
815
  return (() => {
816
816
  var t = Cr(), n = t.firstChild;
817
- return P(n, () => e.children), P(t, M(w, {
817
+ return I(n, () => e.children), I(t, P(E, {
818
818
  get when() {
819
- return F(() => e.badge !== void 0)() && e.badge > 0;
819
+ return L(() => e.badge !== void 0)() && e.badge > 0;
820
820
  },
821
821
  get children() {
822
822
  var t = Sr();
823
- return P(t, () => e.badge), t;
823
+ return I(t, () => e.badge), t;
824
824
  }
825
- }), null), N((n) => {
825
+ }), null), F((n) => {
826
826
  var r = J("relative flex items-center gap-2", e.class), i = an.ACTIONS;
827
- return r !== n.e && j(t, n.e = r), i !== n.t && L(t, "z-index", n.t = i), n;
827
+ return r !== n.e && N(t, n.e = r), i !== n.t && z(t, "z-index", n.t = i), n;
828
828
  }, {
829
829
  e: void 0,
830
830
  t: void 0
@@ -856,8 +856,8 @@ function Dr() {
856
856
  return e instanceof HTMLElement ? e : null;
857
857
  }
858
858
  function Or(e = 2e3) {
859
- let [t, n] = D("idle"), r;
860
- return O(() => clearTimeout(r)), {
859
+ let [t, n] = k("idle"), r;
860
+ return A(() => clearTimeout(r)), {
861
861
  state: t,
862
862
  copy: async (t) => {
863
863
  n(await Tr(t) ? "copied" : "failed"), clearTimeout(r), r = setTimeout(() => n("idle"), e);
@@ -913,25 +913,25 @@ function kr(e, t = !1) {
913
913
  break;
914
914
  case "unavailable": s++;
915
915
  }
916
- let d = e.length, f = s === d, p = o + s === d, m = i > 0, h = i === d, ee = a === d, g, _;
917
- t ? f ? (g = "unavailable", _ = !1) : o > 0 || s > 0 ? (g = "unknown", _ = !1) : a > 0 ? (g = "off", _ = !1) : (g = "on", _ = !0) : f ? (g = "unavailable", _ = !1) : p ? (g = "unknown", _ = !1) : m ? (g = "on", _ = !0) : (g = "off", _ = !1);
918
- let v = l > 0 ? Math.round(c / l) : 0, y = Math.round(v / 255 * 100), b;
916
+ let d = e.length, f = s === d, p = o + s === d, m = i > 0, h = i === d, g = a === d, _, v;
917
+ t ? f ? (_ = "unavailable", v = !1) : o > 0 || s > 0 ? (_ = "unknown", v = !1) : a > 0 ? (_ = "off", v = !1) : (_ = "on", v = !0) : f ? (_ = "unavailable", v = !1) : p ? (_ = "unknown", v = !1) : m ? (_ = "on", v = !0) : (_ = "off", v = !1);
918
+ let y = l > 0 ? Math.round(c / l) : 0, b = Math.round(y / 255 * 100), x;
919
919
  if (u.length > 0) {
920
- let e = Math.round(u.reduce((e, t) => e + t[0], 0) / u.length), t = Math.round(u.reduce((e, t) => e + t[1], 0) / u.length), n = Math.round(u.reduce((e, t) => e + t[2], 0) / u.length), r = v / 255;
921
- b = `rgb(${Math.round(e * r)}, ${Math.round(t * r)}, ${Math.round(n * r)})`;
922
- } else b = Mr(n);
923
- let x;
924
- return x = h ? "All on" : ee ? "All off" : i > 0 ? `${i} of ${d} on` : "Off", {
920
+ let e = Math.round(u.reduce((e, t) => e + t[0], 0) / u.length), t = Math.round(u.reduce((e, t) => e + t[1], 0) / u.length), n = Math.round(u.reduce((e, t) => e + t[2], 0) / u.length), r = y / 255;
921
+ x = `rgb(${Math.round(e * r)}, ${Math.round(t * r)}, ${Math.round(n * r)})`;
922
+ } else x = Mr(n);
923
+ let S;
924
+ return S = h ? "All on" : g ? "All off" : i > 0 ? `${i} of ${d} on` : "Off", {
925
925
  isGroup: r,
926
- state: g,
927
- isOn: _,
928
- isUnavailable: g === "unavailable",
929
- brightness: v,
930
- brightnessPercent: y,
931
- color: b,
926
+ state: _,
927
+ isOn: v,
928
+ isUnavailable: _ === "unavailable",
929
+ brightness: y,
930
+ brightnessPercent: b,
931
+ color: x,
932
932
  onCount: i,
933
933
  totalCount: d,
934
- description: x
934
+ description: S
935
935
  };
936
936
  }
937
937
  function Ar(e, t = "mean", n = !0) {
@@ -1098,40 +1098,40 @@ function Lr(e, t) {
1098
1098
  }
1099
1099
  //#endregion
1100
1100
  //#region src/framework/components/WidgetValue.tsx
1101
- var Rr = /*#__PURE__*/ z("<div class=glasshome-widget-subtitle>"), zr = /*#__PURE__*/ z("<div><div class=glasshome-widget-value>");
1101
+ var Rr = /*#__PURE__*/ V("<div class=glasshome-widget-subtitle>"), zr = /*#__PURE__*/ V("<div><div class=glasshome-widget-value>");
1102
1102
  function Br(e) {
1103
1103
  return (() => {
1104
1104
  var t = zr(), n = t.firstChild;
1105
- return P(n, () => Ir(e.value, e.unit)), P(t, M(w, {
1105
+ return I(n, () => Ir(e.value, e.unit)), I(t, P(E, {
1106
1106
  get when() {
1107
- return F(() => !!e.interpret)() && typeof e.value == "number";
1107
+ return L(() => !!e.interpret)() && typeof e.value == "number";
1108
1108
  },
1109
1109
  get children() {
1110
1110
  var t = Rr();
1111
- return P(t, () => Lr(e.value, e.unit)), t;
1111
+ return I(t, () => Lr(e.value, e.unit)), t;
1112
1112
  }
1113
- }), null), N(() => j(t, J("flex flex-col", e.class))), t;
1113
+ }), null), F(() => N(t, J("flex flex-col", e.class))), t;
1114
1114
  })();
1115
1115
  }
1116
1116
  //#endregion
1117
1117
  //#region src/framework/core/Widget.tsx
1118
- var Vr = /*#__PURE__*/ z("<span class=glasshome-widget-hold-flood aria-hidden=true>"), Hr = /*#__PURE__*/ z("<div><div class=\"relative h-full w-full\">"), Ur = /*#__PURE__*/ z("<div class=\"glasshome-widget-loading pointer-events-none absolute inset-0 animate-pulse\">"), Wr = /*#__PURE__*/ z("<div class=\"flex h-full w-full flex-col items-center justify-center gap-2 text-center\">"), Gr = /*#__PURE__*/ z("<div class=\"text-muted-foreground flex items-center justify-center\">"), Kr = /*#__PURE__*/ z("<h3 class=\"text-foreground text-sm font-semibold\">"), qr = /*#__PURE__*/ z("<p class=\"text-muted-foreground text-xs\">"), Jr = 2e3;
1118
+ var Vr = /*#__PURE__*/ V("<span class=glasshome-widget-hold-flood aria-hidden=true>"), Hr = /*#__PURE__*/ V("<div class=\"glasshome-widget-frame relative h-full w-full\"><div><div class=\"relative h-full w-full\"></div></div><div class=\"glasshome-widget-halo glass-halo rounded-xl\"aria-hidden=true>"), Ur = /*#__PURE__*/ V("<div class=\"glasshome-widget-loading pointer-events-none absolute inset-0 animate-pulse\">"), Wr = /*#__PURE__*/ V("<div class=\"flex h-full w-full flex-col items-center justify-center gap-2 text-center\">"), Gr = /*#__PURE__*/ V("<div class=\"text-muted-foreground flex items-center justify-center\">"), Kr = /*#__PURE__*/ V("<h3 class=\"text-foreground text-sm font-semibold\">"), qr = /*#__PURE__*/ V("<p class=\"text-muted-foreground text-xs\">"), Jr = 2e3;
1119
1119
  function Yr(t) {
1120
- let n = k(U), r = On(() => ({ hold: { action: () => (G.get(n ?? {}) ?? G.get(f))?.("edit") } }));
1121
- O(r.dispose);
1120
+ let n = j(W), r = On(() => ({ hold: { action: () => (G.get(n ?? {}) ?? G.get(f))?.("edit") } }));
1121
+ A(r.dispose);
1122
1122
  let i = un(n), a = !!n && !(cn in n), o = On(() => ({ hold: i?.hasSheet() ? { action: () => (G.get(n ?? {}) ?? G.get(f))?.() } : void 0 }));
1123
- O(o.dispose);
1123
+ A(o.dispose);
1124
1124
  let s = () => t.emptyState && n ? r : t.gestures ?? (a ? o : void 0);
1125
- a && (T(() => n?.onHoldable?.(!t.emptyState && !!s()?.holds?.())), O(() => n?.onHoldable?.(!1))), T(() => {
1125
+ a && (D(() => n?.onHoldable?.(!t.emptyState && !!s()?.holds?.())), A(() => n?.onHoldable?.(!1))), D(() => {
1126
1126
  if (!a || !i?.nothingMore()) return;
1127
1127
  let e = setTimeout(() => i.setNothingMore(!1), Jr);
1128
- O(() => clearTimeout(e));
1129
- }), T(() => i?.setTone(t.color ?? (t.tone ? `var(--tone-${t.tone})` : void 0)));
1130
- let [c, l] = D(), [u, d] = D({
1128
+ A(() => clearTimeout(e));
1129
+ }), D(() => i?.setTone(t.color ?? (t.tone ? `var(--tone-${t.tone})` : void 0)));
1130
+ let [c, l] = k(), [u, d] = k({
1131
1131
  width: 0,
1132
1132
  height: 0
1133
1133
  });
1134
- T(() => {
1134
+ D(() => {
1135
1135
  let e = c();
1136
1136
  if (!e) return;
1137
1137
  let t = new ResizeObserver(([e]) => {
@@ -1145,8 +1145,8 @@ function Yr(t) {
1145
1145
  height: e.contentRect.height
1146
1146
  });
1147
1147
  });
1148
- t.observe(e), O(() => t.disconnect());
1149
- }), _e(() => {
1148
+ t.observe(e), A(() => t.disconnect());
1149
+ }), he(() => {
1150
1150
  let e = c()?.getRootNode();
1151
1151
  dr(typeof ShadowRoot < "u" && e instanceof ShadowRoot || typeof Document < "u" && e instanceof Document ? e : void 0);
1152
1152
  });
@@ -1156,80 +1156,82 @@ function Yr(t) {
1156
1156
  dimensions: e(() => u(), "ctx.dimensions")
1157
1157
  };
1158
1158
  n && Object.defineProperty(f, cn, { value: n });
1159
- let p = E(() => {
1159
+ let p = O(() => {
1160
1160
  if (t.variant) return typeof t.variant == "string" ? pr(t.variant) : t.variant.styles;
1161
- }), m = e(() => t.gradient, "widget.gradient"), h = () => !!t.tone && t.tone !== "neutral" || !!t.color, ee = E(() => ({
1161
+ }), m = e(() => t.gradient, "widget.gradient"), h = () => !!t.tone && t.tone !== "neutral" || !!t.color, g = O(() => ({
1162
+ ...p()?.cssVars || {},
1163
+ ...t.tone ? { "--widget-color": `var(--tone-${t.tone})` } : {},
1164
+ ...t.color ? { "--widget-color": t.color } : {},
1165
+ ...h() ? { "--glass-tone": "var(--widget-color)" } : {}
1166
+ })), _ = O(() => ({
1162
1167
  "container-type": "size",
1163
1168
  "container-name": "widget",
1164
1169
  "touch-action": s() && !t.isEditMode ? s()?.touchAction() : void 0,
1165
1170
  ...p()?.container,
1166
- ...p()?.cssVars || {},
1167
- ...t.tone ? { "--widget-color": `var(--tone-${t.tone})` } : {},
1168
- ...t.color ? { "--widget-color": t.color } : {},
1169
- ...h() ? { "--glass-tone": "var(--widget-color)" } : {},
1171
+ ...g(),
1170
1172
  ...t.colorTo ? {
1171
1173
  "--widget-color-to": t.colorTo,
1172
1174
  "--glass-tone-2": t.colorTo
1173
1175
  } : {},
1174
1176
  ...t.gradient ? { "background-image": m() } : {}
1175
- })), g = () => !!s() && !t.isEditMode, _ = (e) => {
1176
- g() && s()?.onPointerEnter(e);
1177
- }, v = (e) => {
1178
- g() && s()?.onPointerDown(e);
1179
- }, y = (e) => {
1180
- g() && s()?.onPointerMove(e);
1177
+ })), v = () => !!s() && !t.isEditMode, y = (e) => {
1178
+ v() && s()?.onPointerEnter(e);
1181
1179
  }, b = (e) => {
1182
- g() && s()?.onPointerUp(e);
1180
+ v() && s()?.onPointerDown(e);
1183
1181
  }, x = (e) => {
1184
- g() && s()?.onPointerCancel(e);
1185
- }, te = () => s()?.hold?.() ?? null, S = {
1182
+ v() && s()?.onPointerMove(e);
1183
+ }, S = (e) => {
1184
+ v() && s()?.onPointerUp(e);
1185
+ }, ee = (e) => {
1186
+ v() && s()?.onPointerCancel(e);
1187
+ }, C = () => s()?.hold?.() ?? null, w = {
1186
1188
  x: 0,
1187
1189
  y: 0,
1188
1190
  r: 0
1189
- }, ne = (e) => (e && Object.assign(S, {
1191
+ }, te = (e) => (e && Object.assign(w, {
1190
1192
  x: e.x,
1191
1193
  y: e.y,
1192
1194
  r: e.r
1193
1195
  }), {
1194
- left: `${S.x}px`,
1195
- top: `${S.y}px`,
1196
- width: `${S.r * 2}px`,
1197
- height: `${S.r * 2}px`,
1196
+ left: `${w.x}px`,
1197
+ top: `${w.y}px`,
1198
+ width: `${w.r * 2}px`,
1199
+ height: `${w.r * 2}px`,
1198
1200
  "z-index": an.BACKGROUND
1199
1201
  });
1200
- return M(U.Provider, {
1202
+ return P(W.Provider, {
1201
1203
  value: f,
1202
1204
  get children() {
1203
- return M(Jn.Provider, {
1205
+ return P(Jn.Provider, {
1204
1206
  value: () => t.confirmed === !0,
1205
1207
  get children() {
1206
- return M(kn.Provider, {
1208
+ return P(kn.Provider, {
1207
1209
  value: u,
1208
1210
  get children() {
1209
1211
  return [(() => {
1210
- var e = Hr(), n = e.firstChild;
1211
- return e.$$keydown = (e) => {
1212
- g() && s()?.onKeyDown?.(e);
1213
- }, A(e, "pointercancel", x), A(e, "pointerup", b), A(e, "pointermove", y), A(e, "pointerdown", v), A(e, "pointerenter", _), B((e) => {
1212
+ var e = Hr(), n = e.firstChild, i = n.firstChild, a = n.nextSibling;
1213
+ return n.$$keydown = (e) => {
1214
+ v() && s()?.onKeyDown?.(e);
1215
+ }, M(n, "pointercancel", ee), M(n, "pointerup", S), M(n, "pointermove", x), M(n, "pointerdown", b), M(n, "pointerenter", y), H((e) => {
1214
1216
  l(e), t.gestures?.bindElement(e), r.bindElement(e);
1215
- }, e), P(e, M(w, {
1217
+ }, n), I(n, P(E, {
1216
1218
  get when() {
1217
1219
  return s()?.hold;
1218
1220
  },
1219
1221
  get children() {
1220
1222
  var e = Vr();
1221
- return N((t) => {
1222
- var n = te() && !te()?.fired ? "" : void 0, r = te()?.fired ? "" : void 0, i = ne(te());
1223
- return n !== t.e && I(e, "data-hold", t.e = n), r !== t.t && I(e, "data-fired", t.t = r), t.a = R(e, i, t.a), t;
1223
+ return F((t) => {
1224
+ var n = C() && !C()?.fired ? "" : void 0, r = C()?.fired ? "" : void 0, i = te(C());
1225
+ return n !== t.e && R(e, "data-hold", t.e = n), r !== t.t && R(e, "data-fired", t.t = r), t.a = B(e, i, t.a), t;
1224
1226
  }, {
1225
1227
  e: void 0,
1226
1228
  t: void 0,
1227
1229
  a: void 0
1228
1230
  }), e;
1229
1231
  }
1230
- }), n), P(n, (() => {
1231
- var e = F(() => !!t.emptyState);
1232
- return () => e() ? M(Xr, {
1232
+ }), i), I(i, (() => {
1233
+ var e = L(() => !!t.emptyState);
1234
+ return () => e() ? P(Xr, {
1233
1235
  get icon() {
1234
1236
  return t.emptyState.icon;
1235
1237
  },
@@ -1240,27 +1242,29 @@ function Yr(t) {
1240
1242
  return t.emptyState.message;
1241
1243
  }
1242
1244
  }) : t.children;
1243
- })()), P(e, (() => {
1244
- var e = F(() => !!t.loading);
1245
+ })()), I(n, (() => {
1246
+ var e = L(() => !!t.loading);
1245
1247
  return () => e() && (() => {
1246
1248
  var e = Ur();
1247
- return N((t) => L(e, "z-index", an.OVERLAY)), e;
1249
+ return F((t) => z(e, "z-index", an.OVERLAY)), e;
1248
1250
  })();
1249
- })(), null), N((r) => {
1250
- var i = J("glasshome-widget glass", "relative h-full w-full overflow-hidden rounded-xl select-none", p()?.class, t.class), a = ee(), o = h() ? "" : void 0, s = t.confirmed || void 0, c = g() ? 0 : void 0, l = an.CONTENT;
1251
- return i !== r.e && j(e, r.e = i), r.t = R(e, a, r.t), o !== r.a && I(e, "data-toned", r.a = o), s !== r.o && I(e, "data-confirmed", r.o = s), c !== r.i && I(e, "tabindex", r.i = c), l !== r.n && L(n, "z-index", r.n = l), r;
1251
+ })(), null), F((e) => {
1252
+ var r = J("glasshome-widget glass", "relative h-full w-full overflow-hidden rounded-xl select-none", p()?.class, t.class), o = _(), s = h() ? "" : void 0, c = t.confirmed || void 0, l = v() ? 0 : void 0, u = an.CONTENT, d = g(), f = h() ? "" : void 0;
1253
+ return r !== e.e && N(n, e.e = r), e.t = B(n, o, e.t), s !== e.a && R(n, "data-toned", e.a = s), c !== e.o && R(n, "data-confirmed", e.o = c), l !== e.i && R(n, "tabindex", e.i = l), u !== e.n && z(i, "z-index", e.n = u), e.s = B(a, d, e.s), f !== e.h && R(a, "data-toned", e.h = f), e;
1252
1254
  }, {
1253
1255
  e: void 0,
1254
1256
  t: void 0,
1255
1257
  a: void 0,
1256
1258
  o: void 0,
1257
1259
  i: void 0,
1258
- n: void 0
1260
+ n: void 0,
1261
+ s: void 0,
1262
+ h: void 0
1259
1263
  }), e;
1260
- })(), M(w, {
1264
+ })(), P(E, {
1261
1265
  when: a,
1262
1266
  get children() {
1263
- return M(Qe, {
1267
+ return P(Ze, {
1264
1268
  get open() {
1265
1269
  return i?.nothingMore() ?? !1;
1266
1270
  },
@@ -1269,10 +1273,10 @@ function Yr(t) {
1269
1273
  },
1270
1274
  anchorRef: c,
1271
1275
  get children() {
1272
- return M($e, {
1276
+ return P(Qe, {
1273
1277
  class: "flex w-auto items-center gap-2 p-3 text-sm",
1274
1278
  get children() {
1275
- return [M(H, { icon: "mdi:information-outline" }), "No more controls for this widget"];
1279
+ return [P(U, { icon: "mdi:information-outline" }), "No more controls for this widget"];
1276
1280
  }
1277
1281
  });
1278
1282
  }
@@ -1289,34 +1293,34 @@ function Yr(t) {
1289
1293
  function Xr(e) {
1290
1294
  return (() => {
1291
1295
  var t = Wr();
1292
- return P(t, (() => {
1293
- var t = F(() => !!e.icon);
1296
+ return I(t, (() => {
1297
+ var t = L(() => !!e.icon);
1294
1298
  return () => t() && (() => {
1295
1299
  var t = Gr();
1296
- return P(t, () => e.icon), t;
1300
+ return I(t, () => e.icon), t;
1297
1301
  })();
1298
- })(), null), P(t, (() => {
1299
- var t = F(() => !!e.title);
1302
+ })(), null), I(t, (() => {
1303
+ var t = L(() => !!e.title);
1300
1304
  return () => t() && (() => {
1301
1305
  var t = Kr();
1302
- return P(t, () => e.title), t;
1306
+ return I(t, () => e.title), t;
1303
1307
  })();
1304
- })(), null), P(t, (() => {
1305
- var t = F(() => !!e.message);
1308
+ })(), null), I(t, (() => {
1309
+ var t = L(() => !!e.message);
1306
1310
  return () => t() && (() => {
1307
1311
  var t = qr();
1308
- return P(t, () => e.message), t;
1312
+ return I(t, () => e.message), t;
1309
1313
  })();
1310
1314
  })(), null), t;
1311
1315
  })();
1312
1316
  }
1313
1317
  var Y = Yr;
1314
- Y.Content = yr, Y.Icon = In, Y.Title = wr, Y.Status = xr, Y.Value = Br, Y.SliderFill = gr, Y.Head = Xn, Y.Hero = Zn, Y.Controls = Qn, Y.Stepper = $n, Y.Choice = er, Y.Action = tr, Y.Chip = nr, Y.Backdrop = ir, Y.Layer = rr, Y.Glyph = ar, ye(["keydown"]);
1318
+ Y.Content = yr, Y.Icon = In, Y.Title = wr, Y.Status = xr, Y.Value = Br, Y.SliderFill = gr, Y.Head = Xn, Y.Hero = Zn, Y.Controls = Qn, Y.Stepper = $n, Y.Choice = er, Y.Action = tr, Y.Chip = nr, Y.Backdrop = ir, Y.Layer = rr, Y.Glyph = ar, _e(["keydown"]);
1315
1319
  //#endregion
1316
1320
  //#region src/framework/panel/panel.tsx
1317
- var Zr = /*#__PURE__*/ z("<section class=glasshome-panel-section><h3 class=glasshome-panel-label>"), Qr = /*#__PURE__*/ z("<div class=glasshome-panel-rows>"), $r = /*#__PURE__*/ z("<span class=\"glasshome-widget-slider-fill glasshome-panel-row-fill\">"), ei = /*#__PURE__*/ z("<span class=\"glasshome-widget-icon glass glasshome-panel-row-icon\">"), ti = /*#__PURE__*/ z("<span class=glasshome-panel-row-state>"), ni = /*#__PURE__*/ z("<span class=glasshome-panel-row-text><span class=glasshome-panel-row-name>"), ri = /*#__PURE__*/ z("<span class=glasshome-panel-row-trailing>"), ii = /*#__PURE__*/ z("<div class=glasshome-panel-row-wrap>"), ai = /*#__PURE__*/ z("<div>"), oi = /*#__PURE__*/ z("<div class=\"glasshome-panel-facts glass\">"), si = /*#__PURE__*/ z("<div class=glasshome-panel-fact><span class=glasshome-panel-row-text><span class=glasshome-panel-fact-label></span><span class=glasshome-panel-fact-value>"), ci = 8, li = (e, t, n) => Math.min(n, Math.max(t, e));
1321
+ var Zr = /*#__PURE__*/ V("<section class=glasshome-panel-section><h3 class=glasshome-panel-label>"), Qr = /*#__PURE__*/ V("<div class=glasshome-panel-rows>"), $r = /*#__PURE__*/ V("<span class=\"glasshome-widget-slider-fill glasshome-panel-row-fill\">"), ei = /*#__PURE__*/ V("<span class=\"glasshome-widget-icon glass glasshome-panel-row-icon\">"), ti = /*#__PURE__*/ V("<span class=glasshome-panel-row-state>"), ni = /*#__PURE__*/ V("<span class=glasshome-panel-row-text><span class=glasshome-panel-row-name>"), ri = /*#__PURE__*/ V("<span class=glasshome-panel-row-trailing>"), ii = /*#__PURE__*/ V("<div class=glasshome-panel-row-wrap>"), ai = /*#__PURE__*/ V("<div>"), oi = /*#__PURE__*/ V("<div class=\"glasshome-panel-facts glass\">"), si = /*#__PURE__*/ V("<div class=glasshome-panel-fact><span class=glasshome-panel-row-text><span class=glasshome-panel-fact-label></span><span class=glasshome-panel-fact-value>"), ci = 8, li = (e, t, n) => Math.min(n, Math.max(t, e));
1318
1322
  function ui(e) {
1319
- let t = k(U), n, r = !1, i = !1, a, o = 0, s = (t, n) => {
1323
+ let t = j(W), n, r = !1, i = !1, a, o = 0, s = (t, n) => {
1320
1324
  let r = e.slide?.();
1321
1325
  if (!r) return 0;
1322
1326
  let i = t.getBoundingClientRect(), a = e.axis === "x" ? (n.clientX - i.left) / i.width : 1 - (n.clientY - i.top) / i.height, o = r.min ?? 0, s = r.max ?? 100;
@@ -1324,7 +1328,7 @@ function ui(e) {
1324
1328
  }, c = () => {
1325
1329
  clearTimeout(a), n = void 0;
1326
1330
  };
1327
- return O(() => clearTimeout(a)), {
1331
+ return A(() => clearTimeout(a)), {
1328
1332
  onPointerDown: (o) => {
1329
1333
  if (o.button !== 0 || n) return;
1330
1334
  let s = o.target instanceof Element ? o.target.closest(Dn) : null;
@@ -1334,7 +1338,7 @@ function ui(e) {
1334
1338
  id: o.pointerId
1335
1339
  }, o.currentTarget.setPointerCapture?.(o.pointerId), r = !1, i = !1, e.onHold && (a = setTimeout(() => {
1336
1340
  i = !0, e.onHold?.(), t?.onHeld?.();
1337
- }, Je)));
1341
+ }, qe)));
1338
1342
  },
1339
1343
  onPointerMove: (t) => {
1340
1344
  if (!n || t.pointerId !== n.id || i) return;
@@ -1350,13 +1354,13 @@ function ui(e) {
1350
1354
  function di(e) {
1351
1355
  return (() => {
1352
1356
  var t = Zr(), n = t.firstChild;
1353
- return P(n, () => e.label), P(t, () => e.children, null), t;
1357
+ return I(n, () => e.label), I(t, () => e.children, null), t;
1354
1358
  })();
1355
1359
  }
1356
1360
  function fi(e) {
1357
1361
  return (() => {
1358
1362
  var t = Qr();
1359
- return P(t, () => e.children), t;
1363
+ return I(t, () => e.children), t;
1360
1364
  })();
1361
1365
  }
1362
1366
  function pi(e) {
@@ -1380,23 +1384,23 @@ function pi(e) {
1380
1384
  let i = li(n.value + r, n.min ?? 0, n.max ?? 100);
1381
1385
  n.onChange(i), n.onCommit?.(i);
1382
1386
  }, a = () => [
1383
- M(w, {
1387
+ P(E, {
1384
1388
  get when() {
1385
1389
  return r() !== void 0;
1386
1390
  },
1387
1391
  get children() {
1388
1392
  var e = $r();
1389
- return N((t) => R(e, { "--widget-fill-value": r() }, t)), e;
1393
+ return F((t) => B(e, { "--widget-fill-value": r() }, t)), e;
1390
1394
  }
1391
1395
  }),
1392
1396
  (() => {
1393
1397
  var t = ei();
1394
- return P(t, M(H, {
1398
+ return I(t, P(U, {
1395
1399
  get icon() {
1396
1400
  return e.icon;
1397
1401
  },
1398
1402
  class: "glasshome-widget-icon-glyph"
1399
- })), N((n) => {
1403
+ })), F((n) => {
1400
1404
  var r = !!e.on, i = !e.on;
1401
1405
  return r !== n.e && t.classList.toggle("glass-tint", n.e = r), i !== n.t && t.classList.toggle("glasshome-panel-row-icon-off", n.t = i), n;
1402
1406
  }, {
@@ -1406,32 +1410,32 @@ function pi(e) {
1406
1410
  })(),
1407
1411
  (() => {
1408
1412
  var t = ni(), n = t.firstChild;
1409
- return P(n, () => e.name), P(t, M(w, {
1413
+ return I(n, () => e.name), I(t, P(E, {
1410
1414
  get when() {
1411
1415
  return e.state !== void 0;
1412
1416
  },
1413
1417
  get children() {
1414
1418
  var t = ti();
1415
- return P(t, () => e.state), t;
1419
+ return I(t, () => e.state), t;
1416
1420
  }
1417
1421
  }), null), t;
1418
1422
  })()
1419
1423
  ], o = () => ({ "--widget-color": e.tone ?? "var(--tone-neutral)" });
1420
1424
  return (() => {
1421
1425
  var r = ii();
1422
- return P(r, M(w, {
1426
+ return I(r, P(E, {
1423
1427
  get when() {
1424
1428
  return t();
1425
1429
  },
1426
1430
  get fallback() {
1427
1431
  return (() => {
1428
1432
  var e = ai();
1429
- return P(e, a), N((t) => {
1430
- var n = `${zt({
1433
+ return I(e, a), F((t) => {
1434
+ var n = `${Rt({
1431
1435
  variant: "outline",
1432
1436
  size: "none"
1433
1437
  })} glasshome-panel-row glasshome-panel-row-static`, r = o();
1434
- return n !== t.e && j(e, t.e = n), t.t = R(e, r, t.t), t;
1438
+ return n !== t.e && N(e, t.e = n), t.t = B(e, r, t.t), t;
1435
1439
  }, {
1436
1440
  e: void 0,
1437
1441
  t: void 0
@@ -1439,7 +1443,7 @@ function pi(e) {
1439
1443
  })();
1440
1444
  },
1441
1445
  get children() {
1442
- return M(De, {
1446
+ return P(Te, {
1443
1447
  variant: "outline",
1444
1448
  size: "none",
1445
1449
  class: "glasshome-panel-row",
@@ -1473,13 +1477,13 @@ function pi(e) {
1473
1477
  }
1474
1478
  });
1475
1479
  }
1476
- }), null), P(r, M(w, {
1480
+ }), null), I(r, P(E, {
1477
1481
  get when() {
1478
1482
  return e.trailing;
1479
1483
  },
1480
1484
  get children() {
1481
1485
  var t = ri();
1482
- return P(t, () => e.trailing), t;
1486
+ return I(t, () => e.trailing), t;
1483
1487
  }
1484
1488
  }), null), r;
1485
1489
  })();
@@ -1487,18 +1491,18 @@ function pi(e) {
1487
1491
  function mi(e) {
1488
1492
  return (() => {
1489
1493
  var t = oi();
1490
- return P(t, M(C, {
1494
+ return I(t, P(T, {
1491
1495
  get each() {
1492
1496
  return e.items;
1493
1497
  },
1494
1498
  children: (e) => (() => {
1495
1499
  var t = si(), n = t.firstChild, r = n.firstChild, i = r.nextSibling;
1496
- return P(t, M(H, {
1500
+ return I(t, P(U, {
1497
1501
  get icon() {
1498
1502
  return e.icon;
1499
1503
  },
1500
1504
  class: "glasshome-panel-fact-icon"
1501
- }), n), P(r, () => e.label), P(i, () => e.value), t;
1505
+ }), n), I(r, () => e.label), I(i, () => e.value), t;
1502
1506
  })()
1503
1507
  })), t;
1504
1508
  })();
@@ -1670,16 +1674,16 @@ function Ci(e) {
1670
1674
  return !!_i[e]?.tap || !!_i[e]?.setLevel;
1671
1675
  }
1672
1676
  function wi(e) {
1673
- let t = S(() => e.entityId), { callService: n } = en(), [r, i] = D();
1674
- return T(() => {
1677
+ let t = C(() => e.entityId), { callService: n } = en(), [r, i] = k();
1678
+ return D(() => {
1675
1679
  t(), i(void 0);
1676
- }), M(w, {
1680
+ }), P(E, {
1677
1681
  get when() {
1678
1682
  return t();
1679
1683
  },
1680
1684
  children: (t) => {
1681
1685
  let a = () => _i[t().domain] ?? xi, o = () => r() ?? a().level?.(t()), s = () => a().setLevel;
1682
- return M(pi, {
1686
+ return P(pi, {
1683
1687
  get icon() {
1684
1688
  let n = a().icon;
1685
1689
  return typeof n == "function" ? e.icon ?? n(t()) : e.icon ?? t().icon ?? vi[t().domain === "cover" ? t().deviceClass ?? "" : ""] ?? n;
@@ -1699,7 +1703,7 @@ function wi(e) {
1699
1703
  return a().on(t());
1700
1704
  },
1701
1705
  get slide() {
1702
- return F(() => !!(s() && o() !== void 0))() ? {
1706
+ return L(() => !!(s() && o() !== void 0))() ? {
1703
1707
  value: o() ?? 0,
1704
1708
  onChange: i,
1705
1709
  onCommit: (e) => s()?.(n, t(), e)
@@ -1717,7 +1721,7 @@ function wi(e) {
1717
1721
  }
1718
1722
  //#endregion
1719
1723
  //#region src/framework/dialogs/debug-view.tsx
1720
- var Ti = /*#__PURE__*/ z("<pre class=\"text-muted-foreground max-h-64 overflow-auto p-3 font-mono text-xs leading-relaxed\">"), Ei = /*#__PURE__*/ z("<span class=\"flex items-center gap-2\">"), Di = /*#__PURE__*/ z("<section class=\"flex min-w-0 flex-col gap-2\"><header class=\"flex items-center gap-3\"><div class=\"flex min-w-0 flex-1 flex-col\"></div></header><div class=\"flex flex-col gap-2\">"), Oi = /*#__PURE__*/ z("<div class=\"flex flex-col\">"), ki = /*#__PURE__*/ z("<pre class=\"text-muted-foreground max-h-96 overflow-auto p-3 font-mono text-xs leading-relaxed whitespace-pre-wrap\">");
1724
+ var Ti = /*#__PURE__*/ V("<pre class=\"text-muted-foreground max-h-64 overflow-auto p-3 font-mono text-xs leading-relaxed\">"), Ei = /*#__PURE__*/ V("<span class=\"flex items-center gap-2\">"), Di = /*#__PURE__*/ V("<section class=\"flex min-w-0 flex-col gap-2\"><header class=\"flex items-center gap-3\"><div class=\"flex min-w-0 flex-1 flex-col\"></div></header><div class=\"flex flex-col gap-2\">"), Oi = /*#__PURE__*/ V("<div class=\"flex flex-col\">"), ki = /*#__PURE__*/ V("<pre class=\"text-muted-foreground max-h-96 overflow-auto p-3 font-mono text-xs leading-relaxed whitespace-pre-wrap\">");
1721
1725
  function Ai(e, t, n) {
1722
1726
  return {
1723
1727
  widgetConfig: e,
@@ -1746,7 +1750,7 @@ var ji = (e) => JSON.stringify(e, null, 2), Mi = {
1746
1750
  };
1747
1751
  function Pi(e) {
1748
1752
  let { state: t, copy: n } = Or();
1749
- return M(De, {
1753
+ return P(Te, {
1750
1754
  variant: "ghost",
1751
1755
  size: "icon",
1752
1756
  class: "size-8",
@@ -1755,7 +1759,7 @@ function Pi(e) {
1755
1759
  },
1756
1760
  onClick: () => void n(e.text()),
1757
1761
  get children() {
1758
- return M(H, {
1762
+ return P(U, {
1759
1763
  get icon() {
1760
1764
  return Mi[t()];
1761
1765
  },
@@ -1784,41 +1788,41 @@ function zi(e) {
1784
1788
  return Number.isNaN(t.getTime()) ? e : t.toLocaleString();
1785
1789
  }
1786
1790
  function Bi(e) {
1787
- return M(ht, {
1791
+ return P(mt, {
1788
1792
  class: "overflow-hidden p-0",
1789
1793
  get children() {
1790
1794
  var t = Ti();
1791
- return P(t, () => ji(e.value)), t;
1795
+ return I(t, () => ji(e.value)), t;
1792
1796
  }
1793
1797
  });
1794
1798
  }
1795
1799
  function Vi(e) {
1796
- return M(be, {
1800
+ return P(ve, {
1797
1801
  collapsible: !0,
1798
1802
  class: "border-border/50 border-t",
1799
1803
  get children() {
1800
- return M(Se, {
1804
+ return P(be, {
1801
1805
  get value() {
1802
1806
  return e.label;
1803
1807
  },
1804
1808
  get children() {
1805
- return [M(Ce, {
1809
+ return [P(xe, {
1806
1810
  class: "text-muted-foreground py-3 text-xs",
1807
1811
  get children() {
1808
1812
  var t = Ei();
1809
- return P(t, () => e.label, null), P(t, M(w, {
1813
+ return I(t, () => e.label, null), I(t, P(E, {
1810
1814
  get when() {
1811
1815
  return e.count !== void 0;
1812
1816
  },
1813
1817
  get children() {
1814
- return M(Be, { get children() {
1818
+ return P(Re, { get children() {
1815
1819
  return e.count;
1816
1820
  } });
1817
1821
  }
1818
1822
  }), null), t;
1819
1823
  }
1820
- }), M(xe, { get children() {
1821
- return M(Bi, { get value() {
1824
+ }), P(ye, { get children() {
1825
+ return P(Bi, { get value() {
1822
1826
  return e.value;
1823
1827
  } });
1824
1828
  } })];
@@ -1830,55 +1834,55 @@ function Vi(e) {
1830
1834
  function Hi(e) {
1831
1835
  return (() => {
1832
1836
  var t = Di(), n = t.firstChild, r = n.firstChild, i = n.nextSibling;
1833
- return P(n, M(pt, {
1837
+ return I(n, P(ft, {
1834
1838
  get icon() {
1835
1839
  return e.icon;
1836
1840
  },
1837
1841
  size: "sm"
1838
- }), r), P(r, M(Ke, {
1842
+ }), r), I(r, P(Ge, {
1839
1843
  class: "truncate",
1840
1844
  get children() {
1841
1845
  return e.title;
1842
1846
  }
1843
- }), null), P(r, M(w, {
1847
+ }), null), I(r, P(E, {
1844
1848
  get when() {
1845
1849
  return e.subtitle;
1846
1850
  },
1847
- children: (e) => M(mt, {
1851
+ children: (e) => P(pt, {
1848
1852
  class: "truncate font-mono",
1849
1853
  get children() {
1850
1854
  return e();
1851
1855
  }
1852
1856
  })
1853
- }), null), P(n, () => e.badge, null), P(n, M(Pi, {
1857
+ }), null), I(n, () => e.badge, null), I(n, P(Pi, {
1854
1858
  get label() {
1855
1859
  return `Copy ${e.title}`;
1856
1860
  },
1857
1861
  text: () => ji(e.source)
1858
- }), null), P(i, () => e.children), t;
1862
+ }), null), I(i, () => e.children), t;
1859
1863
  })();
1860
1864
  }
1861
1865
  function Ui(e) {
1862
- let t = E(() => Object.entries(e.record)), n = E(() => t().flatMap(([e, t]) => Ii(t) ? [[e, t]] : [])), r = E(() => t().filter(([, e]) => !Ii(e)));
1863
- return M(w, {
1866
+ let t = O(() => Object.entries(e.record)), n = O(() => t().flatMap(([e, t]) => Ii(t) ? [[e, t]] : [])), r = O(() => t().filter(([, e]) => !Ii(e)));
1867
+ return P(E, {
1864
1868
  get when() {
1865
1869
  return t().length > 0;
1866
1870
  },
1867
1871
  get fallback() {
1868
- return M(mt, { children: "Nothing set" });
1872
+ return P(pt, { children: "Nothing set" });
1869
1873
  },
1870
1874
  get children() {
1871
- return [M(w, {
1875
+ return [P(E, {
1872
1876
  get when() {
1873
1877
  return n().length > 0;
1874
1878
  },
1875
1879
  get children() {
1876
1880
  var e = Oi();
1877
- return P(e, M(C, {
1881
+ return I(e, P(T, {
1878
1882
  get each() {
1879
1883
  return n();
1880
1884
  },
1881
- children: ([e, t]) => M(V, {
1885
+ children: ([e, t]) => P(Ue, {
1882
1886
  get label() {
1883
1887
  return Fi(e);
1884
1888
  },
@@ -1888,11 +1892,11 @@ function Ui(e) {
1888
1892
  })
1889
1893
  })), e;
1890
1894
  }
1891
- }), M(C, {
1895
+ }), P(T, {
1892
1896
  get each() {
1893
1897
  return r();
1894
1898
  },
1895
- children: ([e, t]) => M(Vi, {
1899
+ children: ([e, t]) => P(Vi, {
1896
1900
  get label() {
1897
1901
  return Fi(e);
1898
1902
  },
@@ -1907,7 +1911,7 @@ function Ui(e) {
1907
1911
  }
1908
1912
  function Wi(e) {
1909
1913
  let t = () => e.entity.attributes ?? {};
1910
- return M(Hi, {
1914
+ return P(Hi, {
1911
1915
  icon: "lucide:activity",
1912
1916
  get title() {
1913
1917
  return e.entity.friendly_name ?? e.entity.entity_id;
@@ -1916,7 +1920,7 @@ function Wi(e) {
1916
1920
  return e.entity.entity_id;
1917
1921
  },
1918
1922
  get badge() {
1919
- return M(Te, { get children() {
1923
+ return P(Ce, { get children() {
1920
1924
  return e.entity.state;
1921
1925
  } });
1922
1926
  },
@@ -1926,48 +1930,48 @@ function Wi(e) {
1926
1930
  get children() {
1927
1931
  return [(() => {
1928
1932
  var t = Oi();
1929
- return P(t, M(V, {
1933
+ return I(t, P(Ue, {
1930
1934
  label: "Domain",
1931
1935
  get children() {
1932
1936
  return e.entity.domain;
1933
1937
  }
1934
- }), null), P(t, M(w, {
1938
+ }), null), I(t, P(E, {
1935
1939
  get when() {
1936
1940
  return e.entity.device_class;
1937
1941
  },
1938
- children: (e) => M(V, {
1942
+ children: (e) => P(Ue, {
1939
1943
  label: "Device class",
1940
1944
  get children() {
1941
1945
  return e();
1942
1946
  }
1943
1947
  })
1944
- }), null), P(t, M(w, {
1948
+ }), null), I(t, P(E, {
1945
1949
  get when() {
1946
1950
  return e.entity.area_id;
1947
1951
  },
1948
- children: (e) => M(V, {
1952
+ children: (e) => P(Ue, {
1949
1953
  label: "Area",
1950
1954
  get children() {
1951
1955
  return e();
1952
1956
  }
1953
1957
  })
1954
- }), null), P(t, M(V, {
1958
+ }), null), I(t, P(Ue, {
1955
1959
  label: "Changed",
1956
1960
  get children() {
1957
1961
  return zi(e.entity.last_changed);
1958
1962
  }
1959
- }), null), P(t, M(V, {
1963
+ }), null), I(t, P(Ue, {
1960
1964
  label: "Updated",
1961
1965
  get children() {
1962
1966
  return zi(e.entity.last_updated);
1963
1967
  }
1964
1968
  }), null), t;
1965
- })(), M(w, {
1969
+ })(), P(E, {
1966
1970
  get when() {
1967
1971
  return Ri(t()) > 0;
1968
1972
  },
1969
1973
  get children() {
1970
- return M(Vi, {
1974
+ return P(Vi, {
1971
1975
  label: "Attributes",
1972
1976
  get count() {
1973
1977
  return Ri(t());
@@ -1982,32 +1986,32 @@ function Wi(e) {
1982
1986
  });
1983
1987
  }
1984
1988
  function Gi(e) {
1985
- let t = E(() => Object.keys(e.data).filter((e) => e !== "widgetConfig" && e !== "entities"));
1986
- return M(Ge, { get children() {
1989
+ let t = O(() => Object.keys(e.data).filter((e) => e !== "widgetConfig" && e !== "entities"));
1990
+ return P(We, { get children() {
1987
1991
  return [
1988
- M(Hi, {
1992
+ P(Hi, {
1989
1993
  icon: "lucide:sliders-horizontal",
1990
1994
  title: "Configuration",
1991
1995
  get source() {
1992
1996
  return e.data.widgetConfig;
1993
1997
  },
1994
1998
  get children() {
1995
- return M(Ui, { get record() {
1999
+ return P(Ui, { get record() {
1996
2000
  return e.data.widgetConfig;
1997
2001
  } });
1998
2002
  }
1999
2003
  }),
2000
- M(C, {
2004
+ P(T, {
2001
2005
  get each() {
2002
2006
  return e.data.entities;
2003
2007
  },
2004
- children: (e) => M(Wi, { entity: e })
2008
+ children: (e) => P(Wi, { entity: e })
2005
2009
  }),
2006
- M(C, {
2010
+ P(T, {
2007
2011
  get each() {
2008
2012
  return t();
2009
2013
  },
2010
- children: (t) => M(Hi, {
2014
+ children: (t) => P(Hi, {
2011
2015
  icon: "lucide:braces",
2012
2016
  get title() {
2013
2017
  return Fi(t);
@@ -2016,7 +2020,7 @@ function Gi(e) {
2016
2020
  return e.data[t];
2017
2021
  },
2018
2022
  get children() {
2019
- return M(Bi, { get value() {
2023
+ return P(Bi, { get value() {
2020
2024
  return e.data[t];
2021
2025
  } });
2022
2026
  }
@@ -2031,46 +2035,46 @@ function Ki(e) {
2031
2035
  return Array.isArray(t.entities) && typeof t.widgetConfig == "object" ? t : void 0;
2032
2036
  }
2033
2037
  function qi(e) {
2034
- let t = E(() => Ki(e.data));
2035
- return M(w, {
2038
+ let t = O(() => Ki(e.data));
2039
+ return P(E, {
2036
2040
  get when() {
2037
2041
  return e.data !== void 0;
2038
2042
  },
2039
2043
  get fallback() {
2040
- return M(Ve, { get children() {
2041
- return M(Ue, { get children() {
2042
- return [M(We, { children: "Nothing to inspect" }), M(He, { children: "This widget publishes no debug information." })];
2044
+ return P(ze, { get children() {
2045
+ return P(Ve, { get children() {
2046
+ return [P(He, { children: "Nothing to inspect" }), P(Be, { children: "This widget publishes no debug information." })];
2043
2047
  } });
2044
2048
  } });
2045
2049
  },
2046
2050
  get children() {
2047
- return M(w, {
2051
+ return P(E, {
2048
2052
  get when() {
2049
2053
  return t();
2050
2054
  },
2051
2055
  get fallback() {
2052
- return M(Hi, {
2056
+ return P(Hi, {
2053
2057
  icon: "lucide:braces",
2054
2058
  title: "Debug data",
2055
2059
  get source() {
2056
2060
  return e.data;
2057
2061
  },
2058
2062
  get children() {
2059
- return M(w, {
2063
+ return P(E, {
2060
2064
  get when() {
2061
2065
  return typeof e.data == "string";
2062
2066
  },
2063
2067
  get fallback() {
2064
- return M(Bi, { get value() {
2068
+ return P(Bi, { get value() {
2065
2069
  return e.data;
2066
2070
  } });
2067
2071
  },
2068
2072
  get children() {
2069
- return M(ht, {
2073
+ return P(mt, {
2070
2074
  class: "overflow-hidden p-0",
2071
2075
  get children() {
2072
2076
  var t = ki();
2073
- return P(t, () => e.data), t;
2077
+ return I(t, () => e.data), t;
2074
2078
  }
2075
2079
  });
2076
2080
  }
@@ -2078,7 +2082,7 @@ function qi(e) {
2078
2082
  }
2079
2083
  });
2080
2084
  },
2081
- children: (e) => M(Gi, { get data() {
2085
+ children: (e) => P(Gi, { get data() {
2082
2086
  return e();
2083
2087
  } })
2084
2088
  });
@@ -2101,7 +2105,7 @@ function Yi(e, t) {
2101
2105
  }
2102
2106
  //#endregion
2103
2107
  //#region src/framework/dialogs/WidgetDialog.tsx
2104
- var Xi = /*#__PURE__*/ z("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\">"), Zi = /*#__PURE__*/ z("<div class=\"bg-muted/30 rounded-lg p-2 text-center md:p-6\"><p class=\"text-muted-foreground text-sm\">No edit options available"), Qi = /*#__PURE__*/ z("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><line x1=4 y1=21 x2=4 y2=14></line><line x1=4 y1=10 x2=4 y2=3></line><line x1=12 y1=21 x2=12 y2=12></line><line x1=12 y1=8 x2=12 y2=3></line><line x1=20 y1=21 x2=20 y2=16></line><line x1=20 y1=12 x2=20 y2=3></line><line x1=1 y1=14 x2=7 y2=14></line><line x1=9 y1=8 x2=15 y2=8></line><line x1=17 y1=16 x2=23 y2=16>"), $i = /*#__PURE__*/ z("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><path d=\"m8 2 1.88 1.88\"></path><path d=\"M14.12 3.88 16 2\"></path><path d=\"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\"></path><path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6\"></path><path d=\"M12 20v-9\"></path><path d=\"M6.53 9C4.6 8.8 3 7.1 3 5\"></path><path d=\"M6 13H2\"></path><path d=\"M3 21c0-2.1 1.7-3.9 3.8-4\"></path><path d=\"M20.97 5c0 2.1-1.6 3.8-3.5 4\"></path><path d=\"M22 13h-4\"></path><path d=\"M17.2 17c2.1.1 3.8 1.9 3.8 4\">"), ea = /*#__PURE__*/ z("<div class=glasshome-sheet>"), ta = /*#__PURE__*/ z("<div class=glasshome-sheet-band aria-hidden=true><img alt>"), na = /*#__PURE__*/ z("<span class=\"glasshome-widget-icon glass glass-tint glasshome-sheet-icon\">"), ra = /*#__PURE__*/ z("<span class=\"inline-flex size-3.5 shrink-0 items-center\">"), ia = (e) => Yt(e), aa = {
2108
+ var Xi = /*#__PURE__*/ V("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\">"), Zi = /*#__PURE__*/ V("<div class=\"bg-muted/30 rounded-lg p-2 text-center md:p-6\"><p class=\"text-muted-foreground text-sm\">No edit options available"), Qi = /*#__PURE__*/ V("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><line x1=4 y1=21 x2=4 y2=14></line><line x1=4 y1=10 x2=4 y2=3></line><line x1=12 y1=21 x2=12 y2=12></line><line x1=12 y1=8 x2=12 y2=3></line><line x1=20 y1=21 x2=20 y2=16></line><line x1=20 y1=12 x2=20 y2=3></line><line x1=1 y1=14 x2=7 y2=14></line><line x1=9 y1=8 x2=15 y2=8></line><line x1=17 y1=16 x2=23 y2=16>"), $i = /*#__PURE__*/ V("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><path d=\"m8 2 1.88 1.88\"></path><path d=\"M14.12 3.88 16 2\"></path><path d=\"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\"></path><path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6\"></path><path d=\"M12 20v-9\"></path><path d=\"M6.53 9C4.6 8.8 3 7.1 3 5\"></path><path d=\"M6 13H2\"></path><path d=\"M3 21c0-2.1 1.7-3.9 3.8-4\"></path><path d=\"M20.97 5c0 2.1-1.6 3.8-3.5 4\"></path><path d=\"M22 13h-4\"></path><path d=\"M17.2 17c2.1.1 3.8 1.9 3.8 4\">"), ea = /*#__PURE__*/ V("<div class=glasshome-sheet>"), ta = /*#__PURE__*/ V("<div class=glasshome-sheet-band aria-hidden=true><img alt>"), na = /*#__PURE__*/ V("<span class=\"glasshome-widget-icon glass glass-tint glasshome-sheet-icon\">"), ra = /*#__PURE__*/ V("<span class=\"inline-flex size-3.5 shrink-0 items-center\">"), ia = (e) => Jt(e), aa = {
2105
2109
  sm: "sm",
2106
2110
  md: "md",
2107
2111
  lg: "lg",
@@ -2116,10 +2120,10 @@ var Xi = /*#__PURE__*/ z("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 f
2116
2120
  failed: "Copy failed"
2117
2121
  };
2118
2122
  function sa(e) {
2119
- let [t] = ve(e, /* @__PURE__ */ "open.onOpenChange.title.description.onSave.hasUnsavedChanges.onDelete.editContent.controlsContent.sheet.tile.debugContent.debugData.tabs.class.maxWidth.defaultTab.activeTab.onActiveTabChange.headerActions.configSchema.config.onConfigSave.ResponsiveDialog.ResponsiveDialogContent.ResponsiveDialogHeader.ResponsiveDialogTitle.ResponsiveDialogDescription.ResponsiveDialogBody.ResponsiveDialogFooter.Button.SchemaForm.Tabs.TabsList.TabsTrigger.TabsContent".split(".")), n = () => !!t.configSchema && !!t.config && !!t.onConfigSave && !!t.SchemaForm, [r, i] = D({}), [a, o] = D(null), [s, c] = D([]);
2120
- T(ge(() => t.config, (e) => {
2123
+ let [t] = ge(e, /* @__PURE__ */ "open.onOpenChange.title.description.onSave.hasUnsavedChanges.onDelete.editContent.controlsContent.sheet.tile.debugContent.debugData.tabs.class.maxWidth.defaultTab.activeTab.onActiveTabChange.headerActions.configSchema.config.onConfigSave.ResponsiveDialog.ResponsiveDialogContent.ResponsiveDialogHeader.ResponsiveDialogTitle.ResponsiveDialogDescription.ResponsiveDialogBody.ResponsiveDialogFooter.Button.SchemaForm.Tabs.TabsList.TabsTrigger.TabsContent".split(".")), n = () => !!t.configSchema && !!t.config && !!t.onConfigSave && !!t.SchemaForm, [r, i] = k({}), [a, o] = k(null), [s, c] = k([]);
2124
+ D(me(() => t.config, (e) => {
2121
2125
  e && i({ ...e });
2122
- })), T(ge(() => t.configSchema, (e) => {
2126
+ })), D(me(() => t.configSchema, (e) => {
2123
2127
  e && o(ia(e));
2124
2128
  }));
2125
2129
  let l = () => n() && JSON.stringify(r()) !== JSON.stringify(t.config), u = (e) => {
@@ -2134,9 +2138,9 @@ function sa(e) {
2134
2138
  }
2135
2139
  }
2136
2140
  c([]), t.onConfigSave?.(r());
2137
- }, [f, p] = D(t.defaultTab ?? "controls"), m = () => t.activeTab ?? f(), h = (e) => {
2141
+ }, [f, p] = k(t.defaultTab ?? "controls"), m = () => t.activeTab ?? f(), h = (e) => {
2138
2142
  t.onActiveTabChange ? t.onActiveTabChange(e) : p(e);
2139
- }, ee = () => aa[t.maxWidth ?? "xl"], g = () => {
2143
+ }, g = () => aa[t.maxWidth ?? "xl"], _ = () => {
2140
2144
  if (t.tabs) return t.tabs.map((e) => ({
2141
2145
  ...e,
2142
2146
  icon: () => e.icon,
@@ -2149,7 +2153,7 @@ function sa(e) {
2149
2153
  icon: () => Xi(),
2150
2154
  content: () => t.editContent ?? (() => {
2151
2155
  let e = t.SchemaForm, o = n() ? a() : void 0;
2152
- return !o || !e ? Zi() : M(e, {
2156
+ return !o || !e ? Zi() : P(e, {
2153
2157
  schema: o,
2154
2158
  get data() {
2155
2159
  return r();
@@ -2164,85 +2168,85 @@ function sa(e) {
2164
2168
  id: "controls",
2165
2169
  label: "Controls",
2166
2170
  icon: () => Qi(),
2167
- content: () => t.controlsContent ?? M(Ve, { get children() {
2168
- return M(Ue, { get children() {
2169
- return [M(We, { children: "No controls" }), M(He, { children: "This widget is shown as is." })];
2171
+ content: () => t.controlsContent ?? P(ze, { get children() {
2172
+ return P(Ve, { get children() {
2173
+ return [P(He, { children: "No controls" }), P(Be, { children: "This widget is shown as is." })];
2170
2174
  } });
2171
2175
  } })
2172
2176
  }), e.push({
2173
2177
  id: "debug",
2174
2178
  label: "Debug",
2175
2179
  icon: () => $i(),
2176
- content: () => t.debugContent ?? M(qi, { get data() {
2180
+ content: () => t.debugContent ?? P(qi, { get data() {
2177
2181
  return t.debugData;
2178
2182
  } })
2179
2183
  }), e;
2180
- }, _ = k(U), v = un(_);
2181
- T(() => v?.setHasSheet(t.sheet !== void 0)), O(() => v?.setHasSheet(!1));
2182
- let y = () => ({
2183
- icon: t.tile?.icon ?? v?.icon(),
2184
- tone: t.tile?.tone ?? v?.accent() ?? v?.tone(),
2184
+ }, v = j(W), y = un(v);
2185
+ D(() => y?.setHasSheet(t.sheet !== void 0)), A(() => y?.setHasSheet(!1));
2186
+ let b = () => ({
2187
+ icon: t.tile?.icon ?? y?.icon(),
2188
+ tone: t.tile?.tone ?? y?.accent() ?? y?.tone(),
2185
2189
  backdrop: t.tile?.backdrop
2186
- }), b = () => _?.developer?.() ?? !1, x = () => B() === "controls" && t.sheet !== void 0, te = ca(), S = () => _?.anchor?.(), ne = () => x() && !te() && S() !== void 0, re = Or(), ie = () => {
2190
+ }), x = () => v?.developer?.() ?? !1, S = () => H() === "controls" && t.sheet !== void 0, ee = ca(), C = () => v?.anchor?.(), w = () => S() && !ee() && C() !== void 0, te = Or(), ne = () => {
2187
2191
  if (t.debugData === void 0) return;
2188
2192
  let e = typeof t.debugData == "string" ? t.debugData : JSON.stringify(t.debugData, null, 2);
2189
- re.copy(e);
2190
- }, ae = t.ResponsiveDialog, oe = t.ResponsiveDialogContent, se = t.ResponsiveDialogHeader, ce = t.ResponsiveDialogTitle, le = t.ResponsiveDialogDescription, ue = t.ResponsiveDialogBody ?? rt, de = t.ResponsiveDialogFooter ?? ct, fe = t.Tabs ?? Et, pe = t.TabsList ?? At, me = t.TabsTrigger ?? Mt, he = t.TabsContent ?? Ot, _e = t.Button, A = E(ge([
2193
+ te.copy(e);
2194
+ }, re = t.ResponsiveDialog, ie = t.ResponsiveDialogContent, ae = t.ResponsiveDialogHeader, oe = t.ResponsiveDialogTitle, se = t.ResponsiveDialogDescription, ce = t.ResponsiveDialogBody ?? nt, le = t.ResponsiveDialogFooter ?? st, ue = t.Tabs ?? Tt, de = t.TabsList ?? kt, fe = t.TabsTrigger ?? jt, pe = t.TabsContent ?? Dt, he = t.Button, M = O(me([
2191
2195
  () => t.open,
2192
2196
  a,
2193
2197
  () => t.config,
2194
2198
  () => t.tabs
2195
- ], () => g())), j = (e) => n() ? u(e) : t.onOpenChange(e), ye = () => n() ? l() : t.hasUnsavedChanges, L = () => n() ? d : t.onSave, R = () => A().filter((e) => e.id !== "debug" || b()), z = () => R().filter((e) => e.id !== "controls" || t.sheet === void 0), B = () => {
2196
- let e = R(), n = m() === "controls" && t.sheet === void 0 && !("controlsContent" in t) && !t.tabs ? "edit" : m();
2199
+ ], () => _())), N = (e) => n() ? u(e) : t.onOpenChange(e), _e = () => n() ? l() : t.hasUnsavedChanges, z = () => n() ? d : t.onSave, B = () => M().filter((e) => e.id !== "debug" || x()), V = () => B().filter((e) => e.id !== "controls" || t.sheet === void 0), H = () => {
2200
+ let e = B(), n = m() === "controls" && t.sheet === void 0 && !("controlsContent" in t) && !t.tabs ? "edit" : m();
2197
2201
  return e.some((e) => e.id === n) ? n : e[0]?.id ?? n;
2198
- }, be = () => B() === "edit" && (L() || t.onDelete) || B() === "debug" && t.debugData !== void 0;
2199
- return M(ae, {
2202
+ }, ve = () => H() === "edit" && (z() || t.onDelete) || H() === "debug" && t.debugData !== void 0;
2203
+ return P(re, {
2200
2204
  get open() {
2201
2205
  return t.open;
2202
2206
  },
2203
- onOpenChange: (e) => j(e),
2207
+ onOpenChange: (e) => N(e),
2204
2208
  get children() {
2205
- return M(w, {
2209
+ return P(E, {
2206
2210
  get when() {
2207
- return !x();
2211
+ return !S();
2208
2212
  },
2209
2213
  get fallback() {
2210
- return M(oe, {
2214
+ return P(ie, {
2211
2215
  size: "sm",
2212
2216
  get ariaLabel() {
2213
2217
  return t.title;
2214
2218
  },
2215
2219
  get anchor() {
2216
- return F(() => !!ne())() ? S() : void 0;
2220
+ return L(() => !!w())() ? C() : void 0;
2217
2221
  },
2218
2222
  class: "glasshome-sheet-surface",
2219
2223
  get style() {
2220
- return F(() => !!y().tone)() ? {
2221
- "--glass-tone": y().tone,
2222
- "--widget-color": y().tone
2224
+ return L(() => !!b().tone)() ? {
2225
+ "--glass-tone": b().tone,
2226
+ "--widget-color": b().tone
2223
2227
  } : void 0;
2224
2228
  },
2225
2229
  get children() {
2226
2230
  return [
2227
- M(w, {
2231
+ P(E, {
2228
2232
  get when() {
2229
- return y().backdrop;
2233
+ return b().backdrop;
2230
2234
  },
2231
2235
  children: (e) => (() => {
2232
2236
  var t = ta(), n = t.firstChild;
2233
- return N(() => I(n, "src", e())), t;
2237
+ return F(() => R(n, "src", e())), t;
2234
2238
  })()
2235
2239
  }),
2236
- M(se, {
2240
+ P(ae, {
2237
2241
  class: "items-center",
2238
2242
  get media() {
2239
- return M(w, {
2243
+ return P(E, {
2240
2244
  get when() {
2241
- return y().icon;
2245
+ return b().icon;
2242
2246
  },
2243
2247
  children: (e) => (() => {
2244
2248
  var t = na();
2245
- return P(t, M(H, {
2249
+ return I(t, P(U, {
2246
2250
  get icon() {
2247
2251
  return e();
2248
2252
  },
@@ -2252,7 +2256,7 @@ function sa(e) {
2252
2256
  });
2253
2257
  },
2254
2258
  get children() {
2255
- return M(ce, {
2259
+ return P(oe, {
2256
2260
  class: "truncate",
2257
2261
  get children() {
2258
2262
  return t.title;
@@ -2260,87 +2264,87 @@ function sa(e) {
2260
2264
  });
2261
2265
  }
2262
2266
  }),
2263
- M(ue, { get children() {
2267
+ P(ce, { get children() {
2264
2268
  var e = ea();
2265
- return P(e, () => t.sheet?.()), e;
2269
+ return I(e, () => t.sheet?.()), e;
2266
2270
  } })
2267
2271
  ];
2268
2272
  }
2269
2273
  });
2270
2274
  },
2271
2275
  get children() {
2272
- return M(oe, {
2276
+ return P(ie, {
2273
2277
  get size() {
2274
- return ee();
2278
+ return g();
2275
2279
  },
2276
2280
  get class() {
2277
2281
  return t.class;
2278
2282
  },
2279
2283
  get children() {
2280
- return M(fe, {
2284
+ return P(ue, {
2281
2285
  get value() {
2282
- return B();
2286
+ return H();
2283
2287
  },
2284
2288
  onChange: h,
2285
2289
  layout: "split",
2286
2290
  get children() {
2287
2291
  return [
2288
- M(se, {
2292
+ P(ae, {
2289
2293
  class: "flex-wrap",
2290
2294
  get action() {
2291
- return [M(w, {
2295
+ return [P(E, {
2292
2296
  get when() {
2293
- return b() || t.tabs !== void 0;
2297
+ return x() || t.tabs !== void 0;
2294
2298
  },
2295
2299
  get children() {
2296
- return M(pe, {
2300
+ return P(de, {
2297
2301
  class: "w-auto",
2298
2302
  get children() {
2299
- return M(C, {
2303
+ return P(T, {
2300
2304
  get each() {
2301
- return z();
2305
+ return V();
2302
2306
  },
2303
- children: (e) => M(me, {
2307
+ children: (e) => P(fe, {
2304
2308
  get value() {
2305
2309
  return e.id;
2306
2310
  },
2307
2311
  get children() {
2308
2312
  return [(() => {
2309
2313
  var t = ra();
2310
- return P(t, () => e.icon()), t;
2311
- })(), F(() => e.label)];
2314
+ return I(t, () => e.icon()), t;
2315
+ })(), L(() => e.label)];
2312
2316
  }
2313
2317
  })
2314
2318
  });
2315
2319
  }
2316
2320
  });
2317
2321
  }
2318
- }), F(() => t.headerActions)];
2322
+ }), L(() => t.headerActions)];
2319
2323
  },
2320
2324
  get children() {
2321
- return [M(ce, {
2325
+ return [P(oe, {
2322
2326
  class: "truncate",
2323
2327
  get children() {
2324
2328
  return t.title;
2325
2329
  }
2326
- }), M(w, {
2330
+ }), P(E, {
2327
2331
  get when() {
2328
2332
  return t.description;
2329
2333
  },
2330
2334
  get children() {
2331
- return M(le, { get children() {
2335
+ return P(se, { get children() {
2332
2336
  return t.description;
2333
2337
  } });
2334
2338
  }
2335
2339
  })];
2336
2340
  }
2337
2341
  }),
2338
- M(ue, { get children() {
2339
- return M(C, {
2342
+ P(ce, { get children() {
2343
+ return P(T, {
2340
2344
  get each() {
2341
- return R();
2345
+ return B();
2342
2346
  },
2343
- children: (e) => M(he, {
2347
+ children: (e) => P(pe, {
2344
2348
  get value() {
2345
2349
  return e.id;
2346
2350
  },
@@ -2350,19 +2354,19 @@ function sa(e) {
2350
2354
  })
2351
2355
  });
2352
2356
  } }),
2353
- M(w, {
2357
+ P(E, {
2354
2358
  get when() {
2355
- return be();
2359
+ return ve();
2356
2360
  },
2357
2361
  get children() {
2358
- return M(de, { get children() {
2362
+ return P(le, { get children() {
2359
2363
  return [
2360
- M(w, {
2364
+ P(E, {
2361
2365
  get when() {
2362
- return F(() => B() === "edit")() && t.onDelete;
2366
+ return L(() => H() === "edit")() && t.onDelete;
2363
2367
  },
2364
2368
  get children() {
2365
- return M(_e, {
2369
+ return P(he, {
2366
2370
  size: "sm",
2367
2371
  variant: "destructive",
2368
2372
  onClick: () => t.onDelete?.(),
@@ -2370,32 +2374,32 @@ function sa(e) {
2370
2374
  });
2371
2375
  }
2372
2376
  }),
2373
- M(w, {
2377
+ P(E, {
2374
2378
  get when() {
2375
- return F(() => B() === "edit")() && L();
2379
+ return L(() => H() === "edit")() && z();
2376
2380
  },
2377
2381
  get children() {
2378
- return M(_e, {
2382
+ return P(he, {
2379
2383
  size: "sm",
2380
2384
  get disabled() {
2381
- return !ye();
2385
+ return !_e();
2382
2386
  },
2383
- onClick: () => L()?.(),
2387
+ onClick: () => z()?.(),
2384
2388
  children: "Save"
2385
2389
  });
2386
2390
  }
2387
2391
  }),
2388
- M(w, {
2392
+ P(E, {
2389
2393
  get when() {
2390
- return F(() => B() === "debug")() && t.debugData !== void 0;
2394
+ return L(() => H() === "debug")() && t.debugData !== void 0;
2391
2395
  },
2392
2396
  get children() {
2393
- return M(_e, {
2397
+ return P(he, {
2394
2398
  size: "sm",
2395
2399
  variant: "outline",
2396
- onClick: ie,
2400
+ onClick: ne,
2397
2401
  get children() {
2398
- return oa[re.state()];
2402
+ return oa[te.state()];
2399
2403
  }
2400
2404
  });
2401
2405
  }
@@ -2415,10 +2419,10 @@ function sa(e) {
2415
2419
  });
2416
2420
  }
2417
2421
  function ca() {
2418
- let e = "(max-width: 639px)", [t, n] = D(typeof window < "u" && window.matchMedia(e).matches);
2419
- return _e(() => {
2422
+ let e = "(max-width: 639px)", [t, n] = k(typeof window < "u" && window.matchMedia(e).matches);
2423
+ return he(() => {
2420
2424
  let t = window.matchMedia(e), r = () => n(t.matches);
2421
- t.addEventListener("change", r), O(() => t.removeEventListener("change", r));
2425
+ t.addEventListener("change", r), A(() => t.removeEventListener("change", r));
2422
2426
  }), t;
2423
2427
  }
2424
2428
  //#endregion
@@ -2429,14 +2433,14 @@ var la = {
2429
2433
  areaId: null
2430
2434
  };
2431
2435
  function ua() {
2432
- let e = k(U);
2436
+ let e = j(W);
2433
2437
  return () => e?.dashboard?.() ?? la;
2434
2438
  }
2435
2439
  //#endregion
2436
2440
  //#region src/framework/hooks/use-widget-viewer.ts
2437
2441
  var da = { name: null };
2438
2442
  function fa() {
2439
- let e = k(U);
2443
+ let e = j(W);
2440
2444
  return () => e?.viewer?.() ?? da;
2441
2445
  }
2442
2446
  //#endregion
@@ -2805,21 +2809,21 @@ var ka = {
2805
2809
  terms: Oa(wa)
2806
2810
  };
2807
2811
  function Aa() {
2808
- let e = k(U);
2812
+ let e = j(W);
2809
2813
  return () => e?.material?.() ?? ka;
2810
2814
  }
2811
2815
  //#endregion
2812
2816
  //#region src/framework/hooks/use-intersection-pause.ts
2813
2817
  function ja(e) {
2814
2818
  if (typeof IntersectionObserver > "u") return () => !1;
2815
- let [t, n] = D(!1), r = new IntersectionObserver((e) => {
2819
+ let [t, n] = k(!1), r = new IntersectionObserver((e) => {
2816
2820
  let t = e[0];
2817
2821
  t && n(!t.isIntersecting);
2818
2822
  });
2819
- return T(() => {
2823
+ return D(() => {
2820
2824
  let t = e();
2821
2825
  r.disconnect(), t && r.observe(t);
2822
- }), O(() => r.disconnect()), t;
2826
+ }), A(() => r.disconnect()), t;
2823
2827
  }
2824
2828
  //#endregion
2825
2829
  //#region src/framework/hooks/use-daylight.ts
@@ -2847,17 +2851,17 @@ function La(e, t) {
2847
2851
  isNight: r === "night"
2848
2852
  };
2849
2853
  }
2850
- var [Ra, za] = D(/* @__PURE__ */ new Date()), Ba = 0, Va;
2854
+ var [Ra, za] = k(/* @__PURE__ */ new Date()), Ba = 0, Va;
2851
2855
  function Ha() {
2852
2856
  return Ba++, Va ||= (za(/* @__PURE__ */ new Date()), setInterval(() => za(/* @__PURE__ */ new Date()), 6e4)), () => {
2853
2857
  Ba--, Ba === 0 && Va && (clearInterval(Va), Va = void 0);
2854
2858
  };
2855
2859
  }
2856
2860
  function Ua() {
2857
- let e = S("sun.sun");
2858
- return T(() => {
2859
- e() || O(Ha());
2860
- }), E(() => {
2861
+ let e = C("sun.sun");
2862
+ return D(() => {
2863
+ e() || A(Ha());
2864
+ }), O(() => {
2861
2865
  let t = e(), n = t ? {
2862
2866
  state: t.state,
2863
2867
  elevation: t.attributes?.elevation,
@@ -2872,20 +2876,20 @@ function Ua() {
2872
2876
  //#region src/framework/hooks/use-reduced-motion.ts
2873
2877
  function Wa() {
2874
2878
  if (typeof window > "u" || typeof window.matchMedia != "function") return () => !1;
2875
- let e = window.matchMedia("(prefers-reduced-motion: reduce)"), [t, n] = D(e.matches), r = (e) => n(e.matches);
2876
- return e.addEventListener("change", r), O(() => e.removeEventListener("change", r)), t;
2879
+ let e = window.matchMedia("(prefers-reduced-motion: reduce)"), [t, n] = k(e.matches), r = (e) => n(e.matches);
2880
+ return e.addEventListener("change", r), A(() => e.removeEventListener("change", r)), t;
2877
2881
  }
2878
2882
  //#endregion
2879
2883
  //#region src/framework/hooks/use-widget-entity-group.ts
2880
2884
  function Ga(e) {
2881
- let t = e.minEntities ?? 1, n = E(() => e.entities().length), r = E(() => n() >= t), i = E(() => !r() || !e.calculateGroupData ? null : e.calculateGroupData(e.entities())), a = E(() => {
2885
+ let t = e.minEntities ?? 1, n = O(() => e.entities().length), r = O(() => n() >= t), i = O(() => !r() || !e.calculateGroupData ? null : e.calculateGroupData(e.entities())), a = O(() => {
2882
2886
  if (!r()) return;
2883
2887
  let t = e.aggregationMode?.();
2884
2888
  if (!t || t === "none") return;
2885
2889
  let n = e.entities();
2886
2890
  if (t === "light" || t === "binary-sensor" || t === "switch") return kr(n, e.allEntitiesMode);
2887
2891
  if (t === "sensor") return Ar(n, e.sensorGroupType?.() ?? "mean", !0);
2888
- }), o = E(() => r() ? void 0 : e.emptyStateConfig);
2892
+ }), o = O(() => r() ? void 0 : e.emptyStateConfig);
2889
2893
  return {
2890
2894
  entities: e.entities,
2891
2895
  groupData: i,
@@ -3038,7 +3042,7 @@ function lo(e) {
3038
3042
  }
3039
3043
  function uo(e, t) {
3040
3044
  let n = o.object(e);
3041
- return n.default(Xt(n)).meta({ title: t.title });
3045
+ return n.default(Yt(n)).meta({ title: t.title });
3042
3046
  }
3043
3047
  function fo(e) {
3044
3048
  return e.def;
@@ -3138,8 +3142,8 @@ function bo(e) {
3138
3142
  //#endregion
3139
3143
  //#region src/framework/image-src.ts
3140
3144
  function xo(e, t) {
3141
- let n = Vt(e);
3142
- return n === void 0 ? Ut(e) : t?.[n]?.src;
3145
+ let n = Bt(e);
3146
+ return n === void 0 ? Ht(e) : t?.[n]?.src;
3143
3147
  }
3144
3148
  //#endregion
3145
3149
  //#region src/shared/spline.ts
@@ -3177,7 +3181,7 @@ function Co() {
3177
3181
  //#region src/version.ts
3178
3182
  var wo = {
3179
3183
  name: "@glasshome/widget-sdk",
3180
- version: "1.21.0",
3184
+ version: "1.22.0",
3181
3185
  description: "SDK for building GlassHome dashboard widgets with SolidJS",
3182
3186
  keywords: [
3183
3187
  "dashboard",
@@ -3258,7 +3262,7 @@ var wo = {
3258
3262
  zod: "^4.1.13"
3259
3263
  },
3260
3264
  devDependencies: {
3261
- "@glasshome/ui": "1.25.0",
3265
+ "@glasshome/ui": "1.26.0",
3262
3266
  "@solidjs/testing-library": "^0.8.10",
3263
3267
  "@types/bun": "^1.4.0",
3264
3268
  "@types/node": "^25.2.2",
@@ -3273,10 +3277,10 @@ var wo = {
3273
3277
  },
3274
3278
  peerDependencies: {
3275
3279
  "@glasshome/sync-layer": "0.9.1",
3276
- "@glasshome/ui": "1.25.0",
3280
+ "@glasshome/ui": "1.26.0",
3277
3281
  "solid-js": "^1.9.11"
3278
3282
  },
3279
3283
  engines: { node: ">=18" }
3280
3284
  }.version;
3281
3285
  //#endregion
3282
- export { we as Badge, Ee as Button, Oe as ButtonGroup, Ae as Carousel, je as CarouselContent, Me as CarouselDots, Ne as CarouselItem, Pe as CarouselNext, Fe as CarouselPrevious, Ie as ColorDisc, Le as ColorSlider, Re as ColorWheel, ze as CountPill, Ye as Icon, Xe as Input, Ze as Label, wi as PanelEntityRow, mi as PanelFacts, pi as PanelRow, fi as PanelRows, di as PanelSection, et as Progress, tt as ResponsiveDialog, nt as ResponsiveDialogBody, it as ResponsiveDialogClose, at as ResponsiveDialogContent, ot as ResponsiveDialogDescription, st as ResponsiveDialogFooter, lt as ResponsiveDialogHeader, ut as ResponsiveDialogTitle, wo as SDK_VERSION, dt as SchemaForm, ft as SectionIcon, gt as SectionTitle, _t as Select, vt as SelectContent, yt as SelectItem, bt as SelectTrigger, xt as SelectValue, St as Slider, Ct as SwatchPicker, wt as Switch, Tt as Tabs, Dt as TabsContent, kt as TabsList, jt as TabsTrigger, Nt as TemperatureBar, Pt as Toggle, Ft as ToggleGroup, Lt as ToggleGroupItem, Ya as ToneSchema, Y as Widget, tr as WidgetAction, ir as WidgetBackdrop, nr as WidgetChip, er as WidgetChoice, yr as WidgetContent, Qn as WidgetControls, U as WidgetCtx, qi as WidgetDebugTab, Gi as WidgetDebugView, sa as WidgetDialog, ar as WidgetGlyph, Xn as WidgetHead, Zn as WidgetHero, In as WidgetIcon, rr as WidgetLayer, r as WidgetManifestSchema, kn as WidgetSizeCtx, gr as WidgetSliderFill, xr as WidgetStatus, $n as WidgetStepper, wr as WidgetTitle, Br as WidgetValue, Ai as buildDebugData, ee as byDomain, kr as calculateLightGroup, Ar as calculateSensorGroup, Tr as copyText, Fr as countActiveEntities, bo as defineConfig, Zt as defineWidget, t as deprecations, yo as field, n as formatDeprecation, i as formatSchemaError, Pr as getEntityAttribute, s as getForecasts, c as getStream, l as getWebRtcClientConfig, u as hassMediaUrl, Bt as imagePreset, xo as imageSrc, Ht as imageUrl, dr as injectTokens, Co as isDark, Nr as isEntityActive, Ci as isPanelControllable, Wt as mediaUrl, So as monotoneCubicPath, Gt as parseColor, Kt as presetValue, d as sendWebRtcCandidate, f as startWebRtcSession, p as state, Ja as svgColors, m as trackEntityHistory, h as untrackEntityHistory, g as useArea, _ as useCalendarEvents, v as useCamera, Mn as useConfirm, y as useConnection, Or as useCopyText, b as useCurrency, Ua as useDaylight, x as useEntities, te as useEntity, ne as useEntityHistory, re as useEntityStatistics, ie as useForecast, ae as useHassConfig, ja as useIntersectionPause, oe as useLocale, Aa as useMaterial, Wa as useReducedMotion, en as useService, ce as useStore, le as useTemperatureUnit, rn as useToggle, nn as useTurnOff, tn as useTurnOn, pe as useUnitSystem, Qt as useWidgetContext, ua as useWidgetDashboard, on as useWidgetDialog, An as useWidgetDimensions, Ga as useWidgetEntityGroup, On as useWidgetGestures, fa as useWidgetViewer, Xa as widgetFields, a as z };
3286
+ export { Se as Badge, we as Button, Ee as ButtonGroup, Oe as Carousel, ke as CarouselContent, Ae as CarouselDots, je as CarouselItem, Me as CarouselNext, Ne as CarouselPrevious, Pe as ColorDisc, Fe as ColorSlider, Ie as ColorWheel, Le as CountPill, Je as Icon, Ye as Input, Xe as Label, wi as PanelEntityRow, mi as PanelFacts, pi as PanelRow, fi as PanelRows, di as PanelSection, $e as Progress, et as ResponsiveDialog, tt as ResponsiveDialogBody, rt as ResponsiveDialogClose, it as ResponsiveDialogContent, at as ResponsiveDialogDescription, ot as ResponsiveDialogFooter, ct as ResponsiveDialogHeader, lt as ResponsiveDialogTitle, wo as SDK_VERSION, ut as SchemaForm, dt as SectionIcon, ht as SectionTitle, gt as Select, _t as SelectContent, vt as SelectItem, yt as SelectTrigger, bt as SelectValue, xt as Slider, St as SwatchPicker, Ct as Switch, wt as Tabs, Et as TabsContent, Ot as TabsList, At as TabsTrigger, Mt as TemperatureBar, Nt as Toggle, Pt as ToggleGroup, It as ToggleGroupItem, Ya as ToneSchema, Y as Widget, tr as WidgetAction, ir as WidgetBackdrop, nr as WidgetChip, er as WidgetChoice, yr as WidgetContent, Qn as WidgetControls, W as WidgetCtx, qi as WidgetDebugTab, Gi as WidgetDebugView, sa as WidgetDialog, ar as WidgetGlyph, Xn as WidgetHead, Zn as WidgetHero, In as WidgetIcon, rr as WidgetLayer, r as WidgetManifestSchema, kn as WidgetSizeCtx, gr as WidgetSliderFill, xr as WidgetStatus, $n as WidgetStepper, wr as WidgetTitle, Br as WidgetValue, Ai as buildDebugData, g as byDomain, kr as calculateLightGroup, Ar as calculateSensorGroup, Tr as copyText, Fr as countActiveEntities, bo as defineConfig, Xt as defineWidget, t as deprecations, yo as field, n as formatDeprecation, i as formatSchemaError, Pr as getEntityAttribute, s as getForecasts, c as getStream, l as getWebRtcClientConfig, u as hassMediaUrl, zt as imagePreset, xo as imageSrc, Vt as imageUrl, dr as injectTokens, Co as isDark, Nr as isEntityActive, Ci as isPanelControllable, Ut as mediaUrl, So as monotoneCubicPath, Wt as parseColor, Gt as presetValue, d as sendWebRtcCandidate, f as startWebRtcSession, p as state, Ja as svgColors, m as trackEntityHistory, h as untrackEntityHistory, _ as useArea, v as useCalendarEvents, y as useCamera, Mn as useConfirm, b as useConnection, Or as useCopyText, x as useCurrency, Ua as useDaylight, S as useEntities, ee as useEntity, w as useEntityHistory, te as useEntityStatistics, ne as useForecast, re as useHassConfig, ja as useIntersectionPause, ie as useLocale, Aa as useMaterial, Wa as useReducedMotion, en as useService, oe as useStore, se as useTemperatureUnit, rn as useToggle, nn as useTurnOff, tn as useTurnOn, de as useUnitSystem, Zt as useWidgetContext, ua as useWidgetDashboard, on as useWidgetDialog, An as useWidgetDimensions, Ga as useWidgetEntityGroup, On as useWidgetGestures, fa as useWidgetViewer, Xa as widgetFields, a as z };