@dxos/ui-theme 0.8.4-main.d05673bc65 → 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 (122) hide show
  1. package/dist/lib/browser/index.mjs +349 -430
  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 +349 -430
  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} +53 -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} +53 -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/fragments/index.d.ts +0 -4
  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.d.ts +3 -0
  31. package/dist/types/src/theme/components/icon.d.ts.map +1 -1
  32. package/dist/types/src/theme/components/index.d.ts +1 -0
  33. package/dist/types/src/theme/components/index.d.ts.map +1 -1
  34. package/dist/types/src/theme/components/input.d.ts.map +1 -1
  35. package/dist/types/src/theme/components/link.d.ts.map +1 -1
  36. package/dist/types/src/theme/components/list.d.ts.map +1 -1
  37. package/dist/types/src/theme/components/message.d.ts.map +1 -1
  38. package/dist/types/src/theme/components/popover.d.ts.map +1 -1
  39. package/dist/types/src/theme/components/scroll-area.d.ts +12 -2
  40. package/dist/types/src/theme/components/scroll-area.d.ts.map +1 -1
  41. package/dist/types/src/theme/components/select.d.ts.map +1 -1
  42. package/dist/types/src/theme/components/status.d.ts +1 -1
  43. package/dist/types/src/theme/components/status.d.ts.map +1 -1
  44. package/dist/types/src/theme/components/toast.d.ts.map +1 -1
  45. package/dist/types/src/theme/components/toolbar.d.ts +0 -1
  46. package/dist/types/src/theme/components/toolbar.d.ts.map +1 -1
  47. package/dist/types/src/theme/components/tooltip.d.ts.map +1 -1
  48. package/dist/types/src/theme/index.d.ts +1 -0
  49. package/dist/types/src/theme/index.d.ts.map +1 -1
  50. package/dist/types/src/theme/primitives/column.d.ts +8 -3
  51. package/dist/types/src/theme/primitives/column.d.ts.map +1 -1
  52. package/dist/types/src/theme/primitives/panel.d.ts +9 -5
  53. package/dist/types/src/theme/primitives/panel.d.ts.map +1 -1
  54. package/dist/types/src/theme/theme.d.ts.map +1 -1
  55. package/dist/types/src/util/elevation.d.ts.map +1 -0
  56. package/dist/types/src/util/index.d.ts +3 -0
  57. package/dist/types/src/util/index.d.ts.map +1 -1
  58. package/dist/types/src/util/mx.d.ts +28 -284
  59. package/dist/types/src/util/mx.d.ts.map +1 -1
  60. package/dist/types/src/util/size.d.ts +27 -0
  61. package/dist/types/src/util/size.d.ts.map +1 -0
  62. package/dist/types/src/util/valence.d.ts.map +1 -0
  63. package/dist/types/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +8 -4
  65. package/src/css/components/{focus-ring.css → focus.css} +15 -1
  66. package/src/css/components/icon.css +9 -0
  67. package/src/css/components/selected.css +12 -2
  68. package/src/css/integrations/codemirror.css +3 -2
  69. package/src/css/integrations/tldraw.css +1 -0
  70. package/src/css/layout/main.css +0 -7
  71. package/src/css/layout/size.css +8 -31
  72. package/src/css/theme/palette.css +8 -0
  73. package/src/css/theme/semantic.css +16 -11
  74. package/src/css/theme/spacing.css +35 -18
  75. package/src/css/utilities.css +65 -3
  76. package/src/fragments/AUDIT.md +58 -0
  77. package/src/fragments/index.ts +1 -5
  78. package/src/fragments/text.ts +0 -5
  79. package/src/index.ts +1 -1
  80. package/src/{theme.css → main.css} +9 -6
  81. package/src/plugins/ThemePlugin.ts +10 -21
  82. package/src/plugins/main.css +45 -0
  83. package/src/theme/components/avatar.ts +3 -4
  84. package/src/theme/components/button.ts +1 -1
  85. package/src/theme/components/card.ts +12 -8
  86. package/src/theme/components/dialog.ts +1 -2
  87. package/src/theme/components/focus.ts +33 -0
  88. package/src/theme/components/icon.ts +13 -4
  89. package/src/theme/components/index.ts +1 -0
  90. package/src/theme/components/input.ts +10 -25
  91. package/src/theme/components/link.ts +1 -2
  92. package/src/theme/components/list.ts +3 -3
  93. package/src/theme/components/menu.ts +3 -3
  94. package/src/theme/components/message.ts +2 -3
  95. package/src/theme/components/popover.ts +3 -4
  96. package/src/theme/components/scroll-area.ts +47 -39
  97. package/src/theme/components/select.ts +1 -2
  98. package/src/theme/components/status.ts +5 -5
  99. package/src/theme/components/toast.ts +2 -3
  100. package/src/theme/components/toolbar.ts +1 -7
  101. package/src/theme/components/tooltip.ts +1 -2
  102. package/src/theme/index.ts +1 -0
  103. package/src/theme/primitives/column.ts +27 -10
  104. package/src/theme/primitives/panel.ts +19 -25
  105. package/src/theme/theme.ts +2 -0
  106. package/src/util/index.ts +3 -0
  107. package/src/util/mx.ts +104 -6
  108. package/src/util/size.ts +103 -0
  109. package/dist/plugin/node-cjs/theme.css.map +0 -7
  110. package/dist/plugin/node-esm/theme.css.map +0 -7
  111. package/dist/types/src/fragments/elevation.d.ts.map +0 -1
  112. package/dist/types/src/fragments/focus.d.ts +0 -4
  113. package/dist/types/src/fragments/focus.d.ts.map +0 -1
  114. package/dist/types/src/fragments/size.d.ts +0 -7
  115. package/dist/types/src/fragments/size.d.ts.map +0 -1
  116. package/dist/types/src/fragments/valence.d.ts.map +0 -1
  117. package/src/fragments/focus.ts +0 -11
  118. package/src/fragments/size.ts +0 -117
  119. /package/dist/types/src/{fragments → util}/elevation.d.ts +0 -0
  120. /package/dist/types/src/{fragments → util}/valence.d.ts +0 -0
  121. /package/src/{fragments → util}/elevation.ts +0 -0
  122. /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,22 +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
