@dxos/ui-theme 0.10.0 → 0.11.1

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 (57) hide show
  1. package/dist/lib/browser/index.mjs +0 -62
  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 +0 -62
  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/main.css +311 -189
  8. package/dist/plugin/node-cjs/main.css.map +3 -3
  9. package/dist/plugin/node-cjs/meta.json +1 -1
  10. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs +2 -1
  11. package/dist/plugin/node-cjs/plugins/ThemePlugin.cjs.map +3 -3
  12. package/dist/plugin/node-esm/main.css +311 -189
  13. package/dist/plugin/node-esm/main.css.map +3 -3
  14. package/dist/plugin/node-esm/meta.json +1 -1
  15. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs +2 -1
  16. package/dist/plugin/node-esm/plugins/ThemePlugin.mjs.map +3 -3
  17. package/dist/types/src/Theme.stories.d.ts.map +1 -1
  18. package/dist/types/src/defs.d.ts +0 -5
  19. package/dist/types/src/defs.d.ts.map +1 -1
  20. package/dist/types/src/fragments/hover.d.ts +0 -2
  21. package/dist/types/src/fragments/hover.d.ts.map +1 -1
  22. package/dist/types/src/fragments/index.d.ts +0 -1
  23. package/dist/types/src/fragments/index.d.ts.map +1 -1
  24. package/dist/types/src/plugins/ThemePlugin.d.ts.map +1 -1
  25. package/dist/types/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +11 -6
  27. package/src/Theme.stories.tsx +3 -1
  28. package/src/css/DESIGN_SYSTEM.md +89 -51
  29. package/src/css/base/base.css +39 -0
  30. package/src/css/components/button.css +21 -16
  31. package/src/css/components/callout.css +140 -0
  32. package/src/css/components/input.css +36 -0
  33. package/src/css/components/state.css +1 -11
  34. package/src/css/components/state.md +1 -1
  35. package/src/css/components/surface.css +165 -58
  36. package/src/css/components/tag.css +13 -1
  37. package/src/css/integrations/codemirror.css +15 -0
  38. package/src/css/layout/main.css +26 -2
  39. package/src/css/layout/native.css +1 -0
  40. package/src/css/theme/roles.css +92 -0
  41. package/src/css/theme/spacing.css +63 -54
  42. package/src/css/theme/surfaces.css +215 -0
  43. package/src/css/theme/text.css +6 -2
  44. package/src/css/utilities.css +13 -9
  45. package/src/defs.ts +0 -25
  46. package/src/fragments/hover.ts +0 -3
  47. package/src/fragments/index.ts +0 -1
  48. package/src/main.css +8 -10
  49. package/src/plugins/ThemePlugin.ts +50 -40
  50. package/src/plugins/main.css +1 -1
  51. package/src/tokens.css +22 -0
  52. package/dist/types/src/fragments/density.d.ts +0 -4
  53. package/dist/types/src/fragments/density.d.ts.map +0 -1
  54. package/src/css/components/panel.css +0 -117
  55. package/src/css/theme/semantic.css +0 -244
  56. package/src/fragments/AUDIT.md +0 -55
  57. package/src/fragments/density.ts +0 -43
@@ -32,26 +32,30 @@
32
32
  /* src/css/theme/palette.css */
