@dxos/ui-theme 0.8.4-main.c85a9c8dae → 0.8.4-main.e250131250

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