@dxos/ui-theme 0.0.0 → 0.8.4-main.52d7546f51

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 (224) hide show
  1. package/dist/lib/browser/index.mjs +3499 -0
  2. package/dist/lib/browser/index.mjs.map +7 -0
  3. package/dist/lib/browser/meta.json +1 -0
  4. package/dist/lib/node-esm/index.mjs +3501 -0
  5. package/dist/lib/node-esm/index.mjs.map +7 -0
  6. package/dist/lib/node-esm/meta.json +1 -0
  7. package/dist/plugin/node-cjs/chunk-TH5YZMTA.cjs +1633 -0
  8. package/dist/plugin/node-cjs/chunk-TH5YZMTA.cjs.map +7 -0
  9. package/dist/plugin/node-cjs/chunk-UUMDOU7E.cjs +79 -0
  10. package/dist/plugin/node-cjs/chunk-UUMDOU7E.cjs.map +7 -0
  11. package/dist/plugin/node-cjs/config/tailwind.cjs +29 -0
  12. package/dist/plugin/node-cjs/config/tailwind.cjs.map +7 -0
  13. package/dist/plugin/node-cjs/meta.json +1 -0
  14. package/dist/plugin/node-cjs/plugins/esbuild-plugin.cjs +90 -0
  15. package/dist/plugin/node-cjs/plugins/esbuild-plugin.cjs.map +7 -0
  16. package/dist/plugin/node-cjs/plugins/plugin.cjs +124 -0
  17. package/dist/plugin/node-cjs/plugins/plugin.cjs.map +7 -0
  18. package/dist/plugin/node-cjs/theme.css +1378 -0
  19. package/dist/plugin/node-cjs/theme.css.map +7 -0
  20. package/dist/plugin/node-esm/chunk-6EGZAB2N.mjs +1628 -0
  21. package/dist/plugin/node-esm/chunk-6EGZAB2N.mjs.map +7 -0
  22. package/dist/plugin/node-esm/chunk-AFRHJHP4.mjs +49 -0
  23. package/dist/plugin/node-esm/chunk-AFRHJHP4.mjs.map +7 -0
  24. package/dist/plugin/node-esm/config/tailwind.mjs +8 -0
  25. package/dist/plugin/node-esm/config/tailwind.mjs.map +7 -0
  26. package/dist/plugin/node-esm/meta.json +1 -0
  27. package/dist/plugin/node-esm/plugins/esbuild-plugin.mjs +63 -0
  28. package/dist/plugin/node-esm/plugins/esbuild-plugin.mjs.map +7 -0
  29. package/dist/plugin/node-esm/plugins/plugin.mjs +98 -0
  30. package/dist/plugin/node-esm/plugins/plugin.mjs.map +7 -0
  31. package/dist/plugin/node-esm/theme.css +1378 -0
  32. package/dist/plugin/node-esm/theme.css.map +7 -0
  33. package/dist/types/src/Tokens.stories.d.ts +10 -0
  34. package/dist/types/src/Tokens.stories.d.ts.map +1 -0
  35. package/dist/types/src/config/index.d.ts +3 -0
  36. package/dist/types/src/config/index.d.ts.map +1 -0
  37. package/dist/types/src/config/tailwind.d.ts +9 -0
  38. package/dist/types/src/config/tailwind.d.ts.map +1 -0
  39. package/dist/types/src/config/tokens/colors/alias-colors.d.ts +21 -0
  40. package/dist/types/src/config/tokens/colors/alias-colors.d.ts.map +1 -0
  41. package/dist/types/src/config/tokens/colors/index.d.ts +5 -0
  42. package/dist/types/src/config/tokens/colors/index.d.ts.map +1 -0
  43. package/dist/types/src/config/tokens/colors/physical-colors.d.ts +23 -0
  44. package/dist/types/src/config/tokens/colors/physical-colors.d.ts.map +1 -0
  45. package/dist/types/src/config/tokens/colors/semantic-colors.d.ts +192 -0
  46. package/dist/types/src/config/tokens/colors/semantic-colors.d.ts.map +1 -0
  47. package/dist/types/src/config/tokens/colors/sememes-calls.d.ts +3 -0
  48. package/dist/types/src/config/tokens/colors/sememes-calls.d.ts.map +1 -0
  49. package/dist/types/src/config/tokens/colors/sememes-codemirror.d.ts +43 -0
  50. package/dist/types/src/config/tokens/colors/sememes-codemirror.d.ts.map +1 -0
  51. package/dist/types/src/config/tokens/colors/sememes-hue.d.ts +4 -0
  52. package/dist/types/src/config/tokens/colors/sememes-hue.d.ts.map +1 -0
  53. package/dist/types/src/config/tokens/colors/sememes-sheet.d.ts +58 -0
  54. package/dist/types/src/config/tokens/colors/sememes-sheet.d.ts.map +1 -0
  55. package/dist/types/src/config/tokens/colors/sememes-system.d.ts +104 -0
  56. package/dist/types/src/config/tokens/colors/sememes-system.d.ts.map +1 -0
  57. package/dist/types/src/config/tokens/colors/types.d.ts +5 -0
  58. package/dist/types/src/config/tokens/colors/types.d.ts.map +1 -0
  59. package/dist/types/src/config/tokens/index.d.ts +3 -0
  60. package/dist/types/src/config/tokens/index.d.ts.map +1 -0
  61. package/dist/types/src/config/tokens/lengths.d.ts +142 -0
  62. package/dist/types/src/config/tokens/lengths.d.ts.map +1 -0
  63. package/dist/types/src/config/tokens/sizes.d.ts +9 -0
  64. package/dist/types/src/config/tokens/sizes.d.ts.map +1 -0
  65. package/dist/types/src/config/tokens/tokens.d.ts +498 -0
  66. package/dist/types/src/config/tokens/tokens.d.ts.map +1 -0
  67. package/dist/types/src/index.d.ts +13 -0
  68. package/dist/types/src/index.d.ts.map +1 -0
  69. package/dist/types/src/plugins/esbuild-plugin.d.ts +9 -0
  70. package/dist/types/src/plugins/esbuild-plugin.d.ts.map +1 -0
  71. package/dist/types/src/plugins/plugin.d.ts +20 -0
  72. package/dist/types/src/plugins/plugin.d.ts.map +1 -0
  73. package/dist/types/src/plugins/resolveContent.d.ts +2 -0
  74. package/dist/types/src/plugins/resolveContent.d.ts.map +1 -0
  75. package/dist/types/src/styles/components/anchored-overflow.d.ts +6 -0
  76. package/dist/types/src/styles/components/anchored-overflow.d.ts.map +1 -0
  77. package/dist/types/src/styles/components/avatar.d.ts +21 -0
  78. package/dist/types/src/styles/components/avatar.d.ts.map +1 -0
  79. package/dist/types/src/styles/components/breadcrumb.d.ts +9 -0
  80. package/dist/types/src/styles/components/breadcrumb.d.ts.map +1 -0
  81. package/dist/types/src/styles/components/button.d.ts +19 -0
  82. package/dist/types/src/styles/components/button.d.ts.map +1 -0
  83. package/dist/types/src/styles/components/dialog.d.ts +17 -0
  84. package/dist/types/src/styles/components/dialog.d.ts.map +1 -0
  85. package/dist/types/src/styles/components/icon-button.d.ts +8 -0
  86. package/dist/types/src/styles/components/icon-button.d.ts.map +1 -0
  87. package/dist/types/src/styles/components/icon.d.ts +7 -0
  88. package/dist/types/src/styles/components/icon.d.ts.map +1 -0
  89. package/dist/types/src/styles/components/index.d.ts +25 -0
  90. package/dist/types/src/styles/components/index.d.ts.map +1 -0
  91. package/dist/types/src/styles/components/input.d.ts +110 -0
  92. package/dist/types/src/styles/components/input.d.ts.map +1 -0
  93. package/dist/types/src/styles/components/link.d.ts +7 -0
  94. package/dist/types/src/styles/components/link.d.ts.map +1 -0
  95. package/dist/types/src/styles/components/list.d.ts +14 -0
  96. package/dist/types/src/styles/components/list.d.ts.map +1 -0
  97. package/dist/types/src/styles/components/main.d.ts +28 -0
  98. package/dist/types/src/styles/components/main.d.ts.map +1 -0
  99. package/dist/types/src/styles/components/menu.d.ts +13 -0
  100. package/dist/types/src/styles/components/menu.d.ts.map +1 -0
  101. package/dist/types/src/styles/components/message.d.ts +11 -0
  102. package/dist/types/src/styles/components/message.d.ts.map +1 -0
  103. package/dist/types/src/styles/components/popover.d.ts +11 -0
  104. package/dist/types/src/styles/components/popover.d.ts.map +1 -0
  105. package/dist/types/src/styles/components/scroll-area.d.ts +16 -0
  106. package/dist/types/src/styles/components/scroll-area.d.ts.map +1 -0
  107. package/dist/types/src/styles/components/select.d.ts +13 -0
  108. package/dist/types/src/styles/components/select.d.ts.map +1 -0
  109. package/dist/types/src/styles/components/separator.d.ts +8 -0
  110. package/dist/types/src/styles/components/separator.d.ts.map +1 -0
  111. package/dist/types/src/styles/components/skeleton.d.ts +7 -0
  112. package/dist/types/src/styles/components/skeleton.d.ts.map +1 -0
  113. package/dist/types/src/styles/components/status.d.ts +9 -0
  114. package/dist/types/src/styles/components/status.d.ts.map +1 -0
  115. package/dist/types/src/styles/components/tag.d.ts +7 -0
  116. package/dist/types/src/styles/components/tag.d.ts.map +1 -0
  117. package/dist/types/src/styles/components/toast.d.ts +12 -0
  118. package/dist/types/src/styles/components/toast.d.ts.map +1 -0
  119. package/dist/types/src/styles/components/toolbar.d.ts +11 -0
  120. package/dist/types/src/styles/components/toolbar.d.ts.map +1 -0
  121. package/dist/types/src/styles/components/tooltip.d.ts +8 -0
  122. package/dist/types/src/styles/components/tooltip.d.ts.map +1 -0
  123. package/dist/types/src/styles/components/treegrid.d.ts +10 -0
  124. package/dist/types/src/styles/components/treegrid.d.ts.map +1 -0
  125. package/dist/types/src/styles/fragments/density.d.ts +13 -0
  126. package/dist/types/src/styles/fragments/density.d.ts.map +1 -0
  127. package/dist/types/src/styles/fragments/dimension.d.ts +5 -0
  128. package/dist/types/src/styles/fragments/dimension.d.ts.map +1 -0
  129. package/dist/types/src/styles/fragments/disabled.d.ts +3 -0
  130. package/dist/types/src/styles/fragments/disabled.d.ts.map +1 -0
  131. package/dist/types/src/styles/fragments/elevation.d.ts +15 -0
  132. package/dist/types/src/styles/fragments/elevation.d.ts.map +1 -0
  133. package/dist/types/src/styles/fragments/focus.d.ts +6 -0
  134. package/dist/types/src/styles/fragments/focus.d.ts.map +1 -0
  135. package/dist/types/src/styles/fragments/group.d.ts +5 -0
  136. package/dist/types/src/styles/fragments/group.d.ts.map +1 -0
  137. package/dist/types/src/styles/fragments/hover.d.ts +17 -0
  138. package/dist/types/src/styles/fragments/hover.d.ts.map +1 -0
  139. package/dist/types/src/styles/fragments/index.d.ts +17 -0
  140. package/dist/types/src/styles/fragments/index.d.ts.map +1 -0
  141. package/dist/types/src/styles/fragments/layout.d.ts +3 -0
  142. package/dist/types/src/styles/fragments/layout.d.ts.map +1 -0
  143. package/dist/types/src/styles/fragments/motion.d.ts +2 -0
  144. package/dist/types/src/styles/fragments/motion.d.ts.map +1 -0
  145. package/dist/types/src/styles/fragments/ornament.d.ts +5 -0
  146. package/dist/types/src/styles/fragments/ornament.d.ts.map +1 -0
  147. package/dist/types/src/styles/fragments/selected.d.ts +13 -0
  148. package/dist/types/src/styles/fragments/selected.d.ts.map +1 -0
  149. package/dist/types/src/styles/fragments/shimmer.d.ts +3 -0
  150. package/dist/types/src/styles/fragments/shimmer.d.ts.map +1 -0
  151. package/dist/types/src/styles/fragments/size.d.ts +9 -0
  152. package/dist/types/src/styles/fragments/size.d.ts.map +1 -0
  153. package/dist/types/src/styles/fragments/surface.d.ts +9 -0
  154. package/dist/types/src/styles/fragments/surface.d.ts.map +1 -0
  155. package/dist/types/src/styles/fragments/text.d.ts +7 -0
  156. package/dist/types/src/styles/fragments/text.d.ts.map +1 -0
  157. package/dist/types/src/styles/fragments/valence.d.ts +13 -0
  158. package/dist/types/src/styles/fragments/valence.d.ts.map +1 -0
  159. package/dist/types/src/styles/index.d.ts +5 -0
  160. package/dist/types/src/styles/index.d.ts.map +1 -0
  161. package/dist/types/src/styles/primitives/container.d.ts +15 -0
  162. package/dist/types/src/styles/primitives/container.d.ts.map +1 -0
  163. package/dist/types/src/styles/primitives/index.d.ts +2 -0
  164. package/dist/types/src/styles/primitives/index.d.ts.map +1 -0
  165. package/dist/types/src/styles/theme.d.ts +5 -0
  166. package/dist/types/src/styles/theme.d.ts.map +1 -0
  167. package/dist/types/src/tailwind.d.ts +3 -0
  168. package/dist/types/src/tailwind.d.ts.map +1 -0
  169. package/dist/types/src/types.d.ts +3 -0
  170. package/dist/types/src/types.d.ts.map +1 -0
  171. package/dist/types/src/util/hash-styles.d.ts +15 -0
  172. package/dist/types/src/util/hash-styles.d.ts.map +1 -0
  173. package/dist/types/src/util/index.d.ts +3 -0
  174. package/dist/types/src/util/index.d.ts.map +1 -0
  175. package/dist/types/src/util/mx.d.ts +2 -0
  176. package/dist/types/src/util/mx.d.ts.map +1 -0
  177. package/dist/types/src/util/withLogical.d.ts +164 -0
  178. package/dist/types/src/util/withLogical.d.ts.map +1 -0
  179. package/dist/types/tsconfig.tsbuildinfo +1 -0
  180. package/package.json +10 -6
  181. package/src/Tokens.stories.tsx +2 -2
  182. package/src/config/index.ts +1 -1
  183. package/src/config/tailwind.ts +79 -64
  184. package/src/config/tokens/colors/index.ts +8 -0
  185. package/src/config/tokens/{sememes-system.ts → colors/sememes-system.ts} +79 -70
  186. package/src/config/tokens/index.ts +2 -88
  187. package/src/config/tokens/lengths.ts +18 -10
  188. package/src/config/tokens/sizes.ts +7 -2
  189. package/src/config/tokens/tokens.ts +87 -0
  190. package/src/index.ts +4 -3
  191. package/src/styles/components/dialog.ts +27 -3
  192. package/src/styles/components/index.ts +1 -0
  193. package/src/styles/components/input.ts +2 -2
  194. package/src/styles/components/main.ts +7 -9
  195. package/src/styles/components/menu.ts +2 -10
  196. package/src/styles/components/popover.ts +3 -3
  197. package/src/styles/components/scroll-area.ts +70 -23
  198. package/src/styles/components/skeleton.ts +23 -0
  199. package/src/styles/components/tag.ts +1 -1
  200. package/src/styles/components/toolbar.ts +16 -9
  201. package/src/styles/components/tooltip.ts +2 -2
  202. package/src/styles/fragments/motion.ts +1 -1
  203. package/src/styles/fragments/size.ts +2 -2
  204. package/src/styles/index.ts +2 -1
  205. package/src/styles/layers/dialog.css +52 -21
  206. package/src/styles/layers/index.css +1 -0
  207. package/src/styles/layers/main.css +30 -7
  208. package/src/styles/layers/scrollbar.css +11 -0
  209. package/src/styles/layers/size.css +26 -21
  210. package/src/styles/layers/tokens.css +3 -1
  211. package/src/styles/layers/typography.css +22 -2
  212. package/src/styles/primitives/container.ts +33 -0
  213. package/src/styles/primitives/index.ts +5 -0
  214. package/src/styles/theme.ts +18 -5
  215. package/src/tailwind.ts +3 -1
  216. package/src/types.ts +1 -1
  217. /package/src/config/tokens/{alias-colors.ts → colors/alias-colors.ts} +0 -0
  218. /package/src/config/tokens/{physical-colors.ts → colors/physical-colors.ts} +0 -0
  219. /package/src/config/tokens/{semantic-colors.ts → colors/semantic-colors.ts} +0 -0
  220. /package/src/config/tokens/{sememes-calls.ts → colors/sememes-calls.ts} +0 -0
  221. /package/src/config/tokens/{sememes-codemirror.ts → colors/sememes-codemirror.ts} +0 -0
  222. /package/src/config/tokens/{sememes-hue.ts → colors/sememes-hue.ts} +0 -0
  223. /package/src/config/tokens/{sememes-sheet.ts → colors/sememes-sheet.ts} +0 -0
  224. /package/src/config/tokens/{types.ts → colors/types.ts} +0 -0