33
33
  @theme { --dx-neutral-hue: 190; --dx-neutral-chroma: 0.001; --color-neutral-50: oklch(0.985 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-75: color-mix(in oklch, var(--color-neutral-50) 50%, var(--color-neutral-100) 50%); --color-neutral-100: oklch(0.935 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-125: color-mix(in oklch, var(--color-neutral-100) 75%, var(--color-neutral-200) 25%); --color-neutral-150: color-mix(in oklch, var(--color-neutral-100) 50%, var(--color-neutral-200) 50%); --color-neutral-175: color-mix(in oklch, var(--color-neutral-150) 50%, var(--color-neutral-200) 50%); --color-neutral-200: oklch(0.875 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-250: color-mix(in oklch, var(--color-neutral-200) 50%, var(--color-neutral-300) 50%); --color-neutral-300: oklch(0.8 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-400: oklch(0.708 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-500: oklch(0.556 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-600: oklch(0.439 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-700: oklch(0.371 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-750: color-mix(in oklch, var(--color-neutral-700) 50%, var(--color-neutral-800) 50%); --color-neutral-775: color-mix(in oklch, var(--color-neutral-750) 50%, var(--color-neutral-800) 50%); --color-neutral-800: oklch(0.269 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-825: color-mix(in oklch, var(--color-neutral-800) 75%, var(--color-neutral-900) 25%); --color-neutral-850: color-mix(in oklch, var(--color-neutral-800) 50%, var(--color-neutral-900) 50%); --color-neutral-875: color-mix(in oklch, var(--color-neutral-800) 25%, var(--color-neutral-900) 75%); --color-neutral-900: oklch(0.205 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-neutral-925: color-mix(in oklch, var(--color-neutral-900) 50%, var(--color-neutral-950) 50%); --color-neutral-950: oklch(0.145 var(--dx-neutral-chroma) var(--dx-neutral-hue)); --color-primary-50: var(--color-blue-50); --color-primary-100: var(--color-blue-100); --color-primary-200: var(--color-blue-200); --color-primary-300: var(--color-blue-300); --color-primary-400: var(--color-blue-400); --color-primary-500: var(--color-blue-500); --color-primary-600: var(--color-blue-600); --color-primary-700: var(--color-blue-700); --color-primary-800: var(--color-blue-800); --color-primary-900: var(--color-blue-900); --color-primary-950: var(--color-blue-950); --color-composer-100: rgb(5 40 61); --color-composer-200: rgb(10 75 105); --color-composer-300: rgb(1 122 183); --color-composer-400: rgb(6 197 253); }
34
34
 
35
- /* src/css/theme/semantic.css */
36
- @theme { --dx-elevation-0: light-dark(var(--color-neutral-300), var(--color-neutral-950)); --dx-elevation-1: light-dark(var(--color-neutral-300), var(--color-neutral-925)); --dx-elevation-2: light-dark(var(--color-neutral-200), var(--color-neutral-900)); --dx-elevation-3: light-dark(var(--color-neutral-125), var(--color-neutral-875)); --dx-elevation-4: light-dark(var(--color-neutral-125), var(--color-neutral-850)); --dx-elevation-5: light-dark(var(--color-neutral-100), var(--color-neutral-825)); --dx-elevation-6: light-dark(var(--color-neutral-75), var(--color-neutral-800)); --dx-elevation-7: light-dark(var(--color-neutral-50), var(--color-neutral-775)); --dx-elevation-8: light-dark(white, var(--color-neutral-750)); --color-deck-surface: var(--dx-elevation-0); --color-scrim-surface: light-dark( oklch(from var(--dx-elevation-0) l c h / 0.5), oklch(from var(--dx-elevation-0) l c h / 0.25) ); --color-card-surface: var(--dx-elevation-1); --color-base-surface: var(--dx-elevation-2); --color-base-fg: light-dark(var(--color-neutral-950), var(--color-neutral-150)); --color-attention-surface: var(--dx-elevation-2); --color-attention-contains: oklch(from var(--color-accent-bg) l c h / 0.3); --color-header-surface: var(--dx-elevation-3); --color-sidebar-surface: var(--dx-elevation-3); --color-sidebar-fg: light-dark(var(--color-neutral-700), var(--color-neutral-250)); --color-sidebar-current-fg: light-dark(var(--color-neutral-950), var(--color-neutral-75)); --color-l0-surface: var(--dx-elevation-2); --color-l1-surface: var(--dx-elevation-3); --color-r0-surface: var(--dx-elevation-3); --color-r1-surface: var(--dx-elevation-3); --color-toolbar-surface: var(--dx-elevation-4); --color-focus-surface: var(--dx-elevation-5); --color-focus-ring: light-dark(var(--color-blue-400), var(--color-blue-600)); --color-focus-ring-subtle: light-dark(var(--color-neutral-300), var(--color-neutral-600)); --color-group-surface: var(--dx-elevation-5); --color-group-alt-surface: light-dark( oklch(from var(--dx-elevation-5) calc(l - 0.03) c h), oklch(from var(--dx-elevation-5) calc(l + 0.03) c h) ); --color-input-surface: var(--dx-elevation-5); --color-modal-surface: var(--dx-elevation-6); --color-popover-surface: var(--dx-elevation-7); --color-inverse-surface: light-dark(var(--color-neutral-800), var(--color-neutral-200)); --color-inverse-fg: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-description: light-dark(var(--color-neutral-600), var(--color-neutral-400)); --color-subdued: light-dark(var(--color-neutral-500), var(--color-neutral-600)); --color-placeholder: light-dark(var(--color-neutral-400), var(--color-neutral-600)); --color-input-bg: light-dark(var(--color-neutral-250), var(--color-neutral-700)); --color-input-fg: var(--color-base-fg); --color-hover-surface: light-dark( oklch(from var(--surface-bg, var(--color-base-surface)) calc(l - 0.08) c h), oklch(from var(--surface-bg, var(--color-base-surface)) calc(l + 0.08) c h) ); --color-hover-fg: light-dark(var(--color-neutral-950), var(--color-neutral-150)); --color-hover-surface-subtle: light-dark( oklch(from var(--surface-bg, var(--color-base-surface)) calc(l - 0.02) c h), oklch(from var(--surface-bg, var(--color-base-surface)) calc(l + 0.02) c h) ); --color-current-surface: light-dark( oklch(from var(--surface-bg, var(--color-base-surface)) calc(l - 0.1) c h), oklch(from var(--surface-bg, var(--color-base-surface)) calc(l + 0.1) c h) ); --color-current-surface-hover: light-dark( oklch(from var(--surface-bg, var(--color-base-surface)) calc(l - 0.12) c h), oklch(from var(--surface-bg, var(--color-base-surface)) calc(l + 0.12) c h) ); --color-current-fg: light-dark(var(--color-neutral-950), var(--color-neutral-50)); --color-selected-surface: var(--color-current-surface); --color-selected-surface-hover: var(--color-current-surface-hover); --color-selected-fg: var(--color-current-fg); --color-accent-bg: light-dark(var(--color-blue-600), var(--color-blue-700)); --color-accent-bg-hover: light-dark(var(--color-blue-700), var(--color-blue-800)); --color-accent-fg: var(--color-blue-100); --color-accent-text: light-dark(var(--color-blue-600), var(--color-blue-400)); --color-accent-text-hover: light-dark(var(--color-blue-500), var(--color-blue-500)); --color-un-accent: var(--color-neutral-400); --color-un-accent-hover: var(--color-neutral-500); --color-primary-separator: light-dark(var(--color-neutral-200), var(--color-neutral-800)); --color-separator: light-dark(var(--color-neutral-200), var(--color-neutral-700)); --color-input-separator: light-dark(var(--color-neutral-250), var(--color-neutral-750)); --color-subdued-separator: light-dark(var(--color-neutral-250), var(--color-neutral-775)); --color-active-separator: light-dark(var(--color-blue-500), var(--color-blue-500)); --color-scrollbar-track: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-scrollbar-thumb: light-dark(var(--color-neutral-200), var(--color-neutral-600)); --color-scrollbar-thumb-active: light-dark(var(--color-neutral-200), var(--color-neutral-600)); --color-scrollbar-thumb-hover: light-dark(var(--color-neutral-200), var(--color-neutral-600)); --color-axis-surface: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-axis-text: light-dark(var(--color-neutral-700), var(--color-neutral-300)); --color-axis-selected-surface: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-axis-selected-text: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-grid-surface: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-grid-fg: light-dark(var(--color-neutral-950), var(--color-neutral-50)); --color-grid-line: light-dark(var(--color-neutral-200), var(--color-neutral-800)); --color-grid-highlight: oklch(from var(--color-emerald-500) l c h / 0.5); --color-grid-selection-surface: light-dark(var(--color-blue-500), var(--color-blue-400)); --color-grid-selection-fg: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-grid-comment: light-dark(var(--color-green-400), var(--color-green-600)); --color-grid-comment-active: light-dark( oklch(from var(--color-green-400) l c h / 0.5), oklch(from var(--color-green-600) l c h / 0.5) ); }
35
+ /* src/css/theme/roles.css */
36
+ @theme { --color-description: light-dark(var(--color-neutral-600), var(--color-neutral-400)); --color-subdued: light-dark(var(--color-neutral-500), var(--color-neutral-600)); --color-input-bg: light-dark(oklch(0.87 0.001 190), var(--color-neutral-700)); --color-input-bg-hover: oklch( from var(--color-input-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.08) c h ); --color-input-fg: var(--color-base-fg); --color-focus-ring: light-dark(var(--color-blue-400), var(--color-blue-600)); --color-focus-ring-subtle: light-dark(var(--color-neutral-300), var(--color-neutral-600)); --color-accent-bg: light-dark(var(--color-blue-600), var(--color-blue-700)); --color-accent-bg-hover: light-dark(var(--color-blue-700), var(--color-blue-800)); --color-accent-fg: var(--color-blue-100); --color-accent-text: light-dark(var(--color-blue-600), var(--color-blue-400)); --color-accent-text-hover: light-dark(var(--color-blue-500), var(--color-blue-500)); --color-un-accent: var(--color-neutral-400); --color-un-accent-hover: var(--color-neutral-500); --color-active-separator: light-dark(var(--color-blue-500), var(--color-blue-500)); --color-scrollbar-track: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-axis-surface: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-axis-text: light-dark(var(--color-neutral-700), var(--color-neutral-300)); --color-axis-selected-surface: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-axis-selected-text: light-dark(var(--color-neutral-100), var(--color-neutral-900)); --color-grid-surface: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-grid-fg: light-dark(var(--color-neutral-950), var(--color-neutral-50)); --color-grid-line: light-dark(var(--color-neutral-200), var(--color-neutral-800)); --color-grid-highlight: oklch(from var(--color-emerald-500) l c h / 0.5); --color-grid-selection-surface: light-dark(var(--color-blue-500), var(--color-blue-400)); --color-grid-selection-fg: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-grid-comment: light-dark(var(--color-green-400), var(--color-green-600)); --color-grid-comment-active: light-dark( oklch(from var(--color-green-400) l c h / 0.5), oklch(from var(--color-green-600) l c h / 0.5) ); }
37
37
 
38
38
  /* src/css/theme/spacing.css */
39
- @theme { --spacing-screen-border: 2rem; --spacing-popover-default-width: 20rem; --spacing-popover-min-width: 16rem; --spacing-document-max-width: 50rem; --spacing-document-width: calc(50rem - env(safe-area-inset-left) - env(safe-area-inset-right)); --spacing-card-default-width: 20rem; --spacing-card-min-width: 18rem; --spacing-card-max-width: 22rem; --spacing-card-min-height: 18rem; --spacing-card-max-height: 30rem; --spacing-tag-padding-block: 0.125rem; --spacing-trim-xs: 0.25rem; --spacing-trim-sm: 0.5rem; --spacing-trim-md: 0.75rem; --spacing-trim-lg: 1.5rem; --spacing-form-chrome: var(--spacing-trim-xs); --spacing-form-gap: var(--spacing-trim-sm); --spacing-form-section-gap: var(--spacing-trim-md); --spacing-form-padding: var(--spacing-trim-sm); --spacing-icon-button-padding: var(--spacing-trim-xs); --spacing-scroll-padding: 4px; }
39
+ @theme { --spacing-screen-border: 2rem; --spacing-popover-default-width: 20rem; --spacing-popover-min-width: 16rem; --spacing-document-max-width: 50rem; --spacing-document-width: calc(50rem - env(safe-area-inset-left) - env(safe-area-inset-right)); --spacing-card-default-width: 20rem; --spacing-card-min-width: 18rem; --spacing-card-max-width: 22rem; --spacing-card-min-height: 18rem; --spacing-card-max-height: 30rem; --spacing-tag-padding-block: 0.125rem; --spacing-trim-xs: 0.25rem; --spacing-trim-sm: 0.5rem; --spacing-trim-md: 0.75rem; --spacing-trim-lg: 1rem; --spacing-trim-xl: 1.5rem; --spacing-trim-2xl: 2rem; --spacing-form-chrome: var(--spacing-trim-xs); --spacing-form-gap: var(--spacing-trim-sm); --spacing-form-section-gap: var(--spacing-trim-md); --dx-control-sm: 1.5rem; --dx-control-md: 2rem; --dx-control-lg: 2.5rem; --dx-control: var(--dx-control-md); --dx-control-pad: var(--spacing-trim-sm); --dx-control-leading: normal; --spacing-form-padding: var(--spacing-trim-sm); }
40
40
  @layer dx-tokens {
41
- .dx-density-lg {
41
+ .dx-density-lg,
42
+ [data-density=lg] {
43
+ --dx-control: var(--dx-control-lg);
44
+ --dx-control-pad: var(--spacing-trim-md);
42
45
  --spacing-form-padding: var(--spacing-trim-md);
43
- --spacing-icon-button-padding: var(--spacing-trim-sm);
44
- --spacing-scroll-padding: 8px;
45
46
  }
46
- .dx-density-sm {
47
+ .dx-density-md,
48
+ [data-density=md] {
49
+ --dx-control: var(--dx-control-md);
50
+ --dx-control-pad: var(--spacing-trim-sm);
51
+ --spacing-form-padding: var(--spacing-trim-sm);
52
+ }
53
+ .dx-density-sm,
54
+ [data-density=sm] {
55
+ --dx-control: var(--dx-control-sm);
56
+ --dx-control-pad: var(--spacing-trim-xs);
57
+ --dx-control-leading: 22px;
47
58
  --spacing-form-padding: var(--spacing-trim-xs);
48
- --spacing-icon-button-padding: var(--spacing-trim-xs);
49
- --spacing-scroll-padding: 2px;
50
- }
51
- .dx-density-xs {
52
- --spacing-form-padding: var(--spacing-trim-xs);
53
- --spacing-icon-button-padding: var(--spacing-trim-xs);
54
- --spacing-scroll-padding: 2px;
55
59
  }
56
60
  }
57
61
  @layer dx-tokens {
@@ -59,31 +63,19 @@
59
63
  --dx-line-0: 0px;
60
64
  --dx-line-1: 1px;
61
65
  --dx-line-2: 2px;
62
- --dx-lacuna-12: 1.5rem;
63
- --dx-lacuna-3: 0.375rem;
64
- --dx-lacuna-4: 0.5rem;
65
- --dx-lacuna-6: 0.75rem;
66
- --dx-gutter-sm: 0.5rem;
67
- --dx-gutter-md: 1rem;
68
- --dx-gutter-lg: 2rem;
66
+ --dx-gutter-sm: var(--spacing-trim-sm);
67
+ --dx-gutter-md: var(--spacing-trim-lg);
68
+ --dx-gutter-lg: var(--spacing-trim-2xl);
69
69
  }
70
70
  :root {
71
- --dx-hair-line: 1px;
72
- --dx-landmark-line: 1px;
73
- --dx-modal-line: 1px;
74
- --dx-no-line: 0px;
75
- --dx-thick-line: 2px;
76
- --dx-focus-line: 2px;
77
71
  --dx-no-line: var(--dx-line-0);
78
72
  --dx-hair-line: var(--dx-line-1);
79
73
  --dx-thick-line: var(--dx-line-2);
74
+ --dx-landmark-line: var(--dx-hair-line);
80
75
  --dx-focus-offset: var(--dx-no-line);
81
76
  --dx-focus-line: var(--dx-thick-line);
82
77
  --dx-modal-line: var(--dx-hair-line);
83
78
  --dx-grid-focus-indicator-width: var(--dx-hair-line);
84
- --dx-input-md: var(--dx-lacuna-3);
85
- --dx-input-lg: var(--dx-lacuna-4);
86
- --dx-input-sm: var(--dx-lacuna-3);
87
79
  --dx-default-icons-size: 1rem;
88
80
  }
89
81
  [data-grid-focus-indicator-variant=stack] {
@@ -91,12 +83,12 @@
91
83
  }
92
84
  :root {
93
85
  --dx-rail-content: 3rem;
94
- --dx-rail-size: calc(var(--dx-rail-content) + 1px);
95
- --dx-rail-item: calc(var(--dx-rail-content) - 1rem);
96
- --dx-rail-action: calc(var(--dx-rail-content) - 0.5rem);
86
+ --dx-rail-size: var(--dx-rail-content);
87
+ --dx-rail-item: var(--dx-control-md);
88
+ --dx-rail-action: var(--dx-control-lg);
97
89
  --dx-topbar-size: var(--dx-rail-size);
98
- --dx-toolbar-size: var(--dx-rail-action);
99
- --dx-statusbar-size: var(--dx-rail-item);
90
+ --dx-toolbar-size: var(--dx-control-lg);
91
+ --dx-statusbar-size: var(--dx-control-md);
100
92
  --dx-nav-sidebar-size: 350px;
101
93
  --dx-complementary-sidebar-size: 25rem;
102
94
  --dx-drawer-size: 50dvh;
@@ -127,13 +119,26 @@
127
119
  /* src/css/theme/styles.css */
128
120
  @theme { --color-primary-bg: var(--color-blue-bg); --color-primary-bg-hover: var(--color-blue-bg-hover); --color-primary-fg: var(--color-blue-fg); --color-primary-surface: var(--color-blue-surface); --color-primary-text: var(--color-blue-text); --color-primary-border: var(--color-blue-border); --color-secondary-bg: var(--color-green-bg); --color-secondary-bg-hover: var(--color-green-bg-hover); --color-secondary-fg: var(--color-green-fg); --color-secondary-surface: var(--color-green-surface); --color-secondary-text: var(--color-green-text); --color-secondary-border: var(--color-green-border); --color-info-bg: var(--color-cyan-bg); --color-info-bg-hover: var(--color-cyan-bg-hover); --color-info-fg: var(--color-cyan-fg); --color-info-surface: var(--color-cyan-surface); --color-info-text: var(--color-cyan-text); --color-info-border: var(--color-cyan-border); --color-success-bg: var(--color-emerald-bg); --color-success-bg-hover: var(--color-emerald-bg-hover); --color-success-fg: var(--color-emerald-fg); --color-success-surface: var(--color-emerald-surface); --color-success-text: var(--color-emerald-text); --color-success-border: var(--color-emerald-border); --color-warning-bg: var(--color-amber-bg); --color-warning-bg-hover: var(--color-amber-bg-hover); --color-warning-fg: var(--color-amber-fg); --color-warning-surface: var(--color-amber-surface); --color-warning-text: var(--color-amber-text); --color-warning-border: var(--color-amber-border); --color-error-bg: var(--color-rose-bg); --color-error-bg-hover: var(--color-rose-bg-hover); --color-error-fg: var(--color-rose-fg); --color-error-surface: var(--color-rose-surface); --color-error-text: var(--color-rose-text); --color-error-border: var(--color-rose-border); --color-neutral-bg: var(--color-neutral-600); --color-neutral-bg-hover: var(--color-neutral-700); --color-neutral-fg: var(--color-neutral-900); --color-neutral-surface: var(--color-neutral-400); --color-neutral-text: light-dark(var(--color-neutral-800), var(--color-neutral-500)); --color-neutral-border: var(--color-neutral-600); --color-red-bg: var(--color-red-600); --color-red-bg-hover: var(--color-red-700); --color-red-fg: var(--color-red-900); --color-red-surface: var(--color-red-400); --color-red-text: light-dark(var(--color-red-800), var(--color-red-500)); --color-red-border: var(--color-red-600); --color-orange-bg: var(--color-orange-600); --color-orange-bg-hover: var(--color-orange-700); --color-orange-fg: var(--color-orange-900); --color-orange-surface: var(--color-orange-400); --color-orange-text: light-dark(var(--color-orange-800), var(--color-orange-500)); --color-orange-border: var(--color-orange-600); --color-amber-bg: var(--color-amber-600); --color-amber-bg-hover: var(--color-amber-700); --color-amber-fg: var(--color-amber-900); --color-amber-surface: var(--color-amber-400); --color-amber-text: light-dark(var(--color-amber-800), var(--color-amber-500)); --color-amber-border: var(--color-amber-600); --color-yellow-bg: var(--color-yellow-600); --color-yellow-bg-hover: var(--color-yellow-700); --color-yellow-fg: var(--color-yellow-900); --color-yellow-surface: var(--color-yellow-400); --color-yellow-text: light-dark(var(--color-yellow-800), var(--color-yellow-500)); --color-yellow-border: var(--color-yellow-600); --color-lime-bg: var(--color-lime-600); --color-lime-bg-hover: var(--color-lime-700); --color-lime-fg: var(--color-lime-900); --color-lime-surface: var(--color-lime-400); --color-lime-text: light-dark(var(--color-lime-800), var(--color-lime-500)); --color-lime-border: var(--color-lime-600); --color-green-bg: var(--color-green-600); --color-green-bg-hover: var(--color-green-700); --color-green-fg: var(--color-green-900); --color-green-surface: var(--color-green-400); --color-green-text: light-dark(var(--color-green-800), var(--color-green-500)); --color-green-border: var(--color-green-600); --color-emerald-bg: var(--color-emerald-600); --color-emerald-bg-hover: var(--color-emerald-700); --color-emerald-fg: var(--color-emerald-900); --color-emerald-surface: var(--color-emerald-400); --color-emerald-text: light-dark(var(--color-emerald-800), var(--color-emerald-500)); --color-emerald-border: var(--color-emerald-600); --color-teal-bg: var(--color-teal-600); --color-teal-bg-hover: var(--color-teal-700); --color-teal-fg: var(--color-teal-900); --color-teal-surface: var(--color-teal-400); --color-teal-text: light-dark(var(--color-teal-800), var(--color-teal-500)); --color-teal-border: var(--color-teal-600); --color-cyan-bg: var(--color-cyan-600); --color-cyan-bg-hover: var(--color-cyan-700); --color-cyan-fg: var(--color-cyan-900); --color-cyan-surface: var(--color-cyan-400); --color-cyan-text: light-dark(var(--color-cyan-800), var(--color-cyan-500)); --color-cyan-border: var(--color-cyan-600); --color-sky-bg: var(--color-sky-600); --color-sky-bg-hover: var(--color-sky-700); --color-sky-fg: var(--color-sky-900); --color-sky-surface: var(--color-sky-400); --color-sky-text: light-dark(var(--color-sky-800), var(--color-sky-500)); --color-sky-border: var(--color-sky-600); --color-blue-bg: var(--color-blue-600); --color-blue-bg-hover: var(--color-blue-700); --color-blue-fg: var(--color-blue-900); --color-blue-surface: var(--color-blue-400); --color-blue-text: light-dark(var(--color-blue-800), var(--color-blue-500)); --color-blue-border: var(--color-blue-600); --color-indigo-bg: var(--color-indigo-600); --color-indigo-bg-hover: var(--color-indigo-700); --color-indigo-fg: var(--color-indigo-900); --color-indigo-surface: var(--color-indigo-400); --color-indigo-text: light-dark(var(--color-indigo-800), var(--color-indigo-500)); --color-indigo-border: var(--color-indigo-600); --color-violet-bg: var(--color-violet-600); --color-violet-bg-hover: var(--color-violet-700); --color-violet-fg: var(--color-violet-900); --color-violet-surface: var(--color-violet-400); --color-violet-text: light-dark(var(--color-violet-800), var(--color-violet-500)); --color-violet-border: var(--color-violet-600); --color-purple-bg: var(--color-purple-600); --color-purple-bg-hover: var(--color-purple-700); --color-purple-fg: var(--color-purple-900); --color-purple-surface: var(--color-purple-400); --color-purple-text: light-dark(var(--color-purple-800), var(--color-purple-500)); --color-purple-border: var(--color-purple-600); --color-fuchsia-bg: var(--color-fuchsia-600); --color-fuchsia-bg-hover: var(--color-fuchsia-700); --color-fuchsia-fg: var(--color-fuchsia-900); --color-fuchsia-surface: var(--color-fuchsia-400); --color-fuchsia-text: light-dark(var(--color-fuchsia-800), var(--color-fuchsia-500)); --color-fuchsia-border: var(--color-fuchsia-600); --color-pink-bg: var(--color-pink-600); --color-pink-bg-hover: var(--color-pink-700); --color-pink-fg: var(--color-pink-900); --color-pink-surface: var(--color-pink-400); --color-pink-text: light-dark(var(--color-pink-800), var(--color-pink-500)); --color-pink-border: var(--color-pink-600); --color-rose-bg: var(--color-rose-600); --color-rose-bg-hover: var(--color-rose-700); --color-rose-fg: var(--color-rose-900); --color-rose-surface: var(--color-rose-400); --color-rose-text: light-dark(var(--color-rose-800), var(--color-rose-500)); --color-rose-border: var(--color-rose-600); }
129
121
 
122
+ /* src/css/theme/surfaces.css */
123
+ @theme { --dx-surface-sunken: light-dark(var(--color-neutral-150), var(--color-neutral-950)); --dx-surface-chrome: light-dark(var(--color-neutral-100), var(--color-neutral-925)); --dx-surface-base: light-dark(oklch(0.98 0.001 190), var(--color-neutral-900)); --dx-surface-raised: light-dark(oklch(0.99 0.001 190), var(--color-neutral-850)); --dx-surface-overlay: light-dark(oklch(0.995 0.001 190), var(--color-neutral-800)); --dx-surface-popup: light-dark(oklch(1 0 0), var(--color-neutral-775)); --color-deck-surface: var(--dx-surface-sunken); --color-l0-surface: light-dark(oklch(0.935 0.001 190), var(--dx-surface-sunken)); --color-r0-surface: light-dark(oklch(0.935 0.001 190), var(--dx-surface-sunken)); --color-scrim-surface: light-dark( oklch(from var(--dx-surface-sunken) l c h / 0.5), oklch(from var(--dx-surface-sunken) l c h / 0.25) ); --color-sidebar-surface: var(--dx-surface-chrome); --color-header-surface: var(--dx-surface-chrome); --color-l1-surface: light-dark(oklch(0.955 0.001 190), var(--dx-surface-chrome)); --color-r1-surface: light-dark(oklch(0.955 0.001 190), var(--dx-surface-chrome)); --color-sidebar-fg: light-dark(var(--color-neutral-700), var(--color-neutral-250)); --color-sidebar-current-fg: light-dark(var(--color-neutral-950), var(--color-neutral-75)); --color-base-surface: var(--dx-surface-base); --color-base-fg: light-dark(var(--color-neutral-950), var(--color-neutral-150)); --color-attention-surface: var(--dx-surface-base); --color-attention-contains: oklch(from var(--color-accent-bg) l c h / 0.3); --color-card-surface: var(--dx-surface-raised); --color-modal-surface: var(--dx-surface-overlay); --color-popover-surface: var(--dx-surface-popup); --color-toolbar-surface: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-bar) * 0.025) c h ); --color-group-surface: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-well) * 0.05) c h ); --color-input-surface: var(--color-group-surface); --color-focus-surface: var(--color-group-surface); --color-group-alt-surface: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * 0.08) c h ); --color-placeholder: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-placeholder) * 0.3) c h ); --color-scrollbar-thumb: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-scrollbar) * 0.23) c h ); --color-scrollbar-thumb-hover: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-scrollbar) * 0.3) c h ); --color-scrollbar-thumb-active: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-scrollbar) * 0.34) c h ); --color-separator: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-separator-line) * 0.166) c h ); --color-input-separator: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-separator) * 0.115) c h ); --color-subdued-separator: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-separator) * 0.089) c h ); --color-primary-separator: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-separator) * 0.064) c h ); --color-hover-surface: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.08) c h ); --color-hover-fg: light-dark(var(--color-neutral-950), var(--color-neutral-150)); --color-hover-surface-subtle: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.02) c h ); --color-current-surface: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.1) c h ); --color-current-surface-hover: oklch( from var(--surface-bg, var(--color-base-surface)) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.12) c h ); --color-current-fg: light-dark(var(--color-neutral-950), var(--color-neutral-50)); --color-selected-surface: var(--color-current-surface); --color-selected-surface-hover: var(--color-current-surface-hover); --color-selected-fg: var(--color-current-fg); --color-inverse-surface: light-dark(var(--color-neutral-800), var(--color-neutral-200)); --color-inverse-fg: light-dark(var(--color-neutral-50), var(--color-neutral-950)); --color-inverse-text: light-dark(var(--color-neutral-50), var(--color-neutral-950)); }
124
+
130
125
  /* src/css/theme/text.css */
