@recursica/adapter-mantine-v8 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 (362) hide show
  1. package/.storybook/commonArgTypes.ts +148 -0
  2. package/ARCHITECTURE.md +18 -0
  3. package/CHANGELOG.md +688 -0
  4. package/LICENSE +21 -0
  5. package/OVERSTYLING.md +56 -0
  6. package/README.md +70 -0
  7. package/SETUP.md +93 -0
  8. package/USAGE.md +57 -0
  9. package/dist/adapter-mantine-v8.cjs +12 -0
  10. package/dist/adapter-mantine-v8.cjs.map +1 -0
  11. package/dist/adapter-mantine-v8.css +1 -0
  12. package/dist/adapter-mantine-v8.js +5759 -0
  13. package/dist/adapter-mantine-v8.js.map +1 -0
  14. package/dist/index.d.ts +2095 -0
  15. package/dist/test.html +1 -0
  16. package/dist/vite.svg +1 -0
  17. package/docs/PHILOSOPHY.md +39 -0
  18. package/llms.txt +74 -0
  19. package/package.json +131 -0
  20. package/recursica_brand.json +2677 -0
  21. package/recursica_tokens.json +799 -0
  22. package/recursica_ui-kit.json +14981 -0
  23. package/recursica_variables_scoped.css +30489 -0
  24. package/src/GlobalExemptions.modules.css +7 -0
  25. package/src/Introduction.stories.tsx +154 -0
  26. package/src/OverStyling.tsx +79 -0
  27. package/src/Version.tsx +44 -0
  28. package/src/components/Accordion/ACCORDION_IMPLEMENTATION_NOTES.md +72 -0
  29. package/src/components/Accordion/Accordion.module.css +367 -0
  30. package/src/components/Accordion/Accordion.stories.tsx +189 -0
  31. package/src/components/Accordion/Accordion.test.tsx +1 -0
  32. package/src/components/Accordion/Accordion.tsx +220 -0
  33. package/src/components/Accordion/USAGE.md +51 -0
  34. package/src/components/Accordion/index.ts +1 -0
  35. package/src/components/AssistiveElement/ASSISTIVEELEMENT_IMPLEMENTATION_NOTES.md +45 -0
  36. package/src/components/AssistiveElement/AssistiveElement.module.css +111 -0
  37. package/src/components/AssistiveElement/AssistiveElement.stories.tsx +68 -0
  38. package/src/components/AssistiveElement/AssistiveElement.test.tsx +1 -0
  39. package/src/components/AssistiveElement/AssistiveElement.tsx +93 -0
  40. package/src/components/AssistiveElement/USAGE.md +36 -0
  41. package/src/components/AutoComplete/AUTOCOMPLETE_IMPLEMENTATION_NOTES.md +42 -0
  42. package/src/components/AutoComplete/AutoComplete.module.css +430 -0
  43. package/src/components/AutoComplete/AutoComplete.stories.tsx +336 -0
  44. package/src/components/AutoComplete/AutoComplete.test.tsx +1 -0
  45. package/src/components/AutoComplete/AutoComplete.tsx +179 -0
  46. package/src/components/AutoComplete/USAGE.md +80 -0
  47. package/src/components/Avatar/AVATAR_IMPLEMENTATION_NOTES.md +34 -0
  48. package/src/components/Avatar/Avatar.module.css +336 -0
  49. package/src/components/Avatar/Avatar.stories.tsx +92 -0
  50. package/src/components/Avatar/Avatar.test.tsx +1 -0
  51. package/src/components/Avatar/Avatar.tsx +108 -0
  52. package/src/components/Avatar/USAGE.md +38 -0
  53. package/src/components/Avatar/index.ts +1 -0
  54. package/src/components/Badge/BADGE_IMPLEMENTATION_NOTES.md +18 -0
  55. package/src/components/Badge/Badge.module.css +127 -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 +64 -0
  59. package/src/components/Badge/USAGE.md +56 -0
  60. package/src/components/Breadcrumb/BREADCRUMB_IMPLEMENTATION_NOTES.md +47 -0
  61. package/src/components/Breadcrumb/Breadcrumb.module.css +48 -0
  62. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +114 -0
  63. package/src/components/Breadcrumb/Breadcrumb.test.tsx +1 -0
  64. package/src/components/Breadcrumb/Breadcrumb.tsx +85 -0
  65. package/src/components/Breadcrumb/USAGE.md +55 -0
  66. package/src/components/Breadcrumb/markCurrentPageItem.test.ts +49 -0
  67. package/src/components/Button/Button.module.css +446 -0
  68. package/src/components/Button/Button.stories.tsx +196 -0
  69. package/src/components/Button/Button.styleIsolation.dom.test.tsx +98 -0
  70. package/src/components/Button/Button.tsx +184 -0
  71. package/src/components/Button/IMPLEMENTATION_NOTES.md +109 -0
  72. package/src/components/Button/USAGE.md +80 -0
  73. package/src/components/Button/index.ts +1 -0
  74. package/src/components/Card/CARD_IMPLEMENTATION_NOTES.md +17 -0
  75. package/src/components/Card/Card.module.css +119 -0
  76. package/src/components/Card/Card.stories.tsx +131 -0
  77. package/src/components/Card/Card.test.tsx +1 -0
  78. package/src/components/Card/Card.tsx +248 -0
  79. package/src/components/Card/USAGE.md +63 -0
  80. package/src/components/Checkbox/CHECKBOX_IMPLEMENTATION_NOTES.md +25 -0
  81. package/src/components/Checkbox/Checkbox.module.css +267 -0
  82. package/src/components/Checkbox/Checkbox.stories.tsx +97 -0
  83. package/src/components/Checkbox/Checkbox.test.tsx +1 -0
  84. package/src/components/Checkbox/Checkbox.tsx +151 -0
  85. package/src/components/Checkbox/CheckboxGroup.stories.tsx +139 -0
  86. package/src/components/Checkbox/CheckboxGroup.tsx +147 -0
  87. package/src/components/Checkbox/USAGE.md +48 -0
  88. package/src/components/Chip/CHIP_IMPLEMENTATION_NOTES.md +110 -0
  89. package/src/components/Chip/Chip.module.css +288 -0
  90. package/src/components/Chip/Chip.stories.tsx +128 -0
  91. package/src/components/Chip/Chip.test.tsx +1 -0
  92. package/src/components/Chip/Chip.tsx +157 -0
  93. package/src/components/Chip/USAGE.md +55 -0
  94. package/src/components/Container/CONTAINER_IMPLEMENTATION_NOTES.md +4 -0
  95. package/src/components/Container/Container.module.css +7 -0
  96. package/src/components/Container/Container.stories.tsx +118 -0
  97. package/src/components/Container/Container.test.tsx +1 -0
  98. package/src/components/Container/Container.tsx +69 -0
  99. package/src/components/Container/USAGE.md +47 -0
  100. package/src/components/DatePicker/DATEPICKER_IMPLEMENTATION_NOTES.md +31 -0
  101. package/src/components/DatePicker/DatePicker.icons.tsx +27 -0
  102. package/src/components/DatePicker/DatePicker.module.css +566 -0
  103. package/src/components/DatePicker/DatePicker.stories.tsx +158 -0
  104. package/src/components/DatePicker/DatePicker.test.tsx +1 -0
  105. package/src/components/DatePicker/DatePicker.tsx +218 -0
  106. package/src/components/DatePicker/USAGE.md +49 -0
  107. package/src/components/Dropdown/BareDropdown.tsx +97 -0
  108. package/src/components/Dropdown/DROPDOWN_IMPLEMENTATION_NOTES.md +12 -0
  109. package/src/components/Dropdown/Dropdown.module.css +477 -0
  110. package/src/components/Dropdown/Dropdown.stories.tsx +252 -0
  111. package/src/components/Dropdown/Dropdown.test.tsx +1 -0
  112. package/src/components/Dropdown/Dropdown.tsx +213 -0
  113. package/src/components/Dropdown/USAGE.md +69 -0
  114. package/src/components/FileInput/FILEINPUT_IMPLEMENTATION_NOTES.md +153 -0
  115. package/src/components/FileInput/FileInput.module.css +280 -0
  116. package/src/components/FileInput/FileInput.stories.tsx +313 -0
  117. package/src/components/FileInput/FileInput.test.tsx +1 -0
  118. package/src/components/FileInput/FileInput.tsx +417 -0
  119. package/src/components/FileInput/USAGE.md +145 -0
  120. package/src/components/FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md +244 -0
  121. package/src/components/FileUpload/FileUpload.module.css +205 -0
  122. package/src/components/FileUpload/FileUpload.stories.tsx +362 -0
  123. package/src/components/FileUpload/FileUpload.test.tsx +1 -0
  124. package/src/components/FileUpload/FileUpload.tsx +354 -0
  125. package/src/components/FileUpload/USAGE.md +199 -0
  126. package/src/components/Flex/FLEX_IMPLEMENTATION_NOTES.md +4 -0
  127. package/src/components/Flex/Flex.module.css +7 -0
  128. package/src/components/Flex/Flex.stories.tsx +128 -0
  129. package/src/components/Flex/Flex.test.tsx +1 -0
  130. package/src/components/Flex/Flex.tsx +75 -0
  131. package/src/components/Flex/USAGE.md +48 -0
  132. package/src/components/FormControlLayout/FormControlLayout.module.css +90 -0
  133. package/src/components/FormControlLayout/FormControlLayout.stories.tsx +118 -0
  134. package/src/components/FormControlLayout/FormControlLayout.test.tsx +1 -0
  135. package/src/components/FormControlLayout/FormControlLayout.tsx +74 -0
  136. package/src/components/FormControlLayout/USAGE.md +40 -0
  137. package/src/components/FormControlWrapper/FORMCONTROLWRAPPER_IMPLEMENTATION_NOTES.md +32 -0
  138. package/src/components/FormControlWrapper/FormControlWrapper.module.css +75 -0
  139. package/src/components/FormControlWrapper/FormControlWrapper.stories.tsx +129 -0
  140. package/src/components/FormControlWrapper/FormControlWrapper.test.tsx +1 -0
  141. package/src/components/FormControlWrapper/FormControlWrapper.tsx +151 -0
  142. package/src/components/FormControlWrapper/USAGE.md +47 -0
  143. package/src/components/Grid/GRID_IMPLEMENTATION_NOTES.md +18 -0
  144. package/src/components/Grid/Grid.module.css +11 -0
  145. package/src/components/Grid/Grid.stories.tsx +206 -0
  146. package/src/components/Grid/Grid.test.tsx +1 -0
  147. package/src/components/Grid/Grid.tsx +140 -0
  148. package/src/components/Grid/USAGE.md +47 -0
  149. package/src/components/Group/GROUP_IMPLEMENTATION_NOTES.md +4 -0
  150. package/src/components/Group/Group.module.css +7 -0
  151. package/src/components/Group/Group.stories.tsx +120 -0
  152. package/src/components/Group/Group.test.tsx +1 -0
  153. package/src/components/Group/Group.tsx +60 -0
  154. package/src/components/Group/USAGE.md +48 -0
  155. package/src/components/Heading/HEADING_IMPLEMENTATION_NOTES.md +18 -0
  156. package/src/components/Heading/Heading.module.css +13 -0
  157. package/src/components/Heading/Heading.stories.tsx +50 -0
  158. package/src/components/Heading/Heading.test.tsx +1 -0
  159. package/src/components/Heading/Heading.tsx +52 -0
  160. package/src/components/Heading/USAGE.md +36 -0
  161. package/src/components/HoverCard/HOVERCARD_IMPLEMENTATION_NOTES.md +77 -0
  162. package/src/components/HoverCard/HoverCard.module.css +90 -0
  163. package/src/components/HoverCard/HoverCard.stories.tsx +172 -0
  164. package/src/components/HoverCard/HoverCard.test.tsx +1 -0
  165. package/src/components/HoverCard/HoverCard.tsx +133 -0
  166. package/src/components/HoverCard/USAGE.md +52 -0
  167. package/src/components/Label/LABEL_IMPLEMENTATION_NOTES.md +48 -0
  168. package/src/components/Label/Label.module.css +141 -0
  169. package/src/components/Label/Label.stories.tsx +131 -0
  170. package/src/components/Label/Label.test.tsx +1 -0
  171. package/src/components/Label/Label.tsx +113 -0
  172. package/src/components/Label/USAGE.md +47 -0
  173. package/src/components/Label/index.ts +1 -0
  174. package/src/components/Layer/USAGE.md +54 -0
  175. package/src/components/Link/IMPLEMENTATION_NOTES.md +19 -0
  176. package/src/components/Link/Link.module.css +110 -0
  177. package/src/components/Link/Link.stories.tsx +58 -0
  178. package/src/components/Link/Link.test.tsx +1 -0
  179. package/src/components/Link/Link.tsx +67 -0
  180. package/src/components/Link/USAGE.md +56 -0
  181. package/src/components/Link/index.ts +1 -0
  182. package/src/components/Loader/LOADER_IMPLEMENTATION_NOTES.md +24 -0
  183. package/src/components/Loader/Loader.animate.dom.test.tsx +82 -0
  184. package/src/components/Loader/Loader.module.css +63 -0
  185. package/src/components/Loader/Loader.stories.tsx +123 -0
  186. package/src/components/Loader/Loader.test.tsx +1 -0
  187. package/src/components/Loader/Loader.tsx +69 -0
  188. package/src/components/Loader/USAGE.md +44 -0
  189. package/src/components/Menu/MENU_IMPLEMENTATION_NOTES.md +88 -0
  190. package/src/components/Menu/Menu.module.css +280 -0
  191. package/src/components/Menu/Menu.stories.tsx +371 -0
  192. package/src/components/Menu/Menu.test.tsx +1 -0
  193. package/src/components/Menu/Menu.tsx +373 -0
  194. package/src/components/Menu/USAGE.md +55 -0
  195. package/src/components/Modal/MODAL_IMPLEMENTATION_NOTES.md +32 -0
  196. package/src/components/Modal/Modal.module.css +302 -0
  197. package/src/components/Modal/Modal.stories.tsx +105 -0
  198. package/src/components/Modal/Modal.test.tsx +1 -0
  199. package/src/components/Modal/Modal.tsx +368 -0
  200. package/src/components/Modal/USAGE.md +58 -0
  201. package/src/components/Modal/index.ts +1 -0
  202. package/src/components/NumberInput/NUMBER_INPUT_IMPLEMENTATION_NOTES.md +24 -0
  203. package/src/components/NumberInput/NumberInput.module.css +302 -0
  204. package/src/components/NumberInput/NumberInput.stories.tsx +96 -0
  205. package/src/components/NumberInput/NumberInput.test.tsx +1 -0
  206. package/src/components/NumberInput/NumberInput.tsx +157 -0
  207. package/src/components/NumberInput/USAGE.md +52 -0
  208. package/src/components/Pagination/IMPLEMENTATION_NOTES.md +16 -0
  209. package/src/components/Pagination/Pagination.icons.tsx +66 -0
  210. package/src/components/Pagination/Pagination.module.css +188 -0
  211. package/src/components/Pagination/Pagination.stories.tsx +48 -0
  212. package/src/components/Pagination/Pagination.test.tsx +1 -0
  213. package/src/components/Pagination/Pagination.tsx +265 -0
  214. package/src/components/Pagination/USAGE.md +36 -0
  215. package/src/components/Pagination/index.ts +5 -0
  216. package/src/components/Panel/PANEL_IMPLEMENTATION_NOTES.md +116 -0
  217. package/src/components/Panel/Panel.module.css +209 -0
  218. package/src/components/Panel/Panel.stories.tsx +227 -0
  219. package/src/components/Panel/Panel.test.tsx +1 -0
  220. package/src/components/Panel/Panel.tsx +269 -0
  221. package/src/components/Panel/USAGE.md +56 -0
  222. package/src/components/Popover/IMPLEMENTATION_NOTES.md +77 -0
  223. package/src/components/Popover/Popover.module.css +86 -0
  224. package/src/components/Popover/Popover.stories.tsx +133 -0
  225. package/src/components/Popover/Popover.test.tsx +1 -0
  226. package/src/components/Popover/Popover.tsx +142 -0
  227. package/src/components/Popover/USAGE.md +61 -0
  228. package/src/components/Popover/index.ts +1 -0
  229. package/src/components/Radio/Radio.module.css +231 -0
  230. package/src/components/Radio/Radio.stories.tsx +93 -0
  231. package/src/components/Radio/Radio.test.tsx +1 -0
  232. package/src/components/Radio/Radio.tsx +168 -0
  233. package/src/components/Radio/RadioGroup.stories.tsx +117 -0
  234. package/src/components/Radio/RadioGroup.tsx +124 -0
  235. package/src/components/Radio/USAGE.md +36 -0
  236. package/src/components/ReadOnlyField/READ_ONLY_FIELD_IMPLEMENTATION_NOTES.md +15 -0
  237. package/src/components/ReadOnlyField/ReadOnlyBooleanField.tsx +21 -0
  238. package/src/components/ReadOnlyField/ReadOnlyField.module.css +54 -0
  239. package/src/components/ReadOnlyField/ReadOnlyField.stories.tsx +163 -0
  240. package/src/components/ReadOnlyField/ReadOnlyField.test.tsx +1 -0
  241. package/src/components/ReadOnlyField/ReadOnlyField.tsx +114 -0
  242. package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
  243. package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
  244. package/src/components/ReadOnlyField/USAGE.md +44 -0
  245. package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
  246. package/src/components/ReadOnlyField/index.ts +5 -0
  247. package/src/components/RecursicaThemeProvider/USAGE.md +60 -0
  248. package/src/components/SegmentedControl/IMPLEMENTATION_NOTES.md +25 -0
  249. package/src/components/SegmentedControl/SegmentedControl.module.css +185 -0
  250. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +106 -0
  251. package/src/components/SegmentedControl/SegmentedControl.test.tsx +1 -0
  252. package/src/components/SegmentedControl/SegmentedControl.tsx +110 -0
  253. package/src/components/SegmentedControl/USAGE.md +55 -0
  254. package/src/components/Slider/IMPLEMENTATION_NOTES.md +92 -0
  255. package/src/components/Slider/Slider.module.css +588 -0
  256. package/src/components/Slider/Slider.stories.tsx +282 -0
  257. package/src/components/Slider/Slider.test.tsx +1 -0
  258. package/src/components/Slider/Slider.tsx +391 -0
  259. package/src/components/Slider/USAGE.md +56 -0
  260. package/src/components/Stack/STACK_IMPLEMENTATION_NOTES.md +4 -0
  261. package/src/components/Stack/Stack.module.css +7 -0
  262. package/src/components/Stack/Stack.stories.tsx +108 -0
  263. package/src/components/Stack/Stack.test.tsx +1 -0
  264. package/src/components/Stack/Stack.tsx +62 -0
  265. package/src/components/Stack/USAGE.md +48 -0
  266. package/src/components/Stepper/IMPLEMENTATION_NOTES.md +28 -0
  267. package/src/components/Stepper/Stepper.module.css +404 -0
  268. package/src/components/Stepper/Stepper.stories.tsx +148 -0
  269. package/src/components/Stepper/Stepper.test.tsx +1 -0
  270. package/src/components/Stepper/Stepper.tsx +93 -0
  271. package/src/components/Stepper/USAGE.md +41 -0
  272. package/src/components/Switch/SWITCH_IMPLEMENTATION_NOTES.md +64 -0
  273. package/src/components/Switch/Switch.module.css +279 -0
  274. package/src/components/Switch/Switch.stories.tsx +114 -0
  275. package/src/components/Switch/Switch.test.tsx +1 -0
  276. package/src/components/Switch/Switch.tsx +177 -0
  277. package/src/components/Switch/SwitchGroup.stories.tsx +132 -0
  278. package/src/components/Switch/SwitchGroup.tsx +127 -0
  279. package/src/components/Switch/USAGE.md +42 -0
  280. package/src/components/Table/TABLE_IMPLEMENTATION_NOTES.md +78 -0
  281. package/src/components/Table/Table.icons.tsx +40 -0
  282. package/src/components/Table/Table.module.css +444 -0
  283. package/src/components/Table/Table.stories.tsx +140 -0
  284. package/src/components/Table/Table.test.tsx +1 -0
  285. package/src/components/Table/Table.tsx +243 -0
  286. package/src/components/Table/USAGE.md +78 -0
  287. package/src/components/Tabs/IMPLEMENTATION_NOTES.md +27 -0
  288. package/src/components/Tabs/Tabs.module.css +591 -0
  289. package/src/components/Tabs/Tabs.stories.tsx +154 -0
  290. package/src/components/Tabs/Tabs.test.tsx +1 -0
  291. package/src/components/Tabs/Tabs.tsx +114 -0
  292. package/src/components/Tabs/USAGE.md +45 -0
  293. package/src/components/Text/TEXT_IMPLEMENTATION_NOTES.md +12 -0
  294. package/src/components/Text/Text.module.css +13 -0
  295. package/src/components/Text/Text.stories.tsx +75 -0
  296. package/src/components/Text/Text.test.tsx +1 -0
  297. package/src/components/Text/Text.tsx +53 -0
  298. package/src/components/Text/USAGE.md +40 -0
  299. package/src/components/TextArea/TEXTAREA_IMPLEMENTATION_NOTES.md +7 -0
  300. package/src/components/TextArea/TextArea.module.css +183 -0
  301. package/src/components/TextArea/TextArea.stories.tsx +94 -0
  302. package/src/components/TextArea/TextArea.test.tsx +1 -0
  303. package/src/components/TextArea/TextArea.tsx +137 -0
  304. package/src/components/TextArea/USAGE.md +48 -0
  305. package/src/components/TextField/TEXTFIELD_IMPLEMENTATION_NOTES.md +19 -0
  306. package/src/components/TextField/TextField.module.css +264 -0
  307. package/src/components/TextField/TextField.stories.tsx +162 -0
  308. package/src/components/TextField/TextField.test.tsx +1 -0
  309. package/src/components/TextField/TextField.tsx +139 -0
  310. package/src/components/TextField/USAGE.md +44 -0
  311. package/src/components/TimePicker/TIMEPICKER_IMPLEMENTATION_NOTES.md +119 -0
  312. package/src/components/TimePicker/TimePicker.module.css +291 -0
  313. package/src/components/TimePicker/TimePicker.stories.tsx +141 -0
  314. package/src/components/TimePicker/TimePicker.test.tsx +1 -0
  315. package/src/components/TimePicker/TimePicker.tsx +304 -0
  316. package/src/components/TimePicker/USAGE.md +57 -0
  317. package/src/components/Timeline/TIMELINE_IMPLEMENTATION_NOTES.md +13 -0
  318. package/src/components/Timeline/Timeline.module.css +373 -0
  319. package/src/components/Timeline/Timeline.stories.tsx +128 -0
  320. package/src/components/Timeline/Timeline.test.tsx +1 -0
  321. package/src/components/Timeline/Timeline.tsx +73 -0
  322. package/src/components/Timeline/TimelineItem.tsx +79 -0
  323. package/src/components/Timeline/USAGE.md +49 -0
  324. package/src/components/Toast/TOAST_IMPLEMENTATION_NOTES.md +39 -0
  325. package/src/components/Toast/Toast.module.css +184 -0
  326. package/src/components/Toast/Toast.stories.tsx +67 -0
  327. package/src/components/Toast/Toast.test.tsx +1 -0
  328. package/src/components/Toast/Toast.tsx +82 -0
  329. package/src/components/Toast/USAGE.md +50 -0
  330. package/src/components/Toast/index.ts +1 -0
  331. package/src/components/Tooltip/TOOLTIP_IMPLEMENTATION_NOTES.md +85 -0
  332. package/src/components/Tooltip/Tooltip.module.css +91 -0
  333. package/src/components/Tooltip/Tooltip.stories.tsx +165 -0
  334. package/src/components/Tooltip/Tooltip.test.tsx +1 -0
  335. package/src/components/Tooltip/Tooltip.tsx +117 -0
  336. package/src/components/Tooltip/USAGE.md +80 -0
  337. package/src/components/TransferList/TRANSFERLIST_IMPLEMENTATION_NOTES.md +111 -0
  338. package/src/components/TransferList/TransferList.module.css +182 -0
  339. package/src/components/TransferList/TransferList.stories.tsx +121 -0
  340. package/src/components/TransferList/TransferList.test.tsx +1 -0
  341. package/src/components/TransferList/TransferList.tsx +419 -0
  342. package/src/components/TransferList/USAGE.md +77 -0
  343. package/src/components/Tree/IMPLEMENTATION_NOTES.md +48 -0
  344. package/src/components/Tree/Tree.module.css +232 -0
  345. package/src/components/Tree/Tree.stories.tsx +104 -0
  346. package/src/components/Tree/Tree.test.tsx +1 -0
  347. package/src/components/Tree/Tree.tsx +220 -0
  348. package/src/components/Tree/USAGE.md +96 -0
  349. package/src/components/Tree/index.ts +1 -0
  350. package/src/components/index.ts +52 -0
  351. package/src/env.d.ts +7 -0
  352. package/src/index.ts +179 -0
  353. package/src/types/index.ts +9 -0
  354. package/src/types/mantine.d.ts +7 -0
  355. package/src/types/scss-modules.d.ts +9 -0
  356. package/src/utils/ColorSchemeWrapper.tsx +27 -0
  357. package/src/utils/RequireAccessibleLabel.ts +1 -0
  358. package/src/utils/copyToClipboard.ts +36 -0
  359. package/src/utils/filterStylingProps.test.ts +85 -0
  360. package/src/utils/filterStylingProps.ts +150 -0
  361. package/src/utils/index.ts +1 -0
  362. package/src/utils/renderRichOption.tsx +65 -0
