uidex 0.2.4 → 0.3.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 (67) hide show
  1. package/README.md +253 -353
  2. package/dist/cli/cli.cjs +3243 -0
  3. package/dist/cli/cli.cjs.map +1 -0
  4. package/dist/cloud/index.cjs +149 -0
  5. package/dist/cloud/index.cjs.map +1 -0
  6. package/dist/cloud/index.d.cts +108 -0
  7. package/dist/cloud/index.d.ts +108 -0
  8. package/dist/cloud/index.js +120 -0
  9. package/dist/cloud/index.js.map +1 -0
  10. package/dist/headless/index.cjs +3580 -0
  11. package/dist/headless/index.cjs.map +1 -0
  12. package/dist/headless/index.d.cts +214 -0
  13. package/dist/headless/index.d.ts +214 -0
  14. package/dist/headless/index.js +3562 -0
  15. package/dist/headless/index.js.map +1 -0
  16. package/dist/index.cjs +6902 -9801
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +901 -146
  19. package/dist/index.d.ts +901 -146
  20. package/dist/index.js +6896 -9805
  21. package/dist/index.js.map +1 -1
  22. package/dist/playwright/index.cjs +164 -24
  23. package/dist/playwright/index.cjs.map +1 -1
  24. package/dist/playwright/index.d.cts +30 -53
  25. package/dist/playwright/index.d.ts +30 -53
  26. package/dist/playwright/index.js +148 -21
  27. package/dist/playwright/index.js.map +1 -1
  28. package/dist/playwright/reporter.cjs +62 -28
  29. package/dist/playwright/reporter.cjs.map +1 -1
  30. package/dist/playwright/reporter.d.cts +24 -12
  31. package/dist/playwright/reporter.d.ts +24 -12
  32. package/dist/playwright/reporter.js +62 -28
  33. package/dist/playwright/reporter.js.map +1 -1
  34. package/dist/react/index.cjs +6936 -9808
  35. package/dist/react/index.cjs.map +1 -1
  36. package/dist/react/index.d.cts +673 -146
  37. package/dist/react/index.d.ts +673 -146
  38. package/dist/react/index.js +6980 -9811
  39. package/dist/react/index.js.map +1 -1
  40. package/dist/scan/index.cjs +3281 -0
  41. package/dist/scan/index.cjs.map +1 -0
  42. package/dist/scan/index.d.cts +373 -0
  43. package/dist/scan/index.d.ts +373 -0
  44. package/dist/scan/index.js +3224 -0
  45. package/dist/scan/index.js.map +1 -0
  46. package/package.json +71 -65
  47. package/templates/claude/audit.md +37 -0
  48. package/templates/claude/rules.md +212 -0
  49. package/claude/audit-command.md +0 -46
  50. package/claude/rules.md +0 -167
  51. package/dist/api/index.cjs +0 -254
  52. package/dist/api/index.cjs.map +0 -1
  53. package/dist/api/index.d.cts +0 -236
  54. package/dist/api/index.d.ts +0 -236
  55. package/dist/api/index.js +0 -226
  56. package/dist/api/index.js.map +0 -1
  57. package/dist/core/index.cjs +0 -11045
  58. package/dist/core/index.cjs.map +0 -1
  59. package/dist/core/index.d.cts +0 -424
  60. package/dist/core/index.d.ts +0 -424
  61. package/dist/core/index.global.js +0 -66516
  62. package/dist/core/index.global.js.map +0 -1
  63. package/dist/core/index.js +0 -10995
  64. package/dist/core/index.js.map +0 -1
  65. package/dist/core/style.css +0 -1529
  66. package/dist/scripts/cli.cjs +0 -3904
  67. package/uidex.schema.json +0 -93
