@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,75 @@
1
+ # Table — Implementation Notes (Internal)
2
+
3
+ ## Background
4
+
5
+ Unlike `mantine-adapter`, this package's `Table.module.css` was an empty stub — none of the
6
+ header/cell/footer/row tokens were wired at all (the "table-header/table-footer/table-cell, 88
7
+ tokens" gap from the 2026-08-21 token-analyzer review). This pass writes that CSS from scratch,
8
+ porting the structure/token references already proven out in `mantine-adapter`'s
9
+ `Table.module.css`, adapted to MUI's DOM and class model.
10
+
11
+ ## One `Table.Cell`, not separate header/body/footer components
12
+
13
+ MUI's own `TableCell` is a single primitive for header, body, and footer cells — it auto-detects
14
+ which one it is (and whether to render `<th>` or `<td>`) from its ancestor
15
+ (`Table.Head`/`Table.Body`/`Table.Footer`). Recursica's `Table.Cell` mirrors that instead of
16
+ splitting into per-context components (see the Forge reference-implementation review,
17
+ 2026-08-22, and direction from Matt the same day: align with the underlying kit's own
18
+ components). Its props cover both concerns: `sorted` (header-only in practice) and `variant`
19
+ (body/footer). `sorted` has no effect on styling unless the cell also carries the header's
20
+ `data-sorted`-driven CSS (i.e. it's meaningless on a body/footer cell) — nothing prevents a
21
+ caller from passing it there by mistake; that's an accepted tradeoff of unifying the three
22
+ contexts into one component, same tradeoff MUI's own `TableCell` makes.
23
+
24
+ ## Every sub-component now attaches its own CSS module class
25
+
26
+ Before this change, `Table.Body`/`Table.Cell`/`Table.Container`/`Table.Head`/`Table.Row`/
27
+ `Table.Footer`/`Table.SortLabel` attached no Recursica class at all — only the root `Table` did.
28
+ `Table.Cell` and `Table.Row` now attach `.cell`/`.row` (needed so the CSS in `Table.module.css`
29
+ can select on state, e.g. `.cell[data-disabled="true"]`, instead of bare `td`/`tr` tag
30
+ selectors). `Table.SortLabel` attaches `.sortLabel` (see below). `Body`/`Container`/`Head`/
31
+ `Footer` were left alone — the CSS only needs to reach them structurally (`thead`/`tbody`/
32
+ `tfoot`), so they don't need a class of their own for this to work.
33
+
34
+ ## Sort icon comes from `Table.SortLabel`, not `Table.Cell`
35
+
36
+ MUI already has a sortable-header primitive — `TableSortLabel` — that renders its own
37
+ arrow icon and flips it based on `direction`/`active`. `Table.Cell` only sets the sorted-state
38
+ _styling_ (`data-sorted` → background/text/font tokens, matching `mantine-adapter`'s `Table.Th`);
39
+ the icon itself is `Table.SortLabel`'s job, composed by the consumer the same way MUI's own docs
40
+ demonstrate (`<Table.Cell sorted><Table.SortLabel active direction="asc">Name</Table.SortLabel></Table.Cell>`).
41
+ `Table.module.css` re-colors the icon to `inherit` (overriding MUI's default sort-label color)
42
+ and sizes/spaces it with the same `table-header` icon-size/label-sort-gap tokens
43
+ `mantine-adapter` uses for its own inline chevron — see that adapter's `Table.icons.tsx` for the
44
+ Mantine-side equivalent. This is intentionally asymmetric between the two adapters: Mantine has
45
+ no equivalent primitive, so its `Table.Th` renders the chevron itself.
46
+
47
+ ## MUI's own `.Mui-selected` background is reset
48
+
49
+ `Table.Row`'s `selected` prop passes straight through to MUI's native `TableRow.selected` (kept
50
+ for the `aria-selected`/`Mui-selected` semantics it drives) _and_ sets `data-selected`. Found via
51
+ screenshot comparison against `mantine-adapter` (2026-08-22): MUI's own default `.Mui-selected`
52
+ row background was compositing underneath our token-driven `.cell` background (semi-transparent
53
+ `color-mix` over MUI's own tint instead of over nothing), producing a visibly different color
54
+ than Mantine's. `Table.module.css` resets `.row:global(.Mui-selected)` to
55
+ `background-color: transparent` so only the Recursica token color shows — same
56
+ override-the-library's-own-styling rule the canonical guide documents for hover.
57
+
58
+ ## Currency alignment on header/footer reuses the table-cell token
59
+
60
+ `--recursica_ui-kit_components_table-cell_properties_currency-style_text-align` (`right`) is the
61
+ only currency-style text-align token the UI Kit exports — there's no
62
+ `table-header_properties_currency-style_*` block at all, and the
63
+ `table-footer_properties_currency-style_*` block skips `text-align` specifically.
64
+ `Table.module.css` reuses the table-cell token for both `thead .cell[data-currency="true"]` and
65
+ `tfoot .cell[data-currency="true"]` so header/footer currency cells stay right-aligned in step
66
+ with the body. `Table.Cell` already threads `variant`/`data-currency` through regardless of
67
+ context, so no `Table.tsx` change was needed here (unlike `mantine-adapter`'s `Table.Th`).
68
+
69
+ ## Selectable rows (checkboxes)
70
+
71
+ See `mantine-adapter`'s `TABLE_IMPLEMENTATION_NOTES.md` — confirmed 2026-08-22 that neither
72
+ Mantine's nor MUI's base `Table` has a built-in checkbox-selection feature (MUI's only comes via
73
+ `@mui/x-data-grid`, not installed here). `Table.Row`'s `selected` prop maps directly onto MUI's
74
+ own native `TableRow.selected` (which already sets `aria-selected`/`Mui-selected`) plus a
75
+ `data-selected` attribute so our CSS selectors stay identical in shape to `mantine-adapter`'s.
@@ -0,0 +1,462 @@
1
+ /* Brand-layer exemptions (recursica-allow-brand) — see recursica-token-analyzer README.md.
2
+ * Global hover state tokens (recursica_variables_scoped.css header, 'Hover & Focus states' —
3
+ * implicit rule for every interactive element; components must not define their own
4
+ * per-component hover treatment).
5
+ * recursica-allow-brand: --recursica_brand_states_hover_color
6
+ * recursica-allow-brand: --recursica_brand_states_hover_opacity
7
+ */
8
+
9
+ /* HARDCODED VALUES:
10
+ * - border-collapse: separate; border-spacing: 0; (To support custom border-radius on table elements)
11
+ * - overflow: hidden; (To prevent content from bleeding outside the rounded table border)
12
+ */
13
+
14
+ .root {
15
+ border-collapse: separate;
16
+ border-spacing: 0;
17
+ border-radius: var(
18
+ --recursica_ui-kit_components_table_properties_border-radius
19
+ );
20
+ border: var(--recursica_ui-kit_components_table_properties_border-size) solid
21
+ var(--recursica_ui-kit_components_table_properties_colors_border-color);
22
+ overflow: hidden;
23
+ }
24
+
25
+ /* ==========================================
26
+ 1. General Cell Dividers & Padding Defaults
27
+ ========================================== */
28
+
29
+ .root .cell {
30
+ padding: var(--recursica_ui-kit_components_table_properties_row-padding)
31
+ var(--recursica_ui-kit_components_table_properties_padding);
32
+ border-bottom: var(
33
+ --recursica_ui-kit_components_table_properties_row-divider-size
34
+ )
35
+ solid
36
+ var(--recursica_ui-kit_components_table_properties_colors_row-divider-color);
37
+ }
38
+
39
+ .root .cell + .cell {
40
+ border-left: var(
41
+ --recursica_ui-kit_components_table_properties_column-divider-size
42
+ )
43
+ solid
44
+ var(
45
+ --recursica_ui-kit_components_table_properties_colors_column-divider-color
46
+ );
47
+ }
48
+
49
+ /* ==========================================
50
+ 2. Row Highlighting & Selection Styles
51
+ ========================================== */
52
+
53
+ /* Striped rows */
54
+ .root tbody .row:nth-of-type(even) .cell {
55
+ background-color: color-mix(
56
+ in srgb,
57
+ var(--recursica_ui-kit_components_table_properties_colors_striped-color)
58
+ calc(
59
+ var(
60
+ --recursica_ui-kit_components_table_properties_opacities_striped-opacity
61
+ ) *
62
+ 100%
63
+ ),
64
+ transparent
65
+ );
66
+ }
67
+
68
+ /* MUI's TableRow applies its own default background when `selected` — reset it so only the
69
+ token-driven .cell background below shows (kept as a genuine `<tr selected>` for the
70
+ aria-selected/Mui-selected semantics MUI derives from it, just not its default coloring). */
71
+ .root tbody .row:global(.Mui-selected) {
72
+ background-color: transparent;
73
+ }
74
+
75
+ /* Selected rows */
76
+ .root tbody .row[data-selected="true"] .cell {
77
+ background-color: color-mix(
78
+ in srgb,
79
+ var(--recursica_ui-kit_components_table_properties_colors_selected-color)
80
+ calc(
81
+ var(
82
+ --recursica_ui-kit_components_table_properties_opacities_selected-opacity
83
+ ) *
84
+ 100%
85
+ ),
86
+ transparent
87
+ );
88
+ }
89
+
90
+ /* Hover rows */
91
+ /* Table's dedicated highlight-on-hover token was removed from the schema; hover feedback now
92
+ uses the generic cross-component overlay tokens instead. */
93
+ .root tbody .row:hover .cell {
94
+ background-color: color-mix(
95
+ in srgb,
96
+ var(--recursica_brand_states_hover_color)
97
+ calc(var(--recursica_brand_states_hover_opacity) * 100%),
98
+ transparent
99
+ );
100
+ }
101
+
102
+ /* ==========================================
103
+ 3. Table Headers (th)
104
+ ========================================== */
105
+
106
+ .root thead .cell {
107
+ background-color: var(
108
+ --recursica_ui-kit_components_table-header_properties_colors_cell-color
109
+ );
110
+ color: var(
111
+ --recursica_ui-kit_components_table-header_properties_colors_text-color
112
+ );
113
+ padding: var(
114
+ --recursica_ui-kit_components_table-header_properties_padding-vertical
115
+ )
116
+ var(
117
+ --recursica_ui-kit_components_table-header_properties_padding-horizontal
118
+ );
119
+ margin-top: var(
120
+ --recursica_ui-kit_components_table-header_properties_vertical-margin
121
+ );
122
+ margin-bottom: var(
123
+ --recursica_ui-kit_components_table-header_properties_vertical-margin
124
+ );
125
+ border-bottom: var(
126
+ --recursica_ui-kit_components_table-header_properties_horizontal-divider-size
127
+ )
128
+ solid
129
+ var(
130
+ --recursica_ui-kit_components_table-header_properties_colors_horizontal-divider-color
131
+ );
132
+
133
+ /* Unsorted text style by default */
134
+ font-family: var(
135
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_font-family
136
+ );
137
+ font-size: var(
138
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_font-size
139
+ );
140
+ font-style: var(
141
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_font-style
142
+ );
143
+ font-weight: var(
144
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_font-weight
145
+ );
146
+ letter-spacing: var(
147
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_letter-spacing
148
+ );
149
+ line-height: var(
150
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_line-height
151
+ );
152
+ text-decoration: var(
153
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_text-decoration
154
+ );
155
+ text-transform: var(
156
+ --recursica_ui-kit_components_table-header_properties_unsorted-text-style_text-transform
157
+ );
158
+ }
159
+
160
+ .root thead .cell + .cell {
161
+ border-left: var(
162
+ --recursica_ui-kit_components_table-header_properties_vertical-divider-size
163
+ )
164
+ solid
165
+ var(
166
+ --recursica_ui-kit_components_table-header_properties_colors_vertical-divider-color
167
+ );
168
+ }
169
+
170
+ /* Unsorted specific state overrides */
171
+ .root thead .cell:not([data-sorted="true"]) {
172
+ background-color: var(
173
+ --recursica_ui-kit_components_table-header_properties_colors_unsorted-cell-color
174
+ );
175
+ color: var(
176
+ --recursica_ui-kit_components_table-header_properties_colors_unsorted-text-color
177
+ );
178
+ }
179
+
180
+ /* Sorted specific state overrides */
181
+ .root thead .cell[data-sorted="true"] {
182
+ background-color: var(
183
+ --recursica_ui-kit_components_table-header_properties_colors_sorted-cell-color
184
+ );
185
+ color: var(
186
+ --recursica_ui-kit_components_table-header_properties_colors_sorted-text-color
187
+ );
188
+
189
+ font-family: var(
190
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_font-family
191
+ );
192
+ font-size: var(
193
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_font-size
194
+ );
195
+ font-style: var(
196
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_font-style
197
+ );
198
+ font-weight: var(
199
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_font-weight
200
+ );
201
+ letter-spacing: var(
202
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_letter-spacing
203
+ );
204
+ line-height: var(
205
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_line-height
206
+ );
207
+ text-decoration: var(
208
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_text-decoration
209
+ );
210
+ text-transform: var(
211
+ --recursica_ui-kit_components_table-header_properties_sorted-text-style_text-transform
212
+ );
213
+ }
214
+
215
+ /* Disabled Header */
216
+ .root thead .cell[data-disabled="true"] {
217
+ background-color: var(
218
+ --recursica_ui-kit_components_table-header_variants_states_disabled_properties_colors_cell-color
219
+ );
220
+ color: var(
221
+ --recursica_ui-kit_components_table-header_variants_states_disabled_properties_colors_text-color
222
+ );
223
+ opacity: var(
224
+ --recursica_ui-kit_components_table-header_variants_states_disabled_properties_opacity
225
+ );
226
+ }
227
+
228
+ /* Currency column header alignment override. No dedicated table-header currency-style token
229
+ exists yet, so this reuses the table-cell currency-style text-align token to match the
230
+ currency value cells below it. */
231
+ .root thead .cell[data-currency="true"] {
232
+ text-align: var(
233
+ --recursica_ui-kit_components_table-cell_properties_currency-style_text-align
234
+ );
235
+ }
236
+
237
+ /* Sort label — MUI's TableSortLabel renders its own arrow icon; re-color it to inherit the
238
+ cell's own text color (instead of MUI's default sort-label color) and size/space it with the
239
+ same tokens Mantine's own inline chevron uses. */
240
+ .sortLabel {
241
+ color: inherit;
242
+ }
243
+
244
+ .sortLabel:global(.Mui-active) {
245
+ color: inherit;
246
+ }
247
+
248
+ .sortLabel :global(.MuiTableSortLabel-icon) {
249
+ width: var(--recursica_ui-kit_components_table-header_properties_icon-size);
250
+ height: var(--recursica_ui-kit_components_table-header_properties_icon-size);
251
+ margin-left: var(
252
+ --recursica_ui-kit_components_table-header_properties_label-sort-gap
253
+ );
254
+ color: inherit;
255
+ }
256
+
257
+ /* ==========================================
258
+ 4. Table Cells (td)
259
+ ========================================== */
260
+
261
+ .root tbody .cell {
262
+ background-color: var(
263
+ --recursica_ui-kit_components_table-cell_properties_colors_cell-color
264
+ );
265
+ color: var(
266
+ --recursica_ui-kit_components_table-cell_properties_colors_text-color
267
+ );
268
+ padding: var(
269
+ --recursica_ui-kit_components_table-cell_properties_padding-vertical
270
+ )
271
+ var(--recursica_ui-kit_components_table-cell_properties_padding-horizontal);
272
+ max-width: var(--recursica_ui-kit_components_table-cell_properties_max-width);
273
+
274
+ /* Standard text style */
275
+ font-family: var(
276
+ --recursica_ui-kit_components_table-cell_properties_text-style_font-family
277
+ );
278
+ font-size: var(
279
+ --recursica_ui-kit_components_table-cell_properties_text-style_font-size
280
+ );
281
+ font-style: var(
282
+ --recursica_ui-kit_components_table-cell_properties_text-style_font-style
283
+ );
284
+ font-weight: var(
285
+ --recursica_ui-kit_components_table-cell_properties_text-style_font-weight
286
+ );
287
+ letter-spacing: var(
288
+ --recursica_ui-kit_components_table-cell_properties_text-style_letter-spacing
289
+ );
290
+ line-height: var(
291
+ --recursica_ui-kit_components_table-cell_properties_text-style_line-height
292
+ );
293
+ text-align: var(
294
+ --recursica_ui-kit_components_table-cell_properties_text-style_text-align
295
+ );
296
+ text-decoration: var(
297
+ --recursica_ui-kit_components_table-cell_properties_text-style_text-decoration
298
+ );
299
+ text-transform: var(
300
+ --recursica_ui-kit_components_table-cell_properties_text-style_text-transform
301
+ );
302
+ }
303
+
304
+ /* Currency formatted cell layout override */
305
+ .root tbody .cell[data-currency="true"] {
306
+ font-family: var(
307
+ --recursica_ui-kit_components_table-cell_properties_currency-style_font-family
308
+ );
309
+ font-size: var(
310
+ --recursica_ui-kit_components_table-cell_properties_currency-style_font-size
311
+ );
312
+ font-style: var(
313
+ --recursica_ui-kit_components_table-cell_properties_currency-style_font-style
314
+ );
315
+ font-weight: var(
316
+ --recursica_ui-kit_components_table-cell_properties_currency-style_font-weight
317
+ );
318
+ letter-spacing: var(
319
+ --recursica_ui-kit_components_table-cell_properties_currency-style_letter-spacing
320
+ );
321
+ line-height: var(
322
+ --recursica_ui-kit_components_table-cell_properties_currency-style_line-height
323
+ );
324
+ text-align: var(
325
+ --recursica_ui-kit_components_table-cell_properties_currency-style_text-align
326
+ );
327
+ text-decoration: var(
328
+ --recursica_ui-kit_components_table-cell_properties_currency-style_text-decoration
329
+ );
330
+ text-transform: var(
331
+ --recursica_ui-kit_components_table-cell_properties_currency-style_text-transform
332
+ );
333
+ }
334
+
335
+ /* Disabled Cells */
336
+ .root tbody .row[data-disabled="true"] .cell,
337
+ .root tbody .cell[data-disabled="true"] {
338
+ background-color: var(
339
+ --recursica_ui-kit_components_table-cell_variants_states_disabled_properties_colors_cell-color
340
+ );
341
+ color: var(
342
+ --recursica_ui-kit_components_table-cell_variants_states_disabled_properties_colors_text-color
343
+ );
344
+ opacity: var(
345
+ --recursica_ui-kit_components_table-cell_variants_states_disabled_properties_opacity
346
+ );
347
+ }
348
+
349
+ /* ==========================================
350
+ 5. Table Footers (tfoot td)
351
+ ========================================== */
352
+
353
+ .root tfoot .cell {
354
+ background-color: var(
355
+ --recursica_ui-kit_components_table-footer_properties_colors_cell-color
356
+ );
357
+ color: var(
358
+ --recursica_ui-kit_components_table-footer_properties_colors_text-color
359
+ );
360
+ padding: var(
361
+ --recursica_ui-kit_components_table-footer_properties_padding-vertical
362
+ )
363
+ var(
364
+ --recursica_ui-kit_components_table-footer_properties_padding-horizontal
365
+ );
366
+ margin-top: var(
367
+ --recursica_ui-kit_components_table-footer_properties_vertical-margin
368
+ );
369
+ margin-bottom: var(
370
+ --recursica_ui-kit_components_table-footer_properties_vertical-margin
371
+ );
372
+ border-top: var(
373
+ --recursica_ui-kit_components_table-footer_properties_horizontal-divider-size
374
+ )
375
+ solid
376
+ var(
377
+ --recursica_ui-kit_components_table-footer_properties_colors_horizontal-divider-color
378
+ );
379
+
380
+ /* Footer typography style */
381
+ font-family: var(
382
+ --recursica_ui-kit_components_table-footer_properties_text-style_font-family
383
+ );
384
+ font-size: var(
385
+ --recursica_ui-kit_components_table-footer_properties_text-style_font-size
386
+ );
387
+ font-style: var(
388
+ --recursica_ui-kit_components_table-footer_properties_text-style_font-style
389
+ );
390
+ font-weight: var(
391
+ --recursica_ui-kit_components_table-footer_properties_text-style_font-weight
392
+ );
393
+ letter-spacing: var(
394
+ --recursica_ui-kit_components_table-footer_properties_text-style_letter-spacing
395
+ );
396
+ line-height: var(
397
+ --recursica_ui-kit_components_table-footer_properties_text-style_line-height
398
+ );
399
+ text-decoration: var(
400
+ --recursica_ui-kit_components_table-footer_properties_text-style_text-decoration
401
+ );
402
+ text-transform: var(
403
+ --recursica_ui-kit_components_table-footer_properties_text-style_text-transform
404
+ );
405
+ }
406
+
407
+ .root tfoot .cell + .cell {
408
+ border-left: var(
409
+ --recursica_ui-kit_components_table-footer_properties_vertical-divider-size
410
+ )
411
+ solid
412
+ var(
413
+ --recursica_ui-kit_components_table-footer_properties_colors_vertical-divider-color
414
+ );
415
+ }
416
+
417
+ /* Currency formatted footer cell layout override */
418
+ .root tfoot .cell[data-currency="true"] {
419
+ font-family: var(
420
+ --recursica_ui-kit_components_table-footer_properties_currency-style_font-family
421
+ );
422
+ font-size: var(
423
+ --recursica_ui-kit_components_table-footer_properties_currency-style_font-size
424
+ );
425
+ font-style: var(
426
+ --recursica_ui-kit_components_table-footer_properties_currency-style_font-style
427
+ );
428
+ font-weight: var(
429
+ --recursica_ui-kit_components_table-footer_properties_currency-style_font-weight
430
+ );
431
+ letter-spacing: var(
432
+ --recursica_ui-kit_components_table-footer_properties_currency-style_letter-spacing
433
+ );
434
+ line-height: var(
435
+ --recursica_ui-kit_components_table-footer_properties_currency-style_line-height
436
+ );
437
+ /* No table-footer currency-style text-align token exists yet; reuse the table-cell one so
438
+ footer currency cells match the body's right alignment. */
439
+ text-align: var(
440
+ --recursica_ui-kit_components_table-cell_properties_currency-style_text-align
441
+ );
442
+ text-decoration: var(
443
+ --recursica_ui-kit_components_table-footer_properties_currency-style_text-decoration
444
+ );
445
+ text-transform: var(
446
+ --recursica_ui-kit_components_table-footer_properties_currency-style_text-transform
447
+ );
448
+ }
449
+
450
+ /* Disabled Footer Row/Cells */
451
+ .root tfoot .row[data-disabled="true"] .cell,
452
+ .root tfoot .cell[data-disabled="true"] {
453
+ background-color: var(
454
+ --recursica_ui-kit_components_table-footer_variants_states_disabled_properties_colors_cell-color
455
+ );
456
+ color: var(
457
+ --recursica_ui-kit_components_table-footer_variants_states_disabled_properties_colors_text-color
458
+ );
459
+ opacity: var(
460
+ --recursica_ui-kit_components_table-footer_variants_states_disabled_properties_opacity
461
+ );
462
+ }
@@ -0,0 +1,154 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Table } from "./Table";
3
+
4
+ const meta: Meta<typeof Table> = {
5
+ title: "UI-Kit/Table",
6
+ component: Table,
7
+ tags: ["autodocs"],
8
+ };
9
+
10
+ export default meta;
11
+
12
+ type Story = StoryObj<typeof Table>;
13
+
14
+ const elements = [
15
+ { position: 6, mass: 12.011, symbol: "C", name: "Carbon" },
16
+ { position: 7, mass: 14.007, symbol: "N", name: "Nitrogen" },
17
+ { position: 8, mass: 15.999, symbol: "O", name: "Oxygen" },
18
+ { position: 9, mass: 18.998, symbol: "F", name: "Fluorine" },
19
+ { position: 10, mass: 20.18, symbol: "Ne", name: "Neon" },
20
+ ];
21
+
22
+ export const Default: Story = {
23
+ render: () => {
24
+ const rows = elements.map((element) => (
25
+ <Table.Row key={element.name}>
26
+ <Table.Cell>{element.position}</Table.Cell>
27
+ <Table.Cell>{element.name}</Table.Cell>
28
+ <Table.Cell>{element.symbol}</Table.Cell>
29
+ <Table.Cell>{element.mass}</Table.Cell>
30
+ </Table.Row>
31
+ ));
32
+
33
+ return (
34
+ <Table.Container>
35
+ <Table>
36
+ <Table.Head>
37
+ <Table.Row>
38
+ <Table.Cell>Element position</Table.Cell>
39
+ <Table.Cell>Element name</Table.Cell>
40
+ <Table.Cell>Symbol</Table.Cell>
41
+ <Table.Cell>Atomic mass</Table.Cell>
42
+ </Table.Row>
43
+ </Table.Head>
44
+ <Table.Body>{rows}</Table.Body>
45
+ </Table>
46
+ </Table.Container>
47
+ );
48
+ },
49
+ };
50
+
51
+ export const SortedColumn: Story = {
52
+ render: () => {
53
+ const sorted = [...elements].sort((a, b) => a.mass - b.mass);
54
+ const rows = sorted.map((element) => (
55
+ <Table.Row key={element.name}>
56
+ <Table.Cell>{element.position}</Table.Cell>
57
+ <Table.Cell>{element.name}</Table.Cell>
58
+ <Table.Cell>{element.symbol}</Table.Cell>
59
+ <Table.Cell>{element.mass}</Table.Cell>
60
+ </Table.Row>
61
+ ));
62
+
63
+ return (
64
+ <Table.Container>
65
+ <Table>
66
+ <Table.Head>
67
+ <Table.Row>
68
+ <Table.Cell>Element position</Table.Cell>
69
+ <Table.Cell>Element name</Table.Cell>
70
+ <Table.Cell>Symbol</Table.Cell>
71
+ <Table.Cell sorted="asc">
72
+ <Table.SortLabel active direction="asc">
73
+ Atomic mass
74
+ </Table.SortLabel>
75
+ </Table.Cell>
76
+ </Table.Row>
77
+ </Table.Head>
78
+ <Table.Body>{rows}</Table.Body>
79
+ </Table>
80
+ </Table.Container>
81
+ );
82
+ },
83
+ };
84
+
85
+ export const SelectedAndDisabledRows: Story = {
86
+ render: () => (
87
+ <Table.Container>
88
+ <Table>
89
+ <Table.Head>
90
+ <Table.Row>
91
+ <Table.Cell>Element position</Table.Cell>
92
+ <Table.Cell>Element name</Table.Cell>
93
+ <Table.Cell>Symbol</Table.Cell>
94
+ <Table.Cell>Atomic mass</Table.Cell>
95
+ </Table.Row>
96
+ </Table.Head>
97
+ <Table.Body>
98
+ {elements.map((element, index) => (
99
+ <Table.Row
100
+ key={element.name}
101
+ selected={index === 0}
102
+ disabled={index === elements.length - 1}
103
+ >
104
+ <Table.Cell>{element.position}</Table.Cell>
105
+ <Table.Cell>{element.name}</Table.Cell>
106
+ <Table.Cell>{element.symbol}</Table.Cell>
107
+ <Table.Cell>{element.mass}</Table.Cell>
108
+ </Table.Row>
109
+ ))}
110
+ </Table.Body>
111
+ </Table>
112
+ </Table.Container>
113
+ ),
114
+ };
115
+
116
+ export const CurrencyColumnWithFooter: Story = {
117
+ render: () => {
118
+ const prices = [
119
+ { item: "Widget", price: 19.99 },
120
+ { item: "Gadget", price: 49.5 },
121
+ { item: "Gizmo", price: 9.25 },
122
+ ];
123
+ const total = prices.reduce((sum, row) => sum + row.price, 0);
124
+
125
+ return (
126
+ <Table.Container>
127
+ <Table>
128
+ <Table.Head>
129
+ <Table.Row>
130
+ <Table.Cell>Item</Table.Cell>
131
+ <Table.Cell variant="currency">Price</Table.Cell>
132
+ </Table.Row>
133
+ </Table.Head>
134
+ <Table.Body>
135
+ {prices.map((row) => (
136
+ <Table.Row key={row.item}>
137
+ <Table.Cell>{row.item}</Table.Cell>
138
+ <Table.Cell variant="currency">
139
+ ${row.price.toFixed(2)}
140
+ </Table.Cell>
141
+ </Table.Row>
142
+ ))}
143
+ </Table.Body>
144
+ <Table.Footer>
145
+ <Table.Row>
146
+ <Table.Cell>Total</Table.Cell>
147
+ <Table.Cell variant="currency">${total.toFixed(2)}</Table.Cell>
148
+ </Table.Row>
149
+ </Table.Footer>
150
+ </Table>
151
+ </Table.Container>
152
+ );
153
+ },
154
+ };
@@ -0,0 +1 @@
1
+ // Placeholder for future Table component tests. Add tests here if/when needed.