@recursica/adapter-mui-v7 1.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 (389) hide show
  1. package/.storybook/commonArgTypes.ts +148 -0
  2. package/ARCHITECTURE.md +18 -0
  3. package/CHANGELOG.md +582 -0
  4. package/LICENSE +21 -0
  5. package/OVERSTYLING.md +59 -0
  6. package/README.md +70 -0
  7. package/SETUP.md +92 -0
  8. package/USAGE.md +57 -0
  9. package/dist/adapter-mui-v7.cjs +292 -0
  10. package/dist/adapter-mui-v7.cjs.map +1 -0
  11. package/dist/adapter-mui-v7.css +1 -0
  12. package/dist/adapter-mui-v7.js +40757 -0
  13. package/dist/adapter-mui-v7.js.map +1 -0
  14. package/dist/index.d.ts +2350 -0
  15. package/dist/vite.svg +1 -0
  16. package/docs/PHILOSOPHY.md +39 -0
  17. package/llms.txt +76 -0
  18. package/package.json +151 -0
  19. package/recursica_brand.json +2677 -0
  20. package/recursica_tokens.json +799 -0
  21. package/recursica_ui-kit.json +14981 -0
  22. package/recursica_variables_scoped.css +30489 -0
  23. package/src/GlobalExemptions.modules.css +7 -0
  24. package/src/Introduction.stories.tsx +184 -0
  25. package/src/OverStyling.tsx +87 -0
  26. package/src/Version.tsx +37 -0
  27. package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +107 -0
  28. package/src/components/Accordion/Accordion.module.css +362 -0
  29. package/src/components/Accordion/Accordion.stories.tsx +198 -0
  30. package/src/components/Accordion/Accordion.test.tsx +1 -0
  31. package/src/components/Accordion/Accordion.tsx +285 -0
  32. package/src/components/Accordion/USAGE.md +43 -0
  33. package/src/components/Accordion/index.ts +1 -0
  34. package/src/components/AssistiveElement/ASSISTIVEELEMENT_IMPLEMENTATION_NOTES.md +59 -0
  35. package/src/components/AssistiveElement/AssistiveElement.module.css +121 -0
  36. package/src/components/AssistiveElement/AssistiveElement.stories.tsx +68 -0
  37. package/src/components/AssistiveElement/AssistiveElement.test.tsx +1 -0
  38. package/src/components/AssistiveElement/AssistiveElement.tsx +94 -0
  39. package/src/components/AssistiveElement/USAGE.md +36 -0
  40. package/src/components/AssistiveElement/index.ts +1 -0
  41. package/src/components/AutoComplete/AutoComplete.module.css +456 -0
  42. package/src/components/AutoComplete/AutoComplete.stories.tsx +336 -0
  43. package/src/components/AutoComplete/AutoComplete.test.tsx +1 -0
  44. package/src/components/AutoComplete/AutoComplete.tsx +266 -0
  45. package/src/components/AutoComplete/IMPLEMENTATION_NOTES.md +37 -0
  46. package/src/components/AutoComplete/USAGE.md +68 -0
  47. package/src/components/AutoComplete/index.ts +1 -0
  48. package/src/components/Avatar/AVATAR_IMPLEMENTATION_NOTES.md +36 -0
  49. package/src/components/Avatar/Avatar.module.css +336 -0
  50. package/src/components/Avatar/Avatar.stories.tsx +92 -0
  51. package/src/components/Avatar/Avatar.test.tsx +1 -0
  52. package/src/components/Avatar/Avatar.tsx +88 -0
  53. package/src/components/Avatar/USAGE.md +38 -0
  54. package/src/components/Avatar/index.ts +1 -0
  55. package/src/components/Badge/Badge.module.css +115 -0
  56. package/src/components/Badge/Badge.stories.tsx +78 -0
  57. package/src/components/Badge/Badge.test.tsx +1 -0
  58. package/src/components/Badge/Badge.tsx +61 -0
  59. package/src/components/Badge/USAGE.md +40 -0
  60. package/src/components/Badge/index.ts +1 -0
  61. package/src/components/Breadcrumb/BREADCRUMB_IMPLEMENTATION_NOTES.md +51 -0
  62. package/src/components/Breadcrumb/Breadcrumb.module.css +51 -0
  63. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +114 -0
  64. package/src/components/Breadcrumb/Breadcrumb.test.tsx +1 -0
  65. package/src/components/Breadcrumb/Breadcrumb.tsx +70 -0
  66. package/src/components/Breadcrumb/USAGE.md +42 -0
  67. package/src/components/Breadcrumb/index.ts +1 -0
  68. package/src/components/Button/BUTTON_IMPLEMENTATION_NOTES.md +123 -0
  69. package/src/components/Button/Button.module.css +413 -0
  70. package/src/components/Button/Button.stories.tsx +196 -0
  71. package/src/components/Button/Button.styleIsolation.dom.test.tsx +98 -0
  72. package/src/components/Button/Button.tsx +156 -0
  73. package/src/components/Button/USAGE.md +46 -0
  74. package/src/components/Button/index.ts +1 -0
  75. package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +15 -0
  76. package/src/components/Card/Card.module.css +155 -0
  77. package/src/components/Card/Card.stories.tsx +131 -0
  78. package/src/components/Card/Card.test.tsx +1 -0
  79. package/src/components/Card/Card.tsx +202 -0
  80. package/src/components/Card/USAGE.md +57 -0
  81. package/src/components/Card/index.ts +1 -0
  82. package/src/components/Checkbox/CHECKBOX_IMPLEMENTATION_NOTES.md +14 -0
  83. package/src/components/Checkbox/Checkbox.module.css +286 -0
  84. package/src/components/Checkbox/Checkbox.stories.tsx +97 -0
  85. package/src/components/Checkbox/Checkbox.test.tsx +1 -0
  86. package/src/components/Checkbox/Checkbox.tsx +259 -0
  87. package/src/components/Checkbox/CheckboxGroup.stories.tsx +139 -0
  88. package/src/components/Checkbox/CheckboxGroup.tsx +148 -0
  89. package/src/components/Checkbox/USAGE.md +36 -0
  90. package/src/components/Checkbox/index.ts +6 -0
  91. package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +102 -0
  92. package/src/components/Chip/Chip.module.css +283 -0
  93. package/src/components/Chip/Chip.stories.tsx +154 -0
  94. package/src/components/Chip/Chip.test.tsx +1 -0
  95. package/src/components/Chip/Chip.tsx +168 -0
  96. package/src/components/Chip/USAGE.md +55 -0
  97. package/src/components/Chip/index.ts +1 -0
  98. package/src/components/Container/Container.stories.tsx +118 -0
  99. package/src/components/Container/Container.test.tsx +1 -0
  100. package/src/components/Container/Container.tsx +51 -0
  101. package/src/components/Container/IMPLEMENTATION_NOTES.md +5 -0
  102. package/src/components/Container/USAGE.md +48 -0
  103. package/src/components/Container/index.ts +1 -0
  104. package/src/components/DatePicker/DATEPICKER_IMPLEMENTATION_NOTES.md +29 -0
  105. package/src/components/DatePicker/DatePicker.icons.tsx +35 -0
  106. package/src/components/DatePicker/DatePicker.module.css +464 -0
  107. package/src/components/DatePicker/DatePicker.stories.tsx +163 -0
  108. package/src/components/DatePicker/DatePicker.test.tsx +1 -0
  109. package/src/components/DatePicker/DatePicker.tsx +229 -0
  110. package/src/components/DatePicker/USAGE.md +49 -0
  111. package/src/components/DatePicker/index.ts +1 -0
  112. package/src/components/Dropdown/BareDropdown.tsx +168 -0
  113. package/src/components/Dropdown/DROPDOWN_IMPLEMENTATION_NOTES.md +45 -0
  114. package/src/components/Dropdown/Dropdown.icons.tsx +33 -0
  115. package/src/components/Dropdown/Dropdown.module.css +535 -0
  116. package/src/components/Dropdown/Dropdown.stories.tsx +252 -0
  117. package/src/components/Dropdown/Dropdown.test.tsx +1 -0
  118. package/src/components/Dropdown/Dropdown.tsx +319 -0
  119. package/src/components/Dropdown/USAGE.md +68 -0
  120. package/src/components/Dropdown/index.ts +1 -0
  121. package/src/components/FileInput/FILEINPUT_IMPLEMENTATION_NOTES.md +153 -0
  122. package/src/components/FileInput/FileInput.module.css +268 -0
  123. package/src/components/FileInput/FileInput.stories.tsx +313 -0
  124. package/src/components/FileInput/FileInput.test.tsx +1 -0
  125. package/src/components/FileInput/FileInput.tsx +415 -0
  126. package/src/components/FileInput/USAGE.md +145 -0
  127. package/src/components/FileInput/index.ts +1 -0
  128. package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +249 -0
  129. package/src/components/FileUpload/FileUpload.module.css +200 -0
  130. package/src/components/FileUpload/FileUpload.stories.tsx +362 -0
  131. package/src/components/FileUpload/FileUpload.test.tsx +1 -0
  132. package/src/components/FileUpload/FileUpload.tsx +352 -0
  133. package/src/components/FileUpload/USAGE.md +199 -0
  134. package/src/components/FileUpload/index.ts +1 -0
  135. package/src/components/Flex/Flex.stories.tsx +128 -0
  136. package/src/components/Flex/Flex.test.tsx +1 -0
  137. package/src/components/Flex/Flex.tsx +89 -0
  138. package/src/components/Flex/USAGE.md +41 -0
  139. package/src/components/Flex/index.ts +1 -0
  140. package/src/components/FormControlLayout/FormControlLayout.module.css +92 -0
  141. package/src/components/FormControlLayout/FormControlLayout.stories.tsx +118 -0
  142. package/src/components/FormControlLayout/FormControlLayout.test.tsx +1 -0
  143. package/src/components/FormControlLayout/FormControlLayout.tsx +72 -0
  144. package/src/components/FormControlLayout/USAGE.md +40 -0
  145. package/src/components/FormControlLayout/index.ts +1 -0
  146. package/src/components/FormControlWrapper/FORMCONTROLWRAPPER_IMPLEMENTATION_NOTES.md +35 -0
  147. package/src/components/FormControlWrapper/FormControlWrapper.module.css +87 -0
  148. package/src/components/FormControlWrapper/FormControlWrapper.stories.tsx +129 -0
  149. package/src/components/FormControlWrapper/FormControlWrapper.test.tsx +1 -0
  150. package/src/components/FormControlWrapper/FormControlWrapper.tsx +149 -0
  151. package/src/components/FormControlWrapper/USAGE.md +40 -0
  152. package/src/components/FormControlWrapper/index.ts +1 -0
  153. package/src/components/Grid/Grid.module.css +72 -0
  154. package/src/components/Grid/Grid.stories.tsx +161 -0
  155. package/src/components/Grid/Grid.test.tsx +1 -0
  156. package/src/components/Grid/Grid.tsx +155 -0
  157. package/src/components/Grid/IMPLEMENTATION_NOTES.md +24 -0
  158. package/src/components/Grid/USAGE.md +53 -0
  159. package/src/components/Grid/index.ts +1 -0
  160. package/src/components/Group/Group.stories.tsx +120 -0
  161. package/src/components/Group/Group.test.tsx +1 -0
  162. package/src/components/Group/Group.tsx +116 -0
  163. package/src/components/Group/USAGE.md +41 -0
  164. package/src/components/Group/index.ts +1 -0
  165. package/src/components/Heading/Heading.stories.tsx +50 -0
  166. package/src/components/Heading/Heading.test.tsx +1 -0
  167. package/src/components/Heading/Heading.tsx +28 -0
  168. package/src/components/Heading/USAGE.md +36 -0
  169. package/src/components/Heading/index.ts +1 -0
  170. package/src/components/HoverCard/HoverCard.module.css +107 -0
  171. package/src/components/HoverCard/HoverCard.stories.tsx +172 -0
  172. package/src/components/HoverCard/HoverCard.test.tsx +1 -0
  173. package/src/components/HoverCard/HoverCard.tsx +145 -0
  174. package/src/components/HoverCard/USAGE.md +45 -0
  175. package/src/components/HoverCard/index.ts +1 -0
  176. package/src/components/Label/LABEL_IMPLEMENTATION_NOTES.md +27 -0
  177. package/src/components/Label/Label.module.css +169 -0
  178. package/src/components/Label/Label.stories.tsx +131 -0
  179. package/src/components/Label/Label.test.tsx +1 -0
  180. package/src/components/Label/Label.tsx +96 -0
  181. package/src/components/Label/USAGE.md +36 -0
  182. package/src/components/Label/index.ts +1 -0
  183. package/src/components/Layer/USAGE.md +50 -0
  184. package/src/components/Link/LINK_IMPLEMENTATION_NOTES.md +9 -0
  185. package/src/components/Link/Link.module.css +105 -0
  186. package/src/components/Link/Link.stories.tsx +58 -0
  187. package/src/components/Link/Link.test.tsx +1 -0
  188. package/src/components/Link/Link.tsx +45 -0
  189. package/src/components/Link/USAGE.md +40 -0
  190. package/src/components/Link/index.ts +1 -0
  191. package/src/components/Loader/LOADER_IMPLEMENTATION_NOTES.md +25 -0
  192. package/src/components/Loader/Loader.animate.dom.test.tsx +72 -0
  193. package/src/components/Loader/Loader.module.css +175 -0
  194. package/src/components/Loader/Loader.stories.tsx +123 -0
  195. package/src/components/Loader/Loader.test.tsx +1 -0
  196. package/src/components/Loader/Loader.tsx +72 -0
  197. package/src/components/Loader/USAGE.md +42 -0
  198. package/src/components/Loader/index.ts +1 -0
  199. package/src/components/Menu/IMPLEMENTATION_NOTES.md +5 -0
  200. package/src/components/Menu/Menu.module.css +283 -0
  201. package/src/components/Menu/Menu.stories.tsx +405 -0
  202. package/src/components/Menu/Menu.test.tsx +1 -0
  203. package/src/components/Menu/Menu.tsx +103 -0
  204. package/src/components/Menu/USAGE.md +53 -0
  205. package/src/components/Menu/index.ts +1 -0
  206. package/src/components/Modal/MODAL_IMPLEMENTATION_NOTES.md +31 -0
  207. package/src/components/Modal/Modal.module.css +302 -0
  208. package/src/components/Modal/Modal.stories.tsx +105 -0
  209. package/src/components/Modal/Modal.test.tsx +1 -0
  210. package/src/components/Modal/Modal.tsx +231 -0
  211. package/src/components/Modal/USAGE.md +40 -0
  212. package/src/components/Modal/index.ts +1 -0
  213. package/src/components/NumberInput/NUMBER_INPUT_IMPLEMENTATION_NOTES.md +93 -0
  214. package/src/components/NumberInput/NumberInput.module.css +303 -0
  215. package/src/components/NumberInput/NumberInput.stories.tsx +96 -0
  216. package/src/components/NumberInput/NumberInput.test.tsx +1 -0
  217. package/src/components/NumberInput/NumberInput.tsx +273 -0
  218. package/src/components/NumberInput/USAGE.md +36 -0
  219. package/src/components/NumberInput/index.ts +1 -0
  220. package/src/components/Pagination/IMPLEMENTATION_NOTES.md +40 -0
  221. package/src/components/Pagination/Pagination.icons.tsx +66 -0
  222. package/src/components/Pagination/Pagination.module.css +197 -0
  223. package/src/components/Pagination/Pagination.stories.tsx +48 -0
  224. package/src/components/Pagination/Pagination.test.tsx +1 -0
  225. package/src/components/Pagination/Pagination.tsx +123 -0
  226. package/src/components/Pagination/USAGE.md +36 -0
  227. package/src/components/Pagination/index.ts +1 -0
  228. package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +133 -0
  229. package/src/components/Panel/Panel.module.css +231 -0
  230. package/src/components/Panel/Panel.stories.tsx +227 -0
  231. package/src/components/Panel/Panel.test.tsx +1 -0
  232. package/src/components/Panel/Panel.tsx +186 -0
  233. package/src/components/Panel/USAGE.md +46 -0
  234. package/src/components/Panel/index.ts +1 -0
  235. package/src/components/Popover/IMPLEMENTATION_NOTES.md +22 -0
  236. package/src/components/Popover/Popover.module.css +118 -0
  237. package/src/components/Popover/Popover.stories.tsx +133 -0
  238. package/src/components/Popover/Popover.test.tsx +1 -0
  239. package/src/components/Popover/Popover.tsx +267 -0
  240. package/src/components/Popover/USAGE.md +69 -0
  241. package/src/components/Popover/index.ts +1 -0
  242. package/src/components/Radio/RADIO_IMPLEMENTATION_NOTES.md +12 -0
  243. package/src/components/Radio/Radio.module.css +247 -0
  244. package/src/components/Radio/Radio.stories.tsx +93 -0
  245. package/src/components/Radio/Radio.test.tsx +1 -0
  246. package/src/components/Radio/Radio.tsx +223 -0
  247. package/src/components/Radio/RadioGroup.stories.tsx +117 -0
  248. package/src/components/Radio/RadioGroup.tsx +122 -0
  249. package/src/components/Radio/USAGE.md +36 -0
  250. package/src/components/Radio/index.ts +2 -0
  251. package/src/components/ReadOnlyField/ReadOnlyBooleanField.tsx +21 -0
  252. package/src/components/ReadOnlyField/ReadOnlyField.module.css +54 -0
  253. package/src/components/ReadOnlyField/ReadOnlyField.stories.tsx +163 -0
  254. package/src/components/ReadOnlyField/ReadOnlyField.test.tsx +1 -0
  255. package/src/components/ReadOnlyField/ReadOnlyField.tsx +108 -0
  256. package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
  257. package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
  258. package/src/components/ReadOnlyField/USAGE.md +36 -0
  259. package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
  260. package/src/components/ReadOnlyField/index.ts +2 -0
  261. package/src/components/RecursicaThemeProvider/USAGE.md +60 -0
  262. package/src/components/SegmentedControl/IMPLEMENTATION_NOTES.md +14 -0
  263. package/src/components/SegmentedControl/SegmentedControl.module.css +201 -0
  264. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +106 -0
  265. package/src/components/SegmentedControl/SegmentedControl.test.tsx +1 -0
  266. package/src/components/SegmentedControl/SegmentedControl.tsx +149 -0
  267. package/src/components/SegmentedControl/USAGE.md +49 -0
  268. package/src/components/SegmentedControl/index.ts +1 -0
  269. package/src/components/Slider/IMPLEMENTATION_NOTES.md +55 -0
  270. package/src/components/Slider/Slider.module.css +635 -0
  271. package/src/components/Slider/Slider.stories.tsx +282 -0
  272. package/src/components/Slider/Slider.test.tsx +1 -0
  273. package/src/components/Slider/Slider.tsx +435 -0
  274. package/src/components/Slider/USAGE.md +56 -0
  275. package/src/components/Slider/index.ts +1 -0
  276. package/src/components/Stack/Stack.stories.tsx +108 -0
  277. package/src/components/Stack/Stack.test.tsx +1 -0
  278. package/src/components/Stack/Stack.tsx +43 -0
  279. package/src/components/Stack/USAGE.md +41 -0
  280. package/src/components/Stack/index.ts +1 -0
  281. package/src/components/Stepper/IMPLEMENTATION_NOTES.md +120 -0
  282. package/src/components/Stepper/Stepper.module.css +474 -0
  283. package/src/components/Stepper/Stepper.stories.tsx +157 -0
  284. package/src/components/Stepper/Stepper.test.tsx +1 -0
  285. package/src/components/Stepper/Stepper.tsx +240 -0
  286. package/src/components/Stepper/USAGE.md +45 -0
  287. package/src/components/Stepper/index.ts +1 -0
  288. package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +147 -0
  289. package/src/components/Switch/Switch.module.css +346 -0
  290. package/src/components/Switch/Switch.stories.tsx +114 -0
  291. package/src/components/Switch/Switch.test.tsx +1 -0
  292. package/src/components/Switch/Switch.tsx +294 -0
  293. package/src/components/Switch/SwitchGroup.stories.tsx +132 -0
  294. package/src/components/Switch/SwitchGroup.tsx +156 -0
  295. package/src/components/Switch/USAGE.md +36 -0
  296. package/src/components/Switch/index.ts +2 -0
  297. package/src/components/Table/TABLE_IMPLEMENTATION_NOTES.md +75 -0
  298. package/src/components/Table/Table.module.css +462 -0
  299. package/src/components/Table/Table.stories.tsx +154 -0
  300. package/src/components/Table/Table.test.tsx +1 -0
  301. package/src/components/Table/Table.tsx +250 -0
  302. package/src/components/Table/USAGE.md +90 -0
  303. package/src/components/Table/index.ts +1 -0
  304. package/src/components/Tabs/IMPLEMENTATION_NOTES.md +76 -0
  305. package/src/components/Tabs/Tabs.module.css +801 -0
  306. package/src/components/Tabs/Tabs.stories.tsx +174 -0
  307. package/src/components/Tabs/Tabs.test.tsx +1 -0
  308. package/src/components/Tabs/Tabs.tsx +103 -0
  309. package/src/components/Tabs/USAGE.md +61 -0
  310. package/src/components/Tabs/index.ts +1 -0
  311. package/src/components/Text/TEXT_IMPLEMENTATION_NOTES.md +10 -0
  312. package/src/components/Text/Text.stories.tsx +75 -0
  313. package/src/components/Text/Text.test.tsx +1 -0
  314. package/src/components/Text/Text.tsx +19 -0
  315. package/src/components/Text/USAGE.md +40 -0
  316. package/src/components/Text/index.ts +1 -0
  317. package/src/components/TextArea/TEXTAREA_IMPLEMENTATION_NOTES.md +42 -0
  318. package/src/components/TextArea/TextArea.module.css +203 -0
  319. package/src/components/TextArea/TextArea.stories.tsx +94 -0
  320. package/src/components/TextArea/TextArea.test.tsx +1 -0
  321. package/src/components/TextArea/TextArea.tsx +162 -0
  322. package/src/components/TextArea/USAGE.md +38 -0
  323. package/src/components/TextArea/index.ts +1 -0
  324. package/src/components/TextField/TextField.module.css +271 -0
  325. package/src/components/TextField/TextField.stories.tsx +162 -0
  326. package/src/components/TextField/TextField.test.tsx +1 -0
  327. package/src/components/TextField/TextField.tsx +182 -0
  328. package/src/components/TextField/USAGE.md +38 -0
  329. package/src/components/TextField/index.ts +1 -0
  330. package/src/components/TimePicker/TIMEPICKER_IMPLEMENTATION_NOTES.md +89 -0
  331. package/src/components/TimePicker/TimePicker.module.css +262 -0
  332. package/src/components/TimePicker/TimePicker.stories.tsx +155 -0
  333. package/src/components/TimePicker/TimePicker.test.tsx +1 -0
  334. package/src/components/TimePicker/TimePicker.tsx +277 -0
  335. package/src/components/TimePicker/USAGE.md +61 -0
  336. package/src/components/TimePicker/index.ts +1 -0
  337. package/src/components/Timeline/IMPLEMENTATION_NOTES.md +42 -0
  338. package/src/components/Timeline/Timeline.module.css +363 -0
  339. package/src/components/Timeline/Timeline.stories.tsx +128 -0
  340. package/src/components/Timeline/Timeline.test.tsx +1 -0
  341. package/src/components/Timeline/Timeline.tsx +90 -0
  342. package/src/components/Timeline/TimelineItem.tsx +95 -0
  343. package/src/components/Timeline/USAGE.md +41 -0
  344. package/src/components/Timeline/index.ts +2 -0
  345. package/src/components/Toast/TOAST_IMPLEMENTATION_NOTES.md +37 -0
  346. package/src/components/Toast/Toast.module.css +193 -0
  347. package/src/components/Toast/Toast.stories.tsx +67 -0
  348. package/src/components/Toast/Toast.test.tsx +1 -0
  349. package/src/components/Toast/Toast.tsx +121 -0
  350. package/src/components/Toast/USAGE.md +42 -0
  351. package/src/components/Toast/index.ts +1 -0
  352. package/src/components/Tooltip/Tooltip.module.css +83 -0
  353. package/src/components/Tooltip/Tooltip.stories.tsx +165 -0
  354. package/src/components/Tooltip/Tooltip.test.tsx +1 -0
  355. package/src/components/Tooltip/Tooltip.tsx +78 -0
  356. package/src/components/Tooltip/USAGE.md +40 -0
  357. package/src/components/Tooltip/index.ts +1 -0
  358. package/src/components/TransferList/TRANSFERLIST_IMPLEMENTATION_NOTES.md +140 -0
  359. package/src/components/TransferList/TransferList.module.css +174 -0
  360. package/src/components/TransferList/TransferList.stories.tsx +121 -0
  361. package/src/components/TransferList/TransferList.test.tsx +1 -0
  362. package/src/components/TransferList/TransferList.tsx +419 -0
  363. package/src/components/TransferList/USAGE.md +77 -0
  364. package/src/components/TransferList/index.ts +1 -0
  365. package/src/components/Tree/IMPLEMENTATION_NOTES.md +53 -0
  366. package/src/components/Tree/Tree.module.css +272 -0
  367. package/src/components/Tree/Tree.stories.tsx +104 -0
  368. package/src/components/Tree/Tree.test.tsx +1 -0
  369. package/src/components/Tree/Tree.tsx +298 -0
  370. package/src/components/Tree/USAGE.md +99 -0
  371. package/src/components/Tree/index.ts +1 -0
  372. package/src/components/Typography/TYPOGRAPHY_IMPLEMENTATION_NOTES.md +17 -0
  373. package/src/components/Typography/Typography.module.css +13 -0
  374. package/src/components/Typography/Typography.test.tsx +1 -0
  375. package/src/components/Typography/Typography.tsx +43 -0
  376. package/src/components/Typography/USAGE.md +40 -0
  377. package/src/components/Typography/index.ts +1 -0
  378. package/src/components/index.ts +50 -0
  379. package/src/env.d.ts +7 -0
  380. package/src/index.ts +194 -0
  381. package/src/types/index.ts +9 -0
  382. package/src/types/scss-modules.d.ts +9 -0
  383. package/src/utils/ColorSchemeWrapper.tsx +23 -0
  384. package/src/utils/RequireAccessibleLabel.ts +1 -0
  385. package/src/utils/copyToClipboard.ts +36 -0
  386. package/src/utils/filterStylingProps.test.ts +85 -0
  387. package/src/utils/filterStylingProps.ts +143 -0
  388. package/src/utils/index.ts +1 -0
  389. package/src/utils/renderRichOption.tsx +51 -0