107
  // src/util/hash-styles.ts
109
108
  var neutral = {
110
109
  hue: "neutral",
@@ -268,7 +267,10 @@ var getHashHue = (id) => {
268
267
  var getHash = (id) => id.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0);
269
268
 
270
269
  // src/util/mx.ts
270
+ import { Children, createElement, forwardRef, isValidElement } from "react";
271
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";
272
274
  var mx = extendTailwindMerge({
273
275
  extend: {
274
276
  classGroups: {
@@ -313,334 +315,233 @@ var mx = extendTailwindMerge({
313
315
  }
314
316
  }
315
317
  });
316
- var composableProps = ({ className, classNames, ...props }, { className: defaultClassNames, ...defaults } = {}) => ({
318
+ var composableProps = ({ className, classNames, ...props }, { classNames: defaultClassNames, ...defaults } = {}) => ({
319
+ // Default props.
317
320
  ...defaults,
321
+ // Spread supplied props.
318
322
  ...props,
323
+ // Compose classnames.
319
324
  className: mx(defaultClassNames, className, classNames)
320
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
+ }
321
365
 
322
- // src/fragments/size.ts
323
- var sizeWidthMap = /* @__PURE__ */ new Map([
324
- [
325
- 0,
326
- "w-0"
327
- ],
328
- [
329
- "px",
330
- "w-px"
331
- ],
332
- [
333
- 0.5,
334
- "w-0.5"
335
- ],
336
- [
337
- 1,
338
- "w-1"
339
- ],
340
- [
341
- 1.5,
342
- "w-1.5"
343
- ],
344
- [
345
- 2,
346
- "w-2"
347
- ],
348
- [
349
- 2.5,
350
- "w-2.5"
351
- ],
352
- [
353
- 3,
354
- "w-3"
355
- ],
356
- [
357
- 3.5,
358
- "w-3.5"
359
- ],
360
- [
361
- 4,
362
- "w-4"
363
- ],
364
- [
365
- 5,
366
- "w-5"
367
- ],
368
- [
369
- 6,
370
- "w-6"
371
- ],
372
- [
373
- 7,
374
- "w-7"
375
- ],
376
- [
377
- 8,
378
- "w-8"
379
- ],
380
- [
381
- 9,
382
- "w-9"
383
- ],
384
- [
385
- 10,
386
- "w-10"
387
- ],
388
- [
389
- 11,
390
- "w-11"
391
- ],
392
- [
393
- 12,
394
- "w-12"
395
- ],
396
- [
397
- 14,
398
- "w-14"
399
- ],
400
- [
401
- 16,
402
- "w-16"
403
- ],
404
- [
405
- 20,
406
- "w-20"
407
- ],
408
- [
409
- 24,
410
- "w-24"
411
- ],
412
- [
413
- 28,
414
- "w-28"
415
- ],
416
- [
417
- 32,
418
- "w-32"
419
- ],
420
- [
421
- 36,
422
- "w-36"
423
- ],
424
- [
425
- 40,
426
- "w-40"
427
- ],
428
- [
429
- 44,
430
- "w-44"
431
- ],
432
- [
433
- 48,
434
- "w-48"
435
- ],
436
- [
437
- 52,
438
- "w-52"
439
- ],
440
- [
441
- 56,
442
- "w-56"
443
- ],
444
- [
445
- 60,
446
- "w-60"
447
- ],
448
- [
449
- 64,
450
- "w-64"
451
- ],
452
- [
453
- 72,
454
- "w-72"
455
- ],
456
- [
457
- 80,
458
- "w-80"
459
- ],
460
- [
461
- 96,
462
- "w-96"
463
- ]
464
- ]);
465
- var sizeHeightMap = /* @__PURE__ */ new Map([
466
- [
467
- 0,
468
- "h-0"
469
- ],
470
- [
471
- "px",
472
- "h-px"
473
- ],
474
- [
475
- 0.5,
476
- "h-0.5"
477
- ],
478
- [
479
- 1,
480
- "h-1"
481
- ],
482
- [
483
- 1.5,
484
- "h-1.5"
485
- ],
486
- [
487
- 2,
488
- "h-2"
489
- ],
490
- [
491
- 2.5,
492
- "h-2.5"
493
- ],
494
- [
495
- 3,
496
- "h-3"
497
- ],
498
- [
499
- 3.5,
500
- "h-3.5"
501
- ],
502
- [
503
- 4,
504
- "h-4"
505
- ],
506
- [
507
- 5,
508
- "h-5"
509
- ],
510
- [
511
- 6,
512
- "h-6"
513
- ],
514
- [
515
- 7,
516
- "h-7"
517
- ],
518
- [
519
- 8,
520
- "h-8"
521
- ],
522
- [
523
- 9,
524
- "h-9"
525
- ],
526
- [
527
- 10,
528
- "h-10"
529
- ],
530
- [
531
- 11,
532
- "h-11"
533
- ],
534
- [
535
- 12,
536
- "h-12"
537
- ],
538
- [
539
- 14,
540
- "h-14"
541
- ],
542
- [
543
- 16,
544
- "h-16"
545
- ],
546
- [
547
- 20,
548
- "h-20"
549
- ],
550
- [
551
- 24,
552
- "h-24"
553
- ],
554
- [
555
- 28,
556
- "h-28"
557
- ],
558
- [
559
- 32,
560
- "h-32"
561
- ],
562
- [
563
- 36,
564
- "h-36"
565
- ],
566
- [
567
- 40,
568
- "h-40"
569
- ],
570
- [
571
- 44,
572
- "h-44"
573
- ],
574
- [
575
- 48,
576
- "h-48"
577
- ],
578
- [
579
- 52,
580
- "h-52"
581
- ],
582
- [
583
- 56,
584
- "h-56"
585
- ],
586
- [
587
- 60,
588
- "h-60"
589
- ],
590
- [
591
- 64,
592
- "h-64"
593
- ],
594
- [
595
- 72,
596
- "h-72"
597
- ],
598
- [
599
- 80,
600
- "h-80"
601
- ],
602
- [
603
- 96,
604
- "h-96"
605
- ]
606
- ]);
607
- var sizes = new Set(sizeWidthMap.keys());
608
- var getSizeHeight = sizeHeightMap.get.bind(sizeHeightMap);
609
- var getSizeWidth = sizeWidthMap.get.bind(sizeWidthMap);
610
- var getSize = (size) => mx(getSizeHeight(size), getSizeWidth(size));
611
- var computeSize = (value, defaultSize) => {
612
- 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)) {
613
520
  return value;
614
521
  } else if (value <= 0) {
615
522
  return 0;
616
- } else if (value === 1) {
523
+ } else if (value < 0.5) {
617
524
  return "px";
618
525
  } else {
619
526
  const wholeSeries = Math.floor(value);
620
527
  const halfSeries = Math.floor(value * 2) / 2;
621
528
  const doubleSeries = Math.floor(value / 2) * 2;
622
529
  const quadrupleSeries = Math.floor(value / 4) * 4;
623
- if (sizes.has(halfSeries)) {
530
+ if (SIZE_VALUES.includes(halfSeries)) {
624
531
  return halfSeries;
625
- } else if (sizes.has(wholeSeries)) {
532
+ } else if (SIZE_VALUES.includes(wholeSeries)) {
626
533
  return wholeSeries;
627
- } else if (sizes.has(doubleSeries)) {
534
+ } else if (SIZE_VALUES.includes(doubleSeries)) {
628
535
  return doubleSeries;
629
- } else if (sizes.has(quadrupleSeries)) {
536
+ } else if (SIZE_VALUES.includes(quadrupleSeries)) {
630
537
  return quadrupleSeries;
631
538
  } else {
632
539
  return defaultSize;
633
540
  }
634
541
  }
635
542
  };
636
- var sizeValue = (size) => size === "px" ? 1 : size;
637
-
638
- // src/fragments/text.ts
639
- var textBlockWidth = "w-full max-w-text-content mx-auto";
640
- var descriptionTextPrimary = "text-sm font-normal text-base-surface-text";
641
- var descriptionMessage = "text-description border border-dashed border-separator rounded-sm p-4";
642
543
 
643
- // src/fragments/valence.ts
544
+ // src/util/valence.ts
644
545
  var textValence = (valence) => {
645
546
  switch (valence) {
646
547
  case "success":
@@ -672,12 +573,12 @@ var messageValence = (valence) => {
672
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);
673
574
  var avatarLabel = ({ srOnly }, ...etc) => mx(srOnly && "sr-only", ...etc);
674
575
  var avatarDescription = ({ srOnly }, ...etc) => mx("text-description", srOnly && "sr-only", ...etc);
675
- 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);
676
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);
677
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);
678
579
  var avatarFallbackText = (_props, ...etc) => mx("fill-white", ...etc);
679
580
  var avatarGroup = (_props, ...etc) => mx("inline-flex items-center", ...etc);
680
- 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);
681
582
  var avatarGroupDescription = ({ srOnly }, ...etc) => mx(srOnly ? "sr-only" : "text-description", ...etc);
682
583
  var avatarTheme = {
683
584
  root: avatarRoot,
@@ -707,8 +608,8 @@ var breadcrumbTheme = {
707
608
  };
708
609
 
709
610
  // src/theme/components/card.ts
710
- 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);
711
- 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);
712
613
  var cardTitle = (_props, ...etc) => mx("dx-card__title grow truncate", ...etc);
713
614
  var cardContent = (_props, ...etc) => mx("dx-card__content contents [&>:last-child]:pb-1", ...etc);
714
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);
@@ -720,7 +621,7 @@ var cardAction = (_props, ...etc) => mx("dx-card__acztion col-span-3 !grid grid-
720
621
  var cardActionLabel = (_props, ...etc) => mx("dx-card__action-label min-w-0 flex-1 truncate", ...etc);
721
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);
722
623
  var cardLinkLabel = (_props, ...etc) => mx("dx-card__link-label min-w-0 flex-1 truncate", ...etc);
723
- 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);
724
625
  var cardTheme = {
725
626
  root: cardRoot,
726
627
  toolbar: cardToolbar,
@@ -744,7 +645,7 @@ var staticDefaultButtonColors = "bg-input-surface text-input-surface-text";
744
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");
745
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");
746
647
  var buttonRoot = (_props, ...etc) => {
747
- 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);
748
649
  };