@@ -0,0 +1,3580 @@
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-300",
156
+ chip: "bg-blue-400/20 text-blue-700 group-data-hover:bg-blue-400/30 dark:bg-blue-400/10 dark:text-blue-300 dark:group-data-hover:bg-blue-400/15",
157
+ color: "#60a5fa",
158
+ label: "Route"
159
+ },
160
+ page: {
161
+ icon: import_lucide.FileText,
162
+ tone: "text-emerald-700 dark:text-emerald-300",
163
+ chip: "bg-emerald-400/20 text-emerald-700 group-data-hover:bg-emerald-400/30 dark:bg-emerald-400/10 dark:text-emerald-300 dark:group-data-hover:bg-emerald-400/15",
164
+ color: "#34d399",
165
+ label: "Page"
166
+ },
167
+ feature: {
168
+ icon: import_lucide.Sparkles,
169
+ tone: "text-amber-700 dark:text-amber-300",
170
+ chip: "bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-300 dark:group-data-hover:bg-amber-400/15",
171
+ color: "#fbbf24",
172
+ label: "Feature"
173
+ },
174
+ widget: {
175
+ icon: import_lucide.LayoutGrid,
176
+ tone: "text-violet-700 dark:text-violet-300",
177
+ chip: "bg-violet-400/20 text-violet-700 group-data-hover:bg-violet-400/30 dark:bg-violet-400/10 dark:text-violet-300 dark:group-data-hover:bg-violet-400/15",
178
+ color: "#a78bfa",
179
+ label: "Widget"
180
+ },
181
+ region: {
182
+ icon: import_lucide.LayoutPanelTop,
183
+ tone: "text-cyan-700 dark:text-cyan-300",
184
+ chip: "bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15",
185
+ color: "#22d3ee",
186
+ label: "Region"
187
+ },
188
+ element: {
189
+ icon: import_lucide.MousePointerClick,
190
+ tone: "text-rose-700 dark:text-rose-300",
191
+ chip: "bg-rose-400/20 text-rose-700 group-data-hover:bg-rose-400/30 dark:bg-rose-400/10 dark:text-rose-300 dark:group-data-hover:bg-rose-400/15",
192
+ color: "#fb7185",
193
+ label: "Element"
194
+ },
195
+ primitive: {
196
+ icon: import_lucide.Circle,
197
+ tone: "text-slate-700 dark:text-slate-300",
198
+ chip: "bg-slate-400/20 text-slate-700 group-data-hover:bg-slate-400/30 dark:bg-slate-400/10 dark:text-slate-300 dark:group-data-hover:bg-slate-400/15",
199
+ color: "#94a3b8",
200
+ label: "Primitive"
201
+ },
202
+ flow: {
203
+ icon: import_lucide.Workflow,
204
+ tone: "text-fuchsia-700 dark:text-fuchsia-300",
205
+ chip: "bg-fuchsia-400/20 text-fuchsia-700 group-data-hover:bg-fuchsia-400/30 dark:bg-fuchsia-400/10 dark:text-fuchsia-300 dark:group-data-hover:bg-fuchsia-400/15",
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-300: oklch(87.9% 0.169 91.605);
722
+ --color-amber-400: oklch(82.8% 0.189 84.429);
723
+ --color-amber-500: oklch(76.9% 0.188 70.08);
724
+ --color-amber-700: oklch(55.5% 0.163 48.998);
725
+ --color-emerald-300: oklch(84.5% 0.143 164.978);
726
+ --color-emerald-400: oklch(76.5% 0.177 163.223);
727
+ --color-emerald-500: oklch(69.6% 0.17 162.48);
728
+ --color-emerald-700: oklch(50.8% 0.118 165.612);
729
+ --color-cyan-300: oklch(86.5% 0.127 207.078);
730
+ --color-cyan-400: oklch(78.9% 0.154 211.53);
731
+ --color-cyan-700: oklch(52% 0.105 223.128);
732
+ --color-blue-300: oklch(80.9% 0.105 251.813);
733
+ --color-blue-400: oklch(70.7% 0.165 254.624);
734
+ --color-blue-500: oklch(62.3% 0.214 259.815);
735
+ --color-blue-700: oklch(48.8% 0.243 264.376);
736
+ --color-violet-300: oklch(81.1% 0.111 293.571);
737
+ --color-violet-400: oklch(70.2% 0.183 293.541);
738
+ --color-violet-700: oklch(49.1% 0.27 292.581);
739
+ --color-fuchsia-300: oklch(83.3% 0.145 321.434);
740
+ --color-fuchsia-400: oklch(74% 0.238 322.16);
741
+ --color-fuchsia-700: oklch(51.8% 0.253 323.949);
742
+ --color-rose-300: oklch(81% 0.117 11.638);
743
+ --color-rose-400: oklch(71.2% 0.194 13.428);
744
+ --color-rose-700: oklch(51.4% 0.222 16.935);
745
+ --color-slate-300: oklch(86.9% 0.022 252.894);
746
+ --color-slate-400: oklch(70.4% 0.04 256.788);
747
+ --color-slate-700: oklch(37.2% 0.044 257.287);
748
+ --color-neutral-50: oklch(98.5% 0 0);
749
+ --color-neutral-100: oklch(97% 0 0);
750
+ --color-neutral-400: oklch(70.8% 0 0);
751
+ --color-neutral-500: oklch(55.6% 0 0);
752
+ --color-neutral-800: oklch(26.9% 0 0);
753
+ --color-neutral-950: oklch(14.5% 0 0);
754
+ --color-black: #000;
755
+ --color-white: #fff;
756
+ --spacing: 0.25rem;
757
+ --container-xl: 36rem;
758
+ --text-xs: 0.75rem;
759
+ --text-xs--line-height: calc(1 / 0.75);
760
+ --text-sm: 0.875rem;
761
+ --text-sm--line-height: calc(1.25 / 0.875);
762
+ --text-base: 1rem;
763
+ --text-base--line-height: calc(1.5 / 1);
764
+ --font-weight-normal: 400;
765
+ --font-weight-medium: 500;
766
+ --font-weight-semibold: 600;
767
+ --tracking-widest: 0.1em;
768
+ --leading-relaxed: 1.625;
769
+ --radius-xl: calc(var(--radius) * 1.4);
770
+ --radius-2xl: calc(var(--radius) * 1.8);
771
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
772
+ --blur-sm: 8px;
773
+ --default-transition-duration: 150ms;
774
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
775
+ --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
776
+ Roboto, sans-serif;
777
+ --default-mono-font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
778
+ --color-border: var(--border);
779
+ }
780
+ }
781
+ @layer base {
782
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
783
+ box-sizing: border-box;
784
+ margin: 0;
785
+ padding: 0;
786
+ border: 0 solid;
787
+ }
788
+ html, :host {
789
+ line-height: 1.5;
790
+ -webkit-text-size-adjust: 100%;
791
+ tab-size: 4;
792
+ 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");
793
+ font-feature-settings: var(--default-font-feature-settings, normal);
794
+ font-variation-settings: var(--default-font-variation-settings, normal);
795
+ -webkit-tap-highlight-color: transparent;
796
+ }
797
+ hr {
798
+ height: 0;
799
+ color: inherit;
800
+ border-top-width: 1px;
801
+ }
802
+ abbr:where([title]) {
803
+ -webkit-text-decoration: underline dotted;
804
+ text-decoration: underline dotted;
805
+ }
806
+ h1, h2, h3, h4, h5, h6 {
807
+ font-size: inherit;
808
+ font-weight: inherit;
809
+ }
810
+ a {
811
+ color: inherit;
812
+ -webkit-text-decoration: inherit;
813
+ text-decoration: inherit;
814
+ }
815
+ b, strong {
816
+ font-weight: bolder;
817
+ }
818
+ code, kbd, samp, pre {
819
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
820
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
821
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
822
+ font-size: 1em;
823
+ }
824
+ small {
825
+ font-size: 80%;
826
+ }
827
+ sub, sup {
828
+ font-size: 75%;
829
+ line-height: 0;
830
+ position: relative;
831
+ vertical-align: baseline;
832
+ }
833
+ sub {
834
+ bottom: -0.25em;
835
+ }
836
+ sup {
837
+ top: -0.5em;
838
+ }
839
+ table {
840
+ text-indent: 0;
841
+ border-color: inherit;
842
+ border-collapse: collapse;
843
+ }
844
+ :-moz-focusring {
845
+ outline: auto;
846
+ }
847
+ progress {
848
+ vertical-align: baseline;
849
+ }
850
+ summary {
851
+ display: list-item;
852
+ }
853
+ ol, ul, menu {
854
+ list-style: none;
855
+ }
856
+ img, svg, video, canvas, audio, iframe, embed, object {
857
+ display: block;
858
+ vertical-align: middle;
859
+ }
860
+ img, video {
861
+ max-width: 100%;
862
+ height: auto;
863
+ }
864
+ button, input, select, optgroup, textarea, ::file-selector-button {
865
+ font: inherit;
866
+ font-feature-settings: inherit;
867
+ font-variation-settings: inherit;
868
+ letter-spacing: inherit;
869
+ color: inherit;
870
+ border-radius: 0;
871
+ background-color: transparent;
872
+ opacity: 1;
873
+ }
874
+ :where(select:is([multiple], [size])) optgroup {
875
+ font-weight: bolder;
876
+ }
877
+ :where(select:is([multiple], [size])) optgroup option {
878
+ padding-inline-start: 20px;
879
+ }
880
+ ::file-selector-button {
881
+ margin-inline-end: 4px;
882
+ }
883
+ ::placeholder {
884
+ opacity: 1;
885
+ }
886
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
887
+ ::placeholder {
888
+ color: currentcolor;
889
+ @supports (color: color-mix(in lab, red, red)) {
890
+ color: color-mix(in oklab, currentcolor 50%, transparent);
891
+ }
892
+ }
893
+ }
894
+ textarea {
895
+ resize: vertical;
896
+ }
897
+ ::-webkit-search-decoration {
898
+ -webkit-appearance: none;
899
+ }
900
+ ::-webkit-date-and-time-value {
901
+ min-height: 1lh;
902
+ text-align: inherit;
903
+ }
904
+ ::-webkit-datetime-edit {
905
+ display: inline-flex;
906
+ }
907
+ ::-webkit-datetime-edit-fields-wrapper {
908
+ padding: 0;
909
+ }
910
+ ::-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 {
911
+ padding-block: 0;
912
+ }
913
+ ::-webkit-calendar-picker-indicator {
914
+ line-height: 1;
915
+ }
916
+ :-moz-ui-invalid {
917
+ box-shadow: none;
918
+ }
919
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
920
+ appearance: button;
921
+ }
922
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
923
+ height: auto;
924
+ }
925
+ [hidden]:where(:not([hidden="until-found"])) {
926
+ display: none !important;
927
+ }
928
+ }
929
+ @layer utilities {
930
+ .pointer-events-none {
931
+ pointer-events: none;
932
+ }
933
+ .invisible {
934
+ visibility: hidden;
935
+ }
936
+ .visible {
937
+ visibility: visible;
938
+ }
939
+ .sr-only {
940
+ position: absolute;
941
+ width: 1px;
942
+ height: 1px;
943
+ padding: 0;
944
+ margin: -1px;
945
+ overflow: hidden;
946
+ clip-path: inset(50%);
947
+ white-space: nowrap;
948
+ border-width: 0;
949
+ }
950
+ .absolute {
951
+ position: absolute;
952
+ }
953
+ .fixed {
954
+ position: fixed;
955
+ }
956
+ .relative {
957
+ position: relative;
958
+ }
959
+ .inset-0 {
960
+ inset: calc(var(--spacing) * 0);
961
+ }
962
+ .start {
963
+ inset-inline-start: var(--spacing);
964
+ }
965
+ .end {
966
+ inset-inline-end: var(--spacing);
967
+ }
968
+ .right-2 {
969
+ right: calc(var(--spacing) * 2);
970
+ }
971
+ .right-3 {
972
+ right: calc(var(--spacing) * 3);
973
+ }
974
+ .bottom-12 {
975
+ bottom: calc(var(--spacing) * 12);
976
+ }
977
+ .z-10 {
978
+ z-index: 10;
979
+ }
980
+ .container {
981
+ width: 100%;
982
+ @media (width >= 40rem) {
983
+ max-width: 40rem;
984
+ }
985
+ @media (width >= 48rem) {
986
+ max-width: 48rem;
987
+ }
988
+ @media (width >= 64rem) {
989
+ max-width: 64rem;
990
+ }
991
+ @media (width >= 80rem) {
992
+ max-width: 80rem;
993
+ }
994
+ @media (width >= 96rem) {
995
+ max-width: 96rem;
996
+ }
997
+ }
998
+ .-mx-px {
999
+ margin-inline: -1px;
1000
+ }
1001
+ .mx-1 {
1002
+ margin-inline: calc(var(--spacing) * 1);
1003
+ }
1004
+ .mx-2 {
1005
+ margin-inline: calc(var(--spacing) * 2);
1006
+ }
1007
+ .my-1 {
1008
+ margin-block: calc(var(--spacing) * 1);
1009
+ }
1010
+ .ms-auto {
1011
+ margin-inline-start: auto;
1012
+ }
1013
+ .mt-1 {
1014
+ margin-top: calc(var(--spacing) * 1);
1015
+ }
1016
+ .ml-auto {
1017
+ margin-left: auto;
1018
+ }
1019
+ .block {
1020
+ display: block;
1021
+ }
1022
+ .contents {
1023
+ display: contents;
1024
+ }
1025
+ .flex {
1026
+ display: flex;
1027
+ }
1028
+ .hidden {
1029
+ display: none;
1030
+ }
1031
+ .inline {
1032
+ display: inline;
1033
+ }
1034
+ .inline-block {
1035
+ display: inline-block;
1036
+ }
1037
+ .inline-flex {
1038
+ display: inline-flex;
1039
+ }
1040
+ .list-item {
1041
+ display: list-item;
1042
+ }
1043
+ .table {
1044
+ display: table;
1045
+ }
1046
+ .size-3\\.5 {
1047
+ width: calc(var(--spacing) * 3.5);
1048
+ height: calc(var(--spacing) * 3.5);
1049
+ }
1050
+ .size-4 {
1051
+ width: calc(var(--spacing) * 4);
1052
+ height: calc(var(--spacing) * 4);
1053
+ }
1054
+ .size-6 {
1055
+ width: calc(var(--spacing) * 6);
1056
+ height: calc(var(--spacing) * 6);
1057
+ }
1058
+ .size-7 {
1059
+ width: calc(var(--spacing) * 7);
1060
+ height: calc(var(--spacing) * 7);
1061
+ }
1062
+ .size-8 {
1063
+ width: calc(var(--spacing) * 8);
1064
+ height: calc(var(--spacing) * 8);
1065
+ }
1066
+ .size-9 {
1067
+ width: calc(var(--spacing) * 9);
1068
+ height: calc(var(--spacing) * 9);
1069
+ }
1070
+ .h-3\\.5 {
1071
+ height: calc(var(--spacing) * 3.5);
1072
+ }
1073
+ .h-4 {
1074
+ height: calc(var(--spacing) * 4);
1075
+ }
1076
+ .h-4\\.5 {
1077
+ height: calc(var(--spacing) * 4.5);
1078
+ }
1079
+ .h-5 {
1080
+ height: calc(var(--spacing) * 5);
1081
+ }
1082
+ .h-5\\.5 {
1083
+ height: calc(var(--spacing) * 5.5);
1084
+ }
1085
+ .h-6 {
1086
+ height: calc(var(--spacing) * 6);
1087
+ }
1088
+ .h-7 {
1089
+ height: calc(var(--spacing) * 7);
1090
+ }
1091
+ .h-8 {
1092
+ height: calc(var(--spacing) * 8);
1093
+ }
1094
+ .h-9 {
1095
+ height: calc(var(--spacing) * 9);
1096
+ }
1097
+ .h-10 {
1098
+ height: calc(var(--spacing) * 10);
1099
+ }
1100
+ .h-\\[26rem\\] {
1101
+ height: 26rem;
1102
+ }
1103
+ .h-auto {
1104
+ height: auto;
1105
+ }
1106
+ .h-full {
1107
+ height: 100%;
1108
+ }
1109
+ .h-px {
1110
+ height: 1px;
1111
+ }
1112
+ .min-h-0 {
1113
+ min-height: calc(var(--spacing) * 0);
1114
+ }
1115
+ .min-h-7 {
1116
+ min-height: calc(var(--spacing) * 7);
1117
+ }
1118
+ .min-h-8 {
1119
+ min-height: calc(var(--spacing) * 8);
1120
+ }
1121
+ .min-h-20 {
1122
+ min-height: calc(var(--spacing) * 20);
1123
+ }
1124
+ .w-3\\.5 {
1125
+ width: calc(var(--spacing) * 3.5);
1126
+ }
1127
+ .w-4 {
1128
+ width: calc(var(--spacing) * 4);
1129
+ }
1130
+ .w-56 {
1131
+ width: calc(var(--spacing) * 56);
1132
+ }
1133
+ .w-auto {
1134
+ width: auto;
1135
+ }
1136
+ .w-full {
1137
+ width: 100%;
1138
+ }
1139
+ .w-px {
1140
+ width: 1px;
1141
+ }
1142
+ .max-w-xl {
1143
+ max-width: var(--container-xl);
1144
+ }
1145
+ .min-w-0 {
1146
+ min-width: calc(var(--spacing) * 0);
1147
+ }
1148
+ .min-w-4 {
1149
+ min-width: calc(var(--spacing) * 4);
1150
+ }
1151
+ .min-w-4\\.5 {
1152
+ min-width: calc(var(--spacing) * 4.5);
1153
+ }
1154
+ .min-w-5 {
1155
+ min-width: calc(var(--spacing) * 5);
1156
+ }
1157
+ .min-w-5\\.5 {
1158
+ min-width: calc(var(--spacing) * 5.5);
1159
+ }
1160
+ .min-w-32 {
1161
+ min-width: calc(var(--spacing) * 32);
1162
+ }
1163
+ .flex-1 {
1164
+ flex: 1;
1165
+ }
1166
+ .shrink-0 {
1167
+ flex-shrink: 0;
1168
+ }
1169
+ .transform {
1170
+ transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
1171
+ }
1172
+ .cursor-default {
1173
+ cursor: default;
1174
+ }
1175
+ .cursor-pointer {
1176
+ cursor: pointer;
1177
+ }
1178
+ .resize {
1179
+ resize: both;
1180
+ }
1181
+ .scroll-py-2 {
1182
+ scroll-padding-block: calc(var(--spacing) * 2);
1183
+ }
1184
+ .list-none {
1185
+ list-style-type: none;
1186
+ }
1187
+ .appearance-none {
1188
+ appearance: none;
1189
+ }
1190
+ .flex-col {
1191
+ flex-direction: column;
1192
+ }
1193
+ .flex-row {
1194
+ flex-direction: row;
1195
+ }
1196
+ .flex-wrap {
1197
+ flex-wrap: wrap;
1198
+ }
1199
+ .items-center {
1200
+ align-items: center;
1201
+ }
1202
+ .items-start {
1203
+ align-items: flex-start;
1204
+ }
1205
+ .justify-between {
1206
+ justify-content: space-between;
1207
+ }
1208
+ .justify-center {
1209
+ justify-content: center;
1210
+ }
1211
+ .justify-start {
1212
+ justify-content: flex-start;
1213
+ }
1214
+ .gap-0 {
1215
+ gap: calc(var(--spacing) * 0);
1216
+ }
1217
+ .gap-1 {
1218
+ gap: calc(var(--spacing) * 1);
1219
+ }
1220
+ .gap-1\\.5 {
1221
+ gap: calc(var(--spacing) * 1.5);
1222
+ }
1223
+ .gap-2 {
1224
+ gap: calc(var(--spacing) * 2);
1225
+ }
1226
+ .gap-3 {
1227
+ gap: calc(var(--spacing) * 3);
1228
+ }
1229
+ .gap-4 {
1230
+ gap: calc(var(--spacing) * 4);
1231
+ }
1232
+ .self-start {
1233
+ align-self: flex-start;
1234
+ }
1235
+ .truncate {
1236
+ overflow: hidden;
1237
+ text-overflow: ellipsis;
1238
+ white-space: nowrap;
1239
+ }
1240
+ .overflow-hidden {
1241
+ overflow: hidden;
1242
+ }
1243
+ .rounded {
1244
+ border-radius: 0.25rem;
1245
+ }
1246
+ .rounded-2xl {
1247
+ border-radius: calc(var(--radius) * 1.8);
1248
+ }
1249
+ .rounded-\\[0\\.25rem\\] {
1250
+ border-radius: 0.25rem;
1251
+ }
1252
+ .rounded-lg {
1253
+ border-radius: var(--radius);
1254
+ }
1255
+ .rounded-md {
1256
+ border-radius: calc(var(--radius) * 0.8);
1257
+ }
1258
+ .rounded-sm {
1259
+ border-radius: calc(var(--radius) * 0.6);
1260
+ }
1261
+ .rounded-t-xl {
1262
+ border-top-left-radius: calc(var(--radius) * 1.4);
1263
+ border-top-right-radius: calc(var(--radius) * 1.4);
1264
+ }
1265
+ .rounded-b-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {
1266
+ border-bottom-right-radius: calc(var(--radius-2xl) - 1px);
1267
+ border-bottom-left-radius: calc(var(--radius-2xl) - 1px);
1268
+ }
1269
+ .border {
1270
+ border-style: var(--tw-border-style);
1271
+ border-width: 1px;
1272
+ }
1273
+ .border-t {
1274
+ border-top-style: var(--tw-border-style);
1275
+ border-top-width: 1px;
1276
+ }
1277
+ .border-b-0 {
1278
+ border-bottom-style: var(--tw-border-style);
1279
+ border-bottom-width: 0px;
1280
+ }
1281
+ .border-border {
1282
+ border-color: var(--border);
1283
+ }
1284
+ .border-destructive {
1285
+ border-color: var(--destructive);
1286
+ }
1287
+ .border-input {
1288
+ border-color: var(--input);
1289
+ }
1290
+ .border-primary {
1291
+ border-color: var(--primary);
1292
+ }
1293
+ .border-transparent {
1294
+ border-color: transparent;
1295
+ }
1296
+ .bg-amber-400\\/20 {
1297
+ background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);
1298
+ @supports (color: color-mix(in lab, red, red)) {
1299
+ background-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);
1300
+ }
1301
+ }
1302
+ .bg-background {
1303
+ background-color: var(--background);
1304
+ }
1305
+ .bg-black\\/32 {
1306
+ background-color: color-mix(in srgb, #000 32%, transparent);
1307
+ @supports (color: color-mix(in lab, red, red)) {
1308
+ background-color: color-mix(in oklab, var(--color-black) 32%, transparent);
1309
+ }
1310
+ }
1311
+ .bg-blue-400\\/20 {
1312
+ background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 20%, transparent);
1313
+ @supports (color: color-mix(in lab, red, red)) {
1314
+ background-color: color-mix(in oklab, var(--color-blue-400) 20%, transparent);
1315
+ }
1316
+ }
1317
+ .bg-border {
1318
+ background-color: var(--border);
1319
+ }
1320
+ .bg-cyan-400\\/20 {
1321
+ background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 20%, transparent);
1322
+ @supports (color: color-mix(in lab, red, red)) {
1323
+ background-color: color-mix(in oklab, var(--color-cyan-400) 20%, transparent);
1324
+ }
1325
+ }
1326
+ .bg-destructive {
1327
+ background-color: var(--destructive);
1328
+ }
1329
+ .bg-destructive\\/10 {
1330
+ background-color: var(--destructive);
1331
+ @supports (color: color-mix(in lab, red, red)) {
1332
+ background-color: color-mix(in oklab, var(--destructive) 10%, transparent);
1333
+ }
1334
+ }
1335
+ .bg-emerald-400\\/20 {
1336
+ background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);
1337
+ @supports (color: color-mix(in lab, red, red)) {
1338
+ background-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);
1339
+ }
1340
+ }
1341
+ .bg-fuchsia-400\\/20 {
1342
+ background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);
1343
+ @supports (color: color-mix(in lab, red, red)) {
1344
+ background-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);
1345
+ }
1346
+ }
1347
+ .bg-info\\/10 {
1348
+ background-color: var(--info);
1349
+ @supports (color: color-mix(in lab, red, red)) {
1350
+ background-color: color-mix(in oklab, var(--info) 10%, transparent);
1351
+ }
1352
+ }
1353
+ .bg-muted {
1354
+ background-color: var(--muted);
1355
+ }
1356
+ .bg-popover {
1357
+ background-color: var(--popover);
1358
+ }
1359
+ .bg-primary {
1360
+ background-color: var(--primary);
1361
+ }
1362
+ .bg-rose-400\\/20 {
1363
+ background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);
1364
+ @supports (color: color-mix(in lab, red, red)) {
1365
+ background-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);
1366
+ }
1367
+ }
1368
+ .bg-secondary {
1369
+ background-color: var(--secondary);
1370
+ }
1371
+ .bg-slate-400\\/20 {
1372
+ background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);
1373
+ @supports (color: color-mix(in lab, red, red)) {
1374
+ background-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);
1375
+ }
1376
+ }
1377
+ .bg-success\\/10 {
1378
+ background-color: var(--success);
1379
+ @supports (color: color-mix(in lab, red, red)) {
1380
+ background-color: color-mix(in oklab, var(--success) 10%, transparent);
1381
+ }
1382
+ }
1383
+ .bg-transparent {
1384
+ background-color: transparent;
1385
+ }
1386
+ .bg-violet-400\\/20 {
1387
+ background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 20%, transparent);
1388
+ @supports (color: color-mix(in lab, red, red)) {
1389
+ background-color: color-mix(in oklab, var(--color-violet-400) 20%, transparent);
1390
+ }
1391
+ }
1392
+ .bg-warning\\/10 {
1393
+ background-color: var(--warning);
1394
+ @supports (color: color-mix(in lab, red, red)) {
1395
+ background-color: color-mix(in oklab, var(--warning) 10%, transparent);
1396
+ }
1397
+ }
1398
+ .bg-clip-padding {
1399
+ background-clip: padding-box;
1400
+ }
1401
+ .bg-\\[right_0\\.5rem_center\\] {
1402
+ background-position: right 0.5rem center;
1403
+ }
1404
+ .bg-no-repeat {
1405
+ background-repeat: no-repeat;
1406
+ }
1407
+ .p-1 {
1408
+ padding: calc(var(--spacing) * 1);
1409
+ }
1410
+ .p-2 {
1411
+ padding: calc(var(--spacing) * 2);
1412
+ }
1413
+ .p-4 {
1414
+ padding: calc(var(--spacing) * 4);
1415
+ }
1416
+ .px-0 {
1417
+ padding-inline: calc(var(--spacing) * 0);
1418
+ }
1419
+ .px-1 {
1420
+ padding-inline: calc(var(--spacing) * 1);
1421
+ }
1422
+ .px-1\\.5 {
1423
+ padding-inline: calc(var(--spacing) * 1.5);
1424
+ }
1425
+ .px-2 {
1426
+ padding-inline: calc(var(--spacing) * 2);
1427
+ }
1428
+ .px-2\\.5 {
1429
+ padding-inline: calc(var(--spacing) * 2.5);
1430
+ }
1431
+ .px-3 {
1432
+ padding-inline: calc(var(--spacing) * 3);
1433
+ }
1434
+ .px-3\\.5 {
1435
+ padding-inline: calc(var(--spacing) * 3.5);
1436
+ }
1437
+ .px-4 {
1438
+ padding-inline: calc(var(--spacing) * 4);
1439
+ }
1440
+ .px-5 {
1441
+ padding-inline: calc(var(--spacing) * 5);
1442
+ }
1443
+ .py-0 {
1444
+ padding-block: calc(var(--spacing) * 0);
1445
+ }
1446
+ .py-1 {
1447
+ padding-block: calc(var(--spacing) * 1);
1448
+ }
1449
+ .py-1\\.5 {
1450
+ padding-block: calc(var(--spacing) * 1.5);
1451
+ }
1452
+ .py-2 {
1453
+ padding-block: calc(var(--spacing) * 2);
1454
+ }
1455
+ .py-3 {
1456
+ padding-block: calc(var(--spacing) * 3);
1457
+ }
1458
+ .py-4 {
1459
+ padding-block: calc(var(--spacing) * 4);
1460
+ }
1461
+ .py-\\[max\\(1rem\\,4vh\\)\\] {
1462
+ padding-block: max(1rem, 4vh);
1463
+ }
1464
+ .ps-2 {
1465
+ padding-inline-start: calc(var(--spacing) * 2);
1466
+ }
1467
+ .pe-3 {
1468
+ padding-inline-end: calc(var(--spacing) * 3);
1469
+ }
1470
+ .pr-8 {
1471
+ padding-right: calc(var(--spacing) * 8);
1472
+ }
1473
+ .pl-3 {
1474
+ padding-left: calc(var(--spacing) * 3);
1475
+ }
1476
+ .text-center {
1477
+ text-align: center;
1478
+ }
1479
+ .text-left {
1480
+ text-align: left;
1481
+ }
1482
+ .font-mono {
1483
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
1484
+ }
1485
+ .font-sans {
1486
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
1487
+ Roboto, sans-serif;
1488
+ }
1489
+ .text-base {
1490
+ font-size: var(--text-base);
1491
+ line-height: var(--tw-leading, var(--text-base--line-height));
1492
+ }
1493
+ .text-base\\/4\\.5 {
1494
+ font-size: var(--text-base);
1495
+ line-height: calc(var(--spacing) * 4.5);
1496
+ }
1497
+ .text-sm {
1498
+ font-size: var(--text-sm);
1499
+ line-height: var(--tw-leading, var(--text-sm--line-height));
1500
+ }
1501
+ .text-xs {
1502
+ font-size: var(--text-xs);
1503
+ line-height: var(--tw-leading, var(--text-xs--line-height));
1504
+ }
1505
+ .text-\\[0\\.625rem\\] {
1506
+ font-size: 0.625rem;
1507
+ }
1508
+ .leading-relaxed {
1509
+ --tw-leading: var(--leading-relaxed);
1510
+ line-height: var(--leading-relaxed);
1511
+ }
1512
+ .font-medium {
1513
+ --tw-font-weight: var(--font-weight-medium);
1514
+ font-weight: var(--font-weight-medium);
1515
+ }
1516
+ .font-normal {
1517
+ --tw-font-weight: var(--font-weight-normal);
1518
+ font-weight: var(--font-weight-normal);
1519
+ }
1520
+ .font-semibold {
1521
+ --tw-font-weight: var(--font-weight-semibold);
1522
+ font-weight: var(--font-weight-semibold);
1523
+ }
1524
+ .tracking-widest {
1525
+ --tw-tracking: var(--tracking-widest);
1526
+ letter-spacing: var(--tracking-widest);
1527
+ }
1528
+ .break-words {
1529
+ overflow-wrap: break-word;
1530
+ }
1531
+ .whitespace-normal {
1532
+ white-space: normal;
1533
+ }
1534
+ .whitespace-nowrap {
1535
+ white-space: nowrap;
1536
+ }
1537
+ .text-amber-700 {
1538
+ color: var(--color-amber-700);
1539
+ }
1540
+ .text-blue-700 {
1541
+ color: var(--color-blue-700);
1542
+ }
1543
+ .text-cyan-700 {
1544
+ color: var(--color-cyan-700);
1545
+ }
1546
+ .text-destructive-foreground {
1547
+ color: var(--destructive-foreground);
1548
+ }
1549
+ .text-emerald-700 {
1550
+ color: var(--color-emerald-700);
1551
+ }
1552
+ .text-foreground {
1553
+ color: var(--foreground);
1554
+ }
1555
+ .text-fuchsia-700 {
1556
+ color: var(--color-fuchsia-700);
1557
+ }
1558
+ .text-info-foreground {
1559
+ color: var(--info-foreground);
1560
+ }
1561
+ .text-muted-foreground {
1562
+ color: var(--muted-foreground);
1563
+ }
1564
+ .text-muted-foreground\\/70 {
1565
+ color: var(--muted-foreground);
1566
+ @supports (color: color-mix(in lab, red, red)) {
1567
+ color: color-mix(in oklab, var(--muted-foreground) 70%, transparent);
1568
+ }
1569
+ }
1570
+ .text-popover-foreground {
1571
+ color: var(--popover-foreground);
1572
+ }
1573
+ .text-primary-foreground {
1574
+ color: var(--primary-foreground);
1575
+ }
1576
+ .text-rose-700 {
1577
+ color: var(--color-rose-700);
1578
+ }
1579
+ .text-secondary-foreground {
1580
+ color: var(--secondary-foreground);
1581
+ }
1582
+ .text-slate-700 {
1583
+ color: var(--color-slate-700);
1584
+ }
1585
+ .text-success-foreground {
1586
+ color: var(--success-foreground);
1587
+ }
1588
+ .text-violet-700 {
1589
+ color: var(--color-violet-700);
1590
+ }
1591
+ .text-warning-foreground {
1592
+ color: var(--warning-foreground);
1593
+ }
1594
+ .text-white {
1595
+ color: var(--color-white);
1596
+ }
1597
+ .lowercase {
1598
+ text-transform: lowercase;
1599
+ }
1600
+ .line-through {
1601
+ text-decoration-line: line-through;
1602
+ }
1603
+ .underline {
1604
+ text-decoration-line: underline;
1605
+ }
1606
+ .underline-offset-4 {
1607
+ text-underline-offset: 4px;
1608
+ }
1609
+ .accent-accent {
1610
+ accent-color: var(--accent);
1611
+ }
1612
+ .accent-primary {
1613
+ accent-color: var(--primary);
1614
+ }
1615
+ .opacity-80 {
1616
+ opacity: 80%;
1617
+ }
1618
+ .shadow-lg\\/5 {
1619
+ --tw-shadow-alpha: 5%;
1620
+ --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%));
1621
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1622
+ }
1623
+ .shadow-xs\\/5 {
1624
+ --tw-shadow-alpha: 5%;
1625
+ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));
1626
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1627
+ }
1628
+ .shadow {
1629
+ --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));
1630
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1631
+ }
1632
+ .shadow-lg {
1633
+ --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1634
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1635
+ }
1636
+ .shadow-none {
1637
+ --tw-shadow: 0 0 #0000;
1638
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1639
+ }
1640
+ .shadow-xs {
1641
+ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));
1642
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1643
+ }
1644
+ .ring {
1645
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
1646
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1647
+ }
1648
+ .outline {
1649
+ outline-style: var(--tw-outline-style);
1650
+ outline-width: 1px;
1651
+ }
1652
+ .blur {
1653
+ --tw-blur: blur(8px);
1654
+ 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,);
1655
+ }
1656
+ .filter {
1657
+ 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,);
1658
+ }
1659
+ .backdrop-blur-sm {
1660
+ --tw-backdrop-blur: blur(var(--blur-sm));
1661
+ -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,);
1662
+ 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,);
1663
+ }
1664
+ .transition {
1665
+ 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;
1666
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1667
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1668
+ }
1669
+ .transition-colors {
1670
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
1671
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1672
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1673
+ }
1674
+ .transition-shadow {
1675
+ transition-property: box-shadow;
1676
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1677
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1678
+ }
1679
+ .ease-out {
1680
+ --tw-ease: var(--ease-out);
1681
+ transition-timing-function: var(--ease-out);
1682
+ }
1683
+ .outline-none {
1684
+ --tw-outline-style: none;
1685
+ outline-style: none;
1686
+ }
1687
+ .select-none {
1688
+ -webkit-user-select: none;
1689
+ user-select: none;
1690
+ }
1691
+ .\\[clip-path\\:inset\\(0_1px\\)\\] {
1692
+ clip-path: inset(0 1px);
1693
+ }
1694
+ .not-dark\\:bg-clip-padding {
1695
+ &:not(*:is(.dark *)) {
1696
+ background-clip: padding-box;
1697
+ }
1698
+ }
1699
+ .group-data-hover\\:bg-amber-400\\/30 {
1700
+ &:is(:where(.group)[data-hover] *) {
1701
+ background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 30%, transparent);
1702
+ @supports (color: color-mix(in lab, red, red)) {
1703
+ background-color: color-mix(in oklab, var(--color-amber-400) 30%, transparent);
1704
+ }
1705
+ }
1706
+ }
1707
+ .group-data-hover\\:bg-blue-400\\/30 {
1708
+ &:is(:where(.group)[data-hover] *) {
1709
+ background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 30%, transparent);
1710
+ @supports (color: color-mix(in lab, red, red)) {
1711
+ background-color: color-mix(in oklab, var(--color-blue-400) 30%, transparent);
1712
+ }
1713
+ }
1714
+ }
1715
+ .group-data-hover\\:bg-cyan-400\\/30 {
1716
+ &:is(:where(.group)[data-hover] *) {
1717
+ background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 30%, transparent);
1718
+ @supports (color: color-mix(in lab, red, red)) {
1719
+ background-color: color-mix(in oklab, var(--color-cyan-400) 30%, transparent);
1720
+ }
1721
+ }
1722
+ }
1723
+ .group-data-hover\\:bg-emerald-400\\/30 {
1724
+ &:is(:where(.group)[data-hover] *) {
1725
+ background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 30%, transparent);
1726
+ @supports (color: color-mix(in lab, red, red)) {
1727
+ background-color: color-mix(in oklab, var(--color-emerald-400) 30%, transparent);
1728
+ }
1729
+ }
1730
+ }
1731
+ .group-data-hover\\:bg-fuchsia-400\\/30 {
1732
+ &:is(:where(.group)[data-hover] *) {
1733
+ background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 30%, transparent);
1734
+ @supports (color: color-mix(in lab, red, red)) {
1735
+ background-color: color-mix(in oklab, var(--color-fuchsia-400) 30%, transparent);
1736
+ }
1737
+ }
1738
+ }
1739
+ .group-data-hover\\:bg-rose-400\\/30 {
1740
+ &:is(:where(.group)[data-hover] *) {
1741
+ background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 30%, transparent);
1742
+ @supports (color: color-mix(in lab, red, red)) {
1743
+ background-color: color-mix(in oklab, var(--color-rose-400) 30%, transparent);
1744
+ }
1745
+ }
1746
+ }
1747
+ .group-data-hover\\:bg-slate-400\\/30 {
1748
+ &:is(:where(.group)[data-hover] *) {
1749
+ background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 30%, transparent);
1750
+ @supports (color: color-mix(in lab, red, red)) {
1751
+ background-color: color-mix(in oklab, var(--color-slate-400) 30%, transparent);
1752
+ }
1753
+ }
1754
+ }
1755
+ .group-data-hover\\:bg-violet-400\\/30 {
1756
+ &:is(:where(.group)[data-hover] *) {
1757
+ background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 30%, transparent);
1758
+ @supports (color: color-mix(in lab, red, red)) {
1759
+ background-color: color-mix(in oklab, var(--color-violet-400) 30%, transparent);
1760
+ }
1761
+ }
1762
+ }
1763
+ .placeholder\\:text-muted-foreground {
1764
+ &::placeholder {
1765
+ color: var(--muted-foreground);
1766
+ }
1767
+ }
1768
+ .before\\:pointer-events-none {
1769
+ &::before {
1770
+ content: var(--tw-content);
1771
+ pointer-events: none;
1772
+ }
1773
+ }
1774
+ .before\\:absolute {
1775
+ &::before {
1776
+ content: var(--tw-content);
1777
+ position: absolute;
1778
+ }
1779
+ }
1780
+ .before\\:inset-0 {
1781
+ &::before {
1782
+ content: var(--tw-content);
1783
+ inset: calc(var(--spacing) * 0);
1784
+ }
1785
+ }
1786
+ .before\\:rounded-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {
1787
+ &::before {
1788
+ content: var(--tw-content);
1789
+ border-radius: calc(var(--radius-2xl) - 1px);
1790
+ }
1791
+ }
1792
+ .before\\:rounded-t-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {
1793
+ &::before {
1794
+ content: var(--tw-content);
1795
+ border-top-left-radius: calc(var(--radius-xl) - 1px);
1796
+ border-top-right-radius: calc(var(--radius-xl) - 1px);
1797
+ }
1798
+ }
1799
+ .before\\:bg-muted\\/72 {
1800
+ &::before {
1801
+ content: var(--tw-content);
1802
+ background-color: var(--muted);
1803
+ @supports (color: color-mix(in lab, red, red)) {
1804
+ background-color: color-mix(in oklab, var(--muted) 72%, transparent);
1805
+ }
1806
+ }
1807
+ }
1808
+ .before\\:shadow-\\[0_1px_--theme\\(--color-black\\/4\\%\\)\\] {
1809
+ &::before {
1810
+ content: var(--tw-content);
1811
+ --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in srgb, #000 4%, transparent));
1812
+ @supports (color: color-mix(in lab, red, red)) {
1813
+ --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in oklab, var(--color-black) 4%, transparent));
1814
+ }
1815
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1816
+ }
1817
+ }
1818
+ .focus-within\\:border-ring {
1819
+ &:focus-within {
1820
+ border-color: var(--ring);
1821
+ }
1822
+ }
1823
+ .focus-within\\:bg-accent {
1824
+ &:focus-within {
1825
+ background-color: var(--accent);
1826
+ }
1827
+ }
1828
+ .focus-within\\:text-accent-foreground {
1829
+ &:focus-within {
1830
+ color: var(--accent-foreground);
1831
+ }
1832
+ }
1833
+ .focus-within\\:ring-\\[3px\\] {
1834
+ &:focus-within {
1835
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
1836
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1837
+ }
1838
+ }
1839
+ .focus-within\\:ring-ring\\/30 {
1840
+ &:focus-within {
1841
+ --tw-ring-color: var(--ring);
1842
+ @supports (color: color-mix(in lab, red, red)) {
1843
+ --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);
1844
+ }
1845
+ }
1846
+ }
1847
+ .hover\\:border-destructive\\/30 {
1848
+ &:hover {
1849
+ @media (hover: hover) {
1850
+ border-color: var(--destructive);
1851
+ @supports (color: color-mix(in lab, red, red)) {
1852
+ border-color: color-mix(in oklab, var(--destructive) 30%, transparent);
1853
+ }
1854
+ }
1855
+ }
1856
+ }
1857
+ .hover\\:bg-accent {
1858
+ &:hover {
1859
+ @media (hover: hover) {
1860
+ background-color: var(--accent);
1861
+ }
1862
+ }
1863
+ }
1864
+ .hover\\:bg-destructive\\/5 {
1865
+ &:hover {
1866
+ @media (hover: hover) {
1867
+ background-color: var(--destructive);
1868
+ @supports (color: color-mix(in lab, red, red)) {
1869
+ background-color: color-mix(in oklab, var(--destructive) 5%, transparent);
1870
+ }
1871
+ }
1872
+ }
1873
+ }
1874
+ .hover\\:bg-destructive\\/90 {
1875
+ &:hover {
1876
+ @media (hover: hover) {
1877
+ background-color: var(--destructive);
1878
+ @supports (color: color-mix(in lab, red, red)) {
1879
+ background-color: color-mix(in oklab, var(--destructive) 90%, transparent);
1880
+ }
1881
+ }
1882
+ }
1883
+ }
1884
+ .hover\\:bg-primary\\/90 {
1885
+ &:hover {
1886
+ @media (hover: hover) {
1887
+ background-color: var(--primary);
1888
+ @supports (color: color-mix(in lab, red, red)) {
1889
+ background-color: color-mix(in oklab, var(--primary) 90%, transparent);
1890
+ }
1891
+ }
1892
+ }
1893
+ }
1894
+ .hover\\:bg-secondary\\/90 {
1895
+ &:hover {
1896
+ @media (hover: hover) {
1897
+ background-color: var(--secondary);
1898
+ @supports (color: color-mix(in lab, red, red)) {
1899
+ background-color: color-mix(in oklab, var(--secondary) 90%, transparent);
1900
+ }
1901
+ }
1902
+ }
1903
+ }
1904
+ .hover\\:text-accent-foreground {
1905
+ &:hover {
1906
+ @media (hover: hover) {
1907
+ color: var(--accent-foreground);
1908
+ }
1909
+ }
1910
+ }
1911
+ .hover\\:underline {
1912
+ &:hover {
1913
+ @media (hover: hover) {
1914
+ text-decoration-line: underline;
1915
+ }
1916
+ }
1917
+ }
1918
+ .focus\\:bg-accent {
1919
+ &:focus {
1920
+ background-color: var(--accent);
1921
+ }
1922
+ }
1923
+ .focus\\:text-accent-foreground {
1924
+ &:focus {
1925
+ color: var(--accent-foreground);
1926
+ }
1927
+ }
1928
+ .focus\\:outline-none {
1929
+ &:focus {
1930
+ --tw-outline-style: none;
1931
+ outline-style: none;
1932
+ }
1933
+ }
1934
+ .focus-visible\\:border-ring {
1935
+ &:focus-visible {
1936
+ border-color: var(--ring);
1937
+ }
1938
+ }
1939
+ .focus-visible\\:ring-2 {
1940
+ &:focus-visible {
1941
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
1942
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1943
+ }
1944
+ }
1945
+ .focus-visible\\:ring-\\[3px\\] {
1946
+ &:focus-visible {
1947
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
1948
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1949
+ }
1950
+ }
1951
+ .focus-visible\\:ring-ring {
1952
+ &:focus-visible {
1953
+ --tw-ring-color: var(--ring);
1954
+ }
1955
+ }
1956
+ .focus-visible\\:ring-ring\\/30 {
1957
+ &:focus-visible {
1958
+ --tw-ring-color: var(--ring);
1959
+ @supports (color: color-mix(in lab, red, red)) {
1960
+ --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);
1961
+ }
1962
+ }
1963
+ }
1964
+ .focus-visible\\:ring-offset-1 {
1965
+ &:focus-visible {
1966
+ --tw-ring-offset-width: 1px;
1967
+ --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1968
+ }
1969
+ }
1970
+ .focus-visible\\:ring-offset-background {
1971
+ &:focus-visible {
1972
+ --tw-ring-offset-color: var(--background);
1973
+ }
1974
+ }
1975
+ .disabled\\:pointer-events-none {
1976
+ &:disabled {
1977
+ pointer-events: none;
1978
+ }
1979
+ }
1980
+ .disabled\\:cursor-not-allowed {
1981
+ &:disabled {
1982
+ cursor: not-allowed;
1983
+ }
1984
+ }
1985
+ .disabled\\:opacity-60 {
1986
+ &:disabled {
1987
+ opacity: 60%;
1988
+ }
1989
+ }
1990
+ .has-disabled\\:opacity-60 {
1991
+ &:has(*:disabled) {
1992
+ opacity: 60%;
1993
+ }
1994
+ }
1995
+ .aria-invalid\\:border-destructive\\/40 {
1996
+ &[aria-invalid="true"] {
1997
+ border-color: var(--destructive);
1998
+ @supports (color: color-mix(in lab, red, red)) {
1999
+ border-color: color-mix(in oklab, var(--destructive) 40%, transparent);
2000
+ }
2001
+ }
2002
+ }
2003
+ .aria-invalid\\:focus-visible\\:ring-destructive\\/20 {
2004
+ &[aria-invalid="true"] {
2005
+ &:focus-visible {
2006
+ --tw-ring-color: var(--destructive);
2007
+ @supports (color: color-mix(in lab, red, red)) {
2008
+ --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);
2009
+ }
2010
+ }
2011
+ }
2012
+ }
2013
+ .data-\\[disabled\\]\\:pointer-events-none {
2014
+ &[data-disabled] {
2015
+ pointer-events: none;
2016
+ }
2017
+ }
2018
+ .data-\\[disabled\\]\\:opacity-60 {
2019
+ &[data-disabled] {
2020
+ opacity: 60%;
2021
+ }
2022
+ }
2023
+ .data-\\[disabled\\]\\:opacity-64 {
2024
+ &[data-disabled] {
2025
+ opacity: 64%;
2026
+ }
2027
+ }
2028
+ .data-\\[highlighted\\]\\:bg-accent {
2029
+ &[data-highlighted] {
2030
+ background-color: var(--accent);
2031
+ }
2032
+ }
2033
+ .data-\\[highlighted\\]\\:text-accent-foreground {
2034
+ &[data-highlighted] {
2035
+ color: var(--accent-foreground);
2036
+ }
2037
+ }
2038
+ .sm\\:min-h-7 {
2039
+ @media (width >= 40rem) {
2040
+ min-height: calc(var(--spacing) * 7);
2041
+ }
2042
+ }
2043
+ .sm\\:py-\\[10vh\\] {
2044
+ @media (width >= 40rem) {
2045
+ padding-block: 10vh;
2046
+ }
2047
+ }
2048
+ .sm\\:text-sm {
2049
+ @media (width >= 40rem) {
2050
+ font-size: var(--text-sm);
2051
+ line-height: var(--tw-leading, var(--text-sm--line-height));
2052
+ }
2053
+ }
2054
+ .sm\\:text-sm\\/4 {
2055
+ @media (width >= 40rem) {
2056
+ font-size: var(--text-sm);
2057
+ line-height: calc(var(--spacing) * 4);
2058
+ }
2059
+ }
2060
+ .dark\\:bg-amber-400\\/10 {
2061
+ &:is(.dark *) {
2062
+ background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);
2063
+ @supports (color: color-mix(in lab, red, red)) {
2064
+ background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);
2065
+ }
2066
+ }
2067
+ }
2068
+ .dark\\:bg-blue-400\\/10 {
2069
+ &:is(.dark *) {
2070
+ background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 10%, transparent);
2071
+ @supports (color: color-mix(in lab, red, red)) {
2072
+ background-color: color-mix(in oklab, var(--color-blue-400) 10%, transparent);
2073
+ }
2074
+ }
2075
+ }
2076
+ .dark\\:bg-cyan-400\\/10 {
2077
+ &:is(.dark *) {
2078
+ background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);
2079
+ @supports (color: color-mix(in lab, red, red)) {
2080
+ background-color: color-mix(in oklab, var(--color-cyan-400) 10%, transparent);
2081
+ }
2082
+ }
2083
+ }
2084
+ .dark\\:bg-destructive\\/20 {
2085
+ &:is(.dark *) {
2086
+ background-color: var(--destructive);
2087
+ @supports (color: color-mix(in lab, red, red)) {
2088
+ background-color: color-mix(in oklab, var(--destructive) 20%, transparent);
2089
+ }
2090
+ }
2091
+ }
2092
+ .dark\\:bg-emerald-400\\/10 {
2093
+ &:is(.dark *) {
2094
+ background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);
2095
+ @supports (color: color-mix(in lab, red, red)) {
2096
+ background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);
2097
+ }
2098
+ }
2099
+ }
2100
+ .dark\\:bg-fuchsia-400\\/10 {
2101
+ &:is(.dark *) {
2102
+ background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 10%, transparent);
2103
+ @supports (color: color-mix(in lab, red, red)) {
2104
+ background-color: color-mix(in oklab, var(--color-fuchsia-400) 10%, transparent);
2105
+ }
2106
+ }
2107
+ }
2108
+ .dark\\:bg-info\\/20 {
2109
+ &:is(.dark *) {
2110
+ background-color: var(--info);
2111
+ @supports (color: color-mix(in lab, red, red)) {
2112
+ background-color: color-mix(in oklab, var(--info) 20%, transparent);
2113
+ }
2114
+ }
2115
+ }
2116
+ .dark\\:bg-input\\/30 {
2117
+ &:is(.dark *) {
2118
+ background-color: var(--input);
2119
+ @supports (color: color-mix(in lab, red, red)) {
2120
+ background-color: color-mix(in oklab, var(--input) 30%, transparent);
2121
+ }
2122
+ }
2123
+ }
2124
+ .dark\\:bg-rose-400\\/10 {
2125
+ &:is(.dark *) {
2126
+ background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);
2127
+ @supports (color: color-mix(in lab, red, red)) {
2128
+ background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);
2129
+ }
2130
+ }
2131
+ }
2132
+ .dark\\:bg-slate-400\\/10 {
2133
+ &:is(.dark *) {
2134
+ background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);
2135
+ @supports (color: color-mix(in lab, red, red)) {
2136
+ background-color: color-mix(in oklab, var(--color-slate-400) 10%, transparent);
2137
+ }
2138
+ }
2139
+ }
2140
+ .dark\\:bg-success\\/20 {
2141
+ &:is(.dark *) {
2142
+ background-color: var(--success);
2143
+ @supports (color: color-mix(in lab, red, red)) {
2144
+ background-color: color-mix(in oklab, var(--success) 20%, transparent);
2145
+ }
2146
+ }
2147
+ }
2148
+ .dark\\:bg-violet-400\\/10 {
2149
+ &:is(.dark *) {
2150
+ background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 10%, transparent);
2151
+ @supports (color: color-mix(in lab, red, red)) {
2152
+ background-color: color-mix(in oklab, var(--color-violet-400) 10%, transparent);
2153
+ }
2154
+ }
2155
+ }
2156
+ .dark\\:bg-warning\\/20 {
2157
+ &:is(.dark *) {
2158
+ background-color: var(--warning);
2159
+ @supports (color: color-mix(in lab, red, red)) {
2160
+ background-color: color-mix(in oklab, var(--warning) 20%, transparent);
2161
+ }
2162
+ }
2163
+ }
2164
+ .dark\\:text-amber-300 {
2165
+ &:is(.dark *) {
2166
+ color: var(--color-amber-300);
2167
+ }
2168
+ }
2169
+ .dark\\:text-blue-300 {
2170
+ &:is(.dark *) {
2171
+ color: var(--color-blue-300);
2172
+ }
2173
+ }
2174
+ .dark\\:text-cyan-300 {
2175
+ &:is(.dark *) {
2176
+ color: var(--color-cyan-300);
2177
+ }
2178
+ }
2179
+ .dark\\:text-emerald-300 {
2180
+ &:is(.dark *) {
2181
+ color: var(--color-emerald-300);
2182
+ }
2183
+ }
2184
+ .dark\\:text-fuchsia-300 {
2185
+ &:is(.dark *) {
2186
+ color: var(--color-fuchsia-300);
2187
+ }
2188
+ }
2189
+ .dark\\:text-rose-300 {
2190
+ &:is(.dark *) {
2191
+ color: var(--color-rose-300);
2192
+ }
2193
+ }
2194
+ .dark\\:text-slate-300 {
2195
+ &:is(.dark *) {
2196
+ color: var(--color-slate-300);
2197
+ }
2198
+ }
2199
+ .dark\\:text-violet-300 {
2200
+ &:is(.dark *) {
2201
+ color: var(--color-violet-300);
2202
+ }
2203
+ }
2204
+ .dark\\:group-data-hover\\:bg-amber-400\\/15 {
2205
+ &:is(.dark *) {
2206
+ &:is(:where(.group)[data-hover] *) {
2207
+ background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 15%, transparent);
2208
+ @supports (color: color-mix(in lab, red, red)) {
2209
+ background-color: color-mix(in oklab, var(--color-amber-400) 15%, transparent);
2210
+ }
2211
+ }
2212
+ }
2213
+ }
2214
+ .dark\\:group-data-hover\\:bg-blue-400\\/15 {
2215
+ &:is(.dark *) {
2216
+ &:is(:where(.group)[data-hover] *) {
2217
+ background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 15%, transparent);
2218
+ @supports (color: color-mix(in lab, red, red)) {
2219
+ background-color: color-mix(in oklab, var(--color-blue-400) 15%, transparent);
2220
+ }
2221
+ }
2222
+ }
2223
+ }
2224
+ .dark\\:group-data-hover\\:bg-cyan-400\\/15 {
2225
+ &:is(.dark *) {
2226
+ &:is(:where(.group)[data-hover] *) {
2227
+ background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 15%, transparent);
2228
+ @supports (color: color-mix(in lab, red, red)) {
2229
+ background-color: color-mix(in oklab, var(--color-cyan-400) 15%, transparent);
2230
+ }
2231
+ }
2232
+ }
2233
+ }
2234
+ .dark\\:group-data-hover\\:bg-emerald-400\\/15 {
2235
+ &:is(.dark *) {
2236
+ &:is(:where(.group)[data-hover] *) {
2237
+ background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 15%, transparent);
2238
+ @supports (color: color-mix(in lab, red, red)) {
2239
+ background-color: color-mix(in oklab, var(--color-emerald-400) 15%, transparent);
2240
+ }
2241
+ }
2242
+ }
2243
+ }
2244
+ .dark\\:group-data-hover\\:bg-fuchsia-400\\/15 {
2245
+ &:is(.dark *) {
2246
+ &:is(:where(.group)[data-hover] *) {
2247
+ background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 15%, transparent);
2248
+ @supports (color: color-mix(in lab, red, red)) {
2249
+ background-color: color-mix(in oklab, var(--color-fuchsia-400) 15%, transparent);
2250
+ }
2251
+ }
2252
+ }
2253
+ }
2254
+ .dark\\:group-data-hover\\:bg-rose-400\\/15 {
2255
+ &:is(.dark *) {
2256
+ &:is(:where(.group)[data-hover] *) {
2257
+ background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 15%, transparent);
2258
+ @supports (color: color-mix(in lab, red, red)) {
2259
+ background-color: color-mix(in oklab, var(--color-rose-400) 15%, transparent);
2260
+ }
2261
+ }
2262
+ }
2263
+ }
2264
+ .dark\\:group-data-hover\\:bg-slate-400\\/15 {
2265
+ &:is(.dark *) {
2266
+ &:is(:where(.group)[data-hover] *) {
2267
+ background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 15%, transparent);
2268
+ @supports (color: color-mix(in lab, red, red)) {
2269
+ background-color: color-mix(in oklab, var(--color-slate-400) 15%, transparent);
2270
+ }
2271
+ }
2272
+ }
2273
+ }
2274
+ .dark\\:group-data-hover\\:bg-violet-400\\/15 {
2275
+ &:is(.dark *) {
2276
+ &:is(:where(.group)[data-hover] *) {
2277
+ background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 15%, transparent);
2278
+ @supports (color: color-mix(in lab, red, red)) {
2279
+ background-color: color-mix(in oklab, var(--color-violet-400) 15%, transparent);
2280
+ }
2281
+ }
2282
+ }
2283
+ }
2284
+ .dark\\:before\\:shadow-\\[0_-1px_--theme\\(--color-white\\/6\\%\\)\\] {
2285
+ &:is(.dark *) {
2286
+ &::before {
2287
+ content: var(--tw-content);
2288
+ --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 6%, transparent));
2289
+ @supports (color: color-mix(in lab, red, red)) {
2290
+ --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in oklab, var(--color-white) 6%, transparent));
2291
+ }
2292
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2293
+ }
2294
+ }
2295
+ }
2296
+ .\\[\\&_svg\\]\\:pointer-events-none {
2297
+ & svg {
2298
+ pointer-events: none;
2299
+ }
2300
+ }
2301
+ .\\[\\&_svg\\]\\:shrink-0 {
2302
+ & svg {
2303
+ flex-shrink: 0;
2304
+ }
2305
+ }
2306
+ .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {
2307
+ & svg:not([class*='opacity-']) {
2308
+ opacity: 80%;
2309
+ }
2310
+ }
2311
+ .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {
2312
+ & svg:not([class*='size-']) {
2313
+ width: calc(var(--spacing) * 3);
2314
+ height: calc(var(--spacing) * 3);
2315
+ }
2316
+ }
2317
+ .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {
2318
+ & svg:not([class*='size-']) {
2319
+ width: calc(var(--spacing) * 4);
2320
+ height: calc(var(--spacing) * 4);
2321
+ }
2322
+ }
2323
+ }
2324
+ @layer base {
2325
+ *, ::after, ::before {
2326
+ border-color: var(--color-border, currentColor);
2327
+ }
2328
+ }
2329
+ @layer components {
2330
+ .uidex-scrollbar {
2331
+ scrollbar-width: thin;
2332
+ scrollbar-color: var(--muted-foreground) transparent;
2333
+ @supports (color: color-mix(in lab, red, red)) {
2334
+ scrollbar-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent) transparent;
2335
+ }
2336
+ }
2337
+ .uidex-scrollbar::-webkit-scrollbar {
2338
+ width: 8px;
2339
+ height: 8px;
2340
+ }
2341
+ .uidex-scrollbar::-webkit-scrollbar-track {
2342
+ background: transparent;
2343
+ }
2344
+ .uidex-scrollbar::-webkit-scrollbar-thumb {
2345
+ background-color: var(--muted-foreground);
2346
+ @supports (color: color-mix(in lab, red, red)) {
2347
+ background-color: color-mix( in srgb, var(--muted-foreground) 35%, transparent );
2348
+ }
2349
+ border-radius: 9999px;
2350
+ border: 2px solid transparent;
2351
+ background-clip: content-box;
2352
+ }
2353
+ .uidex-scrollbar::-webkit-scrollbar-thumb:hover {
2354
+ background-color: var(--muted-foreground);
2355
+ @supports (color: color-mix(in lab, red, red)) {
2356
+ background-color: color-mix( in srgb, var(--muted-foreground) 60%, transparent );
2357
+ }
2358
+ }
2359
+ .uidex-scrollbar::-webkit-scrollbar-corner {
2360
+ background: transparent;
2361
+ }
2362
+ }
2363
+ :where(:host, :root) {
2364
+ --background: color-mix(
2365
+ in srgb,
2366
+ oklch(14.5% 0 0) 95%,
2367
+ #fff
2368
+ );
2369
+ @supports (color: color-mix(in lab, red, red)) {
2370
+ --background: color-mix(
2371
+ in srgb,
2372
+ var(--color-neutral-950) 95%,
2373
+ var(--color-white)
2374
+ );
2375
+ }
2376
+ --foreground: var(--color-neutral-100);
2377
+ --card: var(--background);
2378
+ @supports (color: color-mix(in lab, red, red)) {
2379
+ --card: color-mix(in srgb, var(--background) 98%, var(--color-white));
2380
+ }
2381
+ --card-foreground: var(--color-neutral-100);
2382
+ --popover: var(--background);
2383
+ @supports (color: color-mix(in lab, red, red)) {
2384
+ --popover: color-mix(in srgb, var(--background) 98%, var(--color-white));
2385
+ }
2386
+ --popover-foreground: var(--color-neutral-100);
2387
+ --primary: var(--color-neutral-100);
2388
+ --primary-foreground: var(--color-neutral-800);
2389
+ --secondary: color-mix(in srgb, #fff 4%, transparent);
2390
+ @supports (color: color-mix(in lab, red, red)) {
2391
+ --secondary: color-mix(in srgb, var(--color-white) 4%, transparent);
2392
+ }
2393
+ --secondary-foreground: var(--color-neutral-100);
2394
+ --muted: color-mix(in srgb, #fff 4%, transparent);
2395
+ @supports (color: color-mix(in lab, red, red)) {
2396
+ --muted: color-mix(in srgb, var(--color-white) 4%, transparent);
2397
+ }
2398
+ --muted-foreground: color-mix(
2399
+ in srgb,
2400
+ oklch(55.6% 0 0) 90%,
2401
+ #fff
2402
+ );
2403
+ @supports (color: color-mix(in lab, red, red)) {
2404
+ --muted-foreground: color-mix(
2405
+ in srgb,
2406
+ var(--color-neutral-500) 90%,
2407
+ var(--color-white)
2408
+ );
2409
+ }
2410
+ --accent: color-mix(in srgb, #fff 4%, transparent);
2411
+ @supports (color: color-mix(in lab, red, red)) {
2412
+ --accent: color-mix(in srgb, var(--color-white) 4%, transparent);
2413
+ }
2414
+ --accent-foreground: var(--color-neutral-100);
2415
+ --destructive: color-mix(
2416
+ in srgb,
2417
+ oklch(63.7% 0.237 25.331) 90%,
2418
+ #fff
2419
+ );
2420
+ @supports (color: color-mix(in lab, red, red)) {
2421
+ --destructive: color-mix(
2422
+ in srgb,
2423
+ var(--color-red-500) 90%,
2424
+ var(--color-white)
2425
+ );
2426
+ }
2427
+ --destructive-foreground: var(--color-red-400);
2428
+ --border: color-mix(in srgb, #fff 6%, transparent);
2429
+ @supports (color: color-mix(in lab, red, red)) {
2430
+ --border: color-mix(in srgb, var(--color-white) 6%, transparent);
2431
+ }
2432
+ --input: color-mix(in srgb, #fff 8%, transparent);
2433
+ @supports (color: color-mix(in lab, red, red)) {
2434
+ --input: color-mix(in srgb, var(--color-white) 8%, transparent);
2435
+ }
2436
+ --ring: var(--color-neutral-500);
2437
+ --info: var(--color-blue-500);
2438
+ --info-foreground: var(--color-blue-400);
2439
+ --success: var(--color-emerald-500);
2440
+ --success-foreground: var(--color-emerald-400);
2441
+ --warning: var(--color-amber-500);
2442
+ --warning-foreground: var(--color-amber-400);
2443
+ --radius: 0.625rem;
2444
+ }
2445
+ :host(.light) {
2446
+ --background: var(--color-white);
2447
+ --foreground: var(--color-neutral-800);
2448
+ --card: var(--color-white);
2449
+ --card-foreground: var(--color-neutral-800);
2450
+ --popover: var(--color-white);
2451
+ --popover-foreground: var(--color-neutral-800);
2452
+ --primary: var(--color-neutral-800);
2453
+ --primary-foreground: var(--color-neutral-50);
2454
+ --secondary: color-mix(in srgb, #000 4%, transparent);
2455
+ @supports (color: color-mix(in lab, red, red)) {
2456
+ --secondary: color-mix(in srgb, var(--color-black) 4%, transparent);
2457
+ }
2458
+ --secondary-foreground: var(--color-neutral-800);
2459
+ --muted: color-mix(in srgb, #000 4%, transparent);
2460
+ @supports (color: color-mix(in lab, red, red)) {
2461
+ --muted: color-mix(in srgb, var(--color-black) 4%, transparent);
2462
+ }
2463
+ --muted-foreground: color-mix(
2464
+ in srgb,
2465
+ oklch(55.6% 0 0) 90%,
2466
+ #000
2467
+ );
2468
+ @supports (color: color-mix(in lab, red, red)) {
2469
+ --muted-foreground: color-mix(
2470
+ in srgb,
2471
+ var(--color-neutral-500) 90%,
2472
+ var(--color-black)
2473
+ );
2474
+ }
2475
+ --accent: color-mix(in srgb, #000 4%, transparent);
2476
+ @supports (color: color-mix(in lab, red, red)) {
2477
+ --accent: color-mix(in srgb, var(--color-black) 4%, transparent);
2478
+ }
2479
+ --accent-foreground: var(--color-neutral-800);
2480
+ --destructive: var(--color-red-500);
2481
+ --destructive-foreground: var(--color-red-700);
2482
+ --border: color-mix(in srgb, #000 8%, transparent);
2483
+ @supports (color: color-mix(in lab, red, red)) {
2484
+ --border: color-mix(in srgb, var(--color-black) 8%, transparent);
2485
+ }
2486
+ --input: color-mix(in srgb, #000 10%, transparent);
2487
+ @supports (color: color-mix(in lab, red, red)) {
2488
+ --input: color-mix(in srgb, var(--color-black) 10%, transparent);
2489
+ }
2490
+ --ring: var(--color-neutral-400);
2491
+ --info: var(--color-blue-500);
2492
+ --info-foreground: var(--color-blue-700);
2493
+ --success: var(--color-emerald-500);
2494
+ --success-foreground: var(--color-emerald-700);
2495
+ --warning: var(--color-amber-500);
2496
+ --warning-foreground: var(--color-amber-700);
2497
+ }
2498
+ @property --tw-rotate-x {
2499
+ syntax: "*";
2500
+ inherits: false;
2501
+ }
2502
+ @property --tw-rotate-y {
2503
+ syntax: "*";
2504
+ inherits: false;
2505
+ }
2506
+ @property --tw-rotate-z {
2507
+ syntax: "*";
2508
+ inherits: false;
2509
+ }
2510
+ @property --tw-skew-x {
2511
+ syntax: "*";
2512
+ inherits: false;
2513
+ }
2514
+ @property --tw-skew-y {
2515
+ syntax: "*";
2516
+ inherits: false;
2517
+ }
2518
+ @property --tw-border-style {
2519
+ syntax: "*";
2520
+ inherits: false;
2521
+ initial-value: solid;
2522
+ }
2523
+ @property --tw-leading {
2524
+ syntax: "*";
2525
+ inherits: false;
2526
+ }
2527
+ @property --tw-font-weight {
2528
+ syntax: "*";
2529
+ inherits: false;
2530
+ }
2531
+ @property --tw-tracking {
2532
+ syntax: "*";
2533
+ inherits: false;
2534
+ }
2535
+ @property --tw-shadow {
2536
+ syntax: "*";
2537
+ inherits: false;
2538
+ initial-value: 0 0 #0000;
2539
+ }
2540
+ @property --tw-shadow-color {
2541
+ syntax: "*";
2542
+ inherits: false;
2543
+ }
2544
+ @property --tw-shadow-alpha {
2545
+ syntax: "<percentage>";
2546
+ inherits: false;
2547
+ initial-value: 100%;
2548
+ }
2549
+ @property --tw-inset-shadow {
2550
+ syntax: "*";
2551
+ inherits: false;
2552
+ initial-value: 0 0 #0000;
2553
+ }
2554
+ @property --tw-inset-shadow-color {
2555
+ syntax: "*";
2556
+ inherits: false;
2557
+ }
2558
+ @property --tw-inset-shadow-alpha {
2559
+ syntax: "<percentage>";
2560
+ inherits: false;
2561
+ initial-value: 100%;
2562
+ }
2563
+ @property --tw-ring-color {
2564
+ syntax: "*";
2565
+ inherits: false;
2566
+ }
2567
+ @property --tw-ring-shadow {
2568
+ syntax: "*";
2569
+ inherits: false;
2570
+ initial-value: 0 0 #0000;
2571
+ }
2572
+ @property --tw-inset-ring-color {
2573
+ syntax: "*";
2574
+ inherits: false;
2575
+ }
2576
+ @property --tw-inset-ring-shadow {
2577
+ syntax: "*";
2578
+ inherits: false;
2579
+ initial-value: 0 0 #0000;
2580
+ }
2581
+ @property --tw-ring-inset {
2582
+ syntax: "*";
2583
+ inherits: false;
2584
+ }
2585
+ @property --tw-ring-offset-width {
2586
+ syntax: "<length>";
2587
+ inherits: false;
2588
+ initial-value: 0px;
2589
+ }
2590
+ @property --tw-ring-offset-color {
2591
+ syntax: "*";
2592
+ inherits: false;
2593
+ initial-value: #fff;
2594
+ }
2595
+ @property --tw-ring-offset-shadow {
2596
+ syntax: "*";
2597
+ inherits: false;
2598
+ initial-value: 0 0 #0000;
2599
+ }
2600
+ @property --tw-outline-style {
2601
+ syntax: "*";
2602
+ inherits: false;
2603
+ initial-value: solid;
2604
+ }
2605
+ @property --tw-blur {
2606
+ syntax: "*";
2607
+ inherits: false;
2608
+ }
2609
+ @property --tw-brightness {
2610
+ syntax: "*";
2611
+ inherits: false;
2612
+ }
2613
+ @property --tw-contrast {
2614
+ syntax: "*";
2615
+ inherits: false;
2616
+ }
2617
+ @property --tw-grayscale {
2618
+ syntax: "*";
2619
+ inherits: false;
2620
+ }
2621
+ @property --tw-hue-rotate {
2622
+ syntax: "*";
2623
+ inherits: false;
2624
+ }
2625
+ @property --tw-invert {
2626
+ syntax: "*";
2627
+ inherits: false;
2628
+ }
2629
+ @property --tw-opacity {
2630
+ syntax: "*";
2631
+ inherits: false;
2632
+ }
2633
+ @property --tw-saturate {
2634
+ syntax: "*";
2635
+ inherits: false;
2636
+ }
2637
+ @property --tw-sepia {
2638
+ syntax: "*";
2639
+ inherits: false;
2640
+ }
2641
+ @property --tw-drop-shadow {
2642
+ syntax: "*";
2643
+ inherits: false;
2644
+ }
2645
+ @property --tw-drop-shadow-color {
2646
+ syntax: "*";
2647
+ inherits: false;
2648
+ }
2649
+ @property --tw-drop-shadow-alpha {
2650
+ syntax: "<percentage>";
2651
+ inherits: false;
2652
+ initial-value: 100%;
2653
+ }
2654
+ @property --tw-drop-shadow-size {
2655
+ syntax: "*";
2656
+ inherits: false;
2657
+ }
2658
+ @property --tw-backdrop-blur {
2659
+ syntax: "*";
2660
+ inherits: false;
2661
+ }
2662
+ @property --tw-backdrop-brightness {
2663
+ syntax: "*";
2664
+ inherits: false;
2665
+ }
2666
+ @property --tw-backdrop-contrast {
2667
+ syntax: "*";
2668
+ inherits: false;
2669
+ }
2670
+ @property --tw-backdrop-grayscale {
2671
+ syntax: "*";
2672
+ inherits: false;
2673
+ }
2674
+ @property --tw-backdrop-hue-rotate {
2675
+ syntax: "*";
2676
+ inherits: false;
2677
+ }
2678
+ @property --tw-backdrop-invert {
2679
+ syntax: "*";
2680
+ inherits: false;
2681
+ }
2682
+ @property --tw-backdrop-opacity {
2683
+ syntax: "*";
2684
+ inherits: false;
2685
+ }
2686
+ @property --tw-backdrop-saturate {
2687
+ syntax: "*";
2688
+ inherits: false;
2689
+ }
2690
+ @property --tw-backdrop-sepia {
2691
+ syntax: "*";
2692
+ inherits: false;
2693
+ }
2694
+ @property --tw-ease {
2695
+ syntax: "*";
2696
+ inherits: false;
2697
+ }
2698
+ @property --tw-content {
2699
+ syntax: "*";
2700
+ initial-value: "";
2701
+ inherits: false;
2702
+ }
2703
+ @layer properties {
2704
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
2705
+ *, ::before, ::after, ::backdrop {
2706
+ --tw-rotate-x: initial;
2707
+ --tw-rotate-y: initial;
2708
+ --tw-rotate-z: initial;
2709
+ --tw-skew-x: initial;
2710
+ --tw-skew-y: initial;
2711
+ --tw-border-style: solid;
2712
+ --tw-leading: initial;
2713
+ --tw-font-weight: initial;
2714
+ --tw-tracking: initial;
2715
+ --tw-shadow: 0 0 #0000;
2716
+ --tw-shadow-color: initial;
2717
+ --tw-shadow-alpha: 100%;
2718
+ --tw-inset-shadow: 0 0 #0000;
2719
+ --tw-inset-shadow-color: initial;
2720
+ --tw-inset-shadow-alpha: 100%;
2721
+ --tw-ring-color: initial;
2722
+ --tw-ring-shadow: 0 0 #0000;
2723
+ --tw-inset-ring-color: initial;
2724
+ --tw-inset-ring-shadow: 0 0 #0000;
2725
+ --tw-ring-inset: initial;
2726
+ --tw-ring-offset-width: 0px;
2727
+ --tw-ring-offset-color: #fff;
2728
+ --tw-ring-offset-shadow: 0 0 #0000;
2729
+ --tw-outline-style: solid;
2730
+ --tw-blur: initial;
2731
+ --tw-brightness: initial;
2732
+ --tw-contrast: initial;
2733
+ --tw-grayscale: initial;
2734
+ --tw-hue-rotate: initial;
2735
+ --tw-invert: initial;
2736
+ --tw-opacity: initial;
2737
+ --tw-saturate: initial;
2738
+ --tw-sepia: initial;
2739
+ --tw-drop-shadow: initial;
2740
+ --tw-drop-shadow-color: initial;
2741
+ --tw-drop-shadow-alpha: 100%;
2742
+ --tw-drop-shadow-size: initial;
2743
+ --tw-backdrop-blur: initial;
2744
+ --tw-backdrop-brightness: initial;
2745
+ --tw-backdrop-contrast: initial;
2746
+ --tw-backdrop-grayscale: initial;
2747
+ --tw-backdrop-hue-rotate: initial;
2748
+ --tw-backdrop-invert: initial;
2749
+ --tw-backdrop-opacity: initial;
2750
+ --tw-backdrop-saturate: initial;
2751
+ --tw-backdrop-sepia: initial;
2752
+ --tw-ease: initial;
2753
+ --tw-content: "";
2754
+ }
2755
+ }
2756
+ }
2757
+ `;
2758
+
2759
+ // src/surface/constants.ts
2760
+ var SURFACE_HOST_CLASS = "uidex-surface-host";
2761
+ var SURFACE_CONTAINER_CLASS = "uidex-container";
2762
+ var Z_BASE = 2147483644;
2763
+ var Z_OVERLAY = 2147483645;
2764
+ var Z_CHROME = 2147483646;
2765
+ var SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`;
2766
+ var UIDEX_ATTR_TO_KIND = [
2767
+ ["data-uidex", "element"],
2768
+ ["data-uidex-region", "region"],
2769
+ ["data-uidex-widget", "widget"],
2770
+ ["data-uidex-primitive", "primitive"]
2771
+ ];
2772
+
2773
+ // src/surface/host.ts
2774
+ function createSurfaceHost(options) {
2775
+ const { mount, stylesheets = [], initialTheme = "light" } = options;
2776
+ const hostEl = document.createElement("div");
2777
+ hostEl.classList.add(SURFACE_HOST_CLASS);
2778
+ hostEl.style.position = "fixed";
2779
+ hostEl.style.inset = "0";
2780
+ hostEl.style.pointerEvents = "none";
2781
+ hostEl.style.zIndex = String(Z_BASE);
2782
+ hostEl.classList.add(initialTheme);
2783
+ const shadow = hostEl.attachShadow({ mode: "open" });
2784
+ applyStylesheets(shadow, [tailwind_built_default, ...stylesheets]);
2785
+ const chromeEl = document.createElement("div");
2786
+ chromeEl.classList.add("uidex-chrome");
2787
+ chromeEl.style.pointerEvents = "auto";
2788
+ shadow.appendChild(chromeEl);
2789
+ mount.appendChild(hostEl);
2790
+ return {
2791
+ hostEl,
2792
+ shadowRoot: shadow,
2793
+ chromeEl,
2794
+ applyTheme(theme) {
2795
+ hostEl.classList.remove("light", "dark");
2796
+ hostEl.classList.add(theme);
2797
+ },
2798
+ destroy() {
2799
+ hostEl.remove();
2800
+ }
2801
+ };
2802
+ }
2803
+ function applyStylesheets(shadow, stylesheets) {
2804
+ if (stylesheets.length === 0) return;
2805
+ const adoptable = supportsConstructableStylesheets(shadow);
2806
+ if (adoptable) {
2807
+ const sheets = [];
2808
+ for (const css of stylesheets) {
2809
+ const sheet = new CSSStyleSheet();
2810
+ sheet.replaceSync(css);
2811
+ sheets.push(sheet);
2812
+ }
2813
+ shadow.adoptedStyleSheets = [...shadow.adoptedStyleSheets, ...sheets];
2814
+ return;
2815
+ }
2816
+ for (const css of stylesheets) {
2817
+ const style = document.createElement("style");
2818
+ style.textContent = css;
2819
+ shadow.appendChild(style);
2820
+ }
2821
+ }
2822
+ function supportsConstructableStylesheets(shadow) {
2823
+ if (typeof CSSStyleSheet === "undefined") return false;
2824
+ if (!("adoptedStyleSheets" in shadow)) return false;
2825
+ try {
2826
+ const probe = new CSSStyleSheet();
2827
+ probe.replaceSync("");
2828
+ return true;
2829
+ } catch {
2830
+ return false;
2831
+ }
2832
+ }
2833
+
2834
+ // src/surface/cursor-tooltip.ts
2835
+ var import_lucide2 = require("lucide");
2836
+ var DEFAULT_TOOLTIP_COLOR = "#34d399";
2837
+ var TOOLTIP_OFFSET = 16;
2838
+ var ARROW_SIZE = 5;
2839
+ function createCursorTooltip(deps) {
2840
+ const { container } = deps;
2841
+ const el = document.createElement("div");
2842
+ el.setAttribute("data-uidex-cursor-tooltip", "");
2843
+ el.style.position = "fixed";
2844
+ el.style.pointerEvents = "none";
2845
+ el.style.zIndex = String(Z_CHROME);
2846
+ el.style.padding = "4px 8px";
2847
+ el.style.fontSize = "12px";
2848
+ el.style.fontFamily = "ui-sans-serif, system-ui, sans-serif";
2849
+ el.style.borderRadius = "6px";
2850
+ el.style.background = DEFAULT_TOOLTIP_COLOR;
2851
+ el.style.color = "#0a0a0a";
2852
+ el.style.display = "none";
2853
+ el.style.whiteSpace = "nowrap";
2854
+ el.style.transform = "translate(-50%, 0)";
2855
+ el.style.alignItems = "center";
2856
+ el.style.gap = "6px";
2857
+ const arrow = document.createElement("div");
2858
+ arrow.setAttribute("data-uidex-cursor-tooltip-arrow", "");
2859
+ arrow.style.position = "absolute";
2860
+ arrow.style.left = "50%";
2861
+ arrow.style.bottom = "100%";
2862
+ arrow.style.width = "0";
2863
+ arrow.style.height = "0";
2864
+ arrow.style.transform = "translate(-50%, 0)";
2865
+ arrow.style.borderLeft = `${ARROW_SIZE}px solid transparent`;
2866
+ arrow.style.borderRight = `${ARROW_SIZE}px solid transparent`;
2867
+ arrow.style.borderBottom = `${ARROW_SIZE}px solid ${DEFAULT_TOOLTIP_COLOR}`;
2868
+ el.appendChild(arrow);
2869
+ const body = document.createElement("span");
2870
+ body.setAttribute("data-uidex-cursor-tooltip-body", "");
2871
+ body.style.display = "inline-flex";
2872
+ body.style.alignItems = "center";
2873
+ body.style.gap = "6px";
2874
+ el.appendChild(body);
2875
+ container.appendChild(el);
2876
+ let currentContent = null;
2877
+ let currentCursor = null;
2878
+ const applyColor = (color) => {
2879
+ el.style.background = color;
2880
+ arrow.style.borderBottom = `${ARROW_SIZE}px solid ${color}`;
2881
+ };
2882
+ const renderBody = () => {
2883
+ body.replaceChildren();
2884
+ if (typeof currentContent === "string") {
2885
+ applyColor(DEFAULT_TOOLTIP_COLOR);
2886
+ body.append(document.createTextNode(currentContent));
2887
+ return;
2888
+ }
2889
+ if (!currentContent) return;
2890
+ const { entity, node } = currentContent;
2891
+ const style = KIND_STYLE[entity.kind];
2892
+ applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR);
2893
+ if (style) {
2894
+ const svg = (0, import_lucide2.createElement)(style.icon);
2895
+ svg.setAttribute("aria-hidden", "true");
2896
+ svg.setAttribute("width", "14");
2897
+ svg.setAttribute("height", "14");
2898
+ svg.style.display = "block";
2899
+ body.append(svg);
2900
+ }
2901
+ const label = displayName(entity, node);
2902
+ body.append(document.createTextNode(label));
2903
+ const rawId = entity.kind === "route" ? entity.path : entity.id;
2904
+ if (rawId && rawId !== label) {
2905
+ const subordinate = document.createElement("span");
2906
+ subordinate.setAttribute("data-uidex-cursor-tooltip-id", "");
2907
+ subordinate.style.opacity = "0.65";
2908
+ subordinate.style.fontFamily = "ui-monospace, SFMono-Regular, Menlo, monospace";
2909
+ subordinate.style.fontSize = "11px";
2910
+ subordinate.textContent = rawId;
2911
+ body.append(subordinate);
2912
+ }
2913
+ };
2914
+ const render = () => {
2915
+ if (!currentContent || !currentCursor) {
2916
+ el.style.display = "none";
2917
+ return;
2918
+ }
2919
+ renderBody();
2920
+ el.style.display = "inline-flex";
2921
+ el.style.left = `${currentCursor.x}px`;
2922
+ el.style.top = `${currentCursor.y + TOOLTIP_OFFSET}px`;
2923
+ };
2924
+ return {
2925
+ update(content, cursor) {
2926
+ currentContent = content;
2927
+ currentCursor = cursor;
2928
+ render();
2929
+ },
2930
+ destroy() {
2931
+ el.remove();
2932
+ currentContent = null;
2933
+ currentCursor = null;
2934
+ }
2935
+ };
2936
+ }
2937
+
2938
+ // src/surface/inspector.ts
2939
+ function entityForRef(ref, registry) {
2940
+ if (registry) {
2941
+ const found = registry.get(ref.kind, ref.id);
2942
+ if (found) return found;
2943
+ }
2944
+ if (ref.kind === "route") return { kind: "route", path: ref.id, page: ref.id };
2945
+ if (ref.kind === "flow") {
2946
+ return { kind: "flow", id: ref.id, loc: { file: "" }, touches: [] };
2947
+ }
2948
+ return { kind: ref.kind, id: ref.id };
2949
+ }
2950
+ function defaultResolveMatch(target, registry) {
2951
+ if (target.closest(SURFACE_IGNORE_SELECTOR)) return null;
2952
+ let node = target;
2953
+ while (node) {
2954
+ if (node instanceof HTMLElement) {
2955
+ for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {
2956
+ const id = node.getAttribute(attr);
2957
+ if (id) {
2958
+ const ref = { kind, id };
2959
+ const entity = entityForRef(ref, registry);
2960
+ return {
2961
+ element: node,
2962
+ ref,
2963
+ entity,
2964
+ label: displayName(entity, node)
2965
+ };
2966
+ }
2967
+ }
2968
+ }
2969
+ node = node.parentElement;
2970
+ }
2971
+ return null;
2972
+ }
2973
+ function createInspector(options) {
2974
+ const {
2975
+ session,
2976
+ registry,
2977
+ resolve = (target) => defaultResolveMatch(target, registry),
2978
+ onHover,
2979
+ onSelect
2980
+ } = options;
2981
+ let mounted = false;
2982
+ let currentEl = null;
2983
+ let cursorStyleEl = null;
2984
+ const onMouseMove = (e) => {
2985
+ if (!(e.target instanceof Element)) return;
2986
+ const match = resolve(e.target);
2987
+ const cursor = { x: e.clientX, y: e.clientY };
2988
+ if (match) {
2989
+ if (match.element !== currentEl) {
2990
+ currentEl = match.element;
2991
+ session.getState().actions.hover(match.ref);
2992
+ }
2993
+ onHover?.(match, cursor);
2994
+ } else if (currentEl) {
2995
+ currentEl = null;
2996
+ session.getState().actions.hover(null);
2997
+ onHover?.(null, cursor);
2998
+ }
2999
+ };
3000
+ const onClick = (e) => {
3001
+ if (!(e.target instanceof Element)) return;
3002
+ if (e.target.closest(SURFACE_IGNORE_SELECTOR)) return;
3003
+ const match = resolve(e.target);
3004
+ if (!match) return;
3005
+ e.preventDefault();
3006
+ e.stopPropagation();
3007
+ session.getState().actions.select(match.ref);
3008
+ onSelect?.(match, { x: e.clientX, y: e.clientY });
3009
+ };
3010
+ return {
3011
+ mount() {
3012
+ if (mounted) return;
3013
+ mounted = true;
3014
+ if (typeof document !== "undefined") {
3015
+ cursorStyleEl = document.createElement("style");
3016
+ cursorStyleEl.setAttribute("data-uidex-inspector-cursor", "");
3017
+ cursorStyleEl.textContent = "html, body, body * { cursor: crosshair !important; }";
3018
+ document.head.appendChild(cursorStyleEl);
3019
+ }
3020
+ document.addEventListener("mousemove", onMouseMove);
3021
+ document.addEventListener("click", onClick, true);
3022
+ },
3023
+ destroy() {
3024
+ if (!mounted) return;
3025
+ mounted = false;
3026
+ currentEl = null;
3027
+ if (cursorStyleEl) {
3028
+ cursorStyleEl.remove();
3029
+ cursorStyleEl = null;
3030
+ }
3031
+ document.removeEventListener("mousemove", onMouseMove);
3032
+ document.removeEventListener("click", onClick, true);
3033
+ session.getState().actions.hover(null);
3034
+ onHover?.(null, null);
3035
+ }
3036
+ };
3037
+ }
3038
+
3039
+ // src/surface/menu-bar.ts
3040
+ function createMenuBar(options) {
3041
+ const {
3042
+ container,
3043
+ session,
3044
+ initialCorner = "bottom-right",
3045
+ appTitle
3046
+ } = options;
3047
+ const root = document.createElement("div");
3048
+ root.setAttribute("data-uidex-menubar", "");
3049
+ root.setAttribute("role", "toolbar");
3050
+ Object.assign(root.style, {
3051
+ position: "fixed",
3052
+ zIndex: String(Z_CHROME),
3053
+ pointerEvents: "auto",
3054
+ display: "inline-flex",
3055
+ alignItems: "center",
3056
+ gap: "6px",
3057
+ padding: "6px",
3058
+ borderRadius: "8px",
3059
+ background: "rgba(20, 20, 20, 0.92)",
3060
+ color: "#f5f5f5",
3061
+ fontFamily: "ui-sans-serif, system-ui, sans-serif",
3062
+ fontSize: "12px",
3063
+ userSelect: "none",
3064
+ cursor: "grab"
3065
+ });
3066
+ const buttonStyle = {
3067
+ background: "rgba(255,255,255,0.08)",
3068
+ color: "inherit",
3069
+ border: "1px solid rgba(255,255,255,0.12)",
3070
+ borderRadius: "6px",
3071
+ padding: "4px 8px",
3072
+ font: "inherit",
3073
+ cursor: "pointer"
3074
+ };
3075
+ const buttonActiveStyle = {
3076
+ background: "rgba(120, 180, 255, 0.28)",
3077
+ borderColor: "rgba(120, 180, 255, 0.55)"
3078
+ };
3079
+ if (appTitle) {
3080
+ const titleEl = document.createElement("span");
3081
+ titleEl.setAttribute("data-uidex-menubar-title", "");
3082
+ titleEl.textContent = appTitle;
3083
+ Object.assign(titleEl.style, {
3084
+ padding: "0 6px 0 4px",
3085
+ fontWeight: "600",
3086
+ letterSpacing: "0.01em",
3087
+ whiteSpace: "nowrap"
3088
+ });
3089
+ root.appendChild(titleEl);
3090
+ }
3091
+ const highlightDot = document.createElement("span");
3092
+ highlightDot.setAttribute("data-uidex-menubar-highlight-indicator", "");
3093
+ highlightDot.setAttribute("aria-label", "Element highlighted (press Esc)");
3094
+ highlightDot.setAttribute("role", "status");
3095
+ Object.assign(highlightDot.style, {
3096
+ display: "none",
3097
+ width: "8px",
3098
+ height: "8px",
3099
+ borderRadius: "50%",
3100
+ margin: "0 2px 0 4px",
3101
+ background: "rgba(120, 180, 255, 0.85)",
3102
+ boxShadow: "0 0 6px rgba(120, 180, 255, 0.75)",
3103
+ flex: "0 0 auto"
3104
+ });
3105
+ root.appendChild(highlightDot);
3106
+ const inspectBtn = document.createElement("button");
3107
+ inspectBtn.type = "button";
3108
+ inspectBtn.setAttribute("data-uidex-menubar-inspect", "");
3109
+ inspectBtn.textContent = "Inspect";
3110
+ Object.assign(inspectBtn.style, buttonStyle);
3111
+ inspectBtn.addEventListener("click", (e) => {
3112
+ e.stopPropagation();
3113
+ session.send({ type: "TOGGLE_INSPECTOR" });
3114
+ });
3115
+ root.appendChild(inspectBtn);
3116
+ const paletteBtn = document.createElement("button");
3117
+ paletteBtn.type = "button";
3118
+ paletteBtn.setAttribute("data-uidex-menubar-palette", "");
3119
+ paletteBtn.textContent = "\u2318K";
3120
+ Object.assign(paletteBtn.style, buttonStyle);
3121
+ paletteBtn.addEventListener("click", (e) => {
3122
+ e.stopPropagation();
3123
+ if (session.getState().stack.length > 0) {
3124
+ session.send({ type: "CLOSE" });
3125
+ } else {
3126
+ session.send({ type: "OPEN_PALETTE" });
3127
+ }
3128
+ });
3129
+ root.appendChild(paletteBtn);
3130
+ container.appendChild(root);
3131
+ const syncButtonStates = () => {
3132
+ const state = session.getState();
3133
+ inspectBtn.setAttribute(
3134
+ "data-uidex-menubar-inspect-active",
3135
+ state.inspectorActive ? "true" : "false"
3136
+ );
3137
+ Object.assign(
3138
+ inspectBtn.style,
3139
+ state.inspectorActive ? buttonActiveStyle : buttonStyle
3140
+ );
3141
+ const top = state.stack[state.stack.length - 1] ?? null;
3142
+ const paletteOpen = top?.id === "command-palette";
3143
+ paletteBtn.setAttribute(
3144
+ "data-uidex-menubar-palette-active",
3145
+ paletteOpen ? "true" : "false"
3146
+ );
3147
+ Object.assign(
3148
+ paletteBtn.style,
3149
+ paletteOpen ? buttonActiveStyle : buttonStyle
3150
+ );
3151
+ const highlightActive = state.pinnedHighlight !== null;
3152
+ highlightDot.setAttribute(
3153
+ "data-uidex-menubar-highlight-active",
3154
+ highlightActive ? "true" : "false"
3155
+ );
3156
+ highlightDot.style.display = highlightActive ? "inline-block" : "none";
3157
+ };
3158
+ syncButtonStates();
3159
+ const unsubscribeSession = session.subscribe(syncButtonStates);
3160
+ let corner = initialCorner;
3161
+ const applyCorner = () => {
3162
+ const offset = "16px";
3163
+ root.style.top = corner.startsWith("top") ? offset : "";
3164
+ root.style.bottom = corner.startsWith("bottom") ? offset : "";
3165
+ root.style.left = corner.endsWith("left") ? offset : "";
3166
+ root.style.right = corner.endsWith("right") ? offset : "";
3167
+ root.setAttribute("data-uidex-menubar-corner", corner);
3168
+ };
3169
+ applyCorner();
3170
+ let dragging = false;
3171
+ let startX = 0;
3172
+ let startY = 0;
3173
+ let originLeft = 0;
3174
+ let originTop = 0;
3175
+ const onMouseMove = (e) => {
3176
+ if (!dragging) return;
3177
+ root.style.left = `${originLeft + e.clientX - startX}px`;
3178
+ root.style.top = `${originTop + e.clientY - startY}px`;
3179
+ };
3180
+ const onMouseUp = (e) => {
3181
+ if (!dragging) return;
3182
+ dragging = false;
3183
+ root.style.cursor = "grab";
3184
+ document.removeEventListener("mousemove", onMouseMove);
3185
+ document.removeEventListener("mouseup", onMouseUp);
3186
+ snapToNearest(e.clientX, e.clientY);
3187
+ };
3188
+ const onMouseDown = (e) => {
3189
+ if (e.target instanceof HTMLElement && e.target.closest("button")) return;
3190
+ const rect = root.getBoundingClientRect();
3191
+ dragging = true;
3192
+ originLeft = rect.left;
3193
+ originTop = rect.top;
3194
+ startX = e.clientX;
3195
+ startY = e.clientY;
3196
+ root.style.cursor = "grabbing";
3197
+ Object.assign(root.style, {
3198
+ top: `${originTop}px`,
3199
+ left: `${originLeft}px`,
3200
+ bottom: "",
3201
+ right: ""
3202
+ });
3203
+ document.addEventListener("mousemove", onMouseMove);
3204
+ document.addEventListener("mouseup", onMouseUp);
3205
+ e.preventDefault();
3206
+ };
3207
+ root.addEventListener("mousedown", onMouseDown);
3208
+ function snapTo(next) {
3209
+ corner = next;
3210
+ applyCorner();
3211
+ }
3212
+ function snapToNearest(x, y) {
3213
+ const horizontal = x / (window.innerWidth || 1) < 0.5 ? "left" : "right";
3214
+ const vertical = y / (window.innerHeight || 1) < 0.5 ? "top" : "bottom";
3215
+ snapTo(`${vertical}-${horizontal}`);
3216
+ }
3217
+ return {
3218
+ destroy() {
3219
+ unsubscribeSession();
3220
+ root.removeEventListener("mousedown", onMouseDown);
3221
+ document.removeEventListener("mousemove", onMouseMove);
3222
+ document.removeEventListener("mouseup", onMouseUp);
3223
+ root.remove();
3224
+ },
3225
+ snapTo,
3226
+ snapToNearest,
3227
+ get corner() {
3228
+ return corner;
3229
+ },
3230
+ get root() {
3231
+ return root;
3232
+ }
3233
+ };
3234
+ }
3235
+
3236
+ // src/surface/overlay.ts
3237
+ var DEFAULT_COLOR = "#34d399";
3238
+ var DEFAULT_BORDER_WIDTH = 2;
3239
+ var DEFAULT_FILL_OPACITY = 0.08;
3240
+ function createOverlay(deps) {
3241
+ const { container } = deps;
3242
+ const box = document.createElement("div");
3243
+ box.setAttribute("data-uidex-overlay", "");
3244
+ box.style.position = "fixed";
3245
+ box.style.pointerEvents = "none";
3246
+ box.style.zIndex = String(Z_OVERLAY);
3247
+ box.style.boxSizing = "border-box";
3248
+ box.style.display = "none";
3249
+ const label = document.createElement("div");
3250
+ label.setAttribute("data-uidex-overlay-label", "");
3251
+ label.style.position = "absolute";
3252
+ label.style.left = "0";
3253
+ label.style.bottom = "100%";
3254
+ label.style.padding = "2px 6px";
3255
+ label.style.fontSize = "11px";
3256
+ label.style.fontFamily = "ui-sans-serif, system-ui, sans-serif";
3257
+ label.style.lineHeight = "1";
3258
+ label.style.whiteSpace = "nowrap";
3259
+ label.style.color = "#0a0a0a";
3260
+ label.style.display = "none";
3261
+ box.appendChild(label);
3262
+ container.appendChild(box);
3263
+ let target = null;
3264
+ let opts = {
3265
+ label: "",
3266
+ color: DEFAULT_COLOR,
3267
+ padding: 0,
3268
+ borderStyle: "solid",
3269
+ borderWidth: DEFAULT_BORDER_WIDTH,
3270
+ fillOpacity: DEFAULT_FILL_OPACITY
3271
+ };
3272
+ let rafId = null;
3273
+ let attached = false;
3274
+ const schedule = () => {
3275
+ if (rafId !== null) return;
3276
+ rafId = typeof requestAnimationFrame === "function" ? requestAnimationFrame(() => {
3277
+ rafId = null;
3278
+ updatePosition();
3279
+ }) : setTimeout(() => {
3280
+ rafId = null;
3281
+ updatePosition();
3282
+ }, 0);
3283
+ };
3284
+ const cancelSchedule = () => {
3285
+ if (rafId === null) return;
3286
+ if (typeof cancelAnimationFrame === "function") cancelAnimationFrame(rafId);
3287
+ else clearTimeout(rafId);
3288
+ rafId = null;
3289
+ };
3290
+ const onScroll = () => schedule();
3291
+ const onResize = () => schedule();
3292
+ const attach = () => {
3293
+ if (attached) return;
3294
+ attached = true;
3295
+ window.addEventListener("resize", onResize);
3296
+ window.addEventListener("scroll", onScroll, {
3297
+ capture: true,
3298
+ passive: true
3299
+ });
3300
+ };
3301
+ const detach = () => {
3302
+ if (!attached) return;
3303
+ attached = false;
3304
+ window.removeEventListener("resize", onResize);
3305
+ window.removeEventListener("scroll", onScroll, {
3306
+ capture: true
3307
+ });
3308
+ cancelSchedule();
3309
+ };
3310
+ function updatePosition() {
3311
+ if (!target) return;
3312
+ const rect = target.getBoundingClientRect();
3313
+ const pad = opts.padding;
3314
+ box.style.top = `${rect.top - pad}px`;
3315
+ box.style.left = `${rect.left - pad}px`;
3316
+ box.style.width = `${rect.width + pad * 2}px`;
3317
+ box.style.height = `${rect.height + pad * 2}px`;
3318
+ }
3319
+ function applyStyles() {
3320
+ box.style.borderColor = opts.color;
3321
+ box.style.borderStyle = opts.borderStyle;
3322
+ box.style.borderWidth = `${opts.borderWidth}px`;
3323
+ box.style.backgroundColor = rgbaFromColor(opts.color, opts.fillOpacity);
3324
+ if (opts.label) {
3325
+ label.textContent = opts.label;
3326
+ label.style.backgroundColor = opts.color;
3327
+ label.style.display = "";
3328
+ } else {
3329
+ label.textContent = "";
3330
+ label.style.display = "none";
3331
+ }
3332
+ }
3333
+ return {
3334
+ show(nextTarget, showOpts) {
3335
+ target = nextTarget;
3336
+ opts = {
3337
+ label: showOpts?.label ?? "",
3338
+ color: showOpts?.color ?? DEFAULT_COLOR,
3339
+ padding: showOpts?.padding ?? 0,
3340
+ borderStyle: showOpts?.borderStyle ?? "solid",
3341
+ borderWidth: showOpts?.borderWidth ?? DEFAULT_BORDER_WIDTH,
3342
+ fillOpacity: showOpts?.fillOpacity ?? DEFAULT_FILL_OPACITY
3343
+ };
3344
+ applyStyles();
3345
+ updatePosition();
3346
+ box.style.display = "";
3347
+ attach();
3348
+ },
3349
+ hide() {
3350
+ target = null;
3351
+ box.style.display = "none";
3352
+ detach();
3353
+ },
3354
+ destroy() {
3355
+ detach();
3356
+ box.remove();
3357
+ target = null;
3358
+ },
3359
+ get isVisible() {
3360
+ return target !== null;
3361
+ }
3362
+ };
3363
+ }
3364
+ function rgbaFromColor(color, alpha) {
3365
+ if (color.startsWith("#")) {
3366
+ const hex = color.slice(1);
3367
+ const bigint = parseInt(
3368
+ hex.length === 3 ? hex.split("").map((c) => c + c).join("") : hex,
3369
+ 16
3370
+ );
3371
+ const r = bigint >> 16 & 255;
3372
+ const g = bigint >> 8 & 255;
3373
+ const b = bigint & 255;
3374
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
3375
+ }
3376
+ return color;
3377
+ }
3378
+
3379
+ // src/surface/theme.ts
3380
+ function createThemeDetector(deps) {
3381
+ const { session, onResolve } = deps;
3382
+ let resolved = session.getState().resolvedTheme;
3383
+ const detect = (preference) => {
3384
+ if (preference !== "auto") return preference;
3385
+ const htmlToken = readHtmlClassToken();
3386
+ if (htmlToken) return htmlToken;
3387
+ if (typeof window !== "undefined" && typeof window.matchMedia === "function") {
3388
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
3389
+ }
3390
+ return "light";
3391
+ };
3392
+ const push = () => {
3393
+ const preference = session.getState().theme;
3394
+ const next = detect(preference);
3395
+ if (next === resolved) return;
3396
+ resolved = next;
3397
+ session.getState().actions.setTheme(preference, next);
3398
+ onResolve?.(next);
3399
+ };
3400
+ push();
3401
+ let mql = null;
3402
+ const mqlListener = () => push();
3403
+ if (typeof window !== "undefined" && typeof window.matchMedia === "function") {
3404
+ mql = window.matchMedia("(prefers-color-scheme: dark)");
3405
+ if (typeof mql.addEventListener === "function") {
3406
+ mql.addEventListener("change", mqlListener);
3407
+ } else if (typeof mql.addListener === "function") {
3408
+ mql.addListener(mqlListener);
3409
+ }
3410
+ }
3411
+ let observer = null;
3412
+ if (typeof MutationObserver !== "undefined" && typeof document !== "undefined") {
3413
+ observer = new MutationObserver(() => push());
3414
+ observer.observe(document.documentElement, {
3415
+ attributes: true,
3416
+ attributeFilter: ["class"]
3417
+ });
3418
+ }
3419
+ const unsubscribe = session.subscribe((state, prev) => {
3420
+ if (state.theme !== prev.theme) push();
3421
+ });
3422
+ return {
3423
+ destroy() {
3424
+ unsubscribe();
3425
+ if (mql) {
3426
+ if (typeof mql.removeEventListener === "function") {
3427
+ mql.removeEventListener("change", mqlListener);
3428
+ } else if (typeof mql.removeListener === "function") {
3429
+ mql.removeListener(mqlListener);
3430
+ }
3431
+ }
3432
+ observer?.disconnect();
3433
+ },
3434
+ get resolved() {
3435
+ return resolved;
3436
+ }
3437
+ };
3438
+ }
3439
+ function readHtmlClassToken() {
3440
+ if (typeof document === "undefined") return null;
3441
+ const root = document.documentElement;
3442
+ if (!root) return null;
3443
+ if (root.classList.contains("dark")) return "dark";
3444
+ if (root.classList.contains("light")) return "light";
3445
+ return null;
3446
+ }
3447
+
3448
+ // src/surface/shell.ts
3449
+ function createSurfaceShell(options) {
3450
+ const cleanup = createCleanupStack();
3451
+ const host = createSurfaceHost({
3452
+ mount: options.mount,
3453
+ stylesheets: options.stylesheets,
3454
+ initialTheme: options.session.getState().resolvedTheme
3455
+ });
3456
+ cleanup.add(host);
3457
+ const themeDetector = createThemeDetector({
3458
+ session: options.session,
3459
+ onResolve: (theme) => host.applyTheme(theme)
3460
+ });
3461
+ cleanup.add(themeDetector);
3462
+ const overlay = createOverlay({ container: host.chromeEl });
3463
+ cleanup.add(overlay);
3464
+ const tooltip = createCursorTooltip({
3465
+ container: host.chromeEl,
3466
+ session: options.session
3467
+ });
3468
+ cleanup.add(tooltip);
3469
+ const afterHover = options.inspector?.onAfterHover;
3470
+ const inspector = createInspector({
3471
+ session: options.session,
3472
+ registry: options.registry,
3473
+ onSelect: options.inspector?.onSelect,
3474
+ onHover: (match, cursor) => {
3475
+ if (!match) {
3476
+ overlay.hide();
3477
+ tooltip.update(null, cursor);
3478
+ } else {
3479
+ overlay.show(match.element, {
3480
+ color: KIND_STYLE[match.ref.kind].color
3481
+ });
3482
+ tooltip.update({ entity: match.entity, node: match.element }, cursor);
3483
+ }
3484
+ afterHover?.(match, cursor);
3485
+ }
3486
+ });
3487
+ cleanup.add(inspector);
3488
+ const menuBar = createMenuBar({
3489
+ container: host.chromeEl,
3490
+ session: options.session,
3491
+ initialCorner: options.initialCorner,
3492
+ appTitle: options.appTitle
3493
+ });
3494
+ cleanup.add(menuBar);
3495
+ return {
3496
+ host,
3497
+ overlay,
3498
+ tooltip,
3499
+ inspector,
3500
+ menuBar,
3501
+ themeDetector,
3502
+ cleanup,
3503
+ destroy: cleanup.drain
3504
+ };
3505
+ }
3506
+
3507
+ // src/headless/index.ts
3508
+ function createHeadless(options = {}) {
3509
+ const registry = createRegistry();
3510
+ const session = createSession({
3511
+ theme: options.theme,
3512
+ resolvedTheme: options.resolvedTheme
3513
+ });
3514
+ const mountCleanup = createCleanupStack();
3515
+ let shadowRoot = null;
3516
+ let shell = null;
3517
+ let mounted = false;
3518
+ const overlayApi = {
3519
+ show(target, opts) {
3520
+ shell?.overlay.show(target, opts);
3521
+ },
3522
+ hide() {
3523
+ shell?.overlay.hide();
3524
+ },
3525
+ get isVisible() {
3526
+ return shell?.overlay.isVisible ?? false;
3527
+ }
3528
+ };
3529
+ const inspectorApi = {
3530
+ start() {
3531
+ },
3532
+ stop() {
3533
+ },
3534
+ get isActive() {
3535
+ return shell !== null;
3536
+ }
3537
+ };
3538
+ function mount(target) {
3539
+ if (mounted) return;
3540
+ const mountTarget = target ?? (typeof document !== "undefined" ? document.body : null);
3541
+ if (!mountTarget) {
3542
+ throw new Error("createHeadless: no mount target available");
3543
+ }
3544
+ shell = createSurfaceShell({
3545
+ mount: mountTarget,
3546
+ registry,
3547
+ session,
3548
+ stylesheets: options.stylesheets,
3549
+ initialCorner: options.initialCorner,
3550
+ appTitle: options.appTitle
3551
+ });
3552
+ shadowRoot = shell.host.shadowRoot;
3553
+ shell.inspector.mount();
3554
+ mountCleanup.add(shell);
3555
+ mounted = true;
3556
+ }
3557
+ function unmount() {
3558
+ if (!mounted) return;
3559
+ mountCleanup.drain();
3560
+ shell = null;
3561
+ shadowRoot = null;
3562
+ mounted = false;
3563
+ }
3564
+ return {
3565
+ mount,
3566
+ unmount,
3567
+ registry,
3568
+ session,
3569
+ overlay: overlayApi,
3570
+ inspector: inspectorApi,
3571
+ get shadowRoot() {
3572
+ return shadowRoot;
3573
+ }
3574
+ };
3575
+ }
3576
+ // Annotate the CommonJS export names for ESM import in node:
3577
+ 0 && (module.exports = {
3578
+ createHeadless
3579
+ });
3580
+ //# sourceMappingURL=index.cjs.map