@@ -0,0 +1,464 @@
1
+ /* Brand-layer exemptions (recursica-allow-brand) — see recursica-token-analyzer README.md.
2
+ * No ui-kit_components_date-picker radius token exists for the calendar day cells; reuses the brand default border-radius.
3
+ * recursica-allow-brand: --recursica_brand_dimensions_border-radii_default
4
+ * Global hover/focus/disabled state tokens (recursica_variables_scoped.css header, 'Hover & Focus states' / 'Disabled state' — implicit rule for every interactive element; components must not define their own per-component treatment).
5
+ * recursica-allow-brand: --recursica_brand_states_disabled
6
+ * recursica-allow-brand: --recursica_brand_states_focus_blur
7
+ * recursica-allow-brand: --recursica_brand_states_focus_border-size
8
+ * recursica-allow-brand: --recursica_brand_states_focus_color
9
+ * recursica-allow-brand: --recursica_brand_states_focus_margin
10
+ * recursica-allow-brand: --recursica_brand_states_hover_color
11
+ * recursica-allow-brand: --recursica_brand_states_hover_opacity
12
+ */
13
+
14
+ /* HARDCODED VALUES:
15
+ - border-style: solid. Native structural rendering rule.
16
+ - outline: none. Bypassing browser focus rings to rely strictly on Recursica focus states natively.
17
+ - MUI X's field variant can't be forced from this component's public API (see
18
+ DATEPICKER_IMPLEMENTATION_NOTES.md) — whichever native decoration it renders is suppressed
19
+ below, and our own border/background are applied to .field instead, same convention as
20
+ TimePicker.module.css.
21
+ - disabled/error border-size: intentionally not consumed. border-width is set once on .field
22
+ from the base border-size token and held constant across states, so a uniform border is
23
+ preserved and no layout shift/flicker occurs on disabled/error transitions. Matches
24
+ Mantine's DatePicker convention. */
25
+
26
+ /* LAYOUT SPACING OVERRIDES:
27
+ - Sets the --form-control-margin-bottom spacing hook to map component-specific layout tokens. */
28
+ .layoutOverride {
29
+ --form-control-margin-bottom: var(
30
+ --recursica_ui-kit_components_date-picker_variants_layouts_stacked_properties_top-bottom-margin
31
+ );
32
+ }
33
+
34
+ .layoutOverride[data-form-layout="side-by-side"] {
35
+ --form-control-margin-bottom: var(
36
+ --recursica_ui-kit_components_date-picker_variants_layouts_side-by-side_properties_top-bottom-margin
37
+ );
38
+ }
39
+
40
+ .root {
41
+ display: flex;
42
+ width: fit-content;
43
+ }
44
+
45
+ .field {
46
+ width: var(--recursica_ui-kit_components_date-picker_properties_width);
47
+ border-radius: var(
48
+ --recursica_ui-kit_components_date-picker_properties_border-radius
49
+ );
50
+ border-width: var(
51
+ --recursica_ui-kit_components_date-picker_properties_border-size
52
+ );
53
+ border-style: solid;
54
+ border-color: var(
55
+ --recursica_ui-kit_components_date-picker_properties_colors_border-color
56
+ );
57
+ background-color: var(
58
+ --recursica_ui-kit_components_date-picker_properties_colors_background-color
59
+ );
60
+ color: var(
61
+ --recursica_ui-kit_components_date-picker_properties_colors_text-color
62
+ );
63
+ outline: none;
64
+ }
65
+
66
+ /* Suppress whichever native field decoration MUI X renders by default — .field draws the border
67
+ instead, same technique as TimePicker.module.css. */
68
+ .field :global(.MuiPickersInputBase-root::before),
69
+ .field :global(.MuiPickersInputBase-root::after),
70
+ .field :global(.MuiInput-root::before),
71
+ .field :global(.MuiInput-root::after) {
72
+ border-bottom: none !important;
73
+ }
74
+
75
+ .field :global(.MuiPickersOutlinedInput-notchedOutline) {
76
+ border: none !important;
77
+ }
78
+
79
+ .field :global(.MuiPickersInputBase-root) {
80
+ min-height: var(
81
+ --recursica_ui-kit_components_date-picker_properties_min-height
82
+ );
83
+ }
84
+
85
+ .field :global(.MuiPickersInputBase-sectionsContainer) {
86
+ padding-top: var(
87
+ --recursica_ui-kit_components_date-picker_properties_vertical-padding
88
+ );
89
+ padding-bottom: var(
90
+ --recursica_ui-kit_components_date-picker_properties_vertical-padding
91
+ );
92
+
93
+ font-family: var(
94
+ --recursica_ui-kit_components_date-picker_properties_text_font-family
95
+ );
96
+ font-size: var(
97
+ --recursica_ui-kit_components_date-picker_properties_text_font-size
98
+ );
99
+ font-style: var(
100
+ --recursica_ui-kit_components_date-picker_properties_text_font-style
101
+ );
102
+ font-weight: var(
103
+ --recursica_ui-kit_components_date-picker_properties_text_font-weight
104
+ );
105
+ letter-spacing: var(
106
+ --recursica_ui-kit_components_date-picker_properties_text_letter-spacing
107
+ );
108
+ line-height: var(
109
+ --recursica_ui-kit_components_date-picker_properties_text_line-height
110
+ );
111
+ text-decoration: var(
112
+ --recursica_ui-kit_components_date-picker_properties_text_text-decoration
113
+ );
114
+ text-transform: var(
115
+ --recursica_ui-kit_components_date-picker_properties_text_text-transform
116
+ );
117
+ margin-left: var(
118
+ --recursica_ui-kit_components_date-picker_properties_icon-text-gap
119
+ );
120
+ }
121
+
122
+ .field :global(.MuiPickersInputBase-input) {
123
+ color: inherit;
124
+ }
125
+
126
+ /* Empty segments ("MM", "DD", "YYYY") render via MUI X's own placeholder styling, not a native
127
+ ::placeholder pseudo-element — there is no equivalent selector to hook the placeholder-opacity
128
+ token onto, same constraint TimePicker documents for its own empty sections. */
129
+
130
+ /* Leading calendar icon button (see DatePicker.tsx's `openPickerButtonPosition="start"`). */
131
+ .field :global(.MuiInputAdornment-root) {
132
+ margin: 0;
133
+ }
134
+
135
+ .field :global(.MuiButtonBase-root.MuiIconButton-root) {
136
+ padding: 0;
137
+ padding-left: var(
138
+ --recursica_ui-kit_components_date-picker_properties_horizontal-padding
139
+ );
140
+ }
141
+
142
+ .field :global(.MuiButtonBase-root.MuiIconButton-root) :global(svg) {
143
+ width: var(--recursica_ui-kit_components_date-picker_properties_icon-size);
144
+ height: var(--recursica_ui-kit_components_date-picker_properties_icon-size);
145
+ color: var(
146
+ --recursica_ui-kit_components_date-picker_properties_colors_leading-icon
147
+ );
148
+ }
149
+
150
+ /* -------------------------------------
151
+ STATE CASCADE ARCHITECTURE
152
+ -------------------------------------- */
153
+
154
+ .field:has(:global(.Mui-focused)) {
155
+ box-shadow:
156
+ 0 0 0 var(--recursica_brand_states_focus_border-size)
157
+ var(--recursica_brand_states_focus_color),
158
+ 0 0 var(--recursica_brand_states_focus_blur)
159
+ var(--recursica_brand_states_focus_margin)
160
+ var(--recursica_brand_states_focus_color);
161
+ }
162
+
163
+ .root[data-error="true"] .field {
164
+ border-color: var(
165
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_border-color
166
+ ) !important;
167
+ background-color: var(
168
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_background-color
169
+ ) !important;
170
+ color: var(
171
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_text-color
172
+ ) !important;
173
+ }
174
+
175
+ .root[data-error="true"]
176
+ .field
177
+ :global(.MuiButtonBase-root.MuiIconButton-root svg) {
178
+ color: var(
179
+ --recursica_ui-kit_components_date-picker_variants_states_error_properties_colors_leading-icon
180
+ ) !important;
181
+ }
182
+
183
+ .field:has(:global(.Mui-disabled)) {
184
+ border-color: var(
185
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_border-color
186
+ ) !important;
187
+ background-color: var(
188
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_background-color
189
+ ) !important;
190
+ color: var(
191
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_text-color
192
+ ) !important;
193
+ opacity: var(
194
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_opacity
195
+ ) !important;
196
+ cursor: not-allowed;
197
+ }
198
+
199
+ .field:has(:global(.Mui-disabled))
200
+ :global(.MuiButtonBase-root.MuiIconButton-root svg) {
201
+ color: var(
202
+ --recursica_ui-kit_components_date-picker_variants_states_disabled_properties_colors_leading-icon
203
+ ) !important;
204
+ }
205
+
206
+ /* =========================================
207
+ CALENDAR POPOVER OVERRIDES
208
+ Maps generic popover & solid button tokens
209
+ to enforce Recursica's global styling.
210
+ Mirrors mantine-adapter's DatePicker.module.css mapping 1:1 — see
211
+ DATEPICKER_IMPLEMENTATION_NOTES.md for the full rationale per token choice.
212
+ ========================================= */
213
+
214
+ .dropdown {
215
+ background-color: var(
216
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_background-color
217
+ ) !important;
218
+ border: var(
219
+ --recursica_ui-kit_components_hover-card-popover_properties_border-size
220
+ )
221
+ solid
222
+ var(
223
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_border-color
224
+ ) !important;
225
+ border-radius: var(
226
+ --recursica_ui-kit_components_hover-card-popover_properties_border-radius
227
+ ) !important;
228
+ box-shadow: var(
229
+ --recursica_ui-kit_components_hover-card-popover_properties_elevation
230
+ ) !important;
231
+ padding: var(
232
+ --recursica_ui-kit_components_hover-card-popover_properties_vertical-padding
233
+ )
234
+ var(
235
+ --recursica_ui-kit_components_hover-card-popover_properties_horizontal-padding
236
+ ) !important;
237
+ font-family: var(
238
+ --recursica_ui-kit_components_hover-card-popover_properties_content-text_font-family
239
+ );
240
+ }
241
+
242
+ .dropdown :global(.MuiPickersCalendarHeader-root),
243
+ .dropdown :global(.MuiDayCalendar-weekDayLabel) {
244
+ color: var(
245
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_content
246
+ );
247
+ }
248
+
249
+ /* Month label + prev/next nav controls: styled as Recursica's own "text" button variant (small
250
+ size) rather than bare popover text — same treatment as mantine-adapter's
251
+ .calendarHeaderControl/.calendarHeaderLevel. */
252
+ .dropdown :global(.MuiPickersArrowSwitcher-button),
253
+ .dropdown :global(.MuiPickersCalendarHeader-switchViewButton) {
254
+ position: relative;
255
+ border-style: solid;
256
+ border-width: var(
257
+ --recursica_ui-kit_components_button_variants_styles_text_properties_border-size
258
+ );
259
+ border-color: var(
260
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_border-color
261
+ );
262
+ background-color: var(
263
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_background-color
264
+ );
265
+ box-shadow: var(
266
+ --recursica_ui-kit_components_button_variants_styles_text_properties_elevation
267
+ );
268
+ color: var(
269
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_text-color
270
+ );
271
+ font-family: var(
272
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_text_font-family
273
+ );
274
+ transition: all 0.2s ease;
275
+ }
276
+
277
+ .dropdown :global(.MuiPickersArrowSwitcher-button) {
278
+ min-width: var(
279
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_min-width
280
+ );
281
+ height: var(
282
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_height
283
+ );
284
+ border-radius: var(
285
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_border-radius
286
+ );
287
+ padding: 0
288
+ var(
289
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_horizontal-padding
290
+ );
291
+ }
292
+
293
+ .dropdown :global(.MuiPickersCalendarHeader-switchViewButton) {
294
+ height: var(
295
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_height
296
+ );
297
+ border-radius: var(
298
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_small_properties_border-radius
299
+ );
300
+ padding: 0
301
+ var(
302
+ --recursica_ui-kit_components_button_variants_content_label_variants_sizes_small_properties_horizontal-padding
303
+ );
304
+ }
305
+
306
+ /* The "August 2026" label sits beside (not inside) .switchViewButton — the only actual button in
307
+ this header — but recoloring it to match keeps the whole month control reading as one unit,
308
+ same as mantine-adapter's single calendarHeaderLevel button. labelContainer has `role="none"`
309
+ (MUI marks it decorative), so this is presentation-only, no false interactive affordance. */
310
+ .dropdown :global(.MuiPickersCalendarHeader-label) {
311
+ color: var(
312
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_text-color
313
+ );
314
+ font-family: var(
315
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_text_font-family
316
+ );
317
+ font-size: var(
318
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_text_font-size
319
+ );
320
+ font-style: var(
321
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_text_font-style
322
+ );
323
+ font-weight: var(
324
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_text_font-weight
325
+ );
326
+ letter-spacing: var(
327
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_text_letter-spacing
328
+ );
329
+ }
330
+
331
+ /* Hover overlay, same generic mechanism (and ::after-behind-content layering) mantine-adapter uses
332
+ for its .calendarHeaderControl/.calendarHeaderLevel — a plain background-color+opacity change on
333
+ the button itself would dim its icon/text along with the fill, not just tint the surface. */
334
+ .dropdown :global(.MuiPickersArrowSwitcher-button)::after,
335
+ .dropdown :global(.MuiPickersCalendarHeader-switchViewButton)::after {
336
+ content: "";
337
+ position: absolute;
338
+ inset: 0;
339
+ border-radius: inherit;
340
+ z-index: -1;
341
+ pointer-events: none;
342
+ background-color: var(--recursica_brand_states_hover_color);
343
+ opacity: 0;
344
+ transition: opacity 150ms ease;
345
+ }
346
+
347
+ .dropdown
348
+ :global(.MuiPickersArrowSwitcher-button:hover:not(.Mui-disabled))::after,
349
+ .dropdown
350
+ :global(
351
+ .MuiPickersCalendarHeader-switchViewButton:hover:not(.Mui-disabled)
352
+ )::after {
353
+ opacity: var(--recursica_brand_states_hover_opacity);
354
+ }
355
+
356
+ .dropdown :global(.MuiPickersArrowSwitcher-button.Mui-disabled),
357
+ .dropdown :global(.MuiPickersCalendarHeader-switchViewButton.Mui-disabled) {
358
+ opacity: var(
359
+ --recursica_ui-kit_components_button_variants_styles_text_variants_states_disabled_properties_opacity
360
+ );
361
+ box-shadow: var(
362
+ --recursica_ui-kit_components_button_variants_styles_text_variants_states_disabled_properties_elevation
363
+ );
364
+ }
365
+
366
+ .dropdown :global(.MuiPickersArrowSwitcher-button.Mui-focusVisible),
367
+ .dropdown :global(.MuiPickersCalendarHeader-switchViewButton.Mui-focusVisible) {
368
+ outline: none;
369
+ box-shadow:
370
+ 0 0 0 var(--recursica_brand_states_focus_border-size)
371
+ var(--recursica_brand_states_focus_color),
372
+ 0 0 var(--recursica_brand_states_focus_blur)
373
+ var(--recursica_brand_states_focus_margin)
374
+ var(--recursica_brand_states_focus_color);
375
+ }
376
+
377
+ .dropdown :global(.MuiPickersArrowSwitcher-leftArrowIcon),
378
+ .dropdown :global(.MuiPickersArrowSwitcher-rightArrowIcon),
379
+ .dropdown :global(.MuiPickersCalendarHeader-switchViewIcon) {
380
+ color: var(
381
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_icon-color
382
+ );
383
+ width: var(
384
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_icon
385
+ );
386
+ height: var(
387
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_icon
388
+ );
389
+ }
390
+
391
+ /* Day cells */
392
+ .dropdown :global(.MuiPickerDay-root) {
393
+ position: relative;
394
+ color: var(
395
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_content
396
+ );
397
+ border-radius: var(--recursica_brand_dimensions_border-radii_default);
398
+ }
399
+
400
+ /* Today marker: reuse the popover border-size/color tokens already used for the dropdown surface
401
+ itself, same reasoning as mantine-adapter (no dedicated "today" indicator token exists).
402
+ background-color reset because MUI's own default .MuiPickerDay-today rule ships a light
403
+ primary-color tint that this design system has no equivalent for. */
404
+ .dropdown :global(.MuiPickerDay-today:not(.Mui-selected)) {
405
+ background-color: transparent;
406
+ border-style: solid;
407
+ border-width: var(
408
+ --recursica_ui-kit_components_hover-card-popover_properties_border-size
409
+ );
410
+ border-color: var(
411
+ --recursica_ui-kit_components_hover-card-popover_properties_colors_border-color
412
+ );
413
+ }
414
+
415
+ /* Hover overlay: same ::after-behind-content technique as the header buttons above and
416
+ mantine-adapter's .day — MUI's PickerDay renders the day number as a bare text node with no
417
+ wrapping span to z-index above the overlay, so this sits at z-index: -1 instead. */
418
+ .dropdown :global(.MuiPickerDay-root)::after {
419
+ content: "";
420
+ position: absolute;
421
+ inset: 0;
422
+ border-radius: inherit;
423
+ z-index: -1;
424
+ pointer-events: none;
425
+ background-color: var(--recursica_brand_states_hover_color);
426
+ opacity: 0;
427
+ transition: opacity 150ms ease;
428
+ }
429
+
430
+ .dropdown
431
+ :global(.MuiPickerDay-root:hover:not(.Mui-disabled, .Mui-selected))::after {
432
+ opacity: var(--recursica_brand_states_hover_opacity);
433
+ }
434
+
435
+ /* Outside-month & disabled days: dim with the generic disabled-opacity token, same convention used
436
+ repo-wide for elements with no dedicated disabled token. */
437
+ .dropdown :global(.MuiPickerDay-dayOutsideMonth),
438
+ .dropdown :global(.MuiPickerDay-root.Mui-disabled) {
439
+ opacity: var(--recursica_brand_states_disabled);
440
+ }
441
+
442
+ .dropdown :global(.MuiPickerDay-root.Mui-disabled) {
443
+ cursor: not-allowed;
444
+ }
445
+
446
+ .dropdown :global(.MuiPickerDay-root.Mui-selected) {
447
+ background-color: var(
448
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_background-color
449
+ ) !important;
450
+ color: var(
451
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text-color
452
+ ) !important;
453
+ opacity: 1;
454
+ }
455
+
456
+ .dropdown :global(.MuiPickerDay-root.Mui-focusVisible) {
457
+ outline: none;
458
+ box-shadow:
459
+ 0 0 0 var(--recursica_brand_states_focus_border-size)
460
+ var(--recursica_brand_states_focus_color),
461
+ 0 0 var(--recursica_brand_states_focus_blur)
462
+ var(--recursica_brand_states_focus_margin)
463
+ var(--recursica_brand_states_focus_color);
464
+ }
@@ -0,0 +1,163 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { DatePicker } from "./DatePicker";
3
+ import { formControlArgTypes } from "../../../.storybook/commonArgTypes";
4
+
5
+ const meta: Meta<typeof DatePicker> = {
6
+ title: "UI-Kit/DatePicker",
7
+ component: DatePicker,
8
+ tags: ["autodocs"],
9
+ parameters: {
10
+ docs: {
11
+ description: {
12
+ component: `
13
+ The \`DatePicker\` primitive provides a unified calendar date selection input integrated directly into the \`FormControlWrapper\` architecture.
14
+
15
+ ### Architectural Decoupling
16
+ Recursica overrides MUI X's \`DatePicker\` field/popover defaults, safely injecting the date picker into our rigid structural layout systems. State modifiers (e.g. Focus, Errors, ReadOnly) hook seamlessly back onto our native CSS mapping architecture.
17
+
18
+ ### Examples
19
+ Always structure horizontal architectures via the generic \`formLayout\` parameter.
20
+ \`\`\`tsx
21
+ <DatePicker
22
+ label="Start Date"
23
+ assistiveText="Select the deployment kick-off date."
24
+ formLayout="stacked"
25
+ />
26
+ \`\`\`
27
+ `,
28
+ },
29
+ },
30
+ },
31
+ argTypes: {
32
+ ...formControlArgTypes,
33
+ disabled: {
34
+ control: "boolean",
35
+ description:
36
+ "Maps the formal disabled variable states structurally to the input core.",
37
+ },
38
+ error: {
39
+ control: "text",
40
+ description:
41
+ "Applies the strict error string boundary rendering invalid structures seamlessly.",
42
+ },
43
+ required: {
44
+ control: "boolean",
45
+ },
46
+ label: {
47
+ control: "text",
48
+ },
49
+ assistiveText: {
50
+ control: "text",
51
+ },
52
+ readOnly: {
53
+ control: "boolean",
54
+ description:
55
+ "Toggles structural read-only data presentation explicitly blocking standard component bindings.",
56
+ },
57
+ },
58
+ };
59
+
60
+ export default meta;
61
+
62
+ type Story = StoryObj<typeof DatePicker>;
63
+
64
+ export const Default: Story = {
65
+ args: {
66
+ disabled: false,
67
+ label: "Project Deadline",
68
+ assistiveText: "Specify the absolute cutoff for code submission.",
69
+ },
70
+ };
71
+
72
+ export const FormsSideBySide: Story = {
73
+ args: {
74
+ label: "Incident Start Date",
75
+ assistiveText: "When did the incident originally occur?",
76
+ formLayout: "side-by-side",
77
+ },
78
+ };
79
+
80
+ function CustomLeadingIcon({ className }: { className?: string }) {
81
+ return (
82
+ <svg
83
+ className={className}
84
+ width="24"
85
+ height="24"
86
+ viewBox="0 0 24 24"
87
+ fill="none"
88
+ stroke="currentColor"
89
+ strokeWidth="2"
90
+ strokeLinecap="round"
91
+ strokeLinejoin="round"
92
+ >
93
+ <rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect>
94
+ <line x1="16" y1="2" x2="16" y2="6"></line>
95
+ <line x1="8" y1="2" x2="8" y2="6"></line>
96
+ <line x1="3" y1="10" x2="21" y2="10"></line>
97
+ </svg>
98
+ );
99
+ }
100
+
101
+ export const WithLeadingIcon: Story = {
102
+ args: {
103
+ label: "Launch Date",
104
+ slots: { openPickerIcon: CustomLeadingIcon },
105
+ },
106
+ };
107
+
108
+ export const Disabled: Story = {
109
+ args: {
110
+ label: "Disabled Date Range",
111
+ disabled: true,
112
+ },
113
+ };
114
+
115
+ export const ErrorState: Story = {
116
+ args: {
117
+ label: "Execution Date",
118
+ error: "The chosen date conflicts with an existing deployment freeze.",
119
+ required: true,
120
+ },
121
+ };
122
+
123
+ export const OpenedCalendar: Story = {
124
+ args: {
125
+ label: "Meeting Date",
126
+ assistiveText: "Calendar rendered open by default for styling review.",
127
+ // MUI X's DatePicker supports a controlled `open` prop directly; pairing it with a
128
+ // no-op `onClose` keeps the calendar open with no click interaction needed — same
129
+ // intent as the mantine-adapter's `OpenedCalendar` story.
130
+ open: true,
131
+ onClose: () => {},
132
+ // Fixed (not computed) so the selected-day fill is visible on load, alongside the
133
+ // today marker, for styling review. Local-component constructor, not an ISO date
134
+ // string — `new Date("2026-08-26")` parses as UTC midnight, which renders as the
135
+ // 25th in any timezone behind UTC.
136
+ defaultValue: new Date(2026, 7, 26),
137
+ },
138
+ parameters: {
139
+ docs: {
140
+ description: {
141
+ story:
142
+ "The calendar dropdown renders open by default so its styling can be reviewed without a click interaction.",
143
+ },
144
+ },
145
+ },
146
+ };
147
+
148
+ export const StaticReadOnly: Story = {
149
+ args: {
150
+ label: "Static ReadOnly Review",
151
+ value: new Date("2026-05-21"),
152
+ readOnly: true,
153
+ },
154
+ };
155
+
156
+ export const EditableReadOnly: Story = {
157
+ args: {
158
+ label: "Editable ReadOnly Review",
159
+ defaultValue: new Date("2026-06-01"),
160
+ readOnly: true,
161
+ labelWithEditIcon: true,
162
+ },
163
+ };
@@ -0,0 +1 @@
1
+ // Placeholder for future DatePicker component tests. Add tests here if/when needed.