749
650
  var buttonGroup = (_props, ...etc) => {
750
651
  return mx("inline-flex rounded-xs [&>:first-child]:rounded-w-sm [&>:last-child]:rounded-ie-sm [&>button]:relative", ...etc);
@@ -755,7 +656,7 @@ var buttonTheme = {
755
656
  };
756
657
 
757
658
  // src/theme/components/dialog.ts
758
- var sizeMap = {
659
+ var sizeMap2 = {
759
660
  sm: "md:max-w-[24rem]",
760
661
  md: "md:max-w-[32rem]!",
761
662
  lg: "md:max-w-[40rem]!",
@@ -763,10 +664,10 @@ var sizeMap = {
763
664
  };
764
665
  var dialogOverlay = (_props, ...etc) => mx("dx-dialog__overlay", ...etc);
765
666
  var dialogContent = ({ inOverlayLayout, size = "md" }, ...etc) => {
766
- 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);
767
668
  };
768
669
  var dialogHeader = (_props, ...etc) => mx("dx-dialog__header flex pb-4 items-center justify-between", ...etc);
769
- 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);
770
671
  var dialogActionBar = (_props, ...etc) => mx("dx-dialog__actionbar flex items-center pt-4 gap-2 dx-density-coarse", ...etc);
771
672
  var dialogTitle = ({ srOnly }, ...etc) => mx("dx-dialog__title", srOnly && "sr-only", ...etc);
772
673
  var dialogDescription = ({ srOnly }, ...etc) => mx("dx-dialog__description", "text-description", srOnly && "sr-only", ...etc);
@@ -780,8 +681,17 @@ var dialogTheme = {
780
681
  description: dialogDescription
781
682
  };
782
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
+
783
691
  // src/theme/components/icon.ts
784
- 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
+ };
785
695
  var iconTheme = {
786
696
  root: iconRoot
787
697
  };
