@ohos-ports/dxos-react-ui-theme 0.8.3-beta.0

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 (260) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +25 -0
  3. package/README.yml +1 -0
  4. package/dist/lib/browser/index.mjs +3199 -0
  5. package/dist/lib/browser/index.mjs.map +7 -0
  6. package/dist/lib/browser/meta.json +1 -0
  7. package/dist/plugin/node/chunk-3IKFINB6.cjs +1500 -0
  8. package/dist/plugin/node/chunk-3IKFINB6.cjs.map +7 -0
  9. package/dist/plugin/node/chunk-QA5KMUXP.cjs +70 -0
  10. package/dist/plugin/node/chunk-QA5KMUXP.cjs.map +7 -0
  11. package/dist/plugin/node/config/tailwind.cjs +29 -0
  12. package/dist/plugin/node/config/tailwind.cjs.map +7 -0
  13. package/dist/plugin/node/meta.json +1 -0
  14. package/dist/plugin/node/plugins/esbuild-plugin.cjs +90 -0
  15. package/dist/plugin/node/plugins/esbuild-plugin.cjs.map +7 -0
  16. package/dist/plugin/node/plugins/plugin.cjs +123 -0
  17. package/dist/plugin/node/plugins/plugin.cjs.map +7 -0
  18. package/dist/plugin/node/theme.css +1223 -0
  19. package/dist/plugin/node/theme.css.map +7 -0
  20. package/dist/plugin/node-esm/chunk-LNTZCFPD.mjs +1493 -0
  21. package/dist/plugin/node-esm/chunk-LNTZCFPD.mjs.map +7 -0
  22. package/dist/plugin/node-esm/chunk-TFKSVC5U.mjs +50 -0
  23. package/dist/plugin/node-esm/chunk-TFKSVC5U.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 +97 -0
  30. package/dist/plugin/node-esm/plugins/plugin.mjs.map +7 -0
  31. package/dist/plugin/node-esm/theme.css +1223 -0
  32. package/dist/plugin/node-esm/theme.css.map +7 -0
  33. package/dist/types/src/config/index.d.ts +3 -0
  34. package/dist/types/src/config/index.d.ts.map +1 -0
  35. package/dist/types/src/config/tailwind.d.ts +9 -0
  36. package/dist/types/src/config/tailwind.d.ts.map +1 -0
  37. package/dist/types/src/config/tokens/Tokens.stories.d.ts +7 -0
  38. package/dist/types/src/config/tokens/Tokens.stories.d.ts.map +1 -0
  39. package/dist/types/src/config/tokens/alias-colors.d.ts +14 -0
  40. package/dist/types/src/config/tokens/alias-colors.d.ts.map +1 -0
  41. package/dist/types/src/config/tokens/index.d.ts +438 -0
  42. package/dist/types/src/config/tokens/index.d.ts.map +1 -0
  43. package/dist/types/src/config/tokens/lengths.d.ts +116 -0
  44. package/dist/types/src/config/tokens/lengths.d.ts.map +1 -0
  45. package/dist/types/src/config/tokens/physical-colors.d.ts +23 -0
  46. package/dist/types/src/config/tokens/physical-colors.d.ts.map +1 -0
  47. package/dist/types/src/config/tokens/semantic-colors.d.ts +179 -0
  48. package/dist/types/src/config/tokens/semantic-colors.d.ts.map +1 -0
  49. package/dist/types/src/config/tokens/sememes-calls.d.ts +3 -0
  50. package/dist/types/src/config/tokens/sememes-calls.d.ts.map +1 -0
  51. package/dist/types/src/config/tokens/sememes-codemirror.d.ts +43 -0
  52. package/dist/types/src/config/tokens/sememes-codemirror.d.ts.map +1 -0
  53. package/dist/types/src/config/tokens/sememes-hue.d.ts +4 -0
  54. package/dist/types/src/config/tokens/sememes-hue.d.ts.map +1 -0
  55. package/dist/types/src/config/tokens/sememes-sheet.d.ts +52 -0
  56. package/dist/types/src/config/tokens/sememes-sheet.d.ts.map +1 -0
  57. package/dist/types/src/config/tokens/sememes-system.d.ts +91 -0
  58. package/dist/types/src/config/tokens/sememes-system.d.ts.map +1 -0
  59. package/dist/types/src/config/tokens/types.d.ts +5 -0
  60. package/dist/types/src/config/tokens/types.d.ts.map +1 -0
  61. package/dist/types/src/index.d.ts +8 -0
  62. package/dist/types/src/index.d.ts.map +1 -0
  63. package/dist/types/src/plugins/esbuild-plugin.d.ts +9 -0
  64. package/dist/types/src/plugins/esbuild-plugin.d.ts.map +1 -0
  65. package/dist/types/src/plugins/plugin.d.ts +17 -0
  66. package/dist/types/src/plugins/plugin.d.ts.map +1 -0
  67. package/dist/types/src/plugins/resolveContent.d.ts +2 -0
  68. package/dist/types/src/plugins/resolveContent.d.ts.map +1 -0
  69. package/dist/types/src/styles/components/anchored-overflow.d.ts +6 -0
  70. package/dist/types/src/styles/components/anchored-overflow.d.ts.map +1 -0
  71. package/dist/types/src/styles/components/avatar.d.ts +21 -0
  72. package/dist/types/src/styles/components/avatar.d.ts.map +1 -0
  73. package/dist/types/src/styles/components/breadcrumb.d.ts +9 -0
  74. package/dist/types/src/styles/components/breadcrumb.d.ts.map +1 -0
  75. package/dist/types/src/styles/components/button.d.ts +19 -0
  76. package/dist/types/src/styles/components/button.d.ts.map +1 -0
  77. package/dist/types/src/styles/components/dialog.d.ts +12 -0
  78. package/dist/types/src/styles/components/dialog.d.ts.map +1 -0
  79. package/dist/types/src/styles/components/icon-button.d.ts +5 -0
  80. package/dist/types/src/styles/components/icon-button.d.ts.map +1 -0
  81. package/dist/types/src/styles/components/icon.d.ts +7 -0
  82. package/dist/types/src/styles/components/icon.d.ts.map +1 -0
  83. package/dist/types/src/styles/components/index.d.ts +24 -0
  84. package/dist/types/src/styles/components/index.d.ts.map +1 -0
  85. package/dist/types/src/styles/components/input.d.ts +111 -0
  86. package/dist/types/src/styles/components/input.d.ts.map +1 -0
  87. package/dist/types/src/styles/components/link.d.ts +7 -0
  88. package/dist/types/src/styles/components/link.d.ts.map +1 -0
  89. package/dist/types/src/styles/components/list.d.ts +14 -0
  90. package/dist/types/src/styles/components/list.d.ts.map +1 -0
  91. package/dist/types/src/styles/components/main.d.ts +28 -0
  92. package/dist/types/src/styles/components/main.d.ts.map +1 -0
  93. package/dist/types/src/styles/components/menu.d.ts +13 -0
  94. package/dist/types/src/styles/components/menu.d.ts.map +1 -0
  95. package/dist/types/src/styles/components/message.d.ts +11 -0
  96. package/dist/types/src/styles/components/message.d.ts.map +1 -0
  97. package/dist/types/src/styles/components/popover.d.ts +11 -0
  98. package/dist/types/src/styles/components/popover.d.ts.map +1 -0
  99. package/dist/types/src/styles/components/scroll-area.d.ts +9 -0
  100. package/dist/types/src/styles/components/scroll-area.d.ts.map +1 -0
  101. package/dist/types/src/styles/components/select.d.ts +14 -0
  102. package/dist/types/src/styles/components/select.d.ts.map +1 -0
  103. package/dist/types/src/styles/components/separator.d.ts +8 -0
  104. package/dist/types/src/styles/components/separator.d.ts.map +1 -0
  105. package/dist/types/src/styles/components/status.d.ts +9 -0
  106. package/dist/types/src/styles/components/status.d.ts.map +1 -0
  107. package/dist/types/src/styles/components/tag.d.ts +7 -0
  108. package/dist/types/src/styles/components/tag.d.ts.map +1 -0
  109. package/dist/types/src/styles/components/toast.d.ts +12 -0
  110. package/dist/types/src/styles/components/toast.d.ts.map +1 -0
  111. package/dist/types/src/styles/components/toolbar.d.ts +8 -0
  112. package/dist/types/src/styles/components/toolbar.d.ts.map +1 -0
  113. package/dist/types/src/styles/components/tooltip.d.ts +8 -0
  114. package/dist/types/src/styles/components/tooltip.d.ts.map +1 -0
  115. package/dist/types/src/styles/components/treegrid.d.ts +10 -0
  116. package/dist/types/src/styles/components/treegrid.d.ts.map +1 -0
  117. package/dist/types/src/styles/fragments/density.d.ts +13 -0
  118. package/dist/types/src/styles/fragments/density.d.ts.map +1 -0
  119. package/dist/types/src/styles/fragments/dimension.d.ts +5 -0
  120. package/dist/types/src/styles/fragments/dimension.d.ts.map +1 -0
  121. package/dist/types/src/styles/fragments/disabled.d.ts +3 -0
  122. package/dist/types/src/styles/fragments/disabled.d.ts.map +1 -0
  123. package/dist/types/src/styles/fragments/elevation.d.ts +15 -0
  124. package/dist/types/src/styles/fragments/elevation.d.ts.map +1 -0
  125. package/dist/types/src/styles/fragments/focus.d.ts +6 -0
  126. package/dist/types/src/styles/fragments/focus.d.ts.map +1 -0
  127. package/dist/types/src/styles/fragments/group.d.ts +5 -0
  128. package/dist/types/src/styles/fragments/group.d.ts.map +1 -0
  129. package/dist/types/src/styles/fragments/hover.d.ts +16 -0
  130. package/dist/types/src/styles/fragments/hover.d.ts.map +1 -0
  131. package/dist/types/src/styles/fragments/index.d.ts +17 -0
  132. package/dist/types/src/styles/fragments/index.d.ts.map +1 -0
  133. package/dist/types/src/styles/fragments/layout.d.ts +3 -0
  134. package/dist/types/src/styles/fragments/layout.d.ts.map +1 -0
  135. package/dist/types/src/styles/fragments/motion.d.ts +2 -0
  136. package/dist/types/src/styles/fragments/motion.d.ts.map +1 -0
  137. package/dist/types/src/styles/fragments/ornament.d.ts +5 -0
  138. package/dist/types/src/styles/fragments/ornament.d.ts.map +1 -0
  139. package/dist/types/src/styles/fragments/selected.d.ts +13 -0
  140. package/dist/types/src/styles/fragments/selected.d.ts.map +1 -0
  141. package/dist/types/src/styles/fragments/shimmer.d.ts +3 -0
  142. package/dist/types/src/styles/fragments/shimmer.d.ts.map +1 -0
  143. package/dist/types/src/styles/fragments/size.d.ts +9 -0
  144. package/dist/types/src/styles/fragments/size.d.ts.map +1 -0
  145. package/dist/types/src/styles/fragments/surface.d.ts +9 -0
  146. package/dist/types/src/styles/fragments/surface.d.ts.map +1 -0
  147. package/dist/types/src/styles/fragments/text.d.ts +7 -0
  148. package/dist/types/src/styles/fragments/text.d.ts.map +1 -0
  149. package/dist/types/src/styles/fragments/valence.d.ts +13 -0
  150. package/dist/types/src/styles/fragments/valence.d.ts.map +1 -0
  151. package/dist/types/src/styles/index.d.ts +4 -0
  152. package/dist/types/src/styles/index.d.ts.map +1 -0
  153. package/dist/types/src/styles/theme.d.ts +5 -0
  154. package/dist/types/src/styles/theme.d.ts.map +1 -0
  155. package/dist/types/src/tailwind.d.ts +1 -0
  156. package/dist/types/src/tailwind.d.ts.map +1 -0
  157. package/dist/types/src/types.d.ts +3 -0
  158. package/dist/types/src/types.d.ts.map +1 -0
  159. package/dist/types/src/util/hash.d.ts +8 -0
  160. package/dist/types/src/util/hash.d.ts.map +1 -0
  161. package/dist/types/src/util/index.d.ts +3 -0
  162. package/dist/types/src/util/index.d.ts.map +1 -0
  163. package/dist/types/src/util/mx.d.ts +2 -0
  164. package/dist/types/src/util/mx.d.ts.map +1 -0
  165. package/dist/types/src/util/withLogical.d.ts +164 -0
  166. package/dist/types/src/util/withLogical.d.ts.map +1 -0
  167. package/dist/types/tsconfig.tsbuildinfo +1 -0
  168. package/package.json +58 -0
  169. package/plugin.d.ts +7 -0
  170. package/plugin.js +10 -0
  171. package/src/config/index.ts +6 -0
  172. package/src/config/tailwind.ts +236 -0
  173. package/src/config/tokens/Tokens.stories.tsx +94 -0
  174. package/src/config/tokens/alias-colors.ts +38 -0
  175. package/src/config/tokens/index.ts +90 -0
  176. package/src/config/tokens/lengths.ts +87 -0
  177. package/src/config/tokens/physical-colors.ts +125 -0
  178. package/src/config/tokens/semantic-colors.ts +27 -0
  179. package/src/config/tokens/sememes-calls.ts +17 -0
  180. package/src/config/tokens/sememes-codemirror.ts +50 -0
  181. package/src/config/tokens/sememes-hue.ts +54 -0
  182. package/src/config/tokens/sememes-sheet.ts +60 -0
  183. package/src/config/tokens/sememes-system.ts +255 -0
  184. package/src/config/tokens/types.ts +9 -0
  185. package/src/index.ts +15 -0
  186. package/src/plugins/esbuild-plugin.ts +60 -0
  187. package/src/plugins/plugin.ts +127 -0
  188. package/src/plugins/resolveContent.ts +55 -0
  189. package/src/styles/components/README.md +6 -0
  190. package/src/styles/components/anchored-overflow.ts +20 -0
  191. package/src/styles/components/avatar.ts +96 -0
  192. package/src/styles/components/breadcrumb.ts +29 -0
  193. package/src/styles/components/button.ts +48 -0
  194. package/src/styles/components/dialog.ts +36 -0
  195. package/src/styles/components/icon-button.ts +17 -0
  196. package/src/styles/components/icon.ts +19 -0
  197. package/src/styles/components/index.ts +27 -0
  198. package/src/styles/components/input.ts +176 -0
  199. package/src/styles/components/link.ts +26 -0
  200. package/src/styles/components/list.ts +46 -0
  201. package/src/styles/components/main.ts +36 -0
  202. package/src/styles/components/menu.ts +60 -0
  203. package/src/styles/components/message.ts +36 -0
  204. package/src/styles/components/popover.ts +40 -0
  205. package/src/styles/components/scroll-area.ts +42 -0
  206. package/src/styles/components/select.ts +64 -0
  207. package/src/styles/components/separator.ts +24 -0
  208. package/src/styles/components/status.ts +32 -0
  209. package/src/styles/components/tag.ts +23 -0
  210. package/src/styles/components/toast.ts +55 -0
  211. package/src/styles/components/toolbar.ts +20 -0
  212. package/src/styles/components/tooltip.ts +29 -0
  213. package/src/styles/components/treegrid.ts +37 -0
  214. package/src/styles/fragments/density.ts +17 -0
  215. package/src/styles/fragments/dimension.ts +8 -0
  216. package/src/styles/fragments/disabled.ts +6 -0
  217. package/src/styles/fragments/elevation.ts +29 -0
  218. package/src/styles/fragments/focus.ts +16 -0
  219. package/src/styles/fragments/group.ts +12 -0
  220. package/src/styles/fragments/hover.ts +24 -0
  221. package/src/styles/fragments/index.ts +20 -0
  222. package/src/styles/fragments/layout.ts +7 -0
  223. package/src/styles/fragments/motion.ts +6 -0
  224. package/src/styles/fragments/ornament.ts +10 -0
  225. package/src/styles/fragments/selected.ts +45 -0
  226. package/src/styles/fragments/shimmer.ts +9 -0
  227. package/src/styles/fragments/size.ts +117 -0
  228. package/src/styles/fragments/surface.ts +29 -0
  229. package/src/styles/fragments/text.ts +13 -0
  230. package/src/styles/fragments/valence.ts +48 -0
  231. package/src/styles/index.ts +7 -0
  232. package/src/styles/layers/anchored-overflow.css +9 -0
  233. package/src/styles/layers/attention.css +8 -0
  234. package/src/styles/layers/base.css +25 -0
  235. package/src/styles/layers/button.css +76 -0
  236. package/src/styles/layers/can-scroll.css +26 -0
  237. package/src/styles/layers/checkbox.css +50 -0
  238. package/src/styles/layers/dialog.css +42 -0
  239. package/src/styles/layers/drag-preview.css +18 -0
  240. package/src/styles/layers/focus-ring.css +129 -0
  241. package/src/styles/layers/hues.css +110 -0
  242. package/src/styles/layers/index.css +21 -0
  243. package/src/styles/layers/main.css +162 -0
  244. package/src/styles/layers/native.css +14 -0
  245. package/src/styles/layers/positioning.css +23 -0
  246. package/src/styles/layers/size.css +299 -0
  247. package/src/styles/layers/surfaces.css +31 -0
  248. package/src/styles/layers/tag.css +123 -0
  249. package/src/styles/layers/tldraw.css +91 -0
  250. package/src/styles/layers/tokens.css +44 -0
  251. package/src/styles/layers/typography.css +152 -0
  252. package/src/styles/theme.ts +69 -0
  253. package/src/tailwind.ts +5 -0
  254. package/src/theme.css +5 -0
  255. package/src/types.ts +7 -0
  256. package/src/typings.d.ts +8 -0
  257. package/src/util/hash.ts +39 -0
  258. package/src/util/index.ts +6 -0
  259. package/src/util/mx.ts +34 -0
  260. package/src/util/withLogical.ts +114 -0
