@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,43 +0,0 @@
1
- /**
2
- * @file floating-label.tsx
3
- * Animated floating label for MD3 TextField.
4
- * Animates between inline (body large) and floated (body small) positions.
5
- */
6
- import * as React from "react";
7
- export interface FloatingLabelProps {
8
- /** The label text content. */
9
- text: string;
10
- /** Whether the label is in the floated (small) position. */
11
- isFloated: boolean;
12
- /** Whether the field is currently focused. */
13
- isFocused: boolean;
14
- /** Whether the field is in error state. */
15
- isError: boolean;
16
- /** Whether the field is disabled. */
17
- isDisabled: boolean;
18
- /** 'filled' or 'outlined' — determines vertical y offset. */
19
- variant: "filled" | "outlined";
20
- /** Container height in px (56 normal, 48 dense). */
21
- containerHeight: number;
22
- /** Whether to skip animations (prefers-reduced-motion). */
23
- prefersReduced: boolean;
24
- /** Whether the required asterisk should be shown. */
25
- showAsterisk: boolean;
26
- /** ID of the label element, for associating with a containing element. */
27
- htmlFor?: string;
28
- /** Ref callback so the parent can measure label width for the outlined notch. */
29
- labelRef?: React.Ref<HTMLSpanElement>;
30
- /** Whether there is a leading icon. */
31
- hasLeading?: boolean;
32
- }
33
- /**
34
- * MD3 Expressive Floating Label.
35
- *
36
- * Animates y-position, scale, and color when the label floats.
37
- * Uses `transformOrigin: 'left center'` so scaling anchors at the start.
38
- *
39
- * @accessibility
40
- * Rendered as a `<label>` with `htmlFor` linking to the `<input>`.
41
- * When floated, visual size changes but the semantic label is unchanged.
42
- */
43
- export declare const FloatingLabel: React.NamedExoticComponent<FloatingLabelProps>;
@@ -1,23 +0,0 @@
1
- /**
2
- * @file leading-icon.tsx
3
- * Leading icon slot for MD3 TextField.
4
- */
5
- import * as React from "react";
6
- export interface LeadingIconProps {
7
- /** Icon node — should be 24×24px. */
8
- children: React.ReactNode;
9
- /** Whether the field is in error state (changes icon color). */
10
- isError: boolean;
11
- /** Whether the field is disabled. */
12
- isDisabled: boolean;
13
- }
14
- /**
15
- * MD3 Leading Icon wrapper.
16
- *
17
- * Decorative — `aria-hidden="true"`.
18
- * Color: `on-surface-variant` (default), `error` (error state).
19
- * Size: 24×24px icon, 48×56px touch target via flex alignment.
20
- *
21
- * @see https://m3.material.io/components/text-fields/specs#anatomy
22
- */
23
- export declare const LeadingIcon: React.NamedExoticComponent<LeadingIconProps>;
@@ -1,42 +0,0 @@
1
- /**
2
- * @file outline-container.tsx
3
- * MD3-compliant outlined border with animated notch for the Outlined TextField.
4
- *
5
- * Implementation: 3-segment approach inspired by Material Web's fieldset/legend pattern.
6
- * The top border is split into: [left-segment] [notch-gap] [right-segment].
7
- * The notch-gap width animates from 0 → (labelWidth × scaleRatio + 8px) when label floats.
8
- *
9
- * This mirrors Material Web's implementation without requiring <fieldset> semantics.
10
- *
11
- * @see https://github.com/material-components/material-web/tree/main/textfield
12
- * @see https://m3.material.io/components/text-fields/specs#outlined-text-field
13
- */
14
- import * as React from "react";
15
- export interface OutlineContainerProps {
16
- /** Whether the label is in the floated position. */
17
- isFloated: boolean;
18
- /** Whether the field is focused. */
19
- isFocused: boolean;
20
- /** Whether the field is in error state. */
21
- isError: boolean;
22
- /** Whether the field is disabled. */
23
- isDisabled: boolean;
24
- /** Whether the field is hovered. */
25
- isHovered: boolean;
26
- /**
27
- * Measured width of the label element in its full (unfloated) size.
28
- * The notch width = labelWidth × scaleRatio + 2×notchPadding.
29
- */
30
- labelWidth: number;
31
- /** Whether to disable animations. */
32
- prefersReduced: boolean;
33
- }
34
- /**
35
- * MD3 Outlined TextField container with animated notch.
36
- *
37
- * The notch gap expands/collapses in sync with the FloatingLabel animation,
38
- * creating the visual effect of the label breaking through the border.
39
- *
40
- * Accessibility: `aria-hidden="true"` — purely decorative border.
41
- */
42
- export declare const OutlineContainer: React.NamedExoticComponent<OutlineContainerProps>;
@@ -1,24 +0,0 @@
1
- /**
2
- * @file prefix-suffix.tsx
3
- * Prefix and suffix text for MD3 TextField.
4
- * Visible only when the label is floated (or when there is no label).
5
- */
6
- import * as React from "react";
7
- export interface PrefixSuffixProps {
8
- text: string;
9
- type: "prefix" | "suffix";
10
- /** Whether the label is floated (controls visibility). */
11
- visible: boolean;
12
- /** Disable animations. */
13
- prefersReduced: boolean;
14
- }
15
- /**
16
- * MD3 Prefix / Suffix Text.
17
- *
18
- * Animates in/out in sync with the floating label using AnimatePresence.
19
- * Hidden when label is in the inline position (would overlap the label).
20
- *
21
- * @accessibility
22
- * `aria-hidden="true"` — decorative. Screen readers read the full value in context.
23
- */
24
- export declare const PrefixSuffix: React.NamedExoticComponent<PrefixSuffixProps>;
@@ -1,37 +0,0 @@
1
- /**
2
- * @file supporting-text.tsx
3
- * Supporting text, error text, and character counter for MD3 TextField.
4
- *
5
- * Animates in/out using AnimatePresence. Uses aria-live for accessibility.
6
- */
7
- import * as React from "react";
8
- export interface SupportingTextProps {
9
- /** Helper text shown in normal state. */
10
- supportingText?: string;
11
- /** Error message — shown instead of supportingText when isError=true. */
12
- errorText?: string;
13
- /** Whether field is in error state. */
14
- isError: boolean;
15
- /** Current character count (value.length). */
16
- charCount?: number;
17
- /** Maximum character limit. Counter shown only when maxLength is set. */
18
- maxLength?: number;
19
- /** ID for aria-describedby linking from the input. */
20
- id: string;
21
- /** Disable animations. */
22
- prefersReduced: boolean;
23
- }
24
- /**
25
- * MD3 Supporting Text area.
26
- *
27
- * Layout: [helper/error text] [character counter]
28
- * - Error text replaces supporting text when isError=true.
29
- * - Character counter shows only when maxLength is provided.
30
- * - Both use aria-live="polite" to announce changes to screen readers.
31
- * - Animates in/out with opacity + y-offset via AnimatePresence.
32
- *
33
- * @accessibility
34
- * - Error text: `aria-live="polite"` — screen readers announce when error appears.
35
- * - Counter: `aria-live="polite"` — announces count changes.
36
- */
37
- export declare const SupportingText: React.NamedExoticComponent<SupportingTextProps>;
@@ -1,41 +0,0 @@
1
- /**
2
- * @file trailing-icon.tsx
3
- * Trailing icon slot for MD3 TextField.
4
- *
5
- * Supports three built-in modes:
6
- * - 'clear': ✕ button, visible when field has value
7
- * - 'password-toggle': eye icon, toggles password visibility
8
- * - 'custom': renders the `children` prop
9
- */
10
- import * as React from "react";
11
- import type { TextFieldTrailingIconMode } from "../text-field.types";
12
- export interface TrailingIconProps {
13
- mode: TextFieldTrailingIconMode;
14
- /** Custom icon content (used when mode='custom'). */
15
- children?: React.ReactNode;
16
- /** Current input value — used to determine if clear button is visible. */
17
- value: string;
18
- /** Whether password is currently visible (for password-toggle mode). */
19
- showPassword?: boolean;
20
- /** Fires when clear button is clicked. */
21
- onClear?: () => void;
22
- /** Fires when password visibility toggle is clicked. */
23
- onPasswordToggle?: () => void;
24
- /** Whether the field is in error state. */
25
- isError: boolean;
26
- /** Whether the field is disabled. */
27
- isDisabled: boolean;
28
- /** Disable animations. */
29
- prefersReduced: boolean;
30
- }
31
- /**
32
- * MD3 Trailing Icon.
33
- *
34
- * Touch target: 48×48px (padding extends the hit area beyond the 24×24 icon).
35
- *
36
- * @accessibility
37
- * - Clear button: `aria-label="Clear input"`
38
- * - Password toggle: `aria-label="Show password"` / `"Hide password"`
39
- * - Custom: no aria — consumer provides accessible markup
40
- */
41
- export declare const TrailingIcon: React.NamedExoticComponent<TrailingIconProps>;
@@ -1,49 +0,0 @@
1
- /**
2
- * @file text-field.tsx
3
- * MD3 Expressive TextField — Filled & Outlined variants.
4
- *
5
- * Features:
6
- * - Floating label animation (Framer Motion)
7
- * - Filled (active indicator) and Outlined (notch border) variants
8
- * - Controlled & uncontrolled value handling
9
- * - Built-in clear button, password toggle
10
- * - Prefix / suffix text
11
- * - Supporting text, error text, character counter
12
- * - Leading & trailing icon slots
13
- * - Textarea support
14
- * - Native form validation + imperative handle
15
- * - Full WCAG AA accessibility
16
- * - prefers-reduced-motion support
17
- *
18
- * @see https://m3.material.io/components/text-fields/overview
19
- */
20
- import * as React from "react";
21
- import type { TextFieldHandle, TextFieldProps } from "./text-field.types";
22
- /**
23
- * MD3 Expressive TextField.
24
- *
25
- * Supports `filled` and `outlined` variants, floating label animation,
26
- * prefix/suffix, leading/trailing icons, supporting text, character counter,
27
- * textarea mode, clear button, password toggle, and native form validation.
28
- *
29
- * @example
30
- * ```tsx
31
- * // Filled (default)
32
- * <TextField label="Email" type="email" />
33
- *
34
- * // Outlined with error
35
- * <TextField variant="outlined" label="Username" error errorText="Already taken" />
36
- *
37
- * // With clear button
38
- * <TextField label="Search" trailingIconMode="clear" />
39
- *
40
- * // Password with toggle
41
- * <TextField label="Password" type="password" trailingIconMode="password-toggle" />
42
- *
43
- * // With character counter
44
- * <TextField label="Bio" maxLength={140} supportingText="Describe yourself" />
45
- * ```
46
- *
47
- * @see https://m3.material.io/components/text-fields/overview
48
- */
49
- export declare const TextField: React.NamedExoticComponent<Omit<TextFieldProps, "ref"> & React.RefAttributes<TextFieldHandle>>;
@@ -1,76 +0,0 @@
1
- /**
2
- * @file text-field.tokens.ts
3
- * MD3 design token mapping for the TextField component.
4
- *
5
- * All color values reference CSS custom properties defined by the MD3 theme.
6
- * Do NOT use raw hex values — always use CSS variables.
7
- *
8
- * @see https://m3.material.io/components/text-fields/specs
9
- */
10
- export declare const TF_COLORS: {
11
- /** Filled container background */
12
- readonly filledBg: "var(--color-m3-surface-container-highest)";
13
- /** Input text color */
14
- readonly inputText: "var(--color-m3-on-surface)";
15
- /** Label (unfloated) + icons + prefix/suffix + supporting text */
16
- readonly onSurfaceVariant: "var(--color-m3-on-surface-variant)";
17
- /** Focused active indicator / outline, floated label */
18
- readonly primary: "var(--color-m3-primary)";
19
- /** Error indicator / outline / label / icon / supporting text */
20
- readonly error: "var(--color-m3-error)";
21
- /** Outlined border (enabled) */
22
- readonly outline: "var(--color-m3-outline)";
23
- /** Transparent */
24
- readonly transparent: "transparent";
25
- };
26
- export declare const TF_SIZE: {
27
- /** Container height — normal */
28
- readonly height: 56;
29
- /** Container height — dense variant */
30
- readonly denseHeight: 48;
31
- /** Active indicator height — enabled */
32
- readonly indicatorThin: 1;
33
- /** Active indicator height — focused */
34
- readonly indicatorThick: 2;
35
- /** Outline stroke width — enabled */
36
- readonly outlineThin: 1;
37
- /** Outline stroke width — focused */
38
- readonly outlineThick: 2;
39
- /** Corner radius — all variants */
40
- readonly cornerRadius: 4;
41
- /** Leading/Trailing icon size */
42
- readonly iconSize: 24;
43
- /** Padding inline start (no leading icon) */
44
- readonly paddingStart: 16;
45
- /** Padding inline start (with leading icon) */
46
- readonly paddingStartWithIcon: 12;
47
- /** Padding inline end */
48
- readonly paddingEnd: 16;
49
- /** Padding inline end (with trailing icon) */
50
- readonly paddingEndWithIcon: 12;
51
- /** Notch extra padding per side on outlined label gap */
52
- readonly notchPadding: 4;
53
- };
54
- export declare const TF_TYPOGRAPHY: {
55
- /** Body Large — input text, unfloated label */
56
- readonly bodyLargePx: 16;
57
- /** Body Small — floated label, supporting text, counter */
58
- readonly bodySmallPx: 12;
59
- /** Scale ratio when label floats: 12/16 = 0.75 */
60
- readonly labelScaleRatio: number;
61
- };
62
- /**
63
- * Tailwind utility classes for key TextField elements.
64
- * Use via cn() — do NOT use these as standalone strings without merging.
65
- */
66
- export declare const TF_CLASSES: {
67
- readonly filledContainer: "bg-[var(--color-m3-surface-container-highest)] rounded-tl-[4px] rounded-tr-[4px] rounded-bl-none rounded-br-none";
68
- readonly outlinedContainer: "bg-transparent rounded-[4px]";
69
- readonly input: "bg-transparent outline-none w-full text-base text-[var(--color-m3-on-surface)] caret-[var(--color-m3-primary)] placeholder:text-[var(--color-m3-on-surface-variant)]";
70
- readonly inputNoSpinner: "[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none";
71
- readonly disabled: "opacity-[0.38] pointer-events-none cursor-not-allowed";
72
- readonly supportingText: "text-xs text-[var(--color-m3-on-surface-variant)] px-4";
73
- readonly errorText: "text-xs text-[var(--color-m3-error)] px-4";
74
- readonly prefixSuffix: "text-base text-[var(--color-m3-on-surface-variant)] select-none shrink-0";
75
- readonly stateLayer: "absolute inset-0 bg-[var(--color-m3-on-surface)] opacity-0 transition-opacity duration-150 pointer-events-none rounded-[inherit]";
76
- };
@@ -1,126 +0,0 @@
1
- /**
2
- * @file text-field.types.ts
3
- * TypeScript interfaces and types for TextField MD3 Expressive component.
4
- * @see https://m3.material.io/components/text-fields/overview
5
- */
6
- import type * as React from "react";
7
- export type TextFieldVariant = "filled" | "outlined";
8
- export type TextFieldInputType = "text" | "email" | "number" | "password" | "search" | "tel" | "url" | "textarea";
9
- export type TextFieldTrailingIconMode = "none" | "clear" | "password-toggle" | "custom";
10
- /**
11
- * Imperative handle exposed via forwardRef.
12
- * Allows parent components to programmatically control the text field.
13
- */
14
- export interface TextFieldHandle {
15
- /** Focuses the input element. */
16
- focus(): void;
17
- /** Blurs the input element. */
18
- blur(): void;
19
- /** Selects all text in the input. */
20
- select(): void;
21
- /** Clears the current value and fires onChange with empty string. */
22
- clear(): void;
23
- /** Sets a custom validation message on the native input. */
24
- setCustomValidity(message: string): void;
25
- /** Returns true if the input is valid. Does not show validation UI. */
26
- checkValidity(): boolean;
27
- /** Returns true if the input is valid. Shows validation UI if invalid. */
28
- reportValidity(): boolean;
29
- /** Returns the current value string. */
30
- getValue(): string;
31
- /** Returns the underlying input or textarea element. */
32
- getInputElement(): HTMLInputElement | HTMLTextAreaElement | null;
33
- }
34
- export interface TextFieldProps {
35
- /** Filled or outlined variant. @default 'filled' */
36
- variant?: TextFieldVariant;
37
- /** Floating label text. Also used as accessible name when no aria-label is set. */
38
- label?: string;
39
- /** Controlled value. Use with onChange for controlled mode. */
40
- value?: string;
41
- /** Initial value for uncontrolled mode. */
42
- defaultValue?: string;
43
- /** Fires when value changes. Receives new value string and native event. */
44
- onChange?: (value: string, event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
45
- /** Input type. Use 'textarea' for multi-line input. @default 'text' */
46
- type?: TextFieldInputType;
47
- /** Placeholder text — shown only when no label OR label is floated. */
48
- placeholder?: string;
49
- name?: string;
50
- id?: string;
51
- autoComplete?: string;
52
- inputMode?: React.HTMLAttributes<HTMLInputElement>["inputMode"];
53
- /** Number of rows for textarea type. @default 2 */
54
- rows?: number;
55
- /** Number of columns for textarea type. @default 20 */
56
- cols?: number;
57
- /** Whether the textarea should automatically resize to fit its content. @default false */
58
- autoResize?: boolean;
59
- /** Maximum number of rows when autoResize is true. */
60
- maxRows?: number;
61
- /** CSS direction override for input text. */
62
- textDirection?: "ltr" | "rtl" | "";
63
- /** Marks field as required. Shows asterisk on label. */
64
- required?: boolean;
65
- /** Hides the asterisk even when required=true. */
66
- noAsterisk?: boolean;
67
- /** Manual error override — forces error visual state. */
68
- error?: boolean;
69
- /** Error message shown below the field (replaces supportingText). */
70
- errorText?: string;
71
- minLength?: number;
72
- /** When set, enables character counter display. */
73
- maxLength?: number;
74
- min?: string;
75
- max?: string;
76
- step?: string;
77
- pattern?: string;
78
- /** For type="email" — allows multiple email addresses. */
79
- multiple?: boolean;
80
- /** Helper text shown below the field. Replaced by errorText when in error state. */
81
- supportingText?: string;
82
- /** Text displayed before the input value (e.g., "$"). */
83
- prefixText?: string;
84
- /** Text displayed after the input value (e.g., ".00"). */
85
- suffixText?: string;
86
- /** Icon node for the leading slot. Should be 24×24px. */
87
- leadingIcon?: React.ReactNode;
88
- /** Custom trailing icon node. Used when trailingIconMode='custom'. */
89
- trailingIcon?: React.ReactNode;
90
- /**
91
- * Built-in trailing icon behavior.
92
- * - 'none' — no trailing icon
93
- * - 'clear' — ✕ button, clears value when clicked
94
- * - 'password-toggle' — eye icon, toggles password visibility
95
- * - 'custom' — uses trailingIcon prop
96
- * @default 'none'
97
- */
98
- trailingIconMode?: TextFieldTrailingIconMode;
99
- disabled?: boolean;
100
- readOnly?: boolean;
101
- /** Hides spinner arrows on type="number". */
102
- noSpinner?: boolean;
103
- form?: string;
104
- "aria-label"?: string;
105
- "aria-describedby"?: string;
106
- "aria-labelledby"?: string;
107
- /** Extra class applied to the root wrapper element. */
108
- className?: string;
109
- /** Makes the component fill its container width. */
110
- fullWidth?: boolean;
111
- /** Dense variant — reduced height (48px instead of 56px). */
112
- dense?: boolean;
113
- onFocus?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;
114
- onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLTextAreaElement>;
115
- onKeyDown?: React.KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement>;
116
- onKeyUp?: React.KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement>;
117
- ref?: React.Ref<TextFieldHandle>;
118
- /**
119
- * Controls when the scrollbars are visible when type="textarea".
120
- * - `hover`: Show on hover (default)
121
- * - `scroll`: Show only while scrolling
122
- * - `always`: Always visible
123
- * - `none`: Never visible
124
- */
125
- scrollAreaType?: "hover" | "scroll" | "always" | "none";
126
- }
@@ -1,48 +0,0 @@
1
- import { type ReactNode } from "react";
2
- import { type ThemeMode } from "../../lib/theme-utils";
3
- import { Typography } from "../typography/typography";
4
- import { type FontVariationAxes } from "../typography/typography-tokens";
5
- interface ThemeContextValue {
6
- sourceColor: string;
7
- setSourceColor: (color: string) => void;
8
- mode: ThemeMode;
9
- setMode: (mode: ThemeMode) => void;
10
- }
11
- export interface MD3ThemeProviderProps {
12
- children: ReactNode;
13
- sourceColor?: string;
14
- defaultMode?: ThemeMode;
15
- persistToLocalStorage?: boolean;
16
- /**
17
- * A fully custom `Typography` instance.
18
- * When provided, `fontFamily` and `fontVariationAxes` are ignored.
19
- */
20
- typography?: Typography;
21
- /**
22
- * Override the CSS `font-family` for all typography styles.
23
- * Ignored when `typography` prop is provided.
24
- * @example "'Inter', sans-serif"
25
- */
26
- fontFamily?: string;
27
- /**
28
- * Variable font axes applied globally via `font-variation-settings`.
29
- * Merged on top of defaults (`ROND: 100`). Ignored when `typography` is provided.
30
- * @example { ROND: 50 }
31
- */
32
- fontVariationAxes?: FontVariationAxes;
33
- /**
34
- * When `true`, mounts `SnackbarHost` inside the provider and exposes
35
- * `useSnackbar()` to all descendants — no separate `<SnackbarProvider>` needed.
36
- *
37
- * Opt-in, default `false`. For advanced usage (e.g., scoped snackbars or
38
- * custom host positioning), keep this `false` and use `<SnackbarProvider>`
39
- * or `<SnackbarHost>` directly.
40
- *
41
- * @default false
42
- */
43
- enableSnackbar?: boolean;
44
- }
45
- export declare function MD3ThemeProvider({ children, sourceColor: initialSourceColor, defaultMode, persistToLocalStorage, typography: typographyProp, fontFamily, fontVariationAxes, enableSnackbar, }: MD3ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
46
- export declare function useTheme(): ThemeContextValue;
47
- export declare function useThemeMode(): Pick<ThemeContextValue, "mode" | "setMode">;
48
- export {};
package/dist/ui/toc.d.ts DELETED
@@ -1,80 +0,0 @@
1
- /**
2
- * @file toc.tsx
3
- *
4
- * Table of Contents component for long-form documentation pages.
5
- *
6
- * Uses `IntersectionObserver` to track which section heading is currently in the
7
- * viewport and highlights the corresponding link. Smooth-scrolls to the target
8
- * when a link is clicked (respecting the browser's `prefers-reduced-motion`
9
- * media query via the native `scrollIntoView` API).
10
- *
11
- * @remarks
12
- * - SSR-safe: `IntersectionObserver` usage is guarded by a `typeof` check.
13
- * - The observer `rootMargin` is tuned for documentation layout with a fixed header
14
- * (~100px) and early deactivation (~80% from bottom) so the active item changes
15
- * before the section scrolls off-screen.
16
- */
17
- import { type ScrollAreaProps } from "./scroll-area";
18
- /**
19
- * A single entry in the Table of Contents.
20
- *
21
- * @example
22
- * ```ts
23
- * const items: ToCItem[] = [
24
- * { id: "installation", label: "Installation" },
25
- * { id: "usage", label: "Usage" },
26
- * ];
27
- * ```
28
- */
29
- export interface ToCItem {
30
- /** The DOM `id` attribute of the corresponding section heading. */
31
- id: string;
32
- /** Human-readable label shown in the ToC. */
33
- label: string;
34
- }
35
- /**
36
- * Props for the `TableOfContents` component.
37
- */
38
- export interface TableOfContentsProps {
39
- /**
40
- * Ordered list of section items to display.
41
- * Each item must have a matching DOM element with the same `id`.
42
- */
43
- items: ToCItem[];
44
- /**
45
- * Additional CSS classes applied to the root `<nav>` element.
46
- * Use this to control positioning (e.g. sticky, fixed) from the consumer.
47
- */
48
- className?: string;
49
- /**
50
- * Configuration for the internal ScrollArea.
51
- * @default { type: "hover" }
52
- */
53
- scrollAreaProps?: Omit<ScrollAreaProps, "children">;
54
- }
55
- /**
56
- * Table of Contents sidebar component.
57
- *
58
- * Renders a `<nav>` sidebar with links to page sections. Tracks the active
59
- * section using `IntersectionObserver` and applies active styles to the
60
- * current link.
61
- *
62
- * @remarks
63
- * - Visible only on `xl` screens (`hidden xl:block` — sticky sidebar).
64
- * - The `aria-current` attribute is set on the active link for screen readers.
65
- * - Click scroll is smooth: `scrollIntoView({ behavior: "smooth" })`.
66
- *
67
- * @example
68
- * ```tsx
69
- * const toc: ToCItem[] = [
70
- * { id: "overview", label: "Overview" },
71
- * { id: "props", label: "Props" },
72
- * { id: "examples", label: "Examples" },
73
- * ];
74
- *
75
- * <TableOfContents items={toc} />
76
- * ```
77
- *
78
- * @see https://m3.material.io/foundations/content-design/navigation
79
- */
80
- export declare function TableOfContents({ items, className, scrollAreaProps, }: TableOfContentsProps): import("react/jsx-runtime").JSX.Element;
@@ -1,2 +0,0 @@
1
- import type { PlainTooltipProps } from "./tooltip.types";
2
- export declare const PlainTooltip: import("react").ForwardRefExoticComponent<PlainTooltipProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,2 +0,0 @@
1
- import type { RichTooltipProps } from "./tooltip.types";
2
- export declare const RichTooltip: import("react").ForwardRefExoticComponent<RichTooltipProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,2 +0,0 @@
1
- import type { TooltipBoxProps } from "./tooltip.types";
2
- export declare function TooltipBox({ children, tooltip, placement, trigger, state: controlledState, spacingFromAnchor, disabled, className, showDelay, hideDelay, "aria-label": ariaLabel, }: TooltipBoxProps): import("react/jsx-runtime").JSX.Element;
@@ -1,9 +0,0 @@
1
- export interface TooltipCaretProps {
2
- side: "top" | "bottom" | "left" | "right";
3
- width?: number;
4
- height?: number;
5
- color?: string;
6
- customPath?: string;
7
- className?: string;
8
- }
9
- export declare function TooltipCaretShape({ side, width, height, color, customPath, className, }: TooltipCaretProps): import("react/jsx-runtime").JSX.Element;
@@ -1,26 +0,0 @@
1
- export declare const TooltipTokens: {
2
- readonly PlainTooltip: {
3
- readonly containerColor: "var(--md-sys-color-inverse-surface)";
4
- readonly textColor: "var(--md-sys-color-inverse-on-surface)";
5
- readonly shape: "rounded-[4px]";
6
- readonly font: "text-[12px] font-normal tracking-[0.4px] leading-[16px]";
7
- readonly height: "min-h-6";
8
- readonly padding: "px-2 py-1";
9
- readonly maxWidth: "max-w-50";
10
- };
11
- readonly RichTooltip: {
12
- readonly containerColor: "var(--md-sys-color-surface-container)";
13
- readonly elevation: "shadow-md";
14
- readonly shape: "rounded-[12px]";
15
- readonly paddingTop: "pt-3";
16
- readonly paddingBottom: "pb-2";
17
- readonly paddingX: "px-4";
18
- readonly maxWidth: "max-w-80";
19
- readonly subheadColor: "var(--md-sys-color-on-surface-variant)";
20
- readonly subheadFont: "text-[14px] font-medium leading-[20px]";
21
- readonly bodyColor: "var(--md-sys-color-on-surface-variant)";
22
- readonly bodyFont: "text-[14px] font-normal leading-[20px]";
23
- readonly actionColor: "var(--md-sys-color-primary)";
24
- readonly actionFont: "text-[14px] font-medium leading-[20px]";
25
- };
26
- };