@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,49 @@
1
+ # Timeline - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Timeline` component in your projects using `@recursica/adapter-mantine-v8`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Timeline } from "@recursica/adapter-mantine-v8";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Timeline } from "@recursica/adapter-mantine-v8";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <Timeline active={1}>
24
+ <Timeline.Item title="Step 1">Created branch</Timeline.Item>
25
+ <Timeline.Item title="Step 2">Pushed changes</Timeline.Item>
26
+ </Timeline>
27
+ );
28
+ }
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 3. Design System Integration
34
+
35
+ All Recursica components in the `@recursica/adapter-mantine-v8` package adhere strictly to design system spacing, scaling, and behavior patterns.
36
+
37
+ > [!IMPORTANT]
38
+ >
39
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
40
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
41
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
42
+
43
+ ---
44
+
45
+ ## 4. Key Integration Features & Constraints
46
+
47
+ `Timeline.Item` accepts a `timestamp` prop that renders below the item's content, and a `bulletVariant` prop (`"default" | "avatar" | "icon" | "icon-alternative"`) to control the bullet's appearance. The `lineWidth` and `bulletSize` props are not configurable, since geometry is controlled by the design system tokens.
48
+
49
+ A known limitation: when using `bulletVariant="avatar"`, the avatar bullet always renders at the default bullet size rather than a custom size.
@@ -0,0 +1,39 @@
1
+ # Toast – Implementation Notes
2
+
3
+ Decisions and design tweaks tailored for the UI Kit's Toast wrapped against `@mantine/core`'s `Notification` component.
4
+
5
+ ---
6
+
7
+ ## 1. Standalone Visual Wrapper
8
+
9
+ **Decision:** We wrap `@mantine/core`'s standalone `Notification` component instead of wrapping the `@mantine/notifications` provider.
10
+
11
+ **Implementation:** The UI Kit provides variables for the `Toast` component itself (e.g., `--recursica_ui-kit_components_toast_*`). We use these variables to style the standard Mantine `Notification` element. This allows developers to use `<Toast>` manually if they want a static or inline message.
12
+
13
+ If dynamic popups are required, developers can configure `@mantine/notifications` to utilize this component or use its classes.
14
+
15
+ ---
16
+
17
+ ## 2. Variant Mapping via `data-variant`
18
+
19
+ **Decision:** `variant` props (`"default" | "error" | "success"`) are mapped directly to `data-variant` on the Mantine root `Box`.
20
+
21
+ **Implementation:** Mantine's `Notification` doesn't inherently support our custom variants out of the box in the way we want them styled. By passing `data-variant` directly to the `Box`, we can explicitly target the root element in our `Toast.module.css` (e.g., `.root[data-variant="success"]`) and pipe in the corresponding UI Kit layer colors.
22
+
23
+ ---
24
+
25
+ ## 3. Minimal CSS Override Philosophy
26
+
27
+ **Decision:** The CSS module only overrides visual design tokens (colors, typography, padding, borders, shadows).
28
+
29
+ **Implementation:** We defer layout structure, icon rendering, loader transitions, and close button mechanics to Mantine. The `border-style: none;` is hardcoded to reset any underlying styles from Mantine's defaults, ensuring a clean mapping of elevation and shadows.
30
+
31
+ ---
32
+
33
+ ## 4. Unsupported `loading` State
34
+
35
+ **Decision:** The native `loading` state is explicitly stripped and bypassed from the `<Toast />` component wrapper.
36
+
37
+ **Implementation:** Mantine's `Notification` inherently supports a `loading={true}` state that natively spins up a loader instead of an icon. However, Recursica's UI Kit strictly does not define structural tokens for loader states inside toasts.
38
+ Instead of attempting to tightly couple the internal `Loader` abstraction or mapping variables incorrectly, the `loading` property is explicitly omitted and `false`-enforced from the public API.
39
+ If consumers explicitly require a loading toast, they must manually inject a `<Loader />` component into the `icon` slot.
@@ -0,0 +1,184 @@
1
+ /* HARDCODED VALUES:
2
+ - border-style: solid. Baseline so the per-variant border-color tokens actually render.
3
+ */
4
+
5
+ /* EXEMPTIONS:
6
+ - elevation_layer-1/2/3 are ignored: a toast's elevation doesn't depend on the layer it's
7
+ summoned from — all four layer variants resolve to the same brand elevation value, so
8
+ layer-0 (already wired below) is the correct, layer-agnostic choice for all of them. */
9
+ /* recursica-ignore: --recursica_ui-kit_components_toast_properties_elevation_layer-1 */
10
+ /* recursica-ignore: --recursica_ui-kit_components_toast_properties_elevation_layer-2 */
11
+ /* recursica-ignore: --recursica_ui-kit_components_toast_properties_elevation_layer-3 */
12
+
13
+ /* ======================================
14
+ TOAST / NOTIFICATION ROOT
15
+ ====================================== */
16
+
17
+ .root {
18
+ border-radius: var(
19
+ --recursica_ui-kit_components_toast_properties_border-radius
20
+ );
21
+ border-width: var(--recursica_ui-kit_components_toast_properties_border-size);
22
+ border-style: solid;
23
+ border-color: var(
24
+ --recursica_ui-kit_components_toast_variants_styles_default_properties_colors_border-color
25
+ );
26
+ box-shadow: var(
27
+ --recursica_ui-kit_components_toast_properties_elevation_layer-0
28
+ );
29
+ padding: var(--recursica_ui-kit_components_toast_properties_vertical-padding)
30
+ var(--recursica_ui-kit_components_toast_properties_horizontal-padding);
31
+ min-width: var(--recursica_ui-kit_components_toast_properties_min-width);
32
+ max-width: var(--recursica_ui-kit_components_toast_properties_max-width);
33
+ min-height: var(--recursica_ui-kit_components_toast_properties_min-height);
34
+
35
+ /* Default Variant (Base) */
36
+ background-color: var(
37
+ --recursica_ui-kit_components_toast_variants_styles_default_properties_colors_background-color
38
+ );
39
+ gap: var(--recursica_ui-kit_components_toast_properties_spacing);
40
+
41
+ /* Hide Mantine's native colored vertical line */
42
+ &::before {
43
+ display: none;
44
+ content: none;
45
+ }
46
+
47
+ & .icon {
48
+ width: var(--recursica_ui-kit_components_toast_properties_icon) !important;
49
+ height: var(--recursica_ui-kit_components_toast_properties_icon) !important;
50
+ margin-right: 0 !important; /* Override Mantine's native spacing in favor of flex gap */
51
+ background-color: transparent !important; /* Remove Mantine's native circle background */
52
+
53
+ color: var(
54
+ --recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text-color
55
+ );
56
+ }
57
+
58
+ & .loader {
59
+ margin-right: 0 !important; /* Override native spacing */
60
+ }
61
+ & .title,
62
+ & .description {
63
+ color: var(
64
+ --recursica_ui-kit_components_toast_variants_styles_default_properties_colors_text-color
65
+ );
66
+ }
67
+ & .closeButton {
68
+ color: var(
69
+ --recursica_ui-kit_components_toast_variants_styles_default_properties_colors_button
70
+ );
71
+ }
72
+
73
+ /* Error Variant styling */
74
+ &[data-variant="error"] {
75
+ background-color: var(
76
+ --recursica_ui-kit_components_toast_variants_styles_error_properties_colors_background-color
77
+ );
78
+ border-color: var(
79
+ --recursica_ui-kit_components_toast_variants_styles_error_properties_colors_border-color
80
+ );
81
+
82
+ & .icon {
83
+ color: var(
84
+ --recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text-color
85
+ ) !important;
86
+ }
87
+ & .title,
88
+ & .description {
89
+ color: var(
90
+ --recursica_ui-kit_components_toast_variants_styles_error_properties_colors_text-color
91
+ );
92
+ }
93
+ & .closeButton {
94
+ color: var(
95
+ --recursica_ui-kit_components_toast_variants_styles_error_properties_colors_button
96
+ );
97
+ }
98
+ }
99
+
100
+ /* Success Variant styling */
101
+ &[data-variant="success"] {
102
+ background-color: var(
103
+ --recursica_ui-kit_components_toast_variants_styles_success_properties_colors_background-color
104
+ );
105
+ border-color: var(
106
+ --recursica_ui-kit_components_toast_variants_styles_success_properties_colors_border-color
107
+ );
108
+
109
+ & .icon {
110
+ color: var(
111
+ --recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text-color
112
+ ) !important;
113
+ }
114
+ & .title,
115
+ & .description {
116
+ color: var(
117
+ --recursica_ui-kit_components_toast_variants_styles_success_properties_colors_text-color
118
+ );
119
+ }
120
+ & .closeButton {
121
+ color: var(
122
+ --recursica_ui-kit_components_toast_variants_styles_success_properties_colors_button
123
+ );
124
+ }
125
+ }
126
+ }
127
+
128
+ /* ======================================
129
+ TOAST BODY
130
+ ====================================== */
131
+
132
+ .body {
133
+ /* No extra gap here, root handles icon-to-text, body can handle title-to-description if needed */
134
+ }
135
+
136
+ .title {
137
+ font-family: var(
138
+ --recursica_ui-kit_components_toast_properties_text_font-family
139
+ );
140
+ font-size: var(--recursica_ui-kit_components_toast_properties_text_font-size);
141
+ font-style: var(
142
+ --recursica_ui-kit_components_toast_properties_text_font-style
143
+ );
144
+ font-weight: var(
145
+ --recursica_ui-kit_components_toast_properties_text_font-weight
146
+ );
147
+ letter-spacing: var(
148
+ --recursica_ui-kit_components_toast_properties_text_letter-spacing
149
+ );
150
+ line-height: var(
151
+ --recursica_ui-kit_components_toast_properties_text_line-height
152
+ );
153
+ text-decoration: var(
154
+ --recursica_ui-kit_components_toast_properties_text_text-decoration
155
+ );
156
+ text-transform: var(
157
+ --recursica_ui-kit_components_toast_properties_text_text-transform
158
+ );
159
+ }
160
+
161
+ .description {
162
+ font-family: var(
163
+ --recursica_ui-kit_components_toast_properties_text_font-family
164
+ );
165
+ font-size: var(--recursica_ui-kit_components_toast_properties_text_font-size);
166
+ font-style: var(
167
+ --recursica_ui-kit_components_toast_properties_text_font-style
168
+ );
169
+ font-weight: var(
170
+ --recursica_ui-kit_components_toast_properties_text_font-weight
171
+ );
172
+ letter-spacing: var(
173
+ --recursica_ui-kit_components_toast_properties_text_letter-spacing
174
+ );
175
+ line-height: var(
176
+ --recursica_ui-kit_components_toast_properties_text_line-height
177
+ );
178
+ text-decoration: var(
179
+ --recursica_ui-kit_components_toast_properties_text_text-decoration
180
+ );
181
+ text-transform: var(
182
+ --recursica_ui-kit_components_toast_properties_text_text-transform
183
+ );
184
+ }
@@ -0,0 +1,67 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Toast } from "./Toast";
3
+
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ type ToastStoryArgs = Record<string, any>;
6
+
7
+ const meta = {
8
+ title: "UI-Kit/Toast",
9
+ component: Toast,
10
+ tags: ["autodocs"],
11
+ parameters: {
12
+ docs: {
13
+ description: {
14
+ component:
15
+ "The `Toast` component is a standalone visual component wrapping Mantine's `Notification`. Note that this component is visually decoupled from `@mantine/notifications` and is meant to be used when you need to render a static or manually-controlled notification panel. If you need dynamic notification popups, you should use `@mantine/notifications` and configure its provider to use our styles.",
16
+ },
17
+ },
18
+ },
19
+ argTypes: {
20
+ title: {
21
+ control: "text",
22
+ description: "Title displayed above the message body",
23
+ },
24
+ children: {
25
+ control: "text",
26
+ description: "Main notification message",
27
+ },
28
+ withCloseButton: {
29
+ control: "boolean",
30
+ description: "Whether the close button is visible",
31
+ },
32
+ },
33
+ } satisfies Meta<typeof Toast>;
34
+
35
+ export default meta;
36
+ type Story = StoryObj<typeof meta>;
37
+
38
+ export const Default: Story = {
39
+ args: {
40
+ variant: "default",
41
+ title: "Update Available",
42
+ children:
43
+ "A new version of the application is available to download. Please restart your browser to apply the latest security patches and feature updates. If you ignore this message, the update will automatically install during your next session.",
44
+ withCloseButton: true,
45
+ },
46
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
+ render: ({ withLayer, layer, ...args }: ToastStoryArgs) => {
48
+ return <Toast {...args} />;
49
+ },
50
+ };
51
+
52
+ export const WithIcon: Story = {
53
+ args: {
54
+ variant: "default",
55
+ title: "Action Required",
56
+ children:
57
+ "You must complete your profile setup before accessing this feature.",
58
+ icon: "⚠️",
59
+ },
60
+ parameters: {
61
+ controls: { disable: true },
62
+ },
63
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
64
+ render: ({ withLayer, layer, ...args }: ToastStoryArgs) => {
65
+ return <Toast {...args} />;
66
+ },
67
+ };
@@ -0,0 +1 @@
1
+ // Placeholder for future Toast component tests. Add tests here if/when needed.
@@ -0,0 +1,82 @@
1
+ import React from "react";
2
+ import {
3
+ Notification as MantineNotification,
4
+ type NotificationProps as MantineNotificationProps,
5
+ } from "@mantine/core";
6
+ import {
7
+ filterStylingProps,
8
+ omitUnsupportedProps,
9
+ mergeClassNames,
10
+ type RecursicaOverStyled,
11
+ } from "../../utils/filterStylingProps";
12
+ import styles from "./Toast.module.css";
13
+
14
+ import { type RecursicaToastProps } from "@recursica/adapter-common";
15
+
16
+ /**
17
+ * Toast component wrapping Mantine's Notification.
18
+ *
19
+ * Can be used as a standalone visual component to display a notification or message.
20
+ */
21
+ export type ToastProps = RecursicaOverStyled<
22
+ Omit<MantineNotificationProps, "color" | "radius" | "variant" | "loading"> &
23
+ RecursicaToastProps
24
+ >;
25
+
26
+ export const Toast = React.forwardRef<HTMLDivElement, ToastProps>(
27
+ function Toast(
28
+ {
29
+ overStyled = false,
30
+ variant = "default",
31
+ withCloseButton = true,
32
+ ...rest
33
+ },
34
+ ref,
35
+ ) {
36
+ // Props this component intentionally doesn't support — deleted at runtime so they can't leak
37
+ // through even if a caller forces them via plain JavaScript, bypassing the `Omit<>` above.
38
+ const UNSUPPORTED_PROPS = [
39
+ "color", // Colors are token-driven via `data-variant`; Mantine's native palette isn't exposed.
40
+ "radius", // Toast corner radius is controlled by design tokens, not a raw radius prop.
41
+ "loading", // Toast never renders a loading state; always forced off via `loading={false}` below.
42
+ ] as const satisfies readonly (keyof MantineNotificationProps)[];
43
+
44
+ const sanitizedProps = omitUnsupportedProps(
45
+ filterStylingProps(rest, overStyled),
46
+ UNSUPPORTED_PROPS,
47
+ );
48
+
49
+ // Bind CSS module classes to Mantine's internal classNames API
50
+ const mergedClassNames = mergeClassNames(
51
+ {
52
+ root: styles.root,
53
+ body: styles.body,
54
+ title: styles.title,
55
+ description: styles.description,
56
+ closeButton: styles.closeButton,
57
+ icon: styles.icon,
58
+ loader: styles.loader,
59
+ },
60
+ (sanitizedProps as Record<string, unknown>).classNames as
61
+ | Partial<Record<string, string>>
62
+ | undefined,
63
+ );
64
+
65
+ return (
66
+ <MantineNotification
67
+ ref={ref}
68
+ {...(sanitizedProps as unknown as Omit<
69
+ MantineNotificationProps,
70
+ "color" | "radius" | "variant" | "loading"
71
+ >)}
72
+ withCloseButton={withCloseButton}
73
+ withBorder={false} // Border is handled via CSS or tokens if needed
74
+ data-variant={variant}
75
+ classNames={mergedClassNames}
76
+ loading={false}
77
+ />
78
+ );
79
+ },
80
+ );
81
+
82
+ Toast.displayName = "Toast";
@@ -0,0 +1,50 @@
1
+ # Toast - Usage Guide
2
+
3
+ This document describes how to integrate and use the `Toast` component in your projects using `@recursica/adapter-mantine-v8`.
4
+
5
+ ---
6
+
7
+ ## 1. Import Reference
8
+
9
+ ```tsx
10
+ import { Toast } from "@recursica/adapter-mantine-v8";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## 2. Basic Example
16
+
17
+ ```tsx
18
+ import React from "react";
19
+ import { Toast } from "@recursica/adapter-mantine-v8";
20
+
21
+ export default function Demo() {
22
+ return (
23
+ <Toast
24
+ title="Success"
25
+ message="Your action completed successfully"
26
+ variant="success"
27
+ />
28
+ );
29
+ }
30
+ ```
31
+
32
+ ---
33
+
34
+ ## 3. Design System Integration
35
+
36
+ All Recursica components in the `@recursica/adapter-mantine-v8` package adhere strictly to design system spacing, scaling, and behavior patterns.
37
+
38
+ > [!IMPORTANT]
39
+ >
40
+ > - **Anti-override protection**: Rogues style injections (like inline `style` or arbitrary `className`) are automatically blocked by our prop layer unless `overStyled={true}` is explicitly provided.
41
+ > - **No Direct Layers**: Do not pass a `layer` prop to this component. To place it on a specific visual layer, wrap it in a `<Layer layer={0|1|2|3}>` component natively.
42
+ > - **Variables and Theming**: Styling is entirely determined by local CSS variables defined in `recursica_variables_scoped.css` and mapped in the component's CSS module.
43
+
44
+ ---
45
+
46
+ ## 4. Key Integration Features & Constraints
47
+
48
+ `Toast` can be used directly for a static or inline message, or wired up to `@mantine/notifications` for dynamic popups. The `variant` prop (`"default" | "error" | "success"`) controls the toast's color treatment.
49
+
50
+ The `loading` state is not supported. If a loading toast is needed, pass a `<Loader />` component into the `icon` slot instead.
@@ -0,0 +1 @@
1
+ export * from "./Toast";
@@ -0,0 +1,85 @@
1
+ # Tooltip – Implementation Notes
2
+
3
+ Decisions and design tweaks strictly tailored for the UI Kit's Tooltip wrapped against `@mantine/core`. This is a living document that tracks _why_ specific logic decisions exist.
4
+
5
+ ---
6
+
7
+ ## 1. Single Component API (Not Composable)
8
+
9
+ **Decision:** Unlike HoverCard (which uses `HoverCard` + `HoverCard.Target` + `HoverCard.Dropdown`), Tooltip is a single wrapper component.
10
+
11
+ **Implementation:** Mantine's `Tooltip` takes content via a `label` prop and wraps the trigger element as `children`. There are no separate Target/Dropdown sub-components. The Recursica wrapper preserves this exact API.
12
+
13
+ **Static sub-components:** `Tooltip.Floating` and `Tooltip.Group` are exposed as pass-through references to Mantine's implementations. These do not receive Recursica styling treatment — they are utility wrappers for cursor-following tooltips and shared delay grouping respectively.
14
+
15
+ ---
16
+
17
+ ## 2. Token Namespace: `tooltip`
18
+
19
+ **Decision:** The CSS module exclusively uses variables from the `--recursica_ui-kit_components_tooltip_*` namespace.
20
+
21
+ **Implementation:** The Recursica token system defines the `tooltip` namespace covering:
22
+
23
+ - Geometry: border-radius, border-size, min-width, min-height, max-width, padding
24
+ - Typography: text_font-\* (family, size, style, weight, letter-spacing, line-height, text-decoration, text-transform)
25
+ - Colors (layer-aware): background, border-color, text
26
+ - Elevation: box-shadow
27
+ - Beak: beak-size (16px), beak-inset (8px)
28
+
29
+ No tokens from other component namespaces are referenced.
30
+
31
+ ---
32
+
33
+ ## 3. Hardcoded Values
34
+
35
+ ### `border-style: solid` (CSS module)
36
+
37
+ Mantine renders the tooltip using its `Box` component, which does not set `border-style` natively. Without this hardcoded value, the border-width and border-color tokens would have no visible effect. Same pattern as Menu and HoverCard dropdowns.
38
+
39
+ ### `arrowSize` defaulted to `16` (Tooltip.tsx)
40
+
41
+ Mantine's `arrowSize` prop is a JavaScript number used for inline style calculations: it sets `width`, `height`, and a positioning offset (`-arrowSize/2`) directly on the arrow `<div>` element. These inline styles cannot be overridden via CSS without `!important`, and the positioning offset has no CSS equivalent. The beak size cannot be fully CSS-driven.
42
+
43
+ The default value `16` matches the Recursica `beak-size` token (`--recursica_ui-kit_components_tooltip_properties_beak-size: 16px`). Developers can override `arrowSize` if needed. This is documented as an open issue in `docs/COMPONENT_ISSUES.md`.
44
+
45
+ **Note:** Mantine calls this the "arrow"; Recursica calls it the "beak". The Recursica prop `withBeak` (defaulting to `true`) maps to Mantine's `withArrow`. Both are accepted; `withBeak` takes precedence.
46
+
47
+ ### `multiline={true}` (Tooltip.tsx)
48
+
49
+ Mantine's `multiline` prop controls whether tooltip text wraps (`white-space: nowrap` when false). Recursica always enables multiline because the design system defines a `max-width` token (300px) — text should wrap naturally within that constraint rather than overflowing. The `multiline` prop is not exposed to developers.
50
+
51
+ ### Flexbox centering (CSS module)
52
+
53
+ `display: flex; align-items: center; justify-content: center;` is applied to the `.tooltip` class. This ensures text is vertically and horizontally centered within the `min-height: 48px` container defined by the design token. Without this, text sits at the top of the tooltip.
54
+
55
+ ---
56
+
57
+ ## 4. Recursica `withBeak` Prop
58
+
59
+ **Decision:** `withBeak` is the official Recursica prop for controlling beak visibility, defaulting to `true`.
60
+
61
+ **Implementation:** Both `withBeak` and Mantine's `withArrow` are accepted. Resolution order: `withBeak ?? withArrow`. When both are provided, `withBeak` takes precedence. The default of `true` means tooltips show the beak by default, matching the Recursica design intent.
62
+
63
+ ---
64
+
65
+ ## 5. ClassNames Binding
66
+
67
+ **Decision:** CSS module classes are bound via the `classNames` prop on Mantine's Tooltip root.
68
+
69
+ **Implementation:** The stylesNames for Tooltip are `tooltip` (the container) and `arrow` (the beak). Both are mapped to their respective CSS module classes: `{ tooltip: styles.tooltip, arrow: styles.arrow }`. Consumer-provided `classNames` are merged additively when `overStyled` is true.
70
+
71
+ ---
72
+
73
+ ## 6. Tooltip.Floating and Tooltip.Group
74
+
75
+ **Decision:** These static sub-components are direct pass-throughs to Mantine with no Recursica styling.
76
+
77
+ **Implementation:** `Tooltip.Floating` follows the cursor and uses a different rendering mechanism than standard Tooltip. `Tooltip.Group` is a utility for shared delay timing. Neither has Recursica design tokens defined, so they remain unstyled pass-throughs. If tokens are added in the future, they can be wrapped independently.
78
+
79
+ ---
80
+
81
+ ## 7. Default Position Override
82
+
83
+ **Decision:** Recursica defaults `position` to `"top"`. Mantine defaults to `"bottom"`.
84
+
85
+ **Implementation:** The `position="top"` default is set on the Mantine root element before the prop spread, so developer-provided `position` values still take precedence. This aligns with Recursica's design intent for overlay components to appear above their trigger by default.
@@ -0,0 +1,91 @@
1
+ /* HARDCODED VALUES:
2
+ - border-style: solid. Structural rendering rule for the tooltip border (Mantine uses Box
3
+ which may not set border-style natively). Same pattern as Menu / HoverCard.
4
+ - arrowSize defaults to 16 in Tooltip.tsx. Mantine uses arrowSize for inline width/height
5
+ and positioning (-arrowSize/2) calculations that cannot be CSS-driven. The default matches
6
+ the Recursica beak-size token (16px).
7
+ - arrow inset/offset is Mantine's own default (no arrowOffset override) — same "must be a JS
8
+ prop, not CSS-driven" constraint as arrowSize.
9
+ - All structural layout (display, position, overflow) is deferred to Mantine's native
10
+ behavior. We only override visual design tokens (colors, typography, spacing, borders).
11
+ */
12
+
13
+ /* EXEMPTIONS:
14
+ - beak-size/beak-inset are ignored: the arrow's size and position are Mantine's own
15
+ `arrowSize`/`arrowOffset` JS props, not CSS-driven — see HARDCODED VALUES above. */
16
+ /* recursica-ignore: --recursica_ui-kit_components_tooltip_properties_beak-size */
17
+ /* recursica-ignore: --recursica_ui-kit_components_tooltip_properties_beak-inset */
18
+
19
+ /* ======================================
20
+ TOOLTIP CONTAINER
21
+ ====================================== */
22
+
23
+ .tooltip {
24
+ background-color: var(
25
+ --recursica_ui-kit_components_tooltip_properties_colors_background-color
26
+ );
27
+ border-style: solid; /* HARDCODE: Mantine Box does not set border-style natively */
28
+ border-width: var(
29
+ --recursica_ui-kit_components_tooltip_properties_border-size
30
+ );
31
+ border-color: var(
32
+ --recursica_ui-kit_components_tooltip_properties_colors_border-color
33
+ );
34
+ border-radius: var(
35
+ --recursica_ui-kit_components_tooltip_properties_border-radius
36
+ );
37
+ box-shadow: var(--recursica_ui-kit_components_tooltip_properties_elevation);
38
+
39
+ min-width: var(--recursica_ui-kit_components_tooltip_properties_min-width);
40
+ min-height: var(--recursica_ui-kit_components_tooltip_properties_min-height);
41
+ max-width: var(--recursica_ui-kit_components_tooltip_properties_max-width);
42
+
43
+ padding: var(
44
+ --recursica_ui-kit_components_tooltip_properties_vertical-padding
45
+ )
46
+ var(--recursica_ui-kit_components_tooltip_properties_horizontal-padding);
47
+
48
+ /* Vertically center text within min-height container */
49
+ display: flex;
50
+ align-items: center;
51
+
52
+ /* Typography */
53
+ font-family: var(
54
+ --recursica_ui-kit_components_tooltip_properties_text_font-family
55
+ );
56
+ font-size: var(
57
+ --recursica_ui-kit_components_tooltip_properties_text_font-size
58
+ );
59
+ font-style: var(
60
+ --recursica_ui-kit_components_tooltip_properties_text_font-style
61
+ );
62
+ font-weight: var(
63
+ --recursica_ui-kit_components_tooltip_properties_text_font-weight
64
+ );
65
+ letter-spacing: var(
66
+ --recursica_ui-kit_components_tooltip_properties_text_letter-spacing
67
+ );
68
+ line-height: var(
69
+ --recursica_ui-kit_components_tooltip_properties_text_line-height
70
+ );
71
+ text-decoration: var(
72
+ --recursica_ui-kit_components_tooltip_properties_text_text-decoration
73
+ );
74
+ text-transform: var(
75
+ --recursica_ui-kit_components_tooltip_properties_text_text-transform
76
+ );
77
+
78
+ color: var(
79
+ --recursica_ui-kit_components_tooltip_properties_colors_text-color
80
+ );
81
+ }
82
+
83
+ /* ======================================
84
+ ARROW / BEAK
85
+ ====================================== */
86
+
87
+ .arrow {
88
+ border-color: var(
89
+ --recursica_ui-kit_components_tooltip_properties_colors_border-color
90
+ );
91
+ }