@bug-on/md3-react 2.0.3 → 3.0.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 (308) hide show
  1. package/.turbo/turbo-build.log +33 -0
  2. package/CHANGELOG.md +55 -0
  3. package/dist/index.css.d.ts +2 -0
  4. package/dist/index.d.mts +6127 -0
  5. package/dist/index.d.ts +6127 -71
  6. package/dist/index.js +1653 -614
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +1566 -547
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/material-symbols-cdn.css.d.ts +2 -0
  11. package/dist/material-symbols-self-hosted.css.d.ts +2 -0
  12. package/dist/typography.css.d.ts +2 -0
  13. package/package.json +22 -19
  14. package/scripts/copy-assets.js +82 -0
  15. package/src/assets/fonts/GoogleSansFlex-VariableFont.woff2 +0 -0
  16. package/src/assets/fonts/MaterialSymbolsOutlined-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  17. package/src/assets/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  18. package/src/assets/fonts/MaterialSymbolsSharp-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
  19. package/src/assets/loading-indicator.svg +19 -0
  20. package/src/assets/material-symbols-cdn.css +65 -0
  21. package/src/assets/material-symbols-self-hosted.css +90 -0
  22. package/src/css.d.ts +20 -0
  23. package/src/hooks/useClickOutside.ts +37 -0
  24. package/src/hooks/useMediaQuery.ts +28 -0
  25. package/src/hooks/useRipple.ts +88 -0
  26. package/src/index.css +23 -0
  27. package/src/index.ts +349 -0
  28. package/src/lib/material-symbols-preconnect.tsx +82 -0
  29. package/src/lib/theme-utils.ts +180 -0
  30. package/src/lib/utils.ts +6 -0
  31. package/src/test/button.test.tsx +59 -0
  32. package/src/test/icon.test.tsx +91 -0
  33. package/src/test/loading-indicator.test.tsx +128 -0
  34. package/src/test/progress-indicator.test.tsx +306 -0
  35. package/src/test/setup.ts +80 -0
  36. package/src/test/typography.test.tsx +206 -0
  37. package/src/types/index.ts +7 -0
  38. package/src/types/md3.ts +31 -0
  39. package/src/ui/Text.tsx +60 -0
  40. package/src/ui/__snapshots__/divider.test.tsx.snap +63 -0
  41. package/src/ui/app-bar/app-bar-column.tsx +99 -0
  42. package/src/ui/app-bar/app-bar-item-button.tsx +71 -0
  43. package/src/ui/app-bar/app-bar-items.test.tsx +89 -0
  44. package/src/ui/app-bar/app-bar-overflow-indicator.tsx +108 -0
  45. package/src/ui/app-bar/app-bar-row.tsx +104 -0
  46. package/src/ui/app-bar/app-bar.test.tsx +87 -0
  47. package/src/ui/app-bar/app-bar.tokens.ts +223 -0
  48. package/src/ui/app-bar/app-bar.types.ts +441 -0
  49. package/src/ui/app-bar/bottom-app-bar.test.tsx +42 -0
  50. package/src/ui/app-bar/bottom-app-bar.tsx +84 -0
  51. package/src/ui/app-bar/docked-toolbar.test.tsx +34 -0
  52. package/src/ui/app-bar/docked-toolbar.tsx +54 -0
  53. package/src/ui/app-bar/flexible-app-bar.test.tsx +75 -0
  54. package/src/ui/app-bar/hooks/use-app-bar-scroll.ts +110 -0
  55. package/src/ui/app-bar/hooks/use-flexible-app-bar.ts +123 -0
  56. package/{dist/ui/app-bar/index.d.ts → src/ui/app-bar/index.ts} +35 -2
  57. package/src/ui/app-bar/large-flexible-app-bar.tsx +165 -0
  58. package/src/ui/app-bar/medium-flexible-app-bar.tsx +167 -0
  59. package/src/ui/app-bar/search-app-bar.test.tsx +49 -0
  60. package/src/ui/app-bar/search-app-bar.tsx +176 -0
  61. package/src/ui/app-bar/search-view.tsx +227 -0
  62. package/src/ui/app-bar/small-app-bar.test.tsx +48 -0
  63. package/src/ui/app-bar/small-app-bar.tsx +203 -0
  64. package/src/ui/badge.test.tsx +345 -0
  65. package/src/ui/badge.tsx +282 -0
  66. package/src/ui/button-group.test.tsx +71 -0
  67. package/src/ui/button-group.tsx +350 -0
  68. package/src/ui/button.test.tsx +297 -0
  69. package/src/ui/button.tsx +669 -0
  70. package/src/ui/card.test.tsx +187 -0
  71. package/src/ui/card.tsx +259 -0
  72. package/src/ui/checkbox.test.tsx +423 -0
  73. package/src/ui/checkbox.tsx +525 -0
  74. package/src/ui/chip.test.tsx +292 -0
  75. package/src/ui/chip.tsx +548 -0
  76. package/src/ui/code-block.tsx +219 -0
  77. package/src/ui/dialog.test.tsx +300 -0
  78. package/src/ui/dialog.tsx +384 -0
  79. package/src/ui/divider.test.tsx +314 -0
  80. package/src/ui/divider.tsx +412 -0
  81. package/src/ui/drawer.tsx +240 -0
  82. package/src/ui/fab-menu.test.tsx +494 -0
  83. package/src/ui/fab-menu.tsx +739 -0
  84. package/src/ui/fab.test.tsx +232 -0
  85. package/src/ui/fab.tsx +505 -0
  86. package/src/ui/icon-button.test.tsx +515 -0
  87. package/src/ui/icon-button.tsx +525 -0
  88. package/src/ui/icon.test.tsx +197 -0
  89. package/src/ui/icon.tsx +179 -0
  90. package/src/ui/loading-indicator.test.tsx +73 -0
  91. package/src/ui/loading-indicator.tsx +312 -0
  92. package/src/ui/menu/context-menu.tsx +275 -0
  93. package/src/ui/menu/index.ts +77 -0
  94. package/src/ui/menu/menu-animations.ts +102 -0
  95. package/src/ui/menu/menu-context.tsx +99 -0
  96. package/src/ui/menu/menu-divider.tsx +47 -0
  97. package/src/ui/menu/menu-group.tsx +200 -0
  98. package/src/ui/menu/menu-item.tsx +294 -0
  99. package/src/ui/menu/menu-tokens.ts +208 -0
  100. package/src/ui/menu/menu-types.ts +313 -0
  101. package/src/ui/menu/menu.test.tsx +624 -0
  102. package/src/ui/menu/menu.tsx +289 -0
  103. package/src/ui/menu/sub-menu.tsx +223 -0
  104. package/src/ui/menu/vertical-menu.tsx +382 -0
  105. package/src/ui/navigation-rail.test.tsx +404 -0
  106. package/src/ui/navigation-rail.tsx +604 -0
  107. package/src/ui/progress-indicator/circular.tsx +248 -0
  108. package/src/ui/progress-indicator/hooks.ts +51 -0
  109. package/{dist/ui/progress-indicator/index.d.ts → src/ui/progress-indicator/index.tsx} +20 -2
  110. package/src/ui/progress-indicator/linear-flat.tsx +83 -0
  111. package/src/ui/progress-indicator/linear-wavy.tsx +243 -0
  112. package/src/ui/progress-indicator/linear.tsx +143 -0
  113. package/src/ui/progress-indicator/types.ts +158 -0
  114. package/src/ui/progress-indicator/utils.ts +73 -0
  115. package/src/ui/radio-button.test.tsx +407 -0
  116. package/src/ui/radio-button.tsx +551 -0
  117. package/src/ui/ripple.test.tsx +72 -0
  118. package/src/ui/ripple.tsx +234 -0
  119. package/src/ui/scroll-area.test.tsx +58 -0
  120. package/src/ui/scroll-area.tsx +139 -0
  121. package/src/ui/search/animated-placeholder.tsx +145 -0
  122. package/src/ui/search/hooks/use-search-keyboard.test.ts +202 -0
  123. package/src/ui/search/hooks/use-search-keyboard.ts +104 -0
  124. package/src/ui/search/hooks/use-search-view-focus.test.ts +96 -0
  125. package/src/ui/search/hooks/use-search-view-focus.ts +24 -0
  126. package/src/ui/search/index.ts +44 -0
  127. package/src/ui/search/search-bar.tsx +220 -0
  128. package/src/ui/search/search-context.tsx +42 -0
  129. package/src/ui/search/search-view-docked.tsx +194 -0
  130. package/src/ui/search/search-view-fullscreen.tsx +247 -0
  131. package/src/ui/search/search.test.tsx +233 -0
  132. package/src/ui/search/search.tokens.ts +134 -0
  133. package/src/ui/search/search.tsx +131 -0
  134. package/src/ui/search/search.types.ts +154 -0
  135. package/src/ui/search/trailing-action.tsx +49 -0
  136. package/src/ui/shared/constants.ts +122 -0
  137. package/{dist/ui/shared/touch-target.d.ts → src/ui/shared/touch-target.tsx} +13 -1
  138. package/src/ui/slider/hooks/useSliderMath.ts +195 -0
  139. package/{dist/ui/slider/index.d.ts → src/ui/slider/index.ts} +12 -1
  140. package/src/ui/slider/range-slider.tsx +561 -0
  141. package/src/ui/slider/slider-thumb.tsx +379 -0
  142. package/src/ui/slider/slider-track.tsx +912 -0
  143. package/src/ui/slider/slider.tokens.ts +189 -0
  144. package/src/ui/slider/slider.tsx +259 -0
  145. package/src/ui/slider/slider.types.ts +288 -0
  146. package/src/ui/snackbar/index.ts +20 -0
  147. package/src/ui/snackbar/snackbar.test.tsx +338 -0
  148. package/src/ui/snackbar/snackbar.tsx +476 -0
  149. package/{dist/ui/switch/index.d.ts → src/ui/switch/index.ts} +1 -0
  150. package/src/ui/switch/switch.stories.tsx +309 -0
  151. package/src/ui/switch/switch.test.tsx +243 -0
  152. package/src/ui/switch/switch.tokens.ts +89 -0
  153. package/src/ui/switch/switch.tsx +504 -0
  154. package/src/ui/switch/switch.types.ts +62 -0
  155. package/{dist/ui/tabs/index.d.ts → src/ui/tabs/index.ts} +8 -1
  156. package/src/ui/tabs/tab.tsx +407 -0
  157. package/src/ui/tabs/tabs-content.tsx +89 -0
  158. package/src/ui/tabs/tabs-list.tsx +146 -0
  159. package/src/ui/tabs/tabs.test.tsx +290 -0
  160. package/src/ui/tabs/tabs.tokens.ts +121 -0
  161. package/src/ui/tabs/tabs.tsx +229 -0
  162. package/src/ui/tabs/tabs.types.ts +185 -0
  163. package/{dist/ui/text-field/index.d.ts → src/ui/text-field/index.ts} +8 -1
  164. package/src/ui/text-field/subcomponents/active-indicator.tsx +67 -0
  165. package/src/ui/text-field/subcomponents/floating-label.tsx +161 -0
  166. package/src/ui/text-field/subcomponents/leading-icon.tsx +46 -0
  167. package/src/ui/text-field/subcomponents/outline-container.tsx +170 -0
  168. package/src/ui/text-field/subcomponents/prefix-suffix.tsx +59 -0
  169. package/src/ui/text-field/subcomponents/supporting-text.tsx +145 -0
  170. package/src/ui/text-field/subcomponents/trailing-icon.tsx +199 -0
  171. package/src/ui/text-field/text-field.test.tsx +454 -0
  172. package/src/ui/text-field/text-field.tokens.ts +104 -0
  173. package/src/ui/text-field/text-field.tsx +548 -0
  174. package/src/ui/text-field/text-field.types.ts +180 -0
  175. package/src/ui/theme-provider/index.tsx +190 -0
  176. package/src/ui/toc.test.tsx +108 -0
  177. package/src/ui/toc.tsx +172 -0
  178. package/src/ui/tooltip/plain-tooltip.tsx +63 -0
  179. package/src/ui/tooltip/rich-tooltip.tsx +94 -0
  180. package/src/ui/tooltip/tooltip-box.tsx +266 -0
  181. package/src/ui/tooltip/tooltip-caret-shape.tsx +68 -0
  182. package/src/ui/tooltip/tooltip.tokens.ts +26 -0
  183. package/src/ui/tooltip/tooltip.types.ts +70 -0
  184. package/src/ui/tooltip/use-tooltip-position.ts +208 -0
  185. package/src/ui/tooltip/use-tooltip-state.ts +41 -0
  186. package/src/ui/typography/__tests__/typography.test.tsx +170 -0
  187. package/{dist/ui/typography/index.d.ts → src/ui/typography/index.ts} +21 -3
  188. package/src/ui/typography/type-scale-tokens.ts +205 -0
  189. package/src/ui/typography/typography-key-tokens.ts +43 -0
  190. package/src/ui/typography/typography-tokens.ts +360 -0
  191. package/src/ui/typography/typography.css +22 -0
  192. package/src/ui/typography/typography.tsx +559 -0
  193. package/test-render.tsx +4 -0
  194. package/test-shadow.html +26 -0
  195. package/test_output.txt +164 -0
  196. package/test_output_v2.txt +5 -0
  197. package/tsconfig.build.json +10 -0
  198. package/tsconfig.json +18 -0
  199. package/tsup.config.ts +20 -0
  200. package/vitest.config.ts +11 -0
  201. package/dist/hooks/useClickOutside.d.ts +0 -8
  202. package/dist/hooks/useMediaQuery.d.ts +0 -11
  203. package/dist/hooks/useRipple.d.ts +0 -26
  204. package/dist/lib/material-symbols-preconnect.d.ts +0 -42
  205. package/dist/lib/theme-utils.d.ts +0 -63
  206. package/dist/lib/utils.d.ts +0 -2
  207. package/dist/types/index.d.ts +0 -1
  208. package/dist/types/md3.d.ts +0 -14
  209. package/dist/ui/app-bar/app-bar-column.d.ts +0 -28
  210. package/dist/ui/app-bar/app-bar-item-button.d.ts +0 -16
  211. package/dist/ui/app-bar/app-bar-overflow-indicator.d.ts +0 -18
  212. package/dist/ui/app-bar/app-bar-row.d.ts +0 -36
  213. package/dist/ui/app-bar/app-bar.tokens.d.ts +0 -184
  214. package/dist/ui/app-bar/app-bar.types.d.ts +0 -392
  215. package/dist/ui/app-bar/bottom-app-bar.d.ts +0 -31
  216. package/dist/ui/app-bar/docked-toolbar.d.ts +0 -25
  217. package/dist/ui/app-bar/hooks/use-app-bar-scroll.d.ts +0 -42
  218. package/dist/ui/app-bar/hooks/use-flexible-app-bar.d.ts +0 -37
  219. package/dist/ui/app-bar/large-flexible-app-bar.d.ts +0 -26
  220. package/dist/ui/app-bar/medium-flexible-app-bar.d.ts +0 -28
  221. package/dist/ui/app-bar/search-app-bar.d.ts +0 -43
  222. package/dist/ui/app-bar/search-view.d.ts +0 -54
  223. package/dist/ui/app-bar/small-app-bar.d.ts +0 -37
  224. package/dist/ui/badge.d.ts +0 -125
  225. package/dist/ui/button-group.d.ts +0 -59
  226. package/dist/ui/button.d.ts +0 -148
  227. package/dist/ui/card.d.ts +0 -62
  228. package/dist/ui/checkbox.d.ts +0 -82
  229. package/dist/ui/chip.d.ts +0 -110
  230. package/dist/ui/code-block.d.ts +0 -14
  231. package/dist/ui/dialog.d.ts +0 -111
  232. package/dist/ui/divider.d.ts +0 -164
  233. package/dist/ui/drawer.d.ts +0 -39
  234. package/dist/ui/dropdown.d.ts +0 -29
  235. package/dist/ui/fab-menu.d.ts +0 -204
  236. package/dist/ui/fab.d.ts +0 -162
  237. package/dist/ui/icon-button.d.ts +0 -131
  238. package/dist/ui/icon.d.ts +0 -88
  239. package/dist/ui/loading-indicator.d.ts +0 -42
  240. package/dist/ui/navigation-rail.d.ts +0 -29
  241. package/dist/ui/progress-indicator/circular.d.ts +0 -3
  242. package/dist/ui/progress-indicator/hooks.d.ts +0 -3
  243. package/dist/ui/progress-indicator/linear-flat.d.ts +0 -10
  244. package/dist/ui/progress-indicator/linear-wavy.d.ts +0 -18
  245. package/dist/ui/progress-indicator/linear.d.ts +0 -3
  246. package/dist/ui/progress-indicator/types.d.ts +0 -151
  247. package/dist/ui/progress-indicator/utils.d.ts +0 -3
  248. package/dist/ui/radio-button.d.ts +0 -106
  249. package/dist/ui/ripple.d.ts +0 -126
  250. package/dist/ui/scroll-area.d.ts +0 -27
  251. package/dist/ui/search/animated-placeholder.d.ts +0 -54
  252. package/dist/ui/search/hooks/use-search-keyboard.d.ts +0 -32
  253. package/dist/ui/search/hooks/use-search-view-focus.d.ts +0 -6
  254. package/dist/ui/search/index.d.ts +0 -27
  255. package/dist/ui/search/search-bar.d.ts +0 -32
  256. package/dist/ui/search/search-context.d.ts +0 -24
  257. package/dist/ui/search/search-view-docked.d.ts +0 -25
  258. package/dist/ui/search/search-view-fullscreen.d.ts +0 -36
  259. package/dist/ui/search/search.d.ts +0 -50
  260. package/dist/ui/search/search.tokens.d.ts +0 -112
  261. package/dist/ui/search/search.types.d.ts +0 -131
  262. package/dist/ui/search/trailing-action.d.ts +0 -9
  263. package/dist/ui/shared/constants.d.ts +0 -86
  264. package/dist/ui/slider/hooks/useSliderMath.d.ts +0 -101
  265. package/dist/ui/slider/range-slider.d.ts +0 -47
  266. package/dist/ui/slider/slider-thumb.d.ts +0 -33
  267. package/dist/ui/slider/slider-track.d.ts +0 -25
  268. package/dist/ui/slider/slider.d.ts +0 -60
  269. package/dist/ui/slider/slider.tokens.d.ts +0 -151
  270. package/dist/ui/slider/slider.types.d.ts +0 -259
  271. package/dist/ui/snackbar/index.d.ts +0 -6
  272. package/dist/ui/snackbar/snackbar.d.ts +0 -197
  273. package/dist/ui/switch/switch.d.ts +0 -30
  274. package/dist/ui/switch/switch.stories.d.ts +0 -48
  275. package/dist/ui/switch/switch.tokens.d.ts +0 -67
  276. package/dist/ui/switch/switch.types.d.ts +0 -59
  277. package/dist/ui/tabs/tab.d.ts +0 -43
  278. package/dist/ui/tabs/tabs-content.d.ts +0 -36
  279. package/dist/ui/tabs/tabs-list.d.ts +0 -40
  280. package/dist/ui/tabs/tabs.d.ts +0 -60
  281. package/dist/ui/tabs/tabs.tokens.d.ts +0 -94
  282. package/dist/ui/tabs/tabs.types.d.ts +0 -172
  283. package/dist/ui/text-field/subcomponents/active-indicator.d.ts +0 -24
  284. package/dist/ui/text-field/subcomponents/floating-label.d.ts +0 -43
  285. package/dist/ui/text-field/subcomponents/leading-icon.d.ts +0 -23
  286. package/dist/ui/text-field/subcomponents/outline-container.d.ts +0 -42
  287. package/dist/ui/text-field/subcomponents/prefix-suffix.d.ts +0 -24
  288. package/dist/ui/text-field/subcomponents/supporting-text.d.ts +0 -37
  289. package/dist/ui/text-field/subcomponents/trailing-icon.d.ts +0 -41
  290. package/dist/ui/text-field/text-field.d.ts +0 -49
  291. package/dist/ui/text-field/text-field.tokens.d.ts +0 -76
  292. package/dist/ui/text-field/text-field.types.d.ts +0 -126
  293. package/dist/ui/theme-provider/index.d.ts +0 -48
  294. package/dist/ui/toc.d.ts +0 -80
  295. package/dist/ui/tooltip/plain-tooltip.d.ts +0 -2
  296. package/dist/ui/tooltip/rich-tooltip.d.ts +0 -2
  297. package/dist/ui/tooltip/tooltip-box.d.ts +0 -2
  298. package/dist/ui/tooltip/tooltip-caret-shape.d.ts +0 -9
  299. package/dist/ui/tooltip/tooltip.tokens.d.ts +0 -26
  300. package/dist/ui/tooltip/tooltip.types.d.ts +0 -56
  301. package/dist/ui/tooltip/use-tooltip-position.d.ts +0 -8
  302. package/dist/ui/tooltip/use-tooltip-state.d.ts +0 -2
  303. package/dist/ui/typography/type-scale-tokens.d.ts +0 -162
  304. package/dist/ui/typography/typography-key-tokens.d.ts +0 -40
  305. package/dist/ui/typography/typography-tokens.d.ts +0 -220
  306. package/dist/ui/typography/typography.d.ts +0 -265
  307. /package/{dist/hooks/index.d.ts → src/hooks/index.ts} +0 -0
  308. /package/{dist/ui/tooltip/index.d.ts → src/ui/tooltip/index.ts} +0 -0