@@ -816,7 +726,7 @@ var sharedSubduedInputStyles = (props) => [
816
726
  "py-0 w-full bg-transparent text-current placeholder-placeholder",
817
727
  '[[data-drag-autoscroll="active"]_&]:pointer-events-none',
818
728
  props.density === "fine" ? fineBlockSize : coarseBlockSize,
819
- subduedFocus,
729
+ "dx-focus-subdued",
820
730
  props.disabled && staticDisabled
821
731
  ];
822
732
  var sharedDefaultInputStyles = (props) => [
@@ -834,23 +744,20 @@ var sharedStaticInputStyles = (props) => [
834
744
  props.focused && "bg-attention-surface",
835
745
  inputValence(props.validationValence),
836
746
  props.disabled && staticDisabled,
837
- props.focused && staticFocusRing
747
+ props.focused && "dx-focus-static"
838
748
  ];
839
- 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);
840
- var inputTextArea = (props, ...etc) => inputInput(props, ...[
841
- "-mb-1.5",
842
- ...etc
843
- ]);
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);
844
751
  var inputCheckbox = ({ size = 5 }, ...etc) => mx("dx-checkbox dx-focus-ring", getSize(size), ...etc);
845
- 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);
846
753
  var inputSwitch = ({ size = 5, disabled }, ...etc) => mx(
847
- getSizeHeight(size),
848
- getSizeWidth(computeSize(sizeValue(size) * 1.75, 9)),
754
+ getHeight(size),
755
+ getWidth(snapSize(sizeValue(size) * 1.75, 9)),
849
756
  booleanInputSurface,
850
757
  !disabled && booleanInputSurfaceHover,
851
758
  // TODO(burdon): Added m-1 margin to make 40px width to align with 40px icon button.
852
759
  "cursor-pointer shrink-0 rounded-full px-1 mx-1 relative",
853
- focusRing,
760
+ "dx-focus-ring",
854
761
  ...etc
855
762
  );