131
- @theme { --font-body: "Inter Variable", ui-sans-serif, system-ui, sans-serif; --font-mono: "JetBrains Mono Variable", ui-monospace, "Cascadia Code", "Source Code Pro", monospace; --text-xs: 0.75rem; --text-xs--line-height: 1rem; --text-sm: 0.875rem; --text-sm--line-height: 1.25rem; --text-base: 1rem; --text-base--line-height: 1.5rem; --text-lg: 1.125rem; --text-lg--line-height: 1.75rem; --text-xl: 1.25rem; --text-xl--line-height: 1.75rem; --text-2xl: 1.5rem; --text-2xl--line-height: 2rem; --text-3xl: 1.875rem; --text-3xl--line-height: 2.25rem; --text-4xl: 2.25rem; --text-4xl--line-height: 2.5rem; --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; }
126
+ @theme { --font-body: "Nunito Variable", "Inter Variable", ui-sans-serif, system-ui, sans-serif; --font-mono: "JetBrains Mono Variable", ui-monospace, "Cascadia Code", "Source Code Pro", monospace; --text-xs: 0.75rem; --text-xs--line-height: 1rem; --text-sm: 0.875rem; --text-sm--line-height: 1.25rem; --text-base: 1rem; --text-base--line-height: 1.5rem; --text-lg: 1.125rem; --text-lg--line-height: 1.75rem; --text-xl: 1.25rem; --text-xl--line-height: 1.75rem; --text-2xl: 1.5rem; --text-2xl--line-height: 2rem; --text-3xl: 1.875rem; --text-3xl--line-height: 2.25rem; --text-4xl: 2.25rem; --text-4xl--line-height: 2.5rem; --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; }
127
+
128
+ /* src/tokens.css */
132
129
 
