@dxos/ui-theme 0.8.4-main.6fa680abb7 → 0.8.4-main.74a063c4e0

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 (131) hide show
  1. package/dist/lib/browser/index.mjs +355 -443
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +355 -443
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/plugin/node-cjs/{theme.css → main.css} +66 -31
  8. package/dist/plugin/node-cjs/main.css.map +7 -0
  9. package/dist/plugin/node-cjs/meta.json +1 -1
  10. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs +8 -15
  11. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs.map +3 -3
  12. package/dist/plugin/node-esm/{theme.css → main.css} +66 -31
  13. package/dist/plugin/node-esm/main.css.map +7 -0
  14. package/dist/plugin/node-esm/meta.json +1 -1
  15. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs +8 -15
  16. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs.map +3 -3
  17. package/dist/types/src/fragments/index.d.ts +0 -5
  18. package/dist/types/src/fragments/index.d.ts.map +1 -1
  19. package/dist/types/src/fragments/text.d.ts +0 -4
  20. package/dist/types/src/fragments/text.d.ts.map +1 -1
  21. package/dist/types/src/index.d.ts +1 -1
  22. package/dist/types/src/index.d.ts.map +1 -1
  23. package/dist/types/src/plugins/ThemePlugin.d.ts.map +1 -1
  24. package/dist/types/src/theme/components/avatar.d.ts.map +1 -1
  25. package/dist/types/src/theme/components/card.d.ts +3 -2
  26. package/dist/types/src/theme/components/card.d.ts.map +1 -1
  27. package/dist/types/src/theme/components/dialog.d.ts.map +1 -1
  28. package/dist/types/src/theme/components/focus.d.ts +6 -0
  29. package/dist/types/src/theme/components/focus.d.ts.map +1 -0
  30. package/dist/types/src/theme/components/icon-button.d.ts.map +1 -1
  31. package/dist/types/src/theme/components/icon.d.ts +3 -0
  32. package/dist/types/src/theme/components/icon.d.ts.map +1 -1
  33. package/dist/types/src/theme/components/index.d.ts +1 -0
  34. package/dist/types/src/theme/components/index.d.ts.map +1 -1
  35. package/dist/types/src/theme/components/input.d.ts.map +1 -1
  36. package/dist/types/src/theme/components/link.d.ts.map +1 -1
  37. package/dist/types/src/theme/components/list.d.ts.map +1 -1
  38. package/dist/types/src/theme/components/message.d.ts.map +1 -1
  39. package/dist/types/src/theme/components/popover.d.ts.map +1 -1
  40. package/dist/types/src/theme/components/scroll-area.d.ts +12 -2
  41. package/dist/types/src/theme/components/scroll-area.d.ts.map +1 -1
  42. package/dist/types/src/theme/components/select.d.ts.map +1 -1
  43. package/dist/types/src/theme/components/status.d.ts +1 -1
  44. package/dist/types/src/theme/components/status.d.ts.map +1 -1
  45. package/dist/types/src/theme/components/toast.d.ts.map +1 -1
  46. package/dist/types/src/theme/components/toolbar.d.ts +0 -1
  47. package/dist/types/src/theme/components/toolbar.d.ts.map +1 -1
  48. package/dist/types/src/theme/components/tooltip.d.ts.map +1 -1
  49. package/dist/types/src/theme/components/treegrid.d.ts.map +1 -1
  50. package/dist/types/src/theme/index.d.ts +1 -0
  51. package/dist/types/src/theme/index.d.ts.map +1 -1
  52. package/dist/types/src/theme/primitives/column.d.ts +8 -3
  53. package/dist/types/src/theme/primitives/column.d.ts.map +1 -1
  54. package/dist/types/src/theme/primitives/panel.d.ts +9 -5
  55. package/dist/types/src/theme/primitives/panel.d.ts.map +1 -1
  56. package/dist/types/src/theme/theme.d.ts.map +1 -1
  57. package/dist/types/src/util/elevation.d.ts.map +1 -0
  58. package/dist/types/src/util/index.d.ts +3 -0
  59. package/dist/types/src/util/index.d.ts.map +1 -1
  60. package/dist/types/src/util/mx.d.ts +28 -284
  61. package/dist/types/src/util/mx.d.ts.map +1 -1
  62. package/dist/types/src/util/size.d.ts +27 -0
  63. package/dist/types/src/util/size.d.ts.map +1 -0
  64. package/dist/types/src/util/valence.d.ts.map +1 -0
  65. package/dist/types/tsconfig.tsbuildinfo +1 -1
  66. package/package.json +8 -4
  67. package/src/css/components/button.css +2 -1
  68. package/src/css/components/{focus-ring.css → focus.css} +15 -1
  69. package/src/css/components/icon.css +9 -0
  70. package/src/css/components/selected.css +30 -0
  71. package/src/css/integrations/codemirror.css +5 -3
  72. package/src/css/integrations/tldraw.css +1 -0
  73. package/src/css/layout/main.css +0 -7
  74. package/src/css/layout/size.css +8 -31
  75. package/src/css/theme/palette.css +8 -0
  76. package/src/css/theme/semantic.css +24 -9
  77. package/src/css/theme/spacing.css +35 -18
  78. package/src/css/utilities.css +72 -3
  79. package/src/fragments/AUDIT.md +58 -0
  80. package/src/fragments/index.ts +1 -6
  81. package/src/fragments/text.ts +0 -5
  82. package/src/index.ts +1 -1
  83. package/src/{theme.css → main.css} +10 -6
  84. package/src/plugins/ThemePlugin.ts +12 -24
  85. package/src/plugins/main.css +45 -0
  86. package/src/theme/components/avatar.ts +3 -4
  87. package/src/theme/components/button.ts +1 -1
  88. package/src/theme/components/card.ts +14 -10
  89. package/src/theme/components/dialog.ts +1 -2
  90. package/src/theme/components/focus.ts +33 -0
  91. package/src/theme/components/icon-button.ts +1 -3
  92. package/src/theme/components/icon.ts +13 -4
  93. package/src/theme/components/index.ts +1 -0
  94. package/src/theme/components/input.ts +10 -25
  95. package/src/theme/components/link.ts +1 -2
  96. package/src/theme/components/list.ts +4 -4
  97. package/src/theme/components/menu.ts +4 -4
  98. package/src/theme/components/message.ts +2 -3
  99. package/src/theme/components/popover.ts +3 -4
  100. package/src/theme/components/scroll-area.ts +47 -40
  101. package/src/theme/components/select.ts +2 -3
  102. package/src/theme/components/status.ts +5 -5
  103. package/src/theme/components/toast.ts +2 -3
  104. package/src/theme/components/toolbar.ts +1 -7
  105. package/src/theme/components/tooltip.ts +1 -2
  106. package/src/theme/components/treegrid.ts +1 -1
  107. package/src/theme/index.ts +1 -0
  108. package/src/theme/primitives/column.ts +27 -10
  109. package/src/theme/primitives/panel.ts +18 -25
  110. package/src/theme/theme.ts +2 -0
  111. package/src/typings.d.ts +3 -0
  112. package/src/util/index.ts +3 -0
  113. package/src/util/mx.ts +106 -7
  114. package/src/util/size.ts +103 -0
  115. package/dist/plugin/node-cjs/theme.css.map +0 -7
  116. package/dist/plugin/node-esm/theme.css.map +0 -7
  117. package/dist/types/src/fragments/elevation.d.ts.map +0 -1
  118. package/dist/types/src/fragments/focus.d.ts +0 -4
  119. package/dist/types/src/fragments/focus.d.ts.map +0 -1
  120. package/dist/types/src/fragments/selected.d.ts +0 -4
  121. package/dist/types/src/fragments/selected.d.ts.map +0 -1
  122. package/dist/types/src/fragments/size.d.ts +0 -7
  123. package/dist/types/src/fragments/size.d.ts.map +0 -1
  124. package/dist/types/src/fragments/valence.d.ts.map +0 -1
  125. package/src/fragments/focus.ts +0 -11
  126. package/src/fragments/selected.ts +0 -12
  127. package/src/fragments/size.ts +0 -117
  128. /package/dist/types/src/{fragments → util}/elevation.d.ts +0 -0
  129. /package/dist/types/src/{fragments → util}/valence.d.ts +0 -0
  130. /package/src/{fragments → util}/elevation.ts +0 -0
  131. /package/src/{fragments → util}/valence.ts +0 -0