856
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);
@@ -876,7 +783,7 @@ var inputTheme = {
876
783
  };
877
784
 
878
785
  // src/theme/components/link.ts
879
- 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);
880
787
  var linkTheme = {
881
788
  root: linkRoot
882
789
  };
@@ -887,7 +794,7 @@ var listItem = ({ collapsible }, ...etc) => mx(!collapsible && "flex", ...etc);
887
794
  var listItemEndcap = ({ density }, ...etc) => mx(density === "fine" ? getSize(8) : getSize(10), "shrink-0 flex items-center justify-center", ...etc);
888
795
  var listItemHeading = ({ density }, ...etc) => mx(densityBlockSize(density), "flex items-center", ...etc);
889
796
  var listItemDragHandleIcon = (_props, ...etc) => mx(getSize(5), "mt-2.5", ...etc);
890
- 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);
891
798
  var listItemOpenTriggerIcon = (_props, ...etc) => {
892
799
  return mx(getSize(5), ...etc);
893
800
  };
@@ -926,7 +833,7 @@ var menuContent = ({ elevation }, ...etc) => mx("dx-modal-surface w-48 rounded-s
926
833
  elevation: "positioned"
927
834
  }), ...etc);
928
835
  var menuViewport = (_props, ...etc) => mx("rounded-sm p-1 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto", ...etc);