@@ -0,0 +1,87 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type TailwindAdapterConfig } from '@ch-ui/tailwind-tokens';
6
+ import adapter from '@ch-ui/tailwind-tokens';
7
+ import { type TokenSet } from '@ch-ui/tokens';
8
+
9
+ import { aliasColors, huePalettes, physicalColors, semanticColors, systemAliases, systemSememes } from './colors';
10
+ import { lengthsFacet, maxSizesFacet } from './lengths';
11
+
12
+ const adapterConfig: TailwindAdapterConfig = {
13
+ colors: {
14
+ facet: 'colors',
15
+ disposition: 'overwrite',
16
+ tokenization: 'recursive',
17
+ },
18
+ borderWidth: {
19
+ facet: 'lengths',
20
+ disposition: 'extend',
21
+ tokenization: 'omit-series',
22
+ },
23
+ ringWidth: {
24
+ facet: 'lengths',
25
+ disposition: 'extend',
26
+ tokenization: 'omit-series',
27
+ },
28
+ ringOffsetWidth: {
29
+ facet: 'lengths',
30
+ disposition: 'extend',
31
+ tokenization: 'omit-series',
32
+ },
33
+ outlineWidth: {
34
+ facet: 'lengths',
35
+ disposition: 'extend',
36
+ tokenization: 'omit-series',
37
+ },
38
+ spacing: {
39
+ facet: 'lengths',
40
+ disposition: 'extend',
41
+ tokenization: 'keep-series',
42
+ },
43
+ };
44
+
45
+ export const hues = Object.keys(huePalettes);
46
+
47
+ export const tokenSet = {
48
+ colors: {
49
+ physical: physicalColors,
50
+ semantic: semanticColors,
51
+ alias: aliasColors,
52
+ },
53
+ lengths: lengthsFacet,
54
+ maxSizes: maxSizesFacet,
55
+ } satisfies TokenSet;
56
+
57
+ export const userDefaultTokenSet = {
58
+ colors: {
59
+ physical: {
60
+ definitions: {
61
+ series: {
62
+ neutral: physicalColors.definitions!.series!.neutral,
63
+ primary: physicalColors.definitions!.series!.primary,
64
+ },
65
+ accompanyingSeries: physicalColors.definitions!.accompanyingSeries,
66
+ },
67
+ conditions: physicalColors.conditions,
68
+ series: {
69
+ neutral: physicalColors.series.neutral,
70
+ primary: physicalColors.series.primary,
71
+ },
72
+ namespace: physicalColors.namespace,
73
+ },
74
+ semantic: {
75
+ conditions: semanticColors.conditions,
76
+ sememes: systemSememes,
77
+ namespace: semanticColors.namespace,
78
+ },
79
+ alias: {
80
+ conditions: aliasColors.conditions,
81
+ aliases: systemAliases,
82
+ namespace: aliasColors.namespace,
83
+ },
84
+ },
85
+ } satisfies TokenSet;
86
+
87
+ export const tokensTailwindConfig = adapter(tokenSet, adapterConfig);
package/src/index.ts CHANGED
@@ -2,14 +2,15 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { type TailwindConfig, tailwindConfig } from './config';
5
+ import { tailwindConfig } from './config';
6
6
 