133
130
  /* src/css/base/base.css */
134
131
  @layer dx-base {
135
132
  :root {
136
133
  color-scheme: light;
134
+ --dx-lift: -1;
135
+ --dx-attenuate-state: 0.5;
136
+ --dx-attenuate-well: 0.5;
137
+ --dx-attenuate-separator: 0.75;
138
+ --dx-attenuate-separator-line: 0.45;
139
+ --dx-attenuate-bar: 1;
140
+ --dx-attenuate-placeholder: 1;
141
+ --dx-attenuate-scrollbar: 1;
137
142
  touch-action: pan-x pan-y;
138
143
  font-synthesis: none;
139
144
  font-variation-settings: "wght" 400, "slnt" 0;
@@ -143,6 +148,14 @@
143
148
  }
144
149
  .dark {
145
150
  color-scheme: dark;
151
+ --dx-lift: 1;
152
+ --dx-attenuate-state: 1;
153
+ --dx-attenuate-well: 1;
154
+ --dx-attenuate-separator: 1;
155
+ --dx-attenuate-separator-line: 1;
156
+ --dx-attenuate-bar: 1;
157
+ --dx-attenuate-placeholder: 1;
158
+ --dx-attenuate-scrollbar: 1;
146
159
  }
147
160
  button {
148
161
  @apply cursor-pointer;
@@ -277,10 +290,11 @@
277
290
  /* src/css/components/button.css */
278
291
  @layer dx-components {
279
292
  .dx-button {
280
- @apply shrink-0 inline-flex select-none items-center justify-center overflow-hidden min-h-[2rem] px-3;
293
+ @apply shrink-0 inline-flex select-none items-center justify-center overflow-hidden;
294
+ min-block-size: var(--dx-control);
295
+ padding-inline: var(--dx-control-pad);
281
296
  @apply font-medium transition-colors duration-100 ease-linear bg-input-bg;
282
297
  &[data-variant=default] {
283
- color: var(--dx-valence-text, inherit);
284
298
  background: var(--dx-valence-bg, var(--color-input-bg));
285
299
  }
286
300
  &[aria-pressed=true],
@@ -320,6 +334,9 @@
320
334
  }
321
335
  &[data-variant=default]:hover {
322
336
  color: var(--dx-valence-text);
337
+ background-color: var(--dx-valence-bg-hover, var(--color-input-bg-hover));
338
+ }
339
+ .dark &[data-variant=default]:hover {
323
340
  background-color: var(--dx-valence-bg-hover, var(--color-hover-surface));
324
341
  }
325
342
  &[data-variant=ghost]:hover {
@@ -362,22 +379,12 @@
362
379
  .dx-button:not([data-props~=wrap]) {
363
380
  @apply truncate;
364
381
  }
365
- .dx-button[data-density=lg] {
366
- @apply min-h-[2.5rem] px-3;
367
- }
368
382
  .dx-button[data-density=sm] {
369
- @apply min-h-[1.75rem] px-2;
383
+ @apply text-xs;
370
384
  }
371
- .dx-button[data-density=xs] {
372
- @apply min-h-[1.5rem] px-1 text-xs;
373
- }
374
- .dx-button[data-density=xs].aspect-square {
375
- @apply size-6 px-0;
376
- }
377
- @media (pointer: fine) {
378
- .dx-button[data-density=md] {
379
- @apply min-h-[2rem] px-2.5;
380
- }
385
+ .dx-button.aspect-square {
386
+ padding-inline: 0;
387
+ inline-size: var(--dx-control);
381
388
  }
382
389
  }
383
390
 
@@ -702,95 +709,136 @@
702
709
  }
703
710
  }
704
711
 
705
- /* src/css/components/panel.css */
712
+ /* src/css/components/input.css */
706
713
  @layer dx-components {
707
- [data-hue=neutral] .dx-panel,
708
- .dx-panel--neutral {
709
- @apply bg-neutral-surface text-neutral-fg border-neutral-border;
710
- }
711
- [data-hue=red] .dx-panel,
712
- .dx-panel--red {
713
- @apply bg-red-surface text-red-fg border-red-border;
714
- }
715
- [data-hue=orange] .dx-panel,
716
- .dx-panel--orange {
717
- @apply bg-orange-surface text-orange-fg border-orange-border;
718
- }
719
- [data-hue=amber] .dx-panel,
720
- .dx-panel--amber {
721
- @apply bg-amber-surface text-amber-fg border-amber-border;
722
- }
723
- [data-hue=yellow] .dx-panel,
724
- .dx-panel--yellow {
725
- @apply bg-yellow-surface text-yellow-fg border-yellow-border;
726
- }
727
- [data-hue=lime] .dx-panel,
728
- .dx-panel--lime {
729
- @apply bg-lime-surface text-lime-fg border-lime-border;
730
- }
731
- [data-hue=green] .dx-panel,
732
- .dx-panel--green {
733
- @apply bg-green-surface text-green-fg border-green-border;
734
- }
735
- [data-hue=emerald] .dx-panel,
736
- .dx-panel--emerald {
737
- @apply bg-emerald-surface text-emerald-fg border-emerald-border;
738
- }
739
- [data-hue=teal] .dx-panel,
740
- .dx-panel--teal {
741
- @apply bg-teal-surface text-teal-fg border-teal-border;
742
- }
743
- [data-hue=cyan] .dx-panel,
744
- .dx-panel--cyan {
745
- @apply bg-cyan-surface text-cyan-fg border-cyan-border;
746
- }
747
- [data-hue=sky] .dx-panel,
748
- .dx-panel--sky {
749
- @apply bg-sky-surface text-sky-fg border-sky-border;
750
- }
751
- [data-hue=blue] .dx-panel,
752
- .dx-panel--blue {
753
- @apply bg-blue-surface text-blue-fg border-blue-border;
754
- }
755
- [data-hue=indigo] .dx-panel,
756
- .dx-panel--indigo {
757
- @apply bg-indigo-surface text-indigo-fg border-indigo-border;
758
- }
759
- [data-hue=violet] .dx-panel,
760
- .dx-panel--violet {
761
- @apply bg-violet-surface text-violet-fg border-violet-border;
762
- }
763
- [data-hue=purple] .dx-panel,
764
- .dx-panel--purple {
765
- @apply bg-purple-surface text-purple-fg border-purple-border;
766
- }
767
- [data-hue=fuchsia] .dx-panel,
768
- .dx-panel--fuchsia {
769
- @apply bg-fuchsia-surface text-fuchsia-fg border-fuchsia-border;
770
- }
771
- [data-hue=pink] .dx-panel,
772
- .dx-panel--pink {
773
- @apply bg-pink-surface text-pink-fg border-pink-border;
774
- }
775
- [data-hue=rose] .dx-panel,
776
- .dx-panel--rose {
777
- @apply bg-rose-surface text-rose-fg border-rose-border;
778
- }
779
- [data-hue=info] .dx-panel,
780
- .dx-panel--info {
781
- @apply bg-info-surface text-info-fg border-info-border;
782
- }
783
- [data-hue=success] .dx-panel,
784
- .dx-panel--success {
785
- @apply bg-success-surface text-success-fg border-success-border;
786
- }
787
- [data-hue=warning] .dx-panel,
788
- .dx-panel--warning {
789
- @apply bg-warning-surface text-warning-fg border-warning-border;
714
+ .dx-input {
715
+ @apply transition-colors border border-input-separator rounded-xs p-1 px-2;
716
+ --surface-bg: var(--color-input-surface);
717
+ background-color: var(--surface-bg);
718
+ &:focus {
719
+ @apply outline-hidden;
720
+ }
721
+ &:focus-within {
722
+ @apply bg-focus-surface border-separator;
723
+ }
724
+ &:not([disabled]):focus-visible,
725
+ &:not([disabled]):has(:focus-visible) {
726
+ @apply ring-focus-line ring-offset-focus-offset z-[1] ring-[var(--color-focus-ring-subtle)] border-[color:var(--color-focus-ring-subtle)];
727
+ }
790
728
  }
791
- [data-hue=error] .dx-panel,
792
- .dx-panel--error {
793
- @apply bg-error-surface text-error-fg border-error-border;
729
+ }
730
+
731
+ /* src/css/components/callout.css */
732
+ @layer dx-components {
733
+ .dx-callout[data-hue=neutral],
734
+ :where([data-hue=neutral]) .dx-callout,
735
+ .dx-callout--neutral {
736
+ @apply bg-neutral-surface border-neutral-border text-neutral-fg;
737
+ }
738
+ .dx-callout[data-hue=red],
739
+ :where([data-hue=red]) .dx-callout,
740
+ .dx-callout--red {
741
+ @apply bg-red-surface border-red-border text-red-fg;
742
+ }
743
+ .dx-callout[data-hue=orange],
744
+ :where([data-hue=orange]) .dx-callout,
745
+ .dx-callout--orange {
746
+ @apply bg-orange-surface border-orange-border text-orange-fg;
747
+ }
748
+ .dx-callout[data-hue=amber],
749
+ :where([data-hue=amber]) .dx-callout,
750
+ .dx-callout--amber {
751
+ @apply bg-amber-surface border-amber-border text-amber-fg;
752
+ }
753
+ .dx-callout[data-hue=yellow],
754
+ :where([data-hue=yellow]) .dx-callout,
755
+ .dx-callout--yellow {
756
+ @apply bg-yellow-surface border-yellow-border text-yellow-fg;
757
+ }
758
+ .dx-callout[data-hue=lime],
759
+ :where([data-hue=lime]) .dx-callout,
760
+ .dx-callout--lime {
761
+ @apply bg-lime-surface border-lime-border text-lime-fg;
762
+ }
763
+ .dx-callout[data-hue=green],
764
+ :where([data-hue=green]) .dx-callout,
765
+ .dx-callout--green {
766
+ @apply bg-green-surface border-green-border text-green-fg;
767
+ }
768
+ .dx-callout[data-hue=emerald],
769
+ :where([data-hue=emerald]) .dx-callout,
770
+ .dx-callout--emerald {
771
+ @apply bg-emerald-surface border-emerald-border text-emerald-fg;
772
+ }
773
+ .dx-callout[data-hue=teal],
774
+ :where([data-hue=teal]) .dx-callout,
775
+ .dx-callout--teal {
776
+ @apply bg-teal-surface border-teal-border text-teal-fg;
777
+ }
778
+ .dx-callout[data-hue=cyan],
779
+ :where([data-hue=cyan]) .dx-callout,
780
+ .dx-callout--cyan {
781
+ @apply bg-cyan-surface border-cyan-border text-cyan-fg;
782
+ }
783
+ .dx-callout[data-hue=sky],
784
+ :where([data-hue=sky]) .dx-callout,
785
+ .dx-callout--sky {
786
+ @apply bg-sky-surface border-sky-border text-sky-fg;
787
+ }
788
+ .dx-callout[data-hue=blue],
789
+ :where([data-hue=blue]) .dx-callout,
790
+ .dx-callout--blue {
791
+ @apply bg-blue-surface border-blue-border text-blue-fg;
792
+ }
793
+ .dx-callout[data-hue=indigo],
794
+ :where([data-hue=indigo]) .dx-callout,
795
+ .dx-callout--indigo {
796
+ @apply bg-indigo-surface border-indigo-border text-indigo-fg;
797
+ }
798
+ .dx-callout[data-hue=violet],
799
+ :where([data-hue=violet]) .dx-callout,
800
+ .dx-callout--violet {
801
+ @apply bg-violet-surface border-violet-border text-violet-fg;
802
+ }
803
+ .dx-callout[data-hue=purple],
804
+ :where([data-hue=purple]) .dx-callout,
805
+ .dx-callout--purple {
806
+ @apply bg-purple-surface border-purple-border text-purple-fg;
807
+ }
808
+ .dx-callout[data-hue=fuchsia],
809
+ :where([data-hue=fuchsia]) .dx-callout,
810
+ .dx-callout--fuchsia {
811
+ @apply bg-fuchsia-surface border-fuchsia-border text-fuchsia-fg;
812
+ }
813
+ .dx-callout[data-hue=pink],
814
+ :where([data-hue=pink]) .dx-callout,
815
+ .dx-callout--pink {
816
+ @apply bg-pink-surface border-pink-border text-pink-fg;
817
+ }
818
+ .dx-callout[data-hue=rose],
819
+ :where([data-hue=rose]) .dx-callout,
820
+ .dx-callout--rose {
821
+ @apply bg-rose-surface border-rose-border text-rose-fg;
822
+ }
823
+ .dx-callout[data-hue=info],
824
+ :where([data-hue=info]) .dx-callout,
825
+ .dx-callout--info {
826
+ @apply bg-info-surface border-info-border text-info-fg;
827
+ }
828
+ .dx-callout[data-hue=success],
829
+ :where([data-hue=success]) .dx-callout,
830
+ .dx-callout--success {
831
+ @apply bg-success-surface border-success-border text-success-fg;
832
+ }
833
+ .dx-callout[data-hue=warning],
834
+ :where([data-hue=warning]) .dx-callout,
835
+ .dx-callout--warning {
836
+ @apply bg-warning-surface border-warning-border text-warning-fg;
837
+ }
838
+ .dx-callout[data-hue=error],
839
+ :where([data-hue=error]) .dx-callout,
840
+ .dx-callout--error {
841
+ @apply bg-error-surface border-error-border text-error-fg;
794
842
  }
795
843
  }
796
844
 
@@ -829,18 +877,12 @@
829
877
  .dx-hover {
830
878
  @apply cursor-pointer hover:bg-hover-surface-subtle! hover:text-hover-fg! hover:aria-selected:bg-selected-surface-hover hover:aria-selected:text-selected-fg hover:aria-[current=true]:bg-current-surface-hover hover:aria-[current=true]:text-current-fg;
831
879
  }
832
- .dx-hover-row {
833
- @apply group-hover/row:bg-hover-surface-subtle! group-hover/row:text-hover-fg! group-hover/row:group-aria-selected/row:bg-selected-surface-hover! group-hover/row:group-aria-selected/row:text-selected-fg! group-hover/row:group-aria-[current=true]/row:bg-current-surface-hover! group-hover/row:group-aria-[current=true]/row:text-current-fg!;
834
- }
835
880
  .dx-selected {
836
881
  @apply aria-selected:bg-selected-surface! aria-selected:text-selected-fg! aria-selected:font-semibold aria-selected:tracking-normal transition-[color, font-variation-settings, letter-spacing];
837
882
  }
838
883
  .dx-current {
839
884
  @apply dx-ring-pseudo aria-[current=true]:bg-current-surface! aria-[current=true]:text-current-fg! aria-[current=true]:after:ring-focus-ring-subtle!;
840
885
  }
841
- .dx-current-row {
842
- @apply group-aria-[current=true]/row:bg-current-surface! group-aria-[current=true]/row:text-current-fg!;
843
- }
844
886
  .dx-highlighted {
845
887
  @apply data-[highlighted]:bg-current-surface data-[highlighted]:text-current-fg hover:data-[highlighted]:bg-current-surface-hover;
846
888
  }
@@ -848,68 +890,133 @@
848
890
 
849
891
  /* src/css/components/surface.css */
850
892
  @layer dx-components {
851
- .dx-base-surface {
852
- @apply bg-base-surface text-base-fg;
853
- --surface-bg: var(--color-base-surface);
854
- }
893
+ [data-surface=sunken],
855
894
  .dx-deck-surface {
856
- @apply bg-deck-surface text-base-fg;
857
- --surface-bg: var(--color-deck-surface);
858
- }
859
- .dx-sidebar-surface {
860
- @apply bg-sidebar-surface text-base-fg;
861
- --surface-bg: var(--color-sidebar-surface);
895
+ --surface-bg: var(--dx-surface-sunken);
862
896
  }
897
+ [data-surface=chrome],
898
+ .dx-sidebar-surface,
863
899
  .dx-header-surface {
864
- @apply bg-header-surface text-base-fg;
865
- --surface-bg: var(--color-header-surface);
900
+ --surface-bg: var(--dx-surface-chrome);
901
+ }
902
+ .dx-l0-surface,
903
+ .dx-r0-surface {
904
+ --surface-bg: var(--color-l0-surface);
905
+ }
906
+ .dx-l1-surface,
907
+ .dx-r1-surface {
908
+ --surface-bg: var(--color-l1-surface);
909
+ }
910
+ [data-surface=base],
911
+ .dx-base-surface,
912
+ .dx-attention-surface {
913
+ --surface-bg: var(--dx-surface-base);
866
914
  }
915
+ [data-surface=raised],
867
916
  .dx-card-surface {
868
- @apply bg-card-surface text-base-fg;
869
- --surface-bg: var(--color-card-surface);
917
+ --surface-bg: var(--dx-surface-raised);
870
918
  }
871
- .dx-group-surface {
872
- @apply bg-group-surface text-base-fg;
873
- --surface-bg: var(--color-group-surface);
919
+ [data-surface=overlay],
920
+ .dx-modal-surface {
921
+ --surface-bg: var(--dx-surface-overlay);
874
922
  }
875
- .dx-input-surface {
876
- @apply bg-input-surface text-base-fg;
877
- --surface-bg: var(--color-input-surface);
923
+ [data-surface=popup],
924
+ .dx-popover-surface {
925
+ --surface-bg: var(--dx-surface-popup);
878
926
  }
927
+ [data-surface=bar],
879
928
  .dx-toolbar-surface {
880
- @apply bg-toolbar-surface text-base-fg;
881
929
  --surface-bg: var(--color-toolbar-surface);
882
930
  }
883
- .dx-modal-surface {
884
- @apply bg-modal-surface text-base-fg backdrop-blur-md;
885
- --surface-bg: var(--color-modal-surface);
931
+ [data-surface=well],
932
+ .dx-group-surface,
933
+ .dx-input-surface {
934
+ --surface-bg: var(--color-group-surface);
886
935
  }
887
- .dx-popover-surface {
888
- @apply bg-popover-surface text-base-fg backdrop-blur-md;
889
- --surface-bg: var(--color-popover-surface);
936
+ [data-surface],
937
+ .dx-deck-surface,
938
+ .dx-sidebar-surface,
939
+ .dx-header-surface,
940
+ .dx-l0-surface,
941
+ .dx-l1-surface,
942
+ .dx-r0-surface,
943
+ .dx-r1-surface,
944
+ .dx-base-surface,
945
+ .dx-attention-surface,
946
+ .dx-card-surface,
947
+ .dx-modal-surface,
948
+ .dx-popover-surface,
949
+ .dx-toolbar-surface,
950
+ .dx-group-surface,
951
+ .dx-input-surface {
952
+ background-color: var(--surface-bg);
953
+ @apply text-base-fg;
890
954
  }
891
- .dx-attention-surface {
892
- @apply bg-attention-surface text-base-fg;
893
- --surface-bg: var(--color-attention-surface);
955
+ [data-surface=overlay],
956
+ [data-surface=popup],
957
+ .dx-modal-surface,
958
+ .dx-popover-surface {
959
+ @apply backdrop-blur-md;
894
960
  }
895
961
  }
896
962
  @layer dx-tokens {
897
- .dx-base-surface,
963
+ [data-surface],
898
964
  .dx-deck-surface,
899
965
  .dx-sidebar-surface,
900
966
  .dx-header-surface,
967
+ .dx-l0-surface,
968
+ .dx-l1-surface,
969
+ .dx-r0-surface,
970
+ .dx-r1-surface,
971
+ .dx-base-surface,
972
+ .dx-attention-surface,
901
973
  .dx-card-surface,
974
+ .dx-modal-surface,
975
+ .dx-popover-surface,
976
+ .dx-toolbar-surface,
902
977
  .dx-group-surface,
903
978
  .dx-input-surface,
904
- .dx-toolbar-surface,
979
+ .dx-input,
980
+ .dx-main-sidebar {
981
+ --color-hover-surface: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.08) c h );
982
+ --color-hover-surface-subtle: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.02) c h );
983
+ --color-current-surface: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.1) c h );
984
+ --color-current-surface-hover: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-state) * 0.12) c h );
985
+ --color-placeholder: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-placeholder) * 0.3) c h );
986
+ --color-scrollbar-thumb: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-scrollbar) * 0.23) c h );
987
+ --color-scrollbar-thumb-hover: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-scrollbar) * 0.3) c h );
988
+ --color-scrollbar-thumb-active: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-scrollbar) * 0.34) c h );
989
+ --color-separator: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-separator-line) * 0.166) c h );
990
+ --color-input-separator: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-separator) * 0.115) c h );
991
+ --color-subdued-separator: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-separator) * 0.089) c h );
992
+ --color-primary-separator: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-separator) * 0.064) c h );
993
+ --color-selected-surface: var(--color-current-surface);
994
+ --color-selected-surface-hover: var(--color-current-surface-hover);
995
+ }
996
+ [data-surface=sunken],
997
+ [data-surface=chrome],
998
+ [data-surface=base],
999
+ [data-surface=raised],
1000
+ [data-surface=overlay],
1001
+ [data-surface=popup],
1002
+ .dx-deck-surface,
1003
+ .dx-sidebar-surface,
1004
+ .dx-header-surface,
1005
+ .dx-l0-surface,
1006
+ .dx-l1-surface,
1007
+ .dx-r0-surface,
1008
+ .dx-r1-surface,
1009
+ .dx-base-surface,
1010
+ .dx-attention-surface,
1011
+ .dx-card-surface,
905
1012
  .dx-modal-surface,