929
- 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);
930
837
  var menuSeparator = (_props, ...etc) => mx("my-1 mx-2 h-px bg-separator", ...etc);
931
838
  var menuGroupLabel = (_props, ...etc) => mx("text-description", "select-none px-2 py-2", ...etc);
932
839
  var menuArrow = (_props, ...etc) => mx("fill-separator", ...etc);
@@ -947,7 +854,7 @@ var messageHeader = (_, etc) => {
947
854
  return mx("col-span-2 grid grid-cols-subgrid items-center", etc);
948
855
  };
949
856
  var messageTitle = (_, etc) => {
950
- 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);
951
858
  };
952
859
  var messageIcon = (_, etc) => {
953
860
  return mx("col-start-1", etc);
@@ -969,15 +876,8 @@ var popoverContent = ({ elevation }, ...etc) => mx("dx-modal-surface border bord
969
876
  }), surfaceZIndex({
970
877
  elevation,
971
878
  level: "menu"
972
- }), focusRing, ...etc);
973
- var popoverViewport = ({ constrainBlock, constrainInline }, ...etc) => mx(
974
- "flex flex-col min-h-0 min-w-popover-min-width",
975
- (constrainBlock || constrainInline) && "overflow-hidden",
976
- // Ensures it respects available height from Radix (or 100dvh).
977
- constrainBlock && "max-h-[min(var(--radix-popover-content-available-height),calc(100dvh-var(--spacing-screen-border)*2))]",
978
- constrainInline && "max-w-(--radix-popover-content-available-width)",
979
- ...etc
980
- );
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);
981
881
  var popoverArrow = (_props, ...etc) => mx("fill-separator", ...etc);