7
- export { cardMinInlineSize, cardMaxInlineSize, hues, userDefaultTokenSet } from './config';
7
+ // TODO(burdon): Factor out public vs. internals.
8
+ export { cardDefaultInlineSize, cardMinInlineSize, cardMaxInlineSize, hues, userDefaultTokenSet } from './config';
8
9
  export * from './styles';
9
10
  export * from './types';
10
11
  export * from './util';
11
12
 
12
- const tokens: TailwindConfig['theme'] = tailwindConfig({}).theme;
13
+ const { theme: tokens } = tailwindConfig({});
13
14
 
14
15
  export { tokens };
15
16
 
@@ -7,20 +7,41 @@ import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-typ
7
7
  import { mx } from '../../util';
8
8
  import { descriptionText } from '../fragments';
9
9
 
10
+ export type DialogSize = 'sm' | 'md' | 'lg' | 'xl';
11
+
12
+ const sizeMap: Record<DialogSize, string> = {
13
+ sm: 'md:!max-is-[24rem]',
14
+ md: 'md:!max-is-[32rem]',
15
+ lg: 'md:!max-is-[40rem]',
16
+ xl: 'md:!max-is-[60rem]',
17
+ };
18
+
10
19
  export type DialogStyleProps = {
11
20
  srOnly?: boolean;
12
21
  inOverlayLayout?: boolean;
13
22
  elevation?: Elevation;
23
+ size?: DialogSize;
14
24
  };