@@ -1,56 +0,0 @@
1
- import type * as React from "react";
2
- export type TooltipPlacement = "top" | "bottom" | "left" | "right" | "auto";
3
- export type TooltipTrigger = "hover" | "focus" | "click" | "long-press" | "manual";
4
- export interface TooltipStateConfig {
5
- initialVisible?: boolean;
6
- isPersistent?: boolean;
7
- duration?: number;
8
- }
9
- export interface TooltipState {
10
- isVisible: boolean;
11
- show: () => void;
12
- dismiss: () => void;
13
- }
14
- export interface CaretConfig {
15
- enabled: boolean;
16
- width?: number;
17
- height?: number;
18
- customPath?: string;
19
- }
20
- export interface TooltipBoxProps {
21
- children: React.ReactNode;
22
- tooltip: React.ReactNode;
23
- placement?: TooltipPlacement;
24
- trigger?: TooltipTrigger | TooltipTrigger[];
25
- state?: TooltipState;
26
- spacingFromAnchor?: number;
27
- disabled?: boolean;
28
- className?: string;
29
- showDelay?: number;
30
- hideDelay?: number;
31
- "aria-label"?: string;
32
- }
33
- export interface PlainTooltipProps extends React.HTMLAttributes<HTMLDivElement> {
34
- children: React.ReactNode;
35
- caret?: CaretConfig | null;
36
- maxWidth?: number;
37
- className?: string;
38
- containerColor?: string;
39
- textColor?: string;
40
- "data-side"?: "top" | "bottom" | "left" | "right";
41
- }
42
- export interface RichTooltipProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
43
- children?: React.ReactNode;
44
- title?: React.ReactNode;
45
- action?: React.ReactNode;
46
- caret?: CaretConfig | null;
47
- maxWidth?: number;
48
- className?: string;
49
- colors?: {
50
- container?: string;
51
- title?: string;
52
- body?: string;
53
- action?: string;
54
- };
55
- "data-side"?: "top" | "bottom" | "left" | "right";
56
- }
@@ -1,8 +0,0 @@
1
- import type { TooltipPlacement } from "./tooltip.types";
2
- interface PositionState {
3
- top: number;
4
- left: number;
5
- actualSide: "top" | "bottom" | "left" | "right";
6
- }
7
- export declare function useTooltipPosition(anchorRef: React.RefObject<HTMLElement | null>, tooltipRef: React.RefObject<HTMLElement | null>, placement: TooltipPlacement, spacing: number, isVisible: boolean): PositionState;
8
- export {};
@@ -1,2 +0,0 @@
1
- import type { TooltipState, TooltipStateConfig } from "./tooltip.types";
2
- export declare function useTooltipState(config?: TooltipStateConfig): TooltipState;
@@ -1,162 +0,0 @@
1
- /**
2
- * TypeScaleTokens - MD3 Expressive Typography Physical Tokens
3
- *
4
- * Port of androidx.compose.material3.tokens.TypeScaleTokens
5
- * Adapted for Web with Google Sans Flex Variable Font (ROND axis = 100).
6
- *
7
- * All font sizes use rem units based on 14px root (project default).
8
- * Reference: Material Design 3 Type Scale Tokens spec.
9
- */
10
- export declare const TypeScaleTokens: {
11
- readonly DisplayLargeFont: "'Google Sans Flex', system-ui, sans-serif";
12
- readonly DisplayLargeWeight: 400;
13
- readonly DisplayLargeSize: "3.571rem";
14
- readonly DisplayLargeLineHeight: "4rem";
15
- readonly DisplayLargeTracking: "-0.25px";
16
- readonly DisplayMediumFont: "'Google Sans Flex', system-ui, sans-serif";
17
- readonly DisplayMediumWeight: 400;
18
- readonly DisplayMediumSize: "2.857rem";
19
- readonly DisplayMediumLineHeight: "3.286rem";
20
- readonly DisplayMediumTracking: "0px";
21
- readonly DisplaySmallFont: "'Google Sans Flex', system-ui, sans-serif";
22
- readonly DisplaySmallWeight: 400;
23
- readonly DisplaySmallSize: "2.571rem";
24
- readonly DisplaySmallLineHeight: "3.143rem";
25
- readonly DisplaySmallTracking: "0px";
26
- readonly HeadlineLargeFont: "'Google Sans Flex', system-ui, sans-serif";
27
- readonly HeadlineLargeWeight: 400;
28
- readonly HeadlineLargeSize: "2.286rem";
29
- readonly HeadlineLargeLineHeight: "2.857rem";
30
- readonly HeadlineLargeTracking: "0px";
31
- readonly HeadlineMediumFont: "'Google Sans Flex', system-ui, sans-serif";
32
- readonly HeadlineMediumWeight: 400;
33
- readonly HeadlineMediumSize: "2rem";
34
- readonly HeadlineMediumLineHeight: "2.571rem";
35
- readonly HeadlineMediumTracking: "0px";
36
- readonly HeadlineSmallFont: "'Google Sans Flex', system-ui, sans-serif";
37
- readonly HeadlineSmallWeight: 400;
38
- readonly HeadlineSmallSize: "1.714rem";
39
- readonly HeadlineSmallLineHeight: "2.286rem";
40
- readonly HeadlineSmallTracking: "0px";
41
- readonly TitleLargeFont: "'Google Sans Flex', system-ui, sans-serif";
42
- readonly TitleLargeWeight: 400;
43
- readonly TitleLargeSize: "1.571rem";
44
- readonly TitleLargeLineHeight: "2rem";
45
- readonly TitleLargeTracking: "0px";
46
- readonly TitleMediumFont: "'Google Sans Flex', system-ui, sans-serif";
47
- readonly TitleMediumWeight: 500;
48
- readonly TitleMediumSize: "1.143rem";
49
- readonly TitleMediumLineHeight: "1.714rem";
50
- readonly TitleMediumTracking: "0.15px";
51
- readonly TitleSmallFont: "'Google Sans Flex', system-ui, sans-serif";
52
- readonly TitleSmallWeight: 500;
53
- readonly TitleSmallSize: "1rem";
54
- readonly TitleSmallLineHeight: "1.429rem";
55
- readonly TitleSmallTracking: "0.1px";
56
- readonly BodyLargeFont: "'Google Sans Flex', system-ui, sans-serif";
57
- readonly BodyLargeWeight: 400;
58
- readonly BodyLargeSize: "1.143rem";
59
- readonly BodyLargeLineHeight: "1.714rem";
60
- readonly BodyLargeTracking: "0.5px";
61
- readonly BodyMediumFont: "'Google Sans Flex', system-ui, sans-serif";
62
- readonly BodyMediumWeight: 400;
63
- readonly BodyMediumSize: "1rem";
64
- readonly BodyMediumLineHeight: "1.429rem";
65
- readonly BodyMediumTracking: "0.25px";
66
- readonly BodySmallFont: "'Google Sans Flex', system-ui, sans-serif";
67
- readonly BodySmallWeight: 400;
68
- readonly BodySmallSize: "0.857rem";
69
- readonly BodySmallLineHeight: "1.143rem";
70
- readonly BodySmallTracking: "0.4px";
71
- readonly LabelLargeFont: "'Google Sans Flex', system-ui, sans-serif";
72
- readonly LabelLargeWeight: 500;
73
- readonly LabelLargeSize: "1rem";
74
- readonly LabelLargeLineHeight: "1.429rem";
75
- readonly LabelLargeTracking: "0.1px";
76
- readonly LabelMediumFont: "'Google Sans Flex', system-ui, sans-serif";
77
- readonly LabelMediumWeight: 500;
78
- readonly LabelMediumSize: "0.857rem";
79
- readonly LabelMediumLineHeight: "1.143rem";
80
- readonly LabelMediumTracking: "0.5px";
81
- readonly LabelSmallFont: "'Google Sans Flex', system-ui, sans-serif";
82
- readonly LabelSmallWeight: 500;
83
- readonly LabelSmallSize: "0.786rem";
84
- readonly LabelSmallLineHeight: "1.143rem";
85
- readonly LabelSmallTracking: "0.5px";
86
- readonly DisplayLargeEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
87
- readonly DisplayLargeEmphasizedWeight: 800;
88
- readonly DisplayLargeEmphasizedSize: "3.571rem";
89
- readonly DisplayLargeEmphasizedLineHeight: "4rem";
90
- readonly DisplayLargeEmphasizedTracking: "-0.25px";
91
- readonly DisplayMediumEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
92
- readonly DisplayMediumEmphasizedWeight: 800;
93
- readonly DisplayMediumEmphasizedSize: "2.857rem";
94
- readonly DisplayMediumEmphasizedLineHeight: "3.286rem";
95
- readonly DisplayMediumEmphasizedTracking: "0px";
96
- readonly DisplaySmallEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
97
- readonly DisplaySmallEmphasizedWeight: 800;
98
- readonly DisplaySmallEmphasizedSize: "2.571rem";
99
- readonly DisplaySmallEmphasizedLineHeight: "3.143rem";
100
- readonly DisplaySmallEmphasizedTracking: "0px";
101
- readonly HeadlineLargeEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
102
- readonly HeadlineLargeEmphasizedWeight: 800;
103
- readonly HeadlineLargeEmphasizedSize: "2.286rem";
104
- readonly HeadlineLargeEmphasizedLineHeight: "2.857rem";
105
- readonly HeadlineLargeEmphasizedTracking: "0px";
106
- readonly HeadlineMediumEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
107
- readonly HeadlineMediumEmphasizedWeight: 800;
108
- readonly HeadlineMediumEmphasizedSize: "2rem";
109
- readonly HeadlineMediumEmphasizedLineHeight: "2.571rem";
110
- readonly HeadlineMediumEmphasizedTracking: "0px";
111
- readonly HeadlineSmallEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
112
- readonly HeadlineSmallEmphasizedWeight: 800;
113
- readonly HeadlineSmallEmphasizedSize: "1.714rem";
114
- readonly HeadlineSmallEmphasizedLineHeight: "2.286rem";
115
- readonly HeadlineSmallEmphasizedTracking: "0px";
116
- readonly TitleLargeEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
117
- readonly TitleLargeEmphasizedWeight: 700;
118
- readonly TitleLargeEmphasizedSize: "1.571rem";
119
- readonly TitleLargeEmphasizedLineHeight: "2rem";
120
- readonly TitleLargeEmphasizedTracking: "0px";
121
- readonly TitleMediumEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
122
- readonly TitleMediumEmphasizedWeight: 700;
123
- readonly TitleMediumEmphasizedSize: "1.143rem";
124
- readonly TitleMediumEmphasizedLineHeight: "1.714rem";
125
- readonly TitleMediumEmphasizedTracking: "0.15px";
126
- readonly TitleSmallEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
127
- readonly TitleSmallEmphasizedWeight: 700;
128
- readonly TitleSmallEmphasizedSize: "1rem";
129
- readonly TitleSmallEmphasizedLineHeight: "1.429rem";
130
- readonly TitleSmallEmphasizedTracking: "0.1px";
131
- readonly BodyLargeEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
132
- readonly BodyLargeEmphasizedWeight: 700;
133
- readonly BodyLargeEmphasizedSize: "1.143rem";
134
- readonly BodyLargeEmphasizedLineHeight: "1.714rem";
135
- readonly BodyLargeEmphasizedTracking: "0.5px";
136
- readonly BodyMediumEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
137
- readonly BodyMediumEmphasizedWeight: 700;
138
- readonly BodyMediumEmphasizedSize: "1rem";
139
- readonly BodyMediumEmphasizedLineHeight: "1.429rem";
140
- readonly BodyMediumEmphasizedTracking: "0.25px";
141
- readonly BodySmallEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
142
- readonly BodySmallEmphasizedWeight: 700;
143
- readonly BodySmallEmphasizedSize: "0.857rem";
144
- readonly BodySmallEmphasizedLineHeight: "1.143rem";
145
- readonly BodySmallEmphasizedTracking: "0.4px";
146
- readonly LabelLargeEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
147
- readonly LabelLargeEmphasizedWeight: 800;
148
- readonly LabelLargeEmphasizedSize: "1rem";
149
- readonly LabelLargeEmphasizedLineHeight: "1.429rem";
150
- readonly LabelLargeEmphasizedTracking: "0.1px";
151
- readonly LabelMediumEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
152
- readonly LabelMediumEmphasizedWeight: 800;
153
- readonly LabelMediumEmphasizedSize: "0.857rem";
154
- readonly LabelMediumEmphasizedLineHeight: "1.143rem";
155
- readonly LabelMediumEmphasizedTracking: "0.5px";
156
- readonly LabelSmallEmphasizedFont: "'Google Sans Flex', system-ui, sans-serif";
157
- readonly LabelSmallEmphasizedWeight: 800;
158
- readonly LabelSmallEmphasizedSize: "0.786rem";
159
- readonly LabelSmallEmphasizedLineHeight: "1.143rem";
160
- readonly LabelSmallEmphasizedTracking: "0.5px";
161
- };
162
- export type TypeScaleTokensType = typeof TypeScaleTokens;
@@ -1,40 +0,0 @@
1
- /**
2
- * TypographyKeyTokens - MD3 Expressive Typography Key Tokens Enum
3
- *
4
- * Port of androidx.compose.material3.tokens.TypographyKeyTokens (Kotlin enum class).
5
- * Used to reference a specific TextStyle via Typography.fromToken().
6
- *
7
- * Contains 30 keys: 15 baseline + 15 emphasized (MD3 Expressive).
8
- */
9
- export declare enum TypographyKeyTokens {
10
- BodyLarge = "BodyLarge",
11
- BodyMedium = "BodyMedium",
12
- BodySmall = "BodySmall",
13
- DisplayLarge = "DisplayLarge",
14
- DisplayMedium = "DisplayMedium",
15
- DisplaySmall = "DisplaySmall",
16
- HeadlineLarge = "HeadlineLarge",
17
- HeadlineMedium = "HeadlineMedium",
18
- HeadlineSmall = "HeadlineSmall",
19
- LabelLarge = "LabelLarge",
20
- LabelMedium = "LabelMedium",
21
- LabelSmall = "LabelSmall",
22
- TitleLarge = "TitleLarge",
23
- TitleMedium = "TitleMedium",
24
- TitleSmall = "TitleSmall",
25
- BodyLargeEmphasized = "BodyLargeEmphasized",
26
- BodyMediumEmphasized = "BodyMediumEmphasized",
27
- BodySmallEmphasized = "BodySmallEmphasized",
28
- DisplayLargeEmphasized = "DisplayLargeEmphasized",
29
- DisplayMediumEmphasized = "DisplayMediumEmphasized",
30
- DisplaySmallEmphasized = "DisplaySmallEmphasized",
31
- HeadlineLargeEmphasized = "HeadlineLargeEmphasized",
32
- HeadlineMediumEmphasized = "HeadlineMediumEmphasized",
33
- HeadlineSmallEmphasized = "HeadlineSmallEmphasized",
34
- LabelLargeEmphasized = "LabelLargeEmphasized",
35
- LabelMediumEmphasized = "LabelMediumEmphasized",
36
- LabelSmallEmphasized = "LabelSmallEmphasized",
37
- TitleLargeEmphasized = "TitleLargeEmphasized",
38
- TitleMediumEmphasized = "TitleMediumEmphasized",
39
- TitleSmallEmphasized = "TitleSmallEmphasized"
40
- }
@@ -1,220 +0,0 @@
1
- /**
2
- * @file typography-tokens.ts
3
- * @description MD3 Expressive Typography Token Definitions.
4
- *
5
- * Port of `androidx.compose.material3.tokens.TypographyTokens` (Kotlin class).
6
- *
7
- * ### Memory Optimization
8
- * All 30 `TextStyle` properties are implemented as **lazy getters** — they are
9
- * computed on first access and cached, rather than being computed eagerly at
10
- * construction time. This reduces the instantiation cost of `TypographyTokens`.
11
- *
12
- * ### Variable Font Axes
13
- * Supports customizable CSS `font-variation-settings` via {@link FontVariationAxes}.
14
- * - Default `ROND` value is `100` (maximum roundness of Google Sans Flex).
15
- * - Other axes remain at font defaults unless explicitly overridden.
16
- *
17
- * @example Basic usage (default tokens)
18
- * ```ts
19
- * const tokens = new TypographyTokens();
20
- * const style = tokens.BodyLarge; // { fontSize, fontWeight, ... }
21
- * ```
22
- *
23
- * @example Custom font family
24
- * ```ts
25
- * const tokens = new TypographyTokens({ fontFamily: "'Inter', sans-serif" });
26
- * ```
27
- *
28
- * @example Custom ROND axis (partial roundness)
29
- * ```ts
30
- * const tokens = new TypographyTokens({ fontVariationAxes: { ROND: 50 } });
31
- * ```
32
- */
33
- /**
34
- * Configurable axes for CSS `font-variation-settings`.
35
- *
36
- * Each key maps to a named variable font axis. Any axis not specified falls
37
- * back to the font's own default value.
38
- *
39
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-variation-settings
40
- *
41
- * @example
42
- * ```ts
43
- * const axes: FontVariationAxes = { ROND: 100, wght: 600 };
44
- * ```
45
- */
46
- export interface FontVariationAxes {
47
- /**
48
- * Roundness axis of Google Sans Flex Variable Font.
49
- * Range: `0` (sharp corners) – `100` (fully rounded).
50
- * @default 100
51
- */
52
- ROND?: number;
53
- /**
54
- * Weight axis. Overrides `font-weight` via variation settings.
55
- * @default font default
56
- */
57
- wght?: number;
58
- /**
59
- * Width axis. Controls glyph condensation/expansion.
60
- * @default font default
61
- */
62
- wdth?: number;
63
- /** Any additional named variation axis supported by the font. */
64
- [axis: string]: number | undefined;
65
- }
66
- /**
67
- * Default font variation axes for MD3 Expressive.
68
- * Sets `ROND` to `100` for maximum roundness; all other axes use font defaults.
69
- */
70
- export declare const DEFAULT_FONT_VARIATION_AXES: Readonly<FontVariationAxes>;
71
- /**
72
- * Serializes a {@link FontVariationAxes} map into a CSS `font-variation-settings` string.
73
- *
74
- * @example
75
- * ```ts
76
- * serializeFontVariationAxes({ ROND: 100, wght: 700 });
77
- * // → '"ROND" 100, "wght" 700'
78
- * ```
79
- */
80
- export declare function serializeFontVariationAxes(axes: FontVariationAxes): string;
81
- /**
82
- * Pre-computed default `font-variation-settings` string.
83
- * Equivalent to `'"ROND" 100'`.
84
- */
85
- export declare const MD3_EXPRESSIVE_FONT_VARIATION: string;
86
- /**
87
- * Web equivalent of Compose's `TextStyle`.
88
- *
89
- * All properties are readonly and map directly to CSS font properties.
90
- * The `fontVariationSettings` field carries the serialized variable-font axes.
91
- */
92
- export interface TextStyle {
93
- /** CSS `font-family` value. */
94
- readonly fontFamily: string;
95
- /** CSS `font-weight` numeric value (e.g. `400`, `700`). */
96
- readonly fontWeight: number;
97
- /** CSS `font-size` in `rem` units. */
98
- readonly fontSize: string;
99
- /** CSS `line-height` in `rem` units. */
100
- readonly lineHeight: string;
101
- /** CSS `letter-spacing` in `px` units. */
102
- readonly letterSpacing: string;
103
- /**
104
- * CSS `font-variation-settings` string.
105
- * @example '"ROND" 100'
106
- * @example '"ROND" 50, "wght" 600'
107
- */
108
- readonly fontVariationSettings: string;
109
- }
110
- /**
111
- * Constructor options for {@link TypographyTokens}.
112
- */
113
- export interface TypographyTokensOptions {
114
- /**
115
- * Custom CSS `font-family` string. When provided, overrides the default
116
- * Google Sans Flex font for all token styles.
117
- *
118
- * @example "'Roboto', sans-serif"
119
- */
120
- fontFamily?: string;
121
- /**
122
- * Variable font axes to apply via `font-variation-settings`.
123
- * Merged on top of {@link DEFAULT_FONT_VARIATION_AXES}.
124
- * Provide only the axes you want to override.
125
- *
126
- * @example { ROND: 0 } // sharp corners
127
- */
128
- fontVariationAxes?: FontVariationAxes;
129
- }
130
- /**
131
- * MD3 Expressive Typography Token class.
132
- *
133
- * Port of `internal class TypographyTokens(val fontFamily: FontFamily? = null)`
134
- * from `androidx.compose.material3.tokens.TypographyTokens`.
135
- *
136
- * Provides 30 pre-defined {@link TextStyle} properties (15 baseline + 15 emphasized),
137
- * each implemented as a **lazy getter** — computed once on first access, then cached.
138
- *
139
- * ### Customization
140
- * Pass {@link TypographyTokensOptions} to the constructor to override:
141
- * - `fontFamily` — swap the typeface
142
- * - `fontVariationAxes` — control variable font axes (e.g., `ROND`)
143
- *
144
- * @example Default
145
- * ```ts
146
- * const tokens = new TypographyTokens();
147
- * ```
148
- *
149
- * @example Custom font + half-rounded
150
- * ```ts
151
- * const tokens = new TypographyTokens({
152
- * fontFamily: "'Inter', sans-serif",
153
- * fontVariationAxes: { ROND: 50 },
154
- * });
155
- * ```
156
- */
157
- export declare class TypographyTokens {
158
- #private;
159
- constructor(options?: TypographyTokensOptions | string);
160
- /** Display Large – `57px`, weight 400 */
161
- get DisplayLarge(): TextStyle;
162
- /** Display Medium – `45px`, weight 400 */
163
- get DisplayMedium(): TextStyle;
164
- /** Display Small – `36px`, weight 400 */
165
- get DisplaySmall(): TextStyle;
166
- /** Headline Large – `32px`, weight 400 */
167
- get HeadlineLarge(): TextStyle;
168
- /** Headline Medium – `28px`, weight 400 */
169
- get HeadlineMedium(): TextStyle;
170
- /** Headline Small – `24px`, weight 400 */
171
- get HeadlineSmall(): TextStyle;
172
- /** Title Large – `22px`, weight 400 */
173
- get TitleLarge(): TextStyle;
174
- /** Title Medium – `16px`, weight 500 */
175
- get TitleMedium(): TextStyle;
176
- /** Title Small – `14px`, weight 500 */
177
- get TitleSmall(): TextStyle;
178
- /** Body Large – `16px`, weight 400 */
179
- get BodyLarge(): TextStyle;
180
- /** Body Medium – `14px`, weight 400 */
181
- get BodyMedium(): TextStyle;
182
- /** Body Small – `12px`, weight 400 */
183
- get BodySmall(): TextStyle;
184
- /** Label Large – `14px`, weight 500 */
185
- get LabelLarge(): TextStyle;
186
- /** Label Medium – `12px`, weight 500 */
187
- get LabelMedium(): TextStyle;
188
- /** Label Small – `11px`, weight 500 */
189
- get LabelSmall(): TextStyle;
190
- /** Display Large Emphasized – `57px`, weight 800 */
191
- get DisplayLargeEmphasized(): TextStyle;
192
- /** Display Medium Emphasized – `45px`, weight 800 */
193
- get DisplayMediumEmphasized(): TextStyle;
194
- /** Display Small Emphasized – `36px`, weight 800 */
195
- get DisplaySmallEmphasized(): TextStyle;
196
- /** Headline Large Emphasized – `32px`, weight 800 */
197
- get HeadlineLargeEmphasized(): TextStyle;
198
- /** Headline Medium Emphasized – `28px`, weight 800 */
199
- get HeadlineMediumEmphasized(): TextStyle;
200
- /** Headline Small Emphasized – `24px`, weight 800 */
201
- get HeadlineSmallEmphasized(): TextStyle;
202
- /** Title Large Emphasized – `22px`, weight 700 */
203
- get TitleLargeEmphasized(): TextStyle;
204
- /** Title Medium Emphasized – `16px`, weight 700 */
205
- get TitleMediumEmphasized(): TextStyle;
206
- /** Title Small Emphasized – `14px`, weight 700 */
207
- get TitleSmallEmphasized(): TextStyle;
208
- /** Body Large Emphasized – `16px`, weight 700 */
209
- get BodyLargeEmphasized(): TextStyle;
210
- /** Body Medium Emphasized – `14px`, weight 700 */
211
- get BodyMediumEmphasized(): TextStyle;
212
- /** Body Small Emphasized – `12px`, weight 700 */
213
- get BodySmallEmphasized(): TextStyle;
214
- /** Label Large Emphasized – `14px`, weight 800 */
215
- get LabelLargeEmphasized(): TextStyle;
216
- /** Label Medium Emphasized – `12px`, weight 800 */
217
- get LabelMediumEmphasized(): TextStyle;
218
- /** Label Small Emphasized – `11px`, weight 800 */
219
- get LabelSmallEmphasized(): TextStyle;
220
- }