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