15
25
 
16
26
  export const dialogOverlay: ComponentFunction<DialogStyleProps> = (_props, ...etc) => mx('dx-dialog__overlay', ...etc);
17
27
 
18
- export const dialogContent: ComponentFunction<DialogStyleProps> = ({ inOverlayLayout }, ...etc) =>
19
- mx(
20
- '@container dx-dialog__content dx-focus-ring modal-surface density-coarse',
28
+ export const dialogContent: ComponentFunction<DialogStyleProps> = ({ inOverlayLayout, size }, ...etc) => {
29
+ return mx(
30
+ '@container dx-dialog__content dx-focus-ring modal-surface density-coarse is-full gap-4',
21
31
  !inOverlayLayout && 'fixed z-50 top-[50%] left-[50%] -translate-x-[50%] -translate-y-[50%]',
32
+ size && sizeMap[size],
22
33
  ...etc,
23
34
  );
35
+ };
36
+
37
+ export const dialogHeader: ComponentFunction<DialogStyleProps> = (_props, ...etc) =>
38
+ mx('dx-dialog__header flex items-center justify-between', ...etc);
39
+
40
+ export const dialogBody: ComponentFunction<DialogStyleProps> = (_props, ...etc) =>
41
+ mx('dx-dialog__body flex flex-col gap-4 bs-full overflow-hidden', ...etc);
42
+
43
+ export const dialogActionBar: ComponentFunction<DialogStyleProps> = (_props, ...etc) =>
44
+ mx('dx-dialog__actionbar flex items-center density-coarse', ...etc);
24
45
 
25
46
  export const dialogTitle: ComponentFunction<DialogStyleProps> = ({ srOnly }, ...etc) =>
26
47
  mx('dx-dialog__title', srOnly && 'sr-only', ...etc);
@@ -31,6 +52,9 @@ export const dialogDescription: ComponentFunction<DialogStyleProps> = ({ srOnly
31
52
  export const dialogTheme: Theme<DialogStyleProps> = {
32
53
  overlay: dialogOverlay,
33
54
  content: dialogContent,
55
+ header: dialogHeader,
56
+ body: dialogBody,
57
+ actionbar: dialogActionBar,
34
58
  title: dialogTitle,
35
59
  description: dialogDescription,
36
60
  };
@@ -19,6 +19,7 @@ export * from './popover';
19
19
  export * from './scroll-area';
20
20
  export * from './select';
21
21
  export * from './separator';
22
+ export * from './skeleton';
22
23
  export * from './status';
23
24
  export * from './tag';
24
25
  export * from './toast';
@@ -47,6 +47,7 @@ export type InputMetaStyleProps = Partial<{
47
47
  validationValence: MessageValence;
48
48
  }>;
49
49
 
50
+ // TODO(burdon): Use semantic tokens.
50
51
  export const neutralInputValence = '';
51
52
  export const successInputValence = 'shadow-emerald-500/50 dark:shadow-emerald-600/50';
52
53
  export const infoInputValence = 'shadow-cyan-500/50 dark:shadow-cyan-600/50';
@@ -64,8 +65,7 @@ const booleanInputSurface =
64
65
  const booleanInputSurfaceHover =
65
66
  'hover:bg-unAccentHover hover:aria-checked:bg-accentSurfaceHover hover:aria-[checked=mixed]:bg-accentSurfaceHover';
66
67
 
67
- export const inputTextLabel =
68
- 'text-description text-xs font-medium mbs-inputSpacingBlock mbe-labelSpacingBlock first:mbs-0';
68
+ const inputTextLabel = 'text-sm text-description plb-1';
69
69
 
70
70
  export const inputValence = (valence?: MessageValence) => {
71
71
  switch (valence) {
@@ -6,26 +6,24 @@ import { type ComponentFunction } from '@dxos/ui-types';
6
6
 
7
7
  import { mx } from '../../util';
8
8
 
9
- // Padding to apply to in-flow elements which need to clear the fixed topbar / bottombar.
9
+ // Padding to apply to in-flow elements which need to clear the fixed topbar/bottombar.
10
10
  export const topbarBlockPaddingStart = 'pbs-[--topbar-size] sticky-top-from-topbar-bottom';
11
11
  export const bottombarBlockPaddingEnd = 'pbe-[--statusbar-size] sticky-bottom-from-statusbar-bottom';
12
12
 
13
+ export const mainPadding = 'dx-main-content-padding';
14
+ export const mainPaddingTransitions = 'dx-main-content-padding-transitions';
15
+ export const mainIntrinsicSize = 'dx-main-intrinsic-size';
16
+
13
17
  export type MainStyleProps = Partial<{
14
18
  bounce: boolean;
15
19
  handlesFocus: boolean;
16
20
  }>;
17
21
 
18
- export const mainSidebar: ComponentFunction<MainStyleProps> = (_, ...etc) =>
19
- mx('dx-main-sidebar', 'dx-focus-ring-inset-over-all', ...etc);
20
-
21
- export const mainPadding = 'dx-main-content-padding';
22
-
23
- export const mainPaddingTransitions = 'dx-main-content-padding-transitions';
24
-
25
22
  export const mainContent: ComponentFunction<MainStyleProps> = ({ bounce }, ...etc) =>
26
23
  mx(mainPadding, mainPaddingTransitions, bounce && 'dx-main-bounce-layout', 'dx-focus-ring-main', ...etc);
27
24
 
28
- export const mainIntrinsicSize = 'dx-main-intrinsic-size';
25
+ export const mainSidebar: ComponentFunction<MainStyleProps> = (_, ...etc) =>
26
+ mx('dx-main-sidebar', 'dx-focus-ring-inset-over-all', ...etc);
29
27
 
30
28
  export const mainOverlay: ComponentFunction<MainStyleProps> = (_, ...etc) => mx('dx-main-overlay', ...etc);
31
29
 
@@ -5,15 +5,7 @@
5
5
  import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-types';
6
6
 
7
7
  import { mx } from '../../util';
8
- import {
9
- dataDisabled,
10
- descriptionText,
11
- modalSurface,
12
- popperMotion,
13
- subduedFocus,
14
- surfaceShadow,
15
- surfaceZIndex,
16
- } from '../fragments';
8
+ import { dataDisabled, descriptionText, modalSurface, subduedFocus, surfaceShadow, surfaceZIndex } from '../fragments';
17
9
 
18
10
  export type MenuStyleProps = Partial<{
19
11
  constrainBlockSize: boolean;
@@ -29,7 +21,7 @@ export const menuContent: ComponentFunction<MenuStyleProps> = ({ elevation }, ..
29
21
  surfaceZIndex({ elevation, level: 'menu' }),
30
22
  surfaceShadow({ elevation: 'positioned' }),
31
23
  modalSurface,
32
- popperMotion,
24
+ // popperMotion,
33
25
  ...etc,
34
26
  );
35
27
 
@@ -15,9 +15,9 @@ export type PopoverStyleProps = Partial<{
15
15
 
16
16
  export const popoverViewport: ComponentFunction<PopoverStyleProps> = ({ constrainBlock, constrainInline }, ...etc) =>
17
17
  mx(
18
- 'rounded-md',
19
- constrainBlock && 'max-bs-[--radix-popover-content-available-height] overflow-y-auto',
20
- constrainInline && 'max-is-[--radix-popover-content-available-width] overflow-x-auto',
18
+ 'flex flex-col rounded-md',
19
+ constrainBlock && 'max-bs-[--radix-popover-content-available-height] overflow-hidden',
20
+ constrainInline && 'max-is-[--radix-popover-content-available-width] overflow-hidden',
21
21
  ...etc,
22
22
  );
23
23
 
@@ -1,43 +1,90 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import { type ComponentFunction, type Theme } from '@dxos/ui-types';
5
+ import { type AllowedAxis, type ComponentFunction, type Theme } from '@dxos/ui-types';
6
6
 
7
7
  import { mx } from '../../util';
8
8
 
9
- export type ScrollAreaStyleProps = {};
9
+ export type ScrollAreaStyleProps = {
10
+ orientation?: AllowedAxis;
11
+ autoHide?: boolean;
12
+ margin?: boolean;
13
+ padding?: boolean;
14
+ thin?: boolean;
15
+ snap?: boolean;
16
+ };
10
17
 
11
- export const scrollAreaRoot: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
12
- mx('__bs-full __is-full overflow-hidden', ...etc);
18
+ export const scrollAreaRoot: ComponentFunction<ScrollAreaStyleProps> = ({ orientation, margin, thin }, ...etc) =>
19
+ mx(
20
+ 'overflow-hidden',
13
21
 
14
- export const scrollAreaViewport: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
15
- // mx('bs-full is-full [&>div]:is-full [&>div]:bs-auto', ...etc);
16
- mx('bs-full is-full [&>div]:table-fixed [&>div]:is-full', ...etc);
22
+ orientation === 'vertical' && 'group/scroll-v bs-full is-full min-bs-0',
23
+ orientation === 'horizontal' && 'group/scroll-h bs-full is-full min-is-0',
24
+ orientation === 'all' && 'group/scroll-all bs-full is-full min-bs-0 min-is-0',
25
+
26
+ // Balance left/right, top/bottom "margin" with scrollbar.
27
+ margin && [
28
+ orientation === 'vertical' && (thin ? 'pis-[4px]' : 'pis-[8px]'),
29
+ orientation === 'horizontal' && (thin ? 'pbs-[4px]' : 'pbs-[8px]'),
30
+ orientation === 'all' && (thin ? 'pis-[4px] pbs-[8px]' : 'pis-[8px] pbs-[8px]'),
31
+ ],
17
32
 
18
- export const scrollAreaScrollbar: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
19
- mx(
20
- 'flex select-none touch-none p-0.5 ease-out',
21
- 'data-[orientation=vertical]:is-1.5 sm:data-[orientation=vertical]:data-[variant=coarse]:is-3',
22
- 'data-[orientation=horizontal]:flex-col data-[orientation=horizontal]:bs-1.5 sm:data-[orientation=horizontal]:data-[variant=coarse]:bs-3',
23
- 'sm:data-[variant=coarse]:bg-separator rounded-full',
24
- '[&>div]:bg-unAccent sm:[&[data-variant=coarse]>div]:bg-attention',
25
33
  ...etc,
26
34
  );
27
35
 
28
- export const scrollAreaThumb: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
36
+ /**
37
+ * NOTE: The browser reserves space for scrollbars.
38
+ */
39
+ export const scrollAreaViewport: ComponentFunction<ScrollAreaStyleProps> = (
40
+ { orientation, autoHide, padding, snap, thin },
41
+ ...etc
42
+ ) =>
29
43
  mx(
30
- 'flex-1 rounded-full relative',
31
- "before:content-[''] before:absolute before:top-1/2 before:left-1/2 before:-translate-x-1/2 before:-translate-y-1/2 before:is-full before:bs-full before:min-w-[6px] before:min-h-[6px]",
44
+ 'bs-full is-full',
45
+
46
+ orientation === 'vertical' && 'flex flex-col overflow-y-scroll',
47
+ orientation === 'horizontal' && 'flex overflow-x-scroll',
48
+ orientation === 'all' && 'overflow-scroll',
49
+
50
+ thin
51
+ ? '[&::-webkit-scrollbar]:is-[4px] [&::-webkit-scrollbar]:bs-[4px]'
52
+ : '[&::-webkit-scrollbar]:is-[8px] [&::-webkit-scrollbar]:bs-[8px]',
53
+
54
+ // '[&::-webkit-scrollbar-thumb]:rounded-full',
55
+ '[&::-webkit-scrollbar-thumb]:bg-transparent',
56
+ '[&::-webkit-scrollbar-corner]:bg-transparent',
57
+
58
+ // TODO(burdon): Define token.
59
+ autoHide
60
+ ? [
61
+ orientation === 'vertical' && 'group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-subduedSeparator',
62
+ orientation === 'horizontal' && 'group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-subduedSeparator',
63
+ orientation === 'all' && 'group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-subduedSeparator',
64
+ ]
65
+ : [
66
+ orientation === 'vertical' && '[&::-webkit-scrollbar-thumb]:bg-subduedSeparator',
67
+ orientation === 'horizontal' && '[&::-webkit-scrollbar-thumb]:bg-subduedSeparator',
68
+ orientation === 'all' && '[&::-webkit-scrollbar-thumb]:bg-subduedSeparator',
69
+ ],
70
+
71
+ // TODO(burdon): Are scrollbars reserved on native devices?
72
+ padding && [
73
+ orientation === 'vertical' && 'pli-[4px]',
74
+ orientation === 'horizontal' && 'pbe-[4px]',
75
+ orientation === 'all' && 'pis-[4px] pbe-[4px]',
76
+ ],
77
+
78
+ snap && [
79
+ orientation === 'vertical' && 'snap-y snap-mandatory',
80
+ orientation === 'horizontal' && 'snap-x snap-mandatory',
81
+ orientation === 'all' && 'snap-both snap-mandatory',
82
+ ],
83
+
32
84
  ...etc,
33
85
  );
34
86
 
35
- export const scrollAreaCorner: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) => mx(...etc);
36
-
37
87
  export const scrollAreaTheme: Theme<ScrollAreaStyleProps> = {
38
88
  root: scrollAreaRoot,
39
89
  viewport: scrollAreaViewport,
40
- scrollbar: scrollAreaScrollbar,
41
- thumb: scrollAreaThumb,
42
- corner: scrollAreaCorner,
43
90
  };
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import type { ComponentFunction, Theme } from '@dxos/ui-types';
6
+
7
+ import { mx } from '../../util';
8
+
9
+ export type SkeletonStyleProps = {
10
+ variant?: 'default' | 'circle' | 'text';
11
+ };
12
+
13
+ export const skeletonRoot: ComponentFunction<SkeletonStyleProps> = ({ variant = 'default' }, ...etc) =>
14
+ mx(
15
+ 'animate-pulse bg-neutral-250 dark:bg-neutral-750 rounded-md',
16
+ variant === 'circle' && 'rounded-full',
17
+ variant === 'text' && 'rounded',
18
+ ...etc,
19
+ );
20
+
21
+ export const skeletonTheme: Theme<SkeletonStyleProps> = {
22
+ root: skeletonRoot,
23
+ };
@@ -16,7 +16,7 @@ export type TagStyleProps = {
16
16
  palette?: ChromaticPalette | NeutralPalette | MessageValence;
17
17
  };
18
18
 
19
- export const tagRoot: ComponentFunction<TagStyleProps> = ({ palette = 'neutral' }, ...etc) => mx('dx-tag', ...etc);
19
+ export const tagRoot: ComponentFunction<TagStyleProps> = (_, ...etc) => mx('dx-tag', ...etc);
20
20
 
21
21
  export const tagTheme: Theme<TagStyleProps> = {
22
22
  root: tagRoot,
@@ -2,21 +2,28 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { type ComponentFunction, type Theme } from '@dxos/ui-types';
5
+ import { type ComponentFunction, type Density, type Theme } from '@dxos/ui-types';
6
6
 
7
7
  import { mx } from '../../util';
8
8
  import { textBlockWidth } from '../fragments';
9
9
 
10
- export type ToolbarStyleProps = Partial<{ layoutManaged: boolean; disabled: boolean }>;
10
+ export type ToolbarStyleProps = Partial<{
11
+ density: Density;
12
+ disabled: boolean;
13
+ layoutManaged: boolean;
14
+ }>;
11
15
 
12
16
  export const toolbarLayout =
13
- 'is-full shrink-0 flex flex-nowrap items-center gap-1 p-1 overflow-x-auto scrollbar-none contain-layout';
14
-
15
- // TODO(burdon): Detect: &:not([data-is-attention-source]_&)]:
16
- export const toolbarInactive = '*:opacity-20';
17
-
18
- export const toolbarRoot: ComponentFunction<ToolbarStyleProps> = ({ layoutManaged, disabled }, ...etc) => {
19
- return mx('bg-toolbarSurface dx-toolbar', !layoutManaged && toolbarLayout, disabled && toolbarInactive, ...etc);
17
+ 'is-full shrink-0 flex flex-nowrap p-1 gap-1 items-center overflow-x-auto scrollbar-none contain-layout';
18
+
19
+ export const toolbarRoot: ComponentFunction<ToolbarStyleProps> = ({ density, disabled, layoutManaged }, ...etc) => {
20
+ return mx(
21
+ 'bg-toolbarSurface dx-toolbar',
22
+ density === 'coarse' && 'bs-[var(--rail-size)] !pli-3',
23
+ disabled && '*:opacity-20',
24
+ !layoutManaged && toolbarLayout,
25
+ ...etc,
26
+ );
20
27
  };
21
28
 
22
29
  export const toolbarInner: ComponentFunction<ToolbarStyleProps> = ({ layoutManaged }, ...etc) => {
@@ -5,7 +5,7 @@
5
5
  import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-types';
6
6
 
7
7
  import { mx } from '../../util';
8
- import { chromeText, popperMotion, surfaceShadow, surfaceZIndex } from '../fragments';
8
+ import { chromeText, surfaceShadow, surfaceZIndex } from '../fragments';
9
9
 
10
10
  export type TooltipStyleProps = Partial<{
11
11
  elevation: Elevation;
@@ -14,7 +14,7 @@ export type TooltipStyleProps = Partial<{
14
14
  export const tooltipContent: ComponentFunction<TooltipStyleProps> = ({ elevation }, ...etc) =>
15
15
  mx(
16
16
  'inline-flex items-center rounded-sm plb-1 pli-2 max-is-64 bg-inverseSurface text-inverseSurfaceText',
17
- popperMotion,
17
+ // popperMotion,
18
18
  surfaceShadow({ elevation: 'positioned' }),
19
19
  surfaceZIndex({ elevation, level: 'tooltip' }),
20
20
  chromeText,
@@ -3,4 +3,4 @@
3
3
  //
4
4
 
5
5
  export const popperMotion =
6
- 'will-change-[opacity,transform] data-[side=top]:animate-slideDownAndFade data-[side=right]:animate-slideLeftAndFade data-[side=bottom]:animate-slideUpAndFade data-[side=left]:animate-slideRightAndFade';
6
+ 'will-change-[opacity,transform] data-[side=top]:animate-slide-down-and-fade data-[side=right]:animate-slide-left-and-fade data-[side=bottom]:animate-slide-up-and-fade data-[side=left]:animate-slide-right-and-fade';
@@ -8,7 +8,7 @@ import { mx } from '../../util';
8
8
 
9
9
  export const sizeWidthMap = new Map<Size, string>([
10
10
  [0, 'is-0'],
11
- ['px', 'is-px'],
11
+ ['px', 'is-px'], // 1px
12
12
  [0.5, 'is-0.5'],
13
13
  [1, 'is-1'],
14
14
  [1.5, 'is-1.5'],
@@ -46,7 +46,7 @@ export const sizeWidthMap = new Map<Size, string>([
46
46
 
47
47
  export const sizeHeightMap = new Map<Size, string>([
48
48
  [0, 'bs-0'],
49
- ['px', 'bs-px'],
49
+ ['px', 'bs-px'], // 1px
50
50
  [0.5, 'bs-0.5'],
51
51
  [1, 'bs-1'],
52
52
  [1.5, 'bs-1.5'],
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './fragments';
6
5
  export * from './components';
6
+ export * from './fragments';
7
+ export * from './primitives';
7
8
  export * from './theme';
@@ -1,42 +1,73 @@
1
1
  @layer dx-components {
2
2
  .dx-dialog__overlay {
3
- @apply fixed z-50 inset-inline-0 block-start-0 bs-dvh bg-scrimSurface overflow-auto grid place-items-center pbs-[env(safe-area-inset-top)];
4
- @media (min-width: theme('screens.sm')) {
5
- @apply p-[calc(env(safe-area-inset-top)+.6rem)];
3
+ @apply z-50 fixed grid inset-inline-0 block-start-0 bs-dvh pbs-[env(safe-area-inset-top)] place-items-center overflow-auto bg-scrimSurface;
4
+
5
+ &[data-state='open'] {
6
+ @apply animate-fade-in;
6
7
  }
7
- @media (min-width: theme('screens.md')) {
8
- @apply p-[calc(env(safe-area-inset-top)+1.2rem)];
8
+
9
+ &[data-state='closed'] {
10
+ @apply animate-fade-out;
9
11
  }
10
- @media (min-width: theme('screens.lg')) {
11
- @apply p-[calc(env(safe-area-inset-top)+2.4rem)];
12
- }
13
- &[data-block-align="start"]{
12
+
13
+ &[data-block-align='start'] {
14
14
  align-items: start;
15
15
  justify-items: center;
16
16
  }
17
- &[data-block-align="center"]{
17
+
18
+ &[data-block-align='center'] {
18
19
  place-items: center;
19
20
  }
20
- &[data-block-align="end"]{
21
+
22
+ &[data-block-align='end'] {
21
23
  align-items: end;
22
24
  justify-items: center;
23
25
  }
24
26
  }
27
+
28
+ @media (min-width: theme('screens.sm')) {
29
+ .dx-dialog__overlay {
30
+ @apply p-[calc(env(safe-area-inset-top)+.6rem)];
31
+ }
32
+ }
33
+
34
+ @media (min-width: theme('screens.md')) {
35
+ .dx-dialog__overlay {
36
+ @apply p-[calc(env(safe-area-inset-top)+1.2rem)];
37
+ }
38
+ }
39
+
40
+ @media (min-width: theme('screens.lg')) {
41
+ .dx-dialog__overlay {
42
+ @apply p-[calc(env(safe-area-inset-top)+2.4rem)];
43
+ }
44
+ }
45
+
25
46
  .dx-dialog__content {
26
- /* TODO(thure): `flex` should not be default. */
27
- @apply flex flex-col is-dvw max-is-full p-4 animate-slideUpAndFade shadow-md backdrop-blur;
28
- will-change: opacity, transform;
29
- @media (min-width: theme('screens.sm')) {
47
+ @apply flex flex-col is-dvw max-bs-full max-is-full p-4 overflow-hidden shadow-md backdrop-blur;
48
+
49
+ &[data-state='open'] {
50
+ @apply animate-slide-up-and-fade;
51
+ }
52
+
53
+ &[data-state='closed'] {
54
+ @apply animate-slide-down-and-fade;
55
+ }
56
+ }
57
+
58
+ @media (min-width: theme('screens.sm')) {
59
+ .dx-dialog__content {
30
60
  @apply is-[95vw] border rounded-md border-separator;
31
61
  }
32
- @media (min-width: theme('screens.md')) {
62
+ }
63
+
64
+ @media (min-width: theme('screens.md')) {
65
+ .dx-dialog__content {
33
66
  @apply max-is-[24rem];
34
67
  }
35
68
  }
69
+
36
70
  .dx-dialog__title {
37
- @apply rounded shrink-0 text-xl font-medium;
38
- }
39
- .dx-dialog__description {
40
- @apply mlb-2;
71
+ @apply shrink-0 text-xl font-medium;
41
72
  }
42
- }
73
+ }
@@ -16,6 +16,7 @@
16
16
  @import './positioning.css';
17
17
  @import './main.css';
18
18
  @import './native.css';
19
+ @import './scrollbar.css';
19
20
  @import './size.css';
20
21
  @import './surfaces.css';
21
22
  @import './tag.css';