uidex 0.2.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +253 -353
  2. package/dist/cli/cli.cjs +3324 -0
  3. package/dist/cli/cli.cjs.map +1 -0
  4. package/dist/cloud/index.cjs +169 -0
  5. package/dist/cloud/index.cjs.map +1 -0
  6. package/dist/cloud/index.js +140 -0
  7. package/dist/cloud/index.js.map +1 -0
  8. package/dist/headless/index.cjs +4143 -0
  9. package/dist/headless/index.cjs.map +1 -0
  10. package/dist/headless/index.d.cts +220 -0
  11. package/dist/headless/index.d.ts +220 -0
  12. package/dist/headless/index.js +4130 -0
  13. package/dist/headless/index.js.map +1 -0
  14. package/dist/index.cjs +8704 -9883
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +968 -146
  17. package/dist/index.d.ts +968 -146
  18. package/dist/index.js +8327 -9492
  19. package/dist/index.js.map +1 -1
  20. package/dist/playwright/index.cjs +164 -24
  21. package/dist/playwright/index.cjs.map +1 -1
  22. package/dist/playwright/index.d.cts +30 -53
  23. package/dist/playwright/index.d.ts +30 -53
  24. package/dist/playwright/index.js +148 -21
  25. package/dist/playwright/index.js.map +1 -1
  26. package/dist/playwright/reporter.cjs +62 -28
  27. package/dist/playwright/reporter.cjs.map +1 -1
  28. package/dist/playwright/reporter.d.cts +24 -12
  29. package/dist/playwright/reporter.d.ts +24 -12
  30. package/dist/playwright/reporter.js +62 -28
  31. package/dist/playwright/reporter.js.map +1 -1
  32. package/dist/react/index.cjs +8706 -9883
  33. package/dist/react/index.cjs.map +1 -1
  34. package/dist/react/index.d.cts +720 -146
  35. package/dist/react/index.d.ts +720 -146
  36. package/dist/react/index.js +8518 -9629
  37. package/dist/react/index.js.map +1 -1
  38. package/dist/scan/index.cjs +3360 -0
  39. package/dist/scan/index.cjs.map +1 -0
  40. package/dist/scan/index.d.cts +378 -0
  41. package/dist/scan/index.d.ts +378 -0
  42. package/dist/scan/index.js +3303 -0
  43. package/dist/scan/index.js.map +1 -0
  44. package/package.json +67 -60
  45. package/templates/claude/audit.md +43 -0
  46. package/templates/claude/rules.md +227 -0
  47. package/claude/audit-command.md +0 -46
  48. package/claude/rules.md +0 -167
  49. package/dist/api/index.cjs +0 -254
  50. package/dist/api/index.cjs.map +0 -1
  51. package/dist/api/index.d.cts +0 -236
  52. package/dist/api/index.d.ts +0 -236
  53. package/dist/api/index.js +0 -226
  54. package/dist/api/index.js.map +0 -1
  55. package/dist/core/index.cjs +0 -11045
  56. package/dist/core/index.cjs.map +0 -1
  57. package/dist/core/index.d.cts +0 -424
  58. package/dist/core/index.d.ts +0 -424
  59. package/dist/core/index.global.js +0 -66516
  60. package/dist/core/index.global.js.map +0 -1
  61. package/dist/core/index.js +0 -10995
  62. package/dist/core/index.js.map +0 -1
  63. package/dist/core/style.css +0 -1529
  64. package/dist/scripts/cli.cjs +0 -3904
  65. package/uidex.schema.json +0 -93
