uidex 0.2.4 → 0.4.0

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