@@ -0,0 +1,60 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Theme, type Elevation } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+ import {
9
+ dataDisabled,
10
+ descriptionText,
11
+ modalSurface,
12
+ popperMotion,
13
+ subduedFocus,
14
+ surfaceShadow,
15
+ surfaceZIndex,
16
+ } from '../fragments';
17
+
18
+ export type MenuStyleProps = Partial<{
19
+ constrainBlockSize: boolean;
20
+ elevation: Elevation;
21
+ }>;
22
+
23
+ export const menuViewport: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
24
+ mx('rounded p-1 max-bs-[--radix-dropdown-menu-content-available-height] overflow-y-auto', ...etc);
25
+
26
+ export const menuContent: ComponentFunction<MenuStyleProps> = ({ elevation }, ...etc) =>
27
+ mx(
28
+ 'is-48 rounded md:is-56 border border-separator',
29
+ surfaceZIndex({ elevation, level: 'menu' }),
30
+ surfaceShadow({ elevation: 'positioned' }),
31
+ modalSurface,
32
+ popperMotion,
33
+ ...etc,
34
+ );
35
+
36
+ export const menuItem: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
37
+ mx(
38
+ 'flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2 text-sm',
39
+ 'data-[highlighted]:bg-hoverSurface',
40
+ subduedFocus,
41
+ dataDisabled,
42
+ ...etc,
43
+ );
44
+
45
+ export const menuSeparator: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
46
+ mx('mlb-1 mli-2 bs-px bg-separator', ...etc);
47
+
48
+ export const menuGroupLabel: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
49
+ mx(descriptionText, 'select-none pli-2 plb-2', ...etc);
50
+
51
+ export const menuArrow: ComponentFunction<MenuStyleProps> = (_props, ...etc) => mx('fill-separator', ...etc);
52
+
53
+ export const menuTheme: Theme<MenuStyleProps> = {
54
+ content: menuContent,
55
+ viewport: menuViewport,
56
+ item: menuItem,
57
+ separator: menuSeparator,
58
+ groupLabel: menuGroupLabel,
59
+ arrow: menuArrow,
60
+ };
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Elevation, type MessageValence, type Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+ import { messageValence } from '../fragments';
9
+
10
+ export type MessageStyleProps = {
11
+ valence?: MessageValence;
12
+ elevation?: Elevation;
13
+ };
14
+
15
+ export const messageRoot: ComponentFunction<MessageStyleProps> = ({ valence }, etc) => {
16
+ return mx('p-trimMd rounded-md is-full', messageValence(valence), etc);
17
+ };
18
+
19
+ export const messageTitle: ComponentFunction<MessageStyleProps> = (_, etc) => {
20
+ return mx('mbe-trimSm last:mbe-0 font-medium flex items-center gap-trimXs', etc);
21
+ };
22
+
23
+ export const messageIcon: ComponentFunction<MessageStyleProps> = (_, etc) => {
24
+ return mx(etc);
25
+ };
26
+
27
+ export const messageContent: ComponentFunction<MessageStyleProps> = (_, etc) => {
28
+ return mx('first:font-medium', etc);
29
+ };
30
+
31
+ export const messageTheme: Theme<MessageStyleProps> = {
32
+ root: messageRoot,
33
+ content: messageContent,
34
+ icon: messageIcon,
35
+ title: messageTitle,
36
+ };
@@ -0,0 +1,40 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Theme, type Elevation } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+ import { focusRing, modalSurface, surfaceShadow, surfaceZIndex } from '../fragments';
9
+
10
+ export type PopoverStyleProps = Partial<{
11
+ constrainBlock: boolean;
12
+ constrainInline: boolean;
13
+ elevation: Elevation;
14
+ }>;
15
+
16
+ export const popoverViewport: ComponentFunction<PopoverStyleProps> = ({ constrainBlock, constrainInline }, ...etc) =>
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',
21
+ ...etc,
22
+ );
23
+
24
+ export const popoverContent: ComponentFunction<PopoverStyleProps> = ({ elevation }, ...etc) =>
25
+ mx(
26
+ 'border border-separator rounded-md',
27
+ modalSurface,
28
+ surfaceShadow({ elevation: 'positioned' }),
29
+ surfaceZIndex({ elevation, level: 'menu' }),
30
+ focusRing,
31
+ ...etc,
32
+ );
33
+
34
+ export const popoverArrow: ComponentFunction<PopoverStyleProps> = (_props, ...etc) => mx('fill-separator', ...etc);
35
+
36
+ export const popoverTheme: Theme<PopoverStyleProps> = {
37
+ content: popoverContent,
38
+ viewport: popoverViewport,
39
+ arrow: popoverArrow,
40
+ };
@@ -0,0 +1,42 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+
9
+ export type ScrollAreaStyleProps = {};
10
+
11
+ export const scrollAreaRoot: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
12
+ mx('overflow-hidden', ...etc);
13
+
14
+ export const scrollAreaViewport: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
15
+ mx('is-full bs-full [&>div]:table-fixed [&>div]:is-full', ...etc);
16
+
17
+ export const scrollAreaScrollbar: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
18
+ mx(
19
+ 'flex select-none touch-none p-0.5 ease-out',
20
+ 'data-[orientation=vertical]:is-1.5 sm:data-[orientation=vertical]:data-[variant=coarse]:is-3',
21
+ 'data-[orientation=horizontal]:flex-col data-[orientation=horizontal]:bs-1.5 sm:data-[orientation=horizontal]:data-[variant=coarse]:bs-3',
22
+ 'sm:data-[variant=coarse]:bg-separator rounded-full',
23
+ '[&>div]:bg-unAccent sm:[&[data-variant=coarse]>div]:bg-attention',
24
+ ...etc,
25
+ );
26
+
27
+ export const scrollAreaThumb: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) =>
28
+ mx(
29
+ 'flex-1 rounded-full relative',
30
+ "before:content-[''] before:absolute before:top-1/2 before:left-1/2 before:-translate-x-1/2 before:-translate-y-1/2 before:w-full before:h-full before:min-w-[6px] before:min-h-[6px]",
31
+ ...etc,
32
+ );
33
+
34
+ export const scrollAreaCorner: ComponentFunction<ScrollAreaStyleProps> = (_props, ...etc) => mx(...etc);
35
+
36
+ export const scrollAreaTheme: Theme<ScrollAreaStyleProps> = {
37
+ root: scrollAreaRoot,
38
+ viewport: scrollAreaViewport,
39
+ scrollbar: scrollAreaScrollbar,
40
+ thumb: scrollAreaThumb,
41
+ corner: scrollAreaCorner,
42
+ };
@@ -0,0 +1,64 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Elevation, type Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+ import {
9
+ blockSeparator,
10
+ getSize,
11
+ ghostHighlighted,
12
+ modalSurface,
13
+ surfaceShadow,
14
+ separatorBorderColor,
15
+ surfaceZIndex,
16
+ } from '../fragments';
17
+
18
+ export type SelectStyleProps = Partial<{
19
+ elevation: Elevation;
20
+ }>;
21
+
22
+ export const selectContent: ComponentFunction<SelectStyleProps> = ({ elevation }, ...etc) => {
23
+ return mx(
24
+ 'min-w-[--radix-select-trigger-width] rounded max-bs-[--radix-select-content-available-height] border border-separator',
25
+ modalSurface,
26
+ surfaceShadow({ elevation: 'positioned' }),
27
+ surfaceZIndex({ elevation, level: 'menu' }),
28
+ ...etc,
29
+ );
30
+ };
31
+
32
+ export const selectViewport: ComponentFunction<SelectStyleProps> = (_props, ...etc) => mx(...etc);
33
+
34
+ export const selectItem: ComponentFunction<SelectStyleProps> = (_props, ...etc) =>
35
+ mx(
36
+ 'flex items-center min-bs-[2rem] pli-3 plb-1 gap-2',
37
+ 'text-baseText leading-none select-none outline-none',
38
+ '[&>svg]:invisible [&[data-state=checked]>svg]:visible',
39
+ ghostHighlighted,
40
+ ...etc,
41
+ );
42
+
43
+ export const selectItemIndicator: ComponentFunction<SelectStyleProps> = (_props, ...etc) => mx('items-center', ...etc);
44
+
45
+ export const selectArrow: ComponentFunction<SelectStyleProps> = (_props, ...etc) => mx('fill-separator', ...etc);
46
+
47
+ export const selectSeparator: ComponentFunction<SelectStyleProps> = (_props, ...etc) =>
48
+ mx(blockSeparator, separatorBorderColor, ...etc);
49
+
50
+ export const selectScrollButton: ComponentFunction<SelectStyleProps> = (_props, ...etc) =>
51
+ mx(modalSurface, 'flex items-center justify-center cursor-default bs-6 is-full', ...etc);
52
+
53
+ export const selectTriggerIcon: ComponentFunction<SelectStyleProps> = (_props, ...etc) => mx(getSize(2), ...etc);
54
+
55
+ export const selectTheme: Theme<SelectStyleProps> = {
56
+ content: selectContent,
57
+ viewport: selectViewport,
58
+ item: selectItem,
59
+ itemIndicator: selectItemIndicator,
60
+ arrow: selectArrow,
61
+ separator: selectSeparator,
62
+ scrollButton: selectScrollButton,
63
+ triggerIcon: selectTriggerIcon,
64
+ };
@@ -0,0 +1,24 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+ import { blockSeparator, inlineSeparator, separatorBorderColor, subduedSeparatorBorderColor } from '../fragments';
9
+
10
+ export type SeparatorStyleProps = {
11
+ orientation?: 'horizontal' | 'vertical';
12
+ subdued?: boolean;
13
+ };
14
+
15
+ export const separatorRoot: ComponentFunction<SeparatorStyleProps> = ({ orientation, subdued }, ...etc) =>
16
+ mx(
17
+ orientation === 'vertical' ? inlineSeparator : blockSeparator,
18
+ subdued ? subduedSeparatorBorderColor : separatorBorderColor,
19
+ ...etc,
20
+ );
21
+
22
+ export const separatorTheme: Theme<SeparatorStyleProps> = {
23
+ root: separatorRoot,
24
+ };
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import type { ComponentFunction, Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+
9
+ export type StatusStyleProps = {
10
+ indeterminate?: boolean;
11
+ variant?: 'default' | 'main-bottom';
12
+ };
13
+
14
+ export const statusRoot: ComponentFunction<StatusStyleProps> = ({ variant = 'default' }, ...etc) =>
15
+ mx(
16
+ 'bs-1 relative bg-hoverOverlay rounded-full overflow-hidden',
17
+ variant === 'main-bottom' ? 'is-full block' : 'is-20 inline-block',
18
+ ...etc,
19
+ );
20
+
21
+ export const statusBar: ComponentFunction<StatusStyleProps> = ({ indeterminate, variant = 'default' }, ...etc) =>
22
+ mx(
23
+ 'absolute inset-block-0 block rounded-full',
24
+ variant === 'main-bottom' ? 'bg-accentSurface' : 'bg-unAccent',
25
+ indeterminate ? 'animate-progress-indeterminate' : 'inline-start-0',
26
+ ...etc,
27
+ );
28
+
29
+ export const statusTheme: Theme<StatusStyleProps> = {
30
+ root: statusRoot,
31
+ bar: statusBar,
32
+ };
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import {
6
+ type ChromaticPalette,
7
+ type ComponentFunction,
8
+ type MessageValence,
9
+ type NeutralPalette,
10
+ type Theme,
11
+ } from '@dxos/react-ui-types';
12
+
13
+ import { mx } from '../../util';
14
+
15
+ export type TagStyleProps = {
16
+ palette?: ChromaticPalette | NeutralPalette | MessageValence;
17
+ };
18
+
19
+ export const tagRoot: ComponentFunction<TagStyleProps> = ({ palette = 'neutral' }, ...etc) => mx('dx-tag', ...etc);
20
+
21
+ export const tagTheme: Theme<TagStyleProps> = {
22
+ root: tagRoot,
23
+ };
@@ -0,0 +1,55 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+ import { descriptionText, focusRing, modalSurface, surfaceShadow } from '../fragments';
9
+
10
+ export type ToastStyleProps = Partial<{
11
+ srOnly: boolean;
12
+ }>;
13
+
14
+ export const toastViewport: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
15
+ mx(
16
+ // TODO(burdon): block-end should take into account status bar.
17
+ 'z-40 fixed block-end-[calc(env(safe-area-inset-bottom)+1rem)] inset-start-[calc(env(safe-area-inset-left)+1rem)] inset-end-[calc(env(safe-area-inset-right)+1rem)] w-auto md:inline-end-[calc(env(safe-area-inset-right)+1rem)] md:inline-start-auto md:w-full md:max-w-sm',
18
+ 'rounded-md flex flex-col gap-2',
19
+ ...etc,
20
+ );
21
+
22
+ export const toastRoot: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
23
+ mx(
24
+ 'rounded-md flex p-2 gap-2',
25
+ modalSurface,
26
+ surfaceShadow({ elevation: 'toast' }),
27
+ 'radix-state-open:animate-toast-slide-in-bottom md:radix-state-open:animate-toast-slide-in-right',
28
+ 'radix-state-closed:animate-toast-hide',
29
+ 'radix-swipe-end:animate-toast-swipe-out',
30
+ 'translate-x-radix-toast-swipe-move-x',
31
+ 'radix-swipe-cancel:translate-x-0 radix-swipe-cancel:duration-200 radix-swipe-cancel:ease-[ease]',
32
+ focusRing,
33
+ ...etc,
34
+ );
35
+
36
+ export const toastBody: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
37
+ mx('grow flex flex-col gap-1 justify-center pis-2', ...etc);
38
+
39
+ export const toastActions: ComponentFunction<ToastStyleProps> = (_props, ...etc) =>
40
+ mx('shrink-0 flex flex-col gap-1 justify-center', ...etc);
41
+
42
+ export const toastTitle: ComponentFunction<ToastStyleProps> = ({ srOnly }, ...etc) =>
43
+ mx('shrink-0 font-medium', srOnly && 'sr-only', ...etc);
44
+
45
+ export const toastDescription: ComponentFunction<ToastStyleProps> = ({ srOnly }, ...etc) =>
46
+ mx(descriptionText, 'shrink-0', srOnly && 'sr-only', ...etc);
47
+
48
+ export const toastTheme: Theme<ToastStyleProps> = {
49
+ viewport: toastViewport,
50
+ root: toastRoot,
51
+ body: toastBody,
52
+ title: toastTitle,
53
+ description: toastDescription,
54
+ actions: toastActions,
55
+ };
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+
9
+ export type ToolbarStyleProps = Partial<{ layoutManaged: boolean }>;
10
+
11
+ export const toolbarLayout =
12
+ 'is-full shrink-0 flex flex-nowrap items-center gap-1 p-2 overflow-x-auto scrollbar-none contain-layout';
13
+
14
+ export const toolbarRoot: ComponentFunction<ToolbarStyleProps> = ({ layoutManaged }, ...etc) => {
15
+ return mx('bg-toolbarSurface dx-toolbar', !layoutManaged && toolbarLayout, ...etc);
16
+ };
17
+
18
+ export const toolbarTheme: Theme<ToolbarStyleProps> = {
19
+ root: toolbarRoot,
20
+ };
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFunction, type Theme, type Elevation } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+ import { chromeText, surfaceShadow, popperMotion, surfaceZIndex } from '../fragments';
9
+
10
+ export type TooltipStyleProps = Partial<{
11
+ elevation: Elevation;
12
+ }>;
13
+
14
+ export const tooltipContent: ComponentFunction<TooltipStyleProps> = ({ elevation }, ...etc) =>
15
+ mx(
16
+ 'inline-flex items-center rounded-sm plb-1 pli-2 max-is-64 bg-inverseSurface text-inverseSurfaceText',
17
+ popperMotion,
18
+ surfaceShadow({ elevation: 'positioned' }),
19
+ surfaceZIndex({ elevation, level: 'tooltip' }),
20
+ chromeText,
21
+ ...etc,
22
+ );
23
+
24
+ export const tooltipArrow: ComponentFunction<TooltipStyleProps> = (_props, ...etc) => mx('fill-inverseSurface', ...etc);
25
+
26
+ export const tooltipTheme: Theme<TooltipStyleProps> = {
27
+ content: tooltipContent,
28
+ arrow: tooltipArrow,
29
+ };
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import type { ComponentFunction, Theme } from '@dxos/react-ui-types';
6
+
7
+ import { mx } from '../../util';
8
+
9
+ export type TreegridStyleProps = Partial<{
10
+ level: number;
11
+ indent: boolean;
12
+ }>;
13
+
14
+ const levelStyles = new Map<number, string>([
15
+ [1, '[&>.indent:first-of-type]:pis-0 font-medium'],
16
+ [2, '[&>.indent:first-of-type]:pis-0'],
17
+ [3, '[&>.indent:first-of-type]:pis-1'],
18
+ [4, '[&>.indent:first-of-type]:pis-2'],
19
+ [5, '[&>.indent:first-of-type]:pis-3'],
20
+ [6, '[&>.indent:first-of-type]:pis-4'],
21
+ [7, '[&>.indent:first-of-type]:pis-5'],
22
+ [8, '[&>.indent:first-of-type]:pis-6'],
23
+ ]);
24
+
25
+ export const treegridRoot: ComponentFunction<TreegridStyleProps> = (_, ...etc) => mx('grid', ...etc);
26
+
27
+ export const treegridRow: ComponentFunction<TreegridStyleProps> = ({ level = 1 }, ...etc) =>
28
+ mx('contents dx-focus-ring-inset', levelStyles.get(Math.min(Math.max(Math.round(level), 1), 8)), ...etc);
29
+
30
+ export const treegridCell: ComponentFunction<TreegridStyleProps> = ({ indent }, ...etc) =>
31
+ mx(indent && 'indent', ...etc);
32
+
33
+ export const treegridTheme: Theme<TreegridStyleProps> = {
34
+ root: treegridRoot,
35
+ row: treegridRow,
36
+ cell: treegridCell,
37
+ };
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Density } from '@dxos/react-ui-types';
6
+
7
+ export const coarseBlockSize = 'min-bs-[2.5rem]';
8
+ export const coarseTextPadding = 'pli-3';
9
+ export const coarseButtonPadding = 'pli-4';
10
+ export const coarseDimensions = `${coarseBlockSize} ${coarseTextPadding}`;
11
+ export const coarseButtonDimensions = `${coarseBlockSize} ${coarseButtonPadding}`;
12
+ export const fineBlockSize = 'min-bs-[2.5rem] pointer-fine:min-bs-[2rem]';
13
+ export const fineTextPadding = 'pli-2';
14
+ export const fineButtonPadding = 'pli-2.5';
15
+ export const fineDimensions = `${fineBlockSize} ${fineTextPadding}`;
16
+ export const fineButtonDimensions = `${fineBlockSize} ${fineButtonPadding}`;
17
+ export const densityBlockSize = (density: Density = 'coarse') => (density === 'fine' ? fineBlockSize : coarseBlockSize);
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Content areas that contain the text editor.
7
+ */
8
+ export const textBlockWidth = 'is-full mli-auto max-is-[--text-content]';
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ export const staticDisabled = 'opacity-40 cursor-not-allowed shadow-none';
6
+ export const dataDisabled = 'data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed';
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFragment, type Elevation, type SurfaceLevel } from '@dxos/react-ui-types';
6
+
7
+ /**
8
+ * @deprecated
9
+ */
10
+ export const contentShadow: ComponentFragment<{ elevation?: Elevation }> = (_) => ['shadow-none'];
11
+
12
+ // TODO(thure): These should become tokens.
13
+ export const surfaceShadow: ComponentFragment<{ elevation?: Elevation }> = ({ elevation }) => [
14
+ elevation === 'positioned' ? 'shadow' : elevation === 'dialog' || elevation === 'toast' ? 'shadow-md' : 'shadow-none',
15
+ ];
16
+
17
+ export const surfaceZIndex: ComponentFragment<{ level?: SurfaceLevel; elevation?: Elevation }> = ({
18
+ level,
19
+ elevation,
20
+ }) => {
21
+ switch (level) {
22
+ case 'tooltip':
23
+ return elevation === 'dialog' ? ['z-[53]'] : elevation === 'toast' ? ['z-[43]'] : ['z-30'];
24
+ case 'menu':
25
+ return elevation === 'dialog' ? ['z-[52]'] : elevation === 'toast' ? ['z-[42]'] : ['z-20'];
26
+ default:
27
+ return elevation === 'dialog' ? ['z-[51]'] : elevation === 'toast' ? ['z-[41]'] : ['z-[1]'];
28
+ }
29
+ };
@@ -0,0 +1,16 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ export const focusRing = 'dx-focus-ring';
6
+
7
+ export const dropRing =
8
+ 'ring-1 ring-offset-0 ring-primary-350 ring-offset-white dark:ring-primary-450 dark:ring-offset-black';
9
+
10
+ export const dropRingInner =
11
+ 'before:z-[1] before:absolute before:inset-0 before:ring-1 before:ring-inset before:ring-primary-350 before:dark:ring-primary-450';
12
+
13
+ export const subduedFocus = 'focus:outline-none focus-visible:outline-none focus:ring-0 ring-0 focus:border-0 border-0';
14
+
15
+ export const staticFocusRing =
16
+ 'ring-2 ring-offset-0 ring-primary-350 ring-offset-white dark:ring-primary-450 dark:ring-offset-black';
@@ -0,0 +1,12 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ComponentFragment, type Elevation } from '@dxos/react-ui-types';
6
+
7
+ import { surfaceShadow } from './elevation';
8
+
9
+ export const group: ComponentFragment<{ elevation?: Elevation }> = (props) => [
10
+ props.elevation === 'base' ? 'bg-transparent border border-separator' : 'bg-modalSurface',
11
+ surfaceShadow(props),
12
+ ];
@@ -0,0 +1,24 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * @deprecated
7
+ */
8
+ export const hoverColors = 'transition-colors duration-100 linear hover:bg-hoverSurface';
9
+
10
+ export const ghostHover = 'hover:bg-hoverSurface';
11
+ export const subtleHover = 'hover:bg-neutral-100/20 dark:hover:bg-neutral-800/20';
12
+
13
+ export const hoverableControls =
14
+ '[--controls-opacity:1] hover-hover:[--controls-opacity:0] hover-hover:hover:[--controls-opacity:1]';
15
+
16
+ export const groupHoverControlItemWithTransition = 'transition-opacity duration-200 opacity-0 group-hover:opacity-100';
17
+
18
+ export const hoverableFocusedKeyboardControls = 'focus-visible:[--controls-opacity:1]';
19
+ export const hoverableFocusedWithinControls = 'focus-within:[--controls-opacity:1]';
20
+ export const hoverableFocusedControls = 'focus:[--controls-opacity:1]';
21
+ export const hoverableOpenControlItem = 'hover-hover:aria-[expanded=true]:[--controls-opacity:1]';
22
+ export const hoverableControlItem = 'opacity-[--controls-opacity]';
23
+ export const staticHoverableControls = 'hover-hover:[--controls-opacity:1]';
24
+ export const hoverableControlItemTransition = 'transition-opacity duration-200';
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ export * from './density';
6
+ export * from './disabled';
7
+ export * from './dimension';
8
+ export * from './elevation';
9
+ export * from './focus';
10
+ export * from './group';
11
+ export * from './hover';
12
+ export * from './layout';
13
+ export * from './motion';
14
+ export * from './ornament';
15
+ export * from './selected';
16
+ export * from './shimmer';
17
+ export * from './surface';
18
+ export * from './size';
19
+ export * from './text';
20
+ export * from './valence';
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export const bounceLayout = 'fixed inset-0 z-0 overflow-auto overscroll-auto';
6
+
7
+ export const fixedInsetFlexLayout = 'flex flex-col fixed inset-0 overflow-hidden overscroll-none';
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
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';
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2022 DXOS.org
3
+ //
4
+
5
+ // TODO(burdon): Remove?
6
+ export const separatorBorderColor = 'border-separator';
7
+ export const subduedSeparatorBorderColor = 'border-subduedSeparator';
8
+
9
+ export const inlineSeparator = 'self-stretch border-ie mli-1';
10
+ export const blockSeparator = 'self-stretch border-be mlb-1';