@@ -0,0 +1,4143 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/headless/index.ts
21
+ var headless_exports = {};
22
+ __export(headless_exports, {
23
+ createHeadless: () => createHeadless
24
+ });
25
+ module.exports = __toCommonJS(headless_exports);
26
+
27
+ // src/entities/types.ts
28
+ var ENTITY_KINDS = [
29
+ "route",
30
+ "page",
31
+ "feature",
32
+ "widget",
33
+ "region",
34
+ "element",
35
+ "primitive",
36
+ "flow"
37
+ ];
38
+ function isMetaKind(kind) {
39
+ return kind !== "route" && kind !== "flow";
40
+ }
41
+ function isMetaEntity(entity) {
42
+ return isMetaKind(entity.kind);
43
+ }
44
+ function entityKey(entity) {
45
+ return entity.kind === "route" ? entity.path : entity.id;
46
+ }
47
+ function sameRef(a, b) {
48
+ if (a === b) return true;
49
+ if (a === null || b === null) return false;
50
+ return a.kind === b.kind && a.id === b.id;
51
+ }
52
+ var UnknownEntityKindError = class extends Error {
53
+ kind;
54
+ constructor(kind) {
55
+ super(`Unknown entity kind: ${kind}`);
56
+ this.name = "UnknownEntityKindError";
57
+ this.kind = kind;
58
+ }
59
+ };
60
+ var KIND_SET = new Set(ENTITY_KINDS);
61
+ function assertEntityKind(kind) {
62
+ if (!KIND_SET.has(kind)) throw new UnknownEntityKindError(kind);
63
+ }
64
+
65
+ // src/entities/registry.ts
66
+ function emptyStore() {
67
+ return {
68
+ route: /* @__PURE__ */ new Map(),
69
+ page: /* @__PURE__ */ new Map(),
70
+ feature: /* @__PURE__ */ new Map(),
71
+ widget: /* @__PURE__ */ new Map(),
72
+ region: /* @__PURE__ */ new Map(),
73
+ element: /* @__PURE__ */ new Map(),
74
+ primitive: /* @__PURE__ */ new Map(),
75
+ flow: /* @__PURE__ */ new Map()
76
+ };
77
+ }
78
+ function computeFlowIds(flows, targetId) {
79
+ const ids = [];
80
+ for (const flow of flows) {
81
+ if (flow.touches.includes(targetId)) ids.push(flow.id);
82
+ }
83
+ return ids;
84
+ }
85
+ function freezeEntity(entity, flows) {
86
+ if (!isMetaKind(entity.kind)) return entity;
87
+ const withMeta = entity;
88
+ if (withMeta.meta === void 0) return entity;
89
+ const computedFlows = Object.freeze(computeFlowIds(flows, withMeta.id));
90
+ const mergedMeta = { ...withMeta.meta, flows: computedFlows };
91
+ return { ...entity, meta: Object.freeze(mergedMeta) };
92
+ }
93
+ function createRegistry() {
94
+ const store = emptyStore();
95
+ let flowsCache = null;
96
+ const getFlows = () => {
97
+ if (flowsCache === null) flowsCache = Array.from(store.flow.values());
98
+ return flowsCache;
99
+ };
100
+ const add = (entity) => {
101
+ assertEntityKind(entity.kind);
102
+ const key = entityKey(entity);
103
+ store[entity.kind].set(key, entity);
104
+ flowsCache = null;
105
+ };
106
+ const get = (kind, id) => {
107
+ assertEntityKind(kind);
108
+ const raw = store[kind].get(id);
109
+ if (raw === void 0) return void 0;
110
+ return freezeEntity(raw, getFlows());
111
+ };
112
+ const list = (kind) => {
113
+ assertEntityKind(kind);
114
+ const flows = getFlows();
115
+ return Array.from(
116
+ store[kind].values(),
117
+ (e) => freezeEntity(e, flows)
118
+ );
119
+ };
120
+ const allEntities = function* () {
121
+ for (const kind of Object.keys(store)) {
122
+ for (const entity of store[kind].values()) {
123
+ yield entity;
124
+ }
125
+ }
126
+ };
127
+ const query = (predicate) => {
128
+ const flows = getFlows();
129
+ const result = [];
130
+ for (const entity of allEntities()) {
131
+ if (predicate(entity)) result.push(freezeEntity(entity, flows));
132
+ }
133
+ return result;
134
+ };
135
+ const byScope = (scope) => query(
136
+ (entity) => "scopes" in entity && Array.isArray(entity.scopes) && entity.scopes.includes(scope)
137
+ );
138
+ const touchedBy = (flowId) => {
139
+ const flow = store.flow.get(flowId);
140
+ if (flow === void 0) return [];
141
+ const ids = new Set(flow.touches);
142
+ return query((entity) => {
143
+ if (!isMetaEntity(entity)) return false;
144
+ return ids.has(entity.id);
145
+ });
146
+ };
147
+ return { add, get, list, query, byScope, touchedBy };
148
+ }
149
+
150
+ // src/entities/style.ts
151
+ var import_lucide = require("lucide");
152
+ var KIND_STYLE = {
153
+ route: {
154
+ icon: import_lucide.Route,
155
+ tone: "text-blue-700 dark:text-blue-400",
156
+ chip: "bg-blue-50 text-blue-700 inset-ring inset-ring-blue-700/10 group-data-hover:bg-blue-100 dark:bg-blue-400/10 dark:text-blue-400 dark:inset-ring-blue-400/30 dark:group-data-hover:bg-blue-400/20",
157
+ color: "#60a5fa",
158
+ label: "Route"
159
+ },
160
+ page: {
161
+ icon: import_lucide.FileText,
162
+ tone: "text-emerald-700 dark:text-emerald-400",
163
+ chip: "bg-emerald-50 text-emerald-700 inset-ring inset-ring-emerald-600/20 group-data-hover:bg-emerald-100 dark:bg-emerald-400/10 dark:text-emerald-400 dark:inset-ring-emerald-500/20 dark:group-data-hover:bg-emerald-400/20",
164
+ color: "#34d399",
165
+ label: "Page"
166
+ },
167
+ feature: {
168
+ icon: import_lucide.Sparkles,
169
+ tone: "text-amber-700 dark:text-amber-500",
170
+ chip: "bg-amber-50 text-amber-800 inset-ring inset-ring-amber-600/20 group-data-hover:bg-amber-100 dark:bg-amber-400/10 dark:text-amber-500 dark:inset-ring-amber-400/20 dark:group-data-hover:bg-amber-400/20",
171
+ color: "#fbbf24",
172
+ label: "Feature"
173
+ },
174
+ widget: {
175
+ icon: import_lucide.LayoutGrid,
176
+ tone: "text-violet-700 dark:text-violet-400",
177
+ chip: "bg-violet-50 text-violet-700 inset-ring inset-ring-violet-700/10 group-data-hover:bg-violet-100 dark:bg-violet-400/10 dark:text-violet-400 dark:inset-ring-violet-400/30 dark:group-data-hover:bg-violet-400/20",
178
+ color: "#a78bfa",
179
+ label: "Widget"
180
+ },
181
+ region: {
182
+ icon: import_lucide.LayoutPanelTop,
183
+ tone: "text-cyan-700 dark:text-cyan-400",
184
+ chip: "bg-cyan-50 text-cyan-700 inset-ring inset-ring-cyan-700/10 group-data-hover:bg-cyan-100 dark:bg-cyan-400/10 dark:text-cyan-400 dark:inset-ring-cyan-400/30 dark:group-data-hover:bg-cyan-400/20",
185
+ color: "#22d3ee",
186
+ label: "Region"
187
+ },
188
+ element: {
189
+ icon: import_lucide.MousePointerClick,
190
+ tone: "text-rose-700 dark:text-rose-400",
191
+ chip: "bg-rose-50 text-rose-700 inset-ring inset-ring-rose-600/10 group-data-hover:bg-rose-100 dark:bg-rose-400/10 dark:text-rose-400 dark:inset-ring-rose-400/20 dark:group-data-hover:bg-rose-400/20",
192
+ color: "#fb7185",
193
+ label: "Element"
194
+ },
195
+ primitive: {
196
+ icon: import_lucide.Circle,
197
+ tone: "text-slate-600 dark:text-slate-400",
198
+ chip: "bg-slate-50 text-slate-600 inset-ring inset-ring-slate-500/10 group-data-hover:bg-slate-100 dark:bg-slate-400/10 dark:text-slate-400 dark:inset-ring-slate-400/20 dark:group-data-hover:bg-slate-400/20",
199
+ color: "#94a3b8",
200
+ label: "Primitive"
201
+ },
202
+ flow: {
203
+ icon: import_lucide.Workflow,
204
+ tone: "text-fuchsia-700 dark:text-fuchsia-400",
205
+ chip: "bg-fuchsia-50 text-fuchsia-700 inset-ring inset-ring-fuchsia-700/10 group-data-hover:bg-fuchsia-100 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:inset-ring-fuchsia-400/20 dark:group-data-hover:bg-fuchsia-400/20",
206
+ color: "#e879f9",
207
+ label: "Flow"
208
+ }
209
+ };
210
+
211
+ // src/entities/display-name.ts
212
+ function prettify(id) {
213
+ const parts = id.split(/[-_]+/).filter(Boolean);
214
+ const words = parts.flatMap((part) => part.split(/(?=[A-Z])/).filter(Boolean));
215
+ if (words.length === 0) return "";
216
+ return words.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(" ");
217
+ }
218
+ function displayName(entity, node) {
219
+ if (entity.kind === "route") return prettify(entity.page);
220
+ if (entity.kind !== "flow") {
221
+ const authored = entity.meta?.name;
222
+ if (authored) return authored;
223
+ }
224
+ const aria = node?.getAttribute("aria-label")?.trim();
225
+ if (aria) return aria;
226
+ return prettify(entity.id);
227
+ }
228
+
229
+ // src/internal/cleanup.ts
230
+ function createCleanupStack() {
231
+ const stack = [];
232
+ return {
233
+ add(cleanup) {
234
+ if (!cleanup) return;
235
+ if (typeof cleanup === "function") stack.push(cleanup);
236
+ else stack.push(() => cleanup.destroy());
237
+ },
238
+ drain() {
239
+ for (let i = stack.length - 1; i >= 0; i--) {
240
+ try {
241
+ stack[i]();
242
+ } catch (err) {
243
+ console.error("[uidex] cleanup threw", err);
244
+ }
245
+ }
246
+ stack.length = 0;
247
+ }
248
+ };
249
+ }
250
+
251
+ // src/session/store.ts
252
+ var import_xstate3 = require("xstate");
253
+ var import_vanilla = require("zustand/vanilla");
254
+
255
+ // src/flows/highlight.ts
256
+ var import_xstate = require("xstate");
257
+ var initialContext = {
258
+ ref: null,
259
+ element: null,
260
+ pinnedRef: null,
261
+ color: null
262
+ };
263
+ var highlightMachine = (0, import_xstate.setup)({
264
+ types: {},
265
+ actions: {
266
+ showOverlay: () => {
267
+ },
268
+ hideOverlay: () => {
269
+ },
270
+ updateOverlay: () => {
271
+ }
272
+ }
273
+ }).createMachine({
274
+ id: "highlight",
275
+ initial: "none",
276
+ context: initialContext,
277
+ states: {
278
+ none: {
279
+ entry: [
280
+ (0, import_xstate.assign)({
281
+ ref: null,
282
+ element: null,
283
+ pinnedRef: null,
284
+ color: null
285
+ }),
286
+ { type: "hideOverlay" }
287
+ ],
288
+ on: {
289
+ HOVER: {
290
+ target: "transient",
291
+ actions: (0, import_xstate.assign)(({ event }) => ({
292
+ ref: event.ref,
293
+ element: event.element,
294
+ color: event.color ?? null
295
+ }))
296
+ },
297
+ PIN: {
298
+ target: "pinned",
299
+ actions: (0, import_xstate.assign)(({ context, event }) => ({
300
+ ref: event.ref ?? context.ref,
301
+ pinnedRef: event.ref ?? context.ref
302
+ }))
303
+ }
304
+ }
305
+ },
306
+ transient: {
307
+ entry: { type: "showOverlay" },
308
+ on: {
309
+ HOVER: {
310
+ actions: [
311
+ (0, import_xstate.assign)(({ event }) => ({
312
+ ref: event.ref,
313
+ element: event.element,
314
+ color: event.color ?? null
315
+ })),
316
+ { type: "updateOverlay" }
317
+ ]
318
+ },
319
+ UNHOVER: { target: "none" },
320
+ PIN: {
321
+ target: "pinned",
322
+ actions: (0, import_xstate.assign)(({ context, event }) => ({
323
+ pinnedRef: event.ref ?? context.ref
324
+ }))
325
+ }
326
+ }
327
+ },
328
+ pinned: {
329
+ entry: { type: "showOverlay" },
330
+ on: {
331
+ UNPIN: { target: "none" }
332
+ }
333
+ }
334
+ }
335
+ });
336
+
337
+ // src/flows/surface.ts
338
+ var import_xstate2 = require("xstate");
339
+ var initialContext2 = {
340
+ stack: [],
341
+ hover: null,
342
+ selection: null,
343
+ pinnedHighlight: null,
344
+ theme: "auto",
345
+ resolvedTheme: "light",
346
+ ingestActive: false
347
+ };
348
+ var surfaceMachine = (0, import_xstate2.setup)({
349
+ types: {},
350
+ actors: {
351
+ highlight: highlightMachine
352
+ },
353
+ actions: {
354
+ mountInspector: () => {
355
+ },
356
+ destroyInspector: () => {
357
+ },
358
+ openActionsPopup: () => {
359
+ },
360
+ closePopup: () => {
361
+ }
362
+ },
363
+ guards: {
364
+ hasPinnedHighlight: ({ context }) => context.pinnedHighlight !== null,
365
+ hasActions: () => false,
366
+ popupOpen: () => false,
367
+ stackDeeperThanTwo: ({ context }) => context.stack.length > 2,
368
+ stackEqualsTwo: ({ context }) => context.stack.length === 2,
369
+ stackEqualsOne: ({ context }) => context.stack.length === 1,
370
+ paletteAtBottomDepthTwo: ({ context }) => context.stack.length === 2 && context.stack[0]?.id === "command-palette"
371
+ }
372
+ }).createMachine({
373
+ id: "surface",
374
+ initial: "idle",
375
+ context: ({ input }) => ({
376
+ ...initialContext2,
377
+ ...input ?? {}
378
+ }),
379
+ invoke: {
380
+ id: "highlight",
381
+ src: "highlight"
382
+ },
383
+ on: {
384
+ HOVER: {
385
+ actions: [
386
+ (0, import_xstate2.assign)(({ event }) => ({ hover: event.ref })),
387
+ (0, import_xstate2.forwardTo)("highlight")
388
+ ]
389
+ },
390
+ UNHOVER: {
391
+ actions: [(0, import_xstate2.assign)({ hover: null }), (0, import_xstate2.forwardTo)("highlight")]
392
+ },
393
+ PIN: {
394
+ actions: [
395
+ (0, import_xstate2.assign)(({ context, event }) => ({
396
+ pinnedHighlight: event.ref ?? context.hover
397
+ })),
398
+ (0, import_xstate2.forwardTo)("highlight")
399
+ ]
400
+ },
401
+ UNPIN: {
402
+ actions: [(0, import_xstate2.assign)({ pinnedHighlight: null }), (0, import_xstate2.forwardTo)("highlight")]
403
+ },
404
+ SET_SELECTION: {
405
+ actions: (0, import_xstate2.assign)(({ event }) => ({ selection: event.ref }))
406
+ },
407
+ SET_THEME: {
408
+ actions: (0, import_xstate2.assign)(({ event }) => ({
409
+ theme: event.theme,
410
+ resolvedTheme: event.resolvedTheme
411
+ }))
412
+ },
413
+ SET_INGEST: {
414
+ actions: (0, import_xstate2.assign)(({ event }) => ({ ingestActive: event.active }))
415
+ }
416
+ },
417
+ states: {
418
+ idle: {
419
+ entry: (0, import_xstate2.assign)({ stack: [] }),
420
+ on: {
421
+ TOGGLE_INSPECTOR: { target: "inspecting" },
422
+ OPEN_PALETTE: { target: "palette" },
423
+ PUSH_VIEW: {
424
+ target: "viewing",
425
+ actions: (0, import_xstate2.assign)(({ event }) => ({ stack: [event.entry] }))
426
+ },
427
+ ESC: {
428
+ guard: "hasPinnedHighlight",
429
+ actions: [
430
+ (0, import_xstate2.assign)({ pinnedHighlight: null }),
431
+ (0, import_xstate2.sendTo)("highlight", { type: "UNPIN" })
432
+ ]
433
+ }
434
+ }
435
+ },
436
+ inspecting: {
437
+ entry: { type: "mountInspector" },
438
+ exit: { type: "destroyInspector" },
439
+ on: {
440
+ SELECT: {
441
+ target: "viewing",
442
+ actions: (0, import_xstate2.assign)(({ context, event }) => ({
443
+ selection: event.ref,
444
+ stack: [...context.stack, event.entry]
445
+ }))
446
+ },
447
+ PUSH_VIEW: {
448
+ target: "viewing",
449
+ actions: (0, import_xstate2.assign)(({ event }) => ({ stack: [event.entry] }))
450
+ },
451
+ TOGGLE_INSPECTOR: { target: "idle" },
452
+ OPEN_PALETTE: { target: "palette" },
453
+ ESC: { target: "idle" }
454
+ }
455
+ },
456
+ palette: {
457
+ entry: (0, import_xstate2.assign)({ stack: [{ id: "command-palette", ref: null }] }),
458
+ on: {
459
+ PUSH_VIEW: {
460
+ target: "viewing",
461
+ actions: (0, import_xstate2.assign)(({ context, event }) => ({
462
+ stack: [...context.stack, event.entry]
463
+ }))
464
+ },
465
+ CLOSE: { target: "idle" },
466
+ ESC: { target: "idle" },
467
+ CMD_K: [
468
+ {
469
+ guard: "hasActions",
470
+ actions: { type: "openActionsPopup" }
471
+ },
472
+ { target: "idle" }
473
+ ]
474
+ }
475
+ },
476
+ viewing: {
477
+ on: {
478
+ PUSH_VIEW: {
479
+ actions: (0, import_xstate2.assign)(({ context, event }) => ({
480
+ stack: [...context.stack, event.entry]
481
+ }))
482
+ },
483
+ POP_VIEW: [
484
+ {
485
+ guard: "stackDeeperThanTwo",
486
+ actions: (0, import_xstate2.assign)(({ context }) => ({
487
+ stack: context.stack.slice(0, -1)
488
+ }))
489
+ },
490
+ {
491
+ guard: "paletteAtBottomDepthTwo",
492
+ target: "palette"
493
+ },
494
+ {
495
+ guard: "stackEqualsTwo",
496
+ actions: (0, import_xstate2.assign)(({ context }) => ({
497
+ stack: context.stack.slice(0, -1)
498
+ }))
499
+ },
500
+ {
501
+ guard: "stackEqualsOne",
502
+ target: "idle"
503
+ }
504
+ ],
505
+ CLOSE: { target: "idle" },
506
+ ESC: [
507
+ {
508
+ guard: "popupOpen",
509
+ actions: { type: "closePopup" }
510
+ },
511
+ {
512
+ guard: "stackDeeperThanTwo",
513
+ actions: (0, import_xstate2.assign)(({ context }) => ({
514
+ stack: context.stack.slice(0, -1)
515
+ }))
516
+ },
517
+ {
518
+ guard: "paletteAtBottomDepthTwo",
519
+ target: "palette"
520
+ },
521
+ {
522
+ guard: "stackEqualsTwo",
523
+ actions: (0, import_xstate2.assign)(({ context }) => ({
524
+ stack: context.stack.slice(0, -1)
525
+ }))
526
+ },
527
+ {
528
+ guard: "stackEqualsOne",
529
+ target: "idle"
530
+ }
531
+ ]
532
+ }
533
+ }
534
+ }
535
+ });
536
+
537
+ // src/session/store.ts
538
+ var defaultSnapshot = {
539
+ hover: null,
540
+ selection: null,
541
+ stack: [],
542
+ pinnedHighlight: null,
543
+ inspectorActive: false,
544
+ theme: "auto",
545
+ resolvedTheme: "light",
546
+ ingestActive: false
547
+ };
548
+ function resolveTheme(preference, detect) {
549
+ if (preference !== "auto") return preference;
550
+ if (detect) return detect();
551
+ if (typeof globalThis !== "undefined" && typeof globalThis.matchMedia === "function") {
552
+ const mql = globalThis.matchMedia("(prefers-color-scheme: dark)");
553
+ return mql.matches ? "dark" : "light";
554
+ }
555
+ return "light";
556
+ }
557
+ function projectFromActor(actor) {
558
+ const sn = actor.getSnapshot();
559
+ const child = sn.children.highlight;
560
+ const childSnapshot = child?.getSnapshot();
561
+ const pinned = childSnapshot && childSnapshot.value === "pinned" ? childSnapshot.context.pinnedRef : null;
562
+ return {
563
+ hover: sn.context.hover,
564
+ selection: sn.context.selection,
565
+ stack: sn.context.stack,
566
+ pinnedHighlight: pinned,
567
+ inspectorActive: sn.matches("inspecting"),
568
+ theme: sn.context.theme,
569
+ resolvedTheme: sn.context.resolvedTheme,
570
+ ingestActive: sn.context.ingestActive
571
+ };
572
+ }
573
+ function createSession(options = {}) {
574
+ const { detectTheme, bindings, ...overrides } = options;
575
+ const initialPref = overrides.theme ?? defaultSnapshot.theme;
576
+ const initialResolved = overrides.resolvedTheme ?? resolveTheme(initialPref, detectTheme);
577
+ const initialStack = overrides.stack ?? [];
578
+ const input = {
579
+ hover: overrides.hover ?? null,
580
+ selection: overrides.selection ?? null,
581
+ pinnedHighlight: null,
582
+ theme: initialPref,
583
+ resolvedTheme: initialResolved,
584
+ ingestActive: overrides.ingestActive ?? false
585
+ };
586
+ const providedHighlight = highlightMachine.provide({
587
+ actions: {
588
+ showOverlay: ({ context }) => bindings?.highlight?.showOverlay?.(context),
589
+ hideOverlay: () => bindings?.highlight?.hideOverlay?.(),
590
+ updateOverlay: ({ context }) => bindings?.highlight?.updateOverlay?.(context)
591
+ }
592
+ });
593
+ const providedSurface = surfaceMachine.provide({
594
+ actions: {
595
+ mountInspector: () => bindings?.surface?.mountInspector?.(),
596
+ destroyInspector: () => bindings?.surface?.destroyInspector?.(),
597
+ openActionsPopup: () => bindings?.surface?.openActionsPopup?.(),
598
+ closePopup: () => bindings?.surface?.closePopup?.()
599
+ },
600
+ actors: {
601
+ highlight: providedHighlight
602
+ }
603
+ });
604
+ const actor = (0, import_xstate3.createActor)(providedSurface, { input });
605
+ actor.start();
606
+ if (initialStack.length > 0) {
607
+ actor.send({ type: "OPEN_PALETTE" });
608
+ for (let i = 1; i < initialStack.length; i++) {
609
+ actor.send({ type: "PUSH_VIEW", entry: initialStack[i] });
610
+ }
611
+ } else if (overrides.inspectorActive) {
612
+ actor.send({ type: "TOGGLE_INSPECTOR" });
613
+ }
614
+ if (overrides.pinnedHighlight) {
615
+ actor.send({ type: "PIN", ref: overrides.pinnedHighlight });
616
+ }
617
+ const store = (0, import_vanilla.createStore)((_set, get) => ({
618
+ ...projectFromActor(actor),
619
+ actions: {
620
+ hover(ref) {
621
+ if (sameRef(get().hover, ref)) return;
622
+ if (ref === null) {
623
+ actor.send({ type: "UNHOVER" });
624
+ } else {
625
+ actor.send({ type: "HOVER", ref, element: null });
626
+ }
627
+ },
628
+ select(ref) {
629
+ if (sameRef(get().selection, ref)) return;
630
+ actor.send({ type: "SET_SELECTION", ref });
631
+ },
632
+ pushStack(entry) {
633
+ if (entry.id === "command-palette" && get().stack.length === 0) {
634
+ actor.send({ type: "OPEN_PALETTE" });
635
+ } else {
636
+ actor.send({ type: "PUSH_VIEW", entry });
637
+ }
638
+ },
639
+ popStack() {
640
+ const sn = actor.getSnapshot();
641
+ if (sn.matches("palette")) {
642
+ actor.send({ type: "ESC" });
643
+ } else if (sn.matches("viewing")) {
644
+ actor.send({ type: "POP_VIEW" });
645
+ }
646
+ },
647
+ clearStack() {
648
+ if (get().stack.length === 0) return;
649
+ actor.send({ type: "CLOSE" });
650
+ },
651
+ openView(id, ref) {
652
+ const resolvedRef = ref === void 0 ? get().selection : ref;
653
+ get().actions.pushStack({ id, ref: resolvedRef });
654
+ },
655
+ closeView() {
656
+ get().actions.clearStack();
657
+ },
658
+ setInspectorActive(active) {
659
+ if (get().inspectorActive === active) return;
660
+ actor.send({ type: "TOGGLE_INSPECTOR" });
661
+ },
662
+ toggleInspector() {
663
+ actor.send({ type: "TOGGLE_INSPECTOR" });
664
+ },
665
+ pinHighlight(ref) {
666
+ if (sameRef(get().pinnedHighlight, ref)) return;
667
+ actor.send({ type: "PIN", ref });
668
+ },
669
+ clearPinnedHighlight() {
670
+ if (get().pinnedHighlight === null) return;
671
+ actor.send({ type: "UNPIN" });
672
+ },
673
+ setTheme(theme, resolved) {
674
+ const state = get();
675
+ const nextResolved = resolved ?? resolveTheme(theme, detectTheme);
676
+ if (state.theme === theme && state.resolvedTheme === nextResolved)
677
+ return;
678
+ actor.send({ type: "SET_THEME", theme, resolvedTheme: nextResolved });
679
+ },
680
+ setIngest(active) {
681
+ if (get().ingestActive === active) return;
682
+ actor.send({ type: "SET_INGEST", active });
683
+ }
684
+ }
685
+ }));
686
+ const projectAndSet = () => {
687
+ const next = projectFromActor(actor);
688
+ const prev = store.getState();
689
+ const updates = {};
690
+ if (!sameRef(prev.hover, next.hover)) updates.hover = next.hover;
691
+ if (!sameRef(prev.selection, next.selection))
692
+ updates.selection = next.selection;
693
+ if (prev.stack !== next.stack) updates.stack = next.stack;
694
+ if (!sameRef(prev.pinnedHighlight, next.pinnedHighlight))
695
+ updates.pinnedHighlight = next.pinnedHighlight;
696
+ if (prev.inspectorActive !== next.inspectorActive)
697
+ updates.inspectorActive = next.inspectorActive;
698
+ if (prev.theme !== next.theme) updates.theme = next.theme;
699
+ if (prev.resolvedTheme !== next.resolvedTheme)
700
+ updates.resolvedTheme = next.resolvedTheme;
701
+ if (prev.ingestActive !== next.ingestActive)
702
+ updates.ingestActive = next.ingestActive;
703
+ if (Object.keys(updates).length === 0) return;
704
+ store.setState(updates);
705
+ };
706
+ actor.subscribe(projectAndSet);
707
+ const session = store;
708
+ session.send = (event) => actor.send(event);
709
+ return session;
710
+ }
711
+
712
+ // src/styles/tailwind.built.css
713
+ var tailwind_built_default = `/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
714
+ @layer properties;
715
+ @layer theme, base, components, utilities;
716
+ @layer theme {
717
+ :root, :host {
718
+ --color-red-400: oklch(70.4% 0.191 22.216);
719
+ --color-red-500: oklch(63.7% 0.237 25.331);
720
+ --color-red-700: oklch(50.5% 0.213 27.518);
721
+ --color-amber-50: oklch(98.7% 0.022 95.277);
722
+ --color-amber-100: oklch(96.2% 0.059 95.617);
723
+ --color-amber-400: oklch(82.8% 0.189 84.429);
724
+ --color-amber-500: oklch(76.9% 0.188 70.08);
725
+ --color-amber-600: oklch(66.6% 0.179 58.318);
726
+ --color-amber-700: oklch(55.5% 0.163 48.998);
727
+ --color-amber-800: oklch(47.3% 0.137 46.201);
728
+ --color-emerald-50: oklch(97.9% 0.021 166.113);
729
+ --color-emerald-100: oklch(95% 0.052 163.051);
730
+ --color-emerald-400: oklch(76.5% 0.177 163.223);
731
+ --color-emerald-500: oklch(69.6% 0.17 162.48);
732
+ --color-emerald-600: oklch(59.6% 0.145 163.225);
733
+ --color-emerald-700: oklch(50.8% 0.118 165.612);
734
+ --color-cyan-50: oklch(98.4% 0.019 200.873);
735
+ --color-cyan-100: oklch(95.6% 0.045 203.388);
736
+ --color-cyan-400: oklch(78.9% 0.154 211.53);
737
+ --color-cyan-700: oklch(52% 0.105 223.128);
738
+ --color-blue-50: oklch(97% 0.014 254.604);
739
+ --color-blue-100: oklch(93.2% 0.032 255.585);
740
+ --color-blue-400: oklch(70.7% 0.165 254.624);
741
+ --color-blue-500: oklch(62.3% 0.214 259.815);
742
+ --color-blue-700: oklch(48.8% 0.243 264.376);
743
+ --color-violet-50: oklch(96.9% 0.016 293.756);
744
+ --color-violet-100: oklch(94.3% 0.029 294.588);
745
+ --color-violet-400: oklch(70.2% 0.183 293.541);
746
+ --color-violet-700: oklch(49.1% 0.27 292.581);
747
+ --color-fuchsia-50: oklch(97.7% 0.017 320.058);
748
+ --color-fuchsia-100: oklch(95.2% 0.037 318.852);
749
+ --color-fuchsia-400: oklch(74% 0.238 322.16);
750
+ --color-fuchsia-700: oklch(51.8% 0.253 323.949);
751
+ --color-rose-50: oklch(96.9% 0.015 12.422);
752
+ --color-rose-100: oklch(94.1% 0.03 12.58);
753
+ --color-rose-400: oklch(71.2% 0.194 13.428);
754
+ --color-rose-600: oklch(58.6% 0.253 17.585);
755
+ --color-rose-700: oklch(51.4% 0.222 16.935);
756
+ --color-slate-50: oklch(98.4% 0.003 247.858);
757
+ --color-slate-100: oklch(96.8% 0.007 247.896);
758
+ --color-slate-400: oklch(70.4% 0.04 256.788);
759
+ --color-slate-500: oklch(55.4% 0.046 257.417);
760
+ --color-slate-600: oklch(44.6% 0.043 257.281);
761
+ --color-neutral-50: oklch(98.5% 0 0);
762
+ --color-neutral-100: oklch(97% 0 0);
763
+ --color-neutral-400: oklch(70.8% 0 0);
764
+ --color-neutral-500: oklch(55.6% 0 0);
765
+ --color-neutral-800: oklch(26.9% 0 0);
766
+ --color-neutral-950: oklch(14.5% 0 0);
767
+ --color-black: #000;
768
+ --color-white: #fff;
769
+ --spacing: 0.25rem;
770
+ --container-sm: 24rem;
771
+ --container-xl: 36rem;
772
+ --text-xs: 0.75rem;
773
+ --text-xs--line-height: calc(1 / 0.75);
774
+ --text-sm: 0.875rem;
775
+ --text-sm--line-height: calc(1.25 / 0.875);
776
+ --text-base: 1rem;
777
+ --text-base--line-height: calc(1.5 / 1);
778
+ --text-xl: 1.25rem;
779
+ --text-xl--line-height: calc(1.75 / 1.25);
780
+ --font-weight-normal: 400;
781
+ --font-weight-medium: 500;
782
+ --font-weight-semibold: 600;
783
+ --tracking-tight: -0.025em;
784
+ --tracking-widest: 0.1em;
785
+ --leading-relaxed: 1.625;
786
+ --radius-md: calc(var(--radius) * 0.8);
787
+ --radius-lg: var(--radius);
788
+ --radius-xl: calc(var(--radius) * 1.4);
789
+ --radius-2xl: calc(var(--radius) * 1.8);
790
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
791
+ --animate-spin: spin 1s linear infinite;
792
+ --blur-sm: 8px;
793
+ --default-transition-duration: 150ms;
794
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
795
+ --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
796
+ Roboto, sans-serif;
797
+ --default-mono-font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
798
+ --color-muted: var(--muted);
799
+ --color-border: var(--border);
800
+ }
801
+ }
802
+ @layer base {
803
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
804
+ box-sizing: border-box;
805
+ margin: 0;
806
+ padding: 0;
807
+ border: 0 solid;
808
+ }
809
+ html, :host {
810
+ line-height: 1.5;
811
+ -webkit-text-size-adjust: 100%;
812
+ tab-size: 4;
813
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
814
+ font-feature-settings: var(--default-font-feature-settings, normal);
815
+ font-variation-settings: var(--default-font-variation-settings, normal);
816
+ -webkit-tap-highlight-color: transparent;
817
+ }
818
+ hr {
819
+ height: 0;
820
+ color: inherit;
821
+ border-top-width: 1px;
822
+ }
823
+ abbr:where([title]) {
824
+ -webkit-text-decoration: underline dotted;
825
+ text-decoration: underline dotted;
826
+ }
827
+ h1, h2, h3, h4, h5, h6 {
828
+ font-size: inherit;
829
+ font-weight: inherit;
830
+ }
831
+ a {
832
+ color: inherit;
833
+ -webkit-text-decoration: inherit;
834
+ text-decoration: inherit;
835
+ }
836
+ b, strong {
837
+ font-weight: bolder;
838
+ }
839
+ code, kbd, samp, pre {
840
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
841
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
842
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
843
+ font-size: 1em;
844
+ }
845
+ small {
846
+ font-size: 80%;
847
+ }
848
+ sub, sup {
849
+ font-size: 75%;
850
+ line-height: 0;
851
+ position: relative;
852
+ vertical-align: baseline;
853
+ }
854
+ sub {
855
+ bottom: -0.25em;
856
+ }
857
+ sup {
858
+ top: -0.5em;
859
+ }
860
+ table {
861
+ text-indent: 0;
862
+ border-color: inherit;
863
+ border-collapse: collapse;
864
+ }
865
+ :-moz-focusring {
866
+ outline: auto;
867
+ }
868
+ progress {
869
+ vertical-align: baseline;
870
+ }
871
+ summary {
872
+ display: list-item;
873
+ }
874
+ ol, ul, menu {
875
+ list-style: none;
876
+ }
877
+ img, svg, video, canvas, audio, iframe, embed, object {
878
+ display: block;
879
+ vertical-align: middle;
880
+ }
881
+ img, video {
882
+ max-width: 100%;
883
+ height: auto;
884
+ }
885
+ button, input, select, optgroup, textarea, ::file-selector-button {
886
+ font: inherit;
887
+ font-feature-settings: inherit;
888
+ font-variation-settings: inherit;
889
+ letter-spacing: inherit;
890
+ color: inherit;
891
+ border-radius: 0;
892
+ background-color: transparent;
893
+ opacity: 1;
894
+ }
895
+ :where(select:is([multiple], [size])) optgroup {
896
+ font-weight: bolder;
897
+ }
898
+ :where(select:is([multiple], [size])) optgroup option {
899
+ padding-inline-start: 20px;
900
+ }
901
+ ::file-selector-button {
902
+ margin-inline-end: 4px;
903
+ }
904
+ ::placeholder {
905
+ opacity: 1;
906
+ }
907
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
908
+ ::placeholder {
909
+ color: currentcolor;
910
+ @supports (color: color-mix(in lab, red, red)) {
911
+ color: color-mix(in oklab, currentcolor 50%, transparent);
912
+ }
913
+ }
914
+ }
915
+ textarea {
916
+ resize: vertical;
917
+ }
918
+ ::-webkit-search-decoration {
919
+ -webkit-appearance: none;
920
+ }
921
+ ::-webkit-date-and-time-value {
922
+ min-height: 1lh;
923
+ text-align: inherit;
924
+ }
925
+ ::-webkit-datetime-edit {
926
+ display: inline-flex;
927
+ }
928
+ ::-webkit-datetime-edit-fields-wrapper {
929
+ padding: 0;
930
+ }
931
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
932
+ padding-block: 0;
933
+ }
934
+ ::-webkit-calendar-picker-indicator {
935
+ line-height: 1;
936
+ }
937
+ :-moz-ui-invalid {
938
+ box-shadow: none;
939
+ }
940
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
941
+ appearance: button;
942
+ }
943
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
944
+ height: auto;
945
+ }
946
+ [hidden]:where(:not([hidden="until-found"])) {
947
+ display: none !important;
948
+ }
949
+ }
950
+ @layer utilities {
951
+ .pointer-events-none {
952
+ pointer-events: none;
953
+ }
954
+ .\\!visible {
955
+ visibility: visible !important;
956
+ }
957
+ .invisible {
958
+ visibility: hidden;
959
+ }
960
+ .visible {
961
+ visibility: visible;
962
+ }
963
+ .sr-only {
964
+ position: absolute;
965
+ width: 1px;
966
+ height: 1px;
967
+ padding: 0;
968
+ margin: -1px;
969
+ overflow: hidden;
970
+ clip-path: inset(50%);
971
+ white-space: nowrap;
972
+ border-width: 0;
973
+ }
974
+ .absolute {
975
+ position: absolute;
976
+ }
977
+ .fixed {
978
+ position: fixed;
979
+ }
980
+ .relative {
981
+ position: relative;
982
+ }
983
+ .inset-0 {
984
+ inset: calc(var(--spacing) * 0);
985
+ }
986
+ .start {
987
+ inset-inline-start: var(--spacing);
988
+ }
989
+ .end {
990
+ inset-inline-end: var(--spacing);
991
+ }
992
+ .right-2 {
993
+ right: calc(var(--spacing) * 2);
994
+ }
995
+ .bottom-px {
996
+ bottom: 1px;
997
+ }
998
+ .z-1 {
999
+ z-index: 1;
1000
+ }
1001
+ .z-10 {
1002
+ z-index: 10;
1003
+ }
1004
+ .z-\\[2147483647\\] {
1005
+ z-index: 2147483647;
1006
+ }
1007
+ .container {
1008
+ width: 100%;
1009
+ @media (width >= 40rem) {
1010
+ max-width: 40rem;
1011
+ }
1012
+ @media (width >= 48rem) {
1013
+ max-width: 48rem;
1014
+ }
1015
+ @media (width >= 64rem) {
1016
+ max-width: 64rem;
1017
+ }
1018
+ @media (width >= 80rem) {
1019
+ max-width: 80rem;
1020
+ }
1021
+ @media (width >= 96rem) {
1022
+ max-width: 96rem;
1023
+ }
1024
+ }
1025
+ .-mx-px {
1026
+ margin-inline: -1px;
1027
+ }
1028
+ .mx-1 {
1029
+ margin-inline: calc(var(--spacing) * 1);
1030
+ }
1031
+ .mx-2 {
1032
+ margin-inline: calc(var(--spacing) * 2);
1033
+ }
1034
+ .my-1 {
1035
+ margin-block: calc(var(--spacing) * 1);
1036
+ }
1037
+ .ms-auto {
1038
+ margin-inline-start: auto;
1039
+ }
1040
+ .mt-1 {
1041
+ margin-top: calc(var(--spacing) * 1);
1042
+ }
1043
+ .ml-auto {
1044
+ margin-left: auto;
1045
+ }
1046
+ .block {
1047
+ display: block;
1048
+ }
1049
+ .contents {
1050
+ display: contents;
1051
+ }
1052
+ .flex {
1053
+ display: flex;
1054
+ }
1055
+ .hidden {
1056
+ display: none;
1057
+ }
1058
+ .inline {
1059
+ display: inline;
1060
+ }
1061
+ .inline-flex {
1062
+ display: inline-flex;
1063
+ }
1064
+ .list-item {
1065
+ display: list-item;
1066
+ }
1067
+ .table {
1068
+ display: table;
1069
+ }
1070
+ .size-3\\.5 {
1071
+ width: calc(var(--spacing) * 3.5);
1072
+ height: calc(var(--spacing) * 3.5);
1073
+ }
1074
+ .size-4 {
1075
+ width: calc(var(--spacing) * 4);
1076
+ height: calc(var(--spacing) * 4);
1077
+ }
1078
+ .size-6 {
1079
+ width: calc(var(--spacing) * 6);
1080
+ height: calc(var(--spacing) * 6);
1081
+ }
1082
+ .size-7 {
1083
+ width: calc(var(--spacing) * 7);
1084
+ height: calc(var(--spacing) * 7);
1085
+ }
1086
+ .size-8 {
1087
+ width: calc(var(--spacing) * 8);
1088
+ height: calc(var(--spacing) * 8);
1089
+ }
1090
+ .size-9 {
1091
+ width: calc(var(--spacing) * 9);
1092
+ height: calc(var(--spacing) * 9);
1093
+ }
1094
+ .h-3\\.5 {
1095
+ height: calc(var(--spacing) * 3.5);
1096
+ }
1097
+ .h-4 {
1098
+ height: calc(var(--spacing) * 4);
1099
+ }
1100
+ .h-4\\.5 {
1101
+ height: calc(var(--spacing) * 4.5);
1102
+ }
1103
+ .h-5 {
1104
+ height: calc(var(--spacing) * 5);
1105
+ }
1106
+ .h-5\\.5 {
1107
+ height: calc(var(--spacing) * 5.5);
1108
+ }
1109
+ .h-6 {
1110
+ height: calc(var(--spacing) * 6);
1111
+ }
1112
+ .h-7 {
1113
+ height: calc(var(--spacing) * 7);
1114
+ }
1115
+ .h-8 {
1116
+ height: calc(var(--spacing) * 8);
1117
+ }
1118
+ .h-9 {
1119
+ height: calc(var(--spacing) * 9);
1120
+ }
1121
+ .h-10 {
1122
+ height: calc(var(--spacing) * 10);
1123
+ }
1124
+ .h-\\[26rem\\] {
1125
+ height: 26rem;
1126
+ }
1127
+ .h-auto {
1128
+ height: auto;
1129
+ }
1130
+ .h-full {
1131
+ height: 100%;
1132
+ }
1133
+ .h-px {
1134
+ height: 1px;
1135
+ }
1136
+ .max-h-32 {
1137
+ max-height: calc(var(--spacing) * 32);
1138
+ }
1139
+ .max-h-full {
1140
+ max-height: 100%;
1141
+ }
1142
+ .min-h-0 {
1143
+ min-height: calc(var(--spacing) * 0);
1144
+ }
1145
+ .min-h-7 {
1146
+ min-height: calc(var(--spacing) * 7);
1147
+ }
1148
+ .min-h-8 {
1149
+ min-height: calc(var(--spacing) * 8);
1150
+ }
1151
+ .min-h-20 {
1152
+ min-height: calc(var(--spacing) * 20);
1153
+ }
1154
+ .w-3\\.5 {
1155
+ width: calc(var(--spacing) * 3.5);
1156
+ }
1157
+ .w-4 {
1158
+ width: calc(var(--spacing) * 4);
1159
+ }
1160
+ .w-20 {
1161
+ width: calc(var(--spacing) * 20);
1162
+ }
1163
+ .w-36 {
1164
+ width: calc(var(--spacing) * 36);
1165
+ }
1166
+ .w-56 {
1167
+ width: calc(var(--spacing) * 56);
1168
+ }
1169
+ .w-auto {
1170
+ width: auto;
1171
+ }
1172
+ .w-full {
1173
+ width: 100%;
1174
+ }
1175
+ .w-px {
1176
+ width: 1px;
1177
+ }
1178
+ .max-w-full {
1179
+ max-width: 100%;
1180
+ }
1181
+ .max-w-sm {
1182
+ max-width: var(--container-sm);
1183
+ }
1184
+ .max-w-xl {
1185
+ max-width: var(--container-xl);
1186
+ }
1187
+ .min-w-0 {
1188
+ min-width: calc(var(--spacing) * 0);
1189
+ }
1190
+ .min-w-4 {
1191
+ min-width: calc(var(--spacing) * 4);
1192
+ }
1193
+ .min-w-4\\.5 {
1194
+ min-width: calc(var(--spacing) * 4.5);
1195
+ }
1196
+ .min-w-5 {
1197
+ min-width: calc(var(--spacing) * 5);
1198
+ }
1199
+ .min-w-5\\.5 {
1200
+ min-width: calc(var(--spacing) * 5.5);
1201
+ }
1202
+ .min-w-32 {
1203
+ min-width: calc(var(--spacing) * 32);
1204
+ }
1205
+ .flex-1 {
1206
+ flex: 1;
1207
+ }
1208
+ .shrink-0 {
1209
+ flex-shrink: 0;
1210
+ }
1211
+ .origin-bottom-left {
1212
+ transform-origin: 0 100%;
1213
+ }
1214
+ .origin-bottom-right {
1215
+ transform-origin: 100% 100%;
1216
+ }
1217
+ .-translate-x-0\\.5 {
1218
+ --tw-translate-x: calc(var(--spacing) * -0.5);
1219
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1220
+ }
1221
+ .translate-x-0\\.5 {
1222
+ --tw-translate-x: calc(var(--spacing) * 0.5);
1223
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1224
+ }
1225
+ .scale-84 {
1226
+ --tw-scale-x: 84%;
1227
+ --tw-scale-y: 84%;
1228
+ --tw-scale-z: 84%;
1229
+ scale: var(--tw-scale-x) var(--tw-scale-y);
1230
+ }
1231
+ .-rotate-10 {
1232
+ rotate: calc(10deg * -1);
1233
+ }
1234
+ .rotate-10 {
1235
+ rotate: 10deg;
1236
+ }
1237
+ .transform {
1238
+ transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
1239
+ }
1240
+ .animate-skeleton {
1241
+ animation: skeleton 2s -1s infinite linear;
1242
+ }
1243
+ .animate-spin {
1244
+ animation: var(--animate-spin);
1245
+ }
1246
+ .cursor-default {
1247
+ cursor: default;
1248
+ }
1249
+ .cursor-pointer {
1250
+ cursor: pointer;
1251
+ }
1252
+ .resize {
1253
+ resize: both;
1254
+ }
1255
+ .scroll-py-2 {
1256
+ scroll-padding-block: calc(var(--spacing) * 2);
1257
+ }
1258
+ .list-none {
1259
+ list-style-type: none;
1260
+ }
1261
+ .appearance-none {
1262
+ appearance: none;
1263
+ }
1264
+ .flex-col {
1265
+ flex-direction: column;
1266
+ }
1267
+ .flex-row {
1268
+ flex-direction: row;
1269
+ }
1270
+ .items-center {
1271
+ align-items: center;
1272
+ }
1273
+ .items-start {
1274
+ align-items: flex-start;
1275
+ }
1276
+ .justify-between {
1277
+ justify-content: space-between;
1278
+ }
1279
+ .justify-center {
1280
+ justify-content: center;
1281
+ }
1282
+ .justify-start {
1283
+ justify-content: flex-start;
1284
+ }
1285
+ .gap-0 {
1286
+ gap: calc(var(--spacing) * 0);
1287
+ }
1288
+ .gap-1 {
1289
+ gap: calc(var(--spacing) * 1);
1290
+ }
1291
+ .gap-1\\.5 {
1292
+ gap: calc(var(--spacing) * 1.5);
1293
+ }
1294
+ .gap-2 {
1295
+ gap: calc(var(--spacing) * 2);
1296
+ }
1297
+ .gap-3 {
1298
+ gap: calc(var(--spacing) * 3);
1299
+ }
1300
+ .gap-4 {
1301
+ gap: calc(var(--spacing) * 4);
1302
+ }
1303
+ .gap-6 {
1304
+ gap: calc(var(--spacing) * 6);
1305
+ }
1306
+ .self-start {
1307
+ align-self: flex-start;
1308
+ }
1309
+ .truncate {
1310
+ overflow: hidden;
1311
+ text-overflow: ellipsis;
1312
+ white-space: nowrap;
1313
+ }
1314
+ .overflow-hidden {
1315
+ overflow: hidden;
1316
+ }
1317
+ .rounded {
1318
+ border-radius: 0.25rem;
1319
+ }
1320
+ .rounded-2xl {
1321
+ border-radius: calc(var(--radius) * 1.8);
1322
+ }
1323
+ .rounded-\\[0\\.25rem\\] {
1324
+ border-radius: 0.25rem;
1325
+ }
1326
+ .rounded-full {
1327
+ border-radius: calc(infinity * 1px);
1328
+ }
1329
+ .rounded-lg {
1330
+ border-radius: var(--radius);
1331
+ }
1332
+ .rounded-md {
1333
+ border-radius: calc(var(--radius) * 0.8);
1334
+ }
1335
+ .rounded-sm {
1336
+ border-radius: calc(var(--radius) * 0.6);
1337
+ }
1338
+ .rounded-xl {
1339
+ border-radius: calc(var(--radius) * 1.4);
1340
+ }
1341
+ .rounded-t-xl {
1342
+ border-top-left-radius: calc(var(--radius) * 1.4);
1343
+ border-top-right-radius: calc(var(--radius) * 1.4);
1344
+ }
1345
+ .rounded-b-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {
1346
+ border-bottom-right-radius: calc(var(--radius-2xl) - 1px);
1347
+ border-bottom-left-radius: calc(var(--radius-2xl) - 1px);
1348
+ }
1349
+ .border {
1350
+ border-style: var(--tw-border-style);
1351
+ border-width: 1px;
1352
+ }
1353
+ .border-t {
1354
+ border-top-style: var(--tw-border-style);
1355
+ border-top-width: 1px;
1356
+ }
1357
+ .border-b-0 {
1358
+ border-bottom-style: var(--tw-border-style);
1359
+ border-bottom-width: 0px;
1360
+ }
1361
+ .border-amber-500\\/40 {
1362
+ border-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 40%, transparent);
1363
+ @supports (color: color-mix(in lab, red, red)) {
1364
+ border-color: color-mix(in oklab, var(--color-amber-500) 40%, transparent);
1365
+ }
1366
+ }
1367
+ .border-border {
1368
+ border-color: var(--border);
1369
+ }
1370
+ .border-destructive {
1371
+ border-color: var(--destructive);
1372
+ }
1373
+ .border-info\\/40 {
1374
+ border-color: var(--info);
1375
+ @supports (color: color-mix(in lab, red, red)) {
1376
+ border-color: color-mix(in oklab, var(--info) 40%, transparent);
1377
+ }
1378
+ }
1379
+ .border-input {
1380
+ border-color: var(--input);
1381
+ }
1382
+ .border-primary {
1383
+ border-color: var(--primary);
1384
+ }
1385
+ .border-transparent {
1386
+ border-color: transparent;
1387
+ }
1388
+ .bg-amber-50 {
1389
+ background-color: var(--color-amber-50);
1390
+ }
1391
+ .bg-amber-500\\/15 {
1392
+ background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 15%, transparent);
1393
+ @supports (color: color-mix(in lab, red, red)) {
1394
+ background-color: color-mix(in oklab, var(--color-amber-500) 15%, transparent);
1395
+ }
1396
+ }
1397
+ .bg-background {
1398
+ background-color: var(--background);
1399
+ }
1400
+ .bg-black\\/32 {
1401
+ background-color: color-mix(in srgb, #000 32%, transparent);
1402
+ @supports (color: color-mix(in lab, red, red)) {
1403
+ background-color: color-mix(in oklab, var(--color-black) 32%, transparent);
1404
+ }
1405
+ }
1406
+ .bg-black\\/80 {
1407
+ background-color: color-mix(in srgb, #000 80%, transparent);
1408
+ @supports (color: color-mix(in lab, red, red)) {
1409
+ background-color: color-mix(in oklab, var(--color-black) 80%, transparent);
1410
+ }
1411
+ }
1412
+ .bg-blue-50 {
1413
+ background-color: var(--color-blue-50);
1414
+ }
1415
+ .bg-border {
1416
+ background-color: var(--border);
1417
+ }
1418
+ .bg-card {
1419
+ background-color: var(--card);
1420
+ }
1421
+ .bg-cyan-50 {
1422
+ background-color: var(--color-cyan-50);
1423
+ }
1424
+ .bg-destructive {
1425
+ background-color: var(--destructive);
1426
+ }
1427
+ .bg-destructive\\/10 {
1428
+ background-color: var(--destructive);
1429
+ @supports (color: color-mix(in lab, red, red)) {
1430
+ background-color: color-mix(in oklab, var(--destructive) 10%, transparent);
1431
+ }
1432
+ }
1433
+ .bg-emerald-50 {
1434
+ background-color: var(--color-emerald-50);
1435
+ }
1436
+ .bg-fuchsia-50 {
1437
+ background-color: var(--color-fuchsia-50);
1438
+ }
1439
+ .bg-info\\/10 {
1440
+ background-color: var(--info);
1441
+ @supports (color: color-mix(in lab, red, red)) {
1442
+ background-color: color-mix(in oklab, var(--info) 10%, transparent);
1443
+ }
1444
+ }
1445
+ .bg-info\\/15 {
1446
+ background-color: var(--info);
1447
+ @supports (color: color-mix(in lab, red, red)) {
1448
+ background-color: color-mix(in oklab, var(--info) 15%, transparent);
1449
+ }
1450
+ }
1451
+ .bg-muted {
1452
+ background-color: var(--muted);
1453
+ }
1454
+ .bg-popover {
1455
+ background-color: var(--popover);
1456
+ }
1457
+ .bg-primary {
1458
+ background-color: var(--primary);
1459
+ }
1460
+ .bg-rose-50 {
1461
+ background-color: var(--color-rose-50);
1462
+ }
1463
+ .bg-secondary {
1464
+ background-color: var(--secondary);
1465
+ }
1466
+ .bg-slate-50 {
1467
+ background-color: var(--color-slate-50);
1468
+ }
1469
+ .bg-success\\/10 {
1470
+ background-color: var(--success);
1471
+ @supports (color: color-mix(in lab, red, red)) {
1472
+ background-color: color-mix(in oklab, var(--success) 10%, transparent);
1473
+ }
1474
+ }
1475
+ .bg-transparent {
1476
+ background-color: transparent;
1477
+ }
1478
+ .bg-violet-50 {
1479
+ background-color: var(--color-violet-50);
1480
+ }
1481
+ .bg-warning\\/10 {
1482
+ background-color: var(--warning);
1483
+ @supports (color: color-mix(in lab, red, red)) {
1484
+ background-color: color-mix(in oklab, var(--warning) 10%, transparent);
1485
+ }
1486
+ }
1487
+ .bg-clip-padding {
1488
+ background-clip: padding-box;
1489
+ }
1490
+ .bg-\\[right_0\\.5rem_center\\] {
1491
+ background-position: right 0.5rem center;
1492
+ }
1493
+ .bg-no-repeat {
1494
+ background-repeat: no-repeat;
1495
+ }
1496
+ .object-cover {
1497
+ object-fit: cover;
1498
+ }
1499
+ .object-top {
1500
+ object-position: top;
1501
+ }
1502
+ .p-1 {
1503
+ padding: calc(var(--spacing) * 1);
1504
+ }
1505
+ .p-1\\.5 {
1506
+ padding: calc(var(--spacing) * 1.5);
1507
+ }
1508
+ .p-2 {
1509
+ padding: calc(var(--spacing) * 2);
1510
+ }
1511
+ .p-4 {
1512
+ padding: calc(var(--spacing) * 4);
1513
+ }
1514
+ .p-6 {
1515
+ padding: calc(var(--spacing) * 6);
1516
+ }
1517
+ .px-0 {
1518
+ padding-inline: calc(var(--spacing) * 0);
1519
+ }
1520
+ .px-1 {
1521
+ padding-inline: calc(var(--spacing) * 1);
1522
+ }
1523
+ .px-1\\.5 {
1524
+ padding-inline: calc(var(--spacing) * 1.5);
1525
+ }
1526
+ .px-2 {
1527
+ padding-inline: calc(var(--spacing) * 2);
1528
+ }
1529
+ .px-2\\.5 {
1530
+ padding-inline: calc(var(--spacing) * 2.5);
1531
+ }
1532
+ .px-3 {
1533
+ padding-inline: calc(var(--spacing) * 3);
1534
+ }
1535
+ .px-3\\.5 {
1536
+ padding-inline: calc(var(--spacing) * 3.5);
1537
+ }
1538
+ .px-4 {
1539
+ padding-inline: calc(var(--spacing) * 4);
1540
+ }
1541
+ .px-6 {
1542
+ padding-inline: calc(var(--spacing) * 6);
1543
+ }
1544
+ .py-0 {
1545
+ padding-block: calc(var(--spacing) * 0);
1546
+ }
1547
+ .py-1 {
1548
+ padding-block: calc(var(--spacing) * 1);
1549
+ }
1550
+ .py-1\\.5 {
1551
+ padding-block: calc(var(--spacing) * 1.5);
1552
+ }
1553
+ .py-2 {
1554
+ padding-block: calc(var(--spacing) * 2);
1555
+ }
1556
+ .py-4 {
1557
+ padding-block: calc(var(--spacing) * 4);
1558
+ }
1559
+ .py-12 {
1560
+ padding-block: calc(var(--spacing) * 12);
1561
+ }
1562
+ .py-\\[max\\(1rem\\,4vh\\)\\] {
1563
+ padding-block: max(1rem, 4vh);
1564
+ }
1565
+ .ps-2 {
1566
+ padding-inline-start: calc(var(--spacing) * 2);
1567
+ }
1568
+ .pe-3 {
1569
+ padding-inline-end: calc(var(--spacing) * 3);
1570
+ }
1571
+ .pr-8 {
1572
+ padding-right: calc(var(--spacing) * 8);
1573
+ }
1574
+ .pl-3 {
1575
+ padding-left: calc(var(--spacing) * 3);
1576
+ }
1577
+ .text-center {
1578
+ text-align: center;
1579
+ }
1580
+ .text-left {
1581
+ text-align: left;
1582
+ }
1583
+ .font-mono {
1584
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
1585
+ }
1586
+ .font-sans {
1587
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
1588
+ Roboto, sans-serif;
1589
+ }
1590
+ .text-base {
1591
+ font-size: var(--text-base);
1592
+ line-height: var(--tw-leading, var(--text-base--line-height));
1593
+ }
1594
+ .text-base\\/4\\.5 {
1595
+ font-size: var(--text-base);
1596
+ line-height: calc(var(--spacing) * 4.5);
1597
+ }
1598
+ .text-sm {
1599
+ font-size: var(--text-sm);
1600
+ line-height: var(--tw-leading, var(--text-sm--line-height));
1601
+ }
1602
+ .text-xl {
1603
+ font-size: var(--text-xl);
1604
+ line-height: var(--tw-leading, var(--text-xl--line-height));
1605
+ }
1606
+ .text-xs {
1607
+ font-size: var(--text-xs);
1608
+ line-height: var(--tw-leading, var(--text-xs--line-height));
1609
+ }
1610
+ .text-\\[0\\.625rem\\] {
1611
+ font-size: 0.625rem;
1612
+ }
1613
+ .leading-relaxed {
1614
+ --tw-leading: var(--leading-relaxed);
1615
+ line-height: var(--leading-relaxed);
1616
+ }
1617
+ .font-medium {
1618
+ --tw-font-weight: var(--font-weight-medium);
1619
+ font-weight: var(--font-weight-medium);
1620
+ }
1621
+ .font-normal {
1622
+ --tw-font-weight: var(--font-weight-normal);
1623
+ font-weight: var(--font-weight-normal);
1624
+ }
1625
+ .font-semibold {
1626
+ --tw-font-weight: var(--font-weight-semibold);
1627
+ font-weight: var(--font-weight-semibold);
1628
+ }
1629
+ .tracking-tight {
1630
+ --tw-tracking: var(--tracking-tight);
1631
+ letter-spacing: var(--tracking-tight);
1632
+ }
1633
+ .tracking-widest {
1634
+ --tw-tracking: var(--tracking-widest);
1635
+ letter-spacing: var(--tracking-widest);
1636
+ }
1637
+ .text-balance {
1638
+ text-wrap: balance;
1639
+ }
1640
+ .break-words {
1641
+ overflow-wrap: break-word;
1642
+ }
1643
+ .whitespace-normal {
1644
+ white-space: normal;
1645
+ }
1646
+ .whitespace-nowrap {
1647
+ white-space: nowrap;
1648
+ }
1649
+ .text-amber-600 {
1650
+ color: var(--color-amber-600);
1651
+ }
1652
+ .text-amber-700 {
1653
+ color: var(--color-amber-700);
1654
+ }
1655
+ .text-amber-800 {
1656
+ color: var(--color-amber-800);
1657
+ }
1658
+ .text-blue-700 {
1659
+ color: var(--color-blue-700);
1660
+ }
1661
+ .text-cyan-700 {
1662
+ color: var(--color-cyan-700);
1663
+ }
1664
+ .text-destructive-foreground {
1665
+ color: var(--destructive-foreground);
1666
+ }
1667
+ .text-emerald-700 {
1668
+ color: var(--color-emerald-700);
1669
+ }
1670
+ .text-foreground {
1671
+ color: var(--foreground);
1672
+ }
1673
+ .text-fuchsia-700 {
1674
+ color: var(--color-fuchsia-700);
1675
+ }
1676
+ .text-info-foreground {
1677
+ color: var(--info-foreground);
1678
+ }
1679
+ .text-muted-foreground {
1680
+ color: var(--muted-foreground);
1681
+ }
1682
+ .text-muted-foreground\\/70 {
1683
+ color: var(--muted-foreground);
1684
+ @supports (color: color-mix(in lab, red, red)) {
1685
+ color: color-mix(in oklab, var(--muted-foreground) 70%, transparent);
1686
+ }
1687
+ }
1688
+ .text-popover-foreground {
1689
+ color: var(--popover-foreground);
1690
+ }
1691
+ .text-primary-foreground {
1692
+ color: var(--primary-foreground);
1693
+ }
1694
+ .text-rose-700 {
1695
+ color: var(--color-rose-700);
1696
+ }
1697
+ .text-secondary-foreground {
1698
+ color: var(--secondary-foreground);
1699
+ }
1700
+ .text-slate-600 {
1701
+ color: var(--color-slate-600);
1702
+ }
1703
+ .text-success-foreground {
1704
+ color: var(--success-foreground);
1705
+ }
1706
+ .text-violet-700 {
1707
+ color: var(--color-violet-700);
1708
+ }
1709
+ .text-warning-foreground {
1710
+ color: var(--warning-foreground);
1711
+ }
1712
+ .text-white {
1713
+ color: var(--color-white);
1714
+ }
1715
+ .lowercase {
1716
+ text-transform: lowercase;
1717
+ }
1718
+ .ordinal {
1719
+ --tw-ordinal: ordinal;
1720
+ font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
1721
+ }
1722
+ .tabular-nums {
1723
+ --tw-numeric-spacing: tabular-nums;
1724
+ font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
1725
+ }
1726
+ .line-through {
1727
+ text-decoration-line: line-through;
1728
+ }
1729
+ .underline {
1730
+ text-decoration-line: underline;
1731
+ }
1732
+ .underline-offset-4 {
1733
+ text-underline-offset: 4px;
1734
+ }
1735
+ .accent-accent {
1736
+ accent-color: var(--accent);
1737
+ }
1738
+ .accent-primary {
1739
+ accent-color: var(--primary);
1740
+ }
1741
+ .opacity-50 {
1742
+ opacity: 50%;
1743
+ }
1744
+ .opacity-80 {
1745
+ opacity: 80%;
1746
+ }
1747
+ .shadow-lg\\/5 {
1748
+ --tw-shadow-alpha: 5%;
1749
+ --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 4px 6px -4px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));
1750
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1751
+ }
1752
+ .shadow-sm\\/5 {
1753
+ --tw-shadow-alpha: 5%;
1754
+ --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 1px 2px -1px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));
1755
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1756
+ }
1757
+ .shadow-xs\\/5 {
1758
+ --tw-shadow-alpha: 5%;
1759
+ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));
1760
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1761
+ }
1762
+ .shadow {
1763
+ --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1764
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1765
+ }
1766
+ .shadow-none {
1767
+ --tw-shadow: 0 0 #0000;
1768
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1769
+ }
1770
+ .shadow-xs {
1771
+ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));
1772
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1773
+ }
1774
+ .ring {
1775
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
1776
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1777
+ }
1778
+ .inset-ring {
1779
+ --tw-inset-ring-shadow: inset 0 0 0 1px var(--tw-inset-ring-color, currentcolor);
1780
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1781
+ }
1782
+ .inset-ring-amber-600\\/20 {
1783
+ --tw-inset-ring-color: color-mix(in srgb, oklch(66.6% 0.179 58.318) 20%, transparent);
1784
+ @supports (color: color-mix(in lab, red, red)) {
1785
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-amber-600) 20%, transparent);
1786
+ }
1787
+ }
1788
+ .inset-ring-blue-700\\/10 {
1789
+ --tw-inset-ring-color: color-mix(in srgb, oklch(48.8% 0.243 264.376) 10%, transparent);
1790
+ @supports (color: color-mix(in lab, red, red)) {
1791
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-blue-700) 10%, transparent);
1792
+ }
1793
+ }
1794
+ .inset-ring-cyan-700\\/10 {
1795
+ --tw-inset-ring-color: color-mix(in srgb, oklch(52% 0.105 223.128) 10%, transparent);
1796
+ @supports (color: color-mix(in lab, red, red)) {
1797
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-cyan-700) 10%, transparent);
1798
+ }
1799
+ }
1800
+ .inset-ring-emerald-600\\/20 {
1801
+ --tw-inset-ring-color: color-mix(in srgb, oklch(59.6% 0.145 163.225) 20%, transparent);
1802
+ @supports (color: color-mix(in lab, red, red)) {
1803
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-emerald-600) 20%, transparent);
1804
+ }
1805
+ }
1806
+ .inset-ring-fuchsia-700\\/10 {
1807
+ --tw-inset-ring-color: color-mix(in srgb, oklch(51.8% 0.253 323.949) 10%, transparent);
1808
+ @supports (color: color-mix(in lab, red, red)) {
1809
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-fuchsia-700) 10%, transparent);
1810
+ }
1811
+ }
1812
+ .inset-ring-rose-600\\/10 {
1813
+ --tw-inset-ring-color: color-mix(in srgb, oklch(58.6% 0.253 17.585) 10%, transparent);
1814
+ @supports (color: color-mix(in lab, red, red)) {
1815
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-rose-600) 10%, transparent);
1816
+ }
1817
+ }
1818
+ .inset-ring-slate-500\\/10 {
1819
+ --tw-inset-ring-color: color-mix(in srgb, oklch(55.4% 0.046 257.417) 10%, transparent);
1820
+ @supports (color: color-mix(in lab, red, red)) {
1821
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-slate-500) 10%, transparent);
1822
+ }
1823
+ }
1824
+ .inset-ring-violet-700\\/10 {
1825
+ --tw-inset-ring-color: color-mix(in srgb, oklch(49.1% 0.27 292.581) 10%, transparent);
1826
+ @supports (color: color-mix(in lab, red, red)) {
1827
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-violet-700) 10%, transparent);
1828
+ }
1829
+ }
1830
+ .outline {
1831
+ outline-style: var(--tw-outline-style);
1832
+ outline-width: 1px;
1833
+ }
1834
+ .blur {
1835
+ --tw-blur: blur(8px);
1836
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
1837
+ }
1838
+ .filter {
1839
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
1840
+ }
1841
+ .backdrop-blur-sm {
1842
+ --tw-backdrop-blur: blur(var(--blur-sm));
1843
+ -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
1844
+ backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
1845
+ }
1846
+ .transition {
1847
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
1848
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1849
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1850
+ }
1851
+ .transition-colors {
1852
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
1853
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1854
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1855
+ }
1856
+ .transition-shadow {
1857
+ transition-property: box-shadow;
1858
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1859
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1860
+ }
1861
+ .ease-out {
1862
+ --tw-ease: var(--ease-out);
1863
+ transition-timing-function: var(--ease-out);
1864
+ }
1865
+ .outline-none {
1866
+ --tw-outline-style: none;
1867
+ outline-style: none;
1868
+ }
1869
+ .select-none {
1870
+ -webkit-user-select: none;
1871
+ user-select: none;
1872
+ }
1873
+ .\\[--skeleton-highlight\\:--alpha\\(var\\(--color-white\\)\\/64\\%\\)\\] {
1874
+ --skeleton-highlight: color-mix(in srgb, #fff 64%, transparent);
1875
+ @supports (color: color-mix(in lab, red, red)) {
1876
+ --skeleton-highlight: color-mix(in oklab, var(--color-white) 64%, transparent);
1877
+ }
1878
+ }
1879
+ .\\[background\\:linear-gradient\\(120deg\\,transparent_40\\%\\,var\\(--skeleton-highlight\\)\\,transparent_60\\%\\)_var\\(--color-muted\\)_0_0\\/200\\%_100\\%_fixed\\] {
1880
+ background: linear-gradient(120deg,transparent 40%,var(--skeleton-highlight),transparent 60%) var(--color-muted) 0 0/200% 100% fixed;
1881
+ }
1882
+ .\\[clip-path\\:inset\\(0_1px\\)\\] {
1883
+ clip-path: inset(0 1px);
1884
+ }
1885
+ .not-dark\\:bg-clip-padding {
1886
+ &:not(*:is(.dark *, :host(.dark) *)) {
1887
+ background-clip: padding-box;
1888
+ }
1889
+ }
1890
+ .group-data-hover\\:bg-amber-100 {
1891
+ &:is(:where(.group)[data-hover] *) {
1892
+ background-color: var(--color-amber-100);
1893
+ }
1894
+ }
1895
+ .group-data-hover\\:bg-blue-100 {
1896
+ &:is(:where(.group)[data-hover] *) {
1897
+ background-color: var(--color-blue-100);
1898
+ }
1899
+ }
1900
+ .group-data-hover\\:bg-cyan-100 {
1901
+ &:is(:where(.group)[data-hover] *) {
1902
+ background-color: var(--color-cyan-100);
1903
+ }
1904
+ }
1905
+ .group-data-hover\\:bg-emerald-100 {
1906
+ &:is(:where(.group)[data-hover] *) {
1907
+ background-color: var(--color-emerald-100);
1908
+ }
1909
+ }
1910
+ .group-data-hover\\:bg-fuchsia-100 {
1911
+ &:is(:where(.group)[data-hover] *) {
1912
+ background-color: var(--color-fuchsia-100);
1913
+ }
1914
+ }
1915
+ .group-data-hover\\:bg-rose-100 {
1916
+ &:is(:where(.group)[data-hover] *) {
1917
+ background-color: var(--color-rose-100);
1918
+ }
1919
+ }
1920
+ .group-data-hover\\:bg-slate-100 {
1921
+ &:is(:where(.group)[data-hover] *) {
1922
+ background-color: var(--color-slate-100);
1923
+ }
1924
+ }
1925
+ .group-data-hover\\:bg-violet-100 {
1926
+ &:is(:where(.group)[data-hover] *) {
1927
+ background-color: var(--color-violet-100);
1928
+ }
1929
+ }
1930
+ .placeholder\\:text-muted-foreground {
1931
+ &::placeholder {
1932
+ color: var(--muted-foreground);
1933
+ }
1934
+ }
1935
+ .before\\:pointer-events-none {
1936
+ &::before {
1937
+ content: var(--tw-content);
1938
+ pointer-events: none;
1939
+ }
1940
+ }
1941
+ .before\\:absolute {
1942
+ &::before {
1943
+ content: var(--tw-content);
1944
+ position: absolute;
1945
+ }
1946
+ }
1947
+ .before\\:inset-0 {
1948
+ &::before {
1949
+ content: var(--tw-content);
1950
+ inset: calc(var(--spacing) * 0);
1951
+ }
1952
+ }
1953
+ .before\\:rounded-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {
1954
+ &::before {
1955
+ content: var(--tw-content);
1956
+ border-radius: calc(var(--radius-2xl) - 1px);
1957
+ }
1958
+ }
1959
+ .before\\:rounded-\\[calc\\(var\\(--radius-lg\\)-1px\\)\\] {
1960
+ &::before {
1961
+ content: var(--tw-content);
1962
+ border-radius: calc(var(--radius-lg) - 1px);
1963
+ }
1964
+ }
1965
+ .before\\:rounded-\\[calc\\(var\\(--radius-md\\)-1px\\)\\] {
1966
+ &::before {
1967
+ content: var(--tw-content);
1968
+ border-radius: calc(var(--radius-md) - 1px);
1969
+ }
1970
+ }
1971
+ .before\\:rounded-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {
1972
+ &::before {
1973
+ content: var(--tw-content);
1974
+ border-radius: calc(var(--radius-xl) - 1px);
1975
+ }
1976
+ }
1977
+ .before\\:rounded-t-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {
1978
+ &::before {
1979
+ content: var(--tw-content);
1980
+ border-top-left-radius: calc(var(--radius-xl) - 1px);
1981
+ border-top-right-radius: calc(var(--radius-xl) - 1px);
1982
+ }
1983
+ }
1984
+ .before\\:bg-muted\\/72 {
1985
+ &::before {
1986
+ content: var(--tw-content);
1987
+ background-color: var(--muted);
1988
+ @supports (color: color-mix(in lab, red, red)) {
1989
+ background-color: color-mix(in oklab, var(--muted) 72%, transparent);
1990
+ }
1991
+ }
1992
+ }
1993
+ .before\\:shadow-\\[0_1px_--theme\\(--color-black\\/4\\%\\)\\] {
1994
+ &::before {
1995
+ content: var(--tw-content);
1996
+ --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in srgb, #000 4%, transparent));
1997
+ @supports (color: color-mix(in lab, red, red)) {
1998
+ --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in oklab, var(--color-black) 4%, transparent));
1999
+ }
2000
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2001
+ }
2002
+ }
2003
+ .focus-within\\:border-ring {
2004
+ &:focus-within {
2005
+ border-color: var(--ring);
2006
+ }
2007
+ }
2008
+ .focus-within\\:bg-accent {
2009
+ &:focus-within {
2010
+ background-color: var(--accent);
2011
+ }
2012
+ }
2013
+ .focus-within\\:text-accent-foreground {
2014
+ &:focus-within {
2015
+ color: var(--accent-foreground);
2016
+ }
2017
+ }
2018
+ .focus-within\\:ring-\\[3px\\] {
2019
+ &:focus-within {
2020
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2021
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2022
+ }
2023
+ }
2024
+ .focus-within\\:ring-ring\\/30 {
2025
+ &:focus-within {
2026
+ --tw-ring-color: var(--ring);
2027
+ @supports (color: color-mix(in lab, red, red)) {
2028
+ --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);
2029
+ }
2030
+ }
2031
+ }
2032
+ .hover\\:border-destructive\\/30 {
2033
+ &:hover {
2034
+ @media (hover: hover) {
2035
+ border-color: var(--destructive);
2036
+ @supports (color: color-mix(in lab, red, red)) {
2037
+ border-color: color-mix(in oklab, var(--destructive) 30%, transparent);
2038
+ }
2039
+ }
2040
+ }
2041
+ }
2042
+ .hover\\:bg-accent {
2043
+ &:hover {
2044
+ @media (hover: hover) {
2045
+ background-color: var(--accent);
2046
+ }
2047
+ }
2048
+ }
2049
+ .hover\\:bg-amber-500\\/20 {
2050
+ &:hover {
2051
+ @media (hover: hover) {
2052
+ background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 20%, transparent);
2053
+ @supports (color: color-mix(in lab, red, red)) {
2054
+ background-color: color-mix(in oklab, var(--color-amber-500) 20%, transparent);
2055
+ }
2056
+ }
2057
+ }
2058
+ }
2059
+ .hover\\:bg-destructive\\/5 {
2060
+ &:hover {
2061
+ @media (hover: hover) {
2062
+ background-color: var(--destructive);
2063
+ @supports (color: color-mix(in lab, red, red)) {
2064
+ background-color: color-mix(in oklab, var(--destructive) 5%, transparent);
2065
+ }
2066
+ }
2067
+ }
2068
+ }
2069
+ .hover\\:bg-destructive\\/90 {
2070
+ &:hover {
2071
+ @media (hover: hover) {
2072
+ background-color: var(--destructive);
2073
+ @supports (color: color-mix(in lab, red, red)) {
2074
+ background-color: color-mix(in oklab, var(--destructive) 90%, transparent);
2075
+ }
2076
+ }
2077
+ }
2078
+ }
2079
+ .hover\\:bg-info\\/20 {
2080
+ &:hover {
2081
+ @media (hover: hover) {
2082
+ background-color: var(--info);
2083
+ @supports (color: color-mix(in lab, red, red)) {
2084
+ background-color: color-mix(in oklab, var(--info) 20%, transparent);
2085
+ }
2086
+ }
2087
+ }
2088
+ }
2089
+ .hover\\:bg-primary\\/90 {
2090
+ &:hover {
2091
+ @media (hover: hover) {
2092
+ background-color: var(--primary);
2093
+ @supports (color: color-mix(in lab, red, red)) {
2094
+ background-color: color-mix(in oklab, var(--primary) 90%, transparent);
2095
+ }
2096
+ }
2097
+ }
2098
+ }
2099
+ .hover\\:bg-secondary\\/90 {
2100
+ &:hover {
2101
+ @media (hover: hover) {
2102
+ background-color: var(--secondary);
2103
+ @supports (color: color-mix(in lab, red, red)) {
2104
+ background-color: color-mix(in oklab, var(--secondary) 90%, transparent);
2105
+ }
2106
+ }
2107
+ }
2108
+ }
2109
+ .hover\\:text-accent-foreground {
2110
+ &:hover {
2111
+ @media (hover: hover) {
2112
+ color: var(--accent-foreground);
2113
+ }
2114
+ }
2115
+ }
2116
+ .hover\\:underline {
2117
+ &:hover {
2118
+ @media (hover: hover) {
2119
+ text-decoration-line: underline;
2120
+ }
2121
+ }
2122
+ }
2123
+ .focus\\:bg-accent {
2124
+ &:focus {
2125
+ background-color: var(--accent);
2126
+ }
2127
+ }
2128
+ .focus\\:text-accent-foreground {
2129
+ &:focus {
2130
+ color: var(--accent-foreground);
2131
+ }
2132
+ }
2133
+ .focus\\:outline-none {
2134
+ &:focus {
2135
+ --tw-outline-style: none;
2136
+ outline-style: none;
2137
+ }
2138
+ }
2139
+ .focus-visible\\:border-ring {
2140
+ &:focus-visible {
2141
+ border-color: var(--ring);
2142
+ }
2143
+ }
2144
+ .focus-visible\\:ring-2 {
2145
+ &:focus-visible {
2146
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2147
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2148
+ }
2149
+ }
2150
+ .focus-visible\\:ring-\\[3px\\] {
2151
+ &:focus-visible {
2152
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2153
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2154
+ }
2155
+ }
2156
+ .focus-visible\\:ring-ring {
2157
+ &:focus-visible {
2158
+ --tw-ring-color: var(--ring);
2159
+ }
2160
+ }
2161
+ .focus-visible\\:ring-ring\\/30 {
2162
+ &:focus-visible {
2163
+ --tw-ring-color: var(--ring);
2164
+ @supports (color: color-mix(in lab, red, red)) {
2165
+ --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);
2166
+ }
2167
+ }
2168
+ }
2169
+ .focus-visible\\:ring-offset-1 {
2170
+ &:focus-visible {
2171
+ --tw-ring-offset-width: 1px;
2172
+ --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2173
+ }
2174
+ }
2175
+ .focus-visible\\:ring-offset-background {
2176
+ &:focus-visible {
2177
+ --tw-ring-offset-color: var(--background);
2178
+ }
2179
+ }
2180
+ .disabled\\:pointer-events-none {
2181
+ &:disabled {
2182
+ pointer-events: none;
2183
+ }
2184
+ }
2185
+ .disabled\\:cursor-not-allowed {
2186
+ &:disabled {
2187
+ cursor: not-allowed;
2188
+ }
2189
+ }
2190
+ .disabled\\:opacity-60 {
2191
+ &:disabled {
2192
+ opacity: 60%;
2193
+ }
2194
+ }
2195
+ .has-disabled\\:opacity-60 {
2196
+ &:has(*:disabled) {
2197
+ opacity: 60%;
2198
+ }
2199
+ }
2200
+ .aria-invalid\\:border-destructive\\/40 {
2201
+ &[aria-invalid="true"] {
2202
+ border-color: var(--destructive);
2203
+ @supports (color: color-mix(in lab, red, red)) {
2204
+ border-color: color-mix(in oklab, var(--destructive) 40%, transparent);
2205
+ }
2206
+ }
2207
+ }
2208
+ .aria-invalid\\:focus-visible\\:ring-destructive\\/20 {
2209
+ &[aria-invalid="true"] {
2210
+ &:focus-visible {
2211
+ --tw-ring-color: var(--destructive);
2212
+ @supports (color: color-mix(in lab, red, red)) {
2213
+ --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);
2214
+ }
2215
+ }
2216
+ }
2217
+ }
2218
+ .data-\\[disabled\\]\\:pointer-events-none {
2219
+ &[data-disabled] {
2220
+ pointer-events: none;
2221
+ }
2222
+ }
2223
+ .data-\\[disabled\\]\\:opacity-64 {
2224
+ &[data-disabled] {
2225
+ opacity: 64%;
2226
+ }
2227
+ }
2228
+ .data-\\[highlighted\\]\\:bg-accent {
2229
+ &[data-highlighted] {
2230
+ background-color: var(--accent);
2231
+ }
2232
+ }
2233
+ .data-\\[highlighted\\]\\:text-accent-foreground {
2234
+ &[data-highlighted] {
2235
+ color: var(--accent-foreground);
2236
+ }
2237
+ }
2238
+ .sm\\:min-h-7 {
2239
+ @media (width >= 40rem) {
2240
+ min-height: calc(var(--spacing) * 7);
2241
+ }
2242
+ }
2243
+ .sm\\:py-\\[10vh\\] {
2244
+ @media (width >= 40rem) {
2245
+ padding-block: 10vh;
2246
+ }
2247
+ }
2248
+ .sm\\:text-sm {
2249
+ @media (width >= 40rem) {
2250
+ font-size: var(--text-sm);
2251
+ line-height: var(--tw-leading, var(--text-sm--line-height));
2252
+ }
2253
+ }
2254
+ .sm\\:text-sm\\/4 {
2255
+ @media (width >= 40rem) {
2256
+ font-size: var(--text-sm);
2257
+ line-height: calc(var(--spacing) * 4);
2258
+ }
2259
+ }
2260
+ .dark\\:bg-amber-400\\/10 {
2261
+ &:is(.dark *, :host(.dark) *) {
2262
+ background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);
2263
+ @supports (color: color-mix(in lab, red, red)) {
2264
+ background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);
2265
+ }
2266
+ }
2267
+ }
2268
+ .dark\\:bg-blue-400\\/10 {
2269
+ &:is(.dark *, :host(.dark) *) {
2270
+ background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 10%, transparent);
2271
+ @supports (color: color-mix(in lab, red, red)) {
2272
+ background-color: color-mix(in oklab, var(--color-blue-400) 10%, transparent);
2273
+ }
2274
+ }
2275
+ }
2276
+ .dark\\:bg-cyan-400\\/10 {
2277
+ &:is(.dark *, :host(.dark) *) {
2278
+ background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);
2279
+ @supports (color: color-mix(in lab, red, red)) {
2280
+ background-color: color-mix(in oklab, var(--color-cyan-400) 10%, transparent);
2281
+ }
2282
+ }
2283
+ }
2284
+ .dark\\:bg-destructive\\/20 {
2285
+ &:is(.dark *, :host(.dark) *) {
2286
+ background-color: var(--destructive);
2287
+ @supports (color: color-mix(in lab, red, red)) {
2288
+ background-color: color-mix(in oklab, var(--destructive) 20%, transparent);
2289
+ }
2290
+ }
2291
+ }
2292
+ .dark\\:bg-emerald-400\\/10 {
2293
+ &:is(.dark *, :host(.dark) *) {
2294
+ background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);
2295
+ @supports (color: color-mix(in lab, red, red)) {
2296
+ background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);
2297
+ }
2298
+ }
2299
+ }
2300
+ .dark\\:bg-fuchsia-400\\/10 {
2301
+ &:is(.dark *, :host(.dark) *) {
2302
+ background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 10%, transparent);
2303
+ @supports (color: color-mix(in lab, red, red)) {
2304
+ background-color: color-mix(in oklab, var(--color-fuchsia-400) 10%, transparent);
2305
+ }
2306
+ }
2307
+ }
2308
+ .dark\\:bg-info\\/20 {
2309
+ &:is(.dark *, :host(.dark) *) {
2310
+ background-color: var(--info);
2311
+ @supports (color: color-mix(in lab, red, red)) {
2312
+ background-color: color-mix(in oklab, var(--info) 20%, transparent);
2313
+ }
2314
+ }
2315
+ }
2316
+ .dark\\:bg-input\\/30 {
2317
+ &:is(.dark *, :host(.dark) *) {
2318
+ background-color: var(--input);
2319
+ @supports (color: color-mix(in lab, red, red)) {
2320
+ background-color: color-mix(in oklab, var(--input) 30%, transparent);
2321
+ }
2322
+ }
2323
+ }
2324
+ .dark\\:bg-rose-400\\/10 {
2325
+ &:is(.dark *, :host(.dark) *) {
2326
+ background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);
2327
+ @supports (color: color-mix(in lab, red, red)) {
2328
+ background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);
2329
+ }
2330
+ }
2331
+ }
2332
+ .dark\\:bg-slate-400\\/10 {
2333
+ &:is(.dark *, :host(.dark) *) {
2334
+ background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);
2335
+ @supports (color: color-mix(in lab, red, red)) {
2336
+ background-color: color-mix(in oklab, var(--color-slate-400) 10%, transparent);
2337
+ }
2338
+ }
2339
+ }
2340
+ .dark\\:bg-success\\/20 {
2341
+ &:is(.dark *, :host(.dark) *) {
2342
+ background-color: var(--success);
2343
+ @supports (color: color-mix(in lab, red, red)) {
2344
+ background-color: color-mix(in oklab, var(--success) 20%, transparent);
2345
+ }
2346
+ }
2347
+ }
2348
+ .dark\\:bg-violet-400\\/10 {
2349
+ &:is(.dark *, :host(.dark) *) {
2350
+ background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 10%, transparent);
2351
+ @supports (color: color-mix(in lab, red, red)) {
2352
+ background-color: color-mix(in oklab, var(--color-violet-400) 10%, transparent);
2353
+ }
2354
+ }
2355
+ }
2356
+ .dark\\:bg-warning\\/20 {
2357
+ &:is(.dark *, :host(.dark) *) {
2358
+ background-color: var(--warning);
2359
+ @supports (color: color-mix(in lab, red, red)) {
2360
+ background-color: color-mix(in oklab, var(--warning) 20%, transparent);
2361
+ }
2362
+ }
2363
+ }
2364
+ .dark\\:text-amber-400 {
2365
+ &:is(.dark *, :host(.dark) *) {
2366
+ color: var(--color-amber-400);
2367
+ }
2368
+ }
2369
+ .dark\\:text-amber-500 {
2370
+ &:is(.dark *, :host(.dark) *) {
2371
+ color: var(--color-amber-500);
2372
+ }
2373
+ }
2374
+ .dark\\:text-blue-400 {
2375
+ &:is(.dark *, :host(.dark) *) {
2376
+ color: var(--color-blue-400);
2377
+ }
2378
+ }
2379
+ .dark\\:text-cyan-400 {
2380
+ &:is(.dark *, :host(.dark) *) {
2381
+ color: var(--color-cyan-400);
2382
+ }
2383
+ }
2384
+ .dark\\:text-emerald-400 {
2385
+ &:is(.dark *, :host(.dark) *) {
2386
+ color: var(--color-emerald-400);
2387
+ }
2388
+ }
2389
+ .dark\\:text-fuchsia-400 {
2390
+ &:is(.dark *, :host(.dark) *) {
2391
+ color: var(--color-fuchsia-400);
2392
+ }
2393
+ }
2394
+ .dark\\:text-rose-400 {
2395
+ &:is(.dark *, :host(.dark) *) {
2396
+ color: var(--color-rose-400);
2397
+ }
2398
+ }
2399
+ .dark\\:text-slate-400 {
2400
+ &:is(.dark *, :host(.dark) *) {
2401
+ color: var(--color-slate-400);
2402
+ }
2403
+ }
2404
+ .dark\\:text-violet-400 {
2405
+ &:is(.dark *, :host(.dark) *) {
2406
+ color: var(--color-violet-400);
2407
+ }
2408
+ }
2409
+ .dark\\:inset-ring-amber-400\\/20 {
2410
+ &:is(.dark *, :host(.dark) *) {
2411
+ --tw-inset-ring-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);
2412
+ @supports (color: color-mix(in lab, red, red)) {
2413
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);
2414
+ }
2415
+ }
2416
+ }
2417
+ .dark\\:inset-ring-blue-400\\/30 {
2418
+ &:is(.dark *, :host(.dark) *) {
2419
+ --tw-inset-ring-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 30%, transparent);
2420
+ @supports (color: color-mix(in lab, red, red)) {
2421
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-blue-400) 30%, transparent);
2422
+ }
2423
+ }
2424
+ }
2425
+ .dark\\:inset-ring-cyan-400\\/30 {
2426
+ &:is(.dark *, :host(.dark) *) {
2427
+ --tw-inset-ring-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 30%, transparent);
2428
+ @supports (color: color-mix(in lab, red, red)) {
2429
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-cyan-400) 30%, transparent);
2430
+ }
2431
+ }
2432
+ }
2433
+ .dark\\:inset-ring-emerald-500\\/20 {
2434
+ &:is(.dark *, :host(.dark) *) {
2435
+ --tw-inset-ring-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);
2436
+ @supports (color: color-mix(in lab, red, red)) {
2437
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);
2438
+ }
2439
+ }
2440
+ }
2441
+ .dark\\:inset-ring-fuchsia-400\\/20 {
2442
+ &:is(.dark *, :host(.dark) *) {
2443
+ --tw-inset-ring-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);
2444
+ @supports (color: color-mix(in lab, red, red)) {
2445
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);
2446
+ }
2447
+ }
2448
+ }
2449
+ .dark\\:inset-ring-rose-400\\/20 {
2450
+ &:is(.dark *, :host(.dark) *) {
2451
+ --tw-inset-ring-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);
2452
+ @supports (color: color-mix(in lab, red, red)) {
2453
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);
2454
+ }
2455
+ }
2456
+ }
2457
+ .dark\\:inset-ring-slate-400\\/20 {
2458
+ &:is(.dark *, :host(.dark) *) {
2459
+ --tw-inset-ring-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);
2460
+ @supports (color: color-mix(in lab, red, red)) {
2461
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);
2462
+ }
2463
+ }
2464
+ }
2465
+ .dark\\:inset-ring-violet-400\\/30 {
2466
+ &:is(.dark *, :host(.dark) *) {
2467
+ --tw-inset-ring-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 30%, transparent);
2468
+ @supports (color: color-mix(in lab, red, red)) {
2469
+ --tw-inset-ring-color: color-mix(in oklab, var(--color-violet-400) 30%, transparent);
2470
+ }
2471
+ }
2472
+ }
2473
+ .dark\\:\\[--skeleton-highlight\\:--alpha\\(var\\(--color-white\\)\\/4\\%\\)\\] {
2474
+ &:is(.dark *, :host(.dark) *) {
2475
+ --skeleton-highlight: color-mix(in srgb, #fff 4%, transparent);
2476
+ @supports (color: color-mix(in lab, red, red)) {
2477
+ --skeleton-highlight: color-mix(in oklab, var(--color-white) 4%, transparent);
2478
+ }
2479
+ }
2480
+ }
2481
+ .dark\\:group-data-hover\\:bg-amber-400\\/20 {
2482
+ &:is(.dark *, :host(.dark) *) {
2483
+ &:is(:where(.group)[data-hover] *) {
2484
+ background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);
2485
+ @supports (color: color-mix(in lab, red, red)) {
2486
+ background-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);
2487
+ }
2488
+ }
2489
+ }
2490
+ }
2491
+ .dark\\:group-data-hover\\:bg-blue-400\\/20 {
2492
+ &:is(.dark *, :host(.dark) *) {
2493
+ &:is(:where(.group)[data-hover] *) {
2494
+ background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 20%, transparent);
2495
+ @supports (color: color-mix(in lab, red, red)) {
2496
+ background-color: color-mix(in oklab, var(--color-blue-400) 20%, transparent);
2497
+ }
2498
+ }
2499
+ }
2500
+ }
2501
+ .dark\\:group-data-hover\\:bg-cyan-400\\/20 {
2502
+ &:is(.dark *, :host(.dark) *) {
2503
+ &:is(:where(.group)[data-hover] *) {
2504
+ background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 20%, transparent);
2505
+ @supports (color: color-mix(in lab, red, red)) {
2506
+ background-color: color-mix(in oklab, var(--color-cyan-400) 20%, transparent);
2507
+ }
2508
+ }
2509
+ }
2510
+ }
2511
+ .dark\\:group-data-hover\\:bg-emerald-400\\/20 {
2512
+ &:is(.dark *, :host(.dark) *) {
2513
+ &:is(:where(.group)[data-hover] *) {
2514
+ background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);
2515
+ @supports (color: color-mix(in lab, red, red)) {
2516
+ background-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);
2517
+ }
2518
+ }
2519
+ }
2520
+ }
2521
+ .dark\\:group-data-hover\\:bg-fuchsia-400\\/20 {
2522
+ &:is(.dark *, :host(.dark) *) {
2523
+ &:is(:where(.group)[data-hover] *) {
2524
+ background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);
2525
+ @supports (color: color-mix(in lab, red, red)) {
2526
+ background-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);
2527
+ }
2528
+ }
2529
+ }
2530
+ }
2531
+ .dark\\:group-data-hover\\:bg-rose-400\\/20 {
2532
+ &:is(.dark *, :host(.dark) *) {
2533
+ &:is(:where(.group)[data-hover] *) {
2534
+ background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);
2535
+ @supports (color: color-mix(in lab, red, red)) {
2536
+ background-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);
2537
+ }
2538
+ }
2539
+ }
2540
+ }
2541
+ .dark\\:group-data-hover\\:bg-slate-400\\/20 {
2542
+ &:is(.dark *, :host(.dark) *) {
2543
+ &:is(:where(.group)[data-hover] *) {
2544
+ background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);
2545
+ @supports (color: color-mix(in lab, red, red)) {
2546
+ background-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);
2547
+ }
2548
+ }
2549
+ }
2550
+ }
2551
+ .dark\\:group-data-hover\\:bg-violet-400\\/20 {
2552
+ &:is(.dark *, :host(.dark) *) {
2553
+ &:is(:where(.group)[data-hover] *) {
2554
+ background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 20%, transparent);
2555
+ @supports (color: color-mix(in lab, red, red)) {
2556
+ background-color: color-mix(in oklab, var(--color-violet-400) 20%, transparent);
2557
+ }
2558
+ }
2559
+ }
2560
+ }
2561
+ .dark\\:before\\:shadow-\\[0_-1px_--theme\\(--color-white\\/6\\%\\)\\] {
2562
+ &:is(.dark *, :host(.dark) *) {
2563
+ &::before {
2564
+ content: var(--tw-content);
2565
+ --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 6%, transparent));
2566
+ @supports (color: color-mix(in lab, red, red)) {
2567
+ --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in oklab, var(--color-white) 6%, transparent));
2568
+ }
2569
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2570
+ }
2571
+ }
2572
+ }
2573
+ .\\[\\&_svg\\]\\:pointer-events-none {
2574
+ & svg {
2575
+ pointer-events: none;
2576
+ }
2577
+ }
2578
+ .\\[\\&_svg\\]\\:shrink-0 {
2579
+ & svg {
2580
+ flex-shrink: 0;
2581
+ }
2582
+ }
2583
+ .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {
2584
+ & svg:not([class*='opacity-']) {
2585
+ opacity: 80%;
2586
+ }
2587
+ }
2588
+ .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {
2589
+ & svg:not([class*='size-']) {
2590
+ width: calc(var(--spacing) * 3);
2591
+ height: calc(var(--spacing) * 3);
2592
+ }
2593
+ }
2594
+ .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {
2595
+ & svg:not([class*='size-']) {
2596
+ width: calc(var(--spacing) * 4);
2597
+ height: calc(var(--spacing) * 4);
2598
+ }
2599
+ }
2600
+ .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4\\.5 {
2601
+ & svg:not([class*='size-']) {
2602
+ width: calc(var(--spacing) * 4.5);
2603
+ height: calc(var(--spacing) * 4.5);
2604
+ }
2605
+ }
2606
+ .\\[\\&\\>svg\\]\\:pointer-events-none {
2607
+ &>svg {
2608
+ pointer-events: none;
2609
+ }
2610
+ }
2611
+ .\\[\\&\\>svg\\]\\:-mx-0\\.5 {
2612
+ &>svg {
2613
+ margin-inline: calc(var(--spacing) * -0.5);
2614
+ }
2615
+ }
2616
+ .\\[\\&\\>svg\\]\\:shrink-0 {
2617
+ &>svg {
2618
+ flex-shrink: 0;
2619
+ }
2620
+ }
2621
+ .\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {
2622
+ &>svg:not([class*='opacity-']) {
2623
+ opacity: 80%;
2624
+ }
2625
+ }
2626
+ .\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {
2627
+ &>svg:not([class*='size-']) {
2628
+ width: calc(var(--spacing) * 4);
2629
+ height: calc(var(--spacing) * 4);
2630
+ }
2631
+ }
2632
+ }
2633
+ @layer base {
2634
+ *, ::after, ::before {
2635
+ border-color: var(--color-border, currentColor);
2636
+ }
2637
+ }
2638
+ @layer components {
2639
+ [data-highlighted] {
2640
+ background-color: var(--accent);
2641
+ color: var(--accent-foreground);
2642
+ transition: background-color 150ms ease-out;
2643
+ }
2644
+ [data-kbd-nav] [data-highlighted]:not([data-kbd-highlighted]) {
2645
+ background-color: transparent;
2646
+ color: inherit;
2647
+ }
2648
+ [data-kbd-highlighted] {
2649
+ background-color: var(--accent);
2650
+ @supports (color: color-mix(in lab, red, red)) {
2651
+ background-color: color-mix(in srgb, var(--accent) 200%, transparent);
2652
+ }
2653
+ color: var(--accent-foreground);
2654
+ }
2655
+ .uidex-item-interactive:hover {
2656
+ background-color: var(--accent);
2657
+ color: var(--accent-foreground);
2658
+ }
2659
+ [data-kbd-nav] .uidex-item-interactive:hover:not(:focus):not(:focus-within) {
2660
+ background-color: transparent;
2661
+ color: inherit;
2662
+ }
2663
+ .uidex-scrollbar {
2664
+ scrollbar-width: thin;
2665
+ scrollbar-color: var(--muted-foreground) transparent;
2666
+ @supports (color: color-mix(in lab, red, red)) {
2667
+ scrollbar-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent) transparent;
2668
+ }
2669
+ }
2670
+ .uidex-scrollbar::-webkit-scrollbar {
2671
+ width: 8px;
2672
+ height: 8px;
2673
+ }
2674
+ .uidex-scrollbar::-webkit-scrollbar-track {
2675
+ background: transparent;
2676
+ }
2677
+ .uidex-scrollbar::-webkit-scrollbar-thumb {
2678
+ background-color: var(--muted-foreground);
2679
+ @supports (color: color-mix(in lab, red, red)) {
2680
+ background-color: color-mix( in srgb, var(--muted-foreground) 35%, transparent );
2681
+ }
2682
+ border-radius: 9999px;
2683
+ border: 2px solid transparent;
2684
+ background-clip: content-box;
2685
+ }
2686
+ .uidex-scrollbar::-webkit-scrollbar-thumb:hover {
2687
+ background-color: var(--muted-foreground);
2688
+ @supports (color: color-mix(in lab, red, red)) {
2689
+ background-color: color-mix( in srgb, var(--muted-foreground) 60%, transparent );
2690
+ }
2691
+ }
2692
+ .uidex-scrollbar::-webkit-scrollbar-corner {
2693
+ background: transparent;
2694
+ }
2695
+ }
2696
+ @keyframes skeleton {
2697
+ to {
2698
+ background-position: -200% 0;
2699
+ }
2700
+ }
2701
+ :where(:host, :root) {
2702
+ --background: color-mix(
2703
+ in srgb,
2704
+ oklch(14.5% 0 0) 95%,
2705
+ #fff
2706
+ );
2707
+ @supports (color: color-mix(in lab, red, red)) {
2708
+ --background: color-mix(
2709
+ in srgb,
2710
+ var(--color-neutral-950) 95%,
2711
+ var(--color-white)
2712
+ );
2713
+ }
2714
+ --foreground: var(--color-neutral-100);
2715
+ --card: var(--background);
2716
+ @supports (color: color-mix(in lab, red, red)) {
2717
+ --card: color-mix(in srgb, var(--background) 98%, var(--color-white));
2718
+ }
2719
+ --card-foreground: var(--color-neutral-100);
2720
+ --popover: var(--background);
2721
+ @supports (color: color-mix(in lab, red, red)) {
2722
+ --popover: color-mix(in srgb, var(--background) 98%, var(--color-white));
2723
+ }
2724
+ --popover-foreground: var(--color-neutral-100);
2725
+ --primary: var(--color-neutral-100);
2726
+ --primary-foreground: var(--color-neutral-800);
2727
+ --secondary: color-mix(in srgb, #fff 4%, transparent);
2728
+ @supports (color: color-mix(in lab, red, red)) {
2729
+ --secondary: color-mix(in srgb, var(--color-white) 4%, transparent);
2730
+ }
2731
+ --secondary-foreground: var(--color-neutral-100);
2732
+ --muted: color-mix(in srgb, #fff 4%, transparent);
2733
+ @supports (color: color-mix(in lab, red, red)) {
2734
+ --muted: color-mix(in srgb, var(--color-white) 4%, transparent);
2735
+ }
2736
+ --muted-foreground: color-mix(
2737
+ in srgb,
2738
+ oklch(55.6% 0 0) 90%,
2739
+ #fff
2740
+ );
2741
+ @supports (color: color-mix(in lab, red, red)) {
2742
+ --muted-foreground: color-mix(
2743
+ in srgb,
2744
+ var(--color-neutral-500) 90%,
2745
+ var(--color-white)
2746
+ );
2747
+ }
2748
+ --accent: color-mix(in srgb, #fff 4%, transparent);
2749
+ @supports (color: color-mix(in lab, red, red)) {
2750
+ --accent: color-mix(in srgb, var(--color-white) 4%, transparent);
2751
+ }
2752
+ --accent-foreground: var(--color-neutral-100);
2753
+ --destructive: color-mix(
2754
+ in srgb,
2755
+ oklch(63.7% 0.237 25.331) 90%,
2756
+ #fff
2757
+ );
2758
+ @supports (color: color-mix(in lab, red, red)) {
2759
+ --destructive: color-mix(
2760
+ in srgb,
2761
+ var(--color-red-500) 90%,
2762
+ var(--color-white)
2763
+ );
2764
+ }
2765
+ --destructive-foreground: var(--color-red-400);
2766
+ --border: color-mix(in srgb, #fff 6%, transparent);
2767
+ @supports (color: color-mix(in lab, red, red)) {
2768
+ --border: color-mix(in srgb, var(--color-white) 6%, transparent);
2769
+ }
2770
+ --input: color-mix(in srgb, #fff 8%, transparent);
2771
+ @supports (color: color-mix(in lab, red, red)) {
2772
+ --input: color-mix(in srgb, var(--color-white) 8%, transparent);
2773
+ }
2774
+ --ring: var(--color-neutral-500);
2775
+ --info: var(--color-blue-500);
2776
+ --info-foreground: var(--color-blue-400);
2777
+ --success: var(--color-emerald-500);
2778
+ --success-foreground: var(--color-emerald-400);
2779
+ --warning: var(--color-amber-500);
2780
+ --warning-foreground: var(--color-amber-400);
2781
+ --radius: 0.625rem;
2782
+ }
2783
+ :host(.light) {
2784
+ --background: var(--color-white);
2785
+ --foreground: var(--color-neutral-800);
2786
+ --card: var(--color-white);
2787
+ --card-foreground: var(--color-neutral-800);
2788
+ --popover: var(--color-white);
2789
+ --popover-foreground: var(--color-neutral-800);
2790
+ --primary: var(--color-neutral-800);
2791
+ --primary-foreground: var(--color-neutral-50);
2792
+ --secondary: color-mix(in srgb, #000 4%, transparent);
2793
+ @supports (color: color-mix(in lab, red, red)) {
2794
+ --secondary: color-mix(in srgb, var(--color-black) 4%, transparent);
2795
+ }
2796
+ --secondary-foreground: var(--color-neutral-800);
2797
+ --muted: color-mix(in srgb, #000 4%, transparent);
2798
+ @supports (color: color-mix(in lab, red, red)) {
2799
+ --muted: color-mix(in srgb, var(--color-black) 4%, transparent);
2800
+ }
2801
+ --muted-foreground: color-mix(
2802
+ in srgb,
2803
+ oklch(55.6% 0 0) 90%,
2804
+ #000
2805
+ );
2806
+ @supports (color: color-mix(in lab, red, red)) {
2807
+ --muted-foreground: color-mix(
2808
+ in srgb,
2809
+ var(--color-neutral-500) 90%,
2810
+ var(--color-black)
2811
+ );
2812
+ }
2813
+ --accent: color-mix(in srgb, #000 4%, transparent);
2814
+ @supports (color: color-mix(in lab, red, red)) {
2815
+ --accent: color-mix(in srgb, var(--color-black) 4%, transparent);
2816
+ }
2817
+ --accent-foreground: var(--color-neutral-800);
2818
+ --destructive: var(--color-red-500);
2819
+ --destructive-foreground: var(--color-red-700);
2820
+ --border: color-mix(in srgb, #000 8%, transparent);
2821
+ @supports (color: color-mix(in lab, red, red)) {
2822
+ --border: color-mix(in srgb, var(--color-black) 8%, transparent);
2823
+ }
2824
+ --input: color-mix(in srgb, #000 10%, transparent);
2825
+ @supports (color: color-mix(in lab, red, red)) {
2826
+ --input: color-mix(in srgb, var(--color-black) 10%, transparent);
2827
+ }
2828
+ --ring: var(--color-neutral-400);
2829
+ --info: var(--color-blue-500);
2830
+ --info-foreground: var(--color-blue-700);
2831
+ --success: var(--color-emerald-500);
2832
+ --success-foreground: var(--color-emerald-700);
2833
+ --warning: var(--color-amber-500);
2834
+ --warning-foreground: var(--color-amber-700);
2835
+ }
2836
+ @property --tw-translate-x {
2837
+ syntax: "*";
2838
+ inherits: false;
2839
+ initial-value: 0;
2840
+ }
2841
+ @property --tw-translate-y {
2842
+ syntax: "*";
2843
+ inherits: false;
2844
+ initial-value: 0;
2845
+ }
2846
+ @property --tw-translate-z {
2847
+ syntax: "*";
2848
+ inherits: false;
2849
+ initial-value: 0;
2850
+ }
2851
+ @property --tw-scale-x {
2852
+ syntax: "*";
2853
+ inherits: false;
2854
+ initial-value: 1;
2855
+ }
2856
+ @property --tw-scale-y {
2857
+ syntax: "*";
2858
+ inherits: false;
2859
+ initial-value: 1;
2860
+ }
2861
+ @property --tw-scale-z {
2862
+ syntax: "*";
2863
+ inherits: false;
2864
+ initial-value: 1;
2865
+ }
2866
+ @property --tw-rotate-x {
2867
+ syntax: "*";
2868
+ inherits: false;
2869
+ }
2870
+ @property --tw-rotate-y {
2871
+ syntax: "*";
2872
+ inherits: false;
2873
+ }
2874
+ @property --tw-rotate-z {
2875
+ syntax: "*";
2876
+ inherits: false;
2877
+ }
2878
+ @property --tw-skew-x {
2879
+ syntax: "*";
2880
+ inherits: false;
2881
+ }
2882
+ @property --tw-skew-y {
2883
+ syntax: "*";
2884
+ inherits: false;
2885
+ }
2886
+ @property --tw-border-style {
2887
+ syntax: "*";
2888
+ inherits: false;
2889
+ initial-value: solid;
2890
+ }
2891
+ @property --tw-leading {
2892
+ syntax: "*";
2893
+ inherits: false;
2894
+ }
2895
+ @property --tw-font-weight {
2896
+ syntax: "*";
2897
+ inherits: false;
2898
+ }
2899
+ @property --tw-tracking {
2900
+ syntax: "*";
2901
+ inherits: false;
2902
+ }
2903
+ @property --tw-ordinal {
2904
+ syntax: "*";
2905
+ inherits: false;
2906
+ }
2907
+ @property --tw-slashed-zero {
2908
+ syntax: "*";
2909
+ inherits: false;
2910
+ }
2911
+ @property --tw-numeric-figure {
2912
+ syntax: "*";
2913
+ inherits: false;
2914
+ }
2915
+ @property --tw-numeric-spacing {
2916
+ syntax: "*";
2917
+ inherits: false;
2918
+ }
2919
+ @property --tw-numeric-fraction {
2920
+ syntax: "*";
2921
+ inherits: false;
2922
+ }
2923
+ @property --tw-shadow {
2924
+ syntax: "*";
2925
+ inherits: false;
2926
+ initial-value: 0 0 #0000;
2927
+ }
2928
+ @property --tw-shadow-color {
2929
+ syntax: "*";
2930
+ inherits: false;
2931
+ }
2932
+ @property --tw-shadow-alpha {
2933
+ syntax: "<percentage>";
2934
+ inherits: false;
2935
+ initial-value: 100%;
2936
+ }
2937
+ @property --tw-inset-shadow {
2938
+ syntax: "*";
2939
+ inherits: false;
2940
+ initial-value: 0 0 #0000;
2941
+ }
2942
+ @property --tw-inset-shadow-color {
2943
+ syntax: "*";
2944
+ inherits: false;
2945
+ }
2946
+ @property --tw-inset-shadow-alpha {
2947
+ syntax: "<percentage>";
2948
+ inherits: false;
2949
+ initial-value: 100%;
2950
+ }
2951
+ @property --tw-ring-color {
2952
+ syntax: "*";
2953
+ inherits: false;
2954
+ }
2955
+ @property --tw-ring-shadow {
2956
+ syntax: "*";
2957
+ inherits: false;
2958
+ initial-value: 0 0 #0000;
2959
+ }
2960
+ @property --tw-inset-ring-color {
2961
+ syntax: "*";
2962
+ inherits: false;
2963
+ }
2964
+ @property --tw-inset-ring-shadow {
2965
+ syntax: "*";
2966
+ inherits: false;
2967
+ initial-value: 0 0 #0000;
2968
+ }
2969
+ @property --tw-ring-inset {
2970
+ syntax: "*";
2971
+ inherits: false;
2972
+ }
2973
+ @property --tw-ring-offset-width {
2974
+ syntax: "<length>";
2975
+ inherits: false;
2976
+ initial-value: 0px;
2977
+ }
2978
+ @property --tw-ring-offset-color {
2979
+ syntax: "*";
2980
+ inherits: false;
2981
+ initial-value: #fff;
2982
+ }
2983
+ @property --tw-ring-offset-shadow {
2984
+ syntax: "*";
2985
+ inherits: false;
2986
+ initial-value: 0 0 #0000;
2987
+ }
2988
+ @property --tw-outline-style {
2989
+ syntax: "*";
2990
+ inherits: false;
2991
+ initial-value: solid;
2992
+ }
2993
+ @property --tw-blur {
2994
+ syntax: "*";
2995
+ inherits: false;
2996
+ }
2997
+ @property --tw-brightness {
2998
+ syntax: "*";
2999
+ inherits: false;
3000
+ }
3001
+ @property --tw-contrast {
3002
+ syntax: "*";
3003
+ inherits: false;
3004
+ }
3005
+ @property --tw-grayscale {
3006
+ syntax: "*";
3007
+ inherits: false;
3008
+ }
3009
+ @property --tw-hue-rotate {
3010
+ syntax: "*";
3011
+ inherits: false;
3012
+ }
3013
+ @property --tw-invert {
3014
+ syntax: "*";
3015
+ inherits: false;
3016
+ }
3017
+ @property --tw-opacity {
3018
+ syntax: "*";
3019
+ inherits: false;
3020
+ }
3021
+ @property --tw-saturate {
3022
+ syntax: "*";
3023
+ inherits: false;
3024
+ }
3025
+ @property --tw-sepia {
3026
+ syntax: "*";
3027
+ inherits: false;
3028
+ }
3029
+ @property --tw-drop-shadow {
3030
+ syntax: "*";
3031
+ inherits: false;
3032
+ }
3033
+ @property --tw-drop-shadow-color {
3034
+ syntax: "*";
3035
+ inherits: false;
3036
+ }
3037
+ @property --tw-drop-shadow-alpha {
3038
+ syntax: "<percentage>";
3039
+ inherits: false;
3040
+ initial-value: 100%;
3041
+ }
3042
+ @property --tw-drop-shadow-size {
3043
+ syntax: "*";
3044
+ inherits: false;
3045
+ }
3046
+ @property --tw-backdrop-blur {
3047
+ syntax: "*";
3048
+ inherits: false;
3049
+ }
3050
+ @property --tw-backdrop-brightness {
3051
+ syntax: "*";
3052
+ inherits: false;
3053
+ }
3054
+ @property --tw-backdrop-contrast {
3055
+ syntax: "*";
3056
+ inherits: false;
3057
+ }
3058
+ @property --tw-backdrop-grayscale {
3059
+ syntax: "*";
3060
+ inherits: false;
3061
+ }
3062
+ @property --tw-backdrop-hue-rotate {
3063
+ syntax: "*";
3064
+ inherits: false;
3065
+ }
3066
+ @property --tw-backdrop-invert {
3067
+ syntax: "*";
3068
+ inherits: false;
3069
+ }
3070
+ @property --tw-backdrop-opacity {
3071
+ syntax: "*";
3072
+ inherits: false;
3073
+ }
3074
+ @property --tw-backdrop-saturate {
3075
+ syntax: "*";
3076
+ inherits: false;
3077
+ }
3078
+ @property --tw-backdrop-sepia {
3079
+ syntax: "*";
3080
+ inherits: false;
3081
+ }
3082
+ @property --tw-ease {
3083
+ syntax: "*";
3084
+ inherits: false;
3085
+ }
3086
+ @property --tw-content {
3087
+ syntax: "*";
3088
+ initial-value: "";
3089
+ inherits: false;
3090
+ }
3091
+ @keyframes spin {
3092
+ to {
3093
+ transform: rotate(360deg);
3094
+ }
3095
+ }
3096
+ @layer properties {
3097
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
3098
+ *, ::before, ::after, ::backdrop {
3099
+ --tw-translate-x: 0;
3100
+ --tw-translate-y: 0;
3101
+ --tw-translate-z: 0;
3102
+ --tw-scale-x: 1;
3103
+ --tw-scale-y: 1;
3104
+ --tw-scale-z: 1;
3105
+ --tw-rotate-x: initial;
3106
+ --tw-rotate-y: initial;
3107
+ --tw-rotate-z: initial;
3108
+ --tw-skew-x: initial;
3109
+ --tw-skew-y: initial;
3110
+ --tw-border-style: solid;
3111
+ --tw-leading: initial;
3112
+ --tw-font-weight: initial;
3113
+ --tw-tracking: initial;
3114
+ --tw-ordinal: initial;
3115
+ --tw-slashed-zero: initial;
3116
+ --tw-numeric-figure: initial;
3117
+ --tw-numeric-spacing: initial;
3118
+ --tw-numeric-fraction: initial;
3119
+ --tw-shadow: 0 0 #0000;
3120
+ --tw-shadow-color: initial;
3121
+ --tw-shadow-alpha: 100%;
3122
+ --tw-inset-shadow: 0 0 #0000;
3123
+ --tw-inset-shadow-color: initial;
3124
+ --tw-inset-shadow-alpha: 100%;
3125
+ --tw-ring-color: initial;
3126
+ --tw-ring-shadow: 0 0 #0000;
3127
+ --tw-inset-ring-color: initial;
3128
+ --tw-inset-ring-shadow: 0 0 #0000;
3129
+ --tw-ring-inset: initial;
3130
+ --tw-ring-offset-width: 0px;
3131
+ --tw-ring-offset-color: #fff;
3132
+ --tw-ring-offset-shadow: 0 0 #0000;
3133
+ --tw-outline-style: solid;
3134
+ --tw-blur: initial;
3135
+ --tw-brightness: initial;
3136
+ --tw-contrast: initial;
3137
+ --tw-grayscale: initial;
3138
+ --tw-hue-rotate: initial;
3139
+ --tw-invert: initial;
3140
+ --tw-opacity: initial;
3141
+ --tw-saturate: initial;
3142
+ --tw-sepia: initial;
3143
+ --tw-drop-shadow: initial;
3144
+ --tw-drop-shadow-color: initial;
3145
+ --tw-drop-shadow-alpha: 100%;
3146
+ --tw-drop-shadow-size: initial;
3147
+ --tw-backdrop-blur: initial;
3148
+ --tw-backdrop-brightness: initial;
3149
+ --tw-backdrop-contrast: initial;
3150
+ --tw-backdrop-grayscale: initial;
3151
+ --tw-backdrop-hue-rotate: initial;
3152
+ --tw-backdrop-invert: initial;
3153
+ --tw-backdrop-opacity: initial;
3154
+ --tw-backdrop-saturate: initial;
3155
+ --tw-backdrop-sepia: initial;
3156
+ --tw-ease: initial;
3157
+ --tw-content: "";
3158
+ }
3159
+ }
3160
+ }
3161
+ `;
3162
+
3163
+ // src/surface/constants.ts
3164
+ var SURFACE_HOST_CLASS = "uidex-surface-host";
3165
+ var SURFACE_CONTAINER_CLASS = "uidex-container";
3166
+ var Z_BASE = 2147483644;
3167
+ var Z_OVERLAY = 2147483645;
3168
+ var Z_CHROME = 2147483646;
3169
+ var SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`;
3170
+ var UIDEX_ATTR_TO_KIND = [
3171
+ ["data-uidex", "element"],
3172
+ ["data-uidex-region", "region"],
3173
+ ["data-uidex-widget", "widget"],
3174
+ ["data-uidex-primitive", "primitive"]
3175
+ ];
3176
+
3177
+ // src/surface/host.ts
3178
+ function createSurfaceHost(options) {
3179
+ const { mount, stylesheets = [], initialTheme = "light" } = options;
3180
+ const hostEl = document.createElement("div");
3181
+ hostEl.classList.add(SURFACE_HOST_CLASS);
3182
+ hostEl.style.position = "fixed";
3183
+ hostEl.style.inset = "0";
3184
+ hostEl.style.pointerEvents = "none";
3185
+ hostEl.style.zIndex = String(Z_BASE);
3186
+ hostEl.classList.add(initialTheme);
3187
+ const shadow = hostEl.attachShadow({ mode: "open" });
3188
+ applyStylesheets(shadow, [tailwind_built_default, ...stylesheets]);
3189
+ const chromeEl = document.createElement("div");
3190
+ chromeEl.classList.add("uidex-chrome");
3191
+ chromeEl.style.pointerEvents = "auto";
3192
+ shadow.appendChild(chromeEl);
3193
+ mount.appendChild(hostEl);
3194
+ return {
3195
+ hostEl,
3196
+ shadowRoot: shadow,
3197
+ chromeEl,
3198
+ applyTheme(theme) {
3199
+ hostEl.classList.remove("light", "dark");
3200
+ hostEl.classList.add(theme);
3201
+ },
3202
+ destroy() {
3203
+ hostEl.remove();
3204
+ }
3205
+ };
3206
+ }
3207
+ function applyStylesheets(shadow, stylesheets) {
3208
+ if (stylesheets.length === 0) return;
3209
+ const adoptable = supportsConstructableStylesheets(shadow);
3210
+ if (adoptable) {
3211
+ const sheets = [];
3212
+ for (const css of stylesheets) {
3213
+ const sheet = new CSSStyleSheet();
3214
+ sheet.replaceSync(css);
3215
+ sheets.push(sheet);
3216
+ }
3217
+ shadow.adoptedStyleSheets = [...shadow.adoptedStyleSheets, ...sheets];
3218
+ return;
3219
+ }
3220
+ for (const css of stylesheets) {
3221
+ const style = document.createElement("style");
3222
+ style.textContent = css;
3223
+ shadow.appendChild(style);
3224
+ }
3225
+ }
3226
+ function supportsConstructableStylesheets(shadow) {
3227
+ if (typeof CSSStyleSheet === "undefined") return false;
3228
+ if (!("adoptedStyleSheets" in shadow)) return false;
3229
+ try {
3230
+ const probe = new CSSStyleSheet();
3231
+ probe.replaceSync("");
3232
+ return true;
3233
+ } catch {
3234
+ return false;
3235
+ }
3236
+ }
3237
+
3238
+ // src/surface/cursor-tooltip.ts
3239
+ var import_lucide2 = require("lucide");
3240
+ var DEFAULT_TOOLTIP_COLOR = "#34d399";
3241
+ var TOOLTIP_OFFSET = 16;
3242
+ var ARROW_SIZE = 5;
3243
+ function createCursorTooltip(deps) {
3244
+ const { container } = deps;
3245
+ const el2 = document.createElement("div");
3246
+ el2.setAttribute("data-uidex-cursor-tooltip", "");
3247
+ el2.style.position = "fixed";
3248
+ el2.style.pointerEvents = "none";
3249
+ el2.style.zIndex = String(Z_CHROME);
3250
+ el2.style.padding = "4px 8px";
3251
+ el2.style.fontSize = "12px";
3252
+ el2.style.fontFamily = "ui-sans-serif, system-ui, sans-serif";
3253
+ el2.style.borderRadius = "6px";
3254
+ el2.style.background = DEFAULT_TOOLTIP_COLOR;
3255
+ el2.style.color = "#0a0a0a";
3256
+ el2.style.display = "none";
3257
+ el2.style.whiteSpace = "nowrap";
3258
+ el2.style.transform = "translate(-50%, 0)";
3259
+ el2.style.alignItems = "center";
3260
+ el2.style.gap = "6px";
3261
+ const arrow = document.createElement("div");
3262
+ arrow.setAttribute("data-uidex-cursor-tooltip-arrow", "");
3263
+ arrow.style.position = "absolute";
3264
+ arrow.style.left = "50%";
3265
+ arrow.style.bottom = "100%";
3266
+ arrow.style.width = "0";
3267
+ arrow.style.height = "0";
3268
+ arrow.style.transform = "translate(-50%, 0)";
3269
+ arrow.style.borderLeft = `${ARROW_SIZE}px solid transparent`;
3270
+ arrow.style.borderRight = `${ARROW_SIZE}px solid transparent`;
3271
+ arrow.style.borderBottom = `${ARROW_SIZE}px solid ${DEFAULT_TOOLTIP_COLOR}`;
3272
+ el2.appendChild(arrow);
3273
+ const body = document.createElement("span");
3274
+ body.setAttribute("data-uidex-cursor-tooltip-body", "");
3275
+ body.style.display = "inline-flex";
3276
+ body.style.alignItems = "center";
3277
+ body.style.gap = "6px";
3278
+ el2.appendChild(body);
3279
+ container.appendChild(el2);
3280
+ let currentContent = null;
3281
+ let currentCursor = null;
3282
+ const applyColor = (color) => {
3283
+ el2.style.background = color;
3284
+ arrow.style.borderBottom = `${ARROW_SIZE}px solid ${color}`;
3285
+ };
3286
+ const renderBody = () => {
3287
+ body.replaceChildren();
3288
+ if (typeof currentContent === "string") {
3289
+ applyColor(DEFAULT_TOOLTIP_COLOR);
3290
+ body.append(document.createTextNode(currentContent));
3291
+ return;
3292
+ }
3293
+ if (!currentContent) return;
3294
+ const { entity, node } = currentContent;
3295
+ const style = KIND_STYLE[entity.kind];
3296
+ applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR);
3297
+ if (style) {
3298
+ const svg = (0, import_lucide2.createElement)(style.icon);
3299
+ svg.setAttribute("aria-hidden", "true");
3300
+ svg.setAttribute("width", "14");
3301
+ svg.setAttribute("height", "14");
3302
+ svg.style.display = "block";
3303
+ body.append(svg);
3304
+ }
3305
+ const label = displayName(entity, node);
3306
+ body.append(document.createTextNode(label));
3307
+ if (currentContent.layer) {
3308
+ const counter = document.createElement("span");
3309
+ counter.setAttribute("data-uidex-cursor-tooltip-layer", "");
3310
+ counter.style.fontFamily = "ui-monospace, SFMono-Regular, Menlo, monospace";
3311
+ counter.style.fontSize = "10px";
3312
+ counter.style.lineHeight = "1";
3313
+ counter.style.padding = "2px 5px";
3314
+ counter.style.borderRadius = "4px";
3315
+ counter.style.background = "rgba(0,0,0,0.18)";
3316
+ counter.textContent = `${currentContent.layer.index + 1}/${currentContent.layer.total}`;
3317
+ body.append(counter);
3318
+ }
3319
+ };
3320
+ const render = () => {
3321
+ if (!currentContent || !currentCursor) {
3322
+ el2.style.display = "none";
3323
+ return;
3324
+ }
3325
+ renderBody();
3326
+ el2.style.display = "inline-flex";
3327
+ el2.style.left = `${currentCursor.x}px`;
3328
+ el2.style.top = `${currentCursor.y + TOOLTIP_OFFSET}px`;
3329
+ };
3330
+ return {
3331
+ update(content, cursor) {
3332
+ currentContent = content;
3333
+ currentCursor = cursor;
3334
+ render();
3335
+ },
3336
+ destroy() {
3337
+ el2.remove();
3338
+ currentContent = null;
3339
+ currentCursor = null;
3340
+ }
3341
+ };
3342
+ }
3343
+
3344
+ // src/surface/inspector.ts
3345
+ function entityForRef(ref, registry) {
3346
+ if (registry) {
3347
+ const found = registry.get(ref.kind, ref.id);
3348
+ if (found) return found;
3349
+ }
3350
+ if (ref.kind === "route") return { kind: "route", path: ref.id, page: ref.id };
3351
+ if (ref.kind === "flow") {
3352
+ return {
3353
+ kind: "flow",
3354
+ id: ref.id,
3355
+ loc: { file: "" },
3356
+ touches: [],
3357
+ steps: []
3358
+ };
3359
+ }
3360
+ return { kind: ref.kind, id: ref.id };
3361
+ }
3362
+ function defaultResolveAllMatches(target, registry) {
3363
+ if (target.closest(SURFACE_IGNORE_SELECTOR)) return [];
3364
+ const matches = [];
3365
+ const seen = /* @__PURE__ */ new Set();
3366
+ let node = target;
3367
+ while (node) {
3368
+ if (node instanceof HTMLElement) {
3369
+ for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {
3370
+ const id = node.getAttribute(attr);
3371
+ if (id) {
3372
+ const key = `${kind}:${id}`;
3373
+ if (!seen.has(key)) {
3374
+ seen.add(key);
3375
+ const ref = { kind, id };
3376
+ const entity = entityForRef(ref, registry);
3377
+ matches.push({
3378
+ element: node,
3379
+ ref,
3380
+ entity,
3381
+ label: displayName(entity, node)
3382
+ });
3383
+ }
3384
+ }
3385
+ }
3386
+ }
3387
+ node = node.parentElement;
3388
+ }
3389
+ return matches;
3390
+ }
3391
+ function createInspector(options) {
3392
+ const {
3393
+ session,
3394
+ registry,
3395
+ resolveAll = (target) => defaultResolveAllMatches(target, registry),
3396
+ onHover,
3397
+ onSelect,
3398
+ onCycle
3399
+ } = options;
3400
+ let mounted = false;
3401
+ let currentEl = null;
3402
+ let cursorStyleEl = null;
3403
+ let stack = [];
3404
+ let layerIndex = 0;
3405
+ let lastCursor = { x: 0, y: 0 };
3406
+ const makeStack = () => stack.length > 0 ? { matches: stack, index: layerIndex, current: stack[layerIndex] } : null;
3407
+ const onMouseMove = (e) => {
3408
+ if (!(e.target instanceof Element)) return;
3409
+ const matches = resolveAll(e.target);
3410
+ const cursor = { x: e.clientX, y: e.clientY };
3411
+ lastCursor = cursor;
3412
+ const topEl = matches.length > 0 ? matches[0].element : null;
3413
+ if (topEl) {
3414
+ if (topEl !== currentEl) {
3415
+ currentEl = topEl;
3416
+ stack = matches;
3417
+ layerIndex = 0;
3418
+ session.getState().actions.hover(stack[0].ref);
3419
+ }
3420
+ onHover?.(makeStack(), cursor);
3421
+ } else if (currentEl) {
3422
+ currentEl = null;
3423
+ stack = [];
3424
+ layerIndex = 0;
3425
+ session.getState().actions.hover(null);
3426
+ onHover?.(null, cursor);
3427
+ }
3428
+ };
3429
+ const onClick = (e) => {
3430
+ if (!(e.target instanceof Element)) return;
3431
+ if (e.target.closest(SURFACE_IGNORE_SELECTOR)) return;
3432
+ if (stack.length === 0) return;
3433
+ e.preventDefault();
3434
+ e.stopPropagation();
3435
+ const match = stack[layerIndex];
3436
+ session.getState().actions.select(match.ref);
3437
+ onSelect?.(match, { x: e.clientX, y: e.clientY });
3438
+ };
3439
+ const onContextMenu = (e) => {
3440
+ if (stack.length <= 1) return;
3441
+ e.preventDefault();
3442
+ e.stopPropagation();
3443
+ layerIndex = (layerIndex + 1) % stack.length;
3444
+ const match = stack[layerIndex];
3445
+ session.getState().actions.hover(match.ref);
3446
+ onCycle?.(makeStack(), lastCursor);
3447
+ };
3448
+ return {
3449
+ mount() {
3450
+ if (mounted) return;
3451
+ mounted = true;
3452
+ if (typeof document !== "undefined") {
3453
+ cursorStyleEl = document.createElement("style");
3454
+ cursorStyleEl.setAttribute("data-uidex-inspector-cursor", "");
3455
+ cursorStyleEl.textContent = "html, body, body * { cursor: crosshair !important; }";
3456
+ document.head.appendChild(cursorStyleEl);
3457
+ }
3458
+ document.addEventListener("mousemove", onMouseMove);
3459
+ document.addEventListener("click", onClick, true);
3460
+ document.addEventListener("contextmenu", onContextMenu, true);
3461
+ },
3462
+ destroy() {
3463
+ if (!mounted) return;
3464
+ mounted = false;
3465
+ currentEl = null;
3466
+ stack = [];
3467
+ layerIndex = 0;
3468
+ if (cursorStyleEl) {
3469
+ cursorStyleEl.remove();
3470
+ cursorStyleEl = null;
3471
+ }
3472
+ document.removeEventListener("mousemove", onMouseMove);
3473
+ document.removeEventListener("click", onClick, true);
3474
+ document.removeEventListener("contextmenu", onContextMenu, true);
3475
+ session.getState().actions.hover(null);
3476
+ onHover?.(null, null);
3477
+ }
3478
+ };
3479
+ }
3480
+
3481
+ // src/surface/menu-bar.ts
3482
+ var import_lucide3 = require("lucide");
3483
+
3484
+ // src/internal/cn.ts
3485
+ var import_clsx = require("clsx");
3486
+ var import_tailwind_merge = require("tailwind-merge");
3487
+ function cn(...inputs) {
3488
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
3489
+ }
3490
+
3491
+ // src/internal/el.ts
3492
+ function el(tag, options = {}, children = []) {
3493
+ const node = document.createElement(tag);
3494
+ if (options.class) node.className = cn(options.class);
3495
+ if (options.attrs) {
3496
+ for (const [key, value] of Object.entries(options.attrs)) {
3497
+ if (value === void 0 || value === null || value === false) continue;
3498
+ if (value === true) {
3499
+ node.setAttribute(key, "");
3500
+ } else {
3501
+ node.setAttribute(key, String(value));
3502
+ }
3503
+ }
3504
+ }
3505
+ if (options.dataset) {
3506
+ for (const [key, value] of Object.entries(options.dataset)) {
3507
+ node.dataset[key] = value;
3508
+ }
3509
+ }
3510
+ if (options.style) {
3511
+ Object.assign(node.style, options.style);
3512
+ }
3513
+ if (options.text !== void 0) {
3514
+ node.textContent = options.text;
3515
+ }
3516
+ const list = Array.isArray(children) ? children : [children];
3517
+ for (const child of list) {
3518
+ if (child === null || child === void 0 || child === false) continue;
3519
+ node.append(
3520
+ typeof child === "string" ? document.createTextNode(child) : child
3521
+ );
3522
+ }
3523
+ return node;
3524
+ }
3525
+
3526
+ // src/surface/keys.ts
3527
+ var INSPECT_SHORTCUT = { key: "i" };
3528
+ function formatShortcutLabel(shortcut) {
3529
+ const parts = [];
3530
+ if (shortcut.mod !== false) parts.push("\u2318");
3531
+ if (shortcut.shift) parts.push("\u21E7");
3532
+ parts.push(shortcut.key.toUpperCase());
3533
+ return parts.join("");
3534
+ }
3535
+
3536
+ // src/surface/menu-bar.ts
3537
+ var ROOT_CLASS = "inline-flex items-center gap-1.5 rounded-xl border border-border bg-popover p-1.5 font-sans text-xs text-popover-foreground shadow-lg/5 select-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]";
3538
+ var BUTTON_CLASS = "relative z-1 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring";
3539
+ var BUTTON_ACTIVE_CLASS = "border-info/40 bg-info/15 text-info-foreground hover:bg-info/20";
3540
+ var TITLE_CLASS = "relative z-1 whitespace-nowrap px-1.5 text-xs font-semibold tracking-tight text-foreground";
3541
+ var BUTTON_HIGHLIGHT_ACTIVE_CLASS = "border-amber-500/40 bg-amber-500/15 text-amber-600 hover:bg-amber-500/20 dark:text-amber-400";
3542
+ function createMenuBar(options) {
3543
+ const {
3544
+ container,
3545
+ session,
3546
+ initialCorner = "bottom-right",
3547
+ appTitle
3548
+ } = options;
3549
+ const root = el("div", {
3550
+ class: ROOT_CLASS,
3551
+ attrs: {
3552
+ "data-uidex-menubar": "",
3553
+ role: "toolbar"
3554
+ },
3555
+ style: {
3556
+ position: "fixed",
3557
+ zIndex: String(Z_CHROME),
3558
+ pointerEvents: "auto",
3559
+ cursor: "grab"
3560
+ }
3561
+ });
3562
+ let titleEl = null;
3563
+ if (appTitle) {
3564
+ titleEl = el("span", {
3565
+ class: TITLE_CLASS,
3566
+ attrs: { "data-uidex-menubar-title": "" },
3567
+ text: appTitle
3568
+ });
3569
+ root.appendChild(titleEl);
3570
+ }
3571
+ const highlightIcon = (0, import_lucide3.createElement)(import_lucide3.Highlighter);
3572
+ highlightIcon.setAttribute("class", "size-3.5");
3573
+ highlightIcon.setAttribute("aria-hidden", "true");
3574
+ const highlightBtn = el(
3575
+ "button",
3576
+ {
3577
+ class: BUTTON_CLASS,
3578
+ attrs: {
3579
+ type: "button",
3580
+ "data-uidex-menubar-highlight": "",
3581
+ "aria-label": "Dismiss highlight"
3582
+ }
3583
+ },
3584
+ highlightIcon
3585
+ );
3586
+ highlightBtn.hidden = true;
3587
+ highlightBtn.addEventListener("click", (e) => {
3588
+ e.stopPropagation();
3589
+ session.send({ type: "UNPIN" });
3590
+ });
3591
+ root.appendChild(highlightBtn);
3592
+ const inspectIcon = (0, import_lucide3.createElement)(import_lucide3.MousePointerClick);
3593
+ inspectIcon.setAttribute("class", "size-3.5");
3594
+ inspectIcon.setAttribute("aria-hidden", "true");
3595
+ const inspectBtn = el(
3596
+ "button",
3597
+ {
3598
+ class: BUTTON_CLASS,
3599
+ attrs: {
3600
+ type: "button",
3601
+ "data-uidex-menubar-inspect": "",
3602
+ "aria-label": `Inspect (${formatShortcutLabel(INSPECT_SHORTCUT)})`
3603
+ }
3604
+ },
3605
+ inspectIcon
3606
+ );
3607
+ inspectBtn.addEventListener("click", (e) => {
3608
+ e.stopPropagation();
3609
+ session.send({ type: "TOGGLE_INSPECTOR" });
3610
+ });
3611
+ root.appendChild(inspectBtn);
3612
+ const paletteIcon = (0, import_lucide3.createElement)(import_lucide3.Command);
3613
+ paletteIcon.setAttribute("class", "size-3.5");
3614
+ paletteIcon.setAttribute("aria-hidden", "true");
3615
+ const paletteBtn = el(
3616
+ "button",
3617
+ {
3618
+ class: BUTTON_CLASS,
3619
+ attrs: {
3620
+ type: "button",
3621
+ "data-uidex-menubar-palette": "",
3622
+ "aria-label": "Command palette"
3623
+ }
3624
+ },
3625
+ paletteIcon
3626
+ );
3627
+ paletteBtn.addEventListener("click", (e) => {
3628
+ e.stopPropagation();
3629
+ if (session.getState().stack.length > 0) {
3630
+ session.send({ type: "CLOSE" });
3631
+ } else {
3632
+ session.send({ type: "OPEN_PALETTE" });
3633
+ }
3634
+ });
3635
+ root.appendChild(paletteBtn);
3636
+ container.appendChild(root);
3637
+ const syncButtonStates = () => {
3638
+ const state = session.getState();
3639
+ const inspectActive = state.inspectorActive;
3640
+ inspectBtn.setAttribute(
3641
+ "data-uidex-menubar-inspect-active",
3642
+ inspectActive ? "true" : "false"
3643
+ );
3644
+ inspectBtn.className = cn(
3645
+ BUTTON_CLASS,
3646
+ inspectActive && BUTTON_ACTIVE_CLASS
3647
+ );
3648
+ const top = state.stack[state.stack.length - 1] ?? null;
3649
+ const paletteOpen = top?.id === "command-palette";
3650
+ paletteBtn.setAttribute(
3651
+ "data-uidex-menubar-palette-active",
3652
+ paletteOpen ? "true" : "false"
3653
+ );
3654
+ paletteBtn.className = cn(BUTTON_CLASS, paletteOpen && BUTTON_ACTIVE_CLASS);
3655
+ const highlightActive = state.pinnedHighlight !== null;
3656
+ highlightBtn.setAttribute(
3657
+ "data-uidex-menubar-highlight-active",
3658
+ highlightActive ? "true" : "false"
3659
+ );
3660
+ highlightBtn.className = cn(
3661
+ BUTTON_CLASS,
3662
+ highlightActive && BUTTON_HIGHLIGHT_ACTIVE_CLASS
3663
+ );
3664
+ highlightBtn.hidden = !highlightActive;
3665
+ };
3666
+ syncButtonStates();
3667
+ const unsubscribeSession = session.subscribe(syncButtonStates);
3668
+ let corner = initialCorner;
3669
+ const applyCorner = () => {
3670
+ const offset = "16px";
3671
+ root.style.top = corner.startsWith("top") ? offset : "";
3672
+ root.style.bottom = corner.startsWith("bottom") ? offset : "";
3673
+ root.style.left = corner.endsWith("left") ? offset : "";
3674
+ root.style.right = corner.endsWith("right") ? offset : "";
3675
+ root.setAttribute("data-uidex-menubar-corner", corner);
3676
+ };
3677
+ applyCorner();
3678
+ let dragging = false;
3679
+ let startX = 0;
3680
+ let startY = 0;
3681
+ let originLeft = 0;
3682
+ let originTop = 0;
3683
+ const onMouseMove = (e) => {
3684
+ if (!dragging) return;
3685
+ root.style.left = `${originLeft + e.clientX - startX}px`;
3686
+ root.style.top = `${originTop + e.clientY - startY}px`;
3687
+ };
3688
+ const onMouseUp = (e) => {
3689
+ if (!dragging) return;
3690
+ dragging = false;
3691
+ root.style.cursor = "grab";
3692
+ document.removeEventListener("mousemove", onMouseMove);
3693
+ document.removeEventListener("mouseup", onMouseUp);
3694
+ snapToNearest(e.clientX, e.clientY);
3695
+ };
3696
+ const onMouseDown = (e) => {
3697
+ if (e.target instanceof HTMLElement && e.target.closest("button")) return;
3698
+ const rect = root.getBoundingClientRect();
3699
+ dragging = true;
3700
+ originLeft = rect.left;
3701
+ originTop = rect.top;
3702
+ startX = e.clientX;
3703
+ startY = e.clientY;
3704
+ root.style.cursor = "grabbing";
3705
+ Object.assign(root.style, {
3706
+ top: `${originTop}px`,
3707
+ left: `${originLeft}px`,
3708
+ bottom: "",
3709
+ right: ""
3710
+ });
3711
+ document.addEventListener("mousemove", onMouseMove);
3712
+ document.addEventListener("mouseup", onMouseUp);
3713
+ e.preventDefault();
3714
+ };
3715
+ root.addEventListener("mousedown", onMouseDown);
3716
+ function snapTo(next) {
3717
+ corner = next;
3718
+ applyCorner();
3719
+ }
3720
+ function snapToNearest(x, y) {
3721
+ const horizontal = x / (window.innerWidth || 1) < 0.5 ? "left" : "right";
3722
+ const vertical = y / (window.innerHeight || 1) < 0.5 ? "top" : "bottom";
3723
+ snapTo(`${vertical}-${horizontal}`);
3724
+ }
3725
+ return {
3726
+ destroy() {
3727
+ unsubscribeSession();
3728
+ root.removeEventListener("mousedown", onMouseDown);
3729
+ document.removeEventListener("mousemove", onMouseMove);
3730
+ document.removeEventListener("mouseup", onMouseUp);
3731
+ root.remove();
3732
+ },
3733
+ snapTo,
3734
+ snapToNearest,
3735
+ get corner() {
3736
+ return corner;
3737
+ },
3738
+ get root() {
3739
+ return root;
3740
+ }
3741
+ };
3742
+ }
3743
+
3744
+ // src/surface/overlay.ts
3745
+ var DEFAULT_COLOR = "#34d399";
3746
+ var DEFAULT_BORDER_WIDTH = 2;
3747
+ var DEFAULT_FILL_OPACITY = 0.08;
3748
+ var BACKDROP_OPACITY = 0.45;
3749
+ function createOverlay(deps) {
3750
+ const { container } = deps;
3751
+ const backdrop = document.createElement("div");
3752
+ backdrop.setAttribute("data-uidex-overlay-backdrop", "");
3753
+ backdrop.style.position = "fixed";
3754
+ backdrop.style.inset = "0";
3755
+ backdrop.style.zIndex = String(Z_OVERLAY);
3756
+ backdrop.style.backgroundColor = `rgba(0, 0, 0, ${BACKDROP_OPACITY})`;
3757
+ backdrop.style.display = "none";
3758
+ backdrop.style.pointerEvents = "auto";
3759
+ backdrop.style.cursor = "default";
3760
+ backdrop.addEventListener("click", (e) => {
3761
+ e.stopPropagation();
3762
+ overlay.onDismiss?.();
3763
+ });
3764
+ container.appendChild(backdrop);
3765
+ const box = document.createElement("div");
3766
+ box.setAttribute("data-uidex-overlay", "");
3767
+ box.style.position = "fixed";
3768
+ box.style.pointerEvents = "none";
3769
+ box.style.zIndex = String(Z_OVERLAY + 1);
3770
+ box.style.boxSizing = "border-box";
3771
+ box.style.display = "none";
3772
+ const label = document.createElement("div");
3773
+ label.setAttribute("data-uidex-overlay-label", "");
3774
+ label.style.position = "absolute";
3775
+ label.style.left = "0";
3776
+ label.style.bottom = "100%";
3777
+ label.style.padding = "2px 6px";
3778
+ label.style.fontSize = "11px";
3779
+ label.style.fontFamily = "ui-sans-serif, system-ui, sans-serif";
3780
+ label.style.lineHeight = "1";
3781
+ label.style.whiteSpace = "nowrap";
3782
+ label.style.color = "#0a0a0a";
3783
+ label.style.display = "none";
3784
+ box.appendChild(label);
3785
+ container.appendChild(box);
3786
+ let target = null;
3787
+ let opts = {
3788
+ label: "",
3789
+ color: DEFAULT_COLOR,
3790
+ padding: 0,
3791
+ borderStyle: "solid",
3792
+ borderWidth: DEFAULT_BORDER_WIDTH,
3793
+ fillOpacity: DEFAULT_FILL_OPACITY,
3794
+ backdrop: false
3795
+ };
3796
+ let rafId = null;
3797
+ let attached = false;
3798
+ const schedule = () => {
3799
+ if (rafId !== null) return;
3800
+ rafId = typeof requestAnimationFrame === "function" ? requestAnimationFrame(() => {
3801
+ rafId = null;
3802
+ updatePosition();
3803
+ }) : setTimeout(() => {
3804
+ rafId = null;
3805
+ updatePosition();
3806
+ }, 0);
3807
+ };
3808
+ const cancelSchedule = () => {
3809
+ if (rafId === null) return;
3810
+ if (typeof cancelAnimationFrame === "function") cancelAnimationFrame(rafId);
3811
+ else clearTimeout(rafId);
3812
+ rafId = null;
3813
+ };
3814
+ const onScroll = () => schedule();
3815
+ const onResize = () => schedule();
3816
+ const attach = () => {
3817
+ if (attached) return;
3818
+ attached = true;
3819
+ window.addEventListener("resize", onResize);
3820
+ window.addEventListener("scroll", onScroll, {
3821
+ capture: true,
3822
+ passive: true
3823
+ });
3824
+ };
3825
+ const detach = () => {
3826
+ if (!attached) return;
3827
+ attached = false;
3828
+ window.removeEventListener("resize", onResize);
3829
+ window.removeEventListener("scroll", onScroll, {
3830
+ capture: true
3831
+ });
3832
+ cancelSchedule();
3833
+ };
3834
+ function updatePosition() {
3835
+ if (!target) return;
3836
+ const rect = target.getBoundingClientRect();
3837
+ const pad = opts.padding;
3838
+ const top = rect.top - pad;
3839
+ const left = rect.left - pad;
3840
+ const w = rect.width + pad * 2;
3841
+ const h = rect.height + pad * 2;
3842
+ box.style.top = `${top}px`;
3843
+ box.style.left = `${left}px`;
3844
+ box.style.width = `${w}px`;
3845
+ box.style.height = `${h}px`;
3846
+ if (opts.backdrop) {
3847
+ const vw = window.innerWidth;
3848
+ const vh = window.innerHeight;
3849
+ backdrop.style.clipPath = cutoutPath(vw, vh, left, top, w, h);
3850
+ }
3851
+ }
3852
+ function applyStyles() {
3853
+ box.style.borderColor = opts.color;
3854
+ box.style.borderStyle = opts.borderStyle;
3855
+ box.style.borderWidth = `${opts.borderWidth}px`;
3856
+ box.style.backgroundColor = rgbaFromColor(opts.color, opts.fillOpacity);
3857
+ box.style.borderRadius = "6px";
3858
+ if (opts.label) {
3859
+ label.textContent = opts.label;
3860
+ label.style.backgroundColor = opts.color;
3861
+ label.style.display = "";
3862
+ } else {
3863
+ label.textContent = "";
3864
+ label.style.display = "none";
3865
+ }
3866
+ backdrop.style.display = opts.backdrop ? "" : "none";
3867
+ if (!opts.backdrop) {
3868
+ backdrop.style.clipPath = "";
3869
+ }
3870
+ }
3871
+ const overlay = {
3872
+ onDismiss: null,
3873
+ show(nextTarget, showOpts) {
3874
+ target = nextTarget;
3875
+ opts = {
3876
+ label: showOpts?.label ?? "",
3877
+ color: showOpts?.color ?? DEFAULT_COLOR,
3878
+ padding: showOpts?.padding ?? 0,
3879
+ borderStyle: showOpts?.borderStyle ?? "solid",
3880
+ borderWidth: showOpts?.borderWidth ?? DEFAULT_BORDER_WIDTH,
3881
+ fillOpacity: showOpts?.fillOpacity ?? DEFAULT_FILL_OPACITY,
3882
+ backdrop: showOpts?.backdrop ?? false
3883
+ };
3884
+ applyStyles();
3885
+ updatePosition();
3886
+ box.style.display = "";
3887
+ attach();
3888
+ },
3889
+ hide() {
3890
+ target = null;
3891
+ box.style.display = "none";
3892
+ backdrop.style.display = "none";
3893
+ backdrop.style.clipPath = "";
3894
+ detach();
3895
+ },
3896
+ destroy() {
3897
+ detach();
3898
+ box.remove();
3899
+ backdrop.remove();
3900
+ target = null;
3901
+ },
3902
+ get isVisible() {
3903
+ return target !== null;
3904
+ }
3905
+ };
3906
+ return overlay;
3907
+ }
3908
+ function cutoutPath(vw, vh, x, y, w, h) {
3909
+ const outer = `M0 0H${vw}V${vh}H0Z`;
3910
+ const inner = `M${x} ${y}V${y + h}H${x + w}V${y}Z`;
3911
+ return `path(evenodd,"${outer}${inner}")`;
3912
+ }
3913
+ function rgbaFromColor(color, alpha) {
3914
+ if (color.startsWith("#")) {
3915
+ const hex = color.slice(1);
3916
+ const bigint = parseInt(
3917
+ hex.length === 3 ? hex.split("").map((c) => c + c).join("") : hex,
3918
+ 16
3919
+ );
3920
+ const r = bigint >> 16 & 255;
3921
+ const g = bigint >> 8 & 255;
3922
+ const b = bigint & 255;
3923
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
3924
+ }
3925
+ return color;
3926
+ }
3927
+
3928
+ // src/surface/theme.ts
3929
+ function createThemeDetector(deps) {
3930
+ const { session, onResolve } = deps;
3931
+ let resolved = session.getState().resolvedTheme;
3932
+ const detect = (preference) => {
3933
+ if (preference !== "auto") return preference;
3934
+ const htmlToken = readHtmlClassToken();
3935
+ if (htmlToken) return htmlToken;
3936
+ if (typeof window !== "undefined" && typeof window.matchMedia === "function") {
3937
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
3938
+ }
3939
+ return "light";
3940
+ };
3941
+ const push = () => {
3942
+ const preference = session.getState().theme;
3943
+ const next = detect(preference);
3944
+ if (next === resolved) return;
3945
+ resolved = next;
3946
+ session.getState().actions.setTheme(preference, next);
3947
+ onResolve?.(next);
3948
+ };
3949
+ push();
3950
+ let mql = null;
3951
+ const mqlListener = () => push();
3952
+ if (typeof window !== "undefined" && typeof window.matchMedia === "function") {
3953
+ mql = window.matchMedia("(prefers-color-scheme: dark)");
3954
+ if (typeof mql.addEventListener === "function") {
3955
+ mql.addEventListener("change", mqlListener);
3956
+ } else if (typeof mql.addListener === "function") {
3957
+ mql.addListener(mqlListener);
3958
+ }
3959
+ }
3960
+ let observer = null;
3961
+ if (typeof MutationObserver !== "undefined" && typeof document !== "undefined") {
3962
+ observer = new MutationObserver(() => push());
3963
+ observer.observe(document.documentElement, {
3964
+ attributes: true,
3965
+ attributeFilter: ["class"]
3966
+ });
3967
+ }
3968
+ const unsubscribe = session.subscribe((state, prev) => {
3969
+ if (state.theme !== prev.theme) push();
3970
+ });
3971
+ return {
3972
+ destroy() {
3973
+ unsubscribe();
3974
+ if (mql) {
3975
+ if (typeof mql.removeEventListener === "function") {
3976
+ mql.removeEventListener("change", mqlListener);
3977
+ } else if (typeof mql.removeListener === "function") {
3978
+ mql.removeListener(mqlListener);
3979
+ }
3980
+ }
3981
+ observer?.disconnect();
3982
+ },
3983
+ get resolved() {
3984
+ return resolved;
3985
+ }
3986
+ };
3987
+ }
3988
+ function readHtmlClassToken() {
3989
+ if (typeof document === "undefined") return null;
3990
+ const root = document.documentElement;
3991
+ if (!root) return null;
3992
+ if (root.classList.contains("dark")) return "dark";
3993
+ if (root.classList.contains("light")) return "light";
3994
+ return null;
3995
+ }
3996
+
3997
+ // src/surface/shell.ts
3998
+ function createSurfaceShell(options) {
3999
+ const cleanup = createCleanupStack();
4000
+ const host = createSurfaceHost({
4001
+ mount: options.mount,
4002
+ stylesheets: options.stylesheets,
4003
+ initialTheme: options.session.getState().resolvedTheme
4004
+ });
4005
+ cleanup.add(host);
4006
+ const themeDetector = createThemeDetector({
4007
+ session: options.session,
4008
+ onResolve: (theme) => host.applyTheme(theme)
4009
+ });
4010
+ cleanup.add(themeDetector);
4011
+ const overlay = createOverlay({ container: host.chromeEl });
4012
+ cleanup.add(overlay);
4013
+ const tooltip = createCursorTooltip({
4014
+ container: host.chromeEl,
4015
+ session: options.session
4016
+ });
4017
+ cleanup.add(tooltip);
4018
+ const afterHover = options.inspector?.onAfterHover;
4019
+ const showStack = (stack, cursor) => {
4020
+ if (!stack) {
4021
+ overlay.hide();
4022
+ tooltip.update(null, cursor);
4023
+ return;
4024
+ }
4025
+ const { current } = stack;
4026
+ overlay.show(current.element, {
4027
+ color: KIND_STYLE[current.ref.kind].color
4028
+ });
4029
+ tooltip.update(
4030
+ {
4031
+ entity: current.entity,
4032
+ node: current.element,
4033
+ layer: stack.matches.length > 1 ? { index: stack.index, total: stack.matches.length } : void 0
4034
+ },
4035
+ cursor
4036
+ );
4037
+ };
4038
+ const inspector = createInspector({
4039
+ session: options.session,
4040
+ registry: options.registry,
4041
+ onSelect: options.inspector?.onSelect,
4042
+ onHover: (stack, cursor) => {
4043
+ showStack(stack, cursor);
4044
+ afterHover?.(stack?.current ?? null, cursor);
4045
+ },
4046
+ onCycle: (stack, cursor) => {
4047
+ showStack(stack, cursor);
4048
+ }
4049
+ });
4050
+ cleanup.add(inspector);
4051
+ const menuBar = createMenuBar({
4052
+ container: host.chromeEl,
4053
+ session: options.session,
4054
+ initialCorner: options.initialCorner,
4055
+ appTitle: options.appTitle
4056
+ });
4057
+ cleanup.add(menuBar);
4058
+ return {
4059
+ host,
4060
+ overlay,
4061
+ tooltip,
4062
+ inspector,
4063
+ menuBar,
4064
+ themeDetector,
4065
+ cleanup,
4066
+ destroy: cleanup.drain
4067
+ };
4068
+ }
4069
+
4070
+ // src/headless/index.ts
4071
+ function createHeadless(options = {}) {
4072
+ const registry = createRegistry();
4073
+ const session = createSession({
4074
+ theme: options.theme,
4075
+ resolvedTheme: options.resolvedTheme
4076
+ });
4077
+ const mountCleanup = createCleanupStack();
4078
+ let shadowRoot = null;
4079
+ let shell = null;
4080
+ let mounted = false;
4081
+ const overlayApi = {
4082
+ show(target, opts) {
4083
+ shell?.overlay.show(target, opts);
4084
+ },
4085
+ hide() {
4086
+ shell?.overlay.hide();
4087
+ },
4088
+ get isVisible() {
4089
+ return shell?.overlay.isVisible ?? false;
4090
+ }
4091
+ };
4092
+ const inspectorApi = {
4093
+ start() {
4094
+ },
4095
+ stop() {
4096
+ },
4097
+ get isActive() {
4098
+ return shell !== null;
4099
+ }
4100
+ };
4101
+ function mount(target) {
4102
+ if (mounted) return;
4103
+ const mountTarget = target ?? (typeof document !== "undefined" ? document.body : null);
4104
+ if (!mountTarget) {
4105
+ throw new Error("createHeadless: no mount target available");
4106
+ }
4107
+ shell = createSurfaceShell({
4108
+ mount: mountTarget,
4109
+ registry,
4110
+ session,
4111
+ stylesheets: options.stylesheets,
4112
+ initialCorner: options.initialCorner,
4113
+ appTitle: options.appTitle
4114
+ });
4115
+ shadowRoot = shell.host.shadowRoot;
4116
+ shell.inspector.mount();
4117
+ mountCleanup.add(shell);
4118
+ mounted = true;
4119
+ }
4120
+ function unmount() {
4121
+ if (!mounted) return;
4122
+ mountCleanup.drain();
4123
+ shell = null;
4124
+ shadowRoot = null;
4125
+ mounted = false;
4126
+ }
4127
+ return {
4128
+ mount,
4129
+ unmount,
4130
+ registry,
4131
+ session,
4132
+ overlay: overlayApi,
4133
+ inspector: inspectorApi,
4134
+ get shadowRoot() {
4135
+ return shadowRoot;
4136
+ }
4137
+ };
4138
+ }
4139
+ // Annotate the CommonJS export names for ESM import in node:
4140
+ 0 && (module.exports = {
4141
+ createHeadless
4142
+ });
4143
+ //# sourceMappingURL=index.cjs.map