906
1013
  .dx-popover-surface,
907
- .dx-attention-surface,
908
1014
  .dx-main-sidebar {
909
- --color-hover-surface: light-dark( oklch(from var(--surface-bg) calc(l - 0.08) c h), oklch(from var(--surface-bg) calc(l + 0.08) c h) );
910
- --color-hover-surface-subtle: light-dark( oklch(from var(--surface-bg) calc(l - 0.02) c h), oklch(from var(--surface-bg) calc(l + 0.02) c h) );
911
- --color-current-surface: light-dark( oklch(from var(--surface-bg) calc(l - 0.1) c h), oklch(from var(--surface-bg) calc(l + 0.1) c h) );
912
- --color-current-surface-hover: light-dark( oklch(from var(--surface-bg) calc(l - 0.12) c h), oklch(from var(--surface-bg) calc(l + 0.12) c h) );
1015
+ --color-toolbar-surface: oklch( from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-bar) * 0.025) c h );
1016
+ --color-group-surface: oklch(from var(--surface-bg) calc(l + var(--dx-lift) * var(--dx-attenuate-well) * 0.05) c h);
1017
+ --color-group-alt-surface: oklch(from var(--surface-bg) calc(l + var(--dx-lift) * 0.08) c h);
1018
+ --color-input-surface: var(--color-group-surface);
1019
+ --color-focus-surface: var(--color-group-surface);
913
1020
  }