982
882
  var popoverTheme = {
983
883
  content: popoverContent,
@@ -986,40 +886,63 @@ var popoverTheme = {
986
886
  };
987
887
 
988
888
  // src/theme/components/scroll-area.ts
989
- var scrollAreaRoot = ({ orientation, margin, thin }, ...etc) => mx(
990
- "overflow-hidden",
991
- orientation === "vertical" && "group/scroll-v dx-container",
992
- orientation === "horizontal" && "group/scroll-h dx-container",
993
- orientation === "all" && "group/scroll-all dx-container",
994
- // 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",
995
905
  // Apply col-span-full only when inside a Column.Root grid (detected via dx-column marker).
996
906
  "[.dx-column_&]:col-span-full",
997
- // NOTE: Uses --gutter CSS variable
998
- // If contained within Column.Root grid, the gutter is set by that component.
999
- margin && [
1000
- orientation === "vertical" && (thin ? "pl-[var(--gutter,4px)] pr-[calc(var(--gutter,4px)-4px)]" : "pl-[var(--gutter,8px)] pr-[calc(var(--gutter,8px)-8px)]"),
1001
- orientation === "horizontal" && (thin ? "py-[var(--gutter,4px)]" : "py-[var(--gutter,8px)]"),
1002
- orientation === "all" && (thin ? "pl-[var(--gutter,4px)] py-[var(--gutter,8px)]" : "pl-[var(--gutter,8px)] py-[var(--gutter,8px)]")
1003
- ],
1004
907
  ...etc
1005
908
  );
1006
- 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 ? [
1007
- orientation === "vertical" && "group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1008
- orientation === "horizontal" && "group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1009
- orientation === "all" && "group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
1010
- ] : [
1011
- orientation === "vertical" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1012
- orientation === "horizontal" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb",
1013
- orientation === "all" && "[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb"
1014
- ], padding && [
1015
- orientation === "vertical" && "px-[4px]",
1016
- orientation === "horizontal" && "pb-[4px]",
1017
- orientation === "all" && "pl-[4px] pb-[4px]"
1018
- ], snap && [
1019
- orientation === "vertical" && "snap-y snap-mandatory",
1020
- orientation === "horizontal" && "snap-x snap-mandatory",
1021
- orientation === "all" && "snap-both snap-mandatory"
1022
- ], ...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
+ };
1023
946
  var scrollAreaTheme = {
1024
947
  root: scrollAreaRoot,
1025
948
  viewport: scrollAreaViewport
@@ -1071,8 +994,8 @@ var skeletonTheme = {
1071
994
  };
1072
995
 
1073
996
  // src/theme/components/status.ts
1074
- 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);
1075
- 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);
1076
999
  var statusTheme = {
1077
1000
  root: statusRoot,
1078
1001
  bar: statusBar
@@ -1093,7 +1016,7 @@ var toastViewport = (_props, ...etc) => mx(
1093
1016
  );
1094
1017
  var toastRoot = (_props, ...etc) => mx("dx-modal-surface rounded-md flex p-2 gap-2", surfaceShadow({
1095
1018
  elevation: "toast"
1096
- }), "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);
1097
1020
  var toastBody = (_props, ...etc) => mx("grow flex flex-col gap-1 justify-center pl-2", ...etc);
1098
1021
  var toastActions = (_props, ...etc) => mx("shrink-0 flex flex-col gap-1 justify-center", ...etc);
1099
1022
  var toastTitle = ({ srOnly }, ...etc) => mx("shrink-0 font-medium", srOnly && "sr-only", ...etc);
@@ -1112,18 +1035,11 @@ var toolbarLayout = "w-full shrink-0 flex flex-nowrap p-1 gap-1 items-center ove
1112
1035
  var toolbarRoot = ({ density, disabled, layoutManaged }, ...etc) => {
1113
1036
  return mx("bg-toolbar-surface dx-toolbar", density === "coarse" && "h-(--dx-rail-size) px-3!", disabled && "*:opacity-20", !layoutManaged && toolbarLayout, ...etc);
1114
1037
  };
1115
- var toolbarInner = ({ layoutManaged }, ...etc) => {
1116
- return mx(!layoutManaged && [
1117
- "flex gap-1",
1118
- textBlockWidth
1119
- ], ...etc);
1120
- };
1121
1038
  var toolbarText = (_, ...etc) => {
1122
- return mx("grow truncate items-center", textBlockWidth, ...etc);
1039
+ return mx("px-2 grow truncate items-center", ...etc);
1123
1040
  };
1124
1041
  var toolbarTheme = {
1125
1042
  root: toolbarRoot,
1126
- inner: toolbarInner,
1127
1043
  text: toolbarText
1128
1044
  };
1129
1045
 
@@ -1184,44 +1100,42 @@ var treegridTheme = {
1184
1100
  cell: treegridCell
1185
1101
  };
1186
1102
 
1187
- // src/theme/theme.ts
1188
- import { getDeep } from "@dxos/util";
1189
-
1190
1103
  // src/theme/primitives/column.ts
1191
- var columnRoot = (_, ...etc) => mx("dx-column w-full min-w-0 grid", ...etc);
1192
- var columnRow = (_, ...etc) => mx("col-span-3 grid grid-cols-subgrid", ...etc);
1193
- 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
+ };
1194
1116
  var columnTheme = {
1195
1117
  root: columnRoot,
1196
- row: columnRow,
1197
- segment: columnSegment
1118
+ content: columnContent,
1119
+ viewport: columnViewport,
1120
+ row: columnRow
1198
1121
  };
1199
1122
 
1200
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
+ };
1201
1129
  var panelRoot = (_, ...etc) => mx(
1202
1130
  // prettier-ignore
1203
- "h-full w-full grid grid-cols-[100%] overflow-hidden",
1131
+ "dx-container grid grid-cols-[100%] overflow-hidden",
1204
1132
  // Add uncategorized children to content slot.
1205
1133
  "[&>*:not([data-slot])]:[grid-area:content]",
1206
1134
  ...etc
1207
1135
  );
