@glasshome/widget-sdk 1.20.0 → 1.21.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/components/anatomy.d.ts +2 -1
- package/dist/framework/dialogs/WidgetDialog.d.ts +1 -1
- package/dist/framework/gestures/use-widget-gestures.d.ts +3 -1
- 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/hooks/widget-registry.d.ts +4 -1
- package/dist/framework/index.d.ts +1 -1
- package/dist/index.js +1212 -814
- package/guide/widgets.md +2 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -2,14 +2,14 @@ import { deprecate as e, deprecations as t, formatDeprecation as n } from "./dep
|
|
|
2
2
|
import { WidgetManifestSchema as r, formatSchemaError as i } from "./schemas.js";
|
|
3
3
|
import { z as a, z as o } from "zod";
|
|
4
4
|
import { getForecasts as s, getStream as c, getWebRtcClientConfig as l, hassMediaUrl as u, sendWebRtcCandidate as d, startWebRtcSession as f, state as p, trackEntityHistory as m, untrackEntityHistory as h } from "@glasshome/sync-layer";
|
|
5
|
-
import { byDomain as
|
|
6
|
-
import { For as C, Show as w, children as
|
|
7
|
-
import { addEventListener as
|
|
8
|
-
import { Accordion as
|
|
9
|
-
import { clsx as
|
|
10
|
-
import { twMerge as
|
|
5
|
+
import { byDomain as ee, useArea as g, useCalendarEvents as _, useCamera as v, useConnection as y, useCurrency as b, useEntities as x, useEntity as te, useEntity as S, useEntityHistory as ne, useEntityStatistics as re, useForecast as ie, useHassConfig as ae, useLocale as oe, useService as se, useStore as ce, useTemperatureUnit as le, useToggle as ue, useTurnOff as de, useTurnOn as fe, useUnitSystem as pe } from "@glasshome/sync-layer/solid";
|
|
6
|
+
import { For as C, Show as w, children as me, createContext as he, createEffect as T, createMemo as E, createSignal as D, on as ge, onCleanup as O, onMount as _e, splitProps as ve, useContext as k } from "solid-js";
|
|
7
|
+
import { addEventListener as A, className as j, createComponent as M, delegateEvents as ye, effect as N, insert as P, memo as F, setAttribute as I, setStyleProperty as L, style as R, template as z, use as B } from "solid-js/web";
|
|
8
|
+
import { Accordion as be, AccordionContent as xe, AccordionItem as Se, AccordionTrigger as Ce, Badge as we, Badge as Te, Button as Ee, Button as De, ButtonGroup as Oe, ButtonGroup as ke, Carousel as Ae, CarouselContent as je, CarouselDots as Me, CarouselItem as Ne, CarouselNext as Pe, CarouselPrevious as Fe, ColorDisc as Ie, ColorSlider as Le, ColorWheel as Re, CountPill as ze, CountPill as Be, Empty as Ve, EmptyDescription as He, EmptyHeader as Ue, EmptyTitle as We, FactRow as V, FieldGroup as Ge, FieldTitle as Ke, HOLD_GRACE_MS as qe, HOLD_MS as Je, Icon as Ye, Icon as H, Input as Xe, Label as Ze, Popover as Qe, PopoverContent as $e, Progress as et, ResponsiveDialog as tt, ResponsiveDialogBody as nt, ResponsiveDialogBody as rt, ResponsiveDialogClose as it, ResponsiveDialogContent as at, ResponsiveDialogDescription as ot, ResponsiveDialogFooter as st, ResponsiveDialogFooter as ct, ResponsiveDialogHeader as lt, ResponsiveDialogTitle as ut, SchemaForm as dt, SectionIcon as ft, SectionIcon as pt, SectionMeta as mt, SectionRow as ht, SectionTitle as gt, Select as _t, SelectContent as vt, SelectItem as yt, SelectTrigger as bt, SelectValue as xt, Slider as St, SwatchPicker as Ct, Switch as wt, Tabs as Tt, Tabs as Et, TabsContent as Dt, TabsContent as Ot, TabsList as kt, TabsList as At, TabsTrigger as jt, TabsTrigger as Mt, TemperatureBar as Nt, Toggle as Pt, ToggleGroup as Ft, ToggleGroup as It, ToggleGroupItem as Lt, ToggleGroupItem as Rt, buttonVariants as zt, imagePreset as Bt, imagePreset as Vt, imageUrl as Ht, imageUrl as Ut, mediaUrl as Wt, parseColor as Gt, presetValue as Kt } from "@glasshome/ui/solid";
|
|
9
|
+
import { clsx as qt } from "clsx";
|
|
10
|
+
import { twMerge as Jt } from "tailwind-merge";
|
|
11
11
|
//#region src/framework/to-form-schema.ts
|
|
12
|
-
function
|
|
12
|
+
function Yt(e) {
|
|
13
13
|
return o.toJSONSchema(e, { override: (e) => {
|
|
14
14
|
let t = o.globalRegistry.get(e.zodSchema);
|
|
15
15
|
return t && typeof t == "object" && Object.keys(t).length > 0 ? {
|
|
@@ -18,7 +18,7 @@ function Wt(e) {
|
|
|
18
18
|
} : e.jsonSchema;
|
|
19
19
|
} });
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function Xt(e) {
|
|
22
22
|
try {
|
|
23
23
|
return e.parse({});
|
|
24
24
|
} catch {
|
|
@@ -27,64 +27,64 @@ function Gt(e) {
|
|
|
27
27
|
}
|
|
28
28
|
//#endregion
|
|
29
29
|
//#region src/define-widget.ts
|
|
30
|
-
function
|
|
31
|
-
return e.configSchema && (e.manifest.schema || (e.manifest.schema =
|
|
30
|
+
function Zt(e) {
|
|
31
|
+
return e.configSchema && (e.manifest.schema || (e.manifest.schema = Yt(e.configSchema)), e.manifest.defaultConfig || (e.manifest.defaultConfig = Xt(e.configSchema))), e;
|
|
32
32
|
}
|
|
33
33
|
//#endregion
|
|
34
34
|
//#region src/framework/hooks/use-widget-context.ts
|
|
35
|
-
var
|
|
36
|
-
function
|
|
37
|
-
let e =
|
|
35
|
+
var U = he();
|
|
36
|
+
function Qt() {
|
|
37
|
+
let e = k(U);
|
|
38
38
|
if (!e) throw Error("useWidgetContext must be used within a Widget component");
|
|
39
39
|
return e;
|
|
40
40
|
}
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region src/framework/hooks/use-service.ts
|
|
43
|
-
function
|
|
43
|
+
function $t(e) {
|
|
44
44
|
let t = Array.isArray(e) ? e[0] : e, n = t?.split(".")[0];
|
|
45
45
|
if (!n) throw Error(`Invalid entity ID: ${String(t)}`);
|
|
46
46
|
return n;
|
|
47
47
|
}
|
|
48
|
-
function
|
|
48
|
+
function W(e, t) {
|
|
49
49
|
return async (n, r = {}) => {
|
|
50
|
-
await e(
|
|
50
|
+
await e($t(n), t, r, { entity_id: n });
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
-
function
|
|
54
|
-
let e =
|
|
53
|
+
function en() {
|
|
54
|
+
let e = k(U)?.callService;
|
|
55
55
|
return e ? {
|
|
56
56
|
callService: e,
|
|
57
|
-
turnOn:
|
|
58
|
-
turnOff:
|
|
59
|
-
toggle:
|
|
57
|
+
turnOn: W(e, "turn_on"),
|
|
58
|
+
turnOff: W(e, "turn_off"),
|
|
59
|
+
toggle: W(e, "toggle")
|
|
60
60
|
} : se();
|
|
61
61
|
}
|
|
62
|
-
function
|
|
63
|
-
let e =
|
|
64
|
-
return e ?
|
|
62
|
+
function tn() {
|
|
63
|
+
let e = k(U)?.callService;
|
|
64
|
+
return e ? W(e, "turn_on") : fe();
|
|
65
65
|
}
|
|
66
|
-
function
|
|
67
|
-
let e =
|
|
68
|
-
return e ?
|
|
66
|
+
function nn() {
|
|
67
|
+
let e = k(U)?.callService;
|
|
68
|
+
return e ? W(e, "turn_off") : de();
|
|
69
69
|
}
|
|
70
|
-
function
|
|
71
|
-
let e =
|
|
72
|
-
return e ?
|
|
70
|
+
function rn() {
|
|
71
|
+
let e = k(U)?.callService;
|
|
72
|
+
return e ? W(e, "toggle") : ue();
|
|
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] = D(!1), [r, i] = D(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 = k(U);
|
|
86
|
+
return o?.registerDialogOpener?.(a), o && G.set(o, a), O(() => {
|
|
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 $t(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] = D(!1), [i, a] = D(), [o, s] = D(), [c, l] = D(), [u, d] = D(!1);
|
|
118
118
|
n = {
|
|
119
119
|
hasSheet: e,
|
|
120
120
|
setHasSheet: r,
|
|
@@ -123,164 +123,164 @@ function rn(e) {
|
|
|
123
123
|
accent: o,
|
|
124
124
|
setAccent: s,
|
|
125
125
|
icon: c,
|
|
126
|
-
setIcon: l
|
|
127
|
-
|
|
126
|
+
setIcon: l,
|
|
127
|
+
nothingMore: u,
|
|
128
|
+
setNothingMore: d
|
|
129
|
+
}, sn.set(t, n);
|
|
128
130
|
}
|
|
129
131
|
return n;
|
|
130
132
|
}
|
|
131
133
|
//#endregion
|
|
132
134
|
//#region src/framework/gestures/cursors.ts
|
|
133
|
-
var
|
|
134
|
-
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) {
|
|
135
137
|
return `url("data:image/svg+xml,${encodeURIComponent(e)}")`;
|
|
136
138
|
}
|
|
137
|
-
function
|
|
138
|
-
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>`;
|
|
139
141
|
}
|
|
140
|
-
var
|
|
142
|
+
var _n = gn(`
|
|
141
143
|
<g transform="translate(6, 2)">
|
|
142
144
|
<!-- shadow -->
|
|
143
|
-
<g stroke="${
|
|
145
|
+
<g stroke="${fn}" stroke-width="${mn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
144
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"/>
|
|
145
147
|
</g>
|
|
146
148
|
<!-- main -->
|
|
147
|
-
<g stroke="${
|
|
149
|
+
<g stroke="${q}" stroke-width="${pn}" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
148
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"/>
|
|
149
151
|
</g>
|
|
150
152
|
</g>
|
|
151
|
-
`),
|
|
153
|
+
`), vn = gn(`
|
|
152
154
|
<g>
|
|
153
|
-
<circle cx="${
|
|
154
|
-
<circle cx="${
|
|
155
|
-
<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}"/>
|
|
156
158
|
</g>
|
|
157
|
-
`),
|
|
159
|
+
`), yn = gn(`
|
|
158
160
|
<g>
|
|
159
161
|
<!-- shadow -->
|
|
160
|
-
<g stroke="${
|
|
161
|
-
<line x1="6" y1="${
|
|
162
|
-
<polyline points="10,12 6,${
|
|
163
|
-
<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"/>
|
|
164
166
|
</g>
|
|
165
167
|
<!-- main -->
|
|
166
|
-
<g stroke="${
|
|
167
|
-
<line x1="6" y1="${
|
|
168
|
-
<polyline points="10,12 6,${
|
|
169
|
-
<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"/>
|
|
170
172
|
</g>
|
|
171
173
|
<!-- center grip dots -->
|
|
172
|
-
<circle cx="${
|
|
173
|
-
<circle cx="11" cy="${
|
|
174
|
-
<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"/>
|
|
175
177
|
</g>
|
|
176
|
-
`),
|
|
178
|
+
`), bn = gn(`
|
|
177
179
|
<g>
|
|
178
180
|
<!-- shadow -->
|
|
179
|
-
<g stroke="${
|
|
180
|
-
<line x1="${
|
|
181
|
-
<polyline points="12,10 ${
|
|
182
|
-
<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"/>
|
|
183
185
|
</g>
|
|
184
186
|
<!-- main -->
|
|
185
|
-
<g stroke="${
|
|
186
|
-
<line x1="${
|
|
187
|
-
<polyline points="12,10 ${
|
|
188
|
-
<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"/>
|
|
189
191
|
</g>
|
|
190
192
|
<!-- center grip dots -->
|
|
191
|
-
<circle cx="${
|
|
192
|
-
<circle cx="${
|
|
193
|
-
<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"/>
|
|
194
196
|
</g>
|
|
195
|
-
`),
|
|
197
|
+
`), xn = gn(`
|
|
196
198
|
<g>
|
|
197
199
|
<!-- shadow -->
|
|
198
|
-
<g stroke="${
|
|
199
|
-
<line x1="7" y1="${
|
|
200
|
-
<line x1="${
|
|
201
|
-
<polyline points="11,13 7,${
|
|
202
|
-
<polyline points="21,13 25,${
|
|
203
|
-
<polyline points="13,11 ${
|
|
204
|
-
<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"/>
|
|
205
207
|
</g>
|
|
206
208
|
<!-- main -->
|
|
207
|
-
<g stroke="${
|
|
208
|
-
<line x1="7" y1="${
|
|
209
|
-
<line x1="${
|
|
210
|
-
<polyline points="11,13 7,${
|
|
211
|
-
<polyline points="21,13 25,${
|
|
212
|
-
<polyline points="13,11 ${
|
|
213
|
-
<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"/>
|
|
214
216
|
</g>
|
|
215
217
|
<!-- center dot -->
|
|
216
|
-
<circle cx="${
|
|
218
|
+
<circle cx="${K}" cy="${K}" r="2" fill="${q}"/>
|
|
217
219
|
</g>
|
|
218
220
|
`);
|
|
219
|
-
function
|
|
221
|
+
function Sn(e, t, n) {
|
|
220
222
|
return {
|
|
221
|
-
css: `${
|
|
223
|
+
css: `${hn(e)} ${t} ${n}, auto`,
|
|
222
224
|
hotspotX: t,
|
|
223
225
|
hotspotY: n
|
|
224
226
|
};
|
|
225
227
|
}
|
|
226
|
-
var
|
|
227
|
-
tap:
|
|
228
|
-
hold:
|
|
229
|
-
slideHorizontal:
|
|
230
|
-
slideVertical:
|
|
231
|
-
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)
|
|
232
234
|
};
|
|
233
235
|
//#endregion
|
|
234
236
|
//#region src/framework/gestures/haptics.ts
|
|
235
|
-
function
|
|
237
|
+
function wn() {
|
|
236
238
|
if (typeof window > "u") return null;
|
|
237
239
|
let e = window;
|
|
238
240
|
return e.Capacitor?.isNativePlatform?.() ? e.Capacitor.Plugins?.Haptics ?? null : null;
|
|
239
241
|
}
|
|
240
|
-
function
|
|
242
|
+
function Tn(e) {
|
|
241
243
|
if (typeof navigator < "u" && typeof navigator.vibrate == "function") try {
|
|
242
244
|
navigator.vibrate(e);
|
|
243
245
|
} catch {}
|
|
244
246
|
}
|
|
245
|
-
var
|
|
247
|
+
var En = {
|
|
246
248
|
tick() {
|
|
247
|
-
let e =
|
|
249
|
+
let e = wn();
|
|
248
250
|
if (e) {
|
|
249
251
|
e.impact({ style: "Light" }).catch(() => {});
|
|
250
252
|
return;
|
|
251
253
|
}
|
|
252
|
-
|
|
254
|
+
Tn(8);
|
|
253
255
|
},
|
|
254
256
|
bump() {
|
|
255
|
-
let e =
|
|
257
|
+
let e = wn();
|
|
256
258
|
if (e) {
|
|
257
259
|
e.impact({ style: "Medium" }).catch(() => {});
|
|
258
260
|
return;
|
|
259
261
|
}
|
|
260
|
-
|
|
262
|
+
Tn(20);
|
|
261
263
|
},
|
|
262
264
|
pulse() {
|
|
263
|
-
let e =
|
|
265
|
+
let e = wn();
|
|
264
266
|
if (e) {
|
|
265
267
|
e.impact({ style: "Heavy" }).catch(() => {});
|
|
266
268
|
return;
|
|
267
269
|
}
|
|
268
|
-
|
|
270
|
+
Tn([
|
|
269
271
|
0,
|
|
270
272
|
15,
|
|
271
273
|
40,
|
|
272
274
|
15
|
|
273
275
|
]);
|
|
274
276
|
}
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
function xn(e, t) {
|
|
279
|
-
let n = A(W), r = rn(n), i = () => {
|
|
277
|
+
}, Dn = "button, a, input, select, textarea, [role=\"slider\"], [role=\"radio\"], [role=\"switch\"]";
|
|
278
|
+
function On(e, t) {
|
|
279
|
+
let n = k(U), r = un(n), i = () => {
|
|
280
280
|
let t = e();
|
|
281
|
-
return t.hold || !n
|
|
281
|
+
return t.hold || !n ? t : {
|
|
282
282
|
...t,
|
|
283
|
-
hold: { action: () =>
|
|
283
|
+
hold: { action: () => r?.hasSheet() ? G.get(n)?.() : r?.setNothingMore(!0) }
|
|
284
284
|
};
|
|
285
285
|
}, a = {
|
|
286
286
|
isDown: !1,
|
|
@@ -290,10 +290,11 @@ function xn(e, t) {
|
|
|
290
290
|
startTime: 0,
|
|
291
291
|
hasMoved: !1,
|
|
292
292
|
sliding: !1,
|
|
293
|
+
holdOnly: !1,
|
|
293
294
|
holdTimer: null,
|
|
294
295
|
graceTimer: null,
|
|
295
296
|
element: null
|
|
296
|
-
}, [o, s] =
|
|
297
|
+
}, [o, s] = D(null), c = null, l = null, u = null, [d, f] = D(null);
|
|
297
298
|
function p(e) {
|
|
298
299
|
e !== l && (u && u.disconnect(), u = new ResizeObserver((e) => {
|
|
299
300
|
let t = e[0];
|
|
@@ -322,16 +323,16 @@ function xn(e, t) {
|
|
|
322
323
|
capture: !0,
|
|
323
324
|
once: !0
|
|
324
325
|
});
|
|
325
|
-
},
|
|
326
|
-
a.isDown = !1, a.hasMoved = !1, a.sliding = !1;
|
|
327
|
-
},
|
|
326
|
+
}, ee = () => {
|
|
327
|
+
a.isDown = !1, a.hasMoved = !1, a.sliding = !1, a.holdOnly = !1;
|
|
328
|
+
}, g = (e) => {
|
|
328
329
|
let n = i().slide;
|
|
329
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";
|
|
330
|
-
},
|
|
331
|
-
let t = i();
|
|
332
|
-
if (t.tap
|
|
333
|
-
if (a.isDown = !0, 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) {
|
|
334
|
-
let r = t.hold.delay ??
|
|
331
|
+
}, _ = (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
|
+
if (!(o ? !t.hold : !t.tap && !t.hold && !t.slide)) {
|
|
334
|
+
if (a.isDown = !0, a.holdOnly = o, a.isTouch = e.pointerType === "touch", a.element = e.currentTarget, p(a.element), a.startX = e.clientX, a.startY = e.clientY, a.startTime = Date.now(), a.hasMoved = !1, a.sliding = !1, t.hold) {
|
|
335
|
+
let r = t.hold.delay ?? Je, i = a.element.getBoundingClientRect(), o = e.clientX - i.left, c = e.clientY - i.top, l = Math.hypot(Math.max(o, i.width - o), Math.max(c, i.height - c));
|
|
335
336
|
a.graceTimer = setTimeout(() => {
|
|
336
337
|
a.graceTimer = null, s({
|
|
337
338
|
x: o,
|
|
@@ -339,22 +340,22 @@ function xn(e, t) {
|
|
|
339
340
|
r: l,
|
|
340
341
|
fired: !1
|
|
341
342
|
});
|
|
342
|
-
}, Math.min(
|
|
343
|
+
}, Math.min(qe, r)), a.holdTimer = setTimeout(() => {
|
|
343
344
|
a.holdTimer = null, a.isDown && !a.hasMoved && (s((e) => e && {
|
|
344
345
|
...e,
|
|
345
346
|
fired: !0
|
|
346
|
-
}),
|
|
347
|
+
}), En.bump(), a.element && h(a.element), t.hold?.action(), n?.onHeld?.(), a.isDown = !1);
|
|
347
348
|
}, r);
|
|
348
349
|
}
|
|
349
|
-
if (!a.isTouch && t.slide) try {
|
|
350
|
+
if (!a.isTouch && t.slide && !o) try {
|
|
350
351
|
e.currentTarget.setPointerCapture(e.pointerId);
|
|
351
352
|
} catch {}
|
|
352
353
|
}
|
|
353
|
-
},
|
|
354
|
+
}, v = (e) => {
|
|
354
355
|
if (!a.isDown) return;
|
|
355
356
|
let t = i(), n = e.clientX - a.startX, r = e.clientY - a.startY;
|
|
356
|
-
if (Math.sqrt(n * n + r * r) > 10 && (m(), a.hasMoved = !0), t.slide && a.hasMoved) {
|
|
357
|
-
let i = e.currentTarget, o =
|
|
357
|
+
if (Math.sqrt(n * n + r * r) > 10 && (m(), a.hasMoved = !0), t.slide && a.hasMoved && !a.holdOnly) {
|
|
358
|
+
let i = e.currentTarget, o = g(i);
|
|
358
359
|
if (a.isTouch && !a.sliding && Math.abs(o === "vertical" ? r : n) < Math.abs(o === "vertical" ? n : r)) return;
|
|
359
360
|
a.sliding = !0;
|
|
360
361
|
let s = t.slide.min ?? 0, l = t.slide.max ?? 100, u = l - s, d = o === "vertical" ? -r : n, f = c ?? {
|
|
@@ -363,26 +364,26 @@ function xn(e, t) {
|
|
|
363
364
|
}, p = d / (o === "vertical" ? f.height : f.width) * u, m = Math.max(s, Math.min(l, t.slide.value + p));
|
|
364
365
|
t.slide.onChange(Math.round(m)), a.startX = e.clientX, a.startY = e.clientY, e.preventDefault();
|
|
365
366
|
}
|
|
366
|
-
},
|
|
367
|
-
let t = i(), n = a.isDown, r = Date.now() - a.startTime, o = t.hold?.delay ??
|
|
368
|
-
m(), n && t.tap && !a.hasMoved && r < o && t.tap();
|
|
367
|
+
}, y = (e) => {
|
|
368
|
+
let t = i(), n = a.isDown, r = Date.now() - a.startTime, o = t.hold?.delay ?? Je;
|
|
369
|
+
m(), n && t.tap && !a.hasMoved && !a.holdOnly && r < o && t.tap();
|
|
369
370
|
try {
|
|
370
371
|
e.currentTarget.releasePointerCapture(e.pointerId);
|
|
371
372
|
} catch {}
|
|
372
|
-
|
|
373
|
-
},
|
|
373
|
+
ee();
|
|
374
|
+
}, b = (e) => {
|
|
374
375
|
m();
|
|
375
376
|
try {
|
|
376
377
|
e.currentTarget.releasePointerCapture(e.pointerId);
|
|
377
378
|
} catch {}
|
|
378
|
-
|
|
379
|
-
},
|
|
379
|
+
ee();
|
|
380
|
+
}, x = (e) => {
|
|
380
381
|
let t = i();
|
|
381
382
|
if (t.slide) {
|
|
382
383
|
let n = t.slide.orientation;
|
|
383
|
-
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);
|
|
384
385
|
}
|
|
385
|
-
return t.tap ?
|
|
386
|
+
return t.tap ? Cn.tap.css : t.hold ? Cn.hold.css : "";
|
|
386
387
|
};
|
|
387
388
|
return {
|
|
388
389
|
onKeyDown: (e) => {
|
|
@@ -390,13 +391,13 @@ function xn(e, t) {
|
|
|
390
391
|
let t = i();
|
|
391
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?.());
|
|
392
393
|
},
|
|
393
|
-
onPointerDown:
|
|
394
|
-
onPointerMove:
|
|
395
|
-
onPointerUp:
|
|
396
|
-
onPointerCancel:
|
|
394
|
+
onPointerDown: _,
|
|
395
|
+
onPointerMove: v,
|
|
396
|
+
onPointerUp: y,
|
|
397
|
+
onPointerCancel: b,
|
|
397
398
|
onPointerEnter: (e) => {
|
|
398
399
|
let t = e.currentTarget;
|
|
399
|
-
a.element = t, t.style.cursor =
|
|
400
|
+
a.element = t, t.style.cursor = x(t);
|
|
400
401
|
},
|
|
401
402
|
bindElement: (e) => {
|
|
402
403
|
e && (a.element = e, p(e));
|
|
@@ -410,7 +411,7 @@ function xn(e, t) {
|
|
|
410
411
|
return e.tap || e.hold ? "manipulation" : "auto";
|
|
411
412
|
},
|
|
412
413
|
hold: o,
|
|
413
|
-
holds: () => !!
|
|
414
|
+
holds: () => !!e().hold || !!r?.hasSheet(),
|
|
414
415
|
dispose: () => {
|
|
415
416
|
m(), u &&= (u.disconnect(), null), l = null, c = null;
|
|
416
417
|
}
|
|
@@ -418,18 +419,18 @@ function xn(e, t) {
|
|
|
418
419
|
}
|
|
419
420
|
//#endregion
|
|
420
421
|
//#region src/framework/hooks/use-widget-dimensions.ts
|
|
421
|
-
var
|
|
422
|
-
function
|
|
423
|
-
let e =
|
|
422
|
+
var kn = he();
|
|
423
|
+
function An() {
|
|
424
|
+
let e = k(kn);
|
|
424
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).");
|
|
425
426
|
return e;
|
|
426
427
|
}
|
|
427
428
|
//#endregion
|
|
428
429
|
//#region src/framework/hooks/use-confirm.ts
|
|
429
|
-
var
|
|
430
|
-
function
|
|
431
|
-
let [e, t] =
|
|
432
|
-
return
|
|
430
|
+
var jn = 1600;
|
|
431
|
+
function Mn() {
|
|
432
|
+
let [e, t] = D(/* @__PURE__ */ new Set()), n;
|
|
433
|
+
return O(() => clearTimeout(n)), {
|
|
433
434
|
has: (t) => e().has(t),
|
|
434
435
|
any: () => e().size > 0,
|
|
435
436
|
run: async (e, r) => {
|
|
@@ -438,39 +439,39 @@ function Tn() {
|
|
|
438
439
|
} catch {
|
|
439
440
|
return !1;
|
|
440
441
|
}
|
|
441
|
-
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;
|
|
442
443
|
}
|
|
443
444
|
};
|
|
444
445
|
}
|
|
445
446
|
//#endregion
|
|
446
447
|
//#region src/framework/utils/cn.ts
|
|
447
|
-
function
|
|
448
|
-
return
|
|
448
|
+
function J(...e) {
|
|
449
|
+
return Jt(qt(e));
|
|
449
450
|
}
|
|
450
451
|
//#endregion
|
|
451
452
|
//#region src/framework/components/WidgetIcon.tsx
|
|
452
|
-
var
|
|
453
|
-
function
|
|
453
|
+
var Nn = /*#__PURE__*/ z("<div class=\"glasshome-widget-icon glasshome-widget-icon-stack glasshome-widget-icon-stack-2 glass glass-tint\">"), Pn = /*#__PURE__*/ z("<div class=\"glasshome-widget-icon glasshome-widget-icon-stack glasshome-widget-icon-stack-3 glass glass-tint\">"), Fn = /*#__PURE__*/ z("<div><div class=\"glasshome-widget-icon-glyph flex items-center justify-center\">");
|
|
454
|
+
function In(e) {
|
|
454
455
|
let t = () => e.entityCount ?? 1;
|
|
455
456
|
return (() => {
|
|
456
|
-
var n =
|
|
457
|
-
return
|
|
457
|
+
var n = Fn(), r = n.firstChild;
|
|
458
|
+
return P(n, M(w, {
|
|
458
459
|
get when() {
|
|
459
460
|
return t() >= 2;
|
|
460
461
|
},
|
|
461
462
|
get children() {
|
|
462
|
-
return
|
|
463
|
+
return Nn();
|
|
463
464
|
}
|
|
464
|
-
}), r),
|
|
465
|
+
}), r), P(n, M(w, {
|
|
465
466
|
get when() {
|
|
466
467
|
return t() >= 3;
|
|
467
468
|
},
|
|
468
469
|
get children() {
|
|
469
|
-
return
|
|
470
|
+
return Pn();
|
|
470
471
|
}
|
|
471
|
-
}), r),
|
|
472
|
-
var r =
|
|
473
|
-
return r !== t.e &&
|
|
472
|
+
}), r), P(r, () => e.icon), N((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 && j(n, t.e = r), t.t = R(n, i, t.t), t;
|
|
474
475
|
}, {
|
|
475
476
|
e: void 0,
|
|
476
477
|
t: void 0
|
|
@@ -479,26 +480,26 @@ function kn(e) {
|
|
|
479
480
|
}
|
|
480
481
|
//#endregion
|
|
481
482
|
//#region src/framework/components/anatomy.tsx
|
|
482
|
-
var
|
|
483
|
-
function
|
|
484
|
-
let t =
|
|
485
|
-
|
|
483
|
+
var Ln = /*#__PURE__*/ z("<span class=glasshome-widget-eyebrow>"), Rn = /*#__PURE__*/ z("<div class=glasshome-widget-head-aside>"), zn = /*#__PURE__*/ z("<div class=glasshome-widget-head><div class=glasshome-widget-head-text><span class=glasshome-widget-name>"), Bn = /*#__PURE__*/ z("<span class=glasshome-widget-sub>"), Vn = /*#__PURE__*/ z("<span class=glasshome-widget-unit>"), Hn = /*#__PURE__*/ z("<div class=glasshome-widget-art>"), Un = /*#__PURE__*/ z("<div><div class=glasshome-widget-reading><span class=glasshome-widget-reading-value>"), Wn = /*#__PURE__*/ z("<div class=glasshome-widget-controls>"), Gn = /*#__PURE__*/ z("<div>"), Kn = /*#__PURE__*/ z("<div class=glasshome-widget-backdrop>"), qn = /*#__PURE__*/ z("<div class=glasshome-widget-glyph aria-hidden=true>"), Jn = he(() => !1), Yn = "mdi:check";
|
|
484
|
+
function Xn(e) {
|
|
485
|
+
let t = k(Jn), n = un(k(U));
|
|
486
|
+
T(() => n?.setIcon(e.icon)), O(() => {
|
|
486
487
|
n?.icon() === e.icon && n?.setIcon(void 0);
|
|
487
488
|
});
|
|
488
|
-
let r =
|
|
489
|
+
let r = me(() => e.eyebrow), i = me(() => e.aside), a = () => {
|
|
489
490
|
let t = r();
|
|
490
491
|
return typeof t == "string" && typeof e.name == "string" && t.trim().toLowerCase() === e.name.trim().toLowerCase();
|
|
491
492
|
};
|
|
492
493
|
return (() => {
|
|
493
|
-
var n =
|
|
494
|
-
return
|
|
494
|
+
var n = zn(), o = n.firstChild, s = o.firstChild;
|
|
495
|
+
return P(n, M(w, {
|
|
495
496
|
get when() {
|
|
496
497
|
return e.icon;
|
|
497
498
|
},
|
|
498
|
-
children: (n) =>
|
|
499
|
+
children: (n) => M(In, {
|
|
499
500
|
get icon() {
|
|
500
|
-
return
|
|
501
|
-
return
|
|
501
|
+
return M(H, { get icon() {
|
|
502
|
+
return F(() => !!t())() ? Yn : n();
|
|
502
503
|
} });
|
|
503
504
|
},
|
|
504
505
|
get entityCount() {
|
|
@@ -509,56 +510,56 @@ function Un(e) {
|
|
|
509
510
|
},
|
|
510
511
|
class: "glasshome-widget-head-icon"
|
|
511
512
|
})
|
|
512
|
-
}), o),
|
|
513
|
+
}), o), P(o, M(w, {
|
|
513
514
|
get when() {
|
|
514
|
-
return
|
|
515
|
+
return F(() => !!r())() && !a();
|
|
515
516
|
},
|
|
516
517
|
get children() {
|
|
517
|
-
var e =
|
|
518
|
-
return
|
|
518
|
+
var e = Ln();
|
|
519
|
+
return P(e, r), e;
|
|
519
520
|
}
|
|
520
|
-
}), s),
|
|
521
|
+
}), s), P(s, () => e.name), P(n, M(w, {
|
|
521
522
|
get when() {
|
|
522
523
|
return i();
|
|
523
524
|
},
|
|
524
525
|
get children() {
|
|
525
|
-
var e =
|
|
526
|
-
return
|
|
526
|
+
var e = Rn();
|
|
527
|
+
return P(e, i), e;
|
|
527
528
|
}
|
|
528
529
|
}), null), n;
|
|
529
530
|
})();
|
|
530
531
|
}
|
|
531
|
-
function
|
|
532
|
-
let t =
|
|
533
|
-
return
|
|
534
|
-
var r =
|
|
535
|
-
return
|
|
532
|
+
function Zn(e) {
|
|
533
|
+
let t = me(() => e.sub), n = me(() => e.art), r = E(() => typeof e.value == "string" ? e.value.replace(/[\d\s.,:/%°+\-−]/g, "") : void 0), i = () => typeof e.value == "string" || typeof e.value == "number" ? String(e.value).length + (e.unit ? .5 : 0) : void 0, [a, o] = D();
|
|
534
|
+
return T(ge(r, () => o((e) => e === "a" ? "b" : "a"), { defer: !0 })), (() => {
|
|
535
|
+
var r = Un(), o = r.firstChild, s = o.firstChild;
|
|
536
|
+
return P(o, M(w, {
|
|
536
537
|
get when() {
|
|
537
538
|
return t();
|
|
538
539
|
},
|
|
539
540
|
get children() {
|
|
540
|
-
var e =
|
|
541
|
-
return
|
|
541
|
+
var e = Bn();
|
|
542
|
+
return P(e, t), e;
|
|
542
543
|
}
|
|
543
|
-
}), s),
|
|
544
|
+
}), s), P(s, () => e.value, null), P(s, M(w, {
|
|
544
545
|
get when() {
|
|
545
546
|
return e.unit;
|
|
546
547
|
},
|
|
547
548
|
get children() {
|
|
548
|
-
var t =
|
|
549
|
-
return
|
|
549
|
+
var t = Vn();
|
|
550
|
+
return P(t, () => e.unit), N(() => I(t, "data-degree", e.unit === "°" || void 0)), t;
|
|
550
551
|
}
|
|
551
|
-
}), null),
|
|
552
|
+
}), null), P(r, M(w, {
|
|
552
553
|
get when() {
|
|
553
554
|
return n();
|
|
554
555
|
},
|
|
555
556
|
get children() {
|
|
556
|
-
var e =
|
|
557
|
-
return
|
|
557
|
+
var e = Hn();
|
|
558
|
+
return P(e, n), e;
|
|
558
559
|
}
|
|
559
|
-
}), null),
|
|
560
|
-
var c =
|
|
561
|
-
return c !== o.e &&
|
|
560
|
+
}), null), N((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 && j(r, o.e = c), l !== o.t && I(r, "data-art", o.t = l), u !== o.a && I(r, "data-empty", o.a = u), d !== o.o && I(s, "data-turn", o.o = d), f !== o.i && L(s, "--value-len", o.i = f), o;
|
|
562
563
|
}, {
|
|
563
564
|
e: void 0,
|
|
564
565
|
t: void 0,
|
|
@@ -568,43 +569,43 @@ function Wn(e) {
|
|
|
568
569
|
}), r;
|
|
569
570
|
})();
|
|
570
571
|
}
|
|
571
|
-
function
|
|
572
|
+
function Qn(e) {
|
|
572
573
|
return (() => {
|
|
573
|
-
var t =
|
|
574
|
-
return
|
|
574
|
+
var t = Wn();
|
|
575
|
+
return P(t, () => e.children), t;
|
|
575
576
|
})();
|
|
576
577
|
}
|
|
577
|
-
function
|
|
578
|
-
return
|
|
578
|
+
function $n(e) {
|
|
579
|
+
return M(ke, {
|
|
579
580
|
get "aria-label"() {
|
|
580
581
|
return e.label;
|
|
581
582
|
},
|
|
582
583
|
class: "glasshome-widget-stepper",
|
|
583
584
|
get children() {
|
|
584
|
-
return [
|
|
585
|
+
return [M(De, {
|
|
585
586
|
variant: "outline",
|
|
586
587
|
size: "icon",
|
|
587
588
|
"aria-label": "Lower",
|
|
588
589
|
class: "glasshome-widget-control",
|
|
589
590
|
onClick: () => e.onStep(-1),
|
|
590
591
|
get children() {
|
|
591
|
-
return
|
|
592
|
+
return M(H, { icon: "mdi:minus" });
|
|
592
593
|
}
|
|
593
|
-
}),
|
|
594
|
+
}), M(De, {
|
|
594
595
|
variant: "outline",
|
|
595
596
|
size: "icon",
|
|
596
597
|
"aria-label": "Raise",
|
|
597
598
|
class: "glasshome-widget-control",
|
|
598
599
|
onClick: () => e.onStep(1),
|
|
599
600
|
get children() {
|
|
600
|
-
return
|
|
601
|
+
return M(H, { icon: "mdi:plus" });
|
|
601
602
|
}
|
|
602
603
|
})];
|
|
603
604
|
}
|
|
604
605
|
});
|
|
605
606
|
}
|
|
606
|
-
function
|
|
607
|
-
return
|
|
607
|
+
function er(e) {
|
|
608
|
+
return M(It, {
|
|
608
609
|
get "aria-label"() {
|
|
609
610
|
return e.label;
|
|
610
611
|
},
|
|
@@ -617,11 +618,11 @@ function qn(e) {
|
|
|
617
618
|
onChange: (t) => t && e.onChange(t),
|
|
618
619
|
class: "glasshome-widget-choice",
|
|
619
620
|
get children() {
|
|
620
|
-
return
|
|
621
|
+
return M(C, {
|
|
621
622
|
get each() {
|
|
622
623
|
return e.options;
|
|
623
624
|
},
|
|
624
|
-
children: (t) =>
|
|
625
|
+
children: (t) => M(Rt, {
|
|
625
626
|
get value() {
|
|
626
627
|
return t.value;
|
|
627
628
|
},
|
|
@@ -633,7 +634,7 @@ function qn(e) {
|
|
|
633
634
|
return t.value === e.value ? void 0 : "";
|
|
634
635
|
},
|
|
635
636
|
get children() {
|
|
636
|
-
return
|
|
637
|
+
return M(H, { get icon() {
|
|
637
638
|
return t.icon;
|
|
638
639
|
} });
|
|
639
640
|
}
|
|
@@ -642,9 +643,9 @@ function qn(e) {
|
|
|
642
643
|
}
|
|
643
644
|
});
|
|
644
645
|
}
|
|
645
|
-
function
|
|
646
|
-
let t =
|
|
647
|
-
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 M(De, {
|
|
648
649
|
variant: "outline",
|
|
649
650
|
get size() {
|
|
650
651
|
return e.children ? "default" : "icon";
|
|
@@ -653,87 +654,87 @@ function Jn(e) {
|
|
|
653
654
|
return e["aria-label"];
|
|
654
655
|
},
|
|
655
656
|
get class() {
|
|
656
|
-
return
|
|
657
|
+
return J(e.children ? "glasshome-widget-control-wide" : "glasshome-widget-control", e.class);
|
|
657
658
|
},
|
|
658
659
|
get "data-confirmed"() {
|
|
659
660
|
return i() || void 0;
|
|
660
661
|
},
|
|
661
662
|
onClick: () => void n().run([r()], e.run),
|
|
662
663
|
get children() {
|
|
663
|
-
return [
|
|
664
|
-
return
|
|
665
|
-
} }),
|
|
664
|
+
return [M(H, { get icon() {
|
|
665
|
+
return F(() => !!i())() ? Yn : e.icon;
|
|
666
|
+
} }), F(() => e.children)];
|
|
666
667
|
}
|
|
667
668
|
});
|
|
668
669
|
}
|
|
669
|
-
function
|
|
670
|
-
return
|
|
670
|
+
function nr(e) {
|
|
671
|
+
return M(Te, {
|
|
671
672
|
get tone() {
|
|
672
673
|
return e.tone ?? "var(--muted-foreground)";
|
|
673
674
|
},
|
|
674
675
|
class: "gap-1 tabular-nums",
|
|
675
676
|
get children() {
|
|
676
|
-
return [
|
|
677
|
+
return [M(w, {
|
|
677
678
|
get when() {
|
|
678
679
|
return e.icon;
|
|
679
680
|
},
|
|
680
|
-
children: (e) =>
|
|
681
|
+
children: (e) => M(H, { get icon() {
|
|
681
682
|
return e();
|
|
682
683
|
} })
|
|
683
|
-
}),
|
|
684
|
+
}), F(() => e.children)];
|
|
684
685
|
}
|
|
685
686
|
});
|
|
686
687
|
}
|
|
687
|
-
function
|
|
688
|
+
function rr(e) {
|
|
688
689
|
return (() => {
|
|
689
|
-
var t =
|
|
690
|
-
return
|
|
690
|
+
var t = Gn();
|
|
691
|
+
return P(t, () => e.children), N(() => j(t, J("glasshome-widget-layer", e.class))), t;
|
|
691
692
|
})();
|
|
692
693
|
}
|
|
693
|
-
function
|
|
694
|
+
function ir(e) {
|
|
694
695
|
return (() => {
|
|
695
|
-
var t =
|
|
696
|
-
return
|
|
696
|
+
var t = Kn();
|
|
697
|
+
return P(t, () => e.children), t;
|
|
697
698
|
})();
|
|
698
699
|
}
|
|
699
|
-
function
|
|
700
|
-
let t =
|
|
700
|
+
function ar(e) {
|
|
701
|
+
let t = k(Jn);
|
|
701
702
|
return (() => {
|
|
702
|
-
var n =
|
|
703
|
-
return
|
|
704
|
-
return
|
|
703
|
+
var n = qn();
|
|
704
|
+
return P(n, M(H, { get icon() {
|
|
705
|
+
return F(() => !!t())() ? Yn : e.icon;
|
|
705
706
|
} })), n;
|
|
706
707
|
})();
|
|
707
708
|
}
|
|
708
709
|
//#endregion
|
|
709
710
|
//#region src/framework/theming/tokens.css?raw
|
|
710
|
-
var $n = "/* 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-morph, 400ms);\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", er = !1, tr, nr = /* @__PURE__ */ new WeakSet();
|
|
711
|
-
function
|
|
712
|
-
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 backdrop-filter: var(--widget-backdrop, none);\n -webkit-backdrop-filter: var(--widget-backdrop, none);\n}\n/* The material's fill: an accent wash on a widget that passes no tone of its own. */\n.glasshome-widget:not([data-toned]) {\n --glass-tone: color-mix(\n in srgb,\n var(--material-accent, var(--primary)) calc(var(--_material-fill, 0) * 100%),\n transparent\n );\n --glass-wash: 100%;\n --glass-wash-2: 50%;\n}\n/* A fill widget keeps a neutral card; the fill carries the tone, so a full fill is the toned card. */\n.glasshome-widget:has(.glasshome-widget-slider-fill) {\n --glass-wash: 0%;\n --glass-wash-2: 0%;\n}\n.dark .glasshome-widget {\n --glass-shade: 0;\n}\n/* Ink: the shell's line goes above every widget layer (they stack to 30), or full-bleed media buries it. */\n@container not style(--material-ink-level: 0) {\n .glasshome-widget::after {\n z-index: 40;\n }\n}\n\n/* === Slot: content layout === */\n/* Default: column. Flip to row only on wide-and-short widgets (matches the\n * old contentLayout heuristic: aspect > 1 AND height < 150px). */\n.glasshome-widget-content {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: var(--widget-pad);\n gap: var(--widget-gap);\n overflow: hidden;\n border-radius: var(--widget-radius);\n}\n@container widget (min-aspect-ratio: 1) and (max-height: 149px) {\n .glasshome-widget-content {\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n }\n}\n\n/* === Compact 1×1 ===\n * Small in BOTH axes → stack the tile: icon on top, label + status centered\n * under it. Icon stays moderate (not a hero) so the text keeps room. Wide\n * tiles (2×1) fail the width test and keep the row layout above. Placed after\n * the row-flip so it wins. */\n@container widget (max-width: 189px) and (max-height: 189px) {\n .glasshome-widget-content {\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: clamp(4px, 2.5cqmin, 8px);\n }\n .glasshome-widget-content > * {\n align-items: center;\n text-align: center;\n }\n .glasshome-widget-icon {\n --widget-icon-box: clamp(36px, 30cqmin, 56px);\n --widget-icon-glyph: clamp(20px, 17cqmin, 32px);\n }\n .glasshome-widget-title {\n font-size: clamp(11px, 6cqmin, 14px);\n max-width: 100%;\n }\n .glasshome-widget-status,\n .glasshome-widget-value {\n font-size: clamp(13px, 7cqmin, 17px);\n }\n .glasshome-widget-content [class*=\"ml-auto\"] {\n margin-left: 0 !important;\n }\n}\n.glasshome-widget-content [class*=\"ml-auto\"] {\n position: relative;\n z-index: 30;\n}\n\n/* === Slot: icon ===\n * ui's tinted icon pill (ICON_PILL_TINT): the disc is .glass, so the material shapes it. */\n.glasshome-widget-icon {\n width: var(--widget-icon-box);\n height: var(--widget-icon-box);\n border-radius: var(--radius-sm, 12px);\n --glass-tone: var(--widget-icon-color, var(--widget-color));\n --glass-rim: 0.4;\n --glass-wash: 18%;\n}\n.glasshome-widget-icon-glyph {\n font-size: var(--widget-icon-glyph);\n line-height: 1;\n}\n.glasshome-widget-icon-stack {\n --stack-step: calc(var(--widget-icon-box) * 0.12);\n position: absolute;\n /* The pill's border would otherwise shrink each plate and widen the first step. */\n inset: -1px;\n width: auto;\n height: auto;\n border-radius: var(--radius-sm, 12px);\n}\n.glasshome-widget-icon-stack-2 {\n translate: var(--stack-step) var(--stack-step);\n opacity: 0.45;\n z-index: -2;\n}\n.glasshome-widget-icon-stack-3 {\n translate: calc(2 * var(--stack-step)) calc(2 * var(--stack-step));\n opacity: 0.2;\n z-index: -3;\n}\n\n/* === Slot: text === */\n.glasshome-widget-title {\n font-size: var(--widget-title-size);\n line-height: 1.2;\n color: var(--color-muted-foreground, currentColor);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.glasshome-widget-subtitle {\n font-size: var(--widget-subtitle);\n color: var(--color-muted-foreground, currentColor);\n}\n.glasshome-widget-status {\n font-size: var(--widget-status-size);\n font-weight: 700;\n color: var(--color-foreground, currentColor);\n line-height: 1.1;\n}\n.glasshome-widget-value {\n font-size: var(--widget-value-size);\n font-weight: 700;\n color: var(--color-foreground, currentColor);\n line-height: 1.05;\n}\n.glasshome-widget-badge {\n font-size: var(--widget-badge-size);\n font-weight: 500;\n padding: 0.125rem 0.5rem;\n border-radius: 9999px;\n background: color-mix(in oklch, var(--color-foreground, currentColor) 20%, transparent);\n color: var(--color-foreground, currentColor);\n}\n\n.glasshome-widget-loading {\n background: color-mix(in oklch, var(--widget-color) 20%, transparent);\n}\n\n/* === Slider fill ===\n * Value flows in via --widget-fill-value (0-100). Vertical orientation auto-\n * detected via container query. */\n.glasshome-widget-slider-fill {\n --widget-fill-value: 0;\n background: linear-gradient(\n 135deg,\n color-mix(\n in srgb,\n var(--widget-color) calc(var(--widget-wash) * var(--material-tint, 1)),\n transparent\n ),\n color-mix(\n in srgb,\n var(--widget-color-to, var(--widget-color))\n calc(var(--widget-wash-2) * var(--material-tint, 1)),\n transparent\n )\n );\n /* Inset: the clip-path cuts any outer shadow. */\n box-shadow: inset 0 0 calc(var(--material-glow, 0px) * 1.2)\n oklch(from var(--widget-color) l c h / 0.55);\n clip-path: inset(0 calc((100 - var(--widget-fill-value)) * 1%) 0 0 round var(--widget-radius));\n}\n@container widget (max-aspect-ratio: 1) {\n .glasshome-widget-slider-fill {\n clip-path: inset(calc((100 - var(--widget-fill-value)) * 1%) 0 0 0 round var(--widget-radius));\n }\n}\n\n/* === Anatomy: Widget.Content with a Widget.Head lays its parts out as a tile === */\n.glasshome-widget-grid {\n position: relative;\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr) auto;\n gap: var(--widget-grid-gap);\n height: 100%;\n padding: var(--widget-grid-pad);\n overflow: hidden;\n isolation: isolate;\n color: var(--foreground);\n}\n\n/* In-flow content spans the tile (the max-content first column would collapse it); absolute parts keep the padding box. */\n.glasshome-widget-grid\n > :where(:not(.glasshome-widget-backdrop, .glasshome-widget-layer, .glasshome-widget-glyph)) {\n grid-column: 1 / -1;\n}\n.glasshome-widget-layer {\n position: absolute;\n inset: 0;\n z-index: -1;\n overflow: hidden;\n}\n.glasshome-widget-head {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n min-width: 0;\n}\n.glasshome-widget-head-text {\n min-height: var(--widget-icon-box);\n justify-content: center;\n display: flex;\n flex-direction: column;\n gap: 1px;\n min-width: 0;\n flex: 1;\n}\n.glasshome-widget-head-aside {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 6px;\n max-height: 26px;\n overflow: hidden;\n flex-shrink: 1;\n}\n.glasshome-widget-eyebrow {\n font-size: var(--widget-text-meta);\n font-weight: 500;\n line-height: 1.25;\n color: var(--muted-foreground);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.glasshome-widget-name {\n font-size: var(--widget-text-name);\n font-weight: 650;\n line-height: 1.2;\n letter-spacing: -0.01em;\n color: var(--foreground);\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n overflow-wrap: break-word;\n}\n\n.glasshome-widget-hero {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: var(--widget-grid-gap);\n min-height: 0;\n min-width: 0;\n}\n.glasshome-widget-reading {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n z-index: 1;\n}\n.glasshome-widget-reading-value {\n font-size: var(--widget-text-value);\n font-weight: 650;\n line-height: 1;\n letter-spacing: -0.03em;\n font-variant-numeric: tabular-nums;\n color: var(--foreground);\n white-space: nowrap;\n}\n/* Alternating names restart the rise on each change without rebuilding the text. */\n.glasshome-widget-reading-value[data-turn=\"a\"] {\n animation: tile-value-in-a var(--duration-morph) var(--ease-morph);\n}\n.glasshome-widget-reading-value[data-turn=\"b\"] {\n animation: tile-value-in-b var(--duration-morph) var(--ease-morph);\n}\n@keyframes tile-value-in-a {\n from {\n opacity: 0;\n transform: translateY(0.25em);\n }\n}\n@keyframes tile-value-in-b {\n from {\n opacity: 0;\n transform: translateY(0.25em);\n }\n}\n.glasshome-widget-unit {\n font-size: 0.5em;\n font-weight: 550;\n letter-spacing: 0;\n margin-left: 0.08em;\n color: var(--muted-foreground);\n}\n.glasshome-widget-sub {\n font-size: var(--widget-text-sub);\n font-weight: 500;\n color: var(--muted-foreground);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Placed on the tile, not the hero, so a control row never moves or shrinks it. */\n.glasshome-widget-art {\n position: absolute;\n right: var(--widget-grid-pad);\n bottom: var(--widget-grid-pad);\n height: min(\n calc(100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - var(--widget-grid-gap)),\n 48cqi\n );\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n pointer-events: none;\n}\n/* Beside art a long word (\"Unlocked\") shrinks to end where the art starts, at about 50cqi; short values keep full size. */\n@container widget (min-width: 180px) and (min-height: 130px) {\n .glasshome-widget-hero[data-art] .glasshome-widget-reading-value {\n font-size: max(18px, min(var(--widget-text-value), calc(50cqi / (var(--value-len, 1) * 0.56))));\n }\n}\n.glasshome-widget-backdrop > img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n/* Art keeps its shape and clears a state word at its largest (15cqi, about 3.4em); each art sets --art-aspect. */\n.glasshome-widget-grid .glasshome-widget-art > * {\n height: min(\n 100%,\n calc((52cqi - 2 * var(--widget-grid-pad) - var(--widget-grid-gap)) / var(--art-aspect, 1))\n );\n flex-shrink: 0;\n}\n.glasshome-widget-grid .glasshome-widget-art > img {\n width: auto;\n height: auto;\n max-height: 100%;\n max-width: calc(52cqi - 2 * var(--widget-grid-pad) - var(--widget-grid-gap));\n}\n\n.glasshome-widget-controls {\n display: flex;\n gap: 8px;\n min-width: 0;\n}\n\n.glasshome-widget-glyph {\n display: none;\n position: absolute;\n right: -8%;\n bottom: -22%;\n font-size: min(130cqb, 80cqi);\n line-height: 1;\n color: var(--widget-color);\n opacity: 0.16;\n pointer-events: none;\n z-index: -1;\n}\n\n/* Controls sit on the bottom row beside the value, or under it on a narrow tile; the art lifts above them. */\n.glasshome-widget-head {\n grid-column: 1 / -1;\n}\n.glasshome-widget-hero {\n grid-row: 3;\n grid-column: 1 / -1;\n}\n.glasshome-widget-grid:has(> .glasshome-widget-controls) > .glasshome-widget-hero {\n grid-column: 1;\n}\n.glasshome-widget-controls {\n grid-row: 3;\n grid-column: 2;\n align-self: end;\n position: relative;\n z-index: 1;\n}\n.glasshome-widget-grid:has(> .glasshome-widget-hero[data-empty]) > .glasshome-widget-controls {\n grid-column: 1 / -1;\n}\n@container widget (max-width: 519px) {\n .glasshome-widget-grid:has(> .glasshome-widget-controls) {\n grid-template-rows: auto minmax(0, 1fr) auto auto;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) > .glasshome-widget-hero {\n grid-column: 1 / -1;\n }\n .glasshome-widget-controls {\n grid-row: 4;\n grid-column: 1 / -1;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) .glasshome-widget-art {\n bottom: calc(var(--widget-grid-pad) + var(--widget-control-h) + var(--widget-grid-gap));\n height: min(\n calc(\n 100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - 2 * var(--widget-grid-gap) -\n var(--widget-control-h)\n ),\n 48cqi\n );\n }\n}\n@container widget (max-height: 229px) {\n .glasshome-widget-controls {\n display: none;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) {\n grid-template-rows: auto minmax(0, 1fr) auto;\n }\n .glasshome-widget-grid:has(> .glasshome-widget-controls) .glasshome-widget-art {\n bottom: var(--widget-grid-pad);\n height: min(\n calc(100% - 2 * var(--widget-grid-pad) - var(--widget-icon-box) - var(--widget-grid-gap)),\n 48cqi\n );\n }\n}\n@container widget (max-width: 179px) {\n .glasshome-widget-art {\n display: none;\n }\n}\n@container widget (max-height: 169px) {\n .glasshome-widget-head-aside {\n display: none;\n }\n}\n@container widget ((max-height: 129px) or (max-width: 139px)) {\n .glasshome-widget-head-text {\n min-height: 0;\n }\n .glasshome-widget-name {\n -webkit-line-clamp: 1;\n }\n .glasshome-widget-grid {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 2px;\n }\n .glasshome-widget-head-icon,\n .glasshome-widget-art,\n .glasshome-widget-eyebrow,\n .glasshome-widget-sub {\n display: none;\n }\n .glasshome-widget-glyph {\n display: block;\n }\n .glasshome-widget-reading-value {\n font-size: clamp(18px, min(34cqb, 20cqi), 30px);\n }\n .glasshome-widget-name {\n font-size: clamp(12px, min(18cqb, 11cqi), 15px);\n font-weight: 550;\n color: var(--muted-foreground);\n }\n}\n@container widget (max-height: 129px) and (min-width: 260px) {\n .glasshome-widget-grid {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: var(--widget-grid-gap);\n }\n .glasshome-widget-name {\n font-size: clamp(14px, 22cqb, 18px);\n font-weight: 650;\n color: var(--foreground);\n }\n .glasshome-widget-eyebrow {\n display: block;\n }\n}\n\n.glasshome-widget-backdrop {\n position: absolute;\n inset: 0;\n z-index: -2;\n overflow: hidden;\n}\n.glasshome-widget-backdrop > img.area-night {\n opacity: 0;\n transition: opacity 700ms ease;\n}\n.glasshome-widget-backdrop > img.area-night[data-visible] {\n opacity: 1;\n}\n.glasshome-widget-backdrop > .glasshome-widget-backdrop-light {\n position: absolute;\n inset: 0;\n background: radial-gradient(90% 80% at 25% 30%, oklch(0.8 0.14 70), transparent 70%);\n mix-blend-mode: soft-light;\n opacity: var(--backdrop-light, 0);\n transition: opacity 500ms ease;\n}\n.glasshome-widget-backdrop::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: linear-gradient(\n to bottom,\n color-mix(in oklch, var(--card) 82%, transparent) 0%,\n color-mix(in oklch, var(--card) 40%, transparent) 22%,\n transparent 42%,\n transparent 62%,\n color-mix(in oklch, var(--card) 45%, transparent) 82%,\n color-mix(in oklch, var(--card) 80%, transparent) 100%\n );\n}\n\n@container widget (max-width: 239px) {\n .glasshome-widget-choice [data-optional] {\n display: none;\n }\n}\n@container widget (max-width: 259px) {\n .glasshome-widget-head-aside {\n display: none;\n }\n}\n@container widget (max-width: 139px) {\n .glasshome-widget-controls {\n display: none;\n }\n}\n\n.glasshome-widget-controls {\n justify-content: flex-start;\n align-items: center;\n}\n.glasshome-widget-control.glasshome-widget-control {\n width: var(--widget-control-h);\n height: var(--widget-control-h);\n}\n.glasshome-widget-choice .glasshome-widget-control.glasshome-widget-control {\n width: calc(var(--widget-control-h) - 8px);\n height: calc(var(--widget-control-h) - 8px);\n}\n@container widget (max-width: 179px) and (min-height: 130px) {\n .glasshome-widget-grid:not(:has(> .glasshome-widget-backdrop)) .glasshome-widget-head-text {\n min-height: 0;\n }\n .glasshome-widget-grid:not(:has(> .glasshome-widget-backdrop)) .glasshome-widget-head {\n flex-direction: column;\n gap: 6px;\n }\n}\n.glasshome-widget-unit[data-degree] {\n vertical-align: top;\n margin-left: 0.02em;\n color: var(--foreground);\n}\n.glasshome-widget-control-wide.glasshome-widget-control-wide {\n height: var(--widget-control-h);\n gap: 6px;\n padding: 0 14px;\n}\n@container widget (max-width: 179px) {\n .glasshome-widget-grid:has(> .glasshome-widget-backdrop) .glasshome-widget-head-icon {\n display: none;\n }\n}\n.glasshome-widget-grid:has(> .glasshome-widget-backdrop)\n :is(\n .glasshome-widget-reading-value,\n .glasshome-widget-sub,\n .glasshome-widget-name,\n .glasshome-widget-eyebrow\n ) {\n text-shadow: 0 1px 8px color-mix(in oklch, var(--card) 75%, transparent);\n}\n.glasshome-widget-grid:has(> .glasshome-widget-backdrop)\n :is(.glasshome-widget-sub, .glasshome-widget-eyebrow) {\n color: color-mix(in oklch, var(--foreground) 82%, transparent);\n}\n/* Control glyphs and words keep their share of a control as it grows past 4x4. */\n.glasshome-widget-grid\n :is(.glasshome-widget-control, .glasshome-widget-control-wide)\n :is(iconify-icon, svg) {\n font-size: calc(var(--widget-control-h) * 0.43);\n width: 1em;\n height: 1em;\n}\n:is(.glasshome-widget-controls, .glasshome-widget-control-wide) {\n font-size: max(13px, calc(var(--widget-control-h) * 0.3));\n}\n/* A big tile with no art of its own carries its icon large and faint, so the glass is not an empty box. */\n@container widget (min-width: 300px) and (min-height: 260px) {\n .glasshome-widget-grid:not(\n :has(> .glasshome-widget-backdrop),\n :has(> .glasshome-widget-hero[data-art], > .glasshome-widget-art, > .glasshome-widget-layer)\n )\n > .glasshome-widget-glyph {\n display: block;\n right: -3%;\n bottom: -12%;\n font-size: min(78cqb, 52cqi);\n opacity: 0.1;\n }\n}\n/* A one-shot action confirms on its control and on the glyph, the one thing a compact tile shows. */\n.glasshome-widget-grid > .glasshome-widget-glyph {\n transition: opacity var(--duration-state) var(--ease-morph);\n}\n.glasshome-widget[data-confirmed] .glasshome-widget-glyph {\n opacity: 0.5;\n}\n.glasshome-widget-grid\n [data-confirmed]:is(.glasshome-widget-control, .glasshome-widget-control-wide) {\n --glass-base: color-mix(in srgb, var(--widget-color) 35%, transparent);\n transition: background-color var(--duration-state) var(--ease-morph);\n}\n\n/* === Sheet: what a held tile opens (framework/panel) ===\n * Rendered in a popover or dialog outside the widget's shadow root, so every rule\n * the sheet needs lives here, never in a widget's own utilities. */\n.glasshome-sheet {\n display: flex;\n flex-direction: column;\n gap: 18px;\n color: var(--foreground);\n}\n.glasshome-sheet [data-slot=\"swatch-picker\"] {\n max-width: 360px;\n}\n.glasshome-panel-section {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n.glasshome-panel-label {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n color: var(--muted-foreground);\n}\n.glasshome-panel-rows {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 8px;\n}\n.glasshome-panel-row-wrap {\n position: relative;\n min-width: 0;\n}\n.glasshome-panel-row {\n --widget-wash: 22%;\n --widget-wash-2: 11%;\n --widget-radius: var(--radius-lg, 16px);\n --widget-icon-box: 34px;\n --widget-icon-glyph: 19px;\n position: relative;\n width: 100%;\n height: 56px;\n justify-content: flex-start;\n gap: 10px;\n padding: 0 12px 0 10px;\n overflow: hidden;\n text-align: left;\n touch-action: pan-y;\n}\n.glasshome-panel-row-static {\n cursor: default;\n scale: none;\n}\n.glasshome-panel-row-fill {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n.glasshome-panel-row-icon {\n position: relative;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n}\n.glasshome-panel-row-icon-off {\n color: var(--muted-foreground);\n}\n.glasshome-panel-row-text {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.glasshome-panel-row-name,\n.glasshome-panel-row-state,\n.glasshome-panel-fact-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n/* A reading may take a second line rather than lose its end (\"3 Moderate\"). */\n.glasshome-panel-fact-value {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.glasshome-panel-row-name,\n.glasshome-panel-fact-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--foreground);\n}\n.glasshome-panel-row-state,\n.glasshome-panel-fact-label {\n font-size: 12px;\n font-weight: 400;\n color: var(--muted-foreground);\n}\n.glasshome-panel-row-trailing {\n position: absolute;\n top: 50%;\n right: 10px;\n translate: 0 -50%;\n}\n.glasshome-panel-facts {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));\n row-gap: 10px;\n padding: 10px 4px 10px 0;\n overflow: hidden;\n border-radius: var(--radius-lg, 16px);\n --glass-base: color-mix(in srgb, var(--card) var(--material-clarity, 60%), transparent);\n backdrop-filter: blur(calc(var(--material-blur, 24px) * 0.6)) saturate(1.6);\n -webkit-backdrop-filter: blur(calc(var(--material-blur, 24px) * 0.6)) saturate(1.6);\n}\n/* Without blur a see-through strip is just see-through: it takes the card fill. */\n.reduce-blur .glasshome-panel-facts {\n --glass-base: var(--card);\n}\n.glasshome-panel-fact {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 8px;\n padding: 0 12px;\n box-shadow: -1px 0 0 color-mix(in oklch, var(--foreground) 10%, transparent);\n}\n.glasshome-panel-fact-icon {\n flex-shrink: 0;\n font-size: 18px;\n color: var(--muted-foreground);\n}\n\n/* Inset: the grid cell clips anything drawn outside the tile. */\n.glasshome-widget:focus-visible {\n outline: 2px solid var(--ring);\n outline-offset: -2px;\n}\n\n/* === Hold flood: the dock's hold fill (ui HOLD_MOTION), grown from the finger === */\n.glasshome-widget-hold-flood {\n position: absolute;\n translate: -50% -50%;\n border-radius: 9999px;\n background: color-mix(in oklch, var(--primary) 45%, transparent);\n pointer-events: none;\n scale: 0;\n opacity: 0;\n transition:\n scale var(--duration-state, 200ms) var(--ease-contract, ease-in),\n opacity var(--duration-state, 200ms) var(--ease-contract, ease-in);\n}\n.glasshome-widget-hold-flood[data-hold] {\n scale: 1;\n opacity: 1;\n transition-duration: var(--duration-hold, 250ms);\n transition-timing-function: linear;\n}\n.glasshome-widget-hold-flood[data-fired] {\n scale: 1;\n opacity: 0;\n}\n/* A row of ui buttons in a sheet (scenes, one-tap actions). */\n.glasshome-sheet-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n/* The sheet wears its tile: the tile's tone washed into the glass, its picture as a band behind\n the head that fades into the glass, so the tile reads as having grown open. */\n.glasshome-sheet-surface {\n --glass-wash: 20%;\n --glass-wash-2: 7%;\n --widget-icon-box: 48px;\n --widget-icon-glyph: 26px;\n}\n.glasshome-sheet-band {\n position: absolute;\n inset: 0 0 auto;\n height: 150px;\n overflow: hidden;\n pointer-events: none;\n mask-image: linear-gradient(180deg, #000 30%, transparent);\n}\n.glasshome-sheet-band > img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n opacity: 0.55;\n}\n.glasshome-sheet-surface > [data-slot$=\"-header\"],\n.glasshome-sheet-surface > [data-slot$=\"-body\"] {\n position: relative;\n}\n.glasshome-sheet-icon {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n", sr = !1, cr, lr = /* @__PURE__ */ new WeakSet();
|
|
712
|
+
function ur() {
|
|
713
|
+
return cr || (cr = new CSSStyleSheet(), cr.replaceSync(or.replace(/:root\b/g, ":host").replace(/^\.dark\b/gm, ":host(.dark)"))), cr;
|
|
713
714
|
}
|
|
714
|
-
function
|
|
715
|
+
function dr(e) {
|
|
715
716
|
if (typeof ShadowRoot < "u" && e instanceof ShadowRoot) {
|
|
716
|
-
if (
|
|
717
|
-
let t =
|
|
718
|
-
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);
|
|
719
720
|
return;
|
|
720
721
|
}
|
|
721
|
-
if (
|
|
722
|
+
if (sr) return;
|
|
722
723
|
let t = e ?? (typeof document > "u" ? void 0 : document);
|
|
723
724
|
if (!t) return;
|
|
724
725
|
if (t.head.querySelector?.("style[data-glasshome-tokens]")) {
|
|
725
|
-
|
|
726
|
+
sr = !0;
|
|
726
727
|
return;
|
|
727
728
|
}
|
|
728
729
|
let n = t.createElement("style");
|
|
729
|
-
n.setAttribute("data-glasshome-tokens", ""), n.textContent =
|
|
730
|
+
n.setAttribute("data-glasshome-tokens", ""), n.textContent = or, t.head.appendChild(n), sr = !0;
|
|
730
731
|
}
|
|
731
732
|
//#endregion
|
|
732
733
|
//#region src/framework/variants/built-in-variants.ts
|
|
733
|
-
var
|
|
734
|
+
var fr = {
|
|
734
735
|
"classic-glass": { cssVars: {
|
|
735
736
|
"--widget-padding": "1.5rem",
|
|
736
|
-
"--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))"
|
|
737
738
|
} },
|
|
738
739
|
minimal: { cssVars: {
|
|
739
740
|
"--widget-padding": "1rem",
|
|
@@ -750,21 +751,21 @@ var ar = {
|
|
|
750
751
|
"--widget-backdrop": "blur(16px) saturate(1.8)"
|
|
751
752
|
} }
|
|
752
753
|
};
|
|
753
|
-
function
|
|
754
|
-
return Object.hasOwn(
|
|
754
|
+
function pr(e) {
|
|
755
|
+
return Object.hasOwn(fr, e) ? fr[e] : void 0;
|
|
755
756
|
}
|
|
756
757
|
//#endregion
|
|
757
758
|
//#region src/framework/backgrounds/WidgetSliderFill.tsx
|
|
758
|
-
var
|
|
759
|
-
function
|
|
760
|
-
return e.color !== void 0 &&
|
|
761
|
-
var t =
|
|
762
|
-
return
|
|
763
|
-
var r =
|
|
759
|
+
var mr = /*#__PURE__*/ z("<div>"), hr = e(() => void 0, "sliderFill.color");
|
|
760
|
+
function gr(e) {
|
|
761
|
+
return e.color !== void 0 && hr(), (() => {
|
|
762
|
+
var t = mr();
|
|
763
|
+
return N((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 = {
|
|
764
765
|
"--widget-fill-value": e.value,
|
|
765
|
-
"z-index":
|
|
766
|
+
"z-index": an.BACKGROUND
|
|
766
767
|
};
|
|
767
|
-
return r !== n.e &&
|
|
768
|
+
return r !== n.e && j(t, n.e = r), n.t = R(t, i, n.t), n;
|
|
768
769
|
}, {
|
|
769
770
|
e: void 0,
|
|
770
771
|
t: void 0
|
|
@@ -773,16 +774,16 @@ function lr(e) {
|
|
|
773
774
|
}
|
|
774
775
|
//#endregion
|
|
775
776
|
//#region src/framework/components/WidgetContent.tsx
|
|
776
|
-
var
|
|
777
|
-
function
|
|
778
|
-
let t =
|
|
779
|
-
|
|
780
|
-
let n =
|
|
777
|
+
var _r = /*#__PURE__*/ z("<div>"), vr = /\bglasshome-widget-(head|hero|controls|backdrop|glyph|layer)\b/;
|
|
778
|
+
function yr(e) {
|
|
779
|
+
let t = un(k(U));
|
|
780
|
+
T(() => t?.setAccent(e.accent)), O(() => t?.setAccent(void 0));
|
|
781
|
+
let n = me(() => e.children), r = E(() => n.toArray().some((e) => e instanceof Element && vr.test(e.className)));
|
|
781
782
|
return (() => {
|
|
782
|
-
var t =
|
|
783
|
-
return
|
|
784
|
-
var i =
|
|
785
|
-
return i !== n.e &&
|
|
783
|
+
var t = _r();
|
|
784
|
+
return P(t, n), N((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 && j(t, n.e = i), n.t = R(t, a, n.t), n;
|
|
786
787
|
}, {
|
|
787
788
|
e: void 0,
|
|
788
789
|
t: void 0
|
|
@@ -791,16 +792,16 @@ function fr(e) {
|
|
|
791
792
|
}
|
|
792
793
|
//#endregion
|
|
793
794
|
//#region src/framework/components/WidgetStatus.tsx
|
|
794
|
-
var
|
|
795
|
-
function
|
|
795
|
+
var br = /*#__PURE__*/ z("<p>");
|
|
796
|
+
function xr(e) {
|
|
796
797
|
return (() => {
|
|
797
|
-
var t =
|
|
798
|
-
return
|
|
799
|
-
var t =
|
|
798
|
+
var t = br();
|
|
799
|
+
return P(t, (() => {
|
|
800
|
+
var t = F(() => !!e.isUnavailable);
|
|
800
801
|
return () => t() ? "Unavailable" : e.children;
|
|
801
|
-
})()),
|
|
802
|
-
var r =
|
|
803
|
-
return r !== n.e &&
|
|
802
|
+
})()), N((n) => {
|
|
803
|
+
var r = J("glasshome-widget-status", "relative", e.dimmed && "opacity-40", e.class), i = an.ACTIONS;
|
|
804
|
+
return r !== n.e && j(t, n.e = r), i !== n.t && L(t, "z-index", n.t = i), n;
|
|
804
805
|
}, {
|
|
805
806
|
e: void 0,
|
|
806
807
|
t: void 0
|
|
@@ -809,21 +810,21 @@ function mr(e) {
|
|
|
809
810
|
}
|
|
810
811
|
//#endregion
|
|
811
812
|
//#region src/framework/components/WidgetTitle.tsx
|
|
812
|
-
var
|
|
813
|
-
function
|
|
813
|
+
var Sr = /*#__PURE__*/ z("<span class=\"glasshome-widget-badge shrink-0\">"), Cr = /*#__PURE__*/ z("<div><h3 class=glasshome-widget-title>");
|
|
814
|
+
function wr(e) {
|
|
814
815
|
return (() => {
|
|
815
|
-
var t =
|
|
816
|
-
return
|
|
816
|
+
var t = Cr(), n = t.firstChild;
|
|
817
|
+
return P(n, () => e.children), P(t, M(w, {
|
|
817
818
|
get when() {
|
|
818
|
-
return
|
|
819
|
+
return F(() => e.badge !== void 0)() && e.badge > 0;
|
|
819
820
|
},
|
|
820
821
|
get children() {
|
|
821
|
-
var t =
|
|
822
|
-
return
|
|
822
|
+
var t = Sr();
|
|
823
|
+
return P(t, () => e.badge), t;
|
|
823
824
|
}
|
|
824
|
-
}), null),
|
|
825
|
-
var r =
|
|
826
|
-
return r !== n.e &&
|
|
825
|
+
}), null), N((n) => {
|
|
826
|
+
var r = J("relative flex items-center gap-2", e.class), i = an.ACTIONS;
|
|
827
|
+
return r !== n.e && j(t, n.e = r), i !== n.t && L(t, "z-index", n.t = i), n;
|
|
827
828
|
}, {
|
|
828
829
|
e: void 0,
|
|
829
830
|
t: void 0
|
|
@@ -832,14 +833,14 @@ function _r(e) {
|
|
|
832
833
|
}
|
|
833
834
|
//#endregion
|
|
834
835
|
//#region src/framework/utils/clipboard.ts
|
|
835
|
-
async function
|
|
836
|
+
async function Tr(e) {
|
|
836
837
|
if (navigator.clipboard?.writeText) try {
|
|
837
838
|
return await navigator.clipboard.writeText(e), !0;
|
|
838
839
|
} catch {}
|
|
839
|
-
return
|
|
840
|
+
return Er(e);
|
|
840
841
|
}
|
|
841
|
-
function
|
|
842
|
-
let t =
|
|
842
|
+
function Er(e) {
|
|
843
|
+
let t = Dr(), n = document.createElement("textarea");
|
|
843
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);
|
|
844
845
|
try {
|
|
845
846
|
return n.focus(), n.select(), n.setSelectionRange(0, e.length), n.getRootNode().activeElement === n && document.execCommand("copy");
|
|
@@ -849,23 +850,23 @@ function yr(e) {
|
|
|
849
850
|
n.remove(), t?.focus();
|
|
850
851
|
}
|
|
851
852
|
}
|
|
852
|
-
function
|
|
853
|
+
function Dr() {
|
|
853
854
|
let e = document.activeElement;
|
|
854
855
|
for (; e?.shadowRoot?.activeElement;) e = e.shadowRoot.activeElement;
|
|
855
856
|
return e instanceof HTMLElement ? e : null;
|
|
856
857
|
}
|
|
857
|
-
function
|
|
858
|
-
let [t, n] =
|
|
859
|
-
return
|
|
858
|
+
function Or(e = 2e3) {
|
|
859
|
+
let [t, n] = D("idle"), r;
|
|
860
|
+
return O(() => clearTimeout(r)), {
|
|
860
861
|
state: t,
|
|
861
862
|
copy: async (t) => {
|
|
862
|
-
n(await
|
|
863
|
+
n(await Tr(t) ? "copied" : "failed"), clearTimeout(r), r = setTimeout(() => n("idle"), e);
|
|
863
864
|
}
|
|
864
865
|
};
|
|
865
866
|
}
|
|
866
867
|
//#endregion
|
|
867
868
|
//#region src/framework/utils/entity-aggregation.ts
|
|
868
|
-
function
|
|
869
|
+
function kr(e, t = !1) {
|
|
869
870
|
let n = e[0];
|
|
870
871
|
if (!n) return {
|
|
871
872
|
isGroup: !1,
|
|
@@ -889,7 +890,7 @@ function Sr(e, t = !1) {
|
|
|
889
890
|
isUnavailable: e.state === "unavailable",
|
|
890
891
|
brightness: r,
|
|
891
892
|
brightnessPercent: i,
|
|
892
|
-
color:
|
|
893
|
+
color: Mr(e),
|
|
893
894
|
onCount: +!!t,
|
|
894
895
|
totalCount: 1,
|
|
895
896
|
description: t ? "On" : "Off"
|
|
@@ -901,7 +902,7 @@ function Sr(e, t = !1) {
|
|
|
901
902
|
if (i++, t.attributes?.brightness !== void 0 && (c += t.attributes.brightness, l++), t.attributes?.rgb_color) u.push(t.attributes.rgb_color);
|
|
902
903
|
else if (t.attributes?.hs_color) {
|
|
903
904
|
let [e, n] = t.attributes.hs_color;
|
|
904
|
-
u.push(
|
|
905
|
+
u.push(jr(e, n));
|
|
905
906
|
}
|
|
906
907
|
break;
|
|
907
908
|
case "off":
|
|
@@ -912,28 +913,28 @@ function Sr(e, t = !1) {
|
|
|
912
913
|
break;
|
|
913
914
|
case "unavailable": s++;
|
|
914
915
|
}
|
|
915
|
-
let d = e.length, f = s === d, p = o + s === d, m = i > 0, h = i === d,
|
|
916
|
-
t ? f ? (
|
|
917
|
-
let
|
|
916
|
+
let d = e.length, f = s === d, p = o + s === d, m = i > 0, h = i === d, ee = a === d, g, _;
|
|
917
|
+
t ? f ? (g = "unavailable", _ = !1) : o > 0 || s > 0 ? (g = "unknown", _ = !1) : a > 0 ? (g = "off", _ = !1) : (g = "on", _ = !0) : f ? (g = "unavailable", _ = !1) : p ? (g = "unknown", _ = !1) : m ? (g = "on", _ = !0) : (g = "off", _ = !1);
|
|
918
|
+
let v = l > 0 ? Math.round(c / l) : 0, y = Math.round(v / 255 * 100), b;
|
|
918
919
|
if (u.length > 0) {
|
|
919
|
-
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 =
|
|
920
|
-
|
|
921
|
-
} else
|
|
922
|
-
let
|
|
923
|
-
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 = v / 255;
|
|
921
|
+
b = `rgb(${Math.round(e * r)}, ${Math.round(t * r)}, ${Math.round(n * r)})`;
|
|
922
|
+
} else b = Mr(n);
|
|
923
|
+
let x;
|
|
924
|
+
return x = h ? "All on" : ee ? "All off" : i > 0 ? `${i} of ${d} on` : "Off", {
|
|
924
925
|
isGroup: r,
|
|
925
|
-
state:
|
|
926
|
-
isOn:
|
|
927
|
-
isUnavailable:
|
|
928
|
-
brightness:
|
|
929
|
-
brightnessPercent:
|
|
930
|
-
color:
|
|
926
|
+
state: g,
|
|
927
|
+
isOn: _,
|
|
928
|
+
isUnavailable: g === "unavailable",
|
|
929
|
+
brightness: v,
|
|
930
|
+
brightnessPercent: y,
|
|
931
|
+
color: b,
|
|
931
932
|
onCount: i,
|
|
932
933
|
totalCount: d,
|
|
933
|
-
description:
|
|
934
|
+
description: x
|
|
934
935
|
};
|
|
935
936
|
}
|
|
936
|
-
function
|
|
937
|
+
function Ar(e, t = "mean", n = !0) {
|
|
937
938
|
let r = e[0];
|
|
938
939
|
if (!r) return {
|
|
939
940
|
isGroup: !1,
|
|
@@ -1030,7 +1031,7 @@ function Cr(e, t = "mean", n = !0) {
|
|
|
1030
1031
|
memberValues: o
|
|
1031
1032
|
};
|
|
1032
1033
|
}
|
|
1033
|
-
function
|
|
1034
|
+
function jr(e, t) {
|
|
1034
1035
|
let n = t / 100, r = n * (1 - Math.abs(e / 60 % 2 - 1)), i = 1 - n, a = 0, o = 0, s = 0;
|
|
1035
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], [
|
|
1036
1037
|
(a + i) * 255,
|
|
@@ -1038,7 +1039,7 @@ function wr(e, t) {
|
|
|
1038
1039
|
(s + i) * 255
|
|
1039
1040
|
];
|
|
1040
1041
|
}
|
|
1041
|
-
function
|
|
1042
|
+
function Mr(e) {
|
|
1042
1043
|
if (e.state !== "on") return "rgb(100, 100, 100)";
|
|
1043
1044
|
let t = (e.attributes?.brightness ?? 255) / 255;
|
|
1044
1045
|
if (e.attributes?.rgb_color) {
|
|
@@ -1046,7 +1047,7 @@ function Tr(e) {
|
|
|
1046
1047
|
return `rgb(${Math.round(n * t)}, ${Math.round(r * t)}, ${Math.round(i * t)})`;
|
|
1047
1048
|
}
|
|
1048
1049
|
if (e.attributes?.hs_color) {
|
|
1049
|
-
let [n, r] = e.attributes.hs_color, [i, a, o] =
|
|
1050
|
+
let [n, r] = e.attributes.hs_color, [i, a, o] = jr(n, r);
|
|
1050
1051
|
return `rgb(${Math.round(i * t)}, ${Math.round(a * t)}, ${Math.round(o * t)})`;
|
|
1051
1052
|
}
|
|
1052
1053
|
if (e.attributes?.color_temp) {
|
|
@@ -1057,7 +1058,7 @@ function Tr(e) {
|
|
|
1057
1058
|
}
|
|
1058
1059
|
//#endregion
|
|
1059
1060
|
//#region src/framework/utils/entity-state.ts
|
|
1060
|
-
function
|
|
1061
|
+
function Nr(e) {
|
|
1061
1062
|
if (!e) return !1;
|
|
1062
1063
|
if ([
|
|
1063
1064
|
"on",
|
|
@@ -1073,15 +1074,15 @@ function Er(e) {
|
|
|
1073
1074
|
}
|
|
1074
1075
|
return !1;
|
|
1075
1076
|
}
|
|
1076
|
-
function
|
|
1077
|
+
function Pr(e, t, n) {
|
|
1077
1078
|
return e?.attributes ? e.attributes[t] ?? n : n;
|
|
1078
1079
|
}
|
|
1079
|
-
function
|
|
1080
|
-
return e.filter(
|
|
1080
|
+
function Fr(e) {
|
|
1081
|
+
return e.filter(Nr).length;
|
|
1081
1082
|
}
|
|
1082
1083
|
//#endregion
|
|
1083
1084
|
//#region src/framework/utils/format-value.ts
|
|
1084
|
-
function
|
|
1085
|
+
function Ir(e, t, n) {
|
|
1085
1086
|
let { decimals: r, scale: i = !0 } = n || {};
|
|
1086
1087
|
if (typeof e == "string") return t ? `${e}${t}` : e;
|
|
1087
1088
|
if (e == null || Number.isNaN(e)) return t ? `--${t}` : "--";
|
|
@@ -1092,47 +1093,51 @@ function kr(e, t, n) {
|
|
|
1092
1093
|
}
|
|
1093
1094
|
//#endregion
|
|
1094
1095
|
//#region src/framework/utils/interpret-value.ts
|
|
1095
|
-
function
|
|
1096
|
+
function Lr(e, t) {
|
|
1096
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;
|
|
1097
1098
|
}
|
|
1098
1099
|
//#endregion
|
|
1099
1100
|
//#region src/framework/components/WidgetValue.tsx
|
|
1100
|
-
var
|
|
1101
|
-
function
|
|
1101
|
+
var Rr = /*#__PURE__*/ z("<div class=glasshome-widget-subtitle>"), zr = /*#__PURE__*/ z("<div><div class=glasshome-widget-value>");
|
|
1102
|
+
function Br(e) {
|
|
1102
1103
|
return (() => {
|
|
1103
|
-
var t =
|
|
1104
|
-
return
|
|
1104
|
+
var t = zr(), n = t.firstChild;
|
|
1105
|
+
return P(n, () => Ir(e.value, e.unit)), P(t, M(w, {
|
|
1105
1106
|
get when() {
|
|
1106
|
-
return
|
|
1107
|
+
return F(() => !!e.interpret)() && typeof e.value == "number";
|
|
1107
1108
|
},
|
|
1108
1109
|
get children() {
|
|
1109
|
-
var t =
|
|
1110
|
-
return
|
|
1110
|
+
var t = Rr();
|
|
1111
|
+
return P(t, () => Lr(e.value, e.unit)), t;
|
|
1111
1112
|
}
|
|
1112
|
-
}), null),
|
|
1113
|
+
}), null), N(() => j(t, J("flex flex-col", e.class))), t;
|
|
1113
1114
|
})();
|
|
1114
1115
|
}
|
|
1115
1116
|
//#endregion
|
|
1116
1117
|
//#region src/framework/core/Widget.tsx
|
|
1117
|
-
var
|
|
1118
|
-
function
|
|
1119
|
-
let n =
|
|
1120
|
-
|
|
1121
|
-
let i =
|
|
1122
|
-
|
|
1123
|
-
let
|
|
1124
|
-
|
|
1125
|
-
|
|
1118
|
+
var Vr = /*#__PURE__*/ z("<span class=glasshome-widget-hold-flood aria-hidden=true>"), Hr = /*#__PURE__*/ z("<div><div class=\"relative h-full w-full\">"), Ur = /*#__PURE__*/ z("<div class=\"glasshome-widget-loading pointer-events-none absolute inset-0 animate-pulse\">"), Wr = /*#__PURE__*/ z("<div class=\"flex h-full w-full flex-col items-center justify-center gap-2 text-center\">"), Gr = /*#__PURE__*/ z("<div class=\"text-muted-foreground flex items-center justify-center\">"), Kr = /*#__PURE__*/ z("<h3 class=\"text-foreground text-sm font-semibold\">"), qr = /*#__PURE__*/ z("<p class=\"text-muted-foreground text-xs\">"), Jr = 2e3;
|
|
1119
|
+
function Yr(t) {
|
|
1120
|
+
let n = k(U), r = On(() => ({ hold: { action: () => (G.get(n ?? {}) ?? G.get(f))?.("edit") } }));
|
|
1121
|
+
O(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
|
+
O(o.dispose);
|
|
1124
|
+
let s = () => t.emptyState && n ? r : t.gestures ?? (a ? o : void 0);
|
|
1125
|
+
a && (T(() => n?.onHoldable?.(!t.emptyState && !!s()?.holds?.())), O(() => n?.onHoldable?.(!1))), T(() => {
|
|
1126
|
+
if (!a || !i?.nothingMore()) return;
|
|
1127
|
+
let e = setTimeout(() => i.setNothingMore(!1), Jr);
|
|
1128
|
+
O(() => clearTimeout(e));
|
|
1129
|
+
}), T(() => i?.setTone(t.color ?? (t.tone ? `var(--tone-${t.tone})` : void 0)));
|
|
1130
|
+
let [c, l] = D(), [u, d] = D({
|
|
1126
1131
|
width: 0,
|
|
1127
1132
|
height: 0
|
|
1128
1133
|
});
|
|
1129
|
-
|
|
1130
|
-
let e =
|
|
1134
|
+
T(() => {
|
|
1135
|
+
let e = c();
|
|
1131
1136
|
if (!e) return;
|
|
1132
1137
|
let t = new ResizeObserver(([e]) => {
|
|
1133
1138
|
if (!e) return;
|
|
1134
1139
|
let t = e.borderBoxSize?.[0];
|
|
1135
|
-
|
|
1140
|
+
d(t ? {
|
|
1136
1141
|
width: t.inlineSize,
|
|
1137
1142
|
height: t.blockSize
|
|
1138
1143
|
} : {
|
|
@@ -1140,48 +1145,48 @@ function Vr(t) {
|
|
|
1140
1145
|
height: e.contentRect.height
|
|
1141
1146
|
});
|
|
1142
1147
|
});
|
|
1143
|
-
t.observe(e),
|
|
1144
|
-
}),
|
|
1145
|
-
let e =
|
|
1146
|
-
|
|
1148
|
+
t.observe(e), O(() => t.disconnect());
|
|
1149
|
+
}), _e(() => {
|
|
1150
|
+
let e = c()?.getRootNode();
|
|
1151
|
+
dr(typeof ShadowRoot < "u" && e instanceof ShadowRoot || typeof Document < "u" && e instanceof Document ? e : void 0);
|
|
1147
1152
|
});
|
|
1148
|
-
let
|
|
1153
|
+
let f = {
|
|
1149
1154
|
...n,
|
|
1150
1155
|
updateConfig: n?.updateConfig ?? (() => {}),
|
|
1151
|
-
dimensions: e(() =>
|
|
1156
|
+
dimensions: e(() => u(), "ctx.dimensions")
|
|
1152
1157
|
};
|
|
1153
|
-
n && Object.defineProperty(
|
|
1154
|
-
let
|
|
1155
|
-
if (t.variant) return typeof t.variant == "string" ?
|
|
1156
|
-
}),
|
|
1158
|
+
n && Object.defineProperty(f, cn, { value: n });
|
|
1159
|
+
let p = E(() => {
|
|
1160
|
+
if (t.variant) return typeof t.variant == "string" ? pr(t.variant) : t.variant.styles;
|
|
1161
|
+
}), m = e(() => t.gradient, "widget.gradient"), h = () => !!t.tone && t.tone !== "neutral" || !!t.color, ee = E(() => ({
|
|
1157
1162
|
"container-type": "size",
|
|
1158
1163
|
"container-name": "widget",
|
|
1159
|
-
"touch-action":
|
|
1160
|
-
...
|
|
1161
|
-
...
|
|
1164
|
+
"touch-action": s() && !t.isEditMode ? s()?.touchAction() : void 0,
|
|
1165
|
+
...p()?.container,
|
|
1166
|
+
...p()?.cssVars || {},
|
|
1162
1167
|
...t.tone ? { "--widget-color": `var(--tone-${t.tone})` } : {},
|
|
1163
1168
|
...t.color ? { "--widget-color": t.color } : {},
|
|
1164
|
-
...
|
|
1169
|
+
...h() ? { "--glass-tone": "var(--widget-color)" } : {},
|
|
1165
1170
|
...t.colorTo ? {
|
|
1166
1171
|
"--widget-color-to": t.colorTo,
|
|
1167
1172
|
"--glass-tone-2": t.colorTo
|
|
1168
1173
|
} : {},
|
|
1169
|
-
...t.gradient ? { "background-image":
|
|
1170
|
-
})),
|
|
1171
|
-
|
|
1172
|
-
}, _ = (e) => {
|
|
1173
|
-
h() && o()?.onPointerDown(e);
|
|
1174
|
+
...t.gradient ? { "background-image": m() } : {}
|
|
1175
|
+
})), g = () => !!s() && !t.isEditMode, _ = (e) => {
|
|
1176
|
+
g() && s()?.onPointerEnter(e);
|
|
1174
1177
|
}, v = (e) => {
|
|
1175
|
-
|
|
1178
|
+
g() && s()?.onPointerDown(e);
|
|
1176
1179
|
}, y = (e) => {
|
|
1177
|
-
|
|
1180
|
+
g() && s()?.onPointerMove(e);
|
|
1178
1181
|
}, b = (e) => {
|
|
1179
|
-
|
|
1180
|
-
}, x = () =>
|
|
1182
|
+
g() && s()?.onPointerUp(e);
|
|
1183
|
+
}, x = (e) => {
|
|
1184
|
+
g() && s()?.onPointerCancel(e);
|
|
1185
|
+
}, te = () => s()?.hold?.() ?? null, S = {
|
|
1181
1186
|
x: 0,
|
|
1182
1187
|
y: 0,
|
|
1183
1188
|
r: 0
|
|
1184
|
-
},
|
|
1189
|
+
}, ne = (e) => (e && Object.assign(S, {
|
|
1185
1190
|
x: e.x,
|
|
1186
1191
|
y: e.y,
|
|
1187
1192
|
r: e.r
|
|
@@ -1190,66 +1195,90 @@ function Vr(t) {
|
|
|
1190
1195
|
top: `${S.y}px`,
|
|
1191
1196
|
width: `${S.r * 2}px`,
|
|
1192
1197
|
height: `${S.r * 2}px`,
|
|
1193
|
-
"z-index":
|
|
1198
|
+
"z-index": an.BACKGROUND
|
|
1194
1199
|
});
|
|
1195
|
-
return
|
|
1196
|
-
value:
|
|
1200
|
+
return M(U.Provider, {
|
|
1201
|
+
value: f,
|
|
1197
1202
|
get children() {
|
|
1198
|
-
return
|
|
1203
|
+
return M(Jn.Provider, {
|
|
1199
1204
|
value: () => t.confirmed === !0,
|
|
1200
1205
|
get children() {
|
|
1201
|
-
return
|
|
1202
|
-
value:
|
|
1206
|
+
return M(kn.Provider, {
|
|
1207
|
+
value: u,
|
|
1203
1208
|
get children() {
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
get children() {
|
|
1214
|
-
var e = Pr();
|
|
1215
|
-
return P((t) => {
|
|
1216
|
-
var n = x() && !x()?.fired ? "" : void 0, r = x()?.fired ? "" : void 0, i = ee(x());
|
|
1217
|
-
return n !== t.e && L(e, "data-hold", t.e = n), r !== t.t && L(e, "data-fired", t.t = r), t.a = z(e, i, t.a), t;
|
|
1218
|
-
}, {
|
|
1219
|
-
e: void 0,
|
|
1220
|
-
t: void 0,
|
|
1221
|
-
a: void 0
|
|
1222
|
-
}), e;
|
|
1223
|
-
}
|
|
1224
|
-
}), n), F(n, (() => {
|
|
1225
|
-
var e = I(() => !!t.emptyState);
|
|
1226
|
-
return () => e() ? N(Hr, {
|
|
1227
|
-
get icon() {
|
|
1228
|
-
return t.emptyState.icon;
|
|
1229
|
-
},
|
|
1230
|
-
get title() {
|
|
1231
|
-
return t.emptyState.title;
|
|
1209
|
+
return [(() => {
|
|
1210
|
+
var e = Hr(), n = e.firstChild;
|
|
1211
|
+
return e.$$keydown = (e) => {
|
|
1212
|
+
g() && s()?.onKeyDown?.(e);
|
|
1213
|
+
}, A(e, "pointercancel", x), A(e, "pointerup", b), A(e, "pointermove", y), A(e, "pointerdown", v), A(e, "pointerenter", _), B((e) => {
|
|
1214
|
+
l(e), t.gestures?.bindElement(e), r.bindElement(e);
|
|
1215
|
+
}, e), P(e, M(w, {
|
|
1216
|
+
get when() {
|
|
1217
|
+
return s()?.hold;
|
|
1232
1218
|
},
|
|
1233
|
-
get
|
|
1234
|
-
|
|
1219
|
+
get children() {
|
|
1220
|
+
var e = Vr();
|
|
1221
|
+
return N((t) => {
|
|
1222
|
+
var n = te() && !te()?.fired ? "" : void 0, r = te()?.fired ? "" : void 0, i = ne(te());
|
|
1223
|
+
return n !== t.e && I(e, "data-hold", t.e = n), r !== t.t && I(e, "data-fired", t.t = r), t.a = R(e, i, t.a), t;
|
|
1224
|
+
}, {
|
|
1225
|
+
e: void 0,
|
|
1226
|
+
t: void 0,
|
|
1227
|
+
a: void 0
|
|
1228
|
+
}), e;
|
|
1235
1229
|
}
|
|
1236
|
-
})
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1230
|
+
}), n), P(n, (() => {
|
|
1231
|
+
var e = F(() => !!t.emptyState);
|
|
1232
|
+
return () => e() ? M(Xr, {
|
|
1233
|
+
get icon() {
|
|
1234
|
+
return t.emptyState.icon;
|
|
1235
|
+
},
|
|
1236
|
+
get title() {
|
|
1237
|
+
return t.emptyState.title;
|
|
1238
|
+
},
|
|
1239
|
+
get message() {
|
|
1240
|
+
return t.emptyState.message;
|
|
1241
|
+
}
|
|
1242
|
+
}) : t.children;
|
|
1243
|
+
})()), P(e, (() => {
|
|
1244
|
+
var e = F(() => !!t.loading);
|
|
1245
|
+
return () => e() && (() => {
|
|
1246
|
+
var e = Ur();
|
|
1247
|
+
return N((t) => L(e, "z-index", an.OVERLAY)), e;
|
|
1248
|
+
})();
|
|
1249
|
+
})(), null), N((r) => {
|
|
1250
|
+
var i = J("glasshome-widget glass", "relative h-full w-full overflow-hidden rounded-xl select-none", p()?.class, t.class), a = ee(), o = h() ? "" : void 0, s = t.confirmed || void 0, c = g() ? 0 : void 0, l = an.CONTENT;
|
|
1251
|
+
return i !== r.e && j(e, r.e = i), r.t = R(e, a, r.t), o !== r.a && I(e, "data-toned", r.a = o), s !== r.o && I(e, "data-confirmed", r.o = s), c !== r.i && I(e, "tabindex", r.i = c), l !== r.n && L(n, "z-index", r.n = l), r;
|
|
1252
|
+
}, {
|
|
1253
|
+
e: void 0,
|
|
1254
|
+
t: void 0,
|
|
1255
|
+
a: void 0,
|
|
1256
|
+
o: void 0,
|
|
1257
|
+
i: void 0,
|
|
1258
|
+
n: void 0
|
|
1259
|
+
}), e;
|
|
1260
|
+
})(), M(w, {
|
|
1261
|
+
when: a,
|
|
1262
|
+
get children() {
|
|
1263
|
+
return M(Qe, {
|
|
1264
|
+
get open() {
|
|
1265
|
+
return i?.nothingMore() ?? !1;
|
|
1266
|
+
},
|
|
1267
|
+
onOpenChange: (e) => {
|
|
1268
|
+
e || i?.setNothingMore(!1);
|
|
1269
|
+
},
|
|
1270
|
+
anchorRef: c,
|
|
1271
|
+
get children() {
|
|
1272
|
+
return M($e, {
|
|
1273
|
+
class: "flex w-auto items-center gap-2 p-3 text-sm",
|
|
1274
|
+
get children() {
|
|
1275
|
+
return [M(H, { icon: "mdi:information-outline" }), "No more controls for this widget"];
|
|
1276
|
+
}
|
|
1277
|
+
});
|
|
1278
|
+
}
|
|
1279
|
+
});
|
|
1280
|
+
}
|
|
1281
|
+
})];
|
|
1253
1282
|
}
|
|
1254
1283
|
});
|
|
1255
1284
|
}
|
|
@@ -1257,60 +1286,60 @@ function Vr(t) {
|
|
|
1257
1286
|
}
|
|
1258
1287
|
});
|
|
1259
1288
|
}
|
|
1260
|
-
function
|
|
1289
|
+
function Xr(e) {
|
|
1261
1290
|
return (() => {
|
|
1262
|
-
var t =
|
|
1263
|
-
return
|
|
1264
|
-
var t =
|
|
1291
|
+
var t = Wr();
|
|
1292
|
+
return P(t, (() => {
|
|
1293
|
+
var t = F(() => !!e.icon);
|
|
1265
1294
|
return () => t() && (() => {
|
|
1266
|
-
var t =
|
|
1267
|
-
return
|
|
1295
|
+
var t = Gr();
|
|
1296
|
+
return P(t, () => e.icon), t;
|
|
1268
1297
|
})();
|
|
1269
|
-
})(), null),
|
|
1270
|
-
var t =
|
|
1298
|
+
})(), null), P(t, (() => {
|
|
1299
|
+
var t = F(() => !!e.title);
|
|
1271
1300
|
return () => t() && (() => {
|
|
1272
|
-
var t =
|
|
1273
|
-
return
|
|
1301
|
+
var t = Kr();
|
|
1302
|
+
return P(t, () => e.title), t;
|
|
1274
1303
|
})();
|
|
1275
|
-
})(), null),
|
|
1276
|
-
var t =
|
|
1304
|
+
})(), null), P(t, (() => {
|
|
1305
|
+
var t = F(() => !!e.message);
|
|
1277
1306
|
return () => t() && (() => {
|
|
1278
|
-
var t =
|
|
1279
|
-
return
|
|
1307
|
+
var t = qr();
|
|
1308
|
+
return P(t, () => e.message), t;
|
|
1280
1309
|
})();
|
|
1281
1310
|
})(), null), t;
|
|
1282
1311
|
})();
|
|
1283
1312
|
}
|
|
1284
|
-
var
|
|
1285
|
-
|
|
1313
|
+
var Y = Yr;
|
|
1314
|
+
Y.Content = yr, Y.Icon = In, Y.Title = wr, Y.Status = xr, Y.Value = Br, Y.SliderFill = gr, Y.Head = Xn, Y.Hero = Zn, Y.Controls = Qn, Y.Stepper = $n, Y.Choice = er, Y.Action = tr, Y.Chip = nr, Y.Backdrop = ir, Y.Layer = rr, Y.Glyph = ar, ye(["keydown"]);
|
|
1286
1315
|
//#endregion
|
|
1287
1316
|
//#region src/framework/panel/panel.tsx
|
|
1288
|
-
var
|
|
1289
|
-
function
|
|
1290
|
-
let t =
|
|
1317
|
+
var Zr = /*#__PURE__*/ z("<section class=glasshome-panel-section><h3 class=glasshome-panel-label>"), Qr = /*#__PURE__*/ z("<div class=glasshome-panel-rows>"), $r = /*#__PURE__*/ z("<span class=\"glasshome-widget-slider-fill glasshome-panel-row-fill\">"), ei = /*#__PURE__*/ z("<span class=\"glasshome-widget-icon glass glasshome-panel-row-icon\">"), ti = /*#__PURE__*/ z("<span class=glasshome-panel-row-state>"), ni = /*#__PURE__*/ z("<span class=glasshome-panel-row-text><span class=glasshome-panel-row-name>"), ri = /*#__PURE__*/ z("<span class=glasshome-panel-row-trailing>"), ii = /*#__PURE__*/ z("<div class=glasshome-panel-row-wrap>"), ai = /*#__PURE__*/ z("<div>"), oi = /*#__PURE__*/ z("<div class=\"glasshome-panel-facts glass\">"), si = /*#__PURE__*/ z("<div class=glasshome-panel-fact><span class=glasshome-panel-row-text><span class=glasshome-panel-fact-label></span><span class=glasshome-panel-fact-value>"), ci = 8, li = (e, t, n) => Math.min(n, Math.max(t, e));
|
|
1318
|
+
function ui(e) {
|
|
1319
|
+
let t = k(U), n, r = !1, i = !1, a, o = 0, s = (t, n) => {
|
|
1291
1320
|
let r = e.slide?.();
|
|
1292
1321
|
if (!r) return 0;
|
|
1293
1322
|
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;
|
|
1294
|
-
return Math.round(
|
|
1323
|
+
return Math.round(li(o + a * (s - o), o, s));
|
|
1295
1324
|
}, c = () => {
|
|
1296
1325
|
clearTimeout(a), n = void 0;
|
|
1297
1326
|
};
|
|
1298
|
-
return
|
|
1327
|
+
return O(() => clearTimeout(a)), {
|
|
1299
1328
|
onPointerDown: (o) => {
|
|
1300
1329
|
if (o.button !== 0 || n) return;
|
|
1301
|
-
let s = o.target instanceof Element ? o.target.closest(
|
|
1330
|
+
let s = o.target instanceof Element ? o.target.closest(Dn) : null;
|
|
1302
1331
|
s && s !== o.currentTarget || (n = {
|
|
1303
1332
|
x: o.clientX,
|
|
1304
1333
|
y: o.clientY,
|
|
1305
1334
|
id: o.pointerId
|
|
1306
1335
|
}, o.currentTarget.setPointerCapture?.(o.pointerId), r = !1, i = !1, e.onHold && (a = setTimeout(() => {
|
|
1307
1336
|
i = !0, e.onHold?.(), t?.onHeld?.();
|
|
1308
|
-
},
|
|
1337
|
+
}, Je)));
|
|
1309
1338
|
},
|
|
1310
1339
|
onPointerMove: (t) => {
|
|
1311
1340
|
if (!n || t.pointerId !== n.id || i) return;
|
|
1312
1341
|
let c = t.currentTarget, l = e.axis === "x" ? Math.abs(t.clientX - n.x) : Math.abs(t.clientY - n.y);
|
|
1313
|
-
!r && e.slide?.() && l >
|
|
1342
|
+
!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);
|
|
1314
1343
|
},
|
|
1315
1344
|
onPointerUp: (t) => {
|
|
1316
1345
|
n && t.pointerId === n.id && (r ? e.slide?.()?.onCommit?.(o) : i || e.onTap?.(), c());
|
|
@@ -1318,20 +1347,20 @@ function ii(e) {
|
|
|
1318
1347
|
onPointerCancel: c
|
|
1319
1348
|
};
|
|
1320
1349
|
}
|
|
1321
|
-
function
|
|
1350
|
+
function di(e) {
|
|
1322
1351
|
return (() => {
|
|
1323
|
-
var t =
|
|
1324
|
-
return
|
|
1352
|
+
var t = Zr(), n = t.firstChild;
|
|
1353
|
+
return P(n, () => e.label), P(t, () => e.children, null), t;
|
|
1325
1354
|
})();
|
|
1326
1355
|
}
|
|
1327
|
-
function
|
|
1356
|
+
function fi(e) {
|
|
1328
1357
|
return (() => {
|
|
1329
|
-
var t =
|
|
1330
|
-
return
|
|
1358
|
+
var t = Qr();
|
|
1359
|
+
return P(t, () => e.children), t;
|
|
1331
1360
|
})();
|
|
1332
1361
|
}
|
|
1333
|
-
function
|
|
1334
|
-
let t = () => !!(e.onTap || e.slide || e.onHold), n =
|
|
1362
|
+
function pi(e) {
|
|
1363
|
+
let t = () => !!(e.onTap || e.slide || e.onHold), n = ui({
|
|
1335
1364
|
axis: "x",
|
|
1336
1365
|
slide: () => e.slide,
|
|
1337
1366
|
onTap: () => e.onTap?.(),
|
|
@@ -1348,26 +1377,26 @@ function si(e) {
|
|
|
1348
1377
|
let r = t.key === "ArrowRight" || t.key === "ArrowUp" ? 5 : t.key === "ArrowLeft" || t.key === "ArrowDown" ? -5 : 0;
|
|
1349
1378
|
if (!r) return;
|
|
1350
1379
|
t.preventDefault();
|
|
1351
|
-
let i =
|
|
1380
|
+
let i = li(n.value + r, n.min ?? 0, n.max ?? 100);
|
|
1352
1381
|
n.onChange(i), n.onCommit?.(i);
|
|
1353
1382
|
}, a = () => [
|
|
1354
|
-
|
|
1383
|
+
M(w, {
|
|
1355
1384
|
get when() {
|
|
1356
1385
|
return r() !== void 0;
|
|
1357
1386
|
},
|
|
1358
1387
|
get children() {
|
|
1359
|
-
var e =
|
|
1360
|
-
return
|
|
1388
|
+
var e = $r();
|
|
1389
|
+
return N((t) => R(e, { "--widget-fill-value": r() }, t)), e;
|
|
1361
1390
|
}
|
|
1362
1391
|
}),
|
|
1363
1392
|
(() => {
|
|
1364
|
-
var t =
|
|
1365
|
-
return
|
|
1393
|
+
var t = ei();
|
|
1394
|
+
return P(t, M(H, {
|
|
1366
1395
|
get icon() {
|
|
1367
1396
|
return e.icon;
|
|
1368
1397
|
},
|
|
1369
1398
|
class: "glasshome-widget-icon-glyph"
|
|
1370
|
-
})),
|
|
1399
|
+
})), N((n) => {
|
|
1371
1400
|
var r = !!e.on, i = !e.on;
|
|
1372
1401
|
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;
|
|
1373
1402
|
}, {
|
|
@@ -1376,33 +1405,33 @@ function si(e) {
|
|
|
1376
1405
|
}), t;
|
|
1377
1406
|
})(),
|
|
1378
1407
|
(() => {
|
|
1379
|
-
var t =
|
|
1380
|
-
return
|
|
1408
|
+
var t = ni(), n = t.firstChild;
|
|
1409
|
+
return P(n, () => e.name), P(t, M(w, {
|
|
1381
1410
|
get when() {
|
|
1382
1411
|
return e.state !== void 0;
|
|
1383
1412
|
},
|
|
1384
1413
|
get children() {
|
|
1385
|
-
var t =
|
|
1386
|
-
return
|
|
1414
|
+
var t = ti();
|
|
1415
|
+
return P(t, () => e.state), t;
|
|
1387
1416
|
}
|
|
1388
1417
|
}), null), t;
|
|
1389
1418
|
})()
|
|
1390
1419
|
], o = () => ({ "--widget-color": e.tone ?? "var(--tone-neutral)" });
|
|
1391
1420
|
return (() => {
|
|
1392
|
-
var r =
|
|
1393
|
-
return
|
|
1421
|
+
var r = ii();
|
|
1422
|
+
return P(r, M(w, {
|
|
1394
1423
|
get when() {
|
|
1395
1424
|
return t();
|
|
1396
1425
|
},
|
|
1397
1426
|
get fallback() {
|
|
1398
1427
|
return (() => {
|
|
1399
|
-
var e =
|
|
1400
|
-
return
|
|
1401
|
-
var n = `${
|
|
1428
|
+
var e = ai();
|
|
1429
|
+
return P(e, a), N((t) => {
|
|
1430
|
+
var n = `${zt({
|
|
1402
1431
|
variant: "outline",
|
|
1403
1432
|
size: "none"
|
|
1404
1433
|
})} glasshome-panel-row glasshome-panel-row-static`, r = o();
|
|
1405
|
-
return n !== t.e &&
|
|
1434
|
+
return n !== t.e && j(e, t.e = n), t.t = R(e, r, t.t), t;
|
|
1406
1435
|
}, {
|
|
1407
1436
|
e: void 0,
|
|
1408
1437
|
t: void 0
|
|
@@ -1410,7 +1439,7 @@ function si(e) {
|
|
|
1410
1439
|
})();
|
|
1411
1440
|
},
|
|
1412
1441
|
get children() {
|
|
1413
|
-
return
|
|
1442
|
+
return M(De, {
|
|
1414
1443
|
variant: "outline",
|
|
1415
1444
|
size: "none",
|
|
1416
1445
|
class: "glasshome-panel-row",
|
|
@@ -1444,39 +1473,39 @@ function si(e) {
|
|
|
1444
1473
|
}
|
|
1445
1474
|
});
|
|
1446
1475
|
}
|
|
1447
|
-
}), null),
|
|
1476
|
+
}), null), P(r, M(w, {
|
|
1448
1477
|
get when() {
|
|
1449
1478
|
return e.trailing;
|
|
1450
1479
|
},
|
|
1451
1480
|
get children() {
|
|
1452
|
-
var t =
|
|
1453
|
-
return
|
|
1481
|
+
var t = ri();
|
|
1482
|
+
return P(t, () => e.trailing), t;
|
|
1454
1483
|
}
|
|
1455
1484
|
}), null), r;
|
|
1456
1485
|
})();
|
|
1457
1486
|
}
|
|
1458
|
-
function
|
|
1487
|
+
function mi(e) {
|
|
1459
1488
|
return (() => {
|
|
1460
|
-
var t =
|
|
1461
|
-
return
|
|
1489
|
+
var t = oi();
|
|
1490
|
+
return P(t, M(C, {
|
|
1462
1491
|
get each() {
|
|
1463
1492
|
return e.items;
|
|
1464
1493
|
},
|
|
1465
1494
|
children: (e) => (() => {
|
|
1466
|
-
var t =
|
|
1467
|
-
return
|
|
1495
|
+
var t = si(), n = t.firstChild, r = n.firstChild, i = r.nextSibling;
|
|
1496
|
+
return P(t, M(H, {
|
|
1468
1497
|
get icon() {
|
|
1469
1498
|
return e.icon;
|
|
1470
1499
|
},
|
|
1471
1500
|
class: "glasshome-panel-fact-icon"
|
|
1472
|
-
}), n),
|
|
1501
|
+
}), n), P(r, () => e.label), P(i, () => e.value), t;
|
|
1473
1502
|
})()
|
|
1474
1503
|
})), t;
|
|
1475
1504
|
})();
|
|
1476
1505
|
}
|
|
1477
1506
|
//#endregion
|
|
1478
1507
|
//#region src/framework/panel/panel-entity.tsx
|
|
1479
|
-
var
|
|
1508
|
+
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 = {
|
|
1480
1509
|
light: {
|
|
1481
1510
|
icon: "mdi:lightbulb",
|
|
1482
1511
|
tone: (e) => {
|
|
@@ -1493,22 +1522,22 @@ var li = (e) => typeof e == "number" ? Math.round(e) : void 0, ui = (e) => e.cha
|
|
|
1493
1522
|
let t = e.attributes.brightness;
|
|
1494
1523
|
return e.state === "on" ? typeof t == "number" ? Math.round(t / 255 * 100) : 100 : 0;
|
|
1495
1524
|
},
|
|
1496
|
-
setLevel: (e, t, n) => e("light", n > 0 ? "turn_on" : "turn_off", n > 0 ? { brightness_pct: n } : {},
|
|
1497
|
-
tap: (e, t) => e("light", "toggle", {},
|
|
1525
|
+
setLevel: (e, t, n) => e("light", n > 0 ? "turn_on" : "turn_off", n > 0 ? { brightness_pct: n } : {}, X(t)),
|
|
1526
|
+
tap: (e, t) => e("light", "toggle", {}, X(t))
|
|
1498
1527
|
},
|
|
1499
1528
|
switch: {
|
|
1500
1529
|
icon: "mdi:toggle-switch-variant",
|
|
1501
1530
|
tone: "var(--tone-info)",
|
|
1502
1531
|
on: (e) => e.state === "on",
|
|
1503
1532
|
state: (e) => e.state === "on" ? "On" : "Off",
|
|
1504
|
-
tap: (e, t) => e("switch", "toggle", {},
|
|
1533
|
+
tap: (e, t) => e("switch", "toggle", {}, X(t))
|
|
1505
1534
|
},
|
|
1506
1535
|
input_boolean: {
|
|
1507
1536
|
icon: "mdi:toggle-switch-variant",
|
|
1508
1537
|
tone: "var(--tone-info)",
|
|
1509
1538
|
on: (e) => e.state === "on",
|
|
1510
1539
|
state: (e) => e.state === "on" ? "On" : "Off",
|
|
1511
|
-
tap: (e, t) => e("input_boolean", "toggle", {},
|
|
1540
|
+
tap: (e, t) => e("input_boolean", "toggle", {}, X(t))
|
|
1512
1541
|
},
|
|
1513
1542
|
fan: {
|
|
1514
1543
|
icon: "mdi:fan",
|
|
@@ -1516,31 +1545,31 @@ var li = (e) => typeof e == "number" ? Math.round(e) : void 0, ui = (e) => e.cha
|
|
|
1516
1545
|
on: (e) => e.state === "on",
|
|
1517
1546
|
state: (e) => {
|
|
1518
1547
|
if (e.state !== "on") return "Off";
|
|
1519
|
-
let t =
|
|
1548
|
+
let t = hi(e.attributes.percentage);
|
|
1520
1549
|
return t === void 0 ? "On" : `${t}%`;
|
|
1521
1550
|
},
|
|
1522
|
-
level: (e) => e.state === "on" ?
|
|
1523
|
-
setLevel: (e, t, n) => e("fan", "set_percentage", { percentage: n },
|
|
1524
|
-
tap: (e, t) => e("fan", "toggle", {},
|
|
1551
|
+
level: (e) => e.state === "on" ? hi(e.attributes.percentage) ?? 100 : 0,
|
|
1552
|
+
setLevel: (e, t, n) => e("fan", "set_percentage", { percentage: n }, X(t)),
|
|
1553
|
+
tap: (e, t) => e("fan", "toggle", {}, X(t))
|
|
1525
1554
|
},
|
|
1526
1555
|
cover: {
|
|
1527
1556
|
icon: "mdi:blinds",
|
|
1528
1557
|
tone: "var(--tone-info)",
|
|
1529
1558
|
on: (e) => e.state !== "closed",
|
|
1530
1559
|
state: (e) => {
|
|
1531
|
-
let t =
|
|
1560
|
+
let t = hi(e.attributes.current_position), n = gi(e.state);
|
|
1532
1561
|
return t !== void 0 && e.state === "open" ? `${n} · ${t}%` : n;
|
|
1533
1562
|
},
|
|
1534
|
-
level: (e) =>
|
|
1535
|
-
setLevel: (e, t, n) => e("cover", "set_cover_position", { position: n },
|
|
1536
|
-
tap: (e, t) => e("cover", t.state === "closed" ? "open_cover" : "close_cover", {},
|
|
1563
|
+
level: (e) => hi(e.attributes.current_position),
|
|
1564
|
+
setLevel: (e, t, n) => e("cover", "set_cover_position", { position: n }, X(t)),
|
|
1565
|
+
tap: (e, t) => e("cover", t.state === "closed" ? "open_cover" : "close_cover", {}, X(t))
|
|
1537
1566
|
},
|
|
1538
1567
|
lock: {
|
|
1539
1568
|
icon: (e) => e.state === "locked" ? "mdi:lock" : "mdi:lock-open-variant",
|
|
1540
1569
|
tone: "var(--tone-success)",
|
|
1541
1570
|
on: (e) => e.state === "locked",
|
|
1542
|
-
state: (e) =>
|
|
1543
|
-
tap: (e, t) => e("lock", t.state === "locked" ? "unlock" : "lock", {},
|
|
1571
|
+
state: (e) => gi(e.state),
|
|
1572
|
+
tap: (e, t) => e("lock", t.state === "locked" ? "unlock" : "lock", {}, X(t))
|
|
1544
1573
|
},
|
|
1545
1574
|
climate: {
|
|
1546
1575
|
icon: "mdi:thermostat",
|
|
@@ -1549,24 +1578,24 @@ var li = (e) => typeof e == "number" ? Math.round(e) : void 0, ui = (e) => e.cha
|
|
|
1549
1578
|
state: (e) => {
|
|
1550
1579
|
if (e.state === "off") return "Off";
|
|
1551
1580
|
let t = e.attributes.temperature;
|
|
1552
|
-
return typeof t == "number" ? `${
|
|
1581
|
+
return typeof t == "number" ? `${gi(e.state)} · ${t}°` : gi(e.state);
|
|
1553
1582
|
}
|
|
1554
1583
|
},
|
|
1555
1584
|
media_player: {
|
|
1556
1585
|
icon: "mdi:speaker",
|
|
1557
1586
|
tone: "var(--tone-accent)",
|
|
1558
1587
|
on: (e) => e.state === "playing",
|
|
1559
|
-
state: (e) => typeof e.attributes.media_title == "string" && e.state !== "off" ? e.attributes.media_title :
|
|
1588
|
+
state: (e) => typeof e.attributes.media_title == "string" && e.state !== "off" ? e.attributes.media_title : gi(e.state),
|
|
1560
1589
|
level: (e) => typeof e.attributes.volume_level == "number" ? Math.round(e.attributes.volume_level * 100) : void 0,
|
|
1561
|
-
setLevel: (e, t, n) => e("media_player", "volume_set", { volume_level: n / 100 },
|
|
1562
|
-
tap: (e, t) => e("media_player", "media_play_pause", {},
|
|
1590
|
+
setLevel: (e, t, n) => e("media_player", "volume_set", { volume_level: n / 100 }, X(t)),
|
|
1591
|
+
tap: (e, t) => e("media_player", "media_play_pause", {}, X(t))
|
|
1563
1592
|
},
|
|
1564
1593
|
binary_sensor: {
|
|
1565
1594
|
icon: "mdi:eye",
|
|
1566
1595
|
tone: "var(--tone-info)",
|
|
1567
1596
|
on: (e) => e.state === "on",
|
|
1568
1597
|
state: (e) => {
|
|
1569
|
-
let t =
|
|
1598
|
+
let t = yi[e.deviceClass ?? ""] ?? ["On", "Off"];
|
|
1570
1599
|
return e.state === "on" ? t[0] : t[1];
|
|
1571
1600
|
}
|
|
1572
1601
|
},
|
|
@@ -1574,38 +1603,38 @@ var li = (e) => typeof e == "number" ? Math.round(e) : void 0, ui = (e) => e.cha
|
|
|
1574
1603
|
icon: "mdi:gesture-tap-button",
|
|
1575
1604
|
tone: "var(--tone-accent)",
|
|
1576
1605
|
on: () => !1,
|
|
1577
|
-
state: (e) =>
|
|
1578
|
-
tap: (e, t) => e("button", "press", {},
|
|
1606
|
+
state: (e) => bi(e.state),
|
|
1607
|
+
tap: (e, t) => e("button", "press", {}, X(t))
|
|
1579
1608
|
},
|
|
1580
1609
|
input_button: {
|
|
1581
1610
|
icon: "mdi:gesture-tap-button",
|
|
1582
1611
|
tone: "var(--tone-accent)",
|
|
1583
1612
|
on: () => !1,
|
|
1584
|
-
state: (e) =>
|
|
1585
|
-
tap: (e, t) => e("input_button", "press", {},
|
|
1613
|
+
state: (e) => bi(e.state),
|
|
1614
|
+
tap: (e, t) => e("input_button", "press", {}, X(t))
|
|
1586
1615
|
},
|
|
1587
1616
|
scene: {
|
|
1588
1617
|
icon: "mdi:palette",
|
|
1589
1618
|
tone: "var(--tone-accent)",
|
|
1590
1619
|
on: () => !1,
|
|
1591
1620
|
state: () => "Tap to run",
|
|
1592
|
-
tap: (e, t) => e("scene", "turn_on", {},
|
|
1621
|
+
tap: (e, t) => e("scene", "turn_on", {}, X(t))
|
|
1593
1622
|
},
|
|
1594
1623
|
script: {
|
|
1595
1624
|
icon: "mdi:script-text",
|
|
1596
1625
|
tone: "var(--tone-accent)",
|
|
1597
1626
|
on: (e) => e.state === "on",
|
|
1598
1627
|
state: (e) => e.state === "on" ? "Running" : "Tap to run",
|
|
1599
|
-
tap: (e, t) => e("script", "turn_on", {},
|
|
1628
|
+
tap: (e, t) => e("script", "turn_on", {}, X(t))
|
|
1600
1629
|
}
|
|
1601
|
-
},
|
|
1630
|
+
}, vi = {
|
|
1602
1631
|
garage: "mdi:garage",
|
|
1603
1632
|
gate: "mdi:gate",
|
|
1604
1633
|
door: "mdi:door",
|
|
1605
1634
|
curtain: "mdi:curtains",
|
|
1606
1635
|
shutter: "mdi:window-shutter",
|
|
1607
1636
|
awning: "mdi:awning"
|
|
1608
|
-
},
|
|
1637
|
+
}, yi = {
|
|
1609
1638
|
door: ["Open", "Closed"],
|
|
1610
1639
|
window: ["Open", "Closed"],
|
|
1611
1640
|
garage_door: ["Open", "Closed"],
|
|
@@ -1619,44 +1648,44 @@ var li = (e) => typeof e == "number" ? Math.round(e) : void 0, ui = (e) => e.cha
|
|
|
1619
1648
|
battery: ["Low", "Normal"],
|
|
1620
1649
|
connectivity: ["Connected", "Disconnected"]
|
|
1621
1650
|
};
|
|
1622
|
-
function
|
|
1651
|
+
function bi(e) {
|
|
1623
1652
|
let t = Date.parse(e);
|
|
1624
1653
|
return Number.isNaN(t) ? "Never pressed" : new Date(t).toLocaleTimeString([], {
|
|
1625
1654
|
hour: "2-digit",
|
|
1626
1655
|
minute: "2-digit"
|
|
1627
1656
|
});
|
|
1628
1657
|
}
|
|
1629
|
-
var
|
|
1658
|
+
var xi = {
|
|
1630
1659
|
icon: "mdi:circle-medium",
|
|
1631
1660
|
tone: "var(--tone-neutral)",
|
|
1632
1661
|
on: (e) => e.state === "on",
|
|
1633
|
-
state: (e) =>
|
|
1662
|
+
state: (e) => gi(e.state)
|
|
1634
1663
|
};
|
|
1635
|
-
function
|
|
1664
|
+
function Si(e, t) {
|
|
1636
1665
|
if (!t || e.length <= t.length || !e.toLowerCase().startsWith(t.toLowerCase())) return e;
|
|
1637
1666
|
let n = e.slice(t.length).trim();
|
|
1638
1667
|
return n ? n.charAt(0).toUpperCase() + n.slice(1) : e;
|
|
1639
1668
|
}
|
|
1640
|
-
function
|
|
1641
|
-
return !!
|
|
1669
|
+
function Ci(e) {
|
|
1670
|
+
return !!_i[e]?.tap || !!_i[e]?.setLevel;
|
|
1642
1671
|
}
|
|
1643
|
-
function
|
|
1644
|
-
let t =
|
|
1645
|
-
return
|
|
1672
|
+
function wi(e) {
|
|
1673
|
+
let t = S(() => e.entityId), { callService: n } = en(), [r, i] = D();
|
|
1674
|
+
return T(() => {
|
|
1646
1675
|
t(), i(void 0);
|
|
1647
|
-
}),
|
|
1676
|
+
}), M(w, {
|
|
1648
1677
|
get when() {
|
|
1649
1678
|
return t();
|
|
1650
1679
|
},
|
|
1651
1680
|
children: (t) => {
|
|
1652
|
-
let a = () =>
|
|
1653
|
-
return
|
|
1681
|
+
let a = () => _i[t().domain] ?? xi, o = () => r() ?? a().level?.(t()), s = () => a().setLevel;
|
|
1682
|
+
return M(pi, {
|
|
1654
1683
|
get icon() {
|
|
1655
1684
|
let n = a().icon;
|
|
1656
|
-
return typeof n == "function" ? e.icon ?? n(t()) : e.icon ?? t().icon ??
|
|
1685
|
+
return typeof n == "function" ? e.icon ?? n(t()) : e.icon ?? t().icon ?? vi[t().domain === "cover" ? t().deviceClass ?? "" : ""] ?? n;
|
|
1657
1686
|
},
|
|
1658
1687
|
get name() {
|
|
1659
|
-
return e.name ??
|
|
1688
|
+
return e.name ?? Si(t().friendlyName ?? t().id, e.within);
|
|
1660
1689
|
},
|
|
1661
1690
|
get state() {
|
|
1662
1691
|
return a().state(t());
|
|
@@ -1670,7 +1699,7 @@ function vi(e) {
|
|
|
1670
1699
|
return a().on(t());
|
|
1671
1700
|
},
|
|
1672
1701
|
get slide() {
|
|
1673
|
-
return
|
|
1702
|
+
return F(() => !!(s() && o() !== void 0))() ? {
|
|
1674
1703
|
value: o() ?? 0,
|
|
1675
1704
|
onChange: i,
|
|
1676
1705
|
onCommit: (e) => s()?.(n, t(), e)
|
|
@@ -1688,8 +1717,8 @@ function vi(e) {
|
|
|
1688
1717
|
}
|
|
1689
1718
|
//#endregion
|
|
1690
1719
|
//#region src/framework/dialogs/debug-view.tsx
|
|
1691
|
-
var
|
|
1692
|
-
function
|
|
1720
|
+
var Ti = /*#__PURE__*/ z("<pre class=\"text-muted-foreground max-h-64 overflow-auto p-3 font-mono text-xs leading-relaxed\">"), Ei = /*#__PURE__*/ z("<span class=\"flex items-center gap-2\">"), Di = /*#__PURE__*/ z("<section class=\"flex min-w-0 flex-col gap-2\"><header class=\"flex items-center gap-3\"><div class=\"flex min-w-0 flex-1 flex-col\"></div></header><div class=\"flex flex-col gap-2\">"), Oi = /*#__PURE__*/ z("<div class=\"flex flex-col\">"), ki = /*#__PURE__*/ z("<pre class=\"text-muted-foreground max-h-96 overflow-auto p-3 font-mono text-xs leading-relaxed whitespace-pre-wrap\">");
|
|
1721
|
+
function Ai(e, t, n) {
|
|
1693
1722
|
return {
|
|
1694
1723
|
widgetConfig: e,
|
|
1695
1724
|
entities: t.map((e) => ({
|
|
@@ -1706,18 +1735,18 @@ function wi(e, t, n) {
|
|
|
1706
1735
|
...n
|
|
1707
1736
|
};
|
|
1708
1737
|
}
|
|
1709
|
-
var
|
|
1738
|
+
var ji = (e) => JSON.stringify(e, null, 2), Mi = {
|
|
1710
1739
|
idle: "lucide:copy",
|
|
1711
1740
|
copied: "lucide:check",
|
|
1712
1741
|
failed: "lucide:triangle-alert"
|
|
1713
|
-
},
|
|
1742
|
+
}, Ni = {
|
|
1714
1743
|
idle: "text-muted-foreground",
|
|
1715
1744
|
copied: "text-success",
|
|
1716
1745
|
failed: "text-destructive"
|
|
1717
1746
|
};
|
|
1718
|
-
function
|
|
1719
|
-
let { state: t, copy: n } =
|
|
1720
|
-
return
|
|
1747
|
+
function Pi(e) {
|
|
1748
|
+
let { state: t, copy: n } = Or();
|
|
1749
|
+
return M(De, {
|
|
1721
1750
|
variant: "ghost",
|
|
1722
1751
|
size: "icon",
|
|
1723
1752
|
class: "size-8",
|
|
@@ -1726,70 +1755,70 @@ function Oi(e) {
|
|
|
1726
1755
|
},
|
|
1727
1756
|
onClick: () => void n(e.text()),
|
|
1728
1757
|
get children() {
|
|
1729
|
-
return
|
|
1758
|
+
return M(H, {
|
|
1730
1759
|
get icon() {
|
|
1731
|
-
return
|
|
1760
|
+
return Mi[t()];
|
|
1732
1761
|
},
|
|
1733
1762
|
width: 16,
|
|
1734
1763
|
height: 16,
|
|
1735
1764
|
get class() {
|
|
1736
|
-
return
|
|
1765
|
+
return Ni[t()];
|
|
1737
1766
|
}
|
|
1738
1767
|
});
|
|
1739
1768
|
}
|
|
1740
1769
|
});
|
|
1741
1770
|
}
|
|
1742
|
-
function
|
|
1771
|
+
function Fi(e) {
|
|
1743
1772
|
let t = e.replace(/([a-z\d])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ");
|
|
1744
1773
|
return t.charAt(0).toUpperCase() + t.slice(1).toLowerCase();
|
|
1745
1774
|
}
|
|
1746
|
-
var
|
|
1747
|
-
function
|
|
1775
|
+
var Ii = (e) => e === null || typeof e != "object" && typeof e != "function";
|
|
1776
|
+
function Li(e) {
|
|
1748
1777
|
return e == null ? "None" : String(e);
|
|
1749
1778
|
}
|
|
1750
|
-
function
|
|
1779
|
+
function Ri(e) {
|
|
1751
1780
|
return Array.isArray(e) ? e.length : typeof e == "object" && e ? Object.keys(e).length : 0;
|
|
1752
1781
|
}
|
|
1753
|
-
function
|
|
1782
|
+
function zi(e) {
|
|
1754
1783
|
let t = new Date(e);
|
|
1755
1784
|
return Number.isNaN(t.getTime()) ? e : t.toLocaleString();
|
|
1756
1785
|
}
|
|
1757
|
-
function
|
|
1758
|
-
return
|
|
1786
|
+
function Bi(e) {
|
|
1787
|
+
return M(ht, {
|
|
1759
1788
|
class: "overflow-hidden p-0",
|
|
1760
1789
|
get children() {
|
|
1761
|
-
var t =
|
|
1762
|
-
return
|
|
1790
|
+
var t = Ti();
|
|
1791
|
+
return P(t, () => ji(e.value)), t;
|
|
1763
1792
|
}
|
|
1764
1793
|
});
|
|
1765
1794
|
}
|
|
1766
|
-
function
|
|
1767
|
-
return
|
|
1795
|
+
function Vi(e) {
|
|
1796
|
+
return M(be, {
|
|
1768
1797
|
collapsible: !0,
|
|
1769
1798
|
class: "border-border/50 border-t",
|
|
1770
1799
|
get children() {
|
|
1771
|
-
return
|
|
1800
|
+
return M(Se, {
|
|
1772
1801
|
get value() {
|
|
1773
1802
|
return e.label;
|
|
1774
1803
|
},
|
|
1775
1804
|
get children() {
|
|
1776
|
-
return [
|
|
1805
|
+
return [M(Ce, {
|
|
1777
1806
|
class: "text-muted-foreground py-3 text-xs",
|
|
1778
1807
|
get children() {
|
|
1779
|
-
var t =
|
|
1780
|
-
return
|
|
1808
|
+
var t = Ei();
|
|
1809
|
+
return P(t, () => e.label, null), P(t, M(w, {
|
|
1781
1810
|
get when() {
|
|
1782
1811
|
return e.count !== void 0;
|
|
1783
1812
|
},
|
|
1784
1813
|
get children() {
|
|
1785
|
-
return
|
|
1814
|
+
return M(Be, { get children() {
|
|
1786
1815
|
return e.count;
|
|
1787
1816
|
} });
|
|
1788
1817
|
}
|
|
1789
1818
|
}), null), t;
|
|
1790
1819
|
}
|
|
1791
|
-
}),
|
|
1792
|
-
return
|
|
1820
|
+
}), M(xe, { get children() {
|
|
1821
|
+
return M(Bi, { get value() {
|
|
1793
1822
|
return e.value;
|
|
1794
1823
|
} });
|
|
1795
1824
|
} })];
|
|
@@ -1798,77 +1827,77 @@ function Fi(e) {
|
|
|
1798
1827
|
}
|
|
1799
1828
|
});
|
|
1800
1829
|
}
|
|
1801
|
-
function
|
|
1830
|
+
function Hi(e) {
|
|
1802
1831
|
return (() => {
|
|
1803
|
-
var t =
|
|
1804
|
-
return
|
|
1832
|
+
var t = Di(), n = t.firstChild, r = n.firstChild, i = n.nextSibling;
|
|
1833
|
+
return P(n, M(pt, {
|
|
1805
1834
|
get icon() {
|
|
1806
1835
|
return e.icon;
|
|
1807
1836
|
},
|
|
1808
1837
|
size: "sm"
|
|
1809
|
-
}), r),
|
|
1838
|
+
}), r), P(r, M(Ke, {
|
|
1810
1839
|
class: "truncate",
|
|
1811
1840
|
get children() {
|
|
1812
1841
|
return e.title;
|
|
1813
1842
|
}
|
|
1814
|
-
}), null),
|
|
1843
|
+
}), null), P(r, M(w, {
|
|
1815
1844
|
get when() {
|
|
1816
1845
|
return e.subtitle;
|
|
1817
1846
|
},
|
|
1818
|
-
children: (e) =>
|
|
1847
|
+
children: (e) => M(mt, {
|
|
1819
1848
|
class: "truncate font-mono",
|
|
1820
1849
|
get children() {
|
|
1821
1850
|
return e();
|
|
1822
1851
|
}
|
|
1823
1852
|
})
|
|
1824
|
-
}), null),
|
|
1853
|
+
}), null), P(n, () => e.badge, null), P(n, M(Pi, {
|
|
1825
1854
|
get label() {
|
|
1826
1855
|
return `Copy ${e.title}`;
|
|
1827
1856
|
},
|
|
1828
|
-
text: () =>
|
|
1829
|
-
}), null),
|
|
1857
|
+
text: () => ji(e.source)
|
|
1858
|
+
}), null), P(i, () => e.children), t;
|
|
1830
1859
|
})();
|
|
1831
1860
|
}
|
|
1832
|
-
function
|
|
1833
|
-
let t =
|
|
1834
|
-
return
|
|
1861
|
+
function Ui(e) {
|
|
1862
|
+
let t = E(() => Object.entries(e.record)), n = E(() => t().flatMap(([e, t]) => Ii(t) ? [[e, t]] : [])), r = E(() => t().filter(([, e]) => !Ii(e)));
|
|
1863
|
+
return M(w, {
|
|
1835
1864
|
get when() {
|
|
1836
1865
|
return t().length > 0;
|
|
1837
1866
|
},
|
|
1838
1867
|
get fallback() {
|
|
1839
|
-
return
|
|
1868
|
+
return M(mt, { children: "Nothing set" });
|
|
1840
1869
|
},
|
|
1841
1870
|
get children() {
|
|
1842
|
-
return [
|
|
1871
|
+
return [M(w, {
|
|
1843
1872
|
get when() {
|
|
1844
1873
|
return n().length > 0;
|
|
1845
1874
|
},
|
|
1846
1875
|
get children() {
|
|
1847
|
-
var e =
|
|
1848
|
-
return
|
|
1876
|
+
var e = Oi();
|
|
1877
|
+
return P(e, M(C, {
|
|
1849
1878
|
get each() {
|
|
1850
1879
|
return n();
|
|
1851
1880
|
},
|
|
1852
|
-
children: ([e, t]) =>
|
|
1881
|
+
children: ([e, t]) => M(V, {
|
|
1853
1882
|
get label() {
|
|
1854
|
-
return
|
|
1883
|
+
return Fi(e);
|
|
1855
1884
|
},
|
|
1856
1885
|
get children() {
|
|
1857
|
-
return
|
|
1886
|
+
return Li(t);
|
|
1858
1887
|
}
|
|
1859
1888
|
})
|
|
1860
1889
|
})), e;
|
|
1861
1890
|
}
|
|
1862
|
-
}),
|
|
1891
|
+
}), M(C, {
|
|
1863
1892
|
get each() {
|
|
1864
1893
|
return r();
|
|
1865
1894
|
},
|
|
1866
|
-
children: ([e, t]) =>
|
|
1895
|
+
children: ([e, t]) => M(Vi, {
|
|
1867
1896
|
get label() {
|
|
1868
|
-
return
|
|
1897
|
+
return Fi(e);
|
|
1869
1898
|
},
|
|
1870
1899
|
get count() {
|
|
1871
|
-
return
|
|
1900
|
+
return Ri(t);
|
|
1872
1901
|
},
|
|
1873
1902
|
value: t
|
|
1874
1903
|
})
|
|
@@ -1876,9 +1905,9 @@ function Li(e) {
|
|
|
1876
1905
|
}
|
|
1877
1906
|
});
|
|
1878
1907
|
}
|
|
1879
|
-
function
|
|
1908
|
+
function Wi(e) {
|
|
1880
1909
|
let t = () => e.entity.attributes ?? {};
|
|
1881
|
-
return
|
|
1910
|
+
return M(Hi, {
|
|
1882
1911
|
icon: "lucide:activity",
|
|
1883
1912
|
get title() {
|
|
1884
1913
|
return e.entity.friendly_name ?? e.entity.entity_id;
|
|
@@ -1887,7 +1916,7 @@ function Ri(e) {
|
|
|
1887
1916
|
return e.entity.entity_id;
|
|
1888
1917
|
},
|
|
1889
1918
|
get badge() {
|
|
1890
|
-
return
|
|
1919
|
+
return M(Te, { get children() {
|
|
1891
1920
|
return e.entity.state;
|
|
1892
1921
|
} });
|
|
1893
1922
|
},
|
|
@@ -1896,52 +1925,52 @@ function Ri(e) {
|
|
|
1896
1925
|
},
|
|
1897
1926
|
get children() {
|
|
1898
1927
|
return [(() => {
|
|
1899
|
-
var t =
|
|
1900
|
-
return
|
|
1928
|
+
var t = Oi();
|
|
1929
|
+
return P(t, M(V, {
|
|
1901
1930
|
label: "Domain",
|
|
1902
1931
|
get children() {
|
|
1903
1932
|
return e.entity.domain;
|
|
1904
1933
|
}
|
|
1905
|
-
}), null),
|
|
1934
|
+
}), null), P(t, M(w, {
|
|
1906
1935
|
get when() {
|
|
1907
1936
|
return e.entity.device_class;
|
|
1908
1937
|
},
|
|
1909
|
-
children: (e) =>
|
|
1938
|
+
children: (e) => M(V, {
|
|
1910
1939
|
label: "Device class",
|
|
1911
1940
|
get children() {
|
|
1912
1941
|
return e();
|
|
1913
1942
|
}
|
|
1914
1943
|
})
|
|
1915
|
-
}), null),
|
|
1944
|
+
}), null), P(t, M(w, {
|
|
1916
1945
|
get when() {
|
|
1917
1946
|
return e.entity.area_id;
|
|
1918
1947
|
},
|
|
1919
|
-
children: (e) =>
|
|
1948
|
+
children: (e) => M(V, {
|
|
1920
1949
|
label: "Area",
|
|
1921
1950
|
get children() {
|
|
1922
1951
|
return e();
|
|
1923
1952
|
}
|
|
1924
1953
|
})
|
|
1925
|
-
}), null),
|
|
1954
|
+
}), null), P(t, M(V, {
|
|
1926
1955
|
label: "Changed",
|
|
1927
1956
|
get children() {
|
|
1928
|
-
return
|
|
1957
|
+
return zi(e.entity.last_changed);
|
|
1929
1958
|
}
|
|
1930
|
-
}), null),
|
|
1959
|
+
}), null), P(t, M(V, {
|
|
1931
1960
|
label: "Updated",
|
|
1932
1961
|
get children() {
|
|
1933
|
-
return
|
|
1962
|
+
return zi(e.entity.last_updated);
|
|
1934
1963
|
}
|
|
1935
1964
|
}), null), t;
|
|
1936
|
-
})(),
|
|
1965
|
+
})(), M(w, {
|
|
1937
1966
|
get when() {
|
|
1938
|
-
return
|
|
1967
|
+
return Ri(t()) > 0;
|
|
1939
1968
|
},
|
|
1940
1969
|
get children() {
|
|
1941
|
-
return
|
|
1970
|
+
return M(Vi, {
|
|
1942
1971
|
label: "Attributes",
|
|
1943
1972
|
get count() {
|
|
1944
|
-
return
|
|
1973
|
+
return Ri(t());
|
|
1945
1974
|
},
|
|
1946
1975
|
get value() {
|
|
1947
1976
|
return t();
|
|
@@ -1952,42 +1981,42 @@ function Ri(e) {
|
|
|
1952
1981
|
}
|
|
1953
1982
|
});
|
|
1954
1983
|
}
|
|
1955
|
-
function
|
|
1956
|
-
let t =
|
|
1957
|
-
return
|
|
1984
|
+
function Gi(e) {
|
|
1985
|
+
let t = E(() => Object.keys(e.data).filter((e) => e !== "widgetConfig" && e !== "entities"));
|
|
1986
|
+
return M(Ge, { get children() {
|
|
1958
1987
|
return [
|
|
1959
|
-
|
|
1988
|
+
M(Hi, {
|
|
1960
1989
|
icon: "lucide:sliders-horizontal",
|
|
1961
1990
|
title: "Configuration",
|
|
1962
1991
|
get source() {
|
|
1963
1992
|
return e.data.widgetConfig;
|
|
1964
1993
|
},
|
|
1965
1994
|
get children() {
|
|
1966
|
-
return
|
|
1995
|
+
return M(Ui, { get record() {
|
|
1967
1996
|
return e.data.widgetConfig;
|
|
1968
1997
|
} });
|
|
1969
1998
|
}
|
|
1970
1999
|
}),
|
|
1971
|
-
|
|
2000
|
+
M(C, {
|
|
1972
2001
|
get each() {
|
|
1973
2002
|
return e.data.entities;
|
|
1974
2003
|
},
|
|
1975
|
-
children: (e) =>
|
|
2004
|
+
children: (e) => M(Wi, { entity: e })
|
|
1976
2005
|
}),
|
|
1977
|
-
|
|
2006
|
+
M(C, {
|
|
1978
2007
|
get each() {
|
|
1979
2008
|
return t();
|
|
1980
2009
|
},
|
|
1981
|
-
children: (t) =>
|
|
2010
|
+
children: (t) => M(Hi, {
|
|
1982
2011
|
icon: "lucide:braces",
|
|
1983
2012
|
get title() {
|
|
1984
|
-
return
|
|
2013
|
+
return Fi(t);
|
|
1985
2014
|
},
|
|
1986
2015
|
get source() {
|
|
1987
2016
|
return e.data[t];
|
|
1988
2017
|
},
|
|
1989
2018
|
get children() {
|
|
1990
|
-
return
|
|
2019
|
+
return M(Bi, { get value() {
|
|
1991
2020
|
return e.data[t];
|
|
1992
2021
|
} });
|
|
1993
2022
|
}
|
|
@@ -1996,52 +2025,52 @@ function zi(e) {
|
|
|
1996
2025
|
];
|
|
1997
2026
|
} });
|
|
1998
2027
|
}
|
|
1999
|
-
function
|
|
2028
|
+
function Ki(e) {
|
|
2000
2029
|
if (typeof e != "object" || !e) return;
|
|
2001
2030
|
let t = e;
|
|
2002
2031
|
return Array.isArray(t.entities) && typeof t.widgetConfig == "object" ? t : void 0;
|
|
2003
2032
|
}
|
|
2004
|
-
function
|
|
2005
|
-
let t =
|
|
2006
|
-
return
|
|
2033
|
+
function qi(e) {
|
|
2034
|
+
let t = E(() => Ki(e.data));
|
|
2035
|
+
return M(w, {
|
|
2007
2036
|
get when() {
|
|
2008
2037
|
return e.data !== void 0;
|
|
2009
2038
|
},
|
|
2010
2039
|
get fallback() {
|
|
2011
|
-
return
|
|
2012
|
-
return
|
|
2013
|
-
return [
|
|
2040
|
+
return M(Ve, { get children() {
|
|
2041
|
+
return M(Ue, { get children() {
|
|
2042
|
+
return [M(We, { children: "Nothing to inspect" }), M(He, { children: "This widget publishes no debug information." })];
|
|
2014
2043
|
} });
|
|
2015
2044
|
} });
|
|
2016
2045
|
},
|
|
2017
2046
|
get children() {
|
|
2018
|
-
return
|
|
2047
|
+
return M(w, {
|
|
2019
2048
|
get when() {
|
|
2020
2049
|
return t();
|
|
2021
2050
|
},
|
|
2022
2051
|
get fallback() {
|
|
2023
|
-
return
|
|
2052
|
+
return M(Hi, {
|
|
2024
2053
|
icon: "lucide:braces",
|
|
2025
2054
|
title: "Debug data",
|
|
2026
2055
|
get source() {
|
|
2027
2056
|
return e.data;
|
|
2028
2057
|
},
|
|
2029
2058
|
get children() {
|
|
2030
|
-
return
|
|
2059
|
+
return M(w, {
|
|
2031
2060
|
get when() {
|
|
2032
2061
|
return typeof e.data == "string";
|
|
2033
2062
|
},
|
|
2034
2063
|
get fallback() {
|
|
2035
|
-
return
|
|
2064
|
+
return M(Bi, { get value() {
|
|
2036
2065
|
return e.data;
|
|
2037
2066
|
} });
|
|
2038
2067
|
},
|
|
2039
2068
|
get children() {
|
|
2040
|
-
return
|
|
2069
|
+
return M(ht, {
|
|
2041
2070
|
class: "overflow-hidden p-0",
|
|
2042
2071
|
get children() {
|
|
2043
|
-
var t =
|
|
2044
|
-
return
|
|
2072
|
+
var t = ki();
|
|
2073
|
+
return P(t, () => e.data), t;
|
|
2045
2074
|
}
|
|
2046
2075
|
});
|
|
2047
2076
|
}
|
|
@@ -2049,7 +2078,7 @@ function Vi(e) {
|
|
|
2049
2078
|
}
|
|
2050
2079
|
});
|
|
2051
2080
|
},
|
|
2052
|
-
children: (e) =>
|
|
2081
|
+
children: (e) => M(Gi, { get data() {
|
|
2053
2082
|
return e();
|
|
2054
2083
|
} })
|
|
2055
2084
|
});
|
|
@@ -2058,21 +2087,21 @@ function Vi(e) {
|
|
|
2058
2087
|
}
|
|
2059
2088
|
//#endregion
|
|
2060
2089
|
//#region src/framework/dialogs/validate-config.ts
|
|
2061
|
-
function
|
|
2090
|
+
function Ji(e) {
|
|
2062
2091
|
let t = "";
|
|
2063
2092
|
for (let n of e) t += typeof n == "number" ? `[${n}]` : t ? `.${String(n)}` : String(n);
|
|
2064
2093
|
return t;
|
|
2065
2094
|
}
|
|
2066
|
-
function
|
|
2095
|
+
function Yi(e, t) {
|
|
2067
2096
|
let n = e.safeParse(t);
|
|
2068
2097
|
return n.success ? null : n.error.issues.map((e) => {
|
|
2069
|
-
let t =
|
|
2098
|
+
let t = Ji(e.path);
|
|
2070
2099
|
return t ? `${t}: ${e.message}` : e.message;
|
|
2071
2100
|
});
|
|
2072
2101
|
}
|
|
2073
2102
|
//#endregion
|
|
2074
2103
|
//#region src/framework/dialogs/WidgetDialog.tsx
|
|
2075
|
-
var
|
|
2104
|
+
var Xi = /*#__PURE__*/ z("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\">"), Zi = /*#__PURE__*/ z("<div class=\"bg-muted/30 rounded-lg p-2 text-center md:p-6\"><p class=\"text-muted-foreground text-sm\">No edit options available"), Qi = /*#__PURE__*/ z("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><line x1=4 y1=21 x2=4 y2=14></line><line x1=4 y1=10 x2=4 y2=3></line><line x1=12 y1=21 x2=12 y2=12></line><line x1=12 y1=8 x2=12 y2=3></line><line x1=20 y1=21 x2=20 y2=16></line><line x1=20 y1=12 x2=20 y2=3></line><line x1=1 y1=14 x2=7 y2=14></line><line x1=9 y1=8 x2=15 y2=8></line><line x1=17 y1=16 x2=23 y2=16>"), $i = /*#__PURE__*/ z("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 fill=none viewBox=\"0 0 24 24\"stroke=currentColor stroke-width=2><path d=\"m8 2 1.88 1.88\"></path><path d=\"M14.12 3.88 16 2\"></path><path d=\"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\"></path><path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6\"></path><path d=\"M12 20v-9\"></path><path d=\"M6.53 9C4.6 8.8 3 7.1 3 5\"></path><path d=\"M6 13H2\"></path><path d=\"M3 21c0-2.1 1.7-3.9 3.8-4\"></path><path d=\"M20.97 5c0 2.1-1.6 3.8-3.5 4\"></path><path d=\"M22 13h-4\"></path><path d=\"M17.2 17c2.1.1 3.8 1.9 3.8 4\">"), ea = /*#__PURE__*/ z("<div class=glasshome-sheet>"), ta = /*#__PURE__*/ z("<div class=glasshome-sheet-band aria-hidden=true><img alt>"), na = /*#__PURE__*/ z("<span class=\"glasshome-widget-icon glass glass-tint glasshome-sheet-icon\">"), ra = /*#__PURE__*/ z("<span class=\"inline-flex size-3.5 shrink-0 items-center\">"), ia = (e) => Yt(e), aa = {
|
|
2076
2105
|
sm: "sm",
|
|
2077
2106
|
md: "md",
|
|
2078
2107
|
lg: "lg",
|
|
@@ -2081,33 +2110,33 @@ var Wi = /*#__PURE__*/ B("<svg xmlns=http://www.w3.org/2000/svg class=size-3.5 f
|
|
|
2081
2110
|
"2xl": "xl",
|
|
2082
2111
|
"3xl": "xl",
|
|
2083
2112
|
"4xl": "full"
|
|
2084
|
-
},
|
|
2113
|
+
}, oa = {
|
|
2085
2114
|
idle: "Copy all",
|
|
2086
2115
|
copied: "Copied",
|
|
2087
2116
|
failed: "Copy failed"
|
|
2088
2117
|
};
|
|
2089
|
-
function
|
|
2090
|
-
let [t] =
|
|
2091
|
-
|
|
2118
|
+
function sa(e) {
|
|
2119
|
+
let [t] = ve(e, /* @__PURE__ */ "open.onOpenChange.title.description.onSave.hasUnsavedChanges.onDelete.editContent.controlsContent.sheet.tile.debugContent.debugData.tabs.class.maxWidth.defaultTab.activeTab.onActiveTabChange.headerActions.configSchema.config.onConfigSave.ResponsiveDialog.ResponsiveDialogContent.ResponsiveDialogHeader.ResponsiveDialogTitle.ResponsiveDialogDescription.ResponsiveDialogBody.ResponsiveDialogFooter.Button.SchemaForm.Tabs.TabsList.TabsTrigger.TabsContent".split(".")), n = () => !!t.configSchema && !!t.config && !!t.onConfigSave && !!t.SchemaForm, [r, i] = D({}), [a, o] = D(null), [s, c] = D([]);
|
|
2120
|
+
T(ge(() => t.config, (e) => {
|
|
2092
2121
|
e && i({ ...e });
|
|
2093
|
-
})),
|
|
2094
|
-
e && o(
|
|
2122
|
+
})), T(ge(() => t.configSchema, (e) => {
|
|
2123
|
+
e && o(ia(e));
|
|
2095
2124
|
}));
|
|
2096
2125
|
let l = () => n() && JSON.stringify(r()) !== JSON.stringify(t.config), u = (e) => {
|
|
2097
2126
|
!e && t.config && (i({ ...t.config }), c([])), t.onOpenChange(e);
|
|
2098
2127
|
}, d = () => {
|
|
2099
2128
|
let e = t.configSchema;
|
|
2100
2129
|
if (e) {
|
|
2101
|
-
let t =
|
|
2130
|
+
let t = Yi(e, r());
|
|
2102
2131
|
if (t) {
|
|
2103
2132
|
c(t);
|
|
2104
2133
|
return;
|
|
2105
2134
|
}
|
|
2106
2135
|
}
|
|
2107
2136
|
c([]), t.onConfigSave?.(r());
|
|
2108
|
-
}, [f, p] =
|
|
2137
|
+
}, [f, p] = D(t.defaultTab ?? "controls"), m = () => t.activeTab ?? f(), h = (e) => {
|
|
2109
2138
|
t.onActiveTabChange ? t.onActiveTabChange(e) : p(e);
|
|
2110
|
-
},
|
|
2139
|
+
}, ee = () => aa[t.maxWidth ?? "xl"], g = () => {
|
|
2111
2140
|
if (t.tabs) return t.tabs.map((e) => ({
|
|
2112
2141
|
...e,
|
|
2113
2142
|
icon: () => e.icon,
|
|
@@ -2117,10 +2146,10 @@ function ta(e) {
|
|
|
2117
2146
|
return e.push({
|
|
2118
2147
|
id: "edit",
|
|
2119
2148
|
label: "Edit",
|
|
2120
|
-
icon: () =>
|
|
2149
|
+
icon: () => Xi(),
|
|
2121
2150
|
content: () => t.editContent ?? (() => {
|
|
2122
2151
|
let e = t.SchemaForm, o = n() ? a() : void 0;
|
|
2123
|
-
return !o || !e ?
|
|
2152
|
+
return !o || !e ? Zi() : M(e, {
|
|
2124
2153
|
schema: o,
|
|
2125
2154
|
get data() {
|
|
2126
2155
|
return r();
|
|
@@ -2134,86 +2163,86 @@ function ta(e) {
|
|
|
2134
2163
|
}), e.push({
|
|
2135
2164
|
id: "controls",
|
|
2136
2165
|
label: "Controls",
|
|
2137
|
-
icon: () =>
|
|
2138
|
-
content: () => t.controlsContent ??
|
|
2139
|
-
return
|
|
2140
|
-
return [
|
|
2166
|
+
icon: () => Qi(),
|
|
2167
|
+
content: () => t.controlsContent ?? M(Ve, { get children() {
|
|
2168
|
+
return M(Ue, { get children() {
|
|
2169
|
+
return [M(We, { children: "No controls" }), M(He, { children: "This widget is shown as is." })];
|
|
2141
2170
|
} });
|
|
2142
2171
|
} })
|
|
2143
2172
|
}), e.push({
|
|
2144
2173
|
id: "debug",
|
|
2145
2174
|
label: "Debug",
|
|
2146
|
-
icon: () =>
|
|
2147
|
-
content: () => t.debugContent ??
|
|
2175
|
+
icon: () => $i(),
|
|
2176
|
+
content: () => t.debugContent ?? M(qi, { get data() {
|
|
2148
2177
|
return t.debugData;
|
|
2149
2178
|
} })
|
|
2150
2179
|
}), e;
|
|
2151
|
-
},
|
|
2152
|
-
|
|
2153
|
-
let
|
|
2154
|
-
icon: t.tile?.icon ??
|
|
2155
|
-
tone: t.tile?.tone ??
|
|
2180
|
+
}, _ = k(U), v = un(_);
|
|
2181
|
+
T(() => v?.setHasSheet(t.sheet !== void 0)), O(() => v?.setHasSheet(!1));
|
|
2182
|
+
let y = () => ({
|
|
2183
|
+
icon: t.tile?.icon ?? v?.icon(),
|
|
2184
|
+
tone: t.tile?.tone ?? v?.accent() ?? v?.tone(),
|
|
2156
2185
|
backdrop: t.tile?.backdrop
|
|
2157
|
-
}),
|
|
2186
|
+
}), b = () => _?.developer?.() ?? !1, x = () => B() === "controls" && t.sheet !== void 0, te = ca(), S = () => _?.anchor?.(), ne = () => x() && !te() && S() !== void 0, re = Or(), ie = () => {
|
|
2158
2187
|
if (t.debugData === void 0) return;
|
|
2159
2188
|
let e = typeof t.debugData == "string" ? t.debugData : JSON.stringify(t.debugData, null, 2);
|
|
2160
2189
|
re.copy(e);
|
|
2161
|
-
}, ae = t.ResponsiveDialog, oe = t.ResponsiveDialogContent, se = t.ResponsiveDialogHeader, ce = t.ResponsiveDialogTitle, le = t.ResponsiveDialogDescription, ue = t.ResponsiveDialogBody ??
|
|
2190
|
+
}, ae = t.ResponsiveDialog, oe = t.ResponsiveDialogContent, se = t.ResponsiveDialogHeader, ce = t.ResponsiveDialogTitle, le = t.ResponsiveDialogDescription, ue = t.ResponsiveDialogBody ?? rt, de = t.ResponsiveDialogFooter ?? ct, fe = t.Tabs ?? Et, pe = t.TabsList ?? At, me = t.TabsTrigger ?? Mt, he = t.TabsContent ?? Ot, _e = t.Button, A = E(ge([
|
|
2162
2191
|
() => t.open,
|
|
2163
2192
|
a,
|
|
2164
2193
|
() => t.config,
|
|
2165
2194
|
() => t.tabs
|
|
2166
|
-
], () =>
|
|
2167
|
-
let e =
|
|
2195
|
+
], () => g())), j = (e) => n() ? u(e) : t.onOpenChange(e), ye = () => n() ? l() : t.hasUnsavedChanges, L = () => n() ? d : t.onSave, R = () => A().filter((e) => e.id !== "debug" || b()), z = () => R().filter((e) => e.id !== "controls" || t.sheet === void 0), B = () => {
|
|
2196
|
+
let e = R(), n = m() === "controls" && t.sheet === void 0 && !("controlsContent" in t) && !t.tabs ? "edit" : m();
|
|
2168
2197
|
return e.some((e) => e.id === n) ? n : e[0]?.id ?? n;
|
|
2169
|
-
},
|
|
2170
|
-
return
|
|
2198
|
+
}, be = () => B() === "edit" && (L() || t.onDelete) || B() === "debug" && t.debugData !== void 0;
|
|
2199
|
+
return M(ae, {
|
|
2171
2200
|
get open() {
|
|
2172
2201
|
return t.open;
|
|
2173
2202
|
},
|
|
2174
|
-
onOpenChange: (e) =>
|
|
2203
|
+
onOpenChange: (e) => j(e),
|
|
2175
2204
|
get children() {
|
|
2176
|
-
return
|
|
2205
|
+
return M(w, {
|
|
2177
2206
|
get when() {
|
|
2178
|
-
return !
|
|
2207
|
+
return !x();
|
|
2179
2208
|
},
|
|
2180
2209
|
get fallback() {
|
|
2181
|
-
return
|
|
2210
|
+
return M(oe, {
|
|
2182
2211
|
size: "sm",
|
|
2183
2212
|
get ariaLabel() {
|
|
2184
2213
|
return t.title;
|
|
2185
2214
|
},
|
|
2186
2215
|
get anchor() {
|
|
2187
|
-
return
|
|
2216
|
+
return F(() => !!ne())() ? S() : void 0;
|
|
2188
2217
|
},
|
|
2189
2218
|
class: "glasshome-sheet-surface",
|
|
2190
2219
|
get style() {
|
|
2191
|
-
return
|
|
2192
|
-
"--glass-tone":
|
|
2193
|
-
"--widget-color":
|
|
2220
|
+
return F(() => !!y().tone)() ? {
|
|
2221
|
+
"--glass-tone": y().tone,
|
|
2222
|
+
"--widget-color": y().tone
|
|
2194
2223
|
} : void 0;
|
|
2195
2224
|
},
|
|
2196
2225
|
get children() {
|
|
2197
2226
|
return [
|
|
2198
|
-
|
|
2227
|
+
M(w, {
|
|
2199
2228
|
get when() {
|
|
2200
|
-
return
|
|
2229
|
+
return y().backdrop;
|
|
2201
2230
|
},
|
|
2202
2231
|
children: (e) => (() => {
|
|
2203
|
-
var t =
|
|
2204
|
-
return
|
|
2232
|
+
var t = ta(), n = t.firstChild;
|
|
2233
|
+
return N(() => I(n, "src", e())), t;
|
|
2205
2234
|
})()
|
|
2206
2235
|
}),
|
|
2207
|
-
|
|
2236
|
+
M(se, {
|
|
2208
2237
|
class: "items-center",
|
|
2209
2238
|
get media() {
|
|
2210
|
-
return
|
|
2239
|
+
return M(w, {
|
|
2211
2240
|
get when() {
|
|
2212
|
-
return
|
|
2241
|
+
return y().icon;
|
|
2213
2242
|
},
|
|
2214
2243
|
children: (e) => (() => {
|
|
2215
|
-
var t =
|
|
2216
|
-
return
|
|
2244
|
+
var t = na();
|
|
2245
|
+
return P(t, M(H, {
|
|
2217
2246
|
get icon() {
|
|
2218
2247
|
return e();
|
|
2219
2248
|
},
|
|
@@ -2223,7 +2252,7 @@ function ta(e) {
|
|
|
2223
2252
|
});
|
|
2224
2253
|
},
|
|
2225
2254
|
get children() {
|
|
2226
|
-
return
|
|
2255
|
+
return M(ce, {
|
|
2227
2256
|
class: "truncate",
|
|
2228
2257
|
get children() {
|
|
2229
2258
|
return t.title;
|
|
@@ -2231,87 +2260,87 @@ function ta(e) {
|
|
|
2231
2260
|
});
|
|
2232
2261
|
}
|
|
2233
2262
|
}),
|
|
2234
|
-
|
|
2235
|
-
var e =
|
|
2236
|
-
return
|
|
2263
|
+
M(ue, { get children() {
|
|
2264
|
+
var e = ea();
|
|
2265
|
+
return P(e, () => t.sheet?.()), e;
|
|
2237
2266
|
} })
|
|
2238
2267
|
];
|
|
2239
2268
|
}
|
|
2240
2269
|
});
|
|
2241
2270
|
},
|
|
2242
2271
|
get children() {
|
|
2243
|
-
return
|
|
2272
|
+
return M(oe, {
|
|
2244
2273
|
get size() {
|
|
2245
|
-
return
|
|
2274
|
+
return ee();
|
|
2246
2275
|
},
|
|
2247
2276
|
get class() {
|
|
2248
2277
|
return t.class;
|
|
2249
2278
|
},
|
|
2250
2279
|
get children() {
|
|
2251
|
-
return
|
|
2280
|
+
return M(fe, {
|
|
2252
2281
|
get value() {
|
|
2253
|
-
return
|
|
2282
|
+
return B();
|
|
2254
2283
|
},
|
|
2255
2284
|
onChange: h,
|
|
2256
2285
|
layout: "split",
|
|
2257
2286
|
get children() {
|
|
2258
2287
|
return [
|
|
2259
|
-
|
|
2288
|
+
M(se, {
|
|
2260
2289
|
class: "flex-wrap",
|
|
2261
2290
|
get action() {
|
|
2262
|
-
return [
|
|
2291
|
+
return [M(w, {
|
|
2263
2292
|
get when() {
|
|
2264
|
-
return
|
|
2293
|
+
return b() || t.tabs !== void 0;
|
|
2265
2294
|
},
|
|
2266
2295
|
get children() {
|
|
2267
|
-
return
|
|
2296
|
+
return M(pe, {
|
|
2268
2297
|
class: "w-auto",
|
|
2269
2298
|
get children() {
|
|
2270
|
-
return
|
|
2299
|
+
return M(C, {
|
|
2271
2300
|
get each() {
|
|
2272
|
-
return
|
|
2301
|
+
return z();
|
|
2273
2302
|
},
|
|
2274
|
-
children: (e) =>
|
|
2303
|
+
children: (e) => M(me, {
|
|
2275
2304
|
get value() {
|
|
2276
2305
|
return e.id;
|
|
2277
2306
|
},
|
|
2278
2307
|
get children() {
|
|
2279
2308
|
return [(() => {
|
|
2280
|
-
var t =
|
|
2281
|
-
return
|
|
2282
|
-
})(),
|
|
2309
|
+
var t = ra();
|
|
2310
|
+
return P(t, () => e.icon()), t;
|
|
2311
|
+
})(), F(() => e.label)];
|
|
2283
2312
|
}
|
|
2284
2313
|
})
|
|
2285
2314
|
});
|
|
2286
2315
|
}
|
|
2287
2316
|
});
|
|
2288
2317
|
}
|
|
2289
|
-
}),
|
|
2318
|
+
}), F(() => t.headerActions)];
|
|
2290
2319
|
},
|
|
2291
2320
|
get children() {
|
|
2292
|
-
return [
|
|
2321
|
+
return [M(ce, {
|
|
2293
2322
|
class: "truncate",
|
|
2294
2323
|
get children() {
|
|
2295
2324
|
return t.title;
|
|
2296
2325
|
}
|
|
2297
|
-
}),
|
|
2326
|
+
}), M(w, {
|
|
2298
2327
|
get when() {
|
|
2299
2328
|
return t.description;
|
|
2300
2329
|
},
|
|
2301
2330
|
get children() {
|
|
2302
|
-
return
|
|
2331
|
+
return M(le, { get children() {
|
|
2303
2332
|
return t.description;
|
|
2304
2333
|
} });
|
|
2305
2334
|
}
|
|
2306
2335
|
})];
|
|
2307
2336
|
}
|
|
2308
2337
|
}),
|
|
2309
|
-
|
|
2310
|
-
return
|
|
2338
|
+
M(ue, { get children() {
|
|
2339
|
+
return M(C, {
|
|
2311
2340
|
get each() {
|
|
2312
|
-
return
|
|
2341
|
+
return R();
|
|
2313
2342
|
},
|
|
2314
|
-
children: (e) =>
|
|
2343
|
+
children: (e) => M(he, {
|
|
2315
2344
|
get value() {
|
|
2316
2345
|
return e.id;
|
|
2317
2346
|
},
|
|
@@ -2321,19 +2350,19 @@ function ta(e) {
|
|
|
2321
2350
|
})
|
|
2322
2351
|
});
|
|
2323
2352
|
} }),
|
|
2324
|
-
|
|
2353
|
+
M(w, {
|
|
2325
2354
|
get when() {
|
|
2326
|
-
return
|
|
2355
|
+
return be();
|
|
2327
2356
|
},
|
|
2328
2357
|
get children() {
|
|
2329
|
-
return
|
|
2358
|
+
return M(de, { get children() {
|
|
2330
2359
|
return [
|
|
2331
|
-
|
|
2360
|
+
M(w, {
|
|
2332
2361
|
get when() {
|
|
2333
|
-
return
|
|
2362
|
+
return F(() => B() === "edit")() && t.onDelete;
|
|
2334
2363
|
},
|
|
2335
2364
|
get children() {
|
|
2336
|
-
return
|
|
2365
|
+
return M(_e, {
|
|
2337
2366
|
size: "sm",
|
|
2338
2367
|
variant: "destructive",
|
|
2339
2368
|
onClick: () => t.onDelete?.(),
|
|
@@ -2341,32 +2370,32 @@ function ta(e) {
|
|
|
2341
2370
|
});
|
|
2342
2371
|
}
|
|
2343
2372
|
}),
|
|
2344
|
-
|
|
2373
|
+
M(w, {
|
|
2345
2374
|
get when() {
|
|
2346
|
-
return
|
|
2375
|
+
return F(() => B() === "edit")() && L();
|
|
2347
2376
|
},
|
|
2348
2377
|
get children() {
|
|
2349
|
-
return
|
|
2378
|
+
return M(_e, {
|
|
2350
2379
|
size: "sm",
|
|
2351
2380
|
get disabled() {
|
|
2352
|
-
return !
|
|
2381
|
+
return !ye();
|
|
2353
2382
|
},
|
|
2354
|
-
onClick: () =>
|
|
2383
|
+
onClick: () => L()?.(),
|
|
2355
2384
|
children: "Save"
|
|
2356
2385
|
});
|
|
2357
2386
|
}
|
|
2358
2387
|
}),
|
|
2359
|
-
|
|
2388
|
+
M(w, {
|
|
2360
2389
|
get when() {
|
|
2361
|
-
return
|
|
2390
|
+
return F(() => B() === "debug")() && t.debugData !== void 0;
|
|
2362
2391
|
},
|
|
2363
2392
|
get children() {
|
|
2364
|
-
return
|
|
2393
|
+
return M(_e, {
|
|
2365
2394
|
size: "sm",
|
|
2366
2395
|
variant: "outline",
|
|
2367
2396
|
onClick: ie,
|
|
2368
2397
|
get children() {
|
|
2369
|
-
return
|
|
2398
|
+
return oa[re.state()];
|
|
2370
2399
|
}
|
|
2371
2400
|
});
|
|
2372
2401
|
}
|
|
@@ -2385,81 +2414,450 @@ function ta(e) {
|
|
|
2385
2414
|
}
|
|
2386
2415
|
});
|
|
2387
2416
|
}
|
|
2388
|
-
function
|
|
2389
|
-
let e = "(max-width: 639px)", [t, n] =
|
|
2390
|
-
return
|
|
2417
|
+
function ca() {
|
|
2418
|
+
let e = "(max-width: 639px)", [t, n] = D(typeof window < "u" && window.matchMedia(e).matches);
|
|
2419
|
+
return _e(() => {
|
|
2391
2420
|
let t = window.matchMedia(e), r = () => n(t.matches);
|
|
2392
|
-
t.addEventListener("change", r),
|
|
2421
|
+
t.addEventListener("change", r), O(() => t.removeEventListener("change", r));
|
|
2393
2422
|
}), t;
|
|
2394
2423
|
}
|
|
2395
2424
|
//#endregion
|
|
2396
2425
|
//#region src/framework/hooks/use-widget-dashboard.ts
|
|
2397
|
-
var
|
|
2426
|
+
var la = {
|
|
2398
2427
|
name: "",
|
|
2399
2428
|
icon: "",
|
|
2400
2429
|
areaId: null
|
|
2401
2430
|
};
|
|
2402
|
-
function
|
|
2403
|
-
let e =
|
|
2404
|
-
return () => e?.dashboard?.() ??
|
|
2431
|
+
function ua() {
|
|
2432
|
+
let e = k(U);
|
|
2433
|
+
return () => e?.dashboard?.() ?? la;
|
|
2405
2434
|
}
|
|
2406
2435
|
//#endregion
|
|
2407
2436
|
//#region src/framework/hooks/use-widget-viewer.ts
|
|
2408
|
-
var
|
|
2409
|
-
function
|
|
2410
|
-
let e =
|
|
2411
|
-
return () => e?.viewer?.() ??
|
|
2437
|
+
var da = { name: null };
|
|
2438
|
+
function fa() {
|
|
2439
|
+
let e = k(U);
|
|
2440
|
+
return () => e?.viewer?.() ?? da;
|
|
2441
|
+
}
|
|
2442
|
+
//#endregion
|
|
2443
|
+
//#region node_modules/@glasshome/ui/dist/tokens/index.js
|
|
2444
|
+
var pa = /^oklch\(\s*([+-]?(?:\d+\.?\d*|\.\d+))\s+([+-]?(?:\d+\.?\d*|\.\d+))\s+([+-]?(?:\d+\.?\d*|\.\d+))\s*\)$/i;
|
|
2445
|
+
function ma(e, t, n) {
|
|
2446
|
+
return Math.min(Math.max(e, t), n);
|
|
2447
|
+
}
|
|
2448
|
+
function ha(e) {
|
|
2449
|
+
return String(Number.isInteger(e) ? e : Number(e.toFixed(6)));
|
|
2450
|
+
}
|
|
2451
|
+
function ga(e) {
|
|
2452
|
+
let t = pa.exec(e.trim());
|
|
2453
|
+
return t ? {
|
|
2454
|
+
l: Number(t[1]),
|
|
2455
|
+
c: Number(t[2]),
|
|
2456
|
+
h: Number(t[3])
|
|
2457
|
+
} : null;
|
|
2458
|
+
}
|
|
2459
|
+
function _a(e, t, n) {
|
|
2460
|
+
return `oklch(${ha(e)} ${ha(t)} ${ha(n)})`;
|
|
2461
|
+
}
|
|
2462
|
+
function va(e, t) {
|
|
2463
|
+
let n = ga(e);
|
|
2464
|
+
return n ? _a(ma(n.l + t, 0, 1), n.c, n.h) : e;
|
|
2465
|
+
}
|
|
2466
|
+
function ya(e, t) {
|
|
2467
|
+
let n = ga(e);
|
|
2468
|
+
return n ? _a(ma(t, 0, 1), ma(n.c * .8, 0, .4), n.h) : e;
|
|
2469
|
+
}
|
|
2470
|
+
function ba(e, t) {
|
|
2471
|
+
return {
|
|
2472
|
+
...e,
|
|
2473
|
+
popover: e.card,
|
|
2474
|
+
muted: t === "light" ? va(e.background, -.015) : va(e.background, .1),
|
|
2475
|
+
mutedForeground: t === "light" ? "oklch(0.44 0 0)" : "oklch(0.71 0 0)",
|
|
2476
|
+
input: t === "light" ? va(e.border, .01) : va(e.border, .04),
|
|
2477
|
+
ring: e.accent,
|
|
2478
|
+
destructive: t === "light" ? "oklch(0.54 0.19 23.0704)" : "oklch(0.7106 0.1661 22.2162)"
|
|
2479
|
+
};
|
|
2480
|
+
}
|
|
2481
|
+
function xa(e) {
|
|
2482
|
+
return ba({
|
|
2483
|
+
primary: va(e.primary, .15),
|
|
2484
|
+
accent: va(e.accent, .1),
|
|
2485
|
+
secondary: ya(e.secondary, .14),
|
|
2486
|
+
border: ya(e.border, .26),
|
|
2487
|
+
card: ya(e.card, .17),
|
|
2488
|
+
background: ya(e.background, .12)
|
|
2489
|
+
}, "dark");
|
|
2490
|
+
}
|
|
2491
|
+
var Sa = {
|
|
2492
|
+
edgeWidth: 1,
|
|
2493
|
+
edgeInk: 0,
|
|
2494
|
+
edgeAccent: 0,
|
|
2495
|
+
inkLift: 0
|
|
2496
|
+
}, Ca = {
|
|
2497
|
+
frosted: {
|
|
2498
|
+
blur: 24,
|
|
2499
|
+
clarity: 60,
|
|
2500
|
+
depth: 1,
|
|
2501
|
+
tint: 1,
|
|
2502
|
+
glow: 0,
|
|
2503
|
+
ink: 0,
|
|
2504
|
+
...Sa
|
|
2505
|
+
},
|
|
2506
|
+
frost: {
|
|
2507
|
+
blur: 24,
|
|
2508
|
+
clarity: 60,
|
|
2509
|
+
depth: 1,
|
|
2510
|
+
tint: 1,
|
|
2511
|
+
glow: 0,
|
|
2512
|
+
ink: 0,
|
|
2513
|
+
...Sa,
|
|
2514
|
+
grain: .4
|
|
2515
|
+
},
|
|
2516
|
+
paper: {
|
|
2517
|
+
blur: 0,
|
|
2518
|
+
clarity: 100,
|
|
2519
|
+
depth: .5,
|
|
2520
|
+
tint: .85,
|
|
2521
|
+
glow: 0,
|
|
2522
|
+
ink: 0,
|
|
2523
|
+
...Sa,
|
|
2524
|
+
edgeInk: .3,
|
|
2525
|
+
sheen: 0,
|
|
2526
|
+
edge: .2,
|
|
2527
|
+
shadow: .7
|
|
2528
|
+
},
|
|
2529
|
+
neon: {
|
|
2530
|
+
blur: 9,
|
|
2531
|
+
clarity: 57,
|
|
2532
|
+
depth: .4,
|
|
2533
|
+
tint: .6,
|
|
2534
|
+
edgeWidth: 1,
|
|
2535
|
+
edgeInk: 0,
|
|
2536
|
+
edgeAccent: .35,
|
|
2537
|
+
inkLift: 0,
|
|
2538
|
+
glow: 3,
|
|
2539
|
+
ink: 0,
|
|
2540
|
+
vibrancy: 1.3,
|
|
2541
|
+
edge: .25,
|
|
2542
|
+
sheen: .3,
|
|
2543
|
+
shadow: 1,
|
|
2544
|
+
innerGlow: .35
|
|
2545
|
+
},
|
|
2546
|
+
chalk: {
|
|
2547
|
+
blur: 0,
|
|
2548
|
+
clarity: 100,
|
|
2549
|
+
depth: .3,
|
|
2550
|
+
tint: .7,
|
|
2551
|
+
glow: 0,
|
|
2552
|
+
ink: 1,
|
|
2553
|
+
...Sa,
|
|
2554
|
+
inkLift: 1
|
|
2555
|
+
}
|
|
2556
|
+
}, wa = {
|
|
2557
|
+
v: 1,
|
|
2558
|
+
preset: "frosted"
|
|
2559
|
+
}, Ta = {
|
|
2560
|
+
blur: [0, 48],
|
|
2561
|
+
clarity: [0, 100],
|
|
2562
|
+
depth: [0, 2],
|
|
2563
|
+
tint: [0, 2],
|
|
2564
|
+
glow: [0, 40],
|
|
2565
|
+
ink: [0, 1],
|
|
2566
|
+
vibrancy: [.5, 2],
|
|
2567
|
+
edge: [0, 2],
|
|
2568
|
+
sheen: [0, 2],
|
|
2569
|
+
shadow: [0, 2],
|
|
2570
|
+
inset: [0, 1],
|
|
2571
|
+
lightFrom: [0, 360],
|
|
2572
|
+
darkScale: [0, 1],
|
|
2573
|
+
innerGlow: [0, 1],
|
|
2574
|
+
innerGlowHue: [0, 1],
|
|
2575
|
+
grain: [0, 1],
|
|
2576
|
+
washAngle: [0, 360],
|
|
2577
|
+
relief: [0, 2],
|
|
2578
|
+
fill: [0, .6]
|
|
2579
|
+
}, Ea = {
|
|
2580
|
+
vibrancy: 1,
|
|
2581
|
+
inset: 0,
|
|
2582
|
+
lightFrom: 315,
|
|
2583
|
+
rim: "top",
|
|
2584
|
+
darkScale: 1,
|
|
2585
|
+
glowAt: "outside",
|
|
2586
|
+
innerGlow: 0,
|
|
2587
|
+
innerGlowHue: 1,
|
|
2588
|
+
grain: 0,
|
|
2589
|
+
washStyle: "fade",
|
|
2590
|
+
washAngle: 135,
|
|
2591
|
+
face: "flat",
|
|
2592
|
+
relief: 1,
|
|
2593
|
+
accent: "theme",
|
|
2594
|
+
fill: 0
|
|
2595
|
+
}, Da = Object.keys(Ta);
|
|
2596
|
+
function Oa(e) {
|
|
2597
|
+
let { edgeWidth: t, edgeInk: n, edgeAccent: r, inkLift: i, ...a } = Ca[e.preset], o = {
|
|
2598
|
+
...Ea,
|
|
2599
|
+
...a,
|
|
2600
|
+
...e.dials
|
|
2601
|
+
}, s = {
|
|
2602
|
+
...o,
|
|
2603
|
+
edge: o.edge ?? o.depth,
|
|
2604
|
+
sheen: o.sheen ?? o.depth,
|
|
2605
|
+
shadow: o.shadow ?? o.depth
|
|
2606
|
+
};
|
|
2607
|
+
for (let e of Da) s[e] = ma(s[e], ...Ta[e]);
|
|
2608
|
+
return s;
|
|
2609
|
+
}
|
|
2610
|
+
function Z(e, t) {
|
|
2611
|
+
let n = e === "default" ? "solid" : "static", r = t?.night ? {
|
|
2612
|
+
type: "static",
|
|
2613
|
+
id: t.night
|
|
2614
|
+
} : void 0, { url: i, overlay: a, blur: o, vignette: s } = t ?? {};
|
|
2615
|
+
return {
|
|
2616
|
+
type: n,
|
|
2617
|
+
id: e,
|
|
2618
|
+
themed: t?.themed ?? !0,
|
|
2619
|
+
url: i,
|
|
2620
|
+
dark: r,
|
|
2621
|
+
overlay: a,
|
|
2622
|
+
blur: o,
|
|
2623
|
+
vignette: s
|
|
2624
|
+
};
|
|
2625
|
+
}
|
|
2626
|
+
function Q(e, t, n, r, i, a, o, s) {
|
|
2627
|
+
return {
|
|
2628
|
+
id: e,
|
|
2629
|
+
name: t,
|
|
2630
|
+
radius: n,
|
|
2631
|
+
swatch: r,
|
|
2632
|
+
material: s,
|
|
2633
|
+
colors: {
|
|
2634
|
+
light: ba(i, "light"),
|
|
2635
|
+
dark: o ? ba(o, "dark") : xa(i)
|
|
2636
|
+
},
|
|
2637
|
+
background: a
|
|
2638
|
+
};
|
|
2639
|
+
}
|
|
2640
|
+
Z("glass-house", {
|
|
2641
|
+
url: "/backgrounds/glass-house.webp",
|
|
2642
|
+
themed: !1,
|
|
2643
|
+
night: "glass-house-night",
|
|
2644
|
+
vignette: .65,
|
|
2645
|
+
blur: 4
|
|
2646
|
+
}), Q("sunrise-studio", "Sunrise Studio", 1.1, ["#e8590c", "#f7e3c6"], {
|
|
2647
|
+
primary: "oklch(0.56 0.13 48)",
|
|
2648
|
+
accent: "oklch(0.54 0.11 35)",
|
|
2649
|
+
secondary: "oklch(0.93 0.02 70)",
|
|
2650
|
+
border: "oklch(0.84 0.025 65)",
|
|
2651
|
+
card: "oklch(0.99 0.008 75)",
|
|
2652
|
+
background: "oklch(0.945 0.02 72)"
|
|
2653
|
+
}, Z("studio-geometric", {
|
|
2654
|
+
url: "/backgrounds/studio-geometric.svg",
|
|
2655
|
+
night: "studio-night"
|
|
2656
|
+
}), {
|
|
2657
|
+
primary: "oklch(0.78 0.11 62)",
|
|
2658
|
+
accent: "oklch(0.72 0.1 42)",
|
|
2659
|
+
secondary: "oklch(0.3 0.025 55)",
|
|
2660
|
+
border: "oklch(0.4 0.03 55)",
|
|
2661
|
+
card: "oklch(0.27 0.025 55)",
|
|
2662
|
+
background: "oklch(0.17 0.022 55)"
|
|
2663
|
+
}, {
|
|
2664
|
+
v: 1,
|
|
2665
|
+
preset: "paper"
|
|
2666
|
+
}), Q("forest-zen", "Forest Zen", 1.6, ["#2b8a3e", "#a9c7b0"], {
|
|
2667
|
+
primary: "oklch(0.5 0.12 150)",
|
|
2668
|
+
accent: "oklch(0.5 0.09 170)",
|
|
2669
|
+
secondary: "oklch(0.92 0.025 150)",
|
|
2670
|
+
border: "oklch(0.83 0.02 155)",
|
|
2671
|
+
card: "oklch(0.99 0.008 150)",
|
|
2672
|
+
background: "oklch(0.945 0.015 160)"
|
|
2673
|
+
}, Z("forest-mist", {
|
|
2674
|
+
url: "/backgrounds/forest-mist.webp",
|
|
2675
|
+
themed: !1,
|
|
2676
|
+
night: "forest-mist-night",
|
|
2677
|
+
vignette: .65
|
|
2678
|
+
}), {
|
|
2679
|
+
primary: "oklch(0.74 0.12 150)",
|
|
2680
|
+
accent: "oklch(0.72 0.08 175)",
|
|
2681
|
+
secondary: "oklch(0.24 0.025 160)",
|
|
2682
|
+
border: "oklch(0.33 0.025 160)",
|
|
2683
|
+
card: "oklch(0.25 0.02 160)",
|
|
2684
|
+
background: "oklch(0.15 0.02 165)"
|
|
2685
|
+
}, {
|
|
2686
|
+
v: 1,
|
|
2687
|
+
preset: "frosted",
|
|
2688
|
+
dials: { clarity: 82 }
|
|
2689
|
+
}), Q("lavender-dreams", "Lavender Dreams", 1.8, ["#845ef7", "#fff4e6"], {
|
|
2690
|
+
primary: "oklch(0.5 0.14 305)",
|
|
2691
|
+
accent: "oklch(0.52 0.12 325)",
|
|
2692
|
+
secondary: "oklch(0.93 0.025 300)",
|
|
2693
|
+
border: "oklch(0.85 0.025 300)",
|
|
2694
|
+
card: "oklch(0.975 0.012 90)",
|
|
2695
|
+
background: "oklch(0.97 0.015 85)"
|
|
2696
|
+
}, Z("lavender-ink"), {
|
|
2697
|
+
primary: "oklch(0.76 0.12 305)",
|
|
2698
|
+
accent: "oklch(0.76 0.1 325)",
|
|
2699
|
+
secondary: "oklch(0.26 0.04 310)",
|
|
2700
|
+
border: "oklch(0.36 0.045 310)",
|
|
2701
|
+
card: "oklch(0.23 0.045 312)",
|
|
2702
|
+
background: "oklch(0.18 0.045 315)"
|
|
2703
|
+
}, {
|
|
2704
|
+
v: 1,
|
|
2705
|
+
preset: "paper",
|
|
2706
|
+
dials: { ink: 1 }
|
|
2707
|
+
}), Q("coral-reef", "Liquid Glass", .9, ["#0e1426", "#5fd4e8"], {
|
|
2708
|
+
primary: "oklch(0.5 0.11 225)",
|
|
2709
|
+
accent: "oklch(0.52 0.16 345)",
|
|
2710
|
+
secondary: "oklch(0.93 0.008 260)",
|
|
2711
|
+
border: "oklch(0.85 0.012 260)",
|
|
2712
|
+
card: "oklch(0.99 0.004 260)",
|
|
2713
|
+
background: "oklch(0.94 0.008 260)"
|
|
2714
|
+
}, Z("liquid-glass-day", {
|
|
2715
|
+
url: "/backgrounds/liquid-glass-day.webp",
|
|
2716
|
+
themed: !1,
|
|
2717
|
+
night: "liquid-glass"
|
|
2718
|
+
}), {
|
|
2719
|
+
primary: "oklch(0.78 0.11 210)",
|
|
2720
|
+
accent: "oklch(0.72 0.16 340)",
|
|
2721
|
+
secondary: "oklch(0.25 0.03 265)",
|
|
2722
|
+
border: "oklch(0.36 0.035 265)",
|
|
2723
|
+
card: "oklch(0.24 0.03 265)",
|
|
2724
|
+
background: "oklch(0.13 0.03 268)"
|
|
2725
|
+
}, {
|
|
2726
|
+
v: 1,
|
|
2727
|
+
preset: "frosted"
|
|
2728
|
+
}), Q("monochrome-pro", "Monochrome Pro", 0, ["#e9ecef", "#343a40"], {
|
|
2729
|
+
primary: "oklch(0.32 0.01 260)",
|
|
2730
|
+
accent: "oklch(0.4 0.01 260)",
|
|
2731
|
+
secondary: "oklch(0.93 0.004 260)",
|
|
2732
|
+
border: "oklch(0.8 0.004 260)",
|
|
2733
|
+
card: "oklch(0.99 0.002 260)",
|
|
2734
|
+
background: "oklch(0.955 0.003 260)"
|
|
2735
|
+
}, Z("monochrome-blocks", {
|
|
2736
|
+
url: "/backgrounds/monochrome-blocks.svg",
|
|
2737
|
+
night: "monochrome-night"
|
|
2738
|
+
}), {
|
|
2739
|
+
primary: "oklch(0.9 0.005 260)",
|
|
2740
|
+
accent: "oklch(0.82 0.005 260)",
|
|
2741
|
+
secondary: "oklch(0.24 0.004 260)",
|
|
2742
|
+
border: "oklch(0.36 0.004 260)",
|
|
2743
|
+
card: "oklch(0.2 0.003 260)",
|
|
2744
|
+
background: "oklch(0.14 0.003 260)"
|
|
2745
|
+
}, {
|
|
2746
|
+
v: 1,
|
|
2747
|
+
preset: "paper"
|
|
2748
|
+
}), Q("ocean-breeze", "Tide", 1.5, ["#2b4a8b", "#efe6d2"], {
|
|
2749
|
+
primary: "oklch(0.42 0.12 262)",
|
|
2750
|
+
accent: "oklch(0.48 0.09 225)",
|
|
2751
|
+
secondary: "oklch(0.93 0.015 85)",
|
|
2752
|
+
border: "oklch(0.84 0.02 80)",
|
|
2753
|
+
card: "oklch(0.975 0.012 85)",
|
|
2754
|
+
background: "oklch(0.955 0.018 85)"
|
|
2755
|
+
}, Z("tide-waves"), {
|
|
2756
|
+
primary: "oklch(0.78 0.09 235)",
|
|
2757
|
+
accent: "oklch(0.76 0.08 205)",
|
|
2758
|
+
secondary: "oklch(0.26 0.04 262)",
|
|
2759
|
+
border: "oklch(0.36 0.045 262)",
|
|
2760
|
+
card: "oklch(0.23 0.045 262)",
|
|
2761
|
+
background: "oklch(0.18 0.05 262)"
|
|
2762
|
+
}, {
|
|
2763
|
+
v: 1,
|
|
2764
|
+
preset: "paper"
|
|
2765
|
+
}), Q("chalkboard", "Chalkboard", 1.2, ["#2f4a40", "#f2e6a0"], {
|
|
2766
|
+
primary: "oklch(0.48 0.13 255)",
|
|
2767
|
+
accent: "oklch(0.5 0.1 165)",
|
|
2768
|
+
secondary: "oklch(0.9 0.012 165)",
|
|
2769
|
+
border: "oklch(0.8 0.015 165)",
|
|
2770
|
+
card: "oklch(0.965 0.006 165)",
|
|
2771
|
+
background: "oklch(0.93 0.012 165)"
|
|
2772
|
+
}, Z("chalkboard"), {
|
|
2773
|
+
primary: "oklch(0.88 0.12 95)",
|
|
2774
|
+
accent: "oklch(0.8 0.09 220)",
|
|
2775
|
+
secondary: "oklch(0.29 0.025 165)",
|
|
2776
|
+
border: "oklch(0.43 0.02 165)",
|
|
2777
|
+
card: "oklch(0.28 0.028 165)",
|
|
2778
|
+
background: "oklch(0.22 0.03 165)"
|
|
2779
|
+
}, {
|
|
2780
|
+
v: 1,
|
|
2781
|
+
preset: "chalk"
|
|
2782
|
+
}), Q("retrowave", "Retrowave", 1.2, ["#ff2bd6", "#35e0ff"], {
|
|
2783
|
+
primary: "oklch(0.58 0.24 345)",
|
|
2784
|
+
accent: "oklch(0.6 0.14 215)",
|
|
2785
|
+
secondary: "oklch(0.93 0.03 320)",
|
|
2786
|
+
border: "oklch(0.84 0.04 320)",
|
|
2787
|
+
card: "oklch(0.96 0.02 320)",
|
|
2788
|
+
background: "oklch(0.98 0.015 320)"
|
|
2789
|
+
}, Z("sunset-grid", { url: "/backgrounds/sunset-grid.svg" }), {
|
|
2790
|
+
primary: "oklch(0.68 0.27 345)",
|
|
2791
|
+
accent: "oklch(0.8 0.14 205)",
|
|
2792
|
+
secondary: "oklch(0.2 0.06 290)",
|
|
2793
|
+
border: "oklch(0.34 0.1 300)",
|
|
2794
|
+
card: "oklch(0.19 0.07 290)",
|
|
2795
|
+
background: "oklch(0.13 0.06 285)"
|
|
2796
|
+
}, {
|
|
2797
|
+
v: 1,
|
|
2798
|
+
preset: "neon",
|
|
2799
|
+
dials: { glow: 14 }
|
|
2800
|
+
});
|
|
2801
|
+
//#endregion
|
|
2802
|
+
//#region src/framework/hooks/use-material.ts
|
|
2803
|
+
var ka = {
|
|
2804
|
+
id: wa.preset,
|
|
2805
|
+
terms: Oa(wa)
|
|
2806
|
+
};
|
|
2807
|
+
function Aa() {
|
|
2808
|
+
let e = k(U);
|
|
2809
|
+
return () => e?.material?.() ?? ka;
|
|
2412
2810
|
}
|
|
2413
2811
|
//#endregion
|
|
2414
2812
|
//#region src/framework/hooks/use-intersection-pause.ts
|
|
2415
|
-
function
|
|
2813
|
+
function ja(e) {
|
|
2416
2814
|
if (typeof IntersectionObserver > "u") return () => !1;
|
|
2417
|
-
let [t, n] =
|
|
2815
|
+
let [t, n] = D(!1), r = new IntersectionObserver((e) => {
|
|
2418
2816
|
let t = e[0];
|
|
2419
2817
|
t && n(!t.isIntersecting);
|
|
2420
2818
|
});
|
|
2421
|
-
return
|
|
2819
|
+
return T(() => {
|
|
2422
2820
|
let t = e();
|
|
2423
2821
|
r.disconnect(), t && r.observe(t);
|
|
2424
|
-
}),
|
|
2822
|
+
}), O(() => r.disconnect()), t;
|
|
2425
2823
|
}
|
|
2426
2824
|
//#endregion
|
|
2427
2825
|
//#region src/framework/hooks/use-daylight.ts
|
|
2428
|
-
var
|
|
2429
|
-
function
|
|
2826
|
+
var Ma = -6, Na = 864e5;
|
|
2827
|
+
function Pa(e, t) {
|
|
2430
2828
|
let n = e.next_rising ? Date.parse(e.next_rising) : NaN, r = e.next_setting ? Date.parse(e.next_setting) : NaN;
|
|
2431
2829
|
if (!Number.isFinite(n) || !Number.isFinite(r)) return;
|
|
2432
|
-
let [i, a] = e.state === "above_horizon" ? [n -
|
|
2830
|
+
let [i, a] = e.state === "above_horizon" ? [n - Na, r] : [r - Na, n], o = a - i;
|
|
2433
2831
|
if (!(o <= 0)) return Math.min(1, Math.max(0, (t.getTime() - i) / o));
|
|
2434
2832
|
}
|
|
2435
|
-
var
|
|
2436
|
-
function
|
|
2833
|
+
var Fa = 20, Ia = 7;
|
|
2834
|
+
function La(e, t) {
|
|
2437
2835
|
if (e && (e.state === "above_horizon" || e.state === "below_horizon")) {
|
|
2438
|
-
let n = e.elevation, r = e.state === "above_horizon" ? "day" : n !== void 0 && n >
|
|
2836
|
+
let n = e.elevation, r = e.state === "above_horizon" ? "day" : n !== void 0 && n > Ma ? e.rising ? "dawn" : "dusk" : "night";
|
|
2439
2837
|
return {
|
|
2440
2838
|
phase: r,
|
|
2441
2839
|
isNight: r === "night",
|
|
2442
2840
|
elevation: n,
|
|
2443
|
-
progress:
|
|
2841
|
+
progress: Pa(e, t)
|
|
2444
2842
|
};
|
|
2445
2843
|
}
|
|
2446
|
-
let n = t.getHours(), r = n >=
|
|
2844
|
+
let n = t.getHours(), r = n >= Fa || n < Ia ? "night" : "day";
|
|
2447
2845
|
return {
|
|
2448
2846
|
phase: r,
|
|
2449
2847
|
isNight: r === "night"
|
|
2450
2848
|
};
|
|
2451
2849
|
}
|
|
2452
|
-
var [
|
|
2453
|
-
function
|
|
2454
|
-
return
|
|
2455
|
-
|
|
2850
|
+
var [Ra, za] = D(/* @__PURE__ */ new Date()), Ba = 0, Va;
|
|
2851
|
+
function Ha() {
|
|
2852
|
+
return Ba++, Va ||= (za(/* @__PURE__ */ new Date()), setInterval(() => za(/* @__PURE__ */ new Date()), 6e4)), () => {
|
|
2853
|
+
Ba--, Ba === 0 && Va && (clearInterval(Va), Va = void 0);
|
|
2456
2854
|
};
|
|
2457
2855
|
}
|
|
2458
|
-
function
|
|
2459
|
-
let e =
|
|
2460
|
-
return
|
|
2461
|
-
e() ||
|
|
2462
|
-
}),
|
|
2856
|
+
function Ua() {
|
|
2857
|
+
let e = S("sun.sun");
|
|
2858
|
+
return T(() => {
|
|
2859
|
+
e() || O(Ha());
|
|
2860
|
+
}), E(() => {
|
|
2463
2861
|
let t = e(), n = t ? {
|
|
2464
2862
|
state: t.state,
|
|
2465
2863
|
elevation: t.attributes?.elevation,
|
|
@@ -2467,27 +2865,27 @@ function ya() {
|
|
|
2467
2865
|
next_rising: t.attributes?.next_rising,
|
|
2468
2866
|
next_setting: t.attributes?.next_setting
|
|
2469
2867
|
} : void 0;
|
|
2470
|
-
return
|
|
2868
|
+
return La(n, n ? /* @__PURE__ */ new Date() : Ra());
|
|
2471
2869
|
});
|
|
2472
2870
|
}
|
|
2473
2871
|
//#endregion
|
|
2474
2872
|
//#region src/framework/hooks/use-reduced-motion.ts
|
|
2475
|
-
function
|
|
2873
|
+
function Wa() {
|
|
2476
2874
|
if (typeof window > "u" || typeof window.matchMedia != "function") return () => !1;
|
|
2477
|
-
let e = window.matchMedia("(prefers-reduced-motion: reduce)"), [t, n] =
|
|
2478
|
-
return e.addEventListener("change", r),
|
|
2875
|
+
let e = window.matchMedia("(prefers-reduced-motion: reduce)"), [t, n] = D(e.matches), r = (e) => n(e.matches);
|
|
2876
|
+
return e.addEventListener("change", r), O(() => e.removeEventListener("change", r)), t;
|
|
2479
2877
|
}
|
|
2480
2878
|
//#endregion
|
|
2481
2879
|
//#region src/framework/hooks/use-widget-entity-group.ts
|
|
2482
|
-
function
|
|
2483
|
-
let t = e.minEntities ?? 1, n =
|
|
2880
|
+
function Ga(e) {
|
|
2881
|
+
let t = e.minEntities ?? 1, n = E(() => e.entities().length), r = E(() => n() >= t), i = E(() => !r() || !e.calculateGroupData ? null : e.calculateGroupData(e.entities())), a = E(() => {
|
|
2484
2882
|
if (!r()) return;
|
|
2485
2883
|
let t = e.aggregationMode?.();
|
|
2486
2884
|
if (!t || t === "none") return;
|
|
2487
2885
|
let n = e.entities();
|
|
2488
|
-
if (t === "light" || t === "binary-sensor" || t === "switch") return
|
|
2489
|
-
if (t === "sensor") return
|
|
2490
|
-
}), o =
|
|
2886
|
+
if (t === "light" || t === "binary-sensor" || t === "switch") return kr(n, e.allEntitiesMode);
|
|
2887
|
+
if (t === "sensor") return Ar(n, e.sensorGroupType?.() ?? "mean", !0);
|
|
2888
|
+
}), o = E(() => r() ? void 0 : e.emptyStateConfig);
|
|
2491
2889
|
return {
|
|
2492
2890
|
entities: e.entities,
|
|
2493
2891
|
groupData: i,
|
|
@@ -2499,7 +2897,7 @@ function xa(e) {
|
|
|
2499
2897
|
}
|
|
2500
2898
|
//#endregion
|
|
2501
2899
|
//#region src/framework/theming/svg-colors.ts
|
|
2502
|
-
var
|
|
2900
|
+
var Ka = {
|
|
2503
2901
|
solar: "oklch(0.74 0.18 60)",
|
|
2504
2902
|
grid: "oklch(0.62 0.12 245)",
|
|
2505
2903
|
battery: "oklch(0.70 0.18 145)",
|
|
@@ -2508,21 +2906,21 @@ var Sa = {
|
|
|
2508
2906
|
positive: "oklch(0.70 0.14 160)",
|
|
2509
2907
|
negative: "oklch(0.64 0.22 27)"
|
|
2510
2908
|
};
|
|
2511
|
-
function
|
|
2909
|
+
function qa(e) {
|
|
2512
2910
|
return {
|
|
2513
2911
|
fill: `color-mix(in oklch, ${e} 20%, transparent)`,
|
|
2514
2912
|
stroke: e,
|
|
2515
2913
|
solid: e
|
|
2516
2914
|
};
|
|
2517
2915
|
}
|
|
2518
|
-
var
|
|
2916
|
+
var Ja = Object.fromEntries(Object.entries(Ka).map(([e, t]) => [e, qa(t)])), Ya = o.enum([
|
|
2519
2917
|
"success",
|
|
2520
2918
|
"warning",
|
|
2521
2919
|
"danger",
|
|
2522
2920
|
"info",
|
|
2523
2921
|
"neutral",
|
|
2524
2922
|
"accent"
|
|
2525
|
-
]),
|
|
2923
|
+
]), Xa = {
|
|
2526
2924
|
title: e(() => o.string().optional().meta({
|
|
2527
2925
|
title: "Title",
|
|
2528
2926
|
description: "Optional display name override"
|
|
@@ -2542,38 +2940,38 @@ var wa = Object.fromEntries(Object.entries(Sa).map(([e, t]) => [e, Ca(t)])), Ta
|
|
|
2542
2940
|
formType: "area-picker",
|
|
2543
2941
|
title: "Area"
|
|
2544
2942
|
}), "widgetFields.areaId")
|
|
2545
|
-
},
|
|
2943
|
+
}, Za = 24;
|
|
2546
2944
|
function $(e) {
|
|
2547
2945
|
let t = {};
|
|
2548
2946
|
for (let [n, r] of Object.entries(e)) r !== void 0 && (t[n] = r);
|
|
2549
2947
|
return t;
|
|
2550
2948
|
}
|
|
2551
|
-
function
|
|
2949
|
+
function Qa() {
|
|
2552
2950
|
return o.string().optional().meta({
|
|
2553
2951
|
title: "Title",
|
|
2554
2952
|
description: "Optional display name override"
|
|
2555
2953
|
});
|
|
2556
2954
|
}
|
|
2557
|
-
function
|
|
2955
|
+
function $a(e) {
|
|
2558
2956
|
return (e.default === void 0 ? o.string().optional() : o.string().default(e.default)).meta($({
|
|
2559
2957
|
title: e.title,
|
|
2560
2958
|
description: e.description
|
|
2561
2959
|
}));
|
|
2562
2960
|
}
|
|
2563
|
-
function
|
|
2961
|
+
function eo(e) {
|
|
2564
2962
|
let t = o.number();
|
|
2565
2963
|
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($({
|
|
2566
2964
|
title: e.title,
|
|
2567
2965
|
description: e.description
|
|
2568
2966
|
}));
|
|
2569
2967
|
}
|
|
2570
|
-
function
|
|
2968
|
+
function to(e) {
|
|
2571
2969
|
return o.boolean().default(e.default ?? !1).meta($({
|
|
2572
2970
|
title: e.title,
|
|
2573
2971
|
description: e.description
|
|
2574
2972
|
}));
|
|
2575
2973
|
}
|
|
2576
|
-
function
|
|
2974
|
+
function no(e, t) {
|
|
2577
2975
|
let n = o.enum(e);
|
|
2578
2976
|
return (t.default === void 0 ? n.optional() : n.default(t.default)).meta($({
|
|
2579
2977
|
title: t.title,
|
|
@@ -2582,14 +2980,14 @@ function Ma(e, t) {
|
|
|
2582
2980
|
icons: t.icons
|
|
2583
2981
|
}));
|
|
2584
2982
|
}
|
|
2585
|
-
function
|
|
2983
|
+
function ro(e, t) {
|
|
2586
2984
|
return o.array(o.enum(e)).default([...t.default ?? []]).meta($({
|
|
2587
2985
|
title: t.title,
|
|
2588
2986
|
description: t.description,
|
|
2589
2987
|
labels: t.labels
|
|
2590
2988
|
}));
|
|
2591
2989
|
}
|
|
2592
|
-
function
|
|
2990
|
+
function io(e, t) {
|
|
2593
2991
|
return o.array(o.string()).default([]).meta($({
|
|
2594
2992
|
domain: e,
|
|
2595
2993
|
title: t?.title ?? "Entities",
|
|
@@ -2597,7 +2995,7 @@ function Pa(e, t) {
|
|
|
2597
2995
|
deviceClass: t?.deviceClass
|
|
2598
2996
|
}));
|
|
2599
2997
|
}
|
|
2600
|
-
function
|
|
2998
|
+
function ao(e, t) {
|
|
2601
2999
|
return o.array(o.string()).default([]).meta($({
|
|
2602
3000
|
domain: e,
|
|
2603
3001
|
title: t?.title ?? "Entity",
|
|
@@ -2606,13 +3004,13 @@ function Fa(e, t) {
|
|
|
2606
3004
|
singleSelect: !0
|
|
2607
3005
|
}));
|
|
2608
3006
|
}
|
|
2609
|
-
function
|
|
3007
|
+
function oo(e) {
|
|
2610
3008
|
return o.string().optional().meta({
|
|
2611
3009
|
formType: "area-picker",
|
|
2612
3010
|
title: e?.title ?? "Area"
|
|
2613
3011
|
});
|
|
2614
3012
|
}
|
|
2615
|
-
function
|
|
3013
|
+
function so(e) {
|
|
2616
3014
|
let t = o.string().meta($({
|
|
2617
3015
|
formType: "icon-picker",
|
|
2618
3016
|
title: e?.title ?? "Icon",
|
|
@@ -2620,7 +3018,7 @@ function La(e) {
|
|
|
2620
3018
|
}));
|
|
2621
3019
|
return e?.default === void 0 ? t.optional() : t.default(e.default);
|
|
2622
3020
|
}
|
|
2623
|
-
function
|
|
3021
|
+
function co(e) {
|
|
2624
3022
|
let t = e?.presets && Object.fromEntries(Object.entries(e.presets).map(([e, t]) => [e, {
|
|
2625
3023
|
label: t.label,
|
|
2626
3024
|
thumb: t.thumb
|
|
@@ -2632,36 +3030,36 @@ function Ra(e) {
|
|
|
2632
3030
|
}));
|
|
2633
3031
|
return e?.default === void 0 ? n.optional() : n.default(e.default);
|
|
2634
3032
|
}
|
|
2635
|
-
function
|
|
3033
|
+
function lo(e) {
|
|
2636
3034
|
return o.array(o.string()).default([]).meta($({
|
|
2637
3035
|
title: e.title,
|
|
2638
3036
|
description: e.description
|
|
2639
3037
|
}));
|
|
2640
3038
|
}
|
|
2641
|
-
function
|
|
3039
|
+
function uo(e, t) {
|
|
2642
3040
|
let n = o.object(e);
|
|
2643
|
-
return n.default(
|
|
3041
|
+
return n.default(Xt(n)).meta({ title: t.title });
|
|
2644
3042
|
}
|
|
2645
|
-
function
|
|
3043
|
+
function fo(e) {
|
|
2646
3044
|
return e.def;
|
|
2647
3045
|
}
|
|
2648
|
-
function
|
|
3046
|
+
function po(e) {
|
|
2649
3047
|
if (o.globalRegistry.get(e)?.formType === "list") return !0;
|
|
2650
|
-
let t =
|
|
2651
|
-
return t.shape ? Object.values(t.shape).some(
|
|
3048
|
+
let t = fo(e);
|
|
3049
|
+
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;
|
|
2652
3050
|
}
|
|
2653
|
-
function
|
|
2654
|
-
let t = e, n =
|
|
2655
|
-
for (; n;) t = n, n =
|
|
3051
|
+
function mo(e) {
|
|
3052
|
+
let t = e, n = fo(t).innerType;
|
|
3053
|
+
for (; n;) t = n, n = fo(t).innerType;
|
|
2656
3054
|
return t;
|
|
2657
3055
|
}
|
|
2658
|
-
function
|
|
2659
|
-
let t =
|
|
3056
|
+
function ho(e) {
|
|
3057
|
+
let t = fo(mo(e));
|
|
2660
3058
|
if (t.shape) return new Set(Object.keys(t.shape));
|
|
2661
3059
|
if (t.options) {
|
|
2662
3060
|
let e = [];
|
|
2663
3061
|
for (let n of t.options) {
|
|
2664
|
-
let t =
|
|
3062
|
+
let t = ho(n);
|
|
2665
3063
|
if (!t) return null;
|
|
2666
3064
|
e.push(t);
|
|
2667
3065
|
}
|
|
@@ -2673,7 +3071,7 @@ function Wa(e) {
|
|
|
2673
3071
|
}
|
|
2674
3072
|
return null;
|
|
2675
3073
|
}
|
|
2676
|
-
function
|
|
3074
|
+
function go(e, t, n) {
|
|
2677
3075
|
let r = { [t]: n };
|
|
2678
3076
|
try {
|
|
2679
3077
|
return e.parse(r);
|
|
@@ -2681,12 +3079,12 @@ function Ga(e, t, n) {
|
|
|
2681
3079
|
return r;
|
|
2682
3080
|
}
|
|
2683
3081
|
}
|
|
2684
|
-
function
|
|
3082
|
+
function _o(e, t) {
|
|
2685
3083
|
if (!Number.isInteger(t.max) || t.max < 1) throw Error(`field.list: max must be a positive integer, got ${t.max}`);
|
|
2686
|
-
if (t.max >
|
|
3084
|
+
if (t.max > Za) throw Error(`field.list: max ${t.max} exceeds the ceiling of ${Za}`);
|
|
2687
3085
|
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}`);
|
|
2688
|
-
if (
|
|
2689
|
-
if (t.labelField !== void 0 && !
|
|
3086
|
+
if (po(e)) throw Error("field.list: a list item cannot contain another field.list (depth 1 only)");
|
|
3087
|
+
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`);
|
|
2690
3088
|
let n = o.array(e);
|
|
2691
3089
|
return t.min !== void 0 && (n = n.min(t.min)), n = n.max(t.max), n.default([]).meta($({
|
|
2692
3090
|
formType: "list",
|
|
@@ -2696,7 +3094,7 @@ function Ka(e, t) {
|
|
|
2696
3094
|
labelField: t.labelField
|
|
2697
3095
|
}));
|
|
2698
3096
|
}
|
|
2699
|
-
function
|
|
3097
|
+
function vo(e, t, n) {
|
|
2700
3098
|
let r = Object.keys(t)[0];
|
|
2701
3099
|
if (r === void 0) throw Error("field.variants: at least one variant is required");
|
|
2702
3100
|
if (n.shared && e in n.shared) throw Error(`field.variants: shared fields cannot redefine the discriminator "${e}"`);
|
|
@@ -2709,7 +3107,7 @@ function qa(e, t, n) {
|
|
|
2709
3107
|
...r,
|
|
2710
3108
|
[e]: o.literal(t)
|
|
2711
3109
|
})), a = o.discriminatedUnion(e, i), s = i[0];
|
|
2712
|
-
return a.default(s ?
|
|
3110
|
+
return a.default(s ? go(s, e, r) : {}).meta($({
|
|
2713
3111
|
formType: "variants",
|
|
2714
3112
|
discriminator: e,
|
|
2715
3113
|
title: n.title,
|
|
@@ -2717,35 +3115,35 @@ function qa(e, t, n) {
|
|
|
2717
3115
|
labels: n.labels
|
|
2718
3116
|
}));
|
|
2719
3117
|
}
|
|
2720
|
-
var
|
|
2721
|
-
title:
|
|
2722
|
-
text:
|
|
2723
|
-
number:
|
|
2724
|
-
toggle:
|
|
2725
|
-
choice:
|
|
2726
|
-
choices:
|
|
2727
|
-
entities:
|
|
2728
|
-
entity:
|
|
2729
|
-
area:
|
|
2730
|
-
icon:
|
|
2731
|
-
image:
|
|
2732
|
-
stringList:
|
|
2733
|
-
group:
|
|
2734
|
-
list:
|
|
2735
|
-
variants:
|
|
3118
|
+
var yo = {
|
|
3119
|
+
title: Qa,
|
|
3120
|
+
text: $a,
|
|
3121
|
+
number: eo,
|
|
3122
|
+
toggle: to,
|
|
3123
|
+
choice: no,
|
|
3124
|
+
choices: ro,
|
|
3125
|
+
entities: io,
|
|
3126
|
+
entity: ao,
|
|
3127
|
+
area: oo,
|
|
3128
|
+
icon: so,
|
|
3129
|
+
image: co,
|
|
3130
|
+
stringList: lo,
|
|
3131
|
+
group: uo,
|
|
3132
|
+
list: _o,
|
|
3133
|
+
variants: vo
|
|
2736
3134
|
};
|
|
2737
|
-
function
|
|
3135
|
+
function bo(e) {
|
|
2738
3136
|
return o.object(e);
|
|
2739
3137
|
}
|
|
2740
3138
|
//#endregion
|
|
2741
3139
|
//#region src/framework/image-src.ts
|
|
2742
|
-
function
|
|
2743
|
-
let n =
|
|
2744
|
-
return n === void 0 ?
|
|
3140
|
+
function xo(e, t) {
|
|
3141
|
+
let n = Vt(e);
|
|
3142
|
+
return n === void 0 ? Ut(e) : t?.[n]?.src;
|
|
2745
3143
|
}
|
|
2746
3144
|
//#endregion
|
|
2747
3145
|
//#region src/shared/spline.ts
|
|
2748
|
-
function
|
|
3146
|
+
function So(e) {
|
|
2749
3147
|
if (e.length < 2) return "";
|
|
2750
3148
|
let t = e[0], n = e[1];
|
|
2751
3149
|
if (!t || !n) return "";
|
|
@@ -2772,14 +3170,14 @@ function Za(e) {
|
|
|
2772
3170
|
}
|
|
2773
3171
|
//#endregion
|
|
2774
3172
|
//#region src/theme.ts
|
|
2775
|
-
function
|
|
3173
|
+
function Co() {
|
|
2776
3174
|
return document.documentElement.classList.contains("dark");
|
|
2777
3175
|
}
|
|
2778
3176
|
//#endregion
|
|
2779
3177
|
//#region src/version.ts
|
|
2780
|
-
var
|
|
3178
|
+
var wo = {
|
|
2781
3179
|
name: "@glasshome/widget-sdk",
|
|
2782
|
-
version: "1.
|
|
3180
|
+
version: "1.21.0",
|
|
2783
3181
|
description: "SDK for building GlassHome dashboard widgets with SolidJS",
|
|
2784
3182
|
keywords: [
|
|
2785
3183
|
"dashboard",
|
|
@@ -2860,7 +3258,7 @@ var $a = {
|
|
|
2860
3258
|
zod: "^4.1.13"
|
|
2861
3259
|
},
|
|
2862
3260
|
devDependencies: {
|
|
2863
|
-
"@glasshome/ui": "1.
|
|
3261
|
+
"@glasshome/ui": "1.25.0",
|
|
2864
3262
|
"@solidjs/testing-library": "^0.8.10",
|
|
2865
3263
|
"@types/bun": "^1.4.0",
|
|
2866
3264
|
"@types/node": "^25.2.2",
|
|
@@ -2875,10 +3273,10 @@ var $a = {
|
|
|
2875
3273
|
},
|
|
2876
3274
|
peerDependencies: {
|
|
2877
3275
|
"@glasshome/sync-layer": "0.9.1",
|
|
2878
|
-
"@glasshome/ui": "1.
|
|
3276
|
+
"@glasshome/ui": "1.25.0",
|
|
2879
3277
|
"solid-js": "^1.9.11"
|
|
2880
3278
|
},
|
|
2881
3279
|
engines: { node: ">=18" }
|
|
2882
3280
|
}.version;
|
|
2883
3281
|
//#endregion
|
|
2884
|
-
export {
|
|
3282
|
+
export { we as Badge, Ee as Button, Oe as ButtonGroup, Ae as Carousel, je as CarouselContent, Me as CarouselDots, Ne as CarouselItem, Pe as CarouselNext, Fe as CarouselPrevious, Ie as ColorDisc, Le as ColorSlider, Re as ColorWheel, ze as CountPill, Ye as Icon, Xe as Input, Ze as Label, wi as PanelEntityRow, mi as PanelFacts, pi as PanelRow, fi as PanelRows, di as PanelSection, et as Progress, tt as ResponsiveDialog, nt as ResponsiveDialogBody, it as ResponsiveDialogClose, at as ResponsiveDialogContent, ot as ResponsiveDialogDescription, st as ResponsiveDialogFooter, lt as ResponsiveDialogHeader, ut as ResponsiveDialogTitle, wo as SDK_VERSION, dt as SchemaForm, ft as SectionIcon, gt as SectionTitle, _t as Select, vt as SelectContent, yt as SelectItem, bt as SelectTrigger, xt as SelectValue, St as Slider, Ct as SwatchPicker, wt as Switch, Tt as Tabs, Dt as TabsContent, kt as TabsList, jt as TabsTrigger, Nt as TemperatureBar, Pt as Toggle, Ft as ToggleGroup, Lt as ToggleGroupItem, Ya as ToneSchema, Y as Widget, tr as WidgetAction, ir as WidgetBackdrop, nr as WidgetChip, er as WidgetChoice, yr as WidgetContent, Qn as WidgetControls, U as WidgetCtx, qi as WidgetDebugTab, Gi as WidgetDebugView, sa as WidgetDialog, ar as WidgetGlyph, Xn as WidgetHead, Zn as WidgetHero, In as WidgetIcon, rr as WidgetLayer, r as WidgetManifestSchema, kn as WidgetSizeCtx, gr as WidgetSliderFill, xr as WidgetStatus, $n as WidgetStepper, wr as WidgetTitle, Br as WidgetValue, Ai as buildDebugData, ee as byDomain, kr as calculateLightGroup, Ar as calculateSensorGroup, Tr as copyText, Fr as countActiveEntities, bo as defineConfig, Zt as defineWidget, t as deprecations, yo as field, n as formatDeprecation, i as formatSchemaError, Pr as getEntityAttribute, s as getForecasts, c as getStream, l as getWebRtcClientConfig, u as hassMediaUrl, Bt as imagePreset, xo as imageSrc, Ht as imageUrl, dr as injectTokens, Co as isDark, Nr as isEntityActive, Ci as isPanelControllable, Wt as mediaUrl, So as monotoneCubicPath, Gt as parseColor, Kt as presetValue, d as sendWebRtcCandidate, f as startWebRtcSession, p as state, Ja as svgColors, m as trackEntityHistory, h as untrackEntityHistory, g as useArea, _ as useCalendarEvents, v as useCamera, Mn as useConfirm, y as useConnection, Or as useCopyText, b as useCurrency, Ua as useDaylight, x as useEntities, te as useEntity, ne as useEntityHistory, re as useEntityStatistics, ie as useForecast, ae as useHassConfig, ja as useIntersectionPause, oe as useLocale, Aa as useMaterial, Wa as useReducedMotion, en as useService, ce as useStore, le as useTemperatureUnit, rn as useToggle, nn as useTurnOff, tn as useTurnOn, pe as useUnitSystem, Qt as useWidgetContext, ua as useWidgetDashboard, on as useWidgetDialog, An as useWidgetDimensions, Ga as useWidgetEntityGroup, On as useWidgetGestures, fa as useWidgetViewer, Xa as widgetFields, a as z };
|