914
1021
  }
915
1022
 
@@ -921,7 +1028,10 @@
921
1028
  user-select: none;
922
1029
  }
923
1030
  .dx-tag--anchor {
924
- @apply inline-block cursor-pointer px-[4px] py-0.5;
1031
+ @apply inline-block cursor-pointer px-[8px];
1032
+ padding-block: 2px;
1033
+ margin-block: -2px;
1034
+ text-indent: 0;
925
1035
  @apply bg-input-surface ring-inset ring ring-neutral-border rounded-sm;
926
1036
  &:hover {
927
1037
  @apply bg-hover-surface;
@@ -1181,9 +1291,21 @@
1181
1291
  .dark & {
1182
1292
  @apply backdrop-blur-lg;
1183
1293
  }
1184
- background-color: var(--color-sidebar-surface);
1294
+ --surface-bg: var(--dx-surface-chrome);
1295
+ background-color: var(--surface-bg);
1296
+ &[data-side=is] {
1297
+ --surface-bg: var(--color-l1-surface);
1298
+ &[data-state=collapsed] {
1299
+ --surface-bg: var(--color-l0-surface);
1300
+ }
1301
+ }
1302
+ &[data-side=ie] {
1303
+ --surface-bg: var(--color-r1-surface);
1304
+ &[data-state=collapsed] {
1305
+ --surface-bg: var(--color-r0-surface);
1306
+ }
1307
+ }
1185
1308
  color: var(--color-sidebar-fg);
1186
- --surface-bg: var(--color-sidebar-surface);
1187
1309
  & :is([aria-current]:not([aria-current=false]), [aria-selected=true]) {
1188
1310
  color: var(--color-sidebar-current-fg);
1189
1311
  }
@@ -1293,6 +1415,7 @@
1293
1415
  /* src/css/layout/native.css */
1294
1416
  @layer dx-components {
1295
1417
  .dx-app-drag {
1418
+ user-select: none;
1296
1419
  -webkit-user-select: none;
1297
1420
  -webkit-app-region: drag;
1298
1421
  --app-region: drag;
@@ -1638,9 +1761,8 @@
1638
1761
  /* src/css/utilities.css */
1639
1762
  @utility dx-expander { @apply flex-1 min-h-0 min-w-0 h-full w-full; }
1640
1763
  @utility dx-container { @apply dx-expander overflow-hidden; }
1641
- @utility dx-column { @apply flex-1 min-w-0 w-full; }
1642
1764
  @utility dx-fullscreen { @apply absolute inset-0; }
1643
- @utility dx-slot-warning { @apply border border-rose-500 border-dashed; }
1765
+ @utility dx-slot-warning { display: contents; & > * { outline: 2px dashed var(--color-rose-500); outline-offset: -2px; } }
1644
1766
  @utility dx-ring-pseudo { @apply relative after:content-[""] after:absolute after:inset-0 after:rounded-[inherit] after:pointer-events-none after:ring after:ring-inset after:ring-transparent; }
1645
1767
  @utility shimmer-text { mask-image: linear-gradient(90deg, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.4) 30%, rgba(0, 0, 0, 1) 50%, rgba(0, 0, 0, 0.4) 70%, rgba(0, 0, 0, 0.4) 100%); -webkit-mask-image: linear-gradient(90deg, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.4) 30%, rgba(0, 0, 0, 1) 50%, rgba(0, 0, 0, 0.4) 70%, rgba(0, 0, 0, 0.4) 100%); mask-size: 200% 100%; -webkit-mask-size: 200% 100%; mask-repeat: repeat-x; -webkit-mask-repeat: repeat-x; animation: shimmer-text 2s linear infinite; }
1646
1768
  @media (prefers-reduced-motion: reduce) {
@@ -1653,7 +1775,7 @@
1653
1775
  }
1654
1776
 
1655
1777
  /* src/css/integrations/codemirror.css */
1656
- @theme { --color-cm-codeblock: oklch(from var(--color-neutral-500) l c h / 0.1); --color-cm-active-line: light-dark( oklch(from var(--color-neutral-200) l c h / 0.5), oklch(from var(--color-neutral-800) l c h / 0.5) ); --color-cm-separator: var(--color-blue-500); --color-cm-cursor: light-dark(var(--color-neutral-900), var(--color-neutral-100)); --color-cm-selection: light-dark( oklch(from var(--color-blue-400) l c h / 0.5), oklch(from var(--color-blue-600) l c h / 0.5) ); --color-cm-focused-selection: light-dark(var(--color-blue-400), oklch(0.445 0.057 256)); --color-cm-highlight: light-dark(var(--color-neutral-950), var(--color-neutral-50)); --color-cm-highlight-surface: light-dark(var(--color-sky-200), var(--color-cyan-800)); --color-cm-comment-text: light-dark(var(--color-neutral-950), var(--color-neutral-950)); --color-cm-comment-surface: light-dark(var(--color-teal-200), var(--color-teal-200)); --color-cm-comment-current-surface: light-dark(var(--color-orange-200), var(--color-orange-200)); --color-cm-code: light-dark(var(--color-stone-600), var(--color-stone-400)); --color-cm-code-inline: light-dark(var(--color-green-500), var(--color-green-500)); --color-cm-code-mark: var(--color-blue-500); --color-cm-heading: light-dark(var(--color-blue-700), var(--color-blue-300)); --color-cm-heading-number: light-dark(var(--color-blue-600), var(--color-blue-400)); }
1778
+ @theme { --color-cm-codeblock: oklch(from var(--color-neutral-500) l c h / 0.1); --color-cm-active-line: light-dark( oklch(from var(--color-neutral-200) l c h / 0.5), oklch(from var(--color-neutral-800) l c h / 0.5) ); --color-cm-separator: var(--color-blue-500); --color-cm-cursor: light-dark(var(--color-neutral-900), var(--color-neutral-100)); --color-cm-selection: light-dark( oklch(from var(--color-blue-400) l c h / 0.5), oklch(from var(--color-blue-600) l c h / 0.5) ); --color-cm-focused-selection: light-dark(var(--color-blue-400), oklch(0.445 0.057 256)); --color-cm-highlight: light-dark(var(--color-neutral-950), var(--color-neutral-50)); --color-cm-highlight-surface: light-dark(var(--color-sky-200), var(--color-cyan-800)); --color-cm-comment-text: light-dark(var(--color-neutral-950), var(--color-neutral-950)); --color-cm-comment-surface: light-dark(var(--color-teal-200), var(--color-teal-200)); --color-cm-comment-current-surface: light-dark(var(--color-orange-200), var(--color-orange-200)); --color-cm-diff-add-surface: light-dark( oklch(from var(--color-green-500) l c h / 0.18), oklch(from var(--color-green-400) l c h / 0.22) ); --color-cm-diff-remove-surface: light-dark( oklch(from var(--color-red-500) l c h / 0.16), oklch(from var(--color-red-400) l c h / 0.22) ); --color-cm-diff-add-gutter: light-dark(var(--color-green-600), var(--color-green-400)); --color-cm-diff-remove-gutter: light-dark(var(--color-red-500), var(--color-red-400)); --color-cm-code: light-dark(var(--color-stone-600), var(--color-stone-400)); --color-cm-code-inline: light-dark(var(--color-green-500), var(--color-green-500)); --color-cm-code-mark: var(--color-blue-500); --color-cm-heading: light-dark(var(--color-blue-700), var(--color-blue-300)); --color-cm-heading-number: light-dark(var(--color-blue-600), var(--color-blue-400)); }
1657
1779
 
1658
1780
  /* src/css/integrations/tldraw.css */
1659
1781
  .tl-background {
@@ -1683,7 +1805,7 @@
1683
1805
  @plugin "@tailwindcss/forms";
1684
1806
  @plugin "tailwind-scrollbar";
1685
1807
  @plugin "tailwindcss-radix";
1686
- @variant dark (&:where(.dark, .dark *));
1808
+ @custom-variant dark (&:where(.dark, .dark *));
1687
1809
  @custom-variant pointer-coarse (@media (pointer: coarse));
1688
1810
  @custom-variant pointer-fine (@media (pointer: fine));
1689
1811
  @custom-variant hover-hover (@media (hover: hover));