@@ -56,7 +56,22 @@ var densityBlockSize = (density = "coarse") => density === "fine" ? fineBlockSiz
56
56
  var staticDisabled = "opacity-40 cursor-not-allowed shadow-none";
57
57
  var dataDisabled = "data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed";
58
58
 
59
- // src/fragments/elevation.ts
59
+ // src/fragments/hover.ts
60
+ var subtleHover = "hover:bg-hover-overlay";
61
+ var ghostHover = "hover:bg-hover-surface";
62
+ var ghostFocusWithin = "focus-within:bg-hover-surface";
63
+ var hoverableControls = "[--controls-opacity:1] hover-hover:[--controls-opacity:0] hover-hover:hover:[--controls-opacity:1]";
64
+ var groupHoverControlItemWithTransition = "transition-opacity duration-200 opacity-0 group-hover:opacity-100";
65
+ var hoverableFocusedKeyboardControls = "focus-visible:[--controls-opacity:1]";
66
+ var hoverableFocusedWithinControls = "focus-within:[--controls-opacity:1]";
67
+ var hoverableOpenControlItem = "hover-hover:aria-[expanded=true]:[--controls-opacity:1]";
68
+ var hoverableControlItem = "opacity-(--controls-opacity)";
69
+
70
+ // src/fragments/text.ts
71
+ var descriptionTextPrimary = "text-sm font-normal text-base-surface-text";
72
+ var descriptionMessage = "text-description border border-dashed border-separator rounded-sm p-4";
73
+
74
+ // src/util/elevation.ts
60
75
  var surfaceShadow = ({ elevation }) => [
61
76
  elevation === "positioned" ? "shadow-sm" : elevation === "dialog" || elevation === "toast" ? "shadow-md" : "shadow-none"
62
77
  ];
@@ -89,27 +104,6 @@ var surfaceZIndex = ({ level, elevation }) => {
89
104
  }
90
105
  };
91
106
 
92
- // src/fragments/focus.ts
93
- var focusRing = "dx-focus-ring";
94
- var subduedFocus = "focus:outline-hidden focus-visible:outline-hidden focus:ring-0 ring-0 focus:border-0 border-0";
95
- var staticFocusRing = "ring-2 ring-offset-0 ring-primary-350 ring-offset-white dark:ring-primary-450 dark:ring-offset-black";
96
-
97
- // src/fragments/hover.ts
98
- var subtleHover = "hover:bg-hover-overlay";
99
- var ghostHover = "hover:bg-hover-surface";
100
- var ghostFocusWithin = "focus-within:bg-hover-surface";
101
- var hoverableControls = "[--controls-opacity:1] hover-hover:[--controls-opacity:0] hover-hover:hover:[--controls-opacity:1]";
102
- var groupHoverControlItemWithTransition = "transition-opacity duration-200 opacity-0 group-hover:opacity-100";
103
- var hoverableFocusedKeyboardControls = "focus-visible:[--controls-opacity:1]";
104
- var hoverableFocusedWithinControls = "focus-within:[--controls-opacity:1]";
105
- var hoverableOpenControlItem = "hover-hover:aria-[expanded=true]:[--controls-opacity:1]";
106
- var hoverableControlItem = "opacity-(--controls-opacity)";
107
-
108
- // src/fragments/selected.ts
109
- var ghostHighlighted = "data-[highlighted]:bg-primary-100 dark:data-[highlighted]:bg-primary-600 hover:data-[highlighted]:bg-primary-150 hover:dark:data-[highlighted]:bg-primary-500";
110
- var ghostSelected = "aria-selected:bg-base-surface aria-selected:text-accent-text hover:aria-selected:text-accent-text-hover aria-selected:font-semibold aria-selected:tracking-normal transition-[color,font-variation-settings,letter-spacing]";
111
- var ghostSelectedContainerMd = "@md:aria-selected:bg-base-surface @md:aria-selected:text-accent-text @md:hover:aria-selected:text-accent-text-hover @md:aria-selected:font-semibold @md:aria-selected:tracking-normal @md:transition-[color,font-variation-settings,letter-spacing]";
112
-
113
107
  // src/util/hash-styles.ts
