@react-md/core 6.2.1 → 6.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/dist/_base.scss +1 -1
  2. package/dist/app-bar/styles.d.ts +0 -2
  3. package/dist/app-bar/styles.js.map +1 -1
  4. package/dist/autocomplete/types.d.ts +12 -0
  5. package/dist/autocomplete/types.js.map +1 -1
  6. package/dist/avatar/Avatar.d.ts +0 -10
  7. package/dist/avatar/Avatar.js.map +1 -1
  8. package/dist/avatar/styles.d.ts +10 -0
  9. package/dist/avatar/styles.js.map +1 -1
  10. package/dist/badge/Badge.d.ts +11 -0
  11. package/dist/badge/Badge.js.map +1 -1
  12. package/dist/badge/styles.d.ts +0 -8
  13. package/dist/badge/styles.js.map +1 -1
  14. package/dist/box/_box.scss +8 -8
  15. package/dist/box/styles.d.ts +9 -0
  16. package/dist/box/styles.js.map +1 -1
  17. package/dist/button/_button.scss +4 -0
  18. package/dist/button/styles.d.ts +5 -1
  19. package/dist/button/styles.js.map +1 -1
  20. package/dist/card/Card.d.ts +0 -7
  21. package/dist/card/Card.js.map +1 -1
  22. package/dist/card/styles.d.ts +6 -0
  23. package/dist/card/styles.js +8 -8
  24. package/dist/card/styles.js.map +1 -1
  25. package/dist/chip/Chip.d.ts +6 -13
  26. package/dist/chip/Chip.js.map +1 -1
  27. package/dist/chip/styles.d.ts +26 -1
  28. package/dist/chip/styles.js.map +1 -1
  29. package/dist/datetime/NativeDateField.d.ts +24 -0
  30. package/dist/datetime/NativeDateField.js +63 -0
  31. package/dist/datetime/NativeDateField.js.map +1 -0
  32. package/dist/datetime/NativeTimeField.d.ts +26 -0
  33. package/dist/datetime/NativeTimeField.js +63 -0
  34. package/dist/datetime/NativeTimeField.js.map +1 -0
  35. package/dist/datetime/useDateField.d.ts +120 -0
  36. package/dist/datetime/useDateField.js +35 -0
  37. package/dist/datetime/useDateField.js.map +1 -0
  38. package/dist/datetime/useTimeField.d.ts +124 -0
  39. package/dist/datetime/useTimeField.js +65 -0
  40. package/dist/datetime/useTimeField.js.map +1 -0
  41. package/dist/datetime/utils.d.ts +34 -0
  42. package/dist/datetime/utils.js +27 -0
  43. package/dist/datetime/utils.js.map +1 -0
  44. package/dist/dialog/styles.d.ts +5 -2
  45. package/dist/dialog/styles.js.map +1 -1
  46. package/dist/divider/styles.d.ts +1 -1
  47. package/dist/divider/styles.js.map +1 -1
  48. package/dist/draggable/utils.d.ts +3 -6
  49. package/dist/draggable/utils.js.map +1 -1
  50. package/dist/error-boundary/ErrorBoundary.js.map +1 -1
  51. package/dist/expansion-panel/ExpansionList.js +1 -1
  52. package/dist/expansion-panel/ExpansionList.js.map +1 -1
  53. package/dist/expansion-panel/useExpansionList.d.ts +2 -7
  54. package/dist/expansion-panel/useExpansionList.js.map +1 -1
  55. package/dist/files/validation.js.map +1 -1
  56. package/dist/form/FormMessage.js +3 -1
  57. package/dist/form/FormMessage.js.map +1 -1
  58. package/dist/form/FormMessageContainer.d.ts +2 -1
  59. package/dist/form/FormMessageContainer.js +3 -2
  60. package/dist/form/FormMessageContainer.js.map +1 -1
  61. package/dist/form/FormMessageCounter.d.ts +3 -2
  62. package/dist/form/FormMessageCounter.js +5 -2
  63. package/dist/form/FormMessageCounter.js.map +1 -1
  64. package/dist/form/InputToggle.js.map +1 -1
  65. package/dist/form/Label.d.ts +0 -10
  66. package/dist/form/Label.js.map +1 -1
  67. package/dist/form/Listbox.d.ts +3 -10
  68. package/dist/form/Listbox.js +8 -27
  69. package/dist/form/Listbox.js.map +1 -1
  70. package/dist/form/ListboxProvider.d.ts +17 -0
  71. package/dist/form/ListboxProvider.js +33 -1
  72. package/dist/form/ListboxProvider.js.map +1 -1
  73. package/dist/form/NativeSelect.js +1 -0
  74. package/dist/form/NativeSelect.js.map +1 -1
  75. package/dist/form/Slider.d.ts +4 -0
  76. package/dist/form/Slider.js.map +1 -1
  77. package/dist/form/Switch.js.map +1 -1
  78. package/dist/form/TextArea.js +1 -0
  79. package/dist/form/TextArea.js.map +1 -1
  80. package/dist/form/TextField.js +1 -0
  81. package/dist/form/TextField.js.map +1 -1
  82. package/dist/form/TextFieldContainer.d.ts +0 -13
  83. package/dist/form/TextFieldContainer.js.map +1 -1
  84. package/dist/form/_form-message.scss +13 -0
  85. package/dist/form/_select.scss +5 -1
  86. package/dist/form/_text-area.scss +2 -1
  87. package/dist/form/_text-field.scss +13 -3
  88. package/dist/form/formMessageContainerStyles.d.ts +7 -0
  89. package/dist/form/formMessageContainerStyles.js +4 -2
  90. package/dist/form/formMessageContainerStyles.js.map +1 -1
  91. package/dist/form/sliderUtils.d.ts +3 -7
  92. package/dist/form/sliderUtils.js.map +1 -1
  93. package/dist/form/types.d.ts +33 -0
  94. package/dist/form/types.js.map +1 -1
  95. package/dist/form/useCombobox.d.ts +6 -2
  96. package/dist/form/useCombobox.js +8 -9
  97. package/dist/form/useCombobox.js.map +1 -1
  98. package/dist/form/useFormReset.d.ts +4 -1
  99. package/dist/form/useFormReset.js +9 -4
  100. package/dist/form/useFormReset.js.map +1 -1
  101. package/dist/form/useNumberField.d.ts +5 -5
  102. package/dist/form/useNumberField.js +10 -2
  103. package/dist/form/useNumberField.js.map +1 -1
  104. package/dist/form/useSelectCombobox.js +2 -2
  105. package/dist/form/useSelectCombobox.js.map +1 -1
  106. package/dist/form/useTextField.d.ts +76 -59
  107. package/dist/form/useTextField.js +7 -1
  108. package/dist/form/useTextField.js.map +1 -1
  109. package/dist/interaction/types.d.ts +5 -1
  110. package/dist/interaction/types.js.map +1 -1
  111. package/dist/interaction/utils.d.ts +14 -0
  112. package/dist/interaction/utils.js +23 -12
  113. package/dist/interaction/utils.js.map +1 -1
  114. package/dist/link/Link.d.ts +0 -7
  115. package/dist/link/Link.js.map +1 -1
  116. package/dist/link/styles.d.ts +7 -0
  117. package/dist/link/styles.js.map +1 -1
  118. package/dist/list/List.d.ts +5 -20
  119. package/dist/list/List.js.map +1 -1
  120. package/dist/list/ListItem.d.ts +4 -38
  121. package/dist/list/ListItem.js.map +1 -1
  122. package/dist/list/listItemStyles.d.ts +24 -2
  123. package/dist/list/listItemStyles.js.map +1 -1
  124. package/dist/list/listStyles.d.ts +17 -2
  125. package/dist/list/listStyles.js.map +1 -1
  126. package/dist/menu/Menu.js.map +1 -1
  127. package/dist/menu/MenuBar.js +1 -1
  128. package/dist/menu/MenuBar.js.map +1 -1
  129. package/dist/menu/MenuItemTextField.d.ts +1 -2
  130. package/dist/menu/MenuItemTextField.js.map +1 -1
  131. package/dist/menu/MenuWidget.js +3 -2
  132. package/dist/menu/MenuWidget.js.map +1 -1
  133. package/dist/movement/constants.d.ts +10 -0
  134. package/dist/movement/constants.js +20 -4
  135. package/dist/movement/constants.js.map +1 -1
  136. package/dist/movement/types.d.ts +59 -10
  137. package/dist/movement/types.js.map +1 -1
  138. package/dist/movement/useKeyboardMovementProvider.d.ts +5 -1
  139. package/dist/movement/useKeyboardMovementProvider.js +171 -73
  140. package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
  141. package/dist/navigation/NavItem.d.ts +4 -1
  142. package/dist/navigation/NavItem.js.map +1 -1
  143. package/dist/navigation/navItemStyles.d.ts +7 -0
  144. package/dist/navigation/navItemStyles.js.map +1 -1
  145. package/dist/overlay/Overlay.d.ts +4 -23
  146. package/dist/overlay/Overlay.js.map +1 -1
  147. package/dist/overlay/styles.d.ts +26 -8
  148. package/dist/overlay/styles.js.map +1 -1
  149. package/dist/progress/LinearProgress.d.ts +4 -9
  150. package/dist/progress/LinearProgress.js.map +1 -1
  151. package/dist/progress/circularProgressStyles.d.ts +6 -0
  152. package/dist/progress/circularProgressStyles.js.map +1 -1
  153. package/dist/progress/linearProgressStyles.d.ts +20 -5
  154. package/dist/progress/linearProgressStyles.js.map +1 -1
  155. package/dist/progress/types.d.ts +0 -9
  156. package/dist/progress/types.js.map +1 -1
  157. package/dist/segmented-button/SegmentedButton.d.ts +7 -12
  158. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  159. package/dist/segmented-button/segmentedButtonStyles.d.ts +26 -3
  160. package/dist/segmented-button/segmentedButtonStyles.js.map +1 -1
  161. package/dist/sheet/Sheet.d.ts +0 -12
  162. package/dist/sheet/Sheet.js.map +1 -1
  163. package/dist/sheet/styles.d.ts +12 -0
  164. package/dist/sheet/styles.js.map +1 -1
  165. package/dist/snackbar/Toast.d.ts +2 -13
  166. package/dist/snackbar/Toast.js.map +1 -1
  167. package/dist/snackbar/ToastManager.js.map +1 -1
  168. package/dist/snackbar/toastStyles.d.ts +17 -2
  169. package/dist/snackbar/toastStyles.js.map +1 -1
  170. package/dist/tabs/Tab.d.ts +2 -41
  171. package/dist/tabs/Tab.js.map +1 -1
  172. package/dist/tabs/tabStyles.d.ts +45 -4
  173. package/dist/tabs/tabStyles.js.map +1 -1
  174. package/dist/tabs/useTabList.js +1 -1
  175. package/dist/tabs/useTabList.js.map +1 -1
  176. package/dist/test-utils/drag.d.ts +6 -9
  177. package/dist/test-utils/mocks/IntersectionObserver.js.map +1 -1
  178. package/dist/test-utils/mocks/ResizeObserver.js.map +1 -1
  179. package/dist/test-utils/utils/createFileList.js.map +1 -1
  180. package/dist/theme/_theme.scss +0 -1
  181. package/dist/theme/getDerivedTheme.d.ts +0 -24
  182. package/dist/theme/getDerivedTheme.js.map +1 -1
  183. package/dist/theme/types.d.ts +25 -0
  184. package/dist/theme/types.js.map +1 -1
  185. package/dist/tooltip/Tooltip.d.ts +4 -32
  186. package/dist/tooltip/Tooltip.js.map +1 -1
  187. package/dist/tooltip/styles.d.ts +38 -1
  188. package/dist/tooltip/styles.js +1 -1
  189. package/dist/tooltip/styles.js.map +1 -1
  190. package/dist/transition/SkeletonPlaceholder.d.ts +0 -7
  191. package/dist/transition/SkeletonPlaceholder.js.map +1 -1
  192. package/dist/transition/Slide.js.map +1 -1
  193. package/dist/transition/skeletonPlaceholderUtils.d.ts +7 -0
  194. package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
  195. package/dist/transition/useCarousel.d.ts +2 -2
  196. package/dist/transition/useCarousel.js.map +1 -1
  197. package/dist/transition/useMaxWidthTransition.d.ts +14 -2
  198. package/dist/transition/useMaxWidthTransition.js.map +1 -1
  199. package/dist/transition/useSlideTransition.d.ts +5 -0
  200. package/dist/transition/useSlideTransition.js.map +1 -1
  201. package/dist/tree/Tree.d.ts +5 -9
  202. package/dist/tree/Tree.js +1 -1
  203. package/dist/tree/Tree.js.map +1 -1
  204. package/dist/tree/styles.d.ts +9 -1
  205. package/dist/tree/styles.js.map +1 -1
  206. package/dist/tree/useTreeMovement.d.ts +2 -1
  207. package/dist/tree/useTreeMovement.js +2 -1
  208. package/dist/tree/useTreeMovement.js.map +1 -1
  209. package/dist/types.d.ts +14 -0
  210. package/dist/types.js.map +1 -1
  211. package/dist/typography/Mark.d.ts +4 -1
  212. package/dist/typography/Mark.js.map +1 -1
  213. package/dist/typography/TextContainer.d.ts +0 -6
  214. package/dist/typography/TextContainer.js.map +1 -1
  215. package/dist/typography/markStyles.d.ts +5 -0
  216. package/dist/typography/markStyles.js.map +1 -1
  217. package/dist/typography/textContainerStyles.d.ts +6 -0
  218. package/dist/typography/textContainerStyles.js.map +1 -1
  219. package/dist/typography/typographyStyles.d.ts +9 -0
  220. package/dist/typography/typographyStyles.js.map +1 -1
  221. package/dist/useResizeObserver.js.map +1 -1
  222. package/dist/utils/getMiddleOfRange.d.ts +2 -3
  223. package/dist/utils/getMiddleOfRange.js.map +1 -1
  224. package/dist/utils/getPercentage.d.ts +2 -9
  225. package/dist/utils/getPercentage.js +1 -1
  226. package/dist/utils/getPercentage.js.map +1 -1
  227. package/dist/utils/getRangeSteps.d.ts +2 -3
  228. package/dist/utils/getRangeSteps.js +0 -3
  229. package/dist/utils/getRangeSteps.js.map +1 -1
  230. package/dist/utils/nearest.d.ts +2 -3
  231. package/dist/utils/nearest.js +0 -3
  232. package/dist/utils/nearest.js.map +1 -1
  233. package/dist/utils/trigonometry.d.ts +31 -0
  234. package/dist/utils/trigonometry.js +25 -0
  235. package/dist/utils/trigonometry.js.map +1 -0
  236. package/dist/window-splitter/WindowSplitter.d.ts +5 -19
  237. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  238. package/dist/window-splitter/styles.d.ts +27 -3
  239. package/dist/window-splitter/styles.js.map +1 -1
  240. package/dist/window-splitter/useWindowSplitter.d.ts +1 -1
  241. package/dist/window-splitter/useWindowSplitter.js.map +1 -1
  242. package/package.json +8 -8
  243. package/src/app-bar/styles.ts +0 -2
  244. package/src/autocomplete/types.ts +17 -0
  245. package/src/avatar/Avatar.tsx +0 -11
  246. package/src/avatar/styles.ts +11 -0
  247. package/src/badge/Badge.tsx +12 -0
  248. package/src/badge/styles.ts +0 -9
  249. package/src/box/styles.ts +9 -0
  250. package/src/button/styles.ts +5 -1
  251. package/src/card/Card.tsx +0 -8
  252. package/src/card/styles.ts +15 -8
  253. package/src/chip/Chip.tsx +9 -15
  254. package/src/chip/styles.ts +29 -1
  255. package/src/datetime/NativeDateField.tsx +92 -0
  256. package/src/datetime/NativeTimeField.tsx +94 -0
  257. package/src/datetime/useDateField.ts +193 -0
  258. package/src/datetime/useTimeField.ts +233 -0
  259. package/src/datetime/utils.ts +48 -0
  260. package/src/dialog/styles.ts +5 -2
  261. package/src/divider/styles.ts +1 -1
  262. package/src/draggable/utils.ts +3 -6
  263. package/src/expansion-panel/ExpansionList.tsx +2 -1
  264. package/src/expansion-panel/useExpansionList.ts +6 -12
  265. package/src/form/FormMessage.tsx +4 -0
  266. package/src/form/FormMessageContainer.tsx +8 -4
  267. package/src/form/FormMessageCounter.tsx +17 -6
  268. package/src/form/InputToggle.tsx +2 -0
  269. package/src/form/Label.tsx +0 -11
  270. package/src/form/Listbox.tsx +18 -46
  271. package/src/form/ListboxProvider.ts +61 -1
  272. package/src/form/NativeSelect.tsx +1 -0
  273. package/src/form/Slider.tsx +6 -0
  274. package/src/form/Switch.tsx +2 -0
  275. package/src/form/TextArea.tsx +3 -0
  276. package/src/form/TextField.tsx +1 -0
  277. package/src/form/TextFieldContainer.tsx +0 -14
  278. package/src/form/formMessageContainerStyles.ts +10 -2
  279. package/src/form/sliderUtils.ts +3 -7
  280. package/src/form/types.ts +44 -0
  281. package/src/form/useCombobox.ts +15 -10
  282. package/src/form/useFormReset.ts +12 -5
  283. package/src/form/useNumberField.ts +17 -14
  284. package/src/form/useSelectCombobox.ts +2 -2
  285. package/src/form/useTextField.ts +102 -69
  286. package/src/interaction/types.ts +5 -1
  287. package/src/interaction/utils.ts +18 -20
  288. package/src/link/Link.tsx +0 -8
  289. package/src/link/styles.ts +8 -0
  290. package/src/list/List.tsx +7 -24
  291. package/src/list/ListItem.tsx +7 -43
  292. package/src/list/listItemStyles.ts +26 -2
  293. package/src/list/listStyles.ts +18 -2
  294. package/src/menu/Menu.tsx +2 -0
  295. package/src/menu/MenuBar.tsx +1 -1
  296. package/src/menu/MenuItemTextField.tsx +1 -3
  297. package/src/menu/MenuWidget.tsx +4 -2
  298. package/src/movement/constants.ts +26 -4
  299. package/src/movement/types.ts +84 -19
  300. package/src/movement/useKeyboardMovementProvider.ts +209 -95
  301. package/src/navigation/NavItem.tsx +6 -2
  302. package/src/navigation/navItemStyles.ts +8 -0
  303. package/src/overlay/Overlay.tsx +4 -26
  304. package/src/overlay/styles.ts +29 -10
  305. package/src/progress/LinearProgress.tsx +8 -10
  306. package/src/progress/circularProgressStyles.ts +7 -0
  307. package/src/progress/linearProgressStyles.ts +22 -5
  308. package/src/progress/types.ts +0 -10
  309. package/src/segmented-button/SegmentedButton.tsx +14 -15
  310. package/src/segmented-button/segmentedButtonStyles.ts +28 -3
  311. package/src/sheet/Sheet.tsx +0 -13
  312. package/src/sheet/styles.ts +13 -0
  313. package/src/snackbar/Toast.tsx +2 -15
  314. package/src/snackbar/toastStyles.ts +20 -2
  315. package/src/tabs/Tab.tsx +4 -49
  316. package/src/tabs/tabStyles.ts +52 -4
  317. package/src/tabs/useTabList.ts +1 -1
  318. package/src/test-utils/drag.ts +8 -12
  319. package/src/theme/getDerivedTheme.ts +0 -26
  320. package/src/theme/types.ts +26 -0
  321. package/src/tooltip/Tooltip.tsx +4 -36
  322. package/src/tooltip/styles.ts +43 -2
  323. package/src/transition/SkeletonPlaceholder.tsx +0 -8
  324. package/src/transition/Slide.tsx +2 -0
  325. package/src/transition/skeletonPlaceholderUtils.ts +8 -0
  326. package/src/transition/useCarousel.ts +2 -2
  327. package/src/transition/useMaxWidthTransition.ts +17 -2
  328. package/src/transition/useSlideTransition.ts +8 -0
  329. package/src/tree/Tree.tsx +6 -11
  330. package/src/tree/styles.ts +10 -1
  331. package/src/tree/useTreeMovement.ts +4 -0
  332. package/src/types.ts +16 -0
  333. package/src/typography/Mark.tsx +6 -2
  334. package/src/typography/TextContainer.tsx +0 -7
  335. package/src/typography/markStyles.ts +6 -0
  336. package/src/typography/textContainerStyles.ts +7 -0
  337. package/src/typography/typographyStyles.ts +10 -0
  338. package/src/utils/getMiddleOfRange.ts +2 -3
  339. package/src/utils/getPercentage.ts +3 -11
  340. package/src/utils/getRangeSteps.ts +3 -3
  341. package/src/utils/nearest.ts +3 -3
  342. package/src/utils/trigonometry.ts +46 -0
  343. package/src/window-splitter/WindowSplitter.tsx +9 -22
  344. package/src/window-splitter/styles.ts +31 -3
  345. package/src/window-splitter/useWindowSplitter.ts +3 -2
