@glasshome/widget-sdk 1.20.1 → 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.
- package/dist/deprecations.js +8 -0
- package/dist/framework/hooks/index.d.ts +2 -1
- package/dist/framework/hooks/use-material.d.ts +4 -0
- package/dist/framework/hooks/use-widget-context.d.ts +8 -0
- package/dist/framework/index.d.ts +1 -1
- package/dist/index.js +1141 -767
- package/guide/widgets.md +2 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { deprecate as e, deprecations as t, formatDeprecation as n } from "./deprecations.js";
|
|
2
2
|
import { WidgetManifestSchema as r, formatSchemaError as i } from "./schemas.js";
|
|
3
3
|
import { z as a, z as o } from "zod";
|
|
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
|
|
5
|
-
import { byDomain as
|
|
6
|
-
import { For as
|
|
7
|
-
import { addEventListener as
|
|
8
|
-
import { Accordion as
|
|
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 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
9
|
import { clsx as Kt } from "clsx";
|
|
10
10
|
import { twMerge as qt } from "tailwind-merge";
|
|
11
11
|
//#region src/framework/to-form-schema.ts
|
|
@@ -32,9 +32,9 @@ function Xt(e) {
|
|
|
32
32
|
}
|
|
33
33
|
//#endregion
|
|
34
34
|
//#region src/framework/hooks/use-widget-context.ts
|
|
35
|
-
var W =
|
|
35
|
+
var W = pe();
|
|
36
36
|
function Zt() {
|
|
37
|
-
let e =
|
|
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
|
}
|
|
@@ -45,46 +45,46 @@ function Qt(e) {
|
|
|
45
45
|
if (!n) throw Error(`Invalid entity ID: ${String(t)}`);
|
|
46
46
|
return n;
|
|
47
47
|
}
|
|
48
|
-
function
|
|
48
|
+
function $t(e, t) {
|
|
49
49
|
return async (n, r = {}) => {
|
|
50
50
|
await e(Qt(n), t, r, { entity_id: n });
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
-
function
|
|
54
|
-
let e =
|
|
53
|
+
function en() {
|
|
54
|
+
let e = j(W)?.callService;
|
|
55
55
|
return e ? {
|
|
56
56
|
callService: e,
|
|
57
|
-
turnOn:
|
|
58
|
-
turnOff:
|
|
59
|
-
toggle:
|
|
60
|
-
} :
|
|
61
|
-
}
|
|
62
|
-
function en() {
|
|
63
|
-
let e = A(W)?.callService;
|
|
64
|
-
return e ? G(e, "turn_on") : fe();
|
|
57
|
+
turnOn: $t(e, "turn_on"),
|
|
58
|
+
turnOff: $t(e, "turn_off"),
|
|
59
|
+
toggle: $t(e, "toggle")
|
|
60
|
+
} : ae();
|
|
65
61
|
}
|
|
66
62
|
function tn() {
|
|
67
|
-
let e =
|
|
68
|
-
return e ?
|
|
63
|
+
let e = j(W)?.callService;
|
|
64
|
+
return e ? $t(e, "turn_on") : ue();
|
|
69
65
|
}
|
|
70
66
|
function nn() {
|
|
71
|
-
let e =
|
|
72
|
-
return e ?
|
|
67
|
+
let e = j(W)?.callService;
|
|
68
|
+
return e ? $t(e, "turn_off") : le();
|
|
69
|
+
}
|
|
70
|
+
function rn() {
|
|
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
|
|
76
|
-
var
|
|
76
|
+
var an = {
|
|
77
77
|
BACKGROUND: 0,
|
|
78
78
|
CONTENT: 10,
|
|
79
79
|
OVERLAY: 20,
|
|
80
80
|
ACTIONS: 30
|
|
81
|
-
},
|
|
82
|
-
function
|
|
83
|
-
let [t, n] =
|
|
81
|
+
}, G = /* @__PURE__ */ new WeakMap();
|
|
82
|
+
function on(e = "controls") {
|
|
83
|
+
let [t, n] = k(!1), [r, i] = k(e), a = (t) => {
|
|
84
84
|
i(t ?? e), n(!0);
|
|
85
|
-
}, o =
|
|
86
|
-
return o?.registerDialogOpener?.(a), o &&
|
|
87
|
-
o?.registerDialogOpener?.(null), o &&
|
|
85
|
+
}, o = j(W);
|
|
86
|
+
return o?.registerDialogOpener?.(a), o && G.set(o, a), A(() => {
|
|
87
|
+
o?.registerDialogOpener?.(null), o && G.get(o) === a && G.delete(o);
|
|
88
88
|
}), {
|
|
89
89
|
showDialog: t,
|
|
90
90
|
setShowDialog: n,
|
|
@@ -106,15 +106,15 @@ function rn(e = "controls") {
|
|
|
106
106
|
}
|
|
107
107
|
//#endregion
|
|
108
108
|
//#region src/framework/hooks/widget-registry.ts
|
|
109
|
-
var
|
|
110
|
-
function
|
|
111
|
-
return e[
|
|
109
|
+
var sn = /* @__PURE__ */ new WeakMap(), cn = Symbol("glasshome.widget.registry");
|
|
110
|
+
function ln(e) {
|
|
111
|
+
return e[cn] ?? e;
|
|
112
112
|
}
|
|
113
|
-
function
|
|
113
|
+
function un(e) {
|
|
114
114
|
if (!e) return;
|
|
115
|
-
let t =
|
|
115
|
+
let t = ln(e), n = sn.get(t);
|
|
116
116
|
if (!n) {
|
|
117
|
-
let [e, r] =
|
|
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,
|
|
@@ -126,161 +126,161 @@ function cn(e) {
|
|
|
126
126
|
setIcon: l,
|
|
127
127
|
nothingMore: u,
|
|
128
128
|
setNothingMore: d
|
|
129
|
-
},
|
|
129
|
+
}, sn.set(t, n);
|
|
130
130
|
}
|
|
131
131
|
return n;
|
|
132
132
|
}
|
|
133
133
|
//#endregion
|
|
134
134
|
//#region src/framework/gestures/cursors.ts
|
|
135
|
-
var
|
|
136
|
-
function
|
|
135
|
+
var dn = 32, K = dn / 2, q = "white", fn = "rgba(0,0,0,0.4)", pn = 2, mn = 3;
|
|
136
|
+
function hn(e) {
|
|
137
137
|
return `url("data:image/svg+xml,${encodeURIComponent(e)}")`;
|
|
138
138
|
}
|
|
139
|
-
function
|
|
140
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" width="${
|
|
139
|
+
function gn(e) {
|
|
140
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="${dn}" height="${dn}" viewBox="0 0 ${dn} ${dn}">${e}</svg>`;
|
|
141
141
|
}
|
|
142
|
-
var
|
|
142
|
+
var _n = gn(`
|
|
143
143
|
<g transform="translate(6, 2)">
|
|
144
144
|
<!-- shadow -->
|
|
145
|
-
<g stroke="${
|
|
145
|
+
<g stroke="${fn}" stroke-width="${mn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
146
146
|
<path d="M10 8V3a2 2 0 0 1 4 0v10l4.5-4.5a2 2 0 0 1 2.83 2.83L14 18.5c-2 2-4 3.5-8 3.5-3 0-5-2-5-5v-6a2 2 0 0 1 4 0v2"/>
|
|
147
147
|
</g>
|
|
148
148
|
<!-- main -->
|
|
149
|
-
<g stroke="${
|
|
149
|
+
<g stroke="${q}" stroke-width="${pn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
150
150
|
<path d="M10 8V3a2 2 0 0 1 4 0v10l4.5-4.5a2 2 0 0 1 2.83 2.83L14 18.5c-2 2-4 3.5-8 3.5-3 0-5-2-5-5v-6a2 2 0 0 1 4 0v2"/>
|
|
151
151
|
</g>
|
|
152
152
|
</g>
|
|
153
|
-
`),
|
|
153
|
+
`), vn = gn(`
|
|
154
154
|
<g>
|
|
155
|
-
<circle cx="${
|
|
156
|
-
<circle cx="${
|
|
157
|
-
<circle cx="${
|
|
155
|
+
<circle cx="${K}" cy="${K}" r="8" stroke="${fn}" stroke-width="${mn}" fill="none"/>
|
|
156
|
+
<circle cx="${K}" cy="${K}" r="8" stroke="${q}" stroke-width="1.5" fill="none"/>
|
|
157
|
+
<circle cx="${K}" cy="${K}" r="1.5" fill="${q}"/>
|
|
158
158
|
</g>
|
|
159
|
-
`),
|
|
159
|
+
`), yn = gn(`
|
|
160
160
|
<g>
|
|
161
161
|
<!-- shadow -->
|
|
162
|
-
<g stroke="${
|
|
163
|
-
<line x1="6" y1="${
|
|
164
|
-
<polyline points="10,12 6,${
|
|
165
|
-
<polyline points="22,12 26,${
|
|
162
|
+
<g stroke="${fn}" stroke-width="${mn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
163
|
+
<line x1="6" y1="${K}" x2="26" y2="${K}"/>
|
|
164
|
+
<polyline points="10,12 6,${K} 10,20"/>
|
|
165
|
+
<polyline points="22,12 26,${K} 22,20"/>
|
|
166
166
|
</g>
|
|
167
167
|
<!-- main -->
|
|
168
|
-
<g stroke="${
|
|
169
|
-
<line x1="6" y1="${
|
|
170
|
-
<polyline points="10,12 6,${
|
|
171
|
-
<polyline points="22,12 26,${
|
|
168
|
+
<g stroke="${q}" stroke-width="${pn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
169
|
+
<line x1="6" y1="${K}" x2="26" y2="${K}"/>
|
|
170
|
+
<polyline points="10,12 6,${K} 10,20"/>
|
|
171
|
+
<polyline points="22,12 26,${K} 22,20"/>
|
|
172
172
|
</g>
|
|
173
173
|
<!-- center grip dots -->
|
|
174
|
-
<circle cx="${
|
|
175
|
-
<circle cx="11" cy="${
|
|
176
|
-
<circle cx="21" cy="${
|
|
174
|
+
<circle cx="${K}" cy="${K}" r="1.5" fill="${q}"/>
|
|
175
|
+
<circle cx="11" cy="${K}" r="1" fill="${q}" opacity="0.6"/>
|
|
176
|
+
<circle cx="21" cy="${K}" r="1" fill="${q}" opacity="0.6"/>
|
|
177
177
|
</g>
|
|
178
|
-
`),
|
|
178
|
+
`), bn = gn(`
|
|
179
179
|
<g>
|
|
180
180
|
<!-- shadow -->
|
|
181
|
-
<g stroke="${
|
|
182
|
-
<line x1="${
|
|
183
|
-
<polyline points="12,10 ${
|
|
184
|
-
<polyline points="12,22 ${
|
|
181
|
+
<g stroke="${fn}" stroke-width="${mn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
182
|
+
<line x1="${K}" y1="6" x2="${K}" y2="26"/>
|
|
183
|
+
<polyline points="12,10 ${K},6 20,10"/>
|
|
184
|
+
<polyline points="12,22 ${K},26 20,22"/>
|
|
185
185
|
</g>
|
|
186
186
|
<!-- main -->
|
|
187
|
-
<g stroke="${
|
|
188
|
-
<line x1="${
|
|
189
|
-
<polyline points="12,10 ${
|
|
190
|
-
<polyline points="12,22 ${
|
|
187
|
+
<g stroke="${q}" stroke-width="${pn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
188
|
+
<line x1="${K}" y1="6" x2="${K}" y2="26"/>
|
|
189
|
+
<polyline points="12,10 ${K},6 20,10"/>
|
|
190
|
+
<polyline points="12,22 ${K},26 20,22"/>
|
|
191
191
|
</g>
|
|
192
192
|
<!-- center grip dots -->
|
|
193
|
-
<circle cx="${
|
|
194
|
-
<circle cx="${
|
|
195
|
-
<circle cx="${
|
|
193
|
+
<circle cx="${K}" cy="${K}" r="1.5" fill="${q}"/>
|
|
194
|
+
<circle cx="${K}" cy="11" r="1" fill="${q}" opacity="0.6"/>
|
|
195
|
+
<circle cx="${K}" cy="21" r="1" fill="${q}" opacity="0.6"/>
|
|
196
196
|
</g>
|
|
197
|
-
`),
|
|
197
|
+
`), xn = gn(`
|
|
198
198
|
<g>
|
|
199
199
|
<!-- shadow -->
|
|
200
|
-
<g stroke="${
|
|
201
|
-
<line x1="7" y1="${
|
|
202
|
-
<line x1="${
|
|
203
|
-
<polyline points="11,13 7,${
|
|
204
|
-
<polyline points="21,13 25,${
|
|
205
|
-
<polyline points="13,11 ${
|
|
206
|
-
<polyline points="13,21 ${
|
|
200
|
+
<g stroke="${fn}" stroke-width="${mn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
201
|
+
<line x1="7" y1="${K}" x2="25" y2="${K}"/>
|
|
202
|
+
<line x1="${K}" y1="7" x2="${K}" y2="25"/>
|
|
203
|
+
<polyline points="11,13 7,${K} 11,19"/>
|
|
204
|
+
<polyline points="21,13 25,${K} 21,19"/>
|
|
205
|
+
<polyline points="13,11 ${K},7 19,11"/>
|
|
206
|
+
<polyline points="13,21 ${K},25 19,21"/>
|
|
207
207
|
</g>
|
|
208
208
|
<!-- main -->
|
|
209
|
-
<g stroke="${
|
|
210
|
-
<line x1="7" y1="${
|
|
211
|
-
<line x1="${
|
|
212
|
-
<polyline points="11,13 7,${
|
|
213
|
-
<polyline points="21,13 25,${
|
|
214
|
-
<polyline points="13,11 ${
|
|
215
|
-
<polyline points="13,21 ${
|
|
209
|
+
<g stroke="${q}" stroke-width="${pn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
210
|
+
<line x1="7" y1="${K}" x2="25" y2="${K}"/>
|
|
211
|
+
<line x1="${K}" y1="7" x2="${K}" y2="25"/>
|
|
212
|
+
<polyline points="11,13 7,${K} 11,19"/>
|
|
213
|
+
<polyline points="21,13 25,${K} 21,19"/>
|
|
214
|
+
<polyline points="13,11 ${K},7 19,11"/>
|
|
215
|
+
<polyline points="13,21 ${K},25 19,21"/>
|
|
216
216
|
</g>
|
|
217
217
|
<!-- center dot -->
|
|
218
|
-
<circle cx="${
|
|
218
|
+
<circle cx="${K}" cy="${K}" r="2" fill="${q}"/>
|
|
219
219
|
</g>
|
|
220
220
|
`);
|
|
221
|
-
function
|
|
221
|
+
function Sn(e, t, n) {
|
|
222
222
|
return {
|
|
223
|
-
css: `${
|
|
223
|
+
css: `${hn(e)} ${t} ${n}, auto`,
|
|
224
224
|
hotspotX: t,
|
|
225
225
|
hotspotY: n
|
|
226
226
|
};
|
|
227
227
|
}
|
|
228
|
-
var
|
|
229
|
-
tap:
|
|
230
|
-
hold:
|
|
231
|
-
slideHorizontal:
|
|
232
|
-
slideVertical: bn
|
|
233
|
-
slideAuto:
|
|
228
|
+
var Cn = {
|
|
229
|
+
tap: Sn(_n, 12, 4),
|
|
230
|
+
hold: Sn(vn, 16, 16),
|
|
231
|
+
slideHorizontal: Sn(yn, K, K),
|
|
232
|
+
slideVertical: Sn(bn, K, K),
|
|
233
|
+
slideAuto: Sn(xn, K, K)
|
|
234
234
|
};
|
|
235
235
|
//#endregion
|
|
236
236
|
//#region src/framework/gestures/haptics.ts
|
|
237
|
-
function
|
|
237
|
+
function wn() {
|
|
238
238
|
if (typeof window > "u") return null;
|
|
239
239
|
let e = window;
|
|
240
240
|
return e.Capacitor?.isNativePlatform?.() ? e.Capacitor.Plugins?.Haptics ?? null : null;
|
|
241
241
|
}
|
|
242
|
-
function
|
|
242
|
+
function Tn(e) {
|
|
243
243
|
if (typeof navigator < "u" && typeof navigator.vibrate == "function") try {
|
|
244
244
|
navigator.vibrate(e);
|
|
245
245
|
} catch {}
|
|
246
246
|
}
|
|
247
|
-
var
|
|
247
|
+
var En = {
|
|
248
248
|
tick() {
|
|
249
|
-
let e =
|
|
249
|
+
let e = wn();
|
|
250
250
|
if (e) {
|
|
251
251
|
e.impact({ style: "Light" }).catch(() => {});
|
|
252
252
|
return;
|
|
253
253
|
}
|
|
254
|
-
|
|
254
|
+
Tn(8);
|
|
255
255
|
},
|
|
256
256
|
bump() {
|
|
257
|
-
let e =
|
|
257
|
+
let e = wn();
|
|
258
258
|
if (e) {
|
|
259
259
|
e.impact({ style: "Medium" }).catch(() => {});
|
|
260
260
|
return;
|
|
261
261
|
}
|
|
262
|
-
|
|
262
|
+
Tn(20);
|
|
263
263
|
},
|
|
264
264
|
pulse() {
|
|
265
|
-
let e =
|
|
265
|
+
let e = wn();
|
|
266
266
|
if (e) {
|
|
267
267
|
e.impact({ style: "Heavy" }).catch(() => {});
|
|
268
268
|
return;
|
|
269
269
|
}
|
|
270
|
-
|
|
270
|
+
Tn([
|
|
271
271
|
0,
|
|
272
272
|
15,
|
|
273
273
|
40,
|
|
274
274
|
15
|
|
275
275
|
]);
|
|
276
276
|
}
|
|
277
|
-
},
|
|
278
|
-
function
|
|
279
|
-
let n =
|
|
277
|
+
}, Dn = "button, a, input, select, textarea, [role=\"slider\"], [role=\"radio\"], [role=\"switch\"]";
|
|
278
|
+
function On(e, t) {
|
|
279
|
+
let n = j(W), r = un(n), i = () => {
|
|
280
280
|
let t = e();
|
|
281
281
|
return t.hold || !n ? t : {
|
|
282
282
|
...t,
|
|
283
|
-
hold: { action: () => r?.hasSheet() ?
|
|
283
|
+
hold: { action: () => r?.hasSheet() ? G.get(n)?.() : r?.setNothingMore(!0) }
|
|
284
284
|
};
|
|
285
285
|
}, a = {
|
|
286
286
|
isDown: !1,
|
|
@@ -294,7 +294,7 @@ function En(e, t) {
|
|
|
294
294
|
holdTimer: null,
|
|
295
295
|
graceTimer: null,
|
|
296
296
|
element: null
|
|
297
|
-
}, [o, s] =
|
|
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];
|
|
@@ -315,7 +315,7 @@ function En(e, t) {
|
|
|
315
315
|
}
|
|
316
316
|
let m = () => {
|
|
317
317
|
a.holdTimer &&= (clearTimeout(a.holdTimer), null), a.graceTimer &&= (clearTimeout(a.graceTimer), null), s(null);
|
|
318
|
-
},
|
|
318
|
+
}, h = (e) => {
|
|
319
319
|
let t = (e) => {
|
|
320
320
|
e.stopPropagation(), e.preventDefault();
|
|
321
321
|
}, n = () => e.removeEventListener("click", t, !0);
|
|
@@ -323,13 +323,13 @@ function En(e, t) {
|
|
|
323
323
|
capture: !0,
|
|
324
324
|
once: !0
|
|
325
325
|
});
|
|
326
|
-
},
|
|
326
|
+
}, g = () => {
|
|
327
327
|
a.isDown = !1, a.hasMoved = !1, a.sliding = !1, a.holdOnly = !1;
|
|
328
|
-
},
|
|
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
|
-
},
|
|
332
|
-
let t = i(), r = e.target instanceof Element ? e.target.closest(`${
|
|
331
|
+
}, v = (e) => {
|
|
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
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));
|
|
@@ -344,18 +344,18 @@ function En(e, t) {
|
|
|
344
344
|
a.holdTimer = null, a.isDown && !a.hasMoved && (s((e) => e && {
|
|
345
345
|
...e,
|
|
346
346
|
fired: !0
|
|
347
|
-
}),
|
|
347
|
+
}), En.bump(), a.element && h(a.element), t.hold?.action(), n?.onHeld?.(), a.isDown = !1);
|
|
348
348
|
}, r);
|
|
349
349
|
}
|
|
350
350
|
if (!a.isTouch && t.slide && !o) try {
|
|
351
351
|
e.currentTarget.setPointerCapture(e.pointerId);
|
|
352
352
|
} catch {}
|
|
353
353
|
}
|
|
354
|
-
},
|
|
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 =
|
|
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,26 +364,26 @@ function En(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
|
-
},
|
|
367
|
+
}, b = (e) => {
|
|
368
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
|
-
|
|
374
|
-
},
|
|
373
|
+
g();
|
|
374
|
+
}, x = (e) => {
|
|
375
375
|
m();
|
|
376
376
|
try {
|
|
377
377
|
e.currentTarget.releasePointerCapture(e.pointerId);
|
|
378
378
|
} catch {}
|
|
379
|
-
|
|
380
|
-
},
|
|
379
|
+
g();
|
|
380
|
+
}, S = (e) => {
|
|
381
381
|
let t = i();
|
|
382
382
|
if (t.slide) {
|
|
383
383
|
let n = t.slide.orientation;
|
|
384
|
-
return n === "horizontal" ?
|
|
384
|
+
return n === "horizontal" ? Cn.slideHorizontal.css : n === "vertical" ? Cn.slideVertical.css : (c || p(e), c && c.height > c.width ? Cn.slideVertical.css : Cn.slideHorizontal.css);
|
|
385
385
|
}
|
|
386
|
-
return t.tap ?
|
|
386
|
+
return t.tap ? Cn.tap.css : t.hold ? Cn.hold.css : "";
|
|
387
387
|
};
|
|
388
388
|
return {
|
|
389
389
|
onKeyDown: (e) => {
|
|
@@ -391,13 +391,13 @@ function En(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:
|
|
396
|
-
onPointerUp:
|
|
397
|
-
onPointerCancel:
|
|
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 =
|
|
400
|
+
a.element = t, t.style.cursor = S(t);
|
|
401
401
|
},
|
|
402
402
|
bindElement: (e) => {
|
|
403
403
|
e && (a.element = e, p(e));
|
|
@@ -419,18 +419,18 @@ function En(e, t) {
|
|
|
419
419
|
}
|
|
420
420
|
//#endregion
|
|
421
421
|
//#region src/framework/hooks/use-widget-dimensions.ts
|
|
422
|
-
var
|
|
423
|
-
function
|
|
424
|
-
let e =
|
|
422
|
+
var kn = pe();
|
|
423
|
+
function An() {
|
|
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
|
}
|
|
428
428
|
//#endregion
|
|
429
429
|
//#region src/framework/hooks/use-confirm.ts
|
|
430
|
-
var
|
|
431
|
-
function
|
|
432
|
-
let [e, t] =
|
|
433
|
-
return
|
|
430
|
+
var jn = 1600;
|
|
431
|
+
function Mn() {
|
|
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) => {
|
|
@@ -439,39 +439,39 @@ function An() {
|
|
|
439
439
|
} catch {
|
|
440
440
|
return !1;
|
|
441
441
|
}
|
|
442
|
-
return t(new Set(e)), clearTimeout(n), n = setTimeout(() => t(/* @__PURE__ */ new Set()),
|
|
442
|
+
return t(new Set(e)), clearTimeout(n), n = setTimeout(() => t(/* @__PURE__ */ new Set()), jn), !0;
|
|
443
443
|
}
|
|
444
444
|
};
|
|
445
445
|
}
|
|
446
446
|
//#endregion
|
|
447
447
|
//#region src/framework/utils/cn.ts
|
|
448
|
-
function
|
|
448
|
+
function J(...e) {
|
|
449
449
|
return qt(Kt(e));
|
|
450
450
|
}
|
|
451
451
|
//#endregion
|
|
452
452
|
//#region src/framework/components/WidgetIcon.tsx
|
|
453
|
-
var
|
|
454
|
-
function
|
|
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
|
+
function In(e) {
|
|
455
455
|
let t = () => e.entityCount ?? 1;
|
|
456
456
|
return (() => {
|
|
457
|
-
var n =
|
|
458
|
-
return
|
|
457
|
+
var n = Fn(), r = n.firstChild;
|
|
458
|
+
return I(n, P(E, {
|
|
459
459
|
get when() {
|
|
460
460
|
return t() >= 2;
|
|
461
461
|
},
|
|
462
462
|
get children() {
|
|
463
|
-
return
|
|
463
|
+
return Nn();
|
|
464
464
|
}
|
|
465
|
-
}), r),
|
|
465
|
+
}), r), I(n, P(E, {
|
|
466
466
|
get when() {
|
|
467
467
|
return t() >= 3;
|
|
468
468
|
},
|
|
469
469
|
get children() {
|
|
470
|
-
return
|
|
470
|
+
return Pn();
|
|
471
471
|
}
|
|
472
|
-
}), r),
|
|
473
|
-
var r =
|
|
474
|
-
return r !== t.e &&
|
|
472
|
+
}), r), I(r, () => e.icon), F((t) => {
|
|
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 && 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 Pn(e) {
|
|
|
480
480
|
}
|
|
481
481
|
//#endregion
|
|
482
482
|
//#region src/framework/components/anatomy.tsx
|
|
483
|
-
var
|
|
484
|
-
function
|
|
485
|
-
let t =
|
|
486
|
-
|
|
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
|
+
function Xn(e) {
|
|
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 =
|
|
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
|
-
var n =
|
|
495
|
-
return
|
|
494
|
+
var n = zn(), o = n.firstChild, s = o.firstChild;
|
|
495
|
+
return I(n, P(E, {
|
|
496
496
|
get when() {
|
|
497
497
|
return e.icon;
|
|
498
498
|
},
|
|
499
|
-
children: (n) =>
|
|
499
|
+
children: (n) => P(In, {
|
|
500
500
|
get icon() {
|
|
501
|
-
return
|
|
502
|
-
return
|
|
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 Jn(e) {
|
|
|
510
510
|
},
|
|
511
511
|
class: "glasshome-widget-head-icon"
|
|
512
512
|
})
|
|
513
|
-
}), o),
|
|
513
|
+
}), o), I(o, P(E, {
|
|
514
514
|
get when() {
|
|
515
|
-
return
|
|
515
|
+
return L(() => !!r())() && !a();
|
|
516
516
|
},
|
|
517
517
|
get children() {
|
|
518
|
-
var e =
|
|
519
|
-
return
|
|
518
|
+
var e = Ln();
|
|
519
|
+
return I(e, r), e;
|
|
520
520
|
}
|
|
521
|
-
}), s),
|
|
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
|
-
var e =
|
|
527
|
-
return
|
|
526
|
+
var e = Rn();
|
|
527
|
+
return I(e, i), e;
|
|
528
528
|
}
|
|
529
529
|
}), null), n;
|
|
530
530
|
})();
|
|
531
531
|
}
|
|
532
|
-
function
|
|
533
|
-
let t =
|
|
534
|
-
return
|
|
535
|
-
var r =
|
|
536
|
-
return
|
|
532
|
+
function Zn(e) {
|
|
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
|
+
var r = Un(), o = r.firstChild, s = o.firstChild;
|
|
536
|
+
return I(o, P(E, {
|
|
537
537
|
get when() {
|
|
538
538
|
return t();
|
|
539
539
|
},
|
|
540
540
|
get children() {
|
|
541
|
-
var e =
|
|
542
|
-
return
|
|
541
|
+
var e = Bn();
|
|
542
|
+
return I(e, t), e;
|
|
543
543
|
}
|
|
544
|
-
}), s),
|
|
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
|
-
var t =
|
|
550
|
-
return
|
|
549
|
+
var t = Vn();
|
|
550
|
+
return I(t, () => e.unit), F(() => R(t, "data-degree", e.unit === "°" || void 0)), t;
|
|
551
551
|
}
|
|
552
|
-
}), null),
|
|
552
|
+
}), null), I(r, P(E, {
|
|
553
553
|
get when() {
|
|
554
554
|
return n();
|
|
555
555
|
},
|
|
556
556
|
get children() {
|
|
557
|
-
var e =
|
|
558
|
-
return
|
|
557
|
+
var e = Hn();
|
|
558
|
+
return I(e, n), e;
|
|
559
559
|
}
|
|
560
|
-
}), null),
|
|
561
|
-
var c =
|
|
562
|
-
return c !== o.e &&
|
|
560
|
+
}), null), F((o) => {
|
|
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 && 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,
|
|
@@ -569,43 +569,43 @@ function Yn(e) {
|
|
|
569
569
|
}), r;
|
|
570
570
|
})();
|
|
571
571
|
}
|
|
572
|
-
function
|
|
572
|
+
function Qn(e) {
|
|
573
573
|
return (() => {
|
|
574
|
-
var t =
|
|
575
|
-
return
|
|
574
|
+
var t = Wn();
|
|
575
|
+
return I(t, () => e.children), t;
|
|
576
576
|
})();
|
|
577
577
|
}
|
|
578
|
-
function
|
|
579
|
-
return
|
|
578
|
+
function $n(e) {
|
|
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 [
|
|
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
|
|
592
|
+
return P(U, { icon: "mdi:minus" });
|
|
593
593
|
}
|
|
594
|
-
}),
|
|
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
|
|
601
|
+
return P(U, { icon: "mdi:plus" });
|
|
602
602
|
}
|
|
603
603
|
})];
|
|
604
604
|
}
|
|
605
605
|
});
|
|
606
606
|
}
|
|
607
|
-
function
|
|
608
|
-
return
|
|
607
|
+
function er(e) {
|
|
608
|
+
return P(Ft, {
|
|
609
609
|
get "aria-label"() {
|
|
610
610
|
return e.label;
|
|
611
611
|
},
|
|
@@ -618,11 +618,11 @@ function Qn(e) {
|
|
|
618
618
|
onChange: (t) => t && e.onChange(t),
|
|
619
619
|
class: "glasshome-widget-choice",
|
|
620
620
|
get children() {
|
|
621
|
-
return
|
|
621
|
+
return P(T, {
|
|
622
622
|
get each() {
|
|
623
623
|
return e.options;
|
|
624
624
|
},
|
|
625
|
-
children: (t) =>
|
|
625
|
+
children: (t) => P(Lt, {
|
|
626
626
|
get value() {
|
|
627
627
|
return t.value;
|
|
628
628
|
},
|
|
@@ -634,7 +634,7 @@ function Qn(e) {
|
|
|
634
634
|
return t.value === e.value ? void 0 : "";
|
|
635
635
|
},
|
|
636
636
|
get children() {
|
|
637
|
-
return
|
|
637
|
+
return P(U, { get icon() {
|
|
638
638
|
return t.icon;
|
|
639
639
|
} });
|
|
640
640
|
}
|
|
@@ -643,9 +643,9 @@ function Qn(e) {
|
|
|
643
643
|
}
|
|
644
644
|
});
|
|
645
645
|
}
|
|
646
|
-
function
|
|
647
|
-
let t =
|
|
648
|
-
return
|
|
646
|
+
function tr(e) {
|
|
647
|
+
let t = Mn(), n = () => e.confirm ?? t, r = () => e.id ?? e["aria-label"] ?? e.icon, i = () => n().has(r());
|
|
648
|
+
return P(Te, {
|
|
649
649
|
variant: "outline",
|
|
650
650
|
get size() {
|
|
651
651
|
return e.children ? "default" : "icon";
|
|
@@ -654,87 +654,87 @@ function $n(e) {
|
|
|
654
654
|
return e["aria-label"];
|
|
655
655
|
},
|
|
656
656
|
get class() {
|
|
657
|
-
return
|
|
657
|
+
return J(e.children ? "glasshome-widget-control-wide" : "glasshome-widget-control", e.class);
|
|
658
658
|
},
|
|
659
659
|
get "data-confirmed"() {
|
|
660
660
|
return i() || void 0;
|
|
661
661
|
},
|
|
662
662
|
onClick: () => void n().run([r()], e.run),
|
|
663
663
|
get children() {
|
|
664
|
-
return [
|
|
665
|
-
return
|
|
666
|
-
} }),
|
|
664
|
+
return [P(U, { get icon() {
|
|
665
|
+
return L(() => !!i())() ? Yn : e.icon;
|
|
666
|
+
} }), L(() => e.children)];
|
|
667
667
|
}
|
|
668
668
|
});
|
|
669
669
|
}
|
|
670
|
-
function
|
|
671
|
-
return
|
|
670
|
+
function nr(e) {
|
|
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 [
|
|
677
|
+
return [P(E, {
|
|
678
678
|
get when() {
|
|
679
679
|
return e.icon;
|
|
680
680
|
},
|
|
681
|
-
children: (e) =>
|
|
681
|
+
children: (e) => P(U, { get icon() {
|
|
682
682
|
return e();
|
|
683
683
|
} })
|
|
684
|
-
}),
|
|
684
|
+
}), L(() => e.children)];
|
|
685
685
|
}
|
|
686
686
|
});
|
|
687
687
|
}
|
|
688
|
-
function
|
|
688
|
+
function rr(e) {
|
|
689
689
|
return (() => {
|
|
690
|
-
var t =
|
|
691
|
-
return
|
|
690
|
+
var t = Gn();
|
|
691
|
+
return I(t, () => e.children), F(() => N(t, J("glasshome-widget-layer", e.class))), t;
|
|
692
692
|
})();
|
|
693
693
|
}
|
|
694
|
-
function
|
|
694
|
+
function ir(e) {
|
|
695
695
|
return (() => {
|
|
696
|
-
var t =
|
|
697
|
-
return
|
|
696
|
+
var t = Kn();
|
|
697
|
+
return I(t, () => e.children), t;
|
|
698
698
|
})();
|
|
699
699
|
}
|
|
700
|
-
function
|
|
701
|
-
let t =
|
|
700
|
+
function ar(e) {
|
|
701
|
+
let t = j(Jn);
|
|
702
702
|
return (() => {
|
|
703
|
-
var n =
|
|
704
|
-
return
|
|
705
|
-
return
|
|
703
|
+
var n = qn();
|
|
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 ir = "/* 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 --glass-wash-2: var(--widget-wash-2);\n --glass-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 backdrop-filter: var(--widget-backdrop, none);\n -webkit-backdrop-filter: var(--widget-backdrop, none);\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\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", ar = !1, or, sr = /* @__PURE__ */ new WeakSet();
|
|
712
|
-
function
|
|
713
|
-
return
|
|
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
|
+
function ur() {
|
|
713
|
+
return cr || (cr = new CSSStyleSheet(), cr.replaceSync(or.replace(/:root\b/g, ":host").replace(/^\.dark\b/gm, ":host(.dark)"))), cr;
|
|
714
714
|
}
|
|
715
|
-
function
|
|
715
|
+
function dr(e) {
|
|
716
716
|
if (typeof ShadowRoot < "u" && e instanceof ShadowRoot) {
|
|
717
|
-
if (
|
|
718
|
-
let t =
|
|
719
|
-
e.adoptedStyleSheets.includes(t) || (e.adoptedStyleSheets = [...e.adoptedStyleSheets, t]),
|
|
717
|
+
if (lr.has(e)) return;
|
|
718
|
+
let t = ur();
|
|
719
|
+
e.adoptedStyleSheets.includes(t) || (e.adoptedStyleSheets = [...e.adoptedStyleSheets, t]), lr.add(e);
|
|
720
720
|
return;
|
|
721
721
|
}
|
|
722
|
-
if (
|
|
722
|
+
if (sr) return;
|
|
723
723
|
let t = e ?? (typeof document > "u" ? void 0 : document);
|
|
724
724
|
if (!t) return;
|
|
725
725
|
if (t.head.querySelector?.("style[data-glasshome-tokens]")) {
|
|
726
|
-
|
|
726
|
+
sr = !0;
|
|
727
727
|
return;
|
|
728
728
|
}
|
|
729
729
|
let n = t.createElement("style");
|
|
730
|
-
n.setAttribute("data-glasshome-tokens", ""), n.textContent =
|
|
730
|
+
n.setAttribute("data-glasshome-tokens", ""), n.textContent = or, t.head.appendChild(n), sr = !0;
|
|
731
731
|
}
|
|
732
732
|
//#endregion
|
|
733
733
|
//#region src/framework/variants/built-in-variants.ts
|
|
734
|
-
var
|
|
734
|
+
var fr = {
|
|
735
735
|
"classic-glass": { cssVars: {
|
|
736
736
|
"--widget-padding": "1.5rem",
|
|
737
|
-
"--widget-backdrop": "blur(var(--glass-blur, var(--material-blur, 24px))) saturate(1.8)"
|
|
737
|
+
"--widget-backdrop": "blur(var(--glass-blur, var(--material-blur, 24px))) saturate(calc(1.8 * var(--_material-vibrancy, 1))) brightness(calc(1 + (var(--_material-vibrancy, 1) - 1) * 0.2))"
|
|
738
738
|
} },
|
|
739
739
|
minimal: { cssVars: {
|
|
740
740
|
"--widget-padding": "1rem",
|
|
@@ -751,21 +751,21 @@ var ur = {
|
|
|
751
751
|
"--widget-backdrop": "blur(16px) saturate(1.8)"
|
|
752
752
|
} }
|
|
753
753
|
};
|
|
754
|
-
function
|
|
755
|
-
return Object.hasOwn(
|
|
754
|
+
function pr(e) {
|
|
755
|
+
return Object.hasOwn(fr, e) ? fr[e] : void 0;
|
|
756
756
|
}
|
|
757
757
|
//#endregion
|
|
758
758
|
//#region src/framework/backgrounds/WidgetSliderFill.tsx
|
|
759
|
-
var
|
|
760
|
-
function
|
|
761
|
-
return e.color !== void 0 &&
|
|
762
|
-
var t =
|
|
763
|
-
return
|
|
764
|
-
var r =
|
|
759
|
+
var mr = /*#__PURE__*/ V("<div>"), hr = e(() => void 0, "sliderFill.color");
|
|
760
|
+
function gr(e) {
|
|
761
|
+
return e.color !== void 0 && hr(), (() => {
|
|
762
|
+
var t = mr();
|
|
763
|
+
return F((n) => {
|
|
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
|
-
"z-index":
|
|
766
|
+
"z-index": an.BACKGROUND
|
|
767
767
|
};
|
|
768
|
-
return r !== n.e &&
|
|
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 mr(e) {
|
|
|
774
774
|
}
|
|
775
775
|
//#endregion
|
|
776
776
|
//#region src/framework/components/WidgetContent.tsx
|
|
777
|
-
var
|
|
778
|
-
function
|
|
779
|
-
let t =
|
|
780
|
-
|
|
781
|
-
let n =
|
|
777
|
+
var _r = /*#__PURE__*/ V("<div>"), vr = /\bglasshome-widget-(head|hero|controls|backdrop|glyph|layer)\b/;
|
|
778
|
+
function yr(e) {
|
|
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
|
-
var t =
|
|
784
|
-
return
|
|
785
|
-
var i =
|
|
786
|
-
return i !== n.e &&
|
|
783
|
+
var t = _r();
|
|
784
|
+
return I(t, n), F((n) => {
|
|
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 && 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 _r(e) {
|
|
|
792
792
|
}
|
|
793
793
|
//#endregion
|
|
794
794
|
//#region src/framework/components/WidgetStatus.tsx
|
|
795
|
-
var
|
|
796
|
-
function
|
|
795
|
+
var br = /*#__PURE__*/ V("<p>");
|
|
796
|
+
function xr(e) {
|
|
797
797
|
return (() => {
|
|
798
|
-
var t =
|
|
799
|
-
return
|
|
800
|
-
var t =
|
|
798
|
+
var t = br();
|
|
799
|
+
return I(t, (() => {
|
|
800
|
+
var t = L(() => !!e.isUnavailable);
|
|
801
801
|
return () => t() ? "Unavailable" : e.children;
|
|
802
|
-
})()),
|
|
803
|
-
var r =
|
|
804
|
-
return r !== n.e &&
|
|
802
|
+
})()), F((n) => {
|
|
803
|
+
var r = J("glasshome-widget-status", "relative", e.dimmed && "opacity-40", e.class), i = an.ACTIONS;
|
|
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 yr(e) {
|
|
|
810
810
|
}
|
|
811
811
|
//#endregion
|
|
812
812
|
//#region src/framework/components/WidgetTitle.tsx
|
|
813
|
-
var
|
|
814
|
-
function
|
|
813
|
+
var Sr = /*#__PURE__*/ V("<span class=\"glasshome-widget-badge shrink-0\">"), Cr = /*#__PURE__*/ V("<div><h3 class=glasshome-widget-title>");
|
|
814
|
+
function wr(e) {
|
|
815
815
|
return (() => {
|
|
816
|
-
var t =
|
|
817
|
-
return
|
|
816
|
+
var t = Cr(), n = t.firstChild;
|
|
817
|
+
return I(n, () => e.children), I(t, P(E, {
|
|
818
818
|
get when() {
|
|
819
|
-
return
|
|
819
|
+
return L(() => e.badge !== void 0)() && e.badge > 0;
|
|
820
820
|
},
|
|
821
821
|
get children() {
|
|
822
|
-
var t =
|
|
823
|
-
return
|
|
822
|
+
var t = Sr();
|
|
823
|
+
return I(t, () => e.badge), t;
|
|
824
824
|
}
|
|
825
|
-
}), null),
|
|
826
|
-
var r =
|
|
827
|
-
return r !== n.e &&
|
|
825
|
+
}), null), F((n) => {
|
|
826
|
+
var r = J("relative flex items-center gap-2", e.class), i = an.ACTIONS;
|
|
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
|
|
@@ -833,14 +833,14 @@ function Sr(e) {
|
|
|
833
833
|
}
|
|
834
834
|
//#endregion
|
|
835
835
|
//#region src/framework/utils/clipboard.ts
|
|
836
|
-
async function
|
|
836
|
+
async function Tr(e) {
|
|
837
837
|
if (navigator.clipboard?.writeText) try {
|
|
838
838
|
return await navigator.clipboard.writeText(e), !0;
|
|
839
839
|
} catch {}
|
|
840
|
-
return
|
|
840
|
+
return Er(e);
|
|
841
841
|
}
|
|
842
|
-
function
|
|
843
|
-
let t =
|
|
842
|
+
function Er(e) {
|
|
843
|
+
let t = Dr(), n = document.createElement("textarea");
|
|
844
844
|
n.value = e, n.setAttribute("readonly", ""), n.style.position = "fixed", n.style.top = "0", n.style.left = "0", n.style.opacity = "0", (t?.parentElement ?? document.body).append(n);
|
|
845
845
|
try {
|
|
846
846
|
return n.focus(), n.select(), n.setSelectionRange(0, e.length), n.getRootNode().activeElement === n && document.execCommand("copy");
|
|
@@ -850,23 +850,23 @@ function wr(e) {
|
|
|
850
850
|
n.remove(), t?.focus();
|
|
851
851
|
}
|
|
852
852
|
}
|
|
853
|
-
function
|
|
853
|
+
function Dr() {
|
|
854
854
|
let e = document.activeElement;
|
|
855
855
|
for (; e?.shadowRoot?.activeElement;) e = e.shadowRoot.activeElement;
|
|
856
856
|
return e instanceof HTMLElement ? e : null;
|
|
857
857
|
}
|
|
858
|
-
function
|
|
859
|
-
let [t, n] =
|
|
860
|
-
return
|
|
858
|
+
function Or(e = 2e3) {
|
|
859
|
+
let [t, n] = k("idle"), r;
|
|
860
|
+
return A(() => clearTimeout(r)), {
|
|
861
861
|
state: t,
|
|
862
862
|
copy: async (t) => {
|
|
863
|
-
n(await
|
|
863
|
+
n(await Tr(t) ? "copied" : "failed"), clearTimeout(r), r = setTimeout(() => n("idle"), e);
|
|
864
864
|
}
|
|
865
865
|
};
|
|
866
866
|
}
|
|
867
867
|
//#endregion
|
|
868
868
|
//#region src/framework/utils/entity-aggregation.ts
|
|
869
|
-
function
|
|
869
|
+
function kr(e, t = !1) {
|
|
870
870
|
let n = e[0];
|
|
871
871
|
if (!n) return {
|
|
872
872
|
isGroup: !1,
|
|
@@ -890,7 +890,7 @@ function Dr(e, t = !1) {
|
|
|
890
890
|
isUnavailable: e.state === "unavailable",
|
|
891
891
|
brightness: r,
|
|
892
892
|
brightnessPercent: i,
|
|
893
|
-
color:
|
|
893
|
+
color: Mr(e),
|
|
894
894
|
onCount: +!!t,
|
|
895
895
|
totalCount: 1,
|
|
896
896
|
description: t ? "On" : "Off"
|
|
@@ -902,7 +902,7 @@ function Dr(e, t = !1) {
|
|
|
902
902
|
if (i++, t.attributes?.brightness !== void 0 && (c += t.attributes.brightness, l++), t.attributes?.rgb_color) u.push(t.attributes.rgb_color);
|
|
903
903
|
else if (t.attributes?.hs_color) {
|
|
904
904
|
let [e, n] = t.attributes.hs_color;
|
|
905
|
-
u.push(
|
|
905
|
+
u.push(jr(e, n));
|
|
906
906
|
}
|
|
907
907
|
break;
|
|
908
908
|
case "off":
|
|
@@ -913,28 +913,28 @@ function Dr(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,
|
|
917
|
-
t ? f ? (
|
|
918
|
-
let
|
|
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 =
|
|
921
|
-
|
|
922
|
-
} else
|
|
923
|
-
let
|
|
924
|
-
return
|
|
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:
|
|
927
|
-
isOn:
|
|
928
|
-
isUnavailable:
|
|
929
|
-
brightness:
|
|
930
|
-
brightnessPercent:
|
|
931
|
-
color:
|
|
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:
|
|
934
|
+
description: S
|
|
935
935
|
};
|
|
936
936
|
}
|
|
937
|
-
function
|
|
937
|
+
function Ar(e, t = "mean", n = !0) {
|
|
938
938
|
let r = e[0];
|
|
939
939
|
if (!r) return {
|
|
940
940
|
isGroup: !1,
|
|
@@ -1031,7 +1031,7 @@ function Or(e, t = "mean", n = !0) {
|
|
|
1031
1031
|
memberValues: o
|
|
1032
1032
|
};
|
|
1033
1033
|
}
|
|
1034
|
-
function
|
|
1034
|
+
function jr(e, t) {
|
|
1035
1035
|
let n = t / 100, r = n * (1 - Math.abs(e / 60 % 2 - 1)), i = 1 - n, a = 0, o = 0, s = 0;
|
|
1036
1036
|
return e < 60 ? [a, o] = [n, r] : e < 120 ? [a, o] = [r, n] : e < 180 ? [o, s] = [n, r] : e < 240 ? [o, s] = [r, n] : e < 300 ? [a, s] = [r, n] : [a, s] = [n, r], [
|
|
1037
1037
|
(a + i) * 255,
|
|
@@ -1039,7 +1039,7 @@ function kr(e, t) {
|
|
|
1039
1039
|
(s + i) * 255
|
|
1040
1040
|
];
|
|
1041
1041
|
}
|
|
1042
|
-
function
|
|
1042
|
+
function Mr(e) {
|
|
1043
1043
|
if (e.state !== "on") return "rgb(100, 100, 100)";
|
|
1044
1044
|
let t = (e.attributes?.brightness ?? 255) / 255;
|
|
1045
1045
|
if (e.attributes?.rgb_color) {
|
|
@@ -1047,7 +1047,7 @@ function Ar(e) {
|
|
|
1047
1047
|
return `rgb(${Math.round(n * t)}, ${Math.round(r * t)}, ${Math.round(i * t)})`;
|
|
1048
1048
|
}
|
|
1049
1049
|
if (e.attributes?.hs_color) {
|
|
1050
|
-
let [n, r] = e.attributes.hs_color, [i, a, o] =
|
|
1050
|
+
let [n, r] = e.attributes.hs_color, [i, a, o] = jr(n, r);
|
|
1051
1051
|
return `rgb(${Math.round(i * t)}, ${Math.round(a * t)}, ${Math.round(o * t)})`;
|
|
1052
1052
|
}
|
|
1053
1053
|
if (e.attributes?.color_temp) {
|
|
@@ -1058,7 +1058,7 @@ function Ar(e) {
|
|
|
1058
1058
|
}
|
|
1059
1059
|
//#endregion
|
|
1060
1060
|
//#region src/framework/utils/entity-state.ts
|
|
1061
|
-
function
|
|
1061
|
+
function Nr(e) {
|
|
1062
1062
|
if (!e) return !1;
|
|
1063
1063
|
if ([
|
|
1064
1064
|
"on",
|
|
@@ -1074,15 +1074,15 @@ function jr(e) {
|
|
|
1074
1074
|
}
|
|
1075
1075
|
return !1;
|
|
1076
1076
|
}
|
|
1077
|
-
function
|
|
1077
|
+
function Pr(e, t, n) {
|
|
1078
1078
|
return e?.attributes ? e.attributes[t] ?? n : n;
|
|
1079
1079
|
}
|
|
1080
|
-
function
|
|
1081
|
-
return e.filter(
|
|
1080
|
+
function Fr(e) {
|
|
1081
|
+
return e.filter(Nr).length;
|
|
1082
1082
|
}
|
|
1083
1083
|
//#endregion
|
|
1084
1084
|
//#region src/framework/utils/format-value.ts
|
|
1085
|
-
function
|
|
1085
|
+
function Ir(e, t, n) {
|
|
1086
1086
|
let { decimals: r, scale: i = !0 } = n || {};
|
|
1087
1087
|
if (typeof e == "string") return t ? `${e}${t}` : e;
|
|
1088
1088
|
if (e == null || Number.isNaN(e)) return t ? `--${t}` : "--";
|
|
@@ -1093,45 +1093,45 @@ function Pr(e, t, n) {
|
|
|
1093
1093
|
}
|
|
1094
1094
|
//#endregion
|
|
1095
1095
|
//#region src/framework/utils/interpret-value.ts
|
|
1096
|
-
function
|
|
1096
|
+
function Lr(e, t) {
|
|
1097
1097
|
return e == null || isNaN(e) ? null : t === "°C" ? e < 10 ? "Cold" : e < 18 ? "Cool" : e < 24 ? "Comfortable" : e < 28 ? "Warm" : "Hot" : t === "°F" ? e < 50 ? "Cold" : e < 64 ? "Cool" : e < 75 ? "Comfortable" : e < 82 ? "Warm" : "Hot" : t === "%" ? e < 20 ? "Very Low" : e < 40 ? "Low" : e < 60 ? "Medium" : e < 80 ? "High" : "Very High" : t === "ppm" ? e < 400 ? "Excellent" : e < 600 ? "Good" : e < 1e3 ? "Acceptable" : e < 1500 ? "Mediocre" : "Poor" : t === "lx" ? e < 50 ? "Dark" : e < 200 ? "Dim" : e < 500 ? "Moderate" : e < 1e3 ? "Bright" : "Very Bright" : t === "AQI" ? e <= 50 ? "Good" : e <= 100 ? "Moderate" : e <= 150 ? "Unhealthy for Sensitive" : e <= 200 ? "Unhealthy" : e <= 300 ? "Very Unhealthy" : "Hazardous" : t === "dB" ? e < 30 ? "Very Quiet" : e < 50 ? "Quiet" : e < 70 ? "Moderate" : e < 85 ? "Loud" : "Very Loud" : null;
|
|
1098
1098
|
}
|
|
1099
1099
|
//#endregion
|
|
1100
1100
|
//#region src/framework/components/WidgetValue.tsx
|
|
1101
|
-
var
|
|
1102
|
-
function
|
|
1101
|
+
var Rr = /*#__PURE__*/ V("<div class=glasshome-widget-subtitle>"), zr = /*#__PURE__*/ V("<div><div class=glasshome-widget-value>");
|
|
1102
|
+
function Br(e) {
|
|
1103
1103
|
return (() => {
|
|
1104
|
-
var t =
|
|
1105
|
-
return
|
|
1104
|
+
var t = zr(), n = t.firstChild;
|
|
1105
|
+
return I(n, () => Ir(e.value, e.unit)), I(t, P(E, {
|
|
1106
1106
|
get when() {
|
|
1107
|
-
return
|
|
1107
|
+
return L(() => !!e.interpret)() && typeof e.value == "number";
|
|
1108
1108
|
},
|
|
1109
1109
|
get children() {
|
|
1110
|
-
var t =
|
|
1111
|
-
return
|
|
1110
|
+
var t = Rr();
|
|
1111
|
+
return I(t, () => Lr(e.value, e.unit)), t;
|
|
1112
1112
|
}
|
|
1113
|
-
}), null),
|
|
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
|
|
1119
|
-
function
|
|
1120
|
-
let n =
|
|
1121
|
-
|
|
1122
|
-
let i =
|
|
1123
|
-
|
|
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
|
+
function Yr(t) {
|
|
1120
|
+
let n = j(W), r = On(() => ({ hold: { action: () => (G.get(n ?? {}) ?? G.get(f))?.("edit") } }));
|
|
1121
|
+
A(r.dispose);
|
|
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
|
+
A(o.dispose);
|
|
1124
1124
|
let s = () => t.emptyState && n ? r : t.gestures ?? (a ? o : void 0);
|
|
1125
|
-
a && (
|
|
1125
|
+
a && (D(() => n?.onHoldable?.(!t.emptyState && !!s()?.holds?.())), A(() => n?.onHoldable?.(!1))), D(() => {
|
|
1126
1126
|
if (!a || !i?.nothingMore()) return;
|
|
1127
|
-
let e = setTimeout(() => i.setNothingMore(!1),
|
|
1128
|
-
|
|
1129
|
-
}),
|
|
1130
|
-
let [c, l] =
|
|
1127
|
+
let e = setTimeout(() => i.setNothingMore(!1), Jr);
|
|
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
|
-
|
|
1134
|
+
D(() => {
|
|
1135
1135
|
let e = c();
|
|
1136
1136
|
if (!e) return;
|
|
1137
1137
|
let t = new ResizeObserver(([e]) => {
|
|
@@ -1145,91 +1145,93 @@ function qr(t) {
|
|
|
1145
1145
|
height: e.contentRect.height
|
|
1146
1146
|
});
|
|
1147
1147
|
});
|
|
1148
|
-
t.observe(e),
|
|
1149
|
-
}),
|
|
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
|
});
|
|
1153
1153
|
let f = {
|
|
1154
1154
|
...n,
|
|
1155
1155
|
updateConfig: n?.updateConfig ?? (() => {}),
|
|
1156
1156
|
dimensions: e(() => u(), "ctx.dimensions")
|
|
1157
1157
|
};
|
|
1158
|
-
n && Object.defineProperty(f,
|
|
1159
|
-
let p =
|
|
1160
|
-
if (t.variant) return typeof t.variant == "string" ?
|
|
1161
|
-
}), m = e(() => t.gradient, "widget.gradient"),
|
|
1158
|
+
n && Object.defineProperty(f, cn, { value: n });
|
|
1159
|
+
let p = O(() => {
|
|
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, 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
|
-
...
|
|
1167
|
-
...t.tone ? { "--widget-color": `var(--tone-${t.tone})` } : {},
|
|
1168
|
-
...t.color ? { "--widget-color": t.color } : {},
|
|
1169
|
-
...t.tone && t.tone !== "neutral" || t.color ? { "--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
|
-
})),
|
|
1176
|
-
|
|
1177
|
-
}, _ = (e) => {
|
|
1178
|
-
h() && s()?.onPointerDown(e);
|
|
1179
|
-
}, v = (e) => {
|
|
1180
|
-
h() && s()?.onPointerMove(e);
|
|
1181
|
-
}, y = (e) => {
|
|
1182
|
-
h() && s()?.onPointerUp(e);
|
|
1177
|
+
})), v = () => !!s() && !t.isEditMode, y = (e) => {
|
|
1178
|
+
v() && s()?.onPointerEnter(e);
|
|
1183
1179
|
}, b = (e) => {
|
|
1184
|
-
|
|
1185
|
-
}, x = () =>
|
|
1180
|
+
v() && s()?.onPointerDown(e);
|
|
1181
|
+
}, x = (e) => {
|
|
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
|
-
}, te = (e) => (e && Object.assign(
|
|
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: `${
|
|
1195
|
-
top: `${
|
|
1196
|
-
width: `${
|
|
1197
|
-
height: `${
|
|
1198
|
-
"z-index":
|
|
1196
|
+
left: `${w.x}px`,
|
|
1197
|
+
top: `${w.y}px`,
|
|
1198
|
+
width: `${w.r * 2}px`,
|
|
1199
|
+
height: `${w.r * 2}px`,
|
|
1200
|
+
"z-index": an.BACKGROUND
|
|
1199
1201
|
});
|
|
1200
|
-
return
|
|
1202
|
+
return P(W.Provider, {
|
|
1201
1203
|
value: f,
|
|
1202
1204
|
get children() {
|
|
1203
|
-
return
|
|
1205
|
+
return P(Jn.Provider, {
|
|
1204
1206
|
value: () => t.confirmed === !0,
|
|
1205
1207
|
get children() {
|
|
1206
|
-
return
|
|
1208
|
+
return P(kn.Provider, {
|
|
1207
1209
|
value: u,
|
|
1208
1210
|
get children() {
|
|
1209
1211
|
return [(() => {
|
|
1210
|
-
var e =
|
|
1211
|
-
return
|
|
1212
|
-
|
|
1213
|
-
},
|
|
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
|
-
},
|
|
1217
|
+
}, n), I(n, P(E, {
|
|
1216
1218
|
get when() {
|
|
1217
1219
|
return s()?.hold;
|
|
1218
1220
|
},
|
|
1219
1221
|
get children() {
|
|
1220
|
-
var e =
|
|
1221
|
-
return
|
|
1222
|
-
var n =
|
|
1223
|
-
return n !== t.e &&
|
|
1222
|
+
var e = Vr();
|
|
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
|
-
}),
|
|
1231
|
-
var e =
|
|
1232
|
-
return () => e() ?
|
|
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,26 +1242,29 @@ function qr(t) {
|
|
|
1240
1242
|
return t.emptyState.message;
|
|
1241
1243
|
}
|
|
1242
1244
|
}) : t.children;
|
|
1243
|
-
})()),
|
|
1244
|
-
var e =
|
|
1245
|
+
})()), I(n, (() => {
|
|
1246
|
+
var e = L(() => !!t.loading);
|
|
1245
1247
|
return () => e() && (() => {
|
|
1246
|
-
var e =
|
|
1247
|
-
return
|
|
1248
|
+
var e = Ur();
|
|
1249
|
+
return F((t) => z(e, "z-index", an.OVERLAY)), e;
|
|
1248
1250
|
})();
|
|
1249
|
-
})(), null),
|
|
1250
|
-
var
|
|
1251
|
-
return
|
|
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
|
-
i: void 0
|
|
1259
|
+
i: void 0,
|
|
1260
|
+
n: void 0,
|
|
1261
|
+
s: void 0,
|
|
1262
|
+
h: void 0
|
|
1258
1263
|
}), e;
|
|
1259
|
-
})(),
|
|
1264
|
+
})(), P(E, {
|
|
1260
1265
|
when: a,
|
|
1261
1266
|
get children() {
|
|
1262
|
-
return
|
|
1267
|
+
return P(Ze, {
|
|
1263
1268
|
get open() {
|
|
1264
1269
|
return i?.nothingMore() ?? !1;
|
|
1265
1270
|
},
|
|
@@ -1268,10 +1273,10 @@ function qr(t) {
|
|
|
1268
1273
|
},
|
|
1269
1274
|
anchorRef: c,
|
|
1270
1275
|
get children() {
|
|
1271
|
-
return
|
|
1276
|
+
return P(Qe, {
|
|
1272
1277
|
class: "flex w-auto items-center gap-2 p-3 text-sm",
|
|
1273
1278
|
get children() {
|
|
1274
|
-
return [
|
|
1279
|
+
return [P(U, { icon: "mdi:information-outline" }), "No more controls for this widget"];
|
|
1275
1280
|
}
|
|
1276
1281
|
});
|
|
1277
1282
|
}
|
|
@@ -1285,48 +1290,48 @@ function qr(t) {
|
|
|
1285
1290
|
}
|
|
1286
1291
|
});
|
|
1287
1292
|
}
|
|
1288
|
-
function
|
|
1293
|
+
function Xr(e) {
|
|
1289
1294
|
return (() => {
|
|
1290
|
-
var t =
|
|
1291
|
-
return
|
|
1292
|
-
var t =
|
|
1295
|
+
var t = Wr();
|
|
1296
|
+
return I(t, (() => {
|
|
1297
|
+
var t = L(() => !!e.icon);
|
|
1293
1298
|
return () => t() && (() => {
|
|
1294
|
-
var t =
|
|
1295
|
-
return
|
|
1299
|
+
var t = Gr();
|
|
1300
|
+
return I(t, () => e.icon), t;
|
|
1296
1301
|
})();
|
|
1297
|
-
})(), null),
|
|
1298
|
-
var t =
|
|
1302
|
+
})(), null), I(t, (() => {
|
|
1303
|
+
var t = L(() => !!e.title);
|
|
1299
1304
|
return () => t() && (() => {
|
|
1300
|
-
var t =
|
|
1301
|
-
return
|
|
1305
|
+
var t = Kr();
|
|
1306
|
+
return I(t, () => e.title), t;
|
|
1302
1307
|
})();
|
|
1303
|
-
})(), null),
|
|
1304
|
-
var t =
|
|
1308
|
+
})(), null), I(t, (() => {
|
|
1309
|
+
var t = L(() => !!e.message);
|
|
1305
1310
|
return () => t() && (() => {
|
|
1306
|
-
var t =
|
|
1307
|
-
return
|
|
1311
|
+
var t = qr();
|
|
1312
|
+
return I(t, () => e.message), t;
|
|
1308
1313
|
})();
|
|
1309
1314
|
})(), null), t;
|
|
1310
1315
|
})();
|
|
1311
1316
|
}
|
|
1312
|
-
var
|
|
1313
|
-
|
|
1317
|
+
var Y = Yr;
|
|
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"]);
|
|
1314
1319
|
//#endregion
|
|
1315
1320
|
//#region src/framework/panel/panel.tsx
|
|
1316
|
-
var
|
|
1317
|
-
function
|
|
1318
|
-
let t =
|
|
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));
|
|
1322
|
+
function ui(e) {
|
|
1323
|
+
let t = j(W), n, r = !1, i = !1, a, o = 0, s = (t, n) => {
|
|
1319
1324
|
let r = e.slide?.();
|
|
1320
1325
|
if (!r) return 0;
|
|
1321
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;
|
|
1322
|
-
return Math.round(
|
|
1327
|
+
return Math.round(li(o + a * (s - o), o, s));
|
|
1323
1328
|
}, c = () => {
|
|
1324
1329
|
clearTimeout(a), n = void 0;
|
|
1325
1330
|
};
|
|
1326
|
-
return
|
|
1331
|
+
return A(() => clearTimeout(a)), {
|
|
1327
1332
|
onPointerDown: (o) => {
|
|
1328
1333
|
if (o.button !== 0 || n) return;
|
|
1329
|
-
let s = o.target instanceof Element ? o.target.closest(
|
|
1334
|
+
let s = o.target instanceof Element ? o.target.closest(Dn) : null;
|
|
1330
1335
|
s && s !== o.currentTarget || (n = {
|
|
1331
1336
|
x: o.clientX,
|
|
1332
1337
|
y: o.clientY,
|
|
@@ -1338,7 +1343,7 @@ function ci(e) {
|
|
|
1338
1343
|
onPointerMove: (t) => {
|
|
1339
1344
|
if (!n || t.pointerId !== n.id || i) return;
|
|
1340
1345
|
let c = t.currentTarget, l = e.axis === "x" ? Math.abs(t.clientX - n.x) : Math.abs(t.clientY - n.y);
|
|
1341
|
-
!r && e.slide?.() && l >
|
|
1346
|
+
!r && e.slide?.() && l > ci && (r = !0, clearTimeout(a)), r ? (o = s(c, t), e.slide?.()?.onChange(o)) : Math.hypot(t.clientX - n.x, t.clientY - n.y) > ci && clearTimeout(a);
|
|
1342
1347
|
},
|
|
1343
1348
|
onPointerUp: (t) => {
|
|
1344
1349
|
n && t.pointerId === n.id && (r ? e.slide?.()?.onCommit?.(o) : i || e.onTap?.(), c());
|
|
@@ -1346,20 +1351,20 @@ function ci(e) {
|
|
|
1346
1351
|
onPointerCancel: c
|
|
1347
1352
|
};
|
|
1348
1353
|
}
|
|
1349
|
-
function
|
|
1354
|
+
function di(e) {
|
|
1350
1355
|
return (() => {
|
|
1351
|
-
var t =
|
|
1352
|
-
return
|
|
1356
|
+
var t = Zr(), n = t.firstChild;
|
|
1357
|
+
return I(n, () => e.label), I(t, () => e.children, null), t;
|
|
1353
1358
|
})();
|
|
1354
1359
|
}
|
|
1355
|
-
function
|
|
1360
|
+
function fi(e) {
|
|
1356
1361
|
return (() => {
|
|
1357
|
-
var t =
|
|
1358
|
-
return
|
|
1362
|
+
var t = Qr();
|
|
1363
|
+
return I(t, () => e.children), t;
|
|
1359
1364
|
})();
|
|
1360
1365
|
}
|
|
1361
|
-
function
|
|
1362
|
-
let t = () => !!(e.onTap || e.slide || e.onHold), n =
|
|
1366
|
+
function pi(e) {
|
|
1367
|
+
let t = () => !!(e.onTap || e.slide || e.onHold), n = ui({
|
|
1363
1368
|
axis: "x",
|
|
1364
1369
|
slide: () => e.slide,
|
|
1365
1370
|
onTap: () => e.onTap?.(),
|
|
@@ -1376,26 +1381,26 @@ function di(e) {
|
|
|
1376
1381
|
let r = t.key === "ArrowRight" || t.key === "ArrowUp" ? 5 : t.key === "ArrowLeft" || t.key === "ArrowDown" ? -5 : 0;
|
|
1377
1382
|
if (!r) return;
|
|
1378
1383
|
t.preventDefault();
|
|
1379
|
-
let i =
|
|
1384
|
+
let i = li(n.value + r, n.min ?? 0, n.max ?? 100);
|
|
1380
1385
|
n.onChange(i), n.onCommit?.(i);
|
|
1381
1386
|
}, a = () => [
|
|
1382
|
-
|
|
1387
|
+
P(E, {
|
|
1383
1388
|
get when() {
|
|
1384
1389
|
return r() !== void 0;
|
|
1385
1390
|
},
|
|
1386
1391
|
get children() {
|
|
1387
|
-
var e =
|
|
1388
|
-
return
|
|
1392
|
+
var e = $r();
|
|
1393
|
+
return F((t) => B(e, { "--widget-fill-value": r() }, t)), e;
|
|
1389
1394
|
}
|
|
1390
1395
|
}),
|
|
1391
1396
|
(() => {
|
|
1392
|
-
var t =
|
|
1393
|
-
return
|
|
1397
|
+
var t = ei();
|
|
1398
|
+
return I(t, P(U, {
|
|
1394
1399
|
get icon() {
|
|
1395
1400
|
return e.icon;
|
|
1396
1401
|
},
|
|
1397
1402
|
class: "glasshome-widget-icon-glyph"
|
|
1398
|
-
})),
|
|
1403
|
+
})), F((n) => {
|
|
1399
1404
|
var r = !!e.on, i = !e.on;
|
|
1400
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;
|
|
1401
1406
|
}, {
|
|
@@ -1404,33 +1409,33 @@ function di(e) {
|
|
|
1404
1409
|
}), t;
|
|
1405
1410
|
})(),
|
|
1406
1411
|
(() => {
|
|
1407
|
-
var t =
|
|
1408
|
-
return
|
|
1412
|
+
var t = ni(), n = t.firstChild;
|
|
1413
|
+
return I(n, () => e.name), I(t, P(E, {
|
|
1409
1414
|
get when() {
|
|
1410
1415
|
return e.state !== void 0;
|
|
1411
1416
|
},
|
|
1412
1417
|
get children() {
|
|
1413
|
-
var t =
|
|
1414
|
-
return
|
|
1418
|
+
var t = ti();
|
|
1419
|
+
return I(t, () => e.state), t;
|
|
1415
1420
|
}
|
|
1416
1421
|
}), null), t;
|
|
1417
1422
|
})()
|
|
1418
1423
|
], o = () => ({ "--widget-color": e.tone ?? "var(--tone-neutral)" });
|
|
1419
1424
|
return (() => {
|
|
1420
|
-
var r =
|
|
1421
|
-
return
|
|
1425
|
+
var r = ii();
|
|
1426
|
+
return I(r, P(E, {
|
|
1422
1427
|
get when() {
|
|
1423
1428
|
return t();
|
|
1424
1429
|
},
|
|
1425
1430
|
get fallback() {
|
|
1426
1431
|
return (() => {
|
|
1427
|
-
var e =
|
|
1428
|
-
return
|
|
1432
|
+
var e = ai();
|
|
1433
|
+
return I(e, a), F((t) => {
|
|
1429
1434
|
var n = `${Rt({
|
|
1430
1435
|
variant: "outline",
|
|
1431
1436
|
size: "none"
|
|
1432
1437
|
})} glasshome-panel-row glasshome-panel-row-static`, r = o();
|
|
1433
|
-
return n !== t.e &&
|
|
1438
|
+
return n !== t.e && N(e, t.e = n), t.t = B(e, r, t.t), t;
|
|
1434
1439
|
}, {
|
|
1435
1440
|
e: void 0,
|
|
1436
1441
|
t: void 0
|
|
@@ -1438,7 +1443,7 @@ function di(e) {
|
|
|
1438
1443
|
})();
|
|
1439
1444
|
},
|
|
1440
1445
|
get children() {
|
|
1441
|
-
return
|
|
1446
|
+
return P(Te, {
|
|
1442
1447
|
variant: "outline",
|
|
1443
1448
|
size: "none",
|
|
1444
1449
|
class: "glasshome-panel-row",
|
|
@@ -1472,39 +1477,39 @@ function di(e) {
|
|
|
1472
1477
|
}
|
|
1473
1478
|
});
|
|
1474
1479
|
}
|
|
1475
|
-
}), null),
|
|
1480
|
+
}), null), I(r, P(E, {
|
|
1476
1481
|
get when() {
|
|
1477
1482
|
return e.trailing;
|
|
1478
1483
|
},
|
|
1479
1484
|
get children() {
|
|
1480
|
-
var t =
|
|
1481
|
-
return
|
|
1485
|
+
var t = ri();
|
|
1486
|
+
return I(t, () => e.trailing), t;
|
|
1482
1487
|
}
|
|
1483
1488
|
}), null), r;
|
|
1484
1489
|
})();
|
|
1485
1490
|
}
|
|
1486
|
-
function
|
|
1491
|
+
function mi(e) {
|
|
1487
1492
|
return (() => {
|
|
1488
|
-
var t =
|
|
1489
|
-
return
|
|
1493
|
+
var t = oi();
|
|
1494
|
+
return I(t, P(T, {
|
|
1490
1495
|
get each() {
|
|
1491
1496
|
return e.items;
|
|
1492
1497
|
},
|
|
1493
1498
|
children: (e) => (() => {
|
|
1494
|
-
var t =
|
|
1495
|
-
return
|
|
1499
|
+
var t = si(), n = t.firstChild, r = n.firstChild, i = r.nextSibling;
|
|
1500
|
+
return I(t, P(U, {
|
|
1496
1501
|
get icon() {
|
|
1497
1502
|
return e.icon;
|
|
1498
1503
|
},
|
|
1499
1504
|
class: "glasshome-panel-fact-icon"
|
|
1500
|
-
}), n),
|
|
1505
|
+
}), n), I(r, () => e.label), I(i, () => e.value), t;
|
|
1501
1506
|
})()
|
|
1502
1507
|
})), t;
|
|
1503
1508
|
})();
|
|
1504
1509
|
}
|
|
1505
1510
|
//#endregion
|
|
1506
1511
|
//#region src/framework/panel/panel-entity.tsx
|
|
1507
|
-
var
|
|
1512
|
+
var hi = (e) => typeof e == "number" ? Math.round(e) : void 0, gi = (e) => e.charAt(0).toUpperCase() + e.slice(1).replaceAll("_", " "), X = (e) => ({ entity_id: e.id }), _i = {
|
|
1508
1513
|
light: {
|
|
1509
1514
|
icon: "mdi:lightbulb",
|
|
1510
1515
|
tone: (e) => {
|
|
@@ -1521,22 +1526,22 @@ var pi = (e) => typeof e == "number" ? Math.round(e) : void 0, mi = (e) => e.cha
|
|
|
1521
1526
|
let t = e.attributes.brightness;
|
|
1522
1527
|
return e.state === "on" ? typeof t == "number" ? Math.round(t / 255 * 100) : 100 : 0;
|
|
1523
1528
|
},
|
|
1524
|
-
setLevel: (e, t, n) => e("light", n > 0 ? "turn_on" : "turn_off", n > 0 ? { brightness_pct: n } : {},
|
|
1525
|
-
tap: (e, t) => e("light", "toggle", {},
|
|
1529
|
+
setLevel: (e, t, n) => e("light", n > 0 ? "turn_on" : "turn_off", n > 0 ? { brightness_pct: n } : {}, X(t)),
|
|
1530
|
+
tap: (e, t) => e("light", "toggle", {}, X(t))
|
|
1526
1531
|
},
|
|
1527
1532
|
switch: {
|
|
1528
1533
|
icon: "mdi:toggle-switch-variant",
|
|
1529
1534
|
tone: "var(--tone-info)",
|
|
1530
1535
|
on: (e) => e.state === "on",
|
|
1531
1536
|
state: (e) => e.state === "on" ? "On" : "Off",
|
|
1532
|
-
tap: (e, t) => e("switch", "toggle", {},
|
|
1537
|
+
tap: (e, t) => e("switch", "toggle", {}, X(t))
|
|
1533
1538
|
},
|
|
1534
1539
|
input_boolean: {
|
|
1535
1540
|
icon: "mdi:toggle-switch-variant",
|
|
1536
1541
|
tone: "var(--tone-info)",
|
|
1537
1542
|
on: (e) => e.state === "on",
|
|
1538
1543
|
state: (e) => e.state === "on" ? "On" : "Off",
|
|
1539
|
-
tap: (e, t) => e("input_boolean", "toggle", {},
|
|
1544
|
+
tap: (e, t) => e("input_boolean", "toggle", {}, X(t))
|
|
1540
1545
|
},
|
|
1541
1546
|
fan: {
|
|
1542
1547
|
icon: "mdi:fan",
|
|
@@ -1544,31 +1549,31 @@ var pi = (e) => typeof e == "number" ? Math.round(e) : void 0, mi = (e) => e.cha
|
|
|
1544
1549
|
on: (e) => e.state === "on",
|
|
1545
1550
|
state: (e) => {
|
|
1546
1551
|
if (e.state !== "on") return "Off";
|
|
1547
|
-
let t =
|
|
1552
|
+
let t = hi(e.attributes.percentage);
|
|
1548
1553
|
return t === void 0 ? "On" : `${t}%`;
|
|
1549
1554
|
},
|
|
1550
|
-
level: (e) => e.state === "on" ?
|
|
1551
|
-
setLevel: (e, t, n) => e("fan", "set_percentage", { percentage: n },
|
|
1552
|
-
tap: (e, t) => e("fan", "toggle", {},
|
|
1555
|
+
level: (e) => e.state === "on" ? hi(e.attributes.percentage) ?? 100 : 0,
|
|
1556
|
+
setLevel: (e, t, n) => e("fan", "set_percentage", { percentage: n }, X(t)),
|
|
1557
|
+
tap: (e, t) => e("fan", "toggle", {}, X(t))
|
|
1553
1558
|
},
|
|
1554
1559
|
cover: {
|
|
1555
1560
|
icon: "mdi:blinds",
|
|
1556
1561
|
tone: "var(--tone-info)",
|
|
1557
1562
|
on: (e) => e.state !== "closed",
|
|
1558
1563
|
state: (e) => {
|
|
1559
|
-
let t =
|
|
1564
|
+
let t = hi(e.attributes.current_position), n = gi(e.state);
|
|
1560
1565
|
return t !== void 0 && e.state === "open" ? `${n} · ${t}%` : n;
|
|
1561
1566
|
},
|
|
1562
|
-
level: (e) =>
|
|
1563
|
-
setLevel: (e, t, n) => e("cover", "set_cover_position", { position: n },
|
|
1564
|
-
tap: (e, t) => e("cover", t.state === "closed" ? "open_cover" : "close_cover", {},
|
|
1567
|
+
level: (e) => hi(e.attributes.current_position),
|
|
1568
|
+
setLevel: (e, t, n) => e("cover", "set_cover_position", { position: n }, X(t)),
|
|
1569
|
+
tap: (e, t) => e("cover", t.state === "closed" ? "open_cover" : "close_cover", {}, X(t))
|
|
1565
1570
|
},
|
|
1566
1571
|
lock: {
|
|
1567
1572
|
icon: (e) => e.state === "locked" ? "mdi:lock" : "mdi:lock-open-variant",
|
|
1568
1573
|
tone: "var(--tone-success)",
|
|
1569
1574
|
on: (e) => e.state === "locked",
|
|
1570
|
-
state: (e) =>
|
|
1571
|
-
tap: (e, t) => e("lock", t.state === "locked" ? "unlock" : "lock", {},
|
|
1575
|
+
state: (e) => gi(e.state),
|
|
1576
|
+
tap: (e, t) => e("lock", t.state === "locked" ? "unlock" : "lock", {}, X(t))
|
|
1572
1577
|
},
|
|
1573
1578
|
climate: {
|
|
1574
1579
|
icon: "mdi:thermostat",
|
|
@@ -1577,24 +1582,24 @@ var pi = (e) => typeof e == "number" ? Math.round(e) : void 0, mi = (e) => e.cha
|
|
|
1577
1582
|
state: (e) => {
|
|
1578
1583
|
if (e.state === "off") return "Off";
|
|
1579
1584
|
let t = e.attributes.temperature;
|
|
1580
|
-
return typeof t == "number" ? `${
|
|
1585
|
+
return typeof t == "number" ? `${gi(e.state)} · ${t}°` : gi(e.state);
|
|
1581
1586
|
}
|
|
1582
1587
|
},
|
|
1583
1588
|
media_player: {
|
|
1584
1589
|
icon: "mdi:speaker",
|
|
1585
1590
|
tone: "var(--tone-accent)",
|
|
1586
1591
|
on: (e) => e.state === "playing",
|
|
1587
|
-
state: (e) => typeof e.attributes.media_title == "string" && e.state !== "off" ? e.attributes.media_title :
|
|
1592
|
+
state: (e) => typeof e.attributes.media_title == "string" && e.state !== "off" ? e.attributes.media_title : gi(e.state),
|
|
1588
1593
|
level: (e) => typeof e.attributes.volume_level == "number" ? Math.round(e.attributes.volume_level * 100) : void 0,
|
|
1589
|
-
setLevel: (e, t, n) => e("media_player", "volume_set", { volume_level: n / 100 },
|
|
1590
|
-
tap: (e, t) => e("media_player", "media_play_pause", {},
|
|
1594
|
+
setLevel: (e, t, n) => e("media_player", "volume_set", { volume_level: n / 100 }, X(t)),
|
|
1595
|
+
tap: (e, t) => e("media_player", "media_play_pause", {}, X(t))
|
|
1591
1596
|
},
|
|
1592
1597
|
binary_sensor: {
|
|
1593
1598
|
icon: "mdi:eye",
|
|
1594
1599
|
tone: "var(--tone-info)",
|
|
1595
1600
|
on: (e) => e.state === "on",
|
|
1596
1601
|
state: (e) => {
|
|
1597
|
-
let t =
|
|
1602
|
+
let t = yi[e.deviceClass ?? ""] ?? ["On", "Off"];
|
|
1598
1603
|
return e.state === "on" ? t[0] : t[1];
|
|
1599
1604
|
}
|
|
1600
1605
|
},
|
|
@@ -1602,38 +1607,38 @@ var pi = (e) => typeof e == "number" ? Math.round(e) : void 0, mi = (e) => e.cha
|
|
|
1602
1607
|
icon: "mdi:gesture-tap-button",
|
|
1603
1608
|
tone: "var(--tone-accent)",
|
|
1604
1609
|
on: () => !1,
|
|
1605
|
-
state: (e) =>
|
|
1606
|
-
tap: (e, t) => e("button", "press", {},
|
|
1610
|
+
state: (e) => bi(e.state),
|
|
1611
|
+
tap: (e, t) => e("button", "press", {}, X(t))
|
|
1607
1612
|
},
|
|
1608
1613
|
input_button: {
|
|
1609
1614
|
icon: "mdi:gesture-tap-button",
|
|
1610
1615
|
tone: "var(--tone-accent)",
|
|
1611
1616
|
on: () => !1,
|
|
1612
|
-
state: (e) =>
|
|
1613
|
-
tap: (e, t) => e("input_button", "press", {},
|
|
1617
|
+
state: (e) => bi(e.state),
|
|
1618
|
+
tap: (e, t) => e("input_button", "press", {}, X(t))
|
|
1614
1619
|
},
|
|
1615
1620
|
scene: {
|
|
1616
1621
|
icon: "mdi:palette",
|
|
1617
1622
|
tone: "var(--tone-accent)",
|
|
1618
1623
|
on: () => !1,
|
|
1619
1624
|
state: () => "Tap to run",
|
|
1620
|
-
tap: (e, t) => e("scene", "turn_on", {},
|
|
1625
|
+
tap: (e, t) => e("scene", "turn_on", {}, X(t))
|
|
1621
1626
|
},
|
|
1622
1627
|
script: {
|
|
1623
1628
|
icon: "mdi:script-text",
|
|
1624
1629
|
tone: "var(--tone-accent)",
|
|
1625
1630
|
on: (e) => e.state === "on",
|
|
1626
1631
|
state: (e) => e.state === "on" ? "Running" : "Tap to run",
|
|
1627
|
-
tap: (e, t) => e("script", "turn_on", {},
|
|
1632
|
+
tap: (e, t) => e("script", "turn_on", {}, X(t))
|
|
1628
1633
|
}
|
|
1629
|
-
},
|
|
1634
|
+
}, vi = {
|
|
1630
1635
|
garage: "mdi:garage",
|
|
1631
1636
|
gate: "mdi:gate",
|
|
1632
1637
|
door: "mdi:door",
|
|
1633
1638
|
curtain: "mdi:curtains",
|
|
1634
1639
|
shutter: "mdi:window-shutter",
|
|
1635
1640
|
awning: "mdi:awning"
|
|
1636
|
-
},
|
|
1641
|
+
}, yi = {
|
|
1637
1642
|
door: ["Open", "Closed"],
|
|
1638
1643
|
window: ["Open", "Closed"],
|
|
1639
1644
|
garage_door: ["Open", "Closed"],
|
|
@@ -1647,44 +1652,44 @@ var pi = (e) => typeof e == "number" ? Math.round(e) : void 0, mi = (e) => e.cha
|
|
|
1647
1652
|
battery: ["Low", "Normal"],
|
|
1648
1653
|
connectivity: ["Connected", "Disconnected"]
|
|
1649
1654
|
};
|
|
1650
|
-
function
|
|
1655
|
+
function bi(e) {
|
|
1651
1656
|
let t = Date.parse(e);
|
|
1652
1657
|
return Number.isNaN(t) ? "Never pressed" : new Date(t).toLocaleTimeString([], {
|
|
1653
1658
|
hour: "2-digit",
|
|
1654
1659
|
minute: "2-digit"
|
|
1655
1660
|
});
|
|
1656
1661
|
}
|
|
1657
|
-
var
|
|
1662
|
+
var xi = {
|
|
1658
1663
|
icon: "mdi:circle-medium",
|
|
1659
1664
|
tone: "var(--tone-neutral)",
|
|
1660
1665
|
on: (e) => e.state === "on",
|
|
1661
|
-
state: (e) =>
|
|
1666
|
+
state: (e) => gi(e.state)
|
|
1662
1667
|
};
|
|
1663
|
-
function
|
|
1668
|
+
function Si(e, t) {
|
|
1664
1669
|
if (!t || e.length <= t.length || !e.toLowerCase().startsWith(t.toLowerCase())) return e;
|
|
1665
1670
|
let n = e.slice(t.length).trim();
|
|
1666
1671
|
return n ? n.charAt(0).toUpperCase() + n.slice(1) : e;
|
|
1667
1672
|
}
|
|
1668
|
-
function
|
|
1669
|
-
return !!
|
|
1673
|
+
function Ci(e) {
|
|
1674
|
+
return !!_i[e]?.tap || !!_i[e]?.setLevel;
|
|
1670
1675
|
}
|
|
1671
|
-
function
|
|
1672
|
-
let t =
|
|
1673
|
-
return
|
|
1676
|
+
function wi(e) {
|
|
1677
|
+
let t = C(() => e.entityId), { callService: n } = en(), [r, i] = k();
|
|
1678
|
+
return D(() => {
|
|
1674
1679
|
t(), i(void 0);
|
|
1675
|
-
}),
|
|
1680
|
+
}), P(E, {
|
|
1676
1681
|
get when() {
|
|
1677
1682
|
return t();
|
|
1678
1683
|
},
|
|
1679
1684
|
children: (t) => {
|
|
1680
|
-
let a = () =>
|
|
1681
|
-
return
|
|
1685
|
+
let a = () => _i[t().domain] ?? xi, o = () => r() ?? a().level?.(t()), s = () => a().setLevel;
|
|
1686
|
+
return P(pi, {
|
|
1682
1687
|
get icon() {
|
|
1683
1688
|
let n = a().icon;
|
|
1684
|
-
return typeof n == "function" ? e.icon ?? n(t()) : e.icon ?? t().icon ??
|
|
1689
|
+
return typeof n == "function" ? e.icon ?? n(t()) : e.icon ?? t().icon ?? vi[t().domain === "cover" ? t().deviceClass ?? "" : ""] ?? n;
|
|
1685
1690
|
},
|
|
1686
1691
|
get name() {
|
|
1687
|
-
return e.name ??
|
|
1692
|
+
return e.name ?? Si(t().friendlyName ?? t().id, e.within);
|
|
1688
1693
|
},
|
|
1689
1694
|
get state() {
|
|
1690
1695
|
return a().state(t());
|
|
@@ -1698,7 +1703,7 @@ function Si(e) {
|
|
|
1698
1703
|
return a().on(t());
|
|
1699
1704
|
},
|
|
1700
1705
|
get slide() {
|
|
1701
|
-
return
|
|
1706
|
+
return L(() => !!(s() && o() !== void 0))() ? {
|
|
1702
1707
|
value: o() ?? 0,
|
|
1703
1708
|
onChange: i,
|
|
1704
1709
|
onCommit: (e) => s()?.(n, t(), e)
|
|
@@ -1716,8 +1721,8 @@ function Si(e) {
|
|
|
1716
1721
|
}
|
|
1717
1722
|
//#endregion
|
|
1718
1723
|
//#region src/framework/dialogs/debug-view.tsx
|
|
1719
|
-
var
|
|
1720
|
-
function
|
|
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\">");
|
|
1725
|
+
function Ai(e, t, n) {
|
|
1721
1726
|
return {
|
|
1722
1727
|
widgetConfig: e,
|
|
1723
1728
|
entities: t.map((e) => ({
|
|
@@ -1734,18 +1739,18 @@ function Oi(e, t, n) {
|
|
|
1734
1739
|
...n
|
|
1735
1740
|
};
|
|
1736
1741
|
}
|
|
1737
|
-
var
|
|
1742
|
+
var ji = (e) => JSON.stringify(e, null, 2), Mi = {
|
|
1738
1743
|
idle: "lucide:copy",
|
|
1739
1744
|
copied: "lucide:check",
|
|
1740
1745
|
failed: "lucide:triangle-alert"
|
|
1741
|
-
},
|
|
1746
|
+
}, Ni = {
|
|
1742
1747
|
idle: "text-muted-foreground",
|
|
1743
1748
|
copied: "text-success",
|
|
1744
1749
|
failed: "text-destructive"
|
|
1745
1750
|
};
|
|
1746
|
-
function
|
|
1747
|
-
let { state: t, copy: n } =
|
|
1748
|
-
return
|
|
1751
|
+
function Pi(e) {
|
|
1752
|
+
let { state: t, copy: n } = Or();
|
|
1753
|
+
return P(Te, {
|
|
1749
1754
|
variant: "ghost",
|
|
1750
1755
|
size: "icon",
|
|
1751
1756
|
class: "size-8",
|
|
@@ -1754,70 +1759,70 @@ function Mi(e) {
|
|
|
1754
1759
|
},
|
|
1755
1760
|
onClick: () => void n(e.text()),
|
|
1756
1761
|
get children() {
|
|
1757
|
-
return
|
|
1762
|
+
return P(U, {
|
|
1758
1763
|
get icon() {
|
|
1759
|
-
return
|
|
1764
|
+
return Mi[t()];
|
|
1760
1765
|
},
|
|
1761
1766
|
width: 16,
|
|
1762
1767
|
height: 16,
|
|
1763
1768
|
get class() {
|
|
1764
|
-
return
|
|
1769
|
+
return Ni[t()];
|
|
1765
1770
|
}
|
|
1766
1771
|
});
|
|
1767
1772
|
}
|
|
1768
1773
|
});
|
|
1769
1774
|
}
|
|
1770
|
-
function
|
|
1775
|
+
function Fi(e) {
|
|
1771
1776
|
let t = e.replace(/([a-z\d])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ");
|
|
1772
1777
|
return t.charAt(0).toUpperCase() + t.slice(1).toLowerCase();
|
|
1773
1778
|
}
|
|
1774
|
-
var
|
|
1775
|
-
function
|
|
1779
|
+
var Ii = (e) => e === null || typeof e != "object" && typeof e != "function";
|
|
1780
|
+
function Li(e) {
|
|
1776
1781
|
return e == null ? "None" : String(e);
|
|
1777
1782
|
}
|
|
1778
|
-
function
|
|
1783
|
+
function Ri(e) {
|
|
1779
1784
|
return Array.isArray(e) ? e.length : typeof e == "object" && e ? Object.keys(e).length : 0;
|
|
1780
1785
|
}
|
|
1781
|
-
function
|
|
1786
|
+
function zi(e) {
|
|
1782
1787
|
let t = new Date(e);
|
|
1783
1788
|
return Number.isNaN(t.getTime()) ? e : t.toLocaleString();
|
|
1784
1789
|
}
|
|
1785
|
-
function
|
|
1786
|
-
return
|
|
1790
|
+
function Bi(e) {
|
|
1791
|
+
return P(mt, {
|
|
1787
1792
|
class: "overflow-hidden p-0",
|
|
1788
1793
|
get children() {
|
|
1789
|
-
var t =
|
|
1790
|
-
return
|
|
1794
|
+
var t = Ti();
|
|
1795
|
+
return I(t, () => ji(e.value)), t;
|
|
1791
1796
|
}
|
|
1792
1797
|
});
|
|
1793
1798
|
}
|
|
1794
|
-
function
|
|
1795
|
-
return
|
|
1799
|
+
function Vi(e) {
|
|
1800
|
+
return P(ve, {
|
|
1796
1801
|
collapsible: !0,
|
|
1797
1802
|
class: "border-border/50 border-t",
|
|
1798
1803
|
get children() {
|
|
1799
|
-
return
|
|
1804
|
+
return P(be, {
|
|
1800
1805
|
get value() {
|
|
1801
1806
|
return e.label;
|
|
1802
1807
|
},
|
|
1803
1808
|
get children() {
|
|
1804
|
-
return [
|
|
1809
|
+
return [P(xe, {
|
|
1805
1810
|
class: "text-muted-foreground py-3 text-xs",
|
|
1806
1811
|
get children() {
|
|
1807
|
-
var t =
|
|
1808
|
-
return
|
|
1812
|
+
var t = Ei();
|
|
1813
|
+
return I(t, () => e.label, null), I(t, P(E, {
|
|
1809
1814
|
get when() {
|
|
1810
1815
|
return e.count !== void 0;
|
|
1811
1816
|
},
|
|
1812
1817
|
get children() {
|
|
1813
|
-
return
|
|
1818
|
+
return P(Re, { get children() {
|
|
1814
1819
|
return e.count;
|
|
1815
1820
|
} });
|
|
1816
1821
|
}
|
|
1817
1822
|
}), null), t;
|
|
1818
1823
|
}
|
|
1819
|
-
}),
|
|
1820
|
-
return
|
|
1824
|
+
}), P(ye, { get children() {
|
|
1825
|
+
return P(Bi, { get value() {
|
|
1821
1826
|
return e.value;
|
|
1822
1827
|
} });
|
|
1823
1828
|
} })];
|
|
@@ -1826,77 +1831,77 @@ function zi(e) {
|
|
|
1826
1831
|
}
|
|
1827
1832
|
});
|
|
1828
1833
|
}
|
|
1829
|
-
function
|
|
1834
|
+
function Hi(e) {
|
|
1830
1835
|
return (() => {
|
|
1831
|
-
var t =
|
|
1832
|
-
return
|
|
1836
|
+
var t = Di(), n = t.firstChild, r = n.firstChild, i = n.nextSibling;
|
|
1837
|
+
return I(n, P(ft, {
|
|
1833
1838
|
get icon() {
|
|
1834
1839
|
return e.icon;
|
|
1835
1840
|
},
|
|
1836
1841
|
size: "sm"
|
|
1837
|
-
}), r),
|
|
1842
|
+
}), r), I(r, P(Ge, {
|
|
1838
1843
|
class: "truncate",
|
|
1839
1844
|
get children() {
|
|
1840
1845
|
return e.title;
|
|
1841
1846
|
}
|
|
1842
|
-
}), null),
|
|
1847
|
+
}), null), I(r, P(E, {
|
|
1843
1848
|
get when() {
|
|
1844
1849
|
return e.subtitle;
|
|
1845
1850
|
},
|
|
1846
|
-
children: (e) =>
|
|
1851
|
+
children: (e) => P(pt, {
|
|
1847
1852
|
class: "truncate font-mono",
|
|
1848
1853
|
get children() {
|
|
1849
1854
|
return e();
|
|
1850
1855
|
}
|
|
1851
1856
|
})
|
|
1852
|
-
}), null),
|
|
1857
|
+
}), null), I(n, () => e.badge, null), I(n, P(Pi, {
|
|
1853
1858
|
get label() {
|
|
1854
1859
|
return `Copy ${e.title}`;
|
|
1855
1860
|
},
|
|
1856
|
-
text: () =>
|
|
1857
|
-
}), null),
|
|
1861
|
+
text: () => ji(e.source)
|
|
1862
|
+
}), null), I(i, () => e.children), t;
|
|
1858
1863
|
})();
|
|
1859
1864
|
}
|
|
1860
|
-
function
|
|
1861
|
-
let t =
|
|
1862
|
-
return
|
|
1865
|
+
function Ui(e) {
|
|
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, {
|
|
1863
1868
|
get when() {
|
|
1864
1869
|
return t().length > 0;
|
|
1865
1870
|
},
|
|
1866
1871
|
get fallback() {
|
|
1867
|
-
return
|
|
1872
|
+
return P(pt, { children: "Nothing set" });
|
|
1868
1873
|
},
|
|
1869
1874
|
get children() {
|
|
1870
|
-
return [
|
|
1875
|
+
return [P(E, {
|
|
1871
1876
|
get when() {
|
|
1872
1877
|
return n().length > 0;
|
|
1873
1878
|
},
|
|
1874
1879
|
get children() {
|
|
1875
|
-
var e =
|
|
1876
|
-
return
|
|
1880
|
+
var e = Oi();
|
|
1881
|
+
return I(e, P(T, {
|
|
1877
1882
|
get each() {
|
|
1878
1883
|
return n();
|
|
1879
1884
|
},
|
|
1880
|
-
children: ([e, t]) =>
|
|
1885
|
+
children: ([e, t]) => P(Ue, {
|
|
1881
1886
|
get label() {
|
|
1882
|
-
return
|
|
1887
|
+
return Fi(e);
|
|
1883
1888
|
},
|
|
1884
1889
|
get children() {
|
|
1885
|
-
return
|
|
1890
|
+
return Li(t);
|
|
1886
1891
|
}
|
|
1887
1892
|
})
|
|
1888
1893
|
})), e;
|
|
1889
1894
|
}
|
|
1890
|
-
}),
|
|
1895
|
+
}), P(T, {
|
|
1891
1896
|
get each() {
|
|
1892
1897
|
return r();
|
|
1893
1898
|
},
|
|
1894
|
-
children: ([e, t]) =>
|
|
1899
|
+
children: ([e, t]) => P(Vi, {
|
|
1895
1900
|
get label() {
|
|
1896
|
-
return
|
|
1901
|
+
return Fi(e);
|
|
1897
1902
|
},
|
|
1898
1903
|
get count() {
|
|
1899
|
-
return
|
|
1904
|
+
return Ri(t);
|
|
1900
1905
|
},
|
|
1901
1906
|
value: t
|
|
1902
1907
|
})
|
|
@@ -1904,9 +1909,9 @@ function Vi(e) {
|
|
|
1904
1909
|
}
|
|
1905
1910
|
});
|
|
1906
1911
|
}
|
|
1907
|
-
function
|
|
1912
|
+
function Wi(e) {
|
|
1908
1913
|
let t = () => e.entity.attributes ?? {};
|
|
1909
|
-
return
|
|
1914
|
+
return P(Hi, {
|
|
1910
1915
|
icon: "lucide:activity",
|
|
1911
1916
|
get title() {
|
|
1912
1917
|
return e.entity.friendly_name ?? e.entity.entity_id;
|
|
@@ -1915,7 +1920,7 @@ function Hi(e) {
|
|
|
1915
1920
|
return e.entity.entity_id;
|
|
1916
1921
|
},
|
|
1917
1922
|
get badge() {
|
|
1918
|
-
return
|
|
1923
|
+
return P(Ce, { get children() {
|
|
1919
1924
|
return e.entity.state;
|
|
1920
1925
|
} });
|
|
1921
1926
|
},
|
|
@@ -1924,52 +1929,52 @@ function Hi(e) {
|
|
|
1924
1929
|
},
|
|
1925
1930
|
get children() {
|
|
1926
1931
|
return [(() => {
|
|
1927
|
-
var t =
|
|
1928
|
-
return
|
|
1932
|
+
var t = Oi();
|
|
1933
|
+
return I(t, P(Ue, {
|
|
1929
1934
|
label: "Domain",
|
|
1930
1935
|
get children() {
|
|
1931
1936
|
return e.entity.domain;
|
|
1932
1937
|
}
|
|
1933
|
-
}), null),
|
|
1938
|
+
}), null), I(t, P(E, {
|
|
1934
1939
|
get when() {
|
|
1935
1940
|
return e.entity.device_class;
|
|
1936
1941
|
},
|
|
1937
|
-
children: (e) =>
|
|
1942
|
+
children: (e) => P(Ue, {
|
|
1938
1943
|
label: "Device class",
|
|
1939
1944
|
get children() {
|
|
1940
1945
|
return e();
|
|
1941
1946
|
}
|
|
1942
1947
|
})
|
|
1943
|
-
}), null),
|
|
1948
|
+
}), null), I(t, P(E, {
|
|
1944
1949
|
get when() {
|
|
1945
1950
|
return e.entity.area_id;
|
|
1946
1951
|
},
|
|
1947
|
-
children: (e) =>
|
|
1952
|
+
children: (e) => P(Ue, {
|
|
1948
1953
|
label: "Area",
|
|
1949
1954
|
get children() {
|
|
1950
1955
|
return e();
|
|
1951
1956
|
}
|
|
1952
1957
|
})
|
|
1953
|
-
}), null),
|
|
1958
|
+
}), null), I(t, P(Ue, {
|
|
1954
1959
|
label: "Changed",
|
|
1955
1960
|
get children() {
|
|
1956
|
-
return
|
|
1961
|
+
return zi(e.entity.last_changed);
|
|
1957
1962
|
}
|
|
1958
|
-
}), null),
|
|
1963
|
+
}), null), I(t, P(Ue, {
|
|
1959
1964
|
label: "Updated",
|
|
1960
1965
|
get children() {
|
|
1961
|
-
return
|
|
1966
|
+
return zi(e.entity.last_updated);
|
|
1962
1967
|
}
|
|
1963
1968
|
}), null), t;
|
|
1964
|
-
})(),
|
|
1969
|
+
})(), P(E, {
|
|
1965
1970
|
get when() {
|
|
1966
|
-
return
|
|
1971
|
+
return Ri(t()) > 0;
|
|
1967
1972
|
},
|
|
1968
1973
|
get children() {
|
|
1969
|
-
return
|
|
1974
|
+
return P(Vi, {
|
|
1970
1975
|
label: "Attributes",
|
|
1971
1976
|
get count() {
|
|
1972
|
-
return
|
|
1977
|
+
return Ri(t());
|
|
1973
1978
|
},
|
|
1974
1979
|
get value() {
|
|
1975
1980
|
return t();
|
|
@@ -1980,42 +1985,42 @@ function Hi(e) {
|
|
|
1980
1985
|
}
|
|
1981
1986
|
});
|
|
1982
1987
|
}
|
|
1983
|
-
function
|
|
1984
|
-
let t =
|
|
1985
|
-
return
|
|
1988
|
+
function Gi(e) {
|
|
1989
|
+
let t = O(() => Object.keys(e.data).filter((e) => e !== "widgetConfig" && e !== "entities"));
|
|
1990
|
+
return P(We, { get children() {
|
|
1986
1991
|
return [
|
|
1987
|
-
|
|
1992
|
+
P(Hi, {
|
|
1988
1993
|
icon: "lucide:sliders-horizontal",
|
|
1989
1994
|
title: "Configuration",
|
|
1990
1995
|
get source() {
|
|
1991
1996
|
return e.data.widgetConfig;
|
|
1992
1997
|
},
|
|
1993
1998
|
get children() {
|
|
1994
|
-
return
|
|
1999
|
+
return P(Ui, { get record() {
|
|
1995
2000
|
return e.data.widgetConfig;
|
|
1996
2001
|
} });
|
|
1997
2002
|
}
|
|
1998
2003
|
}),
|
|
1999
|
-
|
|
2004
|
+
P(T, {
|
|
2000
2005
|
get each() {
|
|
2001
2006
|
return e.data.entities;
|
|
2002
2007
|
},
|
|
2003
|
-
children: (e) =>
|
|
2008
|
+
children: (e) => P(Wi, { entity: e })
|
|
2004
2009
|
}),
|
|
2005
|
-
|
|
2010
|
+
P(T, {
|
|
2006
2011
|
get each() {
|
|
2007
2012
|
return t();
|
|
2008
2013
|
},
|
|
2009
|
-
children: (t) =>
|
|
2014
|
+
children: (t) => P(Hi, {
|
|
2010
2015
|
icon: "lucide:braces",
|
|
2011
2016
|
get title() {
|
|
2012
|
-
return
|
|
2017
|
+
return Fi(t);
|
|
2013
2018
|
},
|
|
2014
2019
|
get source() {
|
|
2015
2020
|
return e.data[t];
|
|
2016
2021
|
},
|
|
2017
2022
|
get children() {
|
|
2018
|
-
return
|
|
2023
|
+
return P(Bi, { get value() {
|
|
2019
2024
|
return e.data[t];
|
|
2020
2025
|
} });
|
|
2021
2026
|
}
|
|
@@ -2024,52 +2029,52 @@ function Ui(e) {
|
|
|
2024
2029
|
];
|
|
2025
2030
|
} });
|
|
2026
2031
|
}
|
|
2027
|
-
function
|
|
2032
|
+
function Ki(e) {
|
|
2028
2033
|
if (typeof e != "object" || !e) return;
|
|
2029
2034
|
let t = e;
|
|
2030
2035
|
return Array.isArray(t.entities) && typeof t.widgetConfig == "object" ? t : void 0;
|
|
2031
2036
|
}
|
|
2032
|
-
function
|
|
2033
|
-
let t =
|
|
2034
|
-
return
|
|
2037
|
+
function qi(e) {
|
|
2038
|
+
let t = O(() => Ki(e.data));
|
|
2039
|
+
return P(E, {
|
|
2035
2040
|
get when() {
|
|
2036
2041
|
return e.data !== void 0;
|
|
2037
2042
|
},
|
|
2038
2043
|
get fallback() {
|
|
2039
|
-
return
|
|
2040
|
-
return
|
|
2041
|
-
return [
|
|
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." })];
|
|
2042
2047
|
} });
|
|
2043
2048
|
} });
|
|
2044
2049
|
},
|
|
2045
2050
|
get children() {
|
|
2046
|
-
return
|
|
2051
|
+
return P(E, {
|
|
2047
2052
|
get when() {
|
|
2048
2053
|
return t();
|
|
2049
2054
|
},
|
|
2050
2055
|
get fallback() {
|
|
2051
|
-
return
|
|
2056
|
+
return P(Hi, {
|
|
2052
2057
|
icon: "lucide:braces",
|
|
2053
2058
|
title: "Debug data",
|
|
2054
2059
|
get source() {
|
|
2055
2060
|
return e.data;
|
|
2056
2061
|
},
|
|
2057
2062
|
get children() {
|
|
2058
|
-
return
|
|
2063
|
+
return P(E, {
|
|
2059
2064
|
get when() {
|
|
2060
2065
|
return typeof e.data == "string";
|
|
2061
2066
|
},
|
|
2062
2067
|
get fallback() {
|
|
2063
|
-
return
|
|
2068
|
+
return P(Bi, { get value() {
|
|
2064
2069
|
return e.data;
|
|
2065
2070
|
} });
|
|
2066
2071
|
},
|
|
2067
2072
|
get children() {
|
|
2068
|
-
return
|
|
2073
|
+
return P(mt, {
|
|
2069
2074
|
class: "overflow-hidden p-0",
|
|
2070
2075
|
get children() {
|
|
2071
|
-
var t =
|
|
2072
|
-
return
|
|
2076
|
+
var t = ki();
|
|
2077
|
+
return I(t, () => e.data), t;
|
|
2073
2078
|
}
|
|
2074
2079
|
});
|
|
2075
2080
|
}
|
|
@@ -2077,7 +2082,7 @@ function Gi(e) {
|
|
|
2077
2082
|
}
|
|
2078
2083
|
});
|
|
2079
2084
|
},
|
|
2080
|
-
children: (e) =>
|
|
2085
|
+
children: (e) => P(Gi, { get data() {
|
|
2081
2086
|
return e();
|
|
2082
2087
|
} })
|
|
2083
2088
|
});
|
|
@@ -2086,21 +2091,21 @@ function Gi(e) {
|
|
|
2086
2091
|
}
|
|
2087
2092
|
//#endregion
|
|
2088
2093
|
//#region src/framework/dialogs/validate-config.ts
|
|
2089
|
-
function
|
|
2094
|
+
function Ji(e) {
|
|
2090
2095
|
let t = "";
|
|
2091
2096
|
for (let n of e) t += typeof n == "number" ? `[${n}]` : t ? `.${String(n)}` : String(n);
|
|
2092
2097
|
return t;
|
|
2093
2098
|
}
|
|
2094
|
-
function
|
|
2099
|
+
function Yi(e, t) {
|
|
2095
2100
|
let n = e.safeParse(t);
|
|
2096
2101
|
return n.success ? null : n.error.issues.map((e) => {
|
|
2097
|
-
let t =
|
|
2102
|
+
let t = Ji(e.path);
|
|
2098
2103
|
return t ? `${t}: ${e.message}` : e.message;
|
|
2099
2104
|
});
|
|
2100
2105
|
}
|
|
2101
2106
|
//#endregion
|
|
2102
2107
|
//#region src/framework/dialogs/WidgetDialog.tsx
|
|
2103
|
-
var
|
|
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 = {
|
|
2104
2109
|
sm: "sm",
|
|
2105
2110
|
md: "md",
|
|
2106
2111
|
lg: "lg",
|
|
@@ -2109,33 +2114,33 @@ var Ji = /*#__PURE__*/ B("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 f
|
|
|
2109
2114
|
"2xl": "xl",
|
|
2110
2115
|
"3xl": "xl",
|
|
2111
2116
|
"4xl": "full"
|
|
2112
|
-
},
|
|
2117
|
+
}, oa = {
|
|
2113
2118
|
idle: "Copy all",
|
|
2114
2119
|
copied: "Copied",
|
|
2115
2120
|
failed: "Copy failed"
|
|
2116
2121
|
};
|
|
2117
|
-
function
|
|
2118
|
-
let [t] =
|
|
2119
|
-
|
|
2122
|
+
function sa(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) => {
|
|
2120
2125
|
e && i({ ...e });
|
|
2121
|
-
})),
|
|
2122
|
-
e && o(
|
|
2126
|
+
})), D(me(() => t.configSchema, (e) => {
|
|
2127
|
+
e && o(ia(e));
|
|
2123
2128
|
}));
|
|
2124
2129
|
let l = () => n() && JSON.stringify(r()) !== JSON.stringify(t.config), u = (e) => {
|
|
2125
2130
|
!e && t.config && (i({ ...t.config }), c([])), t.onOpenChange(e);
|
|
2126
2131
|
}, d = () => {
|
|
2127
2132
|
let e = t.configSchema;
|
|
2128
2133
|
if (e) {
|
|
2129
|
-
let t =
|
|
2134
|
+
let t = Yi(e, r());
|
|
2130
2135
|
if (t) {
|
|
2131
2136
|
c(t);
|
|
2132
2137
|
return;
|
|
2133
2138
|
}
|
|
2134
2139
|
}
|
|
2135
2140
|
c([]), t.onConfigSave?.(r());
|
|
2136
|
-
}, [f, p] =
|
|
2141
|
+
}, [f, p] = k(t.defaultTab ?? "controls"), m = () => t.activeTab ?? f(), h = (e) => {
|
|
2137
2142
|
t.onActiveTabChange ? t.onActiveTabChange(e) : p(e);
|
|
2138
|
-
},
|
|
2143
|
+
}, g = () => aa[t.maxWidth ?? "xl"], _ = () => {
|
|
2139
2144
|
if (t.tabs) return t.tabs.map((e) => ({
|
|
2140
2145
|
...e,
|
|
2141
2146
|
icon: () => e.icon,
|
|
@@ -2145,10 +2150,10 @@ function aa(e) {
|
|
|
2145
2150
|
return e.push({
|
|
2146
2151
|
id: "edit",
|
|
2147
2152
|
label: "Edit",
|
|
2148
|
-
icon: () =>
|
|
2153
|
+
icon: () => Xi(),
|
|
2149
2154
|
content: () => t.editContent ?? (() => {
|
|
2150
2155
|
let e = t.SchemaForm, o = n() ? a() : void 0;
|
|
2151
|
-
return !o || !e ?
|
|
2156
|
+
return !o || !e ? Zi() : P(e, {
|
|
2152
2157
|
schema: o,
|
|
2153
2158
|
get data() {
|
|
2154
2159
|
return r();
|
|
@@ -2162,86 +2167,86 @@ function aa(e) {
|
|
|
2162
2167
|
}), e.push({
|
|
2163
2168
|
id: "controls",
|
|
2164
2169
|
label: "Controls",
|
|
2165
|
-
icon: () =>
|
|
2166
|
-
content: () => t.controlsContent ??
|
|
2167
|
-
return
|
|
2168
|
-
return [
|
|
2170
|
+
icon: () => Qi(),
|
|
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." })];
|
|
2169
2174
|
} });
|
|
2170
2175
|
} })
|
|
2171
2176
|
}), e.push({
|
|
2172
2177
|
id: "debug",
|
|
2173
2178
|
label: "Debug",
|
|
2174
|
-
icon: () =>
|
|
2175
|
-
content: () => t.debugContent ??
|
|
2179
|
+
icon: () => $i(),
|
|
2180
|
+
content: () => t.debugContent ?? P(qi, { get data() {
|
|
2176
2181
|
return t.debugData;
|
|
2177
2182
|
} })
|
|
2178
2183
|
}), e;
|
|
2179
|
-
},
|
|
2180
|
-
|
|
2181
|
-
let
|
|
2182
|
-
icon: t.tile?.icon ??
|
|
2183
|
-
tone: t.tile?.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(),
|
|
2184
2189
|
backdrop: t.tile?.backdrop
|
|
2185
|
-
}),
|
|
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 = () => {
|
|
2186
2191
|
if (t.debugData === void 0) return;
|
|
2187
2192
|
let e = typeof t.debugData == "string" ? t.debugData : JSON.stringify(t.debugData, null, 2);
|
|
2188
|
-
|
|
2189
|
-
},
|
|
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([
|
|
2190
2195
|
() => t.open,
|
|
2191
2196
|
a,
|
|
2192
2197
|
() => t.config,
|
|
2193
2198
|
() => t.tabs
|
|
2194
|
-
], () =>
|
|
2195
|
-
let e =
|
|
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();
|
|
2196
2201
|
return e.some((e) => e.id === n) ? n : e[0]?.id ?? n;
|
|
2197
|
-
},
|
|
2198
|
-
return
|
|
2202
|
+
}, ve = () => H() === "edit" && (z() || t.onDelete) || H() === "debug" && t.debugData !== void 0;
|
|
2203
|
+
return P(re, {
|
|
2199
2204
|
get open() {
|
|
2200
2205
|
return t.open;
|
|
2201
2206
|
},
|
|
2202
|
-
onOpenChange: (e) =>
|
|
2207
|
+
onOpenChange: (e) => N(e),
|
|
2203
2208
|
get children() {
|
|
2204
|
-
return
|
|
2209
|
+
return P(E, {
|
|
2205
2210
|
get when() {
|
|
2206
|
-
return !
|
|
2211
|
+
return !S();
|
|
2207
2212
|
},
|
|
2208
2213
|
get fallback() {
|
|
2209
|
-
return
|
|
2214
|
+
return P(ie, {
|
|
2210
2215
|
size: "sm",
|
|
2211
2216
|
get ariaLabel() {
|
|
2212
2217
|
return t.title;
|
|
2213
2218
|
},
|
|
2214
2219
|
get anchor() {
|
|
2215
|
-
return
|
|
2220
|
+
return L(() => !!w())() ? C() : void 0;
|
|
2216
2221
|
},
|
|
2217
2222
|
class: "glasshome-sheet-surface",
|
|
2218
2223
|
get style() {
|
|
2219
|
-
return
|
|
2220
|
-
"--glass-tone":
|
|
2221
|
-
"--widget-color":
|
|
2224
|
+
return L(() => !!b().tone)() ? {
|
|
2225
|
+
"--glass-tone": b().tone,
|
|
2226
|
+
"--widget-color": b().tone
|
|
2222
2227
|
} : void 0;
|
|
2223
2228
|
},
|
|
2224
2229
|
get children() {
|
|
2225
2230
|
return [
|
|
2226
|
-
|
|
2231
|
+
P(E, {
|
|
2227
2232
|
get when() {
|
|
2228
|
-
return
|
|
2233
|
+
return b().backdrop;
|
|
2229
2234
|
},
|
|
2230
2235
|
children: (e) => (() => {
|
|
2231
|
-
var t =
|
|
2232
|
-
return
|
|
2236
|
+
var t = ta(), n = t.firstChild;
|
|
2237
|
+
return F(() => R(n, "src", e())), t;
|
|
2233
2238
|
})()
|
|
2234
2239
|
}),
|
|
2235
|
-
|
|
2240
|
+
P(ae, {
|
|
2236
2241
|
class: "items-center",
|
|
2237
2242
|
get media() {
|
|
2238
|
-
return
|
|
2243
|
+
return P(E, {
|
|
2239
2244
|
get when() {
|
|
2240
|
-
return
|
|
2245
|
+
return b().icon;
|
|
2241
2246
|
},
|
|
2242
2247
|
children: (e) => (() => {
|
|
2243
|
-
var t =
|
|
2244
|
-
return
|
|
2248
|
+
var t = na();
|
|
2249
|
+
return I(t, P(U, {
|
|
2245
2250
|
get icon() {
|
|
2246
2251
|
return e();
|
|
2247
2252
|
},
|
|
@@ -2251,7 +2256,7 @@ function aa(e) {
|
|
|
2251
2256
|
});
|
|
2252
2257
|
},
|
|
2253
2258
|
get children() {
|
|
2254
|
-
return
|
|
2259
|
+
return P(oe, {
|
|
2255
2260
|
class: "truncate",
|
|
2256
2261
|
get children() {
|
|
2257
2262
|
return t.title;
|
|
@@ -2259,87 +2264,87 @@ function aa(e) {
|
|
|
2259
2264
|
});
|
|
2260
2265
|
}
|
|
2261
2266
|
}),
|
|
2262
|
-
|
|
2263
|
-
var e =
|
|
2264
|
-
return
|
|
2267
|
+
P(ce, { get children() {
|
|
2268
|
+
var e = ea();
|
|
2269
|
+
return I(e, () => t.sheet?.()), e;
|
|
2265
2270
|
} })
|
|
2266
2271
|
];
|
|
2267
2272
|
}
|
|
2268
2273
|
});
|
|
2269
2274
|
},
|
|
2270
2275
|
get children() {
|
|
2271
|
-
return
|
|
2276
|
+
return P(ie, {
|
|
2272
2277
|
get size() {
|
|
2273
|
-
return
|
|
2278
|
+
return g();
|
|
2274
2279
|
},
|
|
2275
2280
|
get class() {
|
|
2276
2281
|
return t.class;
|
|
2277
2282
|
},
|
|
2278
2283
|
get children() {
|
|
2279
|
-
return
|
|
2284
|
+
return P(ue, {
|
|
2280
2285
|
get value() {
|
|
2281
|
-
return
|
|
2286
|
+
return H();
|
|
2282
2287
|
},
|
|
2283
|
-
onChange:
|
|
2288
|
+
onChange: h,
|
|
2284
2289
|
layout: "split",
|
|
2285
2290
|
get children() {
|
|
2286
2291
|
return [
|
|
2287
|
-
|
|
2292
|
+
P(ae, {
|
|
2288
2293
|
class: "flex-wrap",
|
|
2289
2294
|
get action() {
|
|
2290
|
-
return [
|
|
2295
|
+
return [P(E, {
|
|
2291
2296
|
get when() {
|
|
2292
|
-
return
|
|
2297
|
+
return x() || t.tabs !== void 0;
|
|
2293
2298
|
},
|
|
2294
2299
|
get children() {
|
|
2295
|
-
return
|
|
2300
|
+
return P(de, {
|
|
2296
2301
|
class: "w-auto",
|
|
2297
2302
|
get children() {
|
|
2298
|
-
return
|
|
2303
|
+
return P(T, {
|
|
2299
2304
|
get each() {
|
|
2300
|
-
return
|
|
2305
|
+
return V();
|
|
2301
2306
|
},
|
|
2302
|
-
children: (e) =>
|
|
2307
|
+
children: (e) => P(fe, {
|
|
2303
2308
|
get value() {
|
|
2304
2309
|
return e.id;
|
|
2305
2310
|
},
|
|
2306
2311
|
get children() {
|
|
2307
2312
|
return [(() => {
|
|
2308
|
-
var t =
|
|
2309
|
-
return
|
|
2310
|
-
})(),
|
|
2313
|
+
var t = ra();
|
|
2314
|
+
return I(t, () => e.icon()), t;
|
|
2315
|
+
})(), L(() => e.label)];
|
|
2311
2316
|
}
|
|
2312
2317
|
})
|
|
2313
2318
|
});
|
|
2314
2319
|
}
|
|
2315
2320
|
});
|
|
2316
2321
|
}
|
|
2317
|
-
}),
|
|
2322
|
+
}), L(() => t.headerActions)];
|
|
2318
2323
|
},
|
|
2319
2324
|
get children() {
|
|
2320
|
-
return [
|
|
2325
|
+
return [P(oe, {
|
|
2321
2326
|
class: "truncate",
|
|
2322
2327
|
get children() {
|
|
2323
2328
|
return t.title;
|
|
2324
2329
|
}
|
|
2325
|
-
}),
|
|
2330
|
+
}), P(E, {
|
|
2326
2331
|
get when() {
|
|
2327
2332
|
return t.description;
|
|
2328
2333
|
},
|
|
2329
2334
|
get children() {
|
|
2330
|
-
return
|
|
2335
|
+
return P(se, { get children() {
|
|
2331
2336
|
return t.description;
|
|
2332
2337
|
} });
|
|
2333
2338
|
}
|
|
2334
2339
|
})];
|
|
2335
2340
|
}
|
|
2336
2341
|
}),
|
|
2337
|
-
|
|
2338
|
-
return
|
|
2342
|
+
P(ce, { get children() {
|
|
2343
|
+
return P(T, {
|
|
2339
2344
|
get each() {
|
|
2340
|
-
return
|
|
2345
|
+
return B();
|
|
2341
2346
|
},
|
|
2342
|
-
children: (e) =>
|
|
2347
|
+
children: (e) => P(pe, {
|
|
2343
2348
|
get value() {
|
|
2344
2349
|
return e.id;
|
|
2345
2350
|
},
|
|
@@ -2349,19 +2354,19 @@ function aa(e) {
|
|
|
2349
2354
|
})
|
|
2350
2355
|
});
|
|
2351
2356
|
} }),
|
|
2352
|
-
|
|
2357
|
+
P(E, {
|
|
2353
2358
|
get when() {
|
|
2354
|
-
return
|
|
2359
|
+
return ve();
|
|
2355
2360
|
},
|
|
2356
2361
|
get children() {
|
|
2357
|
-
return
|
|
2362
|
+
return P(le, { get children() {
|
|
2358
2363
|
return [
|
|
2359
|
-
|
|
2364
|
+
P(E, {
|
|
2360
2365
|
get when() {
|
|
2361
|
-
return
|
|
2366
|
+
return L(() => H() === "edit")() && t.onDelete;
|
|
2362
2367
|
},
|
|
2363
2368
|
get children() {
|
|
2364
|
-
return
|
|
2369
|
+
return P(he, {
|
|
2365
2370
|
size: "sm",
|
|
2366
2371
|
variant: "destructive",
|
|
2367
2372
|
onClick: () => t.onDelete?.(),
|
|
@@ -2369,32 +2374,32 @@ function aa(e) {
|
|
|
2369
2374
|
});
|
|
2370
2375
|
}
|
|
2371
2376
|
}),
|
|
2372
|
-
|
|
2377
|
+
P(E, {
|
|
2373
2378
|
get when() {
|
|
2374
|
-
return
|
|
2379
|
+
return L(() => H() === "edit")() && z();
|
|
2375
2380
|
},
|
|
2376
2381
|
get children() {
|
|
2377
|
-
return
|
|
2382
|
+
return P(he, {
|
|
2378
2383
|
size: "sm",
|
|
2379
2384
|
get disabled() {
|
|
2380
|
-
return !
|
|
2385
|
+
return !_e();
|
|
2381
2386
|
},
|
|
2382
|
-
onClick: () =>
|
|
2387
|
+
onClick: () => z()?.(),
|
|
2383
2388
|
children: "Save"
|
|
2384
2389
|
});
|
|
2385
2390
|
}
|
|
2386
2391
|
}),
|
|
2387
|
-
|
|
2392
|
+
P(E, {
|
|
2388
2393
|
get when() {
|
|
2389
|
-
return
|
|
2394
|
+
return L(() => H() === "debug")() && t.debugData !== void 0;
|
|
2390
2395
|
},
|
|
2391
2396
|
get children() {
|
|
2392
|
-
return
|
|
2397
|
+
return P(he, {
|
|
2393
2398
|
size: "sm",
|
|
2394
2399
|
variant: "outline",
|
|
2395
|
-
onClick:
|
|
2400
|
+
onClick: ne,
|
|
2396
2401
|
get children() {
|
|
2397
|
-
return
|
|
2402
|
+
return oa[te.state()];
|
|
2398
2403
|
}
|
|
2399
2404
|
});
|
|
2400
2405
|
}
|
|
@@ -2413,81 +2418,450 @@ function aa(e) {
|
|
|
2413
2418
|
}
|
|
2414
2419
|
});
|
|
2415
2420
|
}
|
|
2416
|
-
function
|
|
2417
|
-
let e = "(max-width: 639px)", [t, n] =
|
|
2418
|
-
return
|
|
2421
|
+
function ca() {
|
|
2422
|
+
let e = "(max-width: 639px)", [t, n] = k(typeof window < "u" && window.matchMedia(e).matches);
|
|
2423
|
+
return he(() => {
|
|
2419
2424
|
let t = window.matchMedia(e), r = () => n(t.matches);
|
|
2420
|
-
t.addEventListener("change", r),
|
|
2425
|
+
t.addEventListener("change", r), A(() => t.removeEventListener("change", r));
|
|
2421
2426
|
}), t;
|
|
2422
2427
|
}
|
|
2423
2428
|
//#endregion
|
|
2424
2429
|
//#region src/framework/hooks/use-widget-dashboard.ts
|
|
2425
|
-
var
|
|
2430
|
+
var la = {
|
|
2426
2431
|
name: "",
|
|
2427
2432
|
icon: "",
|
|
2428
2433
|
areaId: null
|
|
2429
2434
|
};
|
|
2430
|
-
function
|
|
2431
|
-
let e =
|
|
2432
|
-
return () => e?.dashboard?.() ??
|
|
2435
|
+
function ua() {
|
|
2436
|
+
let e = j(W);
|
|
2437
|
+
return () => e?.dashboard?.() ?? la;
|
|
2433
2438
|
}
|
|
2434
2439
|
//#endregion
|
|
2435
2440
|
//#region src/framework/hooks/use-widget-viewer.ts
|
|
2436
|
-
var
|
|
2437
|
-
function
|
|
2438
|
-
let e =
|
|
2439
|
-
return () => e?.viewer?.() ??
|
|
2441
|
+
var da = { name: null };
|
|
2442
|
+
function fa() {
|
|
2443
|
+
let e = j(W);
|
|
2444
|
+
return () => e?.viewer?.() ?? da;
|
|
2445
|
+
}
|
|
2446
|
+
//#endregion
|
|
2447
|
+
//#region node_modules/@glasshome/ui/dist/tokens/index.js
|
|
2448
|
+
var pa = /^oklch\(\s*([+-]?(?:\d+\.?\d*|\.\d+))\s+([+-]?(?:\d+\.?\d*|\.\d+))\s+([+-]?(?:\d+\.?\d*|\.\d+))\s*\)$/i;
|
|
2449
|
+
function ma(e, t, n) {
|
|
2450
|
+
return Math.min(Math.max(e, t), n);
|
|
2451
|
+
}
|
|
2452
|
+
function ha(e) {
|
|
2453
|
+
return String(Number.isInteger(e) ? e : Number(e.toFixed(6)));
|
|
2454
|
+
}
|
|
2455
|
+
function ga(e) {
|
|
2456
|
+
let t = pa.exec(e.trim());
|
|
2457
|
+
return t ? {
|
|
2458
|
+
l: Number(t[1]),
|
|
2459
|
+
c: Number(t[2]),
|
|
2460
|
+
h: Number(t[3])
|
|
2461
|
+
} : null;
|
|
2462
|
+
}
|
|
2463
|
+
function _a(e, t, n) {
|
|
2464
|
+
return `oklch(${ha(e)} ${ha(t)} ${ha(n)})`;
|
|
2465
|
+
}
|
|
2466
|
+
function va(e, t) {
|
|
2467
|
+
let n = ga(e);
|
|
2468
|
+
return n ? _a(ma(n.l + t, 0, 1), n.c, n.h) : e;
|
|
2469
|
+
}
|
|
2470
|
+
function ya(e, t) {
|
|
2471
|
+
let n = ga(e);
|
|
2472
|
+
return n ? _a(ma(t, 0, 1), ma(n.c * .8, 0, .4), n.h) : e;
|
|
2473
|
+
}
|
|
2474
|
+
function ba(e, t) {
|
|
2475
|
+
return {
|
|
2476
|
+
...e,
|
|
2477
|
+
popover: e.card,
|
|
2478
|
+
muted: t === "light" ? va(e.background, -.015) : va(e.background, .1),
|
|
2479
|
+
mutedForeground: t === "light" ? "oklch(0.44 0 0)" : "oklch(0.71 0 0)",
|
|
2480
|
+
input: t === "light" ? va(e.border, .01) : va(e.border, .04),
|
|
2481
|
+
ring: e.accent,
|
|
2482
|
+
destructive: t === "light" ? "oklch(0.54 0.19 23.0704)" : "oklch(0.7106 0.1661 22.2162)"
|
|
2483
|
+
};
|
|
2484
|
+
}
|
|
2485
|
+
function xa(e) {
|
|
2486
|
+
return ba({
|
|
2487
|
+
primary: va(e.primary, .15),
|
|
2488
|
+
accent: va(e.accent, .1),
|
|
2489
|
+
secondary: ya(e.secondary, .14),
|
|
2490
|
+
border: ya(e.border, .26),
|
|
2491
|
+
card: ya(e.card, .17),
|
|
2492
|
+
background: ya(e.background, .12)
|
|
2493
|
+
}, "dark");
|
|
2494
|
+
}
|
|
2495
|
+
var Sa = {
|
|
2496
|
+
edgeWidth: 1,
|
|
2497
|
+
edgeInk: 0,
|
|
2498
|
+
edgeAccent: 0,
|
|
2499
|
+
inkLift: 0
|
|
2500
|
+
}, Ca = {
|
|
2501
|
+
frosted: {
|
|
2502
|
+
blur: 24,
|
|
2503
|
+
clarity: 60,
|
|
2504
|
+
depth: 1,
|
|
2505
|
+
tint: 1,
|
|
2506
|
+
glow: 0,
|
|
2507
|
+
ink: 0,
|
|
2508
|
+
...Sa
|
|
2509
|
+
},
|
|
2510
|
+
frost: {
|
|
2511
|
+
blur: 24,
|
|
2512
|
+
clarity: 60,
|
|
2513
|
+
depth: 1,
|
|
2514
|
+
tint: 1,
|
|
2515
|
+
glow: 0,
|
|
2516
|
+
ink: 0,
|
|
2517
|
+
...Sa,
|
|
2518
|
+
grain: .4
|
|
2519
|
+
},
|
|
2520
|
+
paper: {
|
|
2521
|
+
blur: 0,
|
|
2522
|
+
clarity: 100,
|
|
2523
|
+
depth: .5,
|
|
2524
|
+
tint: .85,
|
|
2525
|
+
glow: 0,
|
|
2526
|
+
ink: 0,
|
|
2527
|
+
...Sa,
|
|
2528
|
+
edgeInk: .3,
|
|
2529
|
+
sheen: 0,
|
|
2530
|
+
edge: .2,
|
|
2531
|
+
shadow: .7
|
|
2532
|
+
},
|
|
2533
|
+
neon: {
|
|
2534
|
+
blur: 9,
|
|
2535
|
+
clarity: 57,
|
|
2536
|
+
depth: .4,
|
|
2537
|
+
tint: .6,
|
|
2538
|
+
edgeWidth: 1,
|
|
2539
|
+
edgeInk: 0,
|
|
2540
|
+
edgeAccent: .35,
|
|
2541
|
+
inkLift: 0,
|
|
2542
|
+
glow: 3,
|
|
2543
|
+
ink: 0,
|
|
2544
|
+
vibrancy: 1.3,
|
|
2545
|
+
edge: .25,
|
|
2546
|
+
sheen: .3,
|
|
2547
|
+
shadow: 1,
|
|
2548
|
+
innerGlow: .35
|
|
2549
|
+
},
|
|
2550
|
+
chalk: {
|
|
2551
|
+
blur: 0,
|
|
2552
|
+
clarity: 100,
|
|
2553
|
+
depth: .3,
|
|
2554
|
+
tint: .7,
|
|
2555
|
+
glow: 0,
|
|
2556
|
+
ink: 1,
|
|
2557
|
+
...Sa,
|
|
2558
|
+
inkLift: 1
|
|
2559
|
+
}
|
|
2560
|
+
}, wa = {
|
|
2561
|
+
v: 1,
|
|
2562
|
+
preset: "frosted"
|
|
2563
|
+
}, Ta = {
|
|
2564
|
+
blur: [0, 48],
|
|
2565
|
+
clarity: [0, 100],
|
|
2566
|
+
depth: [0, 2],
|
|
2567
|
+
tint: [0, 2],
|
|
2568
|
+
glow: [0, 40],
|
|
2569
|
+
ink: [0, 1],
|
|
2570
|
+
vibrancy: [.5, 2],
|
|
2571
|
+
edge: [0, 2],
|
|
2572
|
+
sheen: [0, 2],
|
|
2573
|
+
shadow: [0, 2],
|
|
2574
|
+
inset: [0, 1],
|
|
2575
|
+
lightFrom: [0, 360],
|
|
2576
|
+
darkScale: [0, 1],
|
|
2577
|
+
innerGlow: [0, 1],
|
|
2578
|
+
innerGlowHue: [0, 1],
|
|
2579
|
+
grain: [0, 1],
|
|
2580
|
+
washAngle: [0, 360],
|
|
2581
|
+
relief: [0, 2],
|
|
2582
|
+
fill: [0, .6]
|
|
2583
|
+
}, Ea = {
|
|
2584
|
+
vibrancy: 1,
|
|
2585
|
+
inset: 0,
|
|
2586
|
+
lightFrom: 315,
|
|
2587
|
+
rim: "top",
|
|
2588
|
+
darkScale: 1,
|
|
2589
|
+
glowAt: "outside",
|
|
2590
|
+
innerGlow: 0,
|
|
2591
|
+
innerGlowHue: 1,
|
|
2592
|
+
grain: 0,
|
|
2593
|
+
washStyle: "fade",
|
|
2594
|
+
washAngle: 135,
|
|
2595
|
+
face: "flat",
|
|
2596
|
+
relief: 1,
|
|
2597
|
+
accent: "theme",
|
|
2598
|
+
fill: 0
|
|
2599
|
+
}, Da = Object.keys(Ta);
|
|
2600
|
+
function Oa(e) {
|
|
2601
|
+
let { edgeWidth: t, edgeInk: n, edgeAccent: r, inkLift: i, ...a } = Ca[e.preset], o = {
|
|
2602
|
+
...Ea,
|
|
2603
|
+
...a,
|
|
2604
|
+
...e.dials
|
|
2605
|
+
}, s = {
|
|
2606
|
+
...o,
|
|
2607
|
+
edge: o.edge ?? o.depth,
|
|
2608
|
+
sheen: o.sheen ?? o.depth,
|
|
2609
|
+
shadow: o.shadow ?? o.depth
|
|
2610
|
+
};
|
|
2611
|
+
for (let e of Da) s[e] = ma(s[e], ...Ta[e]);
|
|
2612
|
+
return s;
|
|
2613
|
+
}
|
|
2614
|
+
function Z(e, t) {
|
|
2615
|
+
let n = e === "default" ? "solid" : "static", r = t?.night ? {
|
|
2616
|
+
type: "static",
|
|
2617
|
+
id: t.night
|
|
2618
|
+
} : void 0, { url: i, overlay: a, blur: o, vignette: s } = t ?? {};
|
|
2619
|
+
return {
|
|
2620
|
+
type: n,
|
|
2621
|
+
id: e,
|
|
2622
|
+
themed: t?.themed ?? !0,
|
|
2623
|
+
url: i,
|
|
2624
|
+
dark: r,
|
|
2625
|
+
overlay: a,
|
|
2626
|
+
blur: o,
|
|
2627
|
+
vignette: s
|
|
2628
|
+
};
|
|
2629
|
+
}
|
|
2630
|
+
function Q(e, t, n, r, i, a, o, s) {
|
|
2631
|
+
return {
|
|
2632
|
+
id: e,
|
|
2633
|
+
name: t,
|
|
2634
|
+
radius: n,
|
|
2635
|
+
swatch: r,
|
|
2636
|
+
material: s,
|
|
2637
|
+
colors: {
|
|
2638
|
+
light: ba(i, "light"),
|
|
2639
|
+
dark: o ? ba(o, "dark") : xa(i)
|
|
2640
|
+
},
|
|
2641
|
+
background: a
|
|
2642
|
+
};
|
|
2643
|
+
}
|
|
2644
|
+
Z("glass-house", {
|
|
2645
|
+
url: "/backgrounds/glass-house.webp",
|
|
2646
|
+
themed: !1,
|
|
2647
|
+
night: "glass-house-night",
|
|
2648
|
+
vignette: .65,
|
|
2649
|
+
blur: 4
|
|
2650
|
+
}), Q("sunrise-studio", "Sunrise Studio", 1.1, ["#e8590c", "#f7e3c6"], {
|
|
2651
|
+
primary: "oklch(0.56 0.13 48)",
|
|
2652
|
+
accent: "oklch(0.54 0.11 35)",
|
|
2653
|
+
secondary: "oklch(0.93 0.02 70)",
|
|
2654
|
+
border: "oklch(0.84 0.025 65)",
|
|
2655
|
+
card: "oklch(0.99 0.008 75)",
|
|
2656
|
+
background: "oklch(0.945 0.02 72)"
|
|
2657
|
+
}, Z("studio-geometric", {
|
|
2658
|
+
url: "/backgrounds/studio-geometric.svg",
|
|
2659
|
+
night: "studio-night"
|
|
2660
|
+
}), {
|
|
2661
|
+
primary: "oklch(0.78 0.11 62)",
|
|
2662
|
+
accent: "oklch(0.72 0.1 42)",
|
|
2663
|
+
secondary: "oklch(0.3 0.025 55)",
|
|
2664
|
+
border: "oklch(0.4 0.03 55)",
|
|
2665
|
+
card: "oklch(0.27 0.025 55)",
|
|
2666
|
+
background: "oklch(0.17 0.022 55)"
|
|
2667
|
+
}, {
|
|
2668
|
+
v: 1,
|
|
2669
|
+
preset: "paper"
|
|
2670
|
+
}), Q("forest-zen", "Forest Zen", 1.6, ["#2b8a3e", "#a9c7b0"], {
|
|
2671
|
+
primary: "oklch(0.5 0.12 150)",
|
|
2672
|
+
accent: "oklch(0.5 0.09 170)",
|
|
2673
|
+
secondary: "oklch(0.92 0.025 150)",
|
|
2674
|
+
border: "oklch(0.83 0.02 155)",
|
|
2675
|
+
card: "oklch(0.99 0.008 150)",
|
|
2676
|
+
background: "oklch(0.945 0.015 160)"
|
|
2677
|
+
}, Z("forest-mist", {
|
|
2678
|
+
url: "/backgrounds/forest-mist.webp",
|
|
2679
|
+
themed: !1,
|
|
2680
|
+
night: "forest-mist-night",
|
|
2681
|
+
vignette: .65
|
|
2682
|
+
}), {
|
|
2683
|
+
primary: "oklch(0.74 0.12 150)",
|
|
2684
|
+
accent: "oklch(0.72 0.08 175)",
|
|
2685
|
+
secondary: "oklch(0.24 0.025 160)",
|
|
2686
|
+
border: "oklch(0.33 0.025 160)",
|
|
2687
|
+
card: "oklch(0.25 0.02 160)",
|
|
2688
|
+
background: "oklch(0.15 0.02 165)"
|
|
2689
|
+
}, {
|
|
2690
|
+
v: 1,
|
|
2691
|
+
preset: "frosted",
|
|
2692
|
+
dials: { clarity: 82 }
|
|
2693
|
+
}), Q("lavender-dreams", "Lavender Dreams", 1.8, ["#845ef7", "#fff4e6"], {
|
|
2694
|
+
primary: "oklch(0.5 0.14 305)",
|
|
2695
|
+
accent: "oklch(0.52 0.12 325)",
|
|
2696
|
+
secondary: "oklch(0.93 0.025 300)",
|
|
2697
|
+
border: "oklch(0.85 0.025 300)",
|
|
2698
|
+
card: "oklch(0.975 0.012 90)",
|
|
2699
|
+
background: "oklch(0.97 0.015 85)"
|
|
2700
|
+
}, Z("lavender-ink"), {
|
|
2701
|
+
primary: "oklch(0.76 0.12 305)",
|
|
2702
|
+
accent: "oklch(0.76 0.1 325)",
|
|
2703
|
+
secondary: "oklch(0.26 0.04 310)",
|
|
2704
|
+
border: "oklch(0.36 0.045 310)",
|
|
2705
|
+
card: "oklch(0.23 0.045 312)",
|
|
2706
|
+
background: "oklch(0.18 0.045 315)"
|
|
2707
|
+
}, {
|
|
2708
|
+
v: 1,
|
|
2709
|
+
preset: "paper",
|
|
2710
|
+
dials: { ink: 1 }
|
|
2711
|
+
}), Q("coral-reef", "Liquid Glass", .9, ["#0e1426", "#5fd4e8"], {
|
|
2712
|
+
primary: "oklch(0.5 0.11 225)",
|
|
2713
|
+
accent: "oklch(0.52 0.16 345)",
|
|
2714
|
+
secondary: "oklch(0.93 0.008 260)",
|
|
2715
|
+
border: "oklch(0.85 0.012 260)",
|
|
2716
|
+
card: "oklch(0.99 0.004 260)",
|
|
2717
|
+
background: "oklch(0.94 0.008 260)"
|
|
2718
|
+
}, Z("liquid-glass-day", {
|
|
2719
|
+
url: "/backgrounds/liquid-glass-day.webp",
|
|
2720
|
+
themed: !1,
|
|
2721
|
+
night: "liquid-glass"
|
|
2722
|
+
}), {
|
|
2723
|
+
primary: "oklch(0.78 0.11 210)",
|
|
2724
|
+
accent: "oklch(0.72 0.16 340)",
|
|
2725
|
+
secondary: "oklch(0.25 0.03 265)",
|
|
2726
|
+
border: "oklch(0.36 0.035 265)",
|
|
2727
|
+
card: "oklch(0.24 0.03 265)",
|
|
2728
|
+
background: "oklch(0.13 0.03 268)"
|
|
2729
|
+
}, {
|
|
2730
|
+
v: 1,
|
|
2731
|
+
preset: "frosted"
|
|
2732
|
+
}), Q("monochrome-pro", "Monochrome Pro", 0, ["#e9ecef", "#343a40"], {
|
|
2733
|
+
primary: "oklch(0.32 0.01 260)",
|
|
2734
|
+
accent: "oklch(0.4 0.01 260)",
|
|
2735
|
+
secondary: "oklch(0.93 0.004 260)",
|
|
2736
|
+
border: "oklch(0.8 0.004 260)",
|
|
2737
|
+
card: "oklch(0.99 0.002 260)",
|
|
2738
|
+
background: "oklch(0.955 0.003 260)"
|
|
2739
|
+
}, Z("monochrome-blocks", {
|
|
2740
|
+
url: "/backgrounds/monochrome-blocks.svg",
|
|
2741
|
+
night: "monochrome-night"
|
|
2742
|
+
}), {
|
|
2743
|
+
primary: "oklch(0.9 0.005 260)",
|
|
2744
|
+
accent: "oklch(0.82 0.005 260)",
|
|
2745
|
+
secondary: "oklch(0.24 0.004 260)",
|
|
2746
|
+
border: "oklch(0.36 0.004 260)",
|
|
2747
|
+
card: "oklch(0.2 0.003 260)",
|
|
2748
|
+
background: "oklch(0.14 0.003 260)"
|
|
2749
|
+
}, {
|
|
2750
|
+
v: 1,
|
|
2751
|
+
preset: "paper"
|
|
2752
|
+
}), Q("ocean-breeze", "Tide", 1.5, ["#2b4a8b", "#efe6d2"], {
|
|
2753
|
+
primary: "oklch(0.42 0.12 262)",
|
|
2754
|
+
accent: "oklch(0.48 0.09 225)",
|
|
2755
|
+
secondary: "oklch(0.93 0.015 85)",
|
|
2756
|
+
border: "oklch(0.84 0.02 80)",
|
|
2757
|
+
card: "oklch(0.975 0.012 85)",
|
|
2758
|
+
background: "oklch(0.955 0.018 85)"
|
|
2759
|
+
}, Z("tide-waves"), {
|
|
2760
|
+
primary: "oklch(0.78 0.09 235)",
|
|
2761
|
+
accent: "oklch(0.76 0.08 205)",
|
|
2762
|
+
secondary: "oklch(0.26 0.04 262)",
|
|
2763
|
+
border: "oklch(0.36 0.045 262)",
|
|
2764
|
+
card: "oklch(0.23 0.045 262)",
|
|
2765
|
+
background: "oklch(0.18 0.05 262)"
|
|
2766
|
+
}, {
|
|
2767
|
+
v: 1,
|
|
2768
|
+
preset: "paper"
|
|
2769
|
+
}), Q("chalkboard", "Chalkboard", 1.2, ["#2f4a40", "#f2e6a0"], {
|
|
2770
|
+
primary: "oklch(0.48 0.13 255)",
|
|
2771
|
+
accent: "oklch(0.5 0.1 165)",
|
|
2772
|
+
secondary: "oklch(0.9 0.012 165)",
|
|
2773
|
+
border: "oklch(0.8 0.015 165)",
|
|
2774
|
+
card: "oklch(0.965 0.006 165)",
|
|
2775
|
+
background: "oklch(0.93 0.012 165)"
|
|
2776
|
+
}, Z("chalkboard"), {
|
|
2777
|
+
primary: "oklch(0.88 0.12 95)",
|
|
2778
|
+
accent: "oklch(0.8 0.09 220)",
|
|
2779
|
+
secondary: "oklch(0.29 0.025 165)",
|
|
2780
|
+
border: "oklch(0.43 0.02 165)",
|
|
2781
|
+
card: "oklch(0.28 0.028 165)",
|
|
2782
|
+
background: "oklch(0.22 0.03 165)"
|
|
2783
|
+
}, {
|
|
2784
|
+
v: 1,
|
|
2785
|
+
preset: "chalk"
|
|
2786
|
+
}), Q("retrowave", "Retrowave", 1.2, ["#ff2bd6", "#35e0ff"], {
|
|
2787
|
+
primary: "oklch(0.58 0.24 345)",
|
|
2788
|
+
accent: "oklch(0.6 0.14 215)",
|
|
2789
|
+
secondary: "oklch(0.93 0.03 320)",
|
|
2790
|
+
border: "oklch(0.84 0.04 320)",
|
|
2791
|
+
card: "oklch(0.96 0.02 320)",
|
|
2792
|
+
background: "oklch(0.98 0.015 320)"
|
|
2793
|
+
}, Z("sunset-grid", { url: "/backgrounds/sunset-grid.svg" }), {
|
|
2794
|
+
primary: "oklch(0.68 0.27 345)",
|
|
2795
|
+
accent: "oklch(0.8 0.14 205)",
|
|
2796
|
+
secondary: "oklch(0.2 0.06 290)",
|
|
2797
|
+
border: "oklch(0.34 0.1 300)",
|
|
2798
|
+
card: "oklch(0.19 0.07 290)",
|
|
2799
|
+
background: "oklch(0.13 0.06 285)"
|
|
2800
|
+
}, {
|
|
2801
|
+
v: 1,
|
|
2802
|
+
preset: "neon",
|
|
2803
|
+
dials: { glow: 14 }
|
|
2804
|
+
});
|
|
2805
|
+
//#endregion
|
|
2806
|
+
//#region src/framework/hooks/use-material.ts
|
|
2807
|
+
var ka = {
|
|
2808
|
+
id: wa.preset,
|
|
2809
|
+
terms: Oa(wa)
|
|
2810
|
+
};
|
|
2811
|
+
function Aa() {
|
|
2812
|
+
let e = j(W);
|
|
2813
|
+
return () => e?.material?.() ?? ka;
|
|
2440
2814
|
}
|
|
2441
2815
|
//#endregion
|
|
2442
2816
|
//#region src/framework/hooks/use-intersection-pause.ts
|
|
2443
|
-
function
|
|
2817
|
+
function ja(e) {
|
|
2444
2818
|
if (typeof IntersectionObserver > "u") return () => !1;
|
|
2445
|
-
let [t, n] =
|
|
2819
|
+
let [t, n] = k(!1), r = new IntersectionObserver((e) => {
|
|
2446
2820
|
let t = e[0];
|
|
2447
2821
|
t && n(!t.isIntersecting);
|
|
2448
2822
|
});
|
|
2449
|
-
return
|
|
2823
|
+
return D(() => {
|
|
2450
2824
|
let t = e();
|
|
2451
2825
|
r.disconnect(), t && r.observe(t);
|
|
2452
|
-
}),
|
|
2826
|
+
}), A(() => r.disconnect()), t;
|
|
2453
2827
|
}
|
|
2454
2828
|
//#endregion
|
|
2455
2829
|
//#region src/framework/hooks/use-daylight.ts
|
|
2456
|
-
var
|
|
2457
|
-
function
|
|
2830
|
+
var Ma = -6, Na = 864e5;
|
|
2831
|
+
function Pa(e, t) {
|
|
2458
2832
|
let n = e.next_rising ? Date.parse(e.next_rising) : NaN, r = e.next_setting ? Date.parse(e.next_setting) : NaN;
|
|
2459
2833
|
if (!Number.isFinite(n) || !Number.isFinite(r)) return;
|
|
2460
|
-
let [i, a] = e.state === "above_horizon" ? [n -
|
|
2834
|
+
let [i, a] = e.state === "above_horizon" ? [n - Na, r] : [r - Na, n], o = a - i;
|
|
2461
2835
|
if (!(o <= 0)) return Math.min(1, Math.max(0, (t.getTime() - i) / o));
|
|
2462
2836
|
}
|
|
2463
|
-
var
|
|
2464
|
-
function
|
|
2837
|
+
var Fa = 20, Ia = 7;
|
|
2838
|
+
function La(e, t) {
|
|
2465
2839
|
if (e && (e.state === "above_horizon" || e.state === "below_horizon")) {
|
|
2466
|
-
let n = e.elevation, r = e.state === "above_horizon" ? "day" : n !== void 0 && n >
|
|
2840
|
+
let n = e.elevation, r = e.state === "above_horizon" ? "day" : n !== void 0 && n > Ma ? e.rising ? "dawn" : "dusk" : "night";
|
|
2467
2841
|
return {
|
|
2468
2842
|
phase: r,
|
|
2469
2843
|
isNight: r === "night",
|
|
2470
2844
|
elevation: n,
|
|
2471
|
-
progress:
|
|
2845
|
+
progress: Pa(e, t)
|
|
2472
2846
|
};
|
|
2473
2847
|
}
|
|
2474
|
-
let n = t.getHours(), r = n >=
|
|
2848
|
+
let n = t.getHours(), r = n >= Fa || n < Ia ? "night" : "day";
|
|
2475
2849
|
return {
|
|
2476
2850
|
phase: r,
|
|
2477
2851
|
isNight: r === "night"
|
|
2478
2852
|
};
|
|
2479
2853
|
}
|
|
2480
|
-
var [
|
|
2481
|
-
function
|
|
2482
|
-
return
|
|
2483
|
-
|
|
2854
|
+
var [Ra, za] = k(/* @__PURE__ */ new Date()), Ba = 0, Va;
|
|
2855
|
+
function Ha() {
|
|
2856
|
+
return Ba++, Va ||= (za(/* @__PURE__ */ new Date()), setInterval(() => za(/* @__PURE__ */ new Date()), 6e4)), () => {
|
|
2857
|
+
Ba--, Ba === 0 && Va && (clearInterval(Va), Va = void 0);
|
|
2484
2858
|
};
|
|
2485
2859
|
}
|
|
2486
|
-
function
|
|
2487
|
-
let e =
|
|
2488
|
-
return
|
|
2489
|
-
e() ||
|
|
2490
|
-
}),
|
|
2860
|
+
function Ua() {
|
|
2861
|
+
let e = C("sun.sun");
|
|
2862
|
+
return D(() => {
|
|
2863
|
+
e() || A(Ha());
|
|
2864
|
+
}), O(() => {
|
|
2491
2865
|
let t = e(), n = t ? {
|
|
2492
2866
|
state: t.state,
|
|
2493
2867
|
elevation: t.attributes?.elevation,
|
|
@@ -2495,27 +2869,27 @@ function Ca() {
|
|
|
2495
2869
|
next_rising: t.attributes?.next_rising,
|
|
2496
2870
|
next_setting: t.attributes?.next_setting
|
|
2497
2871
|
} : void 0;
|
|
2498
|
-
return
|
|
2872
|
+
return La(n, n ? /* @__PURE__ */ new Date() : Ra());
|
|
2499
2873
|
});
|
|
2500
2874
|
}
|
|
2501
2875
|
//#endregion
|
|
2502
2876
|
//#region src/framework/hooks/use-reduced-motion.ts
|
|
2503
|
-
function
|
|
2877
|
+
function Wa() {
|
|
2504
2878
|
if (typeof window > "u" || typeof window.matchMedia != "function") return () => !1;
|
|
2505
|
-
let e = window.matchMedia("(prefers-reduced-motion: reduce)"), [t, n] =
|
|
2506
|
-
return e.addEventListener("change", r),
|
|
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;
|
|
2507
2881
|
}
|
|
2508
2882
|
//#endregion
|
|
2509
2883
|
//#region src/framework/hooks/use-widget-entity-group.ts
|
|
2510
|
-
function
|
|
2511
|
-
let t = e.minEntities ?? 1, n =
|
|
2884
|
+
function Ga(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(() => {
|
|
2512
2886
|
if (!r()) return;
|
|
2513
2887
|
let t = e.aggregationMode?.();
|
|
2514
2888
|
if (!t || t === "none") return;
|
|
2515
2889
|
let n = e.entities();
|
|
2516
|
-
if (t === "light" || t === "binary-sensor" || t === "switch") return
|
|
2517
|
-
if (t === "sensor") return
|
|
2518
|
-
}), o =
|
|
2890
|
+
if (t === "light" || t === "binary-sensor" || t === "switch") return kr(n, e.allEntitiesMode);
|
|
2891
|
+
if (t === "sensor") return Ar(n, e.sensorGroupType?.() ?? "mean", !0);
|
|
2892
|
+
}), o = O(() => r() ? void 0 : e.emptyStateConfig);
|
|
2519
2893
|
return {
|
|
2520
2894
|
entities: e.entities,
|
|
2521
2895
|
groupData: i,
|
|
@@ -2527,7 +2901,7 @@ function Ta(e) {
|
|
|
2527
2901
|
}
|
|
2528
2902
|
//#endregion
|
|
2529
2903
|
//#region src/framework/theming/svg-colors.ts
|
|
2530
|
-
var
|
|
2904
|
+
var Ka = {
|
|
2531
2905
|
solar: "oklch(0.74 0.18 60)",
|
|
2532
2906
|
grid: "oklch(0.62 0.12 245)",
|
|
2533
2907
|
battery: "oklch(0.70 0.18 145)",
|
|
@@ -2536,21 +2910,21 @@ var Ea = {
|
|
|
2536
2910
|
positive: "oklch(0.70 0.14 160)",
|
|
2537
2911
|
negative: "oklch(0.64 0.22 27)"
|
|
2538
2912
|
};
|
|
2539
|
-
function
|
|
2913
|
+
function qa(e) {
|
|
2540
2914
|
return {
|
|
2541
2915
|
fill: `color-mix(in oklch, ${e} 20%, transparent)`,
|
|
2542
2916
|
stroke: e,
|
|
2543
2917
|
solid: e
|
|
2544
2918
|
};
|
|
2545
2919
|
}
|
|
2546
|
-
var
|
|
2920
|
+
var Ja = Object.fromEntries(Object.entries(Ka).map(([e, t]) => [e, qa(t)])), Ya = o.enum([
|
|
2547
2921
|
"success",
|
|
2548
2922
|
"warning",
|
|
2549
2923
|
"danger",
|
|
2550
2924
|
"info",
|
|
2551
2925
|
"neutral",
|
|
2552
2926
|
"accent"
|
|
2553
|
-
]),
|
|
2927
|
+
]), Xa = {
|
|
2554
2928
|
title: e(() => o.string().optional().meta({
|
|
2555
2929
|
title: "Title",
|
|
2556
2930
|
description: "Optional display name override"
|
|
@@ -2570,38 +2944,38 @@ var Oa = Object.fromEntries(Object.entries(Ea).map(([e, t]) => [e, Da(t)])), ka
|
|
|
2570
2944
|
formType: "area-picker",
|
|
2571
2945
|
title: "Area"
|
|
2572
2946
|
}), "widgetFields.areaId")
|
|
2573
|
-
},
|
|
2947
|
+
}, Za = 24;
|
|
2574
2948
|
function $(e) {
|
|
2575
2949
|
let t = {};
|
|
2576
2950
|
for (let [n, r] of Object.entries(e)) r !== void 0 && (t[n] = r);
|
|
2577
2951
|
return t;
|
|
2578
2952
|
}
|
|
2579
|
-
function
|
|
2953
|
+
function Qa() {
|
|
2580
2954
|
return o.string().optional().meta({
|
|
2581
2955
|
title: "Title",
|
|
2582
2956
|
description: "Optional display name override"
|
|
2583
2957
|
});
|
|
2584
2958
|
}
|
|
2585
|
-
function
|
|
2959
|
+
function $a(e) {
|
|
2586
2960
|
return (e.default === void 0 ? o.string().optional() : o.string().default(e.default)).meta($({
|
|
2587
2961
|
title: e.title,
|
|
2588
2962
|
description: e.description
|
|
2589
2963
|
}));
|
|
2590
2964
|
}
|
|
2591
|
-
function
|
|
2965
|
+
function eo(e) {
|
|
2592
2966
|
let t = o.number();
|
|
2593
2967
|
return e.min !== void 0 && (t = t.min(e.min)), e.max !== void 0 && (t = t.max(e.max)), (e.default === void 0 ? t.optional() : t.default(e.default)).meta($({
|
|
2594
2968
|
title: e.title,
|
|
2595
2969
|
description: e.description
|
|
2596
2970
|
}));
|
|
2597
2971
|
}
|
|
2598
|
-
function
|
|
2972
|
+
function to(e) {
|
|
2599
2973
|
return o.boolean().default(e.default ?? !1).meta($({
|
|
2600
2974
|
title: e.title,
|
|
2601
2975
|
description: e.description
|
|
2602
2976
|
}));
|
|
2603
2977
|
}
|
|
2604
|
-
function
|
|
2978
|
+
function no(e, t) {
|
|
2605
2979
|
let n = o.enum(e);
|
|
2606
2980
|
return (t.default === void 0 ? n.optional() : n.default(t.default)).meta($({
|
|
2607
2981
|
title: t.title,
|
|
@@ -2610,14 +2984,14 @@ function Ia(e, t) {
|
|
|
2610
2984
|
icons: t.icons
|
|
2611
2985
|
}));
|
|
2612
2986
|
}
|
|
2613
|
-
function
|
|
2987
|
+
function ro(e, t) {
|
|
2614
2988
|
return o.array(o.enum(e)).default([...t.default ?? []]).meta($({
|
|
2615
2989
|
title: t.title,
|
|
2616
2990
|
description: t.description,
|
|
2617
2991
|
labels: t.labels
|
|
2618
2992
|
}));
|
|
2619
2993
|
}
|
|
2620
|
-
function
|
|
2994
|
+
function io(e, t) {
|
|
2621
2995
|
return o.array(o.string()).default([]).meta($({
|
|
2622
2996
|
domain: e,
|
|
2623
2997
|
title: t?.title ?? "Entities",
|
|
@@ -2625,7 +2999,7 @@ function Ra(e, t) {
|
|
|
2625
2999
|
deviceClass: t?.deviceClass
|
|
2626
3000
|
}));
|
|
2627
3001
|
}
|
|
2628
|
-
function
|
|
3002
|
+
function ao(e, t) {
|
|
2629
3003
|
return o.array(o.string()).default([]).meta($({
|
|
2630
3004
|
domain: e,
|
|
2631
3005
|
title: t?.title ?? "Entity",
|
|
@@ -2634,13 +3008,13 @@ function za(e, t) {
|
|
|
2634
3008
|
singleSelect: !0
|
|
2635
3009
|
}));
|
|
2636
3010
|
}
|
|
2637
|
-
function
|
|
3011
|
+
function oo(e) {
|
|
2638
3012
|
return o.string().optional().meta({
|
|
2639
3013
|
formType: "area-picker",
|
|
2640
3014
|
title: e?.title ?? "Area"
|
|
2641
3015
|
});
|
|
2642
3016
|
}
|
|
2643
|
-
function
|
|
3017
|
+
function so(e) {
|
|
2644
3018
|
let t = o.string().meta($({
|
|
2645
3019
|
formType: "icon-picker",
|
|
2646
3020
|
title: e?.title ?? "Icon",
|
|
@@ -2648,7 +3022,7 @@ function Va(e) {
|
|
|
2648
3022
|
}));
|
|
2649
3023
|
return e?.default === void 0 ? t.optional() : t.default(e.default);
|
|
2650
3024
|
}
|
|
2651
|
-
function
|
|
3025
|
+
function co(e) {
|
|
2652
3026
|
let t = e?.presets && Object.fromEntries(Object.entries(e.presets).map(([e, t]) => [e, {
|
|
2653
3027
|
label: t.label,
|
|
2654
3028
|
thumb: t.thumb
|
|
@@ -2660,36 +3034,36 @@ function Ha(e) {
|
|
|
2660
3034
|
}));
|
|
2661
3035
|
return e?.default === void 0 ? n.optional() : n.default(e.default);
|
|
2662
3036
|
}
|
|
2663
|
-
function
|
|
3037
|
+
function lo(e) {
|
|
2664
3038
|
return o.array(o.string()).default([]).meta($({
|
|
2665
3039
|
title: e.title,
|
|
2666
3040
|
description: e.description
|
|
2667
3041
|
}));
|
|
2668
3042
|
}
|
|
2669
|
-
function
|
|
3043
|
+
function uo(e, t) {
|
|
2670
3044
|
let n = o.object(e);
|
|
2671
3045
|
return n.default(Yt(n)).meta({ title: t.title });
|
|
2672
3046
|
}
|
|
2673
|
-
function
|
|
3047
|
+
function fo(e) {
|
|
2674
3048
|
return e.def;
|
|
2675
3049
|
}
|
|
2676
|
-
function
|
|
3050
|
+
function po(e) {
|
|
2677
3051
|
if (o.globalRegistry.get(e)?.formType === "list") return !0;
|
|
2678
|
-
let t =
|
|
2679
|
-
return t.shape ? Object.values(t.shape).some(
|
|
3052
|
+
let t = fo(e);
|
|
3053
|
+
return t.shape ? Object.values(t.shape).some(po) : t.options ? t.options.some(po) : t.element ? po(t.element) : t.innerType ? po(t.innerType) : !1;
|
|
2680
3054
|
}
|
|
2681
|
-
function
|
|
2682
|
-
let t = e, n =
|
|
2683
|
-
for (; n;) t = n, n =
|
|
3055
|
+
function mo(e) {
|
|
3056
|
+
let t = e, n = fo(t).innerType;
|
|
3057
|
+
for (; n;) t = n, n = fo(t).innerType;
|
|
2684
3058
|
return t;
|
|
2685
3059
|
}
|
|
2686
|
-
function
|
|
2687
|
-
let t =
|
|
3060
|
+
function ho(e) {
|
|
3061
|
+
let t = fo(mo(e));
|
|
2688
3062
|
if (t.shape) return new Set(Object.keys(t.shape));
|
|
2689
3063
|
if (t.options) {
|
|
2690
3064
|
let e = [];
|
|
2691
3065
|
for (let n of t.options) {
|
|
2692
|
-
let t =
|
|
3066
|
+
let t = ho(n);
|
|
2693
3067
|
if (!t) return null;
|
|
2694
3068
|
e.push(t);
|
|
2695
3069
|
}
|
|
@@ -2701,7 +3075,7 @@ function Ja(e) {
|
|
|
2701
3075
|
}
|
|
2702
3076
|
return null;
|
|
2703
3077
|
}
|
|
2704
|
-
function
|
|
3078
|
+
function go(e, t, n) {
|
|
2705
3079
|
let r = { [t]: n };
|
|
2706
3080
|
try {
|
|
2707
3081
|
return e.parse(r);
|
|
@@ -2709,12 +3083,12 @@ function Ya(e, t, n) {
|
|
|
2709
3083
|
return r;
|
|
2710
3084
|
}
|
|
2711
3085
|
}
|
|
2712
|
-
function
|
|
3086
|
+
function _o(e, t) {
|
|
2713
3087
|
if (!Number.isInteger(t.max) || t.max < 1) throw Error(`field.list: max must be a positive integer, got ${t.max}`);
|
|
2714
|
-
if (t.max >
|
|
3088
|
+
if (t.max > Za) throw Error(`field.list: max ${t.max} exceeds the ceiling of ${Za}`);
|
|
2715
3089
|
if (t.min !== void 0 && (!Number.isInteger(t.min) || t.min < 0 || t.min > t.max)) throw Error(`field.list: min must be an integer between 0 and max, got ${t.min}`);
|
|
2716
|
-
if (
|
|
2717
|
-
if (t.labelField !== void 0 && !
|
|
3090
|
+
if (po(e)) throw Error("field.list: a list item cannot contain another field.list (depth 1 only)");
|
|
3091
|
+
if (t.labelField !== void 0 && !ho(e)?.has(t.labelField)) throw Error(`field.list: labelField "${t.labelField}" must name a field present in every item`);
|
|
2718
3092
|
let n = o.array(e);
|
|
2719
3093
|
return t.min !== void 0 && (n = n.min(t.min)), n = n.max(t.max), n.default([]).meta($({
|
|
2720
3094
|
formType: "list",
|
|
@@ -2724,7 +3098,7 @@ function Xa(e, t) {
|
|
|
2724
3098
|
labelField: t.labelField
|
|
2725
3099
|
}));
|
|
2726
3100
|
}
|
|
2727
|
-
function
|
|
3101
|
+
function vo(e, t, n) {
|
|
2728
3102
|
let r = Object.keys(t)[0];
|
|
2729
3103
|
if (r === void 0) throw Error("field.variants: at least one variant is required");
|
|
2730
3104
|
if (n.shared && e in n.shared) throw Error(`field.variants: shared fields cannot redefine the discriminator "${e}"`);
|
|
@@ -2737,7 +3111,7 @@ function Za(e, t, n) {
|
|
|
2737
3111
|
...r,
|
|
2738
3112
|
[e]: o.literal(t)
|
|
2739
3113
|
})), a = o.discriminatedUnion(e, i), s = i[0];
|
|
2740
|
-
return a.default(s ?
|
|
3114
|
+
return a.default(s ? go(s, e, r) : {}).meta($({
|
|
2741
3115
|
formType: "variants",
|
|
2742
3116
|
discriminator: e,
|
|
2743
3117
|
title: n.title,
|
|
@@ -2745,35 +3119,35 @@ function Za(e, t, n) {
|
|
|
2745
3119
|
labels: n.labels
|
|
2746
3120
|
}));
|
|
2747
3121
|
}
|
|
2748
|
-
var
|
|
2749
|
-
title:
|
|
2750
|
-
text:
|
|
2751
|
-
number:
|
|
2752
|
-
toggle:
|
|
2753
|
-
choice:
|
|
2754
|
-
choices:
|
|
2755
|
-
entities:
|
|
2756
|
-
entity:
|
|
2757
|
-
area:
|
|
2758
|
-
icon:
|
|
2759
|
-
image:
|
|
2760
|
-
stringList:
|
|
2761
|
-
group:
|
|
2762
|
-
list:
|
|
2763
|
-
variants:
|
|
3122
|
+
var yo = {
|
|
3123
|
+
title: Qa,
|
|
3124
|
+
text: $a,
|
|
3125
|
+
number: eo,
|
|
3126
|
+
toggle: to,
|
|
3127
|
+
choice: no,
|
|
3128
|
+
choices: ro,
|
|
3129
|
+
entities: io,
|
|
3130
|
+
entity: ao,
|
|
3131
|
+
area: oo,
|
|
3132
|
+
icon: so,
|
|
3133
|
+
image: co,
|
|
3134
|
+
stringList: lo,
|
|
3135
|
+
group: uo,
|
|
3136
|
+
list: _o,
|
|
3137
|
+
variants: vo
|
|
2764
3138
|
};
|
|
2765
|
-
function
|
|
3139
|
+
function bo(e) {
|
|
2766
3140
|
return o.object(e);
|
|
2767
3141
|
}
|
|
2768
3142
|
//#endregion
|
|
2769
3143
|
//#region src/framework/image-src.ts
|
|
2770
|
-
function
|
|
3144
|
+
function xo(e, t) {
|
|
2771
3145
|
let n = Bt(e);
|
|
2772
3146
|
return n === void 0 ? Ht(e) : t?.[n]?.src;
|
|
2773
3147
|
}
|
|
2774
3148
|
//#endregion
|
|
2775
3149
|
//#region src/shared/spline.ts
|
|
2776
|
-
function
|
|
3150
|
+
function So(e) {
|
|
2777
3151
|
if (e.length < 2) return "";
|
|
2778
3152
|
let t = e[0], n = e[1];
|
|
2779
3153
|
if (!t || !n) return "";
|
|
@@ -2800,14 +3174,14 @@ function to(e) {
|
|
|
2800
3174
|
}
|
|
2801
3175
|
//#endregion
|
|
2802
3176
|
//#region src/theme.ts
|
|
2803
|
-
function
|
|
3177
|
+
function Co() {
|
|
2804
3178
|
return document.documentElement.classList.contains("dark");
|
|
2805
3179
|
}
|
|
2806
3180
|
//#endregion
|
|
2807
3181
|
//#region src/version.ts
|
|
2808
|
-
var
|
|
3182
|
+
var wo = {
|
|
2809
3183
|
name: "@glasshome/widget-sdk",
|
|
2810
|
-
version: "1.
|
|
3184
|
+
version: "1.22.0",
|
|
2811
3185
|
description: "SDK for building GlassHome dashboard widgets with SolidJS",
|
|
2812
3186
|
keywords: [
|
|
2813
3187
|
"dashboard",
|
|
@@ -2888,7 +3262,7 @@ var ro = {
|
|
|
2888
3262
|
zod: "^4.1.13"
|
|
2889
3263
|
},
|
|
2890
3264
|
devDependencies: {
|
|
2891
|
-
"@glasshome/ui": "1.
|
|
3265
|
+
"@glasshome/ui": "1.26.0",
|
|
2892
3266
|
"@solidjs/testing-library": "^0.8.10",
|
|
2893
3267
|
"@types/bun": "^1.4.0",
|
|
2894
3268
|
"@types/node": "^25.2.2",
|
|
@@ -2903,10 +3277,10 @@ var ro = {
|
|
|
2903
3277
|
},
|
|
2904
3278
|
peerDependencies: {
|
|
2905
3279
|
"@glasshome/sync-layer": "0.9.1",
|
|
2906
|
-
"@glasshome/ui": "1.
|
|
3280
|
+
"@glasshome/ui": "1.26.0",
|
|
2907
3281
|
"solid-js": "^1.9.11"
|
|
2908
3282
|
},
|
|
2909
3283
|
engines: { node: ">=18" }
|
|
2910
3284
|
}.version;
|
|
2911
3285
|
//#endregion
|
|
2912
|
-
export {
|
|
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 };
|