114
108
  var neutral = {
115
109
  hue: "neutral",
@@ -273,7 +267,10 @@ var getHashHue = (id) => {
273
267
  var getHash = (id) => id.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0);
274
268
 
275
269
  // src/util/mx.ts
270
+ import { Children, createElement, forwardRef, isValidElement } from "react";
276
271
  import { extendTailwindMerge, validators } from "tailwind-merge";
272
+ import { log } from "@dxos/log";
273
+ var __dxlog_file = "/__w/dxos/dxos/packages/ui/ui-theme/src/util/mx.ts";
277
274
  var mx = extendTailwindMerge({
278
275
  extend: {
279
276
  classGroups: {
@@ -318,334 +315,234 @@ var mx = extendTailwindMerge({
318
315
  }
319
316
  }
320
317
  });
321
- var composableProps = ({ className, classNames, ...props }, { className: defaultClassNames, ...defaults } = {}) => ({
318
+ var composableProps = ({ className, classNames, role, ...props }, { classNames: defaultClassNames, ...defaults } = {}) => ({
319
+ // Default props.
322
320
  ...defaults,
321
+ // Spread supplied props; prefer explicit role, then defaults role, then 'none'.
322
+ role: role ?? defaults.role ?? "none",
323
323
  ...props,
324
+ // Compose classnames.
324
325
  className: mx(defaultClassNames, className, classNames)
325
326
  });
327
+ var COMPOSABLE = /* @__PURE__ */ Symbol.for("dxos.composable");
328
+ function slottable(render) {
329
+ const wrapped = (props, forwardedRef) => {
330
+ let warn = false;
331
+ if (props.asChild) {
332
+ try {
333
+ const child = Children.only(props.children);
334
+ if (isValidElement(child) && typeof child.type !== "string" && !child.type[COMPOSABLE]) {
335
+ warn = true;
336
+ log.warn("slot child is not composable; create it with composable() or slottable()", {
337
+ child: child.type.displayName ?? child.type.name
338
+ }, {
339
+ F: __dxlog_file,
340
+ L: 119,
341
+ S: this,
342
+ C: (f, a) => f(...a)
343
+ });
344
+ }
345
+ } catch {
346
+ }
347
+ }
348
+ const result = render(props, forwardedRef);
349
+ if (warn) {
350
+ return createElement("div", {
351
+ role: "none",
352
+ className: "dx-slot-warning"
353
+ }, result);
354
+ }
355
+ return result;
356
+ };
357
+ const component = forwardRef(wrapped);
358
+ component[COMPOSABLE] = true;
359
+ return component;
360
+ }
361
+ function composable(render) {
362
+ const component = forwardRef(render);
363
+ component[COMPOSABLE] = true;
364
+ return component;
365
+ }
326
366
 
327
- // src/fragments/size.ts
328
- var sizeWidthMap = /* @__PURE__ */ new Map([
329
- [
330
- 0,
331
- "w-0"
332
- ],
333
- [
334
- "px",
335
- "w-px"
336
- ],
337
- [
338
- 0.5,
339
- "w-0.5"
340
- ],
341
- [
342
- 1,
343
- "w-1"
344
- ],
345
- [
346
- 1.5,
347
- "w-1.5"
348
- ],
349
- [
350
- 2,
351
- "w-2"
352
- ],
353
- [
354
- 2.5,
355
- "w-2.5"
356
- ],
357
- [
358
- 3,
359
- "w-3"
360
- ],
361
- [
362
- 3.5,
363
- "w-3.5"
364
- ],
365
- [
366
- 4,
367
- "w-4"
368
- ],
369
- [
370
- 5,
371
- "w-5"
372
- ],
373
- [
374
- 6,
375
- "w-6"
376
- ],
377
- [
378
- 7,
379
- "w-7"
380
- ],
381
- [
382
- 8,
383
- "w-8"
384
- ],
385
- [
386
- 9,
387
- "w-9"
388
- ],
389
- [
390
- 10,
391
- "w-10"
392
- ],
393
- [
394
- 11,
395
- "w-11"
396
- ],
397
- [
398
- 12,
399
- "w-12"
400
- ],
401
- [
402
- 14,
403
- "w-14"
404
- ],
405
- [
406
- 16,
407
- "w-16"
408
- ],
409
- [
410
- 20,
411
- "w-20"
412
- ],
413
- [
414
- 24,
415
- "w-24"
416
- ],
417
- [
418
- 28,
419
- "w-28"
420
- ],
421
- [
422
- 32,
423
- "w-32"
424
- ],
425
- [
426
- 36,
427
- "w-36"
428
- ],
429
- [
430
- 40,
431
- "w-40"
432
- ],
433
- [
434
- 44,
435
- "w-44"
436
- ],
437
- [
438
- 48,
439
- "w-48"
440
- ],
441
- [
442
- 52,
443
- "w-52"
444
- ],
445
- [
446
- 56,
447
- "w-56"
448
- ],
449
- [
450
- 60,
451
- "w-60"
452
- ],
453
- [
454
- 64,
455
- "w-64"
456
- ],
457
- [
458
- 72,
459
- "w-72"
460
- ],
461
- [
462
- 80,
463
- "w-80"
464
- ],
465
- [
466
- 96,
467
- "w-96"
468
- ]
469
- ]);
470
- var sizeHeightMap = /* @__PURE__ */ new Map([
471
- [
472
- 0,
473
- "h-0"
474
- ],
475
- [
476
- "px",
477
- "h-px"
478
- ],
479
- [
480
- 0.5,
481
- "h-0.5"
482
- ],
483
- [
484
- 1,
485
- "h-1"
486
- ],
487
- [
488
- 1.5,
489
- "h-1.5"
490
- ],
491
- [
492
- 2,
493
- "h-2"
494
- ],
495
- [
496
- 2.5,
497
- "h-2.5"
498
- ],
499
- [
500
- 3,
501
- "h-3"
502
- ],
503
- [
504
- 3.5,
505
- "h-3.5"
506
- ],
507
- [
508
- 4,
509
- "h-4"
510
- ],
511
- [
512
- 5,
513
- "h-5"
514
- ],
515
- [
516
- 6,
517
- "h-6"
518
- ],
519
- [
520
- 7,
521
- "h-7"
522
- ],
523
- [
524
- 8,
525
- "h-8"
526
- ],
527
- [
528
- 9,
529
- "h-9"
530
- ],
531
- [
532
- 10,
533
- "h-10"
534
- ],
535
- [
536
- 11,
537
- "h-11"
538
- ],
539
- [
540
- 12,
541
- "h-12"
542
- ],
543
- [
544
- 14,
545
- "h-14"
546
- ],
547
- [
548
- 16,
549
- "h-16"
550
- ],
551
- [
552
- 20,
553
- "h-20"
554
- ],
555
- [
556
- 24,
557
- "h-24"
558
- ],
559
- [
560
- 28,
561
- "h-28"
562
- ],
563
- [
564
- 32,
565
- "h-32"
566
- ],
567
- [
568
- 36,
569
- "h-36"
570
- ],
571
- [
572
- 40,
573
- "h-40"
574
- ],
575
- [
576
- 44,
577
- "h-44"
578
- ],
579
- [
580
- 48,
581
- "h-48"
582
- ],
583
- [
584
- 52,
585
- "h-52"
586
- ],
587
- [
588
- 56,
589
- "h-56"
590
- ],
591
- [
592
- 60,
593
- "h-60"
594
- ],
595
- [
596
- 64,
597
- "h-64"
598
- ],
599
- [
600
- 72,
601
- "h-72"
602
- ],
603
- [
604
- 80,
605
- "h-80"
606
- ],
607
- [
608
- 96,
609
- "h-96"
610
- ]
611
- ]);
612
- var sizes = new Set(sizeWidthMap.keys());
613
- var getSizeHeight = sizeHeightMap.get.bind(sizeHeightMap);
614
- var getSizeWidth = sizeWidthMap.get.bind(sizeWidthMap);
615
- var getSize = (size) => mx(getSizeHeight(size), getSizeWidth(size));
616
- var computeSize = (value, defaultSize) => {
617
- if (sizes.has(value)) {
367
+ // src/util/size.ts
368
+ var sizeMap = {
369
+ 0: {
370
+ w: "w-0",
371
+ h: "h-0"
372
+ },
373
+ px: {
374
+ w: "w-px",
375
+ h: "h-px"
376
+ },
377
+ 0.5: {
378
+ w: "w-0.5",
379
+ h: "h-0.5"
380
+ },
381
+ 1: {
382
+ w: "w-1",
383
+ h: "h-1"
384
+ },
385
+ 1.5: {
386
+ w: "w-1.5",
387
+ h: "h-1.5"
388
+ },
389
+ 2: {
390
+ w: "w-2",
391
+ h: "h-2"
392
+ },
393
+ 2.5: {
394
+ w: "w-2.5",
395
+ h: "h-2.5"
396
+ },
397
+ 3: {
398
+ w: "w-3",
399
+ h: "h-3"
400
+ },
401
+ 3.5: {
402
+ w: "w-3.5",
403
+ h: "h-3.5"
404
+ },
405
+ 4: {
406
+ w: "w-4",
407
+ h: "h-4"
408
+ },
409
+ 5: {
410
+ w: "w-5",
411
+ h: "h-5"
412
+ },
413
+ 6: {
414
+ w: "w-6",
415
+ h: "h-6"
416
+ },
417
+ 7: {
418
+ w: "w-7",
419
+ h: "h-7"
420
+ },
421
+ 8: {
422
+ w: "w-8",
423
+ h: "h-8"
424
+ },
425
+ 9: {
426
+ w: "w-9",
427
+ h: "h-9"
428
+ },
429
+ 10: {
430
+ w: "w-10",
431
+ h: "h-10"
432
+ },
433
+ 11: {
434
+ w: "w-11",
435
+ h: "h-11"
436
+ },
437
+ 12: {
438
+ w: "w-12",
439
+ h: "h-12"
440
+ },
441
+ 14: {
442
+ w: "w-14",
443
+ h: "h-14"
444
+ },
445
+ 16: {
446
+ w: "w-16",
447
+ h: "h-16"
448
+ },
449
+ 20: {
450
+ w: "w-20",
451
+ h: "h-20"
452
+ },
453
+ 24: {
454
+ w: "w-24",
455
+ h: "h-24"
456
+ },
457
+ 28: {
458
+ w: "w-28",
459
+ h: "h-28"
460
+ },
461
+ 32: {
462
+ w: "w-32",
463
+ h: "h-32"
464
+ },
465
+ 36: {
466
+ w: "w-36",
467
+ h: "h-36"
468
+ },
469
+ 40: {
470
+ w: "w-40",
471
+ h: "h-40"
472
+ },
473
+ 44: {
474
+ w: "w-44",
475
+ h: "h-44"
476
+ },
477
+ 48: {
478
+ w: "w-48",
479
+ h: "h-48"
480
+ },
481
+ 52: {
482
+ w: "w-52",
483
+ h: "h-52"
484
+ },
485
+ 56: {
486
+ w: "w-56",
487
+ h: "h-56"
488
+ },
489
+ 60: {
490
+ w: "w-60",
491
+ h: "h-60"
492
+ },
493
+ 64: {
494
+ w: "w-64",
495
+ h: "h-64"
496
+ },
497
+ 72: {
498
+ w: "w-72",
499
+ h: "h-72"
500
+ },
501
+ 80: {
502
+ w: "w-80",
503
+ h: "h-80"
504
+ },
505
+ 96: {
506
+ w: "w-96",
507
+ h: "h-96"
508
+ }
509
+ };
510
+ var SIZE_VALUES = Object.keys(sizeMap).map((key) => key === "px" ? "px" : Number(key));
511
+ var getHeight = (size) => sizeMap[size]?.h;
512
+ var getWidth = (size) => sizeMap[size]?.w;
513
+ var getSize = (size) => mx(getHeight(size), getWidth(size));
514
+ var sizeValue = (size) => size === "px" ? 1 : size;
515
+ var sizeToRem = (size) => size === "px" ? "1px" : `${size * 0.25}rem`;
516
+ var iconSize = (size) => ({
517
+ "--icon-size": size ? sizeToRem(size) : "initial"
518
+ });
519
+ var snapSize = (value, defaultSize) => {
520
+ if (SIZE_VALUES.includes(value)) {
618
521
  return value;
619
522
  } else if (value <= 0) {
620
523
  return 0;
621
- } else if (value === 1) {
524
+ } else if (value < 0.5) {
622
525
  return "px";
623
526
  } else {
624
527
  const wholeSeries = Math.floor(value);
625
528
  const halfSeries = Math.floor(value * 2) / 2;
626
529
  const doubleSeries = Math.floor(value / 2) * 2;
627
530
  const quadrupleSeries = Math.floor(value / 4) * 4;
628
- if (sizes.has(halfSeries)) {
531
+ if (SIZE_VALUES.includes(halfSeries)) {
629
532
  return halfSeries;
630
- } else if (sizes.has(wholeSeries)) {
533
+ } else if (SIZE_VALUES.includes(wholeSeries)) {
631
534
  return wholeSeries;
632
- } else if (sizes.has(doubleSeries)) {
535
+ } else if (SIZE_VALUES.includes(doubleSeries)) {
633
536
  return doubleSeries;
634
- } else if (sizes.has(quadrupleSeries)) {
537
+ } else if (SIZE_VALUES.includes(quadrupleSeries)) {
635
538
  return quadrupleSeries;
636
539
  } else {
637
540
  return defaultSize;
638
541
  }
639
542
  }
640
543
  };
641
- var sizeValue = (size) => size === "px" ? 1 : size;
642
-
643
- // src/fragments/text.ts
644
- var textBlockWidth = "w-full max-w-text-content mx-auto";
645
- var descriptionTextPrimary = "text-sm font-normal text-base-surface-text";
646
- var descriptionMessage = "text-description border border-dashed border-separator rounded-sm p-4";
647
544
 
648
- // src/fragments/valence.ts
545
+ // src/util/valence.ts
649
546
  var textValence = (valence) => {
650
547
  switch (valence) {
651
548
  case "success":
@@ -677,12 +574,12 @@ var messageValence = (valence) => {
677
574
  var avatarRoot = ({ size = 10, inGroup }, ...etc) => mx("relative inline-flex shrink-0", getSize(size), inGroup && (size === "px" || size <= 3 ? "-mr-1" : "-mr-2"), ...etc);
678
575
  var avatarLabel = ({ srOnly }, ...etc) => mx(srOnly && "sr-only", ...etc);
679
576
  var avatarDescription = ({ srOnly }, ...etc) => mx("text-description", srOnly && "sr-only", ...etc);
680
- var avatarFrame = ({ variant }, ...etc) => mx("w-full h-full bg-(--surface-bg)", variant === "circle" ? "rounded-full" : "rounded-sm", ...etc);
577
+ var avatarFrame = ({ variant }, ...etc) => mx("h-full w-full bg-(--surface-bg)", variant === "circle" ? "rounded-full" : "rounded-sm", ...etc);
681
578
  var avatarStatusIcon = ({ status, size = 3 }, ...etc) => mx("absolute bottom-0 end-0", getSize(size), status === "inactive" ? "text-amber-400 dark:text-amber-300" : status === "active" ? "text-emerald-400 dark:text-emerald-300" : "text-neutral-400 dark:text-neutral-300", ...etc);
682
579
  var avatarRing = ({ status, variant, animation }, ...etc) => mx("absolute inset-0 border-2", variant === "circle" ? "rounded-full" : "rounded-sm", status === "current" ? "border-primary-400 dark:border-primary-500" : status === "active" ? "border-emerald-400 dark:border-emerald-400" : status === "error" ? "border-rose-400 dark:border-rose-500" : status === "warning" ? "border-amber-400 dark:border-amber-500" : status === "inactive" ? "border-separator" : status === "internal" ? "border-fuchsia-600" : "border-[color:var(--surface-bg)]", animation === "pulse" ? "animate-halo-pulse" : "", ...etc);
683
580
  var avatarFallbackText = (_props, ...etc) => mx("fill-white", ...etc);
684
581
  var avatarGroup = (_props, ...etc) => mx("inline-flex items-center", ...etc);
685
- var avatarGroupLabel = ({ size, srOnly }, ...etc) => mx(srOnly ? "sr-only" : "rounded-full truncate text-sm leading-none py-1 px-2 relative z-[1] flex items-center justify-center", size && getSizeHeight(size), ...etc);
582
+ var avatarGroupLabel = ({ size, srOnly }, ...etc) => mx(srOnly ? "sr-only" : "rounded-full truncate text-sm leading-none py-1 px-2 relative z-[1] flex items-center justify-center", size && getHeight(size), ...etc);
686
583
  var avatarGroupDescription = ({ srOnly }, ...etc) => mx(srOnly ? "sr-only" : "text-description", ...etc);
687
584
  var avatarTheme = {
688
585
  root: avatarRoot,
@@ -712,12 +609,12 @@ var breadcrumbTheme = {
712
609
  };
713
610
 
714
611
  // src/theme/components/card.ts
715
- var cardRoot = ({ border, fullWidth }, ...etc) => mx("dx-card group/card relative flex flex-col w-full min-h-(--dx-rail-item) dx-card-min-width overflow-hidden", border && "bg-card-surface border border-separator dark:border-subdued-separator rounded-xs dx-focus-ring-group-y-indicator", fullWidth && "max-w-none!", ...etc);
716
- var cardToolbar = ({ coarse }, ...etc) => mx("dx-card__toolbar dx-density-fine bg-transparent col-span-3 !grid grid-cols-subgrid [contain:none]", coarse && "grid-cols-[var(--dx-l0-avatar-size)_minmax(0,1fr)_var(--dx-rail-item)]", ...etc);
612
+ var cardRoot = ({ border, fullWidth }, ...etc) => mx("dx-card dx-card-min-width dx-card-max-width min-h-(--dx-rail-item) group/card relative overflow-hidden", border && "bg-card-surface border border-separator dark:border-subdued-separator rounded-xs dx-focus-ring-group-y-indicator", fullWidth && "max-w-none!", ...etc);
613
+ var cardToolbar = (_, ...etc) => mx("dx-card__toolbar dx-density-fine bg-transparent p-0! gap-0! col-span-3 grid! grid-cols-subgrid! [contain:none]", ...etc);
717
614
  var cardTitle = (_props, ...etc) => mx("dx-card__title grow truncate", ...etc);
718
615
  var cardContent = (_props, ...etc) => mx("dx-card__content contents [&>:last-child]:pb-1", ...etc);
719
616
  var cardHeading = ({ variant = "default" }, ...etc) => mx("dx-card__heading", variant === "default" && "py-1", variant === "subtitle" && "py-2 text-xs text-description font-medium uppercase", ...etc);
720
- var cardText = ({ variant = "default", truncate: _truncate }, ...etc) => mx("dx-card__text flex overflow-hidden", variant === "default" && "py-1", variant === "description" && "py-1.5", ...etc);
617
+ var cardText = ({ variant = "default", truncate: _truncate }, ...etc) => mx("dx-card__text items-center overflow-hidden", variant === "default" && "py-1", variant === "description" && "py-1.5 text-description", ...etc);
721
618
  var cardTextSpan = ({ variant = "default", truncate }, ...etc) => mx(variant === "description" && "text-sm text-description line-clamp-3", truncate && "truncate", ...etc);
722
619
  var cardPoster = (_props, ...etc) => mx("dx-card__poster col-span-3 max-h-[200px]", ...etc);
723
620
  var cardPosterIcon = (_props, ...etc) => mx("dx-card__poster-icon col-span-3 grid place-items-center bg-input-surface text-subdued max-h-[200px]", ...etc);
@@ -725,7 +622,7 @@ var cardAction = (_props, ...etc) => mx("dx-card__acztion col-span-3 !grid grid-
725
622
  var cardActionLabel = (_props, ...etc) => mx("dx-card__action-label min-w-0 flex-1 truncate", ...etc);
726
623
  var cardLink = (_props, ...etc) => mx("dx-card__link col-span-3 !grid grid-cols-subgrid group p-0! dx-button dx-focus-ring min-h-1!", ...etc);
727
624
  var cardLinkLabel = (_props, ...etc) => mx("dx-card__link-label min-w-0 flex-1 truncate", ...etc);
728
- var cardIconBlock = (_props, ...etc) => mx("dx-card__icon-block grid h-[var(--dx-rail-item)] w-[var(--dx-rail-item)] place-items-center", ...etc);
625
+ var cardIconBlock = ({ padding }, ...etc) => mx("dx-card__icon-block grid h-[var(--dx-rail-item)] w-[var(--dx-rail-item)] place-items-center", padding && "[&>*]:p-1", ...etc);
729
626
  var cardTheme = {
730
627
  root: cardRoot,
731
628
  toolbar: cardToolbar,
@@ -749,7 +646,7 @@ var staticDefaultButtonColors = "bg-input-surface text-input-surface-text";
749
646
  var defaultButtonColors = mx(staticDefaultButtonColors, "data-[state=open]:bg-input-surface aria-pressed:text-accent-text aria-pressed:bg-base-surface aria-checked:text-accent-text aria-checked:bg-base-surface");
750
647
  var ghostButtonColors = mx(ghostHover, "hover:text-inherit data-[state=open]:bg-input-surface aria-pressed:text-accent-text aria-pressed:bg-base-surface aria-checked:text-accent-text aria-checked:bg-base-surface");
751
648
  var buttonRoot = (_props, ...etc) => {
752
- return mx("dx-button dx-focus-ring group max-w-full [&_span]:truncate", ...etc);
649
+ return mx("dx-button dx-focus-ring group [&_span]:truncate", ...etc);
753
650
  };
754
651
  var buttonGroup = (_props, ...etc) => {
755
652
  return mx("inline-flex rounded-xs [&>:first-child]:rounded-w-sm [&>:last-child]:rounded-ie-sm [&>button]:relative", ...etc);
@@ -760,7 +657,7 @@ var buttonTheme = {
760
657
  };
761
658
 
762
659
  // src/theme/components/dialog.ts
763
- var sizeMap = {
660
+ var sizeMap2 = {
764
661
  sm: "md:max-w-[24rem]",
765
662
  md: "md:max-w-[32rem]!",
766
663
  lg: "md:max-w-[40rem]!",
@@ -768,10 +665,10 @@ var sizeMap = {
768
665
  };
769
666
  var dialogOverlay = (_props, ...etc) => mx("dx-dialog__overlay", ...etc);
770
667
  var dialogContent = ({ inOverlayLayout, size = "md" }, ...etc) => {
771
- return mx("@container", "dx-dialog__content dx-focus-ring dx-modal-surface dx-density-coarse py-4", !inOverlayLayout && "fixed z-50 top-[50%] left-[50%] -translate-x-[50%] -translate-y-[50%]", sizeMap[size], ...etc);
668
+ return mx("@container", "dx-dialog__content dx-focus-ring dx-modal-surface dx-density-coarse py-4", !inOverlayLayout && "fixed z-50 top-[50%] left-[50%] -translate-x-[50%] -translate-y-[50%]", sizeMap2[size], ...etc);
772
669
  };
773
670
  var dialogHeader = (_props, ...etc) => mx("dx-dialog__header flex pb-4 items-center justify-between", ...etc);
774
- var dialogBody = (_props, ...etc) => mx("dx-dialog__body flex flex-col h-full py-2 gap-2", ...etc);
671
+ var dialogBody = (_props, ...etc) => mx("dx-dialog__body", ...etc);
775
672
  var dialogActionBar = (_props, ...etc) => mx("dx-dialog__actionbar flex items-center pt-4 gap-2 dx-density-coarse", ...etc);
776
673
  var dialogTitle = ({ srOnly }, ...etc) => mx("dx-dialog__title", srOnly && "sr-only", ...etc);
777
674
  var dialogDescription = ({ srOnly }, ...etc) => mx("dx-dialog__description", "text-description", srOnly && "sr-only", ...etc);
@@ -785,15 +682,24 @@ var dialogTheme = {
785
682
  description: dialogDescription
786
683
  };
787
684
 
685
+ // src/theme/components/focus.ts
686
+ var focusRing = ({ border }, ...etc) => mx("dx-ring-pseudo outline-hidden", "focus:after:ring-neutral-focus-indicator", "data-[focus-state=active]:after:ring-neutral-focus-indicator", "data-[focus-state=error]:after:ring-rose-500", border && "border border-separator", ...etc);
687
+ var focusTheme = {
688
+ group: focusRing,
689
+ item: focusRing
690
+ };
691
+
788
692
  // src/theme/components/icon.ts
789
- var iconRoot = ({ size }, etc) => mx("shrink-0 h-[1em] w-[1em] text-[var(--icons-color,currentColor)]", size && getSize(size), etc);
693
+ var iconRoot = ({ size }, etc) => {
694
+ return mx("shrink-0 text-[var(--icons-color,currentColor)]", size ? getSize(size) : "[width:var(--icon-size,var(--dx-default-icons-size))] [height:var(--icon-size,var(--dx-default-icons-size))]", etc);
695
+ };
790
696
  var iconTheme = {
791
697
  root: iconRoot
792
698
  };
793
699
 
794
700
  // src/theme/components/icon-button.ts
795
701
  var iconButtonRoot = ({ iconOnly }, ...etc) => {
796
- return mx("gap-2", iconOnly && "p-icon-button-padding min-h-0", ...etc);
702
+ return mx("px-1.5", !iconOnly && "gap-2", ...etc);
797
703
  };
798
704
  var iconButtonTheme = {
799
705
  root: iconButtonRoot
@@ -821,7 +727,7 @@ var sharedSubduedInputStyles = (props) => [
821
727
  "py-0 w-full bg-transparent text-current placeholder-placeholder",
822
728
  '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
823
729
  props.density === "fine" ? fineBlockSize : coarseBlockSize,
824
- subduedFocus,
730
+ "dx-focus-subdued",
825
731
  props.disabled && staticDisabled
826
732
  ];
827
733
  var sharedDefaultInputStyles = (props) => [
@@ -839,23 +745,20 @@ var sharedStaticInputStyles = (props) => [
839
745
  props.focused && "bg-attention-surface",
840
746
  inputValence(props.validationValence),
841
747
  props.disabled && staticDisabled,
842
- props.focused && staticFocusRing
748
+ props.focused && "dx-focus-static"
843
749
  ];
844
- var inputInput = (props, ...etc) => props.variant === "subdued" ? mx(...sharedSubduedInputStyles(props), ...etc) : props.variant === "static" ? mx(...sharedStaticInputStyles(props), ...etc) : mx(...sharedDefaultInputStyles(props), !props.disabled && focusRing, inputValence(props.validationValence), ...etc);
845
- var inputTextArea = (props, ...etc) => inputInput(props, ...[
846
- "-mb-1.5",
847
- ...etc
848
- ]);
750
+ var inputInput = (props, ...etc) => props.variant === "subdued" ? mx(...sharedSubduedInputStyles(props), ...etc) : props.variant === "static" ? mx(...sharedStaticInputStyles(props), ...etc) : mx(...sharedDefaultInputStyles(props), !props.disabled && "dx-focus-ring", inputValence(props.validationValence), ...etc);
751
+ var inputTextArea = (props, ...etc) => inputInput(props, ...etc);
849
752
  var inputCheckbox = ({ size = 5 }, ...etc) => mx("dx-checkbox dx-focus-ring", getSize(size), ...etc);
850
- var inputCheckboxIndicator = ({ size = 5, checked }, ...etc) => mx(getSize(computeSize(sizeValue(size) * 0.65, 4)), !checked && "invisible", ...etc);
753
+ var inputCheckboxIndicator = ({ size = 5, checked }, ...etc) => mx(getSize(snapSize(sizeValue(size) * 0.65, 4)), !checked && "invisible", ...etc);
851
754
  var inputSwitch = ({ size = 5, disabled }, ...etc) => mx(
852
- getSizeHeight(size),
853
- getSizeWidth(computeSize(sizeValue(size) * 1.75, 9)),
755
+ getHeight(size),
756
+ getWidth(snapSize(sizeValue(size) * 1.75, 9)),
854
757
  booleanInputSurface,
855
758
  !disabled && booleanInputSurfaceHover,
856
759
  // TODO(burdon): Added m-1 margin to make 40px width to align with 40px icon button.
857
760
  "cursor-pointer shrink-0 rounded-full px-1 mx-1 relative",
858
- focusRing,
761
+ "dx-focus-ring",
859
762
  ...etc
860
763
  );
861
764
  var inputSwitchThumb = ({ size = 5 }, ...etc) => mx(getSize(size === "px" ? "px" : size - 2), "block bg-white rounded-full transition-transform duration-100 will-change-transform data-[state=checked]:translate-x-[100%]", ...etc);
@@ -881,7 +784,7 @@ var inputTheme = {
881
784
  };
882
785
 
883
786
  // src/theme/components/link.ts
884
- var linkRoot = ({ variant }, ...etc) => mx("underline decoration-1 underline-offset-2 transition-color rounded-xs", variant === "neutral" ? "text-inherit hover:opacity-90 visited:text-inherit visited:hover:opacity-90" : "text-accent-text hover:text-accent-text-hover visited:text-accent-text visited:hover:text-accent-text-hover", focusRing, ...etc);
787
+ var linkRoot = ({ variant }, ...etc) => mx("underline decoration-1 underline-offset-2 transition-color rounded-xs", variant === "neutral" ? "text-inherit hover:opacity-90 visited:text-inherit visited:hover:opacity-90" : "text-accent-text hover:text-accent-text-hover visited:text-accent-text visited:hover:text-accent-text-hover", "dx-focus-ring", ...etc);
885
788
  var linkTheme = {
886
789
  root: linkRoot
887
790
  };
@@ -890,9 +793,9 @@ var linkTheme = {
890
793
  var listRoot = (_, ...etc) => mx(...etc);
891
794
  var listItem = ({ collapsible }, ...etc) => mx(!collapsible && "flex", ...etc);
892
795
  var listItemEndcap = ({ density }, ...etc) => mx(density === "fine" ? getSize(8) : getSize(10), "shrink-0 flex items-center justify-center", ...etc);
893
- var listItemHeading = ({ density }, ...etc) => mx(densityBlockSize(density), "flex items-center", ...etc);
796
+ var listItemHeading = ({ density }, ...etc) => mx(densityBlockSize(density), "flex items-center overflow-hidden [&>span]:truncate", ...etc);
894
797
  var listItemDragHandleIcon = (_props, ...etc) => mx(getSize(5), "mt-2.5", ...etc);
895
- var listItemOpenTrigger = ({ density }, ...etc) => mx("w-5 rounded-sm flex justify-center items-center", densityBlockSize(density), ghostHover, focusRing, ...etc);
798
+ var listItemOpenTrigger = ({ density }, ...etc) => mx("w-5 rounded-sm flex justify-center items-center", densityBlockSize(density), ghostHover, "dx-focus-ring", ...etc);
896
799
  var listItemOpenTriggerIcon = (_props, ...etc) => {
897
800
  return mx(getSize(5), ...etc);
898
801
  };
@@ -931,7 +834,7 @@ var menuContent = ({ elevation }, ...etc) => mx("dx-modal-surface w-48 rounded-s
931
834
  elevation: "positioned"
932
835
  }), ...etc);
933
836
  var menuViewport = (_props, ...etc) => mx("rounded-sm p-1 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto", ...etc);
934
- var menuItem = (_props, ...etc) => mx("flex cursor-pointer select-none items-center gap-2 rounded-xs px-2 py-2 text-sm", "data-[highlighted]:bg-hover-surface", subduedFocus, dataDisabled, ...etc);
837
+ var menuItem = (_props, ...etc) => mx("flex cursor-pointer select-none items-center gap-2 rounded-xs px-2 py-2 text-sm", "hover:bg-hover-surface data-[highlighted]:bg-hover-surface", "dx-focus-subdued", dataDisabled, ...etc);
935
838
  var menuSeparator = (_props, ...etc) => mx("my-1 mx-2 h-px bg-separator", ...etc);
936
839
  var menuGroupLabel = (_props, ...etc) => mx("text-description", "select-none px-2 py-2", ...etc);
937
840
  var menuArrow = (_props, ...etc) => mx("fill-separator", ...etc);
@@ -952,7 +855,7 @@ var messageHeader = (_, etc) => {
952
855
  return mx("col-span-2 grid grid-cols-subgrid items-center", etc);
953
856
  };
954
857
  var messageTitle = (_, etc) => {
955
- return mx("col-start-2 text-lg gap-trim-sm [&>svg]:inline-block", etc);
858
+ return mx("col-start-2 gap-trim-sm [&>svg]:inline-block", etc);
956
859
  };
957
860
  var messageIcon = (_, etc) => {
958
861
  return mx("col-start-1", etc);
@@ -974,15 +877,8 @@ var popoverContent = ({ elevation }, ...etc) => mx("dx-modal-surface border bord
974
877
  }), surfaceZIndex({
975
878
  elevation,
976
879
  level: "menu"
977
- }), focusRing, ...etc);
978
- var popoverViewport = ({ constrainBlock, constrainInline }, ...etc) => mx(
979
- "flex flex-col min-h-0 min-w-popover-min-width",
980
- (constrainBlock || constrainInline) && "overflow-hidden",
981
- // Ensures it respects available height from Radix (or 100dvh).
982
- constrainBlock && "max-h-[min(var(--radix-popover-content-available-height),calc(100dvh-var(--spacing-screen-border)*2))]",
983
- constrainInline && "max-w-(--radix-popover-content-available-width)",
984
- ...etc
985
- );
880
+ }), "dx-focus-ring", ...etc);
881
+ var popoverViewport = ({ constrainBlock, constrainInline }, ...etc) => mx("flex flex-col min-h-0 min-w-popover-min-width", (constrainBlock || constrainInline) && "overflow-hidden", constrainBlock && "max-h-(--radix-popover-content-available-height)", constrainBlock && "max-h-[min(var(--radix-popover-content-available-height),calc(100dvh-var(--spacing-screen-border)*2))]", constrainInline && "max-w-(--radix-popover-content-available-width)", ...etc);
986
882
  var popoverArrow = (_props, ...etc) => mx("fill-separator", ...etc);
987
883
  var popoverTheme = {
988
884
  content: popoverContent,
@@ -991,40 +887,63 @@ var popoverTheme = {
991
887
  };
992
888
 
993
889
  // src/theme/components/scroll-area.ts
994
- var scrollAreaRoot = ({ orientation, margin, thin }, ...etc) => mx(
995
- "overflow-hidden",
996
- orientation === "vertical" && "group/scroll-v dx-container",
997
- orientation === "horizontal" && "group/scroll-h dx-container",
998
- orientation === "all" && "group/scroll-all dx-container",
999
- // TODO(burdon): Audit composition.
890
+ var scrollbar = {
891
+ thin: {
892
+ size: 4,
893
+ padding: 4
894
+ },
895
+ coarse: {
896
+ size: 8,
897
+ padding: 8
898
+ }
899
+ };
900
+ var scrollAreaRoot = ({ orientation }, ...etc) => mx(
901
+ // Expand
902
+ "dx-container",
903
+ orientation === "vertical" && "group/scroll-v flex flex-col",
904
+ orientation === "horizontal" && "group/scroll-h flex",
905
+ orientation === "all" && "group/scroll-all",
1000
906
  // Apply col-span-full only when inside a Column.Root grid (detected via dx-column marker).
1001
907
  "[.dx-column_&]:col-span-full",
1002
- // NOTE: Uses --gutter CSS variable
1003
- // If contained within Column.Root grid, the gutter is set by that component.
1004
- margin && [
1005
- orientation === "vertical" && (thin ? "pl-[var(--gutter,4px)] pr-[calc(var(--gutter,4px)-4px)]" : "pl-[var(--gutter,8px)] pr-[calc(var(--gutter,8px)-8px)]"),
1006
- orientation === "horizontal" && (thin ? "py-[var(--gutter,4px)]" : "py-[var(--gutter,8px)]"),
1007
- orientation === "all" && (thin ? "pl-[var(--gutter,4px)] py-[var(--gutter,8px)]" : "pl-[var(--gutter,8px)] py-[var(--gutter,8px)]")
1008
- ],
1009
908
  ...etc
1010
909
  );
1011
- var scrollAreaViewport = ({ orientation, autoHide, padding, snap, thin }, ...etc) => mx("h-full w-full", orientation === "vertical" && "flex flex-col overflow-y-scroll", orientation === "horizontal" && "flex overflow-x-scroll", orientation === "all" && "overflow-scroll", thin ? "[&::-webkit-scrollbar]:w-[4px] [&::-webkit-scrollbar]:h-[4px]" : "[&::-webkit-scrollbar]:w-[8px] [&::-webkit-scrollbar]:h-[8px]", "[&::-webkit-scrollbar-corner]:bg-transparent", "[&::-webkit-scrollbar-track]:bg-transparent", "[&::-webkit-scrollbar-thumb]:rounded-none", autoHide ? [
1012
- orientation === "vertical" && "group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1013
- orientation === "horizontal" && "group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1014
- orientation === "all" && "group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
1015
- ] : [
1016
- orientation === "vertical" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1017
- orientation === "horizontal" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1018
- orientation === "all" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
1019
- ], padding && [
1020
- orientation === "vertical" && "px-[4px]",
1021
- orientation === "horizontal" && "pb-[4px]",
1022
- orientation === "all" && "pl-[4px] pb-[4px]"
1023
- ], snap && [
1024
- orientation === "vertical" && "snap-y snap-mandatory",
1025
- orientation === "horizontal" && "snap-x snap-mandatory",
1026
- orientation === "all" && "snap-both snap-mandatory"
1027
- ], ...etc);
910
+ var scrollAreaViewport = ({ orientation, centered, padding, snap, thin, autoHide }, ...etc) => {
911
+ return mx(
912
+ "h-full w-full",
913
+ orientation === "vertical" && "flex flex-col overflow-y-scroll",
914
+ orientation === "horizontal" && "flex overflow-x-scroll overscroll-x-contain",
915
+ orientation === "all" && "overflow-scroll",
916
+ "[&::-webkit-scrollbar-corner]:bg-transparent",
917
+ "[&::-webkit-scrollbar-track]:bg-transparent",
918
+ "[&::-webkit-scrollbar-thumb]:rounded-none",
919
+ "[&::-webkit-scrollbar]:w-[var(--scroll-width)] [&::-webkit-scrollbar]:h-[var(--scroll-width)]",
920
+ // If contained within Column.Root grid the gutter is set by that component (--gutter CSS variable).
921
+ // If centered, left padding compensates for scrollbar width so content is visually centered.
922
+ (orientation === "vertical" || orientation === "all") && (padding ? [
923
+ centered ? "pl-[var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))]" : "pl-[var(--gutter,0)]",
924
+ "pr-[calc(var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))-var(--scroll-width))]"
925
+ ] : centered && "pl-[var(--scroll-width)]"),
926
+ (orientation === "horizontal" || orientation === "all") && (padding ? [
927
+ centered && "pt-[calc(var(--scroll-width)+var(--scroll-padding))]",
928
+ "pb-[var(--scroll-padding)]"
929
+ ] : centered && "pt-[var(--scroll-width)]"),
930
+ snap && [
931
+ orientation === "vertical" && "snap-y snap-mandatory",
932
+ orientation === "horizontal" && "snap-x snap-mandatory",
933
+ orientation === "all" && "snap-both snap-mandatory"
934
+ ],
935
+ autoHide ? [
936
+ orientation === "vertical" && "group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
937
+ orientation === "horizontal" && "group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
938
+ orientation === "all" && "group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
939
+ ] : [
940
+ orientation === "vertical" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
941
+ orientation === "horizontal" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
942
+ orientation === "all" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
943
+ ],
944
+ ...etc
945
+ );
946
+ };
1028
947
  var scrollAreaTheme = {
1029
948
  root: scrollAreaRoot,
1030
949
  viewport: scrollAreaViewport
@@ -1040,7 +959,7 @@ var selectContent = ({ elevation }, ...etc) => {
1040
959
  }), ...etc);
1041
960
  };
1042
961
  var selectViewport = (_props, ...etc) => mx(...etc);
1043
- var selectItem = (_props, ...etc) => mx("flex items-center min-h-[2rem] px-3 py-1 gap-2", "text-base-surface-text leading-none select-none outline-hidden", "[&>svg]:invisible [&[data-state=checked]>svg]:visible", ghostHighlighted, ...etc);
962
+ var selectItem = (_props, ...etc) => mx("flex items-center min-h-[2rem] px-3 py-1 gap-2", "text-base-surface-text leading-none select-none outline-hidden", "[&>svg]:invisible [&[data-state=checked]>svg]:visible", "dx-highlighted", ...etc);
1044
963
  var selectItemIndicator = (_props, ...etc) => mx("items-center", ...etc);
1045
964
  var selectArrow = (_props, ...etc) => mx("fill-separator", ...etc);
1046
965
  var selectSeparator = (_props, ...etc) => mx("self-stretch border-b my-1 border-separator", ...etc);
@@ -1076,8 +995,8 @@ var skeletonTheme = {
1076
995
  };
1077
996
 
1078
997
  // src/theme/components/status.ts
1079
- var statusRoot = ({ variant = "default" }, ...etc) => mx("h-1 relative bg-hover-overlay rounded-full overflow-hidden", variant === "main-bottom" ? "w-full block" : "inline-20 inline-block", ...etc);
1080
- var statusBar = ({ indeterminate, variant = "default" }, ...etc) => mx("absolute inset-y-0 block rounded-full", variant === "main-bottom" ? "bg-accent-surface" : "bg-un-accent", indeterminate ? "animate-progress-indeterminate" : "start-0", ...etc);
998
+ var statusRoot = ({ variant = "default" }, ...etc) => mx("h-1 relative rounded-full overflow-hidden", variant === "main-bottom" ? "w-full block" : "inline-20 inline-block bg-base-surface", ...etc);
999
+ var statusBar = ({ variant = "default", indeterminate }, ...etc) => mx("absolute inset-y-0 block rounded-full", variant === "main-bottom" ? "bg-composer-300" : "bg-un-accent", indeterminate ? "animate-progress-indeterminate" : "start-0", ...etc);
1081
1000
  var statusTheme = {
1082
1001
  root: statusRoot,
1083
1002
  bar: statusBar
@@ -1098,7 +1017,7 @@ var toastViewport = (_props, ...etc) => mx(
1098
1017
  );
1099
1018
  var toastRoot = (_props, ...etc) => mx("dx-modal-surface rounded-md flex p-2 gap-2", surfaceShadow({
1100
1019
  elevation: "toast"
1101
- }), "radix-state-open:animate-toast-slide-in-bottom md:radix-state-open:animate-toast-slide-in-right", "radix-state-closed:animate-toast-hide", "radix-swipe-end:animate-toast-swipe-out", "translate-x-radix-toast-swipe-move-x", "radix-swipe-cancel:translate-x-0 radix-swipe-cancel:duration-200 radix-swipe-cancel:ease-[ease]", focusRing, ...etc);
1020
+ }), "radix-state-open:animate-toast-slide-in-bottom md:radix-state-open:animate-toast-slide-in-right", "radix-state-closed:animate-toast-hide", "radix-swipe-end:animate-toast-swipe-out", "translate-x-radix-toast-swipe-move-x", "radix-swipe-cancel:translate-x-0 radix-swipe-cancel:duration-200 radix-swipe-cancel:ease-[ease]", "dx-focus-ring", ...etc);
1102
1021
  var toastBody = (_props, ...etc) => mx("grow flex flex-col gap-1 justify-center pl-2", ...etc);
1103
1022
  var toastActions = (_props, ...etc) => mx("shrink-0 flex flex-col gap-1 justify-center", ...etc);
1104
1023
  var toastTitle = ({ srOnly }, ...etc) => mx("shrink-0 font-medium", srOnly && "sr-only", ...etc);
@@ -1117,18 +1036,11 @@ var toolbarLayout = "w-full shrink-0 flex flex-nowrap p-1 gap-1 items-center ove
1117
1036
  var toolbarRoot = ({ density, disabled, layoutManaged }, ...etc) => {
1118
1037
  return mx("bg-toolbar-surface dx-toolbar", density === "coarse" && "h-(--dx-rail-size) px-3!", disabled && "*:opacity-20", !layoutManaged && toolbarLayout, ...etc);
1119
1038
  };
1120
- var toolbarInner = ({ layoutManaged }, ...etc) => {
1121
- return mx(!layoutManaged && [
1122
- "flex gap-1",
1123
- textBlockWidth
1124
- ], ...etc);
1125
- };
1126
1039
  var toolbarText = (_, ...etc) => {
1127
- return mx("grow truncate items-center", textBlockWidth, ...etc);
1040
+ return mx("px-2 grow truncate items-center", ...etc);
1128
1041
  };
1129
1042
  var toolbarTheme = {
1130
1043
  root: toolbarRoot,
1131
- inner: toolbarInner,
1132
1044
  text: toolbarText
1133
1045
  };
1134
1046
 
@@ -1181,7 +1093,7 @@ var levelStyles = /* @__PURE__ */ new Map([
1181
1093
  ]
1182
1094
  ]);
1183
1095
  var treegridRoot = (_, ...etc) => mx("grid", ...etc);
1184
- var treegridRow = ({ level = 1 }, ...etc) => mx("contents", levelStyles.get(Math.min(Math.max(Math.round(level), 1), 8)), ...etc);
1096
+ var treegridRow = ({ level = 1 }, ...etc) => mx(levelStyles.get(Math.min(Math.max(Math.round(level), 1), 8)), ...etc);
1185
1097
  var treegridCell = ({ indent }, ...etc) => mx(indent && "indent", ...etc);
1186
1098
  var treegridTheme = {
1187
1099
  root: treegridRoot,
@@ -1189,44 +1101,42 @@ var treegridTheme = {
1189
1101
  cell: treegridCell
1190
1102
  };
1191
1103
 
1192
- // src/theme/theme.ts
1193
- import { getDeep } from "@dxos/util";
1194
-
1195
1104
  // src/theme/primitives/column.ts
1196
- var columnRoot = (_, ...etc) => mx("dx-column w-full min-w-0 grid", ...etc);
1197
- var columnRow = (_, ...etc) => mx("col-span-3 grid grid-cols-subgrid", ...etc);
1198
- var columnSegment = (_, ...etc) => mx("col-start-2 col-span-1 min-w-0", ...etc);
1105
+ var columnRoot = (_, ...etc) => {
1106
+ return mx("dx-column grid", ...etc);
1107
+ };
1108
+ var columnContent = (_, ...etc) => {
1109
+ return mx("col-span-full grid grid-cols-subgrid min-h-0 [&>:not(.dx-container)]:col-start-2", ...etc);
1110
+ };
1111
+ var columnViewport = (_, ...etc) => {
1112
+ return mx(...etc);
1113
+ };
1114
+ var columnRow = ({ fullWidth, center }, ...etc) => {
1115
+ return mx("col-span-3 grid grid-cols-subgrid", fullWidth ? "col-span-3" : center && "col-start-2 col-span-1", ...etc);
1116
+ };
1199
1117
  var columnTheme = {
1200
1118
  root: columnRoot,
1201
- row: columnRow,
1202
- segment: columnSegment
1119
+ content: columnContent,
1120
+ viewport: columnViewport,
1121
+ row: columnRow
1203
1122
  };
1204
1123
 
1205
1124
  // src/theme/primitives/panel.ts
1125
+ var sizes = {
1126
+ lg: "h-(--dx-topbar-size)",
1127
+ md: "h-(--dx-toolbar-size)",
1128
+ sm: "h-(--dx-statusbar-size)"
1129
+ };
1206
1130
  var panelRoot = (_, ...etc) => mx(
1207
1131
  // prettier-ignore
1208
- "h-full w-full grid grid-cols-[100%] overflow-hidden",
1132
+ "dx-container grid grid-cols-[100%] overflow-hidden",
1209
1133
  // Add uncategorized children to content slot.
1210
1134
  "[&>*:not([data-slot])]:[grid-area:content]",
1211
1135
  ...etc
1212
1136
  );
1213
- var panelToolbar = (_, ...etc) => mx(
1214
- // prettier-ignore
1215
- "[grid-area:toolbar]",
1216
- "border-b border-subdued-separator relative",
1217
- "[.dx-main-mobile-layout_&]:px-3",
1218
- ...etc
1219
- );
1220
- var panelContent = (_, ...etc) => mx(
1221
- // prettier-ignore
1222
- "[grid-area:content] overflow-hidden min-h-0",
1223
- ...etc
1224
- );
1225
- var panelStatusbar = (_, ...etc) => mx(
1226
- // prettier-ignore
1227
- "[grid-area:statusbar]",
1228
- ...etc
1229
- );
1137
+ var panelToolbar = ({ size = "md" }, ...etc) => mx("[grid-area:toolbar]", "shrink-0", sizes[size], ...etc);
1138
+ var panelContent = (_, ...etc) => mx("[grid-area:content] min-h-0", ...etc);
1139
+ var panelStatusbar = ({ size = "md" }, ...etc) => mx("[grid-area:statusbar]", "shrink-0", sizes[size], ...etc);
1230
1140
  var panelTheme = {
1231
1141
  root: panelRoot,
1232
1142
  toolbar: panelToolbar,
@@ -1235,6 +1145,7 @@ var panelTheme = {
1235
1145
  };
1236
1146
 
1237
1147
  // src/theme/theme.ts
1148
+ import { getDeep } from "@dxos/util";
1238
1149
  var defaultTheme = {
1239
1150
  themeName: () => "default",
1240
1151
  //
@@ -1250,6 +1161,7 @@ var defaultTheme = {
1250
1161
  button: buttonTheme,
1251
1162
  card: cardTheme,
1252
1163
  dialog: dialogTheme,
1164
+ focus: focusTheme,
1253
1165
  icon: iconTheme,
1254
1166
  iconButton: iconButtonTheme,
1255
1167
  input: inputTheme,
@@ -1307,8 +1219,9 @@ export {
1307
1219
  cardTheme,
1308
1220
  coarseBlockSize,
1309
1221
  coarseDimensions,
1222
+ columnTheme,
1223
+ composable,
1310
1224
  composableProps,
1311
- computeSize,
1312
1225
  dataDisabled,
1313
1226
  defaultButtonColors,
1314
1227
  defaultTheme,
@@ -1326,19 +1239,16 @@ export {
1326
1239
  dialogTitle,
1327
1240
  fineBlockSize,
1328
1241
  fineDimensions,
1329
- focusRing,
1242
+ focusTheme,
1330
1243
  getHashHue,
1331
1244
  getHashStyles,
1245
+ getHeight,
1332
1246
  getSize,
1333
- getSizeHeight,
1334
- getSizeWidth,
1335
1247
  getStyles,
1248
+ getWidth,
1336
1249
  ghostButtonColors,
1337
1250
  ghostFocusWithin,
1338
- ghostHighlighted,
1339
1251
  ghostHover,
1340
- ghostSelected,
1341
- ghostSelectedContainerMd,
1342
1252
  groupHoverControlItemWithTransition,
1343
1253
  hoverableControlItem,
1344
1254
  hoverableControls,
@@ -1350,6 +1260,7 @@ export {
1350
1260
  iconButtonRoot,
1351
1261
  iconButtonTheme,
1352
1262
  iconRoot,
1263
+ iconSize,
1353
1264
  iconTheme,
1354
1265
  inputTextLabel,
1355
1266
  inputTheme,
@@ -1387,6 +1298,7 @@ export {
1387
1298
  mx,
1388
1299
  osTranslations,
1389
1300
  palette,
1301
+ panelTheme,
1390
1302
  popoverArrow,
1391
1303
  popoverContent,
1392
1304
  popoverTheme,
@@ -1396,6 +1308,7 @@ export {
1396
1308
  scrollAreaRoot,
1397
1309
  scrollAreaTheme,
1398
1310
  scrollAreaViewport,
1311
+ scrollbar,
1399
1312
  selectArrow,
1400
1313
  selectContent,
1401
1314
  selectItem,
@@ -1406,23 +1319,23 @@ export {
1406
1319
  selectViewport,
1407
1320
  separatorRoot,
1408
1321
  separatorTheme,
1322
+ sizeToRem,
1409
1323
  sizeValue,
1410
1324
  skeletonRoot,
1411
1325
  skeletonTheme,
1326
+ slottable,
1327
+ snapSize,
1412
1328
  splitterTheme,
1413
1329
  staticDefaultButtonColors,
1414
1330
  staticDisabled,
1415
- staticFocusRing,
1416
1331
  statusBar,
1417
1332
  statusRoot,
1418
1333
  statusTheme,
1419
- subduedFocus,
1420
1334
  subtleHover,
1421
1335
  surfaceShadow,
1422
1336
  surfaceZIndex,
1423
1337
  tagRoot,
1424
1338
  tagTheme,
1425
- textBlockWidth,
1426
1339
  textValence,
1427
1340
  toastActions,
1428
1341
  toastBody,
@@ -1431,7 +1344,6 @@ export {
1431
1344
  toastTheme,
1432
1345
  toastTitle,
1433
1346
  toastViewport,
1434
- toolbarInner,
1435
1347
  toolbarLayout,
1436
1348
  toolbarRoot,
1437
1349
  toolbarText,