@@ -3,7 +3,14 @@ import { cnb } from "cnbuilder";
3
3
  import { cssUtils } from "../cssUtils.js";
4
4
  import { bem } from "../utils/bem.js";
5
5
 
6
- const cardStyles = bem("rmd-card");
6
+ const styles = bem("rmd-card");
7
+
8
+ declare module "react" {
9
+ interface CSSProperties {
10
+ "--rmd-card-background-color"?: string;
11
+ "--rmd-card-color"?: string;
12
+ }
13
+ }
7
14
 
8
15
  /** @since 6.0.0 */
9
16
  export interface CardClassNameOptions {
@@ -42,7 +49,7 @@ export function card(options: CardClassNameOptions = {}): string {
42
49
  const { className, bordered, raisable, interactable } = options;
43
50
 
44
51
  return cnb(
45
- cardStyles({
52
+ styles({
46
53
  bordered,
47
54
  shadowed: !bordered,
48
55
  raisable: !bordered && raisable,
@@ -70,7 +77,7 @@ export function cardHeader(options: CardHeaderClassNameOptions = {}): string {
70
77
  const { className, addonAfter = false, addonBefore = false } = options;
71
78
 
72
79
  return cnb(
73
- cardStyles("header", {
80
+ styles("header", {
74
81
  "addon-after": addonAfter && !addonBefore,
75
82
  "addon-before": addonBefore && !addonAfter,
76
83
  surrounded: addonAfter && addonBefore,
@@ -92,7 +99,7 @@ export function cardHeaderContent(
92
99
  ): string {
93
100
  const { className } = options;
94
101
 
95
- return cnb(cardStyles("header-content"), className);
102
+ return cnb(styles("header-content"), className);
96
103
  }
97
104
 
98
105
  /** @since 6.0.0 */
@@ -106,7 +113,7 @@ export interface CardTitleClassNameOptions {
106
113
  export function cardTitle(options: CardTitleClassNameOptions = {}): string {
107
114
  const { className } = options;
108
115
 
109
- return cnb(cardStyles("title"), className);
116
+ return cnb(styles("title"), className);
110
117
  }
111
118
 
112
119
  /** @since 6.0.0 */
@@ -122,7 +129,7 @@ export function cardSubtitle(
122
129
  ): string {
123
130
  const { className } = options;
124
131
 
125
- return cnb(cardStyles("subtitle"), className);
132
+ return cnb(styles("subtitle"), className);
126
133
  }
127
134
 
128
135
  /** @since 6.0.0 */
@@ -165,7 +172,7 @@ export function cardContent(options: CardContentClassNameOptions = {}): string {
165
172
  } = options;
166
173
 
167
174
  return cnb(
168
- cardStyles("content", {
175
+ styles("content", {
169
176
  padded: !disablePadding,
170
177
  "padding-bottom": !disableLastChildPadding,
171
178
  }),
@@ -187,5 +194,5 @@ export interface CardFooterClassNameOptions {
187
194
  export function cardFooter(options: CardFooterClassNameOptions = {}): string {
188
195
  const { className } = options;
189
196
 
190
- return cnb(cardStyles("footer"), className);
197
+ return cnb(styles("footer"), className);
191
198
  }
package/src/chip/Chip.tsx CHANGED
@@ -14,33 +14,27 @@ import { getIcon } from "../icon/config.js";
14
14
  import { type ComponentWithRippleProps } from "../interaction/types.js";
15
15
  import { useElementInteraction } from "../interaction/useElementInteraction.js";
16
16
  import { useHigherContrastChildren } from "../interaction/useHigherContrastChildren.js";
17
- import { useMaxWidthTransition } from "../transition/useMaxWidthTransition.js";
17
+ import {
18
+ type BaseMaxWidthTransitionOptions,
19
+ useMaxWidthTransition,
20
+ } from "../transition/useMaxWidthTransition.js";
18
21
  import { type PropsWithRef } from "../types.js";
19
- import { chip, chipContent } from "./styles.js";
20
-
21
- declare module "react" {
22
- interface CSSProperties {
23
- "--rmd-chip-solid-background-color"?: string;
24
- "--rmd-chip-solid-disabled-background-color"?: string;
25
- "--rmd-chip-solid-color"?: string;
26
- "--rmd-chip-theme-background-color"?: string;
27
- "--rmd-chip-theme-color"?: string;
28
- "--rmd-chip-outline-background-color"?: string;
29
- "--rmd-chip-outline-color"?: string;
30
- }
31
- }
22
+ import { type ChipTheme, chip, chipContent } from "./styles.js";
32
23
 
33
24
  /**
34
25
  * @since 6.0.0 Renamed the `noninteractive` prop to
35
26
  * `noninteractable`.
27
+ * @since 6.3.1 Extends BaseMaxWidthTransitionOptions for CSSProperties module
28
+ * augmentation.
36
29
  */
37
30
  export interface ChipProps
38
31
  extends ButtonHTMLAttributes<HTMLButtonElement>,
32
+ BaseMaxWidthTransitionOptions,
39
33
  ComponentWithRippleProps {
40
34
  /**
41
35
  * @defaultValue `"solid"`
42
36
  */
43
- theme?: "outline" | "solid";
37
+ theme?: ChipTheme;
44
38
 
45
39
  /**
46
40
  * Set this to `true` if the chip should gain additional box shadow while the
@@ -5,6 +5,30 @@ import { bem } from "../utils/bem.js";
5
5
 
6
6
  const styles = bem("rmd-chip");
7
7
 
8
+ declare module "react" {
9
+ interface CSSProperties {
10
+ "--rmd-chip-gap"?: string;
11
+ "--rmd-chip-height"?: string;
12
+ "--rmd-chip-border-radius"?: string | number;
13
+ "--rmd-chip-horizontal-padding"?: string | number;
14
+ "--rmd-chip-vertical-padding"?: string | number;
15
+ "--rmd-chip-solid-background-color"?: string;
16
+ "--rmd-chip-solid-disabled-background-color"?: string;
17
+ "--rmd-chip-solid-color"?: string;
18
+ "--rmd-chip-theme-background-color"?: string;
19
+ "--rmd-chip-theme-color"?: string;
20
+ "--rmd-chip-outline-color"?: string;
21
+ "--rmd-chip-outline-width"?: string | number;
22
+ "--rmd-chip-outline-background-color"?: string;
23
+ "--rmd-chip-outline-text-color"?: string;
24
+ }
25
+ }
26
+
27
+ /**
28
+ * @since 6.3.1
29
+ */
30
+ export type ChipTheme = "outline" | "solid";
31
+
8
32
  /**
9
33
  * @since 6.0.0
10
34
  *
@@ -39,10 +63,14 @@ const styles = bem("rmd-chip");
39
63
  */
40
64
  export interface ChipClassNameOptions {
41
65
  className?: string;
66
+
67
+ /**
68
+ * An optional className to provide only while {@link selected} is `true`.
69
+ */
42
70
  selectedClassName?: string;
43
71
 
44
72
  /** @defaultValue `"solid"` */
45
- theme?: "outline" | "solid";
73
+ theme?: ChipTheme;
46
74
 
47
75
  backgroundColor?: BackgroundColor;
48
76
 
@@ -0,0 +1,92 @@
1
+ "use client";
2
+
3
+ import { forwardRef } from "react";
4
+
5
+ import { TextField, type TextFieldProps } from "../form/TextField.js";
6
+ import { type DateFieldOptions, useDateField } from "./useDateField.js";
7
+
8
+ /** @since 6.3.0 */
9
+ export interface NativeDateFieldProps
10
+ extends Omit<TextFieldProps, keyof DateFieldOptions | "value">,
11
+ Omit<DateFieldOptions, "ref"> {}
12
+
13
+ /**
14
+ * The `NativeDateField` is a simple wrapper around the `TextField` using the
15
+ * `useDateField` hook.
16
+ *
17
+ * @example Simple Example
18
+ * ```tsx
19
+ * import { NativeDateField } from "@react-md/core/datetime/NativeDateField";
20
+ * import { type ReactElement } from "react";
21
+ *
22
+ * function Example(): ReactElement {
23
+ * return <NativeDateField label="Delivery Date" name="delivery" />;
24
+ * }
25
+ * ```
26
+ *
27
+ * @see {@link https://react-md.dev/components/native-time-field | NativeDateField Demos}
28
+ * @see {@link https://react-md.dev/components/text-field | TextField Demos}
29
+ * @since 6.3.0
30
+ */
31
+ export const NativeDateField = forwardRef<
32
+ HTMLInputElement,
33
+ NativeDateFieldProps
34
+ >(function NativeDateField(props, ref) {
35
+ const {
36
+ id,
37
+ min,
38
+ max,
39
+ step,
40
+ onBlur,
41
+ onInvalid,
42
+ onChange,
43
+ helpText,
44
+ required,
45
+ validationType,
46
+ disableMessage,
47
+ errorIcon,
48
+ isErrored,
49
+ getErrorIcon,
50
+ getErrorMessage,
51
+ onErrorChange,
52
+ disableReset,
53
+ defaultValue,
54
+ ...remaining
55
+ } = props;
56
+ const { name, form } = props;
57
+ const { fieldProps } = useDateField({
58
+ id,
59
+ ref,
60
+ name,
61
+ form,
62
+ min,
63
+ max,
64
+ step,
65
+ onBlur,
66
+ onChange,
67
+ onInvalid,
68
+ helpText,
69
+ required,
70
+ validationType,
71
+ disableMessage: disableMessage ?? (!min && !max && !step && !required),
72
+ errorIcon,
73
+ isErrored,
74
+ getErrorIcon,
75
+ getErrorMessage,
76
+ onErrorChange,
77
+ disableReset,
78
+ defaultValue,
79
+ });
80
+
81
+ let { messageProps } = remaining;
82
+ if (fieldProps.messageProps) {
83
+ messageProps = {
84
+ ...fieldProps.messageProps,
85
+ ...remaining.messageProps,
86
+ };
87
+ }
88
+
89
+ return (
90
+ <TextField {...remaining} {...fieldProps} messageProps={messageProps} />
91
+ );
92
+ });
@@ -0,0 +1,94 @@
1
+ "use client";
2
+
3
+ import { forwardRef } from "react";
4
+
5
+ import { TextField, type TextFieldProps } from "../form/TextField.js";
6
+ import { type TimeFieldOptions, useTimeField } from "./useTimeField.js";
7
+
8
+ /**
9
+ * @since 6.3.0
10
+ */
11
+ export interface NativeTimeFieldProps
12
+ extends Omit<TextFieldProps, keyof TimeFieldOptions | "value">,
13
+ Omit<TimeFieldOptions, "ref"> {}
14
+
15
+ /**
16
+ * The `NativeTimeField` is a simple wrapper around the `TextField` using the
17
+ * `useTimeField` hook.
18
+ *
19
+ * @example Simple Example
20
+ * ```tsx
21
+ * import { NativeTimeField } from "@react-md/core/datetime/NativeTimeField";
22
+ * import { type ReactElement } from "react";
23
+ *
24
+ * function Example(): ReactElement {
25
+ * return <NativeTimeField label="Time" name="appt" />;
26
+ * }
27
+ * ```
28
+ *
29
+ * @see {@link https://react-md.dev/components/native-time-field | NativeTimeField Demos}
30
+ * @see {@link https://react-md.dev/components/text-field | TextField Demos}
31
+ * @since 6.3.0
32
+ */
33
+ export const NativeTimeField = forwardRef<
34
+ HTMLInputElement,
35
+ NativeTimeFieldProps
36
+ >(function NativeTimeField(props, ref) {
37
+ const {
38
+ id,
39
+ min,
40
+ max,
41
+ step,
42
+ onBlur,
43
+ onInvalid,
44
+ onChange,
45
+ helpText,
46
+ required,
47
+ validationType,
48
+ disableMessage,
49
+ errorIcon,
50
+ isErrored,
51
+ getErrorIcon,
52
+ getErrorMessage,
53
+ onErrorChange,
54
+ disableReset,
55
+ defaultValue,
56
+ ...remaining
57
+ } = props;
58
+ const { name, form } = props;
59
+ const { fieldProps } = useTimeField({
60
+ id,
61
+ ref,
62
+ name,
63
+ form,
64
+ min,
65
+ max,
66
+ step,
67
+ onBlur,
68
+ onChange,
69
+ onInvalid,
70
+ helpText,
71
+ required,
72
+ validationType,
73
+ disableMessage: disableMessage ?? (!min && !max && !step && !required),
74
+ errorIcon,
75
+ isErrored,
76
+ getErrorIcon,
77
+ getErrorMessage,
78
+ onErrorChange,
79
+ disableReset,
80
+ defaultValue,
81
+ });
82
+
83
+ let { messageProps } = remaining;
84
+ if (fieldProps.messageProps) {
85
+ messageProps = {
86
+ ...fieldProps.messageProps,
87
+ ...remaining.messageProps,
88
+ };
89
+ }
90
+
91
+ return (
92
+ <TextField {...remaining} {...fieldProps} messageProps={messageProps} />
93
+ );
94
+ });
@@ -0,0 +1,193 @@
1
+ "use client";
2
+
3
+ import { type InputHTMLAttributes, useRef } from "react";
4
+
5
+ import {
6
+ type ProvidedFormMessageProps,
7
+ type ProvidedTextFieldProps,
8
+ type TextFieldHookOptions,
9
+ type TextFieldImplementation,
10
+ type TextFieldWithMessageImplementation,
11
+ useTextField,
12
+ } from "../form/useTextField.js";
13
+
14
+ /**
15
+ * @since 6.3.0
16
+ */
17
+ export interface DateFieldConstraints {
18
+ /**
19
+ * This **must** be in the format `yyyy-mm-dd`
20
+ *
21
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/date#min | min attribute}
22
+ */
23
+ min?: string;
24
+
25
+ /**
26
+ * This **must** be in the format `yyyy-mm-dd`
27
+ *
28
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/date#max | max attribute}
29
+ */
30
+ max?: string;
31
+
32
+ /**
33
+ * For date inputs, the value of step is given in days; and is treated as a
34
+ * number of milliseconds equal to 86,400,000 times the step value (the
35
+ * underlying numeric value is in milliseconds). The default value of step is
36
+ * 1, indicating 1 day.
37
+ *
38
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/date#step | step attribute}
39
+ */
40
+ step?: number | "any";
41
+ }
42
+
43
+ /** @since 6.3.0 */
44
+ export interface DateFieldOptions
45
+ extends Omit<
46
+ TextFieldHookOptions,
47
+ | "isNumber"
48
+ | "counter"
49
+ | "pattern"
50
+ | "maxLength"
51
+ | "minLength"
52
+ | "disableMaxLength"
53
+ >,
54
+ DateFieldConstraints {}
55
+
56
+ /** @since 6.3.0 */
57
+ export interface ProvidedDateFieldProps
58
+ extends Omit<ProvidedTextFieldProps, "value">,
59
+ Omit<DateFieldConstraints, "step"> {
60
+ type: "date";
61
+ step?: number | "any";
62
+ defaultValue: Required<InputHTMLAttributes<HTMLInputElement>>["defaultValue"];
63
+ }
64
+
65
+ /** @since 6.3.0 */
66
+ export interface ProvidedDateFieldMessageProps extends ProvidedDateFieldProps {
67
+ /**
68
+ * These props will be defined as long as the `disableMessage` prop is not
69
+ * `true` from the `useTextField` hook.
70
+ */
71
+ messageProps: ProvidedFormMessageProps;
72
+ }
73
+
74
+ /** @since 6.3.0 */
75
+ export interface DateFieldImplementation
76
+ extends Omit<TextFieldImplementation, "fieldProps"> {
77
+ fieldProps: ProvidedDateFieldProps;
78
+ }
79
+
80
+ /** @since 6.3.0 */
81
+ export interface DateFieldWithMessageImplementation
82
+ extends Omit<TextFieldWithMessageImplementation, "fieldProps"> {
83
+ fieldProps: ProvidedDateFieldMessageProps;
84
+ }
85
+
86
+ /** @since 6.3.0 */
87
+ export interface ValidatedDateFieldImplementation
88
+ extends DateFieldImplementation {
89
+ fieldProps: ProvidedDateFieldProps | ProvidedDateFieldMessageProps;
90
+ }
91
+
92
+ /**
93
+ * The `useDateField` is a small wrapper around the {@link useTextField} to be used
94
+ * with `<input type="date" />`. It is used in the `NativeDateField` if an example
95
+ * implementation would like to be seen.
96
+ *
97
+ * @example Simple Example
98
+ * ```tsx
99
+ * import { useDateField } from "@react-md/core/datetime/useDateField";
100
+ * import { TextField } from "@react-md/core/form/TextField";
101
+ * import { type ReactElement } from "react";
102
+ *
103
+ * function Example(): ReactElement {
104
+ * const { value, fieldProps, error, errorMessage } = useDateField({
105
+ * name: "delivery",
106
+ * required: true,
107
+ * min: "2025-01-01",
108
+ * max: "2026-01-01",
109
+ * disableMessage: true,
110
+ * });
111
+ *
112
+ * // value: `""` or `"yyyy-mm-dd"`
113
+ *
114
+ * return <TextField label="Delivery Date" {...fieldProps} />
115
+ * }
116
+ * ```
117
+ *
118
+ * @since 6.3.0
119
+ * @see {@link https://react-md.dev/components/native-date-field | NativeDateField Demos}
120
+ * @see {@link https://react-md.dev/hooks/use-date-field | useDateField Demos}
121
+ */
122
+ export function useDateField(
123
+ options: DateFieldOptions & { disableMessage: true }
124
+ ): DateFieldImplementation;
125
+
126
+ /**
127
+ * The `useDateField` is a small wrapper around the {@link useTextField} to be used
128
+ * with `<input type="date" />`. It is used in the `NativeDateField` if an example
129
+ * implementation would like to be seen.
130
+ *
131
+ * @example Simple Example
132
+ * ```tsx
133
+ * import { useDateField } from "@react-md/core/datetime/useDateField";
134
+ * import { TextField } from "@react-md/core/form/TextField";
135
+ * import { type ReactElement } from "react";
136
+ *
137
+ * function Example(): ReactElement {
138
+ * const { value, fieldProps } = useDateField({
139
+ * name: "delivery",
140
+ * required: true,
141
+ * min: "2025-01-01",
142
+ * max: "2026-01-01",
143
+ * });
144
+ *
145
+ * // value: `""` or `"yyyy-mm-dd"`
146
+ *
147
+ * return <TextField label="Delivery Date" {...fieldProps} />
148
+ * }
149
+ * ```
150
+ *
151
+ * @since 6.3.0
152
+ * @see {@link https://react-md.dev/components/native-date-field | NativeDateField Demos}
153
+ * @see {@link https://react-md.dev/hooks/use-date-field | useDateField Demos}
154
+ */
155
+ export function useDateField(
156
+ options: DateFieldOptions
157
+ ): DateFieldWithMessageImplementation;
158
+
159
+ /**
160
+ * @since 6.3.0
161
+ * @see {@link https://react-md.dev/components/native-date-field | NativeTimeField Demos}
162
+ * @see {@link https://react-md.dev/hooks/use-date-field | useTimeField Demos}
163
+ */
164
+ export function useDateField(
165
+ options: DateFieldOptions
166
+ ): ValidatedDateFieldImplementation {
167
+ const { min, max, step, ...fieldOptions } = options;
168
+ const { fieldProps, ...impl } = useTextField(fieldOptions);
169
+
170
+ // NOTE: Unlike the other text field components, the `value` should **not**
171
+ // be provided since the time input behaves a bit weirdly with the `onChange`
172
+ // event and it is better to rely on default browser behavior instead of
173
+ // controlling the value. The flow is:
174
+ // - user types `12:30`
175
+ // - `onChange` is fired with `12:30`
176
+ // - user selects `30` and hits backspace
177
+ // - `onChange` is fired with `""`
178
+ // If the `value` is set, the other time values would be lost
179
+ const { value, ...allowedFieldProps } = fieldProps;
180
+ const initial = useRef(value);
181
+
182
+ return {
183
+ ...impl,
184
+ fieldProps: {
185
+ ...allowedFieldProps,
186
+ defaultValue: initial.current,
187
+ min,
188
+ max,
189
+ step,
190
+ type: "date",
191
+ },
192
+ };
193
+ }