@@ -0,0 +1,302 @@
1
+ /* Brand-layer exemptions (recursica-allow-brand) — see recursica-token-analyzer README.md.
2
+ * Close button is styled to match the Button component's text/icon-only variant, so it reuses
3
+ * the same global hover/focus state tokens Button.module.css exempts.
4
+ * recursica-allow-brand: --recursica_brand_states_focus_blur
5
+ * recursica-allow-brand: --recursica_brand_states_focus_border-size
6
+ * recursica-allow-brand: --recursica_brand_states_focus_color
7
+ * recursica-allow-brand: --recursica_brand_states_focus_margin
8
+ * recursica-allow-brand: --recursica_brand_states_hover_color
9
+ * recursica-allow-brand: --recursica_brand_states_hover_opacity
10
+ */
11
+
12
+ .root {
13
+ }
14
+
15
+ .inner {
16
+ /* Mantine applies padding to inner to keep modal away from edges. We rely on content constraints. */
17
+ }
18
+
19
+ .content {
20
+ /* HARDCODE: Mantine pins content to a fixed flex-basis from its own size scale
21
+ (`flex: 0 0 var(--modal-size)`, defaulting to 440px). Overriding to `0 1 auto` makes width
22
+ content-driven (shrink-to-fit) instead of fixed, so min-width/max-width below actually bound
23
+ it rather than being unreachable dead code. */
24
+ flex: 0 1 auto;
25
+
26
+ /* Geometric Bounds */
27
+ min-width: var(--recursica_ui-kit_components_modal_properties_min-width);
28
+ max-width: var(--recursica_ui-kit_components_modal_properties_max-width);
29
+ min-height: var(--recursica_ui-kit_components_modal_properties_min-height);
30
+
31
+ /* Restrict max-height to either the UI Kit max or the viewport bounds to force internal scrolling */
32
+ max-height: min(
33
+ var(--recursica_ui-kit_components_modal_properties_max-height),
34
+ calc(100vh - 4rem)
35
+ );
36
+ overflow: hidden;
37
+
38
+ /* Box model */
39
+ border-radius: var(
40
+ --recursica_ui-kit_components_modal_properties_border-radius
41
+ );
42
+ border-width: var(--recursica_ui-kit_components_modal_properties_border-size);
43
+ border-color: var(
44
+ --recursica_ui-kit_components_modal_properties_colors_border-color
45
+ );
46
+ border-style: solid;
47
+
48
+ /* Appearance */
49
+ background-color: var(
50
+ --recursica_ui-kit_components_modal_properties_colors_content-background-color
51
+ );
52
+ box-shadow: var(--recursica_ui-kit_components_modal_properties_elevation);
53
+
54
+ /* Internal Flex container to trap header and let body scroll */
55
+ display: flex;
56
+ flex-direction: column;
57
+ }
58
+
59
+ .content[data-full-screen] {
60
+ /* HARDCODE: preserve Mantine's native full-screen sizing — the shrink-to-fit override above
61
+ would otherwise apply here too and stop `fullScreen` from filling the viewport. */
62
+ flex: 0 0 100%;
63
+ }
64
+
65
+ .header {
66
+ display: flex; /* HARDCODE: puts the title and close button side-by-side so the title has a bounded width to truncate against */
67
+ align-items: center;
68
+ justify-content: space-between;
69
+ padding: var(
70
+ --recursica_ui-kit_components_modal_properties_header-footer-vertical-padding
71
+ )
72
+ var(
73
+ --recursica_ui-kit_components_modal_properties_header-footer-horizontal-padding
74
+ );
75
+ background-color: var(
76
+ --recursica_ui-kit_components_modal_properties_colors_header-background-color
77
+ );
78
+ }
79
+
80
+ .title {
81
+ flex: 1 1 auto; /* HARDCODE: let the title claim the space between the header edge and the close button */
82
+ min-width: 0; /* HARDCODE: required for text-overflow ellipsis to take effect on a flex child */
83
+ overflow: clip; /* HARDCODE: `hidden` clips descenders (e.g. "g") when text_line-height is
84
+ tighter than the font's natural ascent+descent; overflow-clip-margin gives ink a small bleed
85
+ allowance while still clipping genuinely overflowing text (see Chip's IMPLEMENTATION_NOTES.md). */
86
+ overflow-clip-margin: 0.35em;
87
+ white-space: nowrap;
88
+ text-overflow: ellipsis;
89
+
90
+ color: var(--recursica_ui-kit_components_modal_properties_colors_title);
91
+
92
+ /* Direct Figma Typography Mapping */
93
+ font-family: var(
94
+ --recursica_ui-kit_components_modal_properties_header-style_fontFamily
95
+ );
96
+ font-size: var(
97
+ --recursica_ui-kit_components_modal_properties_header-style_fontSize
98
+ );
99
+ font-style: var(
100
+ --recursica_ui-kit_components_modal_properties_header-style_fontStyle
101
+ );
102
+ font-weight: var(
103
+ --recursica_ui-kit_components_modal_properties_header-style_fontWeight
104
+ );
105
+ letter-spacing: var(
106
+ --recursica_ui-kit_components_modal_properties_header-style_letterSpacing
107
+ );
108
+ line-height: var(
109
+ --recursica_ui-kit_components_modal_properties_header-style_lineHeight
110
+ );
111
+ text-transform: var(
112
+ --recursica_ui-kit_components_modal_properties_header-style_textCase
113
+ );
114
+ text-decoration: var(
115
+ --recursica_ui-kit_components_modal_properties_header-style_textDecoration
116
+ );
117
+ }
118
+
119
+ .bodyWrapper {
120
+ /* This is the container that overrides Mantine's native Body. It strips padding and acts as a flex column. */
121
+ padding: 0;
122
+ display: flex;
123
+ flex-direction: column;
124
+ flex: 1 1 auto;
125
+ overflow: hidden;
126
+ min-height: 0; /* Critical for flex child scrolling constraint */
127
+ }
128
+
129
+ .scrollArea {
130
+ padding: var(
131
+ --recursica_ui-kit_components_modal_properties_content-vertical-padding
132
+ )
133
+ var(
134
+ --recursica_ui-kit_components_modal_properties_content-horizontal-padding
135
+ );
136
+
137
+ /* Internal scrolling */
138
+ flex: 1 1 auto;
139
+ overflow-y: auto;
140
+ min-height: 0; /* Critical for flex child scrolling constraint */
141
+
142
+ color: var(--recursica_ui-kit_components_modal_properties_colors_content);
143
+
144
+ /* Direct Figma Typography Mapping */
145
+ font-family: var(
146
+ --recursica_ui-kit_components_modal_properties_content-style_fontFamily
147
+ );
148
+ font-size: var(
149
+ --recursica_ui-kit_components_modal_properties_content-style_fontSize
150
+ );
151
+ font-style: var(
152
+ --recursica_ui-kit_components_modal_properties_content-style_fontStyle
153
+ );
154
+ font-weight: var(
155
+ --recursica_ui-kit_components_modal_properties_content-style_fontWeight
156
+ );
157
+ letter-spacing: var(
158
+ --recursica_ui-kit_components_modal_properties_content-style_letterSpacing
159
+ );
160
+ line-height: var(
161
+ --recursica_ui-kit_components_modal_properties_content-style_lineHeight
162
+ );
163
+ text-transform: var(
164
+ --recursica_ui-kit_components_modal_properties_content-style_textCase
165
+ );
166
+ text-decoration: var(
167
+ --recursica_ui-kit_components_modal_properties_content-style_textDecoration
168
+ );
169
+
170
+ /* Ensure button gap token is easily usable if developers use standard spacing */
171
+ --modal-button-gap: var(
172
+ --recursica_ui-kit_components_modal_properties_button-gap
173
+ );
174
+
175
+ /* Smooth divider transitions */
176
+ transition: border-color 0.15s ease;
177
+ border-top: var(
178
+ --recursica_ui-kit_components_modal_properties_scroll-divider-size
179
+ )
180
+ solid transparent;
181
+ border-bottom: var(
182
+ --recursica_ui-kit_components_modal_properties_scroll-divider-size
183
+ )
184
+ solid transparent;
185
+ }
186
+
187
+ .scrollArea[data-scrolled-top] {
188
+ border-top-color: var(
189
+ --recursica_ui-kit_components_modal_properties_colors_scroll-divider
190
+ );
191
+ }
192
+
193
+ .scrollArea[data-scrolled-bottom] {
194
+ border-bottom-color: var(
195
+ --recursica_ui-kit_components_modal_properties_colors_scroll-divider
196
+ );
197
+ }
198
+
199
+ .footer {
200
+ padding: var(
201
+ --recursica_ui-kit_components_modal_properties_header-footer-vertical-padding
202
+ )
203
+ var(
204
+ --recursica_ui-kit_components_modal_properties_header-footer-horizontal-padding
205
+ );
206
+ background-color: var(
207
+ --recursica_ui-kit_components_modal_properties_colors_footer-background-color
208
+ );
209
+ display: flex;
210
+ justify-content: flex-end;
211
+ gap: var(--recursica_ui-kit_components_modal_properties_button-gap);
212
+ }
213
+
214
+ .close {
215
+ /* Matches the Button component's text-variant, icon-only, small-size visual treatment
216
+ (see Button.module.css) so the modal close control looks like a Recursica Button
217
+ rather than Mantine's native CloseButton. */
218
+ box-sizing: border-box;
219
+ display: flex;
220
+ align-items: center;
221
+ justify-content: center;
222
+ position: relative;
223
+ overflow: hidden;
224
+ transition: all 0.2s ease;
225
+
226
+ height: var(
227
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_height
228
+ );
229
+ min-width: var(
230
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_min-width
231
+ );
232
+ padding: 0
233
+ var(
234
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_horizontal-padding
235
+ );
236
+ border-radius: var(
237
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_small_properties_border-radius
238
+ );
239
+
240
+ border-style: solid;
241
+ border-width: var(
242
+ --recursica_ui-kit_components_button_variants_styles_text_properties_border-size
243
+ );
244
+ border-color: var(
245
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_border-color
246
+ );
247
+ background-color: var(
248
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_background-color
249
+ );
250
+ color: var(
251
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_icon-color
252
+ );
253
+ }
254
+
255
+ /* Mantine's CloseIcon sets width/height via an inline `style` attribute
256
+ (`--cb-icon-size`, default 70%), which beats any plain class rule regardless of specificity —
257
+ same category of override as Tree's `--level-offset` (see Tree/IMPLEMENTATION_NOTES.md).
258
+ `!important` is required here to land the Button's small icon-size token instead. */
259
+ .close svg {
260
+ position: relative;
261
+ z-index: 1;
262
+ width: var(
263
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_icon
264
+ ) !important;
265
+ height: var(
266
+ --recursica_ui-kit_components_button_variants_sizes_small_properties_icon
267
+ ) !important;
268
+ }
269
+
270
+ .close::after {
271
+ content: "";
272
+ position: absolute;
273
+ inset: 0;
274
+ border-radius: inherit;
275
+ z-index: 0;
276
+ pointer-events: none;
277
+ transition: opacity 150ms ease;
278
+ opacity: 0;
279
+ background-color: var(--recursica_brand_states_hover_color);
280
+ }
281
+ .close:hover:not(:disabled)::after {
282
+ opacity: var(--recursica_brand_states_hover_opacity);
283
+ }
284
+
285
+ /* Mantine's own subtle-variant hover background (CloseButton.css) would otherwise show through
286
+ underneath the overlay above — pin it back to the Button's own background token so only the
287
+ `::after` overlay renders the hover feedback, matching Button's single-overlay treatment. */
288
+ .close:hover {
289
+ background-color: var(
290
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_background-color
291
+ );
292
+ }
293
+
294
+ .close:focus-visible {
295
+ outline: none;
296
+ box-shadow:
297
+ 0 0 0 var(--recursica_brand_states_focus_border-size)
298
+ var(--recursica_brand_states_focus_color),
299
+ 0 0 var(--recursica_brand_states_focus_blur)
300
+ var(--recursica_brand_states_focus_margin)
301
+ var(--recursica_brand_states_focus_color);
302
+ }
@@ -0,0 +1,105 @@
1
+ import { useState } from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { Modal, type ModalProps } from "./Modal";
4
+ import { Button } from "../Button";
5
+
6
+ const meta: Meta<typeof Modal> = {
7
+ title: "UI-Kit/Modal",
8
+ component: Modal,
9
+ tags: ["autodocs"],
10
+ argTypes: {
11
+ opened: { table: { disable: true } },
12
+ onClose: { table: { disable: true } },
13
+ defaultChecked: { table: { disable: true } },
14
+ },
15
+ };
16
+
17
+ export default meta;
18
+
19
+ type Story = StoryObj<typeof Modal>;
20
+
21
+ const DefaultWrapper = (args: ModalProps) => {
22
+ // Starts opened so the modal is visible without pressing a button first.
23
+ const [opened, setOpened] = useState(true);
24
+ return (
25
+ <>
26
+ <Modal {...args} opened={opened} onClose={() => setOpened(false)}>
27
+ Please log in to continue accessing this feature.
28
+ <Modal.Footer>
29
+ <Button variant="outline" onClick={() => setOpened(false)}>
30
+ Cancel
31
+ </Button>
32
+ <Button onClick={() => setOpened(false)}>Confirm</Button>
33
+ </Modal.Footer>
34
+ </Modal>
35
+ <Button onClick={() => setOpened(true)}>Open Modal</Button>
36
+ </>
37
+ );
38
+ };
39
+
40
+ export const Default: Story = {
41
+ args: {
42
+ title: "Authentication Required",
43
+ },
44
+ render: (args) => <DefaultWrapper {...args} />,
45
+ };
46
+
47
+ const LongTitleWrapper = (args: ModalProps) => {
48
+ const [opened, setOpened] = useState(true);
49
+ return (
50
+ <>
51
+ <Modal {...args} opened={opened} onClose={() => setOpened(false)}>
52
+ The title above is longer than the header can display, so it truncates
53
+ with an ellipsis instead of wrapping onto a second line.
54
+ <Modal.Footer>
55
+ <Button onClick={() => setOpened(false)}>Got it</Button>
56
+ </Modal.Footer>
57
+ </Modal>
58
+ <Button onClick={() => setOpened(true)}>Open Modal</Button>
59
+ </>
60
+ );
61
+ };
62
+
63
+ export const LongTitle: Story = {
64
+ args: {
65
+ title:
66
+ "This Modal Title Is Deliberately Long Enough To Exceed The Available Header Width",
67
+ },
68
+ render: (args) => <LongTitleWrapper {...args} />,
69
+ };
70
+
71
+ const ScrollingWrapper = (args: ModalProps) => {
72
+ // Starts opened so the modal is visible without pressing a button first.
73
+ const [opened, setOpened] = useState(true);
74
+ return (
75
+ <>
76
+ <Modal {...args} opened={opened} onClose={() => setOpened(false)}>
77
+ <p>
78
+ This modal demonstrates the dynamically injected scroll dividers. When
79
+ this body content overflows, the borders between the Header and Footer
80
+ automatically appear to define the scrolling boundary.
81
+ </p>
82
+ {Array(20)
83
+ .fill(0)
84
+ .map((_, i) => (
85
+ <p key={i}>Scrolling content block {i + 1}...</p>
86
+ ))}
87
+ {/* The new Footer abstraction */}
88
+ <Modal.Footer>
89
+ <Button variant="outline" onClick={() => setOpened(false)}>
90
+ Decline
91
+ </Button>
92
+ <Button onClick={() => setOpened(false)}>Accept Terms</Button>
93
+ </Modal.Footer>
94
+ </Modal>
95
+ <Button onClick={() => setOpened(true)}>Open Scrolling Modal</Button>
96
+ </>
97
+ );
98
+ };
99
+
100
+ export const ScrollingContent: Story = {
101
+ args: {
102
+ title: "Terms and Conditions",
103
+ },
104
+ render: (args) => <ScrollingWrapper {...args} />,
105
+ };
@@ -0,0 +1 @@
1
+ // Placeholder for future Modal component tests. Add tests here if/when needed.