1208
- var panelToolbar = (_, ...etc) => mx(
1209
- // prettier-ignore
1210
- "[grid-area:toolbar]",
1211
- "border-b border-subdued-separator relative",
1212
- "[.dx-main-mobile-layout_&]:px-3",
1213
- ...etc
1214
- );
1215
- var panelContent = (_, ...etc) => mx(
1216
- // prettier-ignore
1217
- "[grid-area:content] overflow-hidden min-h-0",
1218
- ...etc
1219
- );
1220
- var panelStatusbar = (_, ...etc) => mx(
1221
- // prettier-ignore
1222
- "[grid-area:statusbar]",
1223
- ...etc
1224
- );
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);
1225
1139
  var panelTheme = {
1226
1140
  root: panelRoot,
1227
1141
  toolbar: panelToolbar,
@@ -1230,6 +1144,7 @@ var panelTheme = {
1230
1144
  };
1231
1145
 
1232
1146
  // src/theme/theme.ts
1147
+ import { getDeep } from "@dxos/util";
1233
1148
  var defaultTheme = {
1234
1149
  themeName: () => "default",
1235
1150
  //
@@ -1245,6 +1160,7 @@ var defaultTheme = {
1245
1160
  button: buttonTheme,
1246
1161
  card: cardTheme,
1247
1162
  dialog: dialogTheme,
1163
+ focus: focusTheme,
1248
1164
  icon: iconTheme,
1249
1165
  iconButton: iconButtonTheme,
1250
1166
  input: inputTheme,
@@ -1302,8 +1218,9 @@ export {
1302
1218
  cardTheme,
1303
1219
  coarseBlockSize,
1304
1220
  coarseDimensions,
1221
+ columnTheme,
1222
+ composable,
1305
1223
  composableProps,
1306
- computeSize,
1307
1224
  dataDisabled,
1308
1225
  defaultButtonColors,
1309
1226
  defaultTheme,
@@ -1321,13 +1238,13 @@ export {
1321
1238
  dialogTitle,
1322
1239
  fineBlockSize,
1323
1240
  fineDimensions,
1324
- focusRing,
1241
+ focusTheme,
1325
1242
  getHashHue,
1326
1243
  getHashStyles,
1244
+ getHeight,
1327
1245
  getSize,
1328
- getSizeHeight,
1329
- getSizeWidth,
1330
1246
  getStyles,
1247
+ getWidth,
1331
1248
  ghostButtonColors,
1332
1249
  ghostFocusWithin,
1333
1250
  ghostHover,
@@ -1342,6 +1259,7 @@ export {
1342
1259
  iconButtonRoot,
1343
1260
  iconButtonTheme,
1344
1261
  iconRoot,
1262
+ iconSize,
1345
1263
  iconTheme,
1346
1264
  inputTextLabel,
1347
1265
  inputTheme,
@@ -1379,6 +1297,7 @@ export {
1379
1297
  mx,
1380
1298
  osTranslations,
1381
1299
  palette,
1300
+ panelTheme,
1382
1301
  popoverArrow,
1383
1302
  popoverContent,
1384
1303
  popoverTheme,
@@ -1388,6 +1307,7 @@ export {
1388
1307
  scrollAreaRoot,
1389
1308
  scrollAreaTheme,
1390
1309
  scrollAreaViewport,
1310
+ scrollbar,
1391
1311
  selectArrow,
1392
1312
  selectContent,
1393
1313
  selectItem,
@@ -1398,23 +1318,23 @@ export {
1398
1318
  selectViewport,
1399
1319
  separatorRoot,
1400
1320
  separatorTheme,
1321
+ sizeToRem,
1401
1322
  sizeValue,
1402
1323
  skeletonRoot,
1403
1324
  skeletonTheme,
1325
+ slottable,
1326
+ snapSize,
1404
1327
  splitterTheme,
1405
1328
  staticDefaultButtonColors,
1406
1329
  staticDisabled,
1407
- staticFocusRing,
1408
1330
  statusBar,
1409
1331
  statusRoot,
1410
1332
  statusTheme,
1411
- subduedFocus,
1412
1333
  subtleHover,
1413
1334
  surfaceShadow,
1414
1335
  surfaceZIndex,
1415
1336
  tagRoot,
1416
1337
  tagTheme,
1417
- textBlockWidth,
1418
1338
  textValence,
1419
1339
  toastActions,
1420
1340
  toastBody,
@@ -1423,7 +1343,6 @@ export {
1423
1343
  toastTheme,
1424
1344
  toastTitle,
1425
1345
  toastViewport,
1426
- toolbarInner,
1427
1346
  toolbarLayout,
1428
1347
  toolbarRoot,
1429
1348
  toolbarText,