@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,153 @@
1
+ # FileInput Implementation Notes
2
+
3
+ ## Architecture overview
4
+
5
+ `FileInput` replaces the previous "coming soon" stub with a fully custom composite, the same way
6
+ `FileUpload` was built (see `../FileUpload/FILEUPLOAD_IMPLEMENTATION_NOTES.md`). It shares
7
+ `FileUpload`'s selection/validation contract (`accept`/`maxSize`/`maxFiles`, `onFilesRejected`,
8
+ `readOnly`) via a common `RecursicaFileUploadItem` type and near-identical `handleFiles`/drag
9
+ logic, but is presented as a single-line, `TextField`-shaped control rather than a dropzone —
10
+ Forge's own `file-input` token set is shaped almost identically to `text-field`'s (border-radius,
11
+ horizontal/vertical padding, icon-size, icon-text-gap, min-height, placeholder-opacity, a full
12
+ `text_*` type-style block), confirming the design intent directly rather than needing to guess it
13
+ from the reference screenshot alone.
14
+
15
+ The control is one clickable, focusable `<div role="button">` containing:
16
+
17
+ 1. **A leading icon** — the upload icon by default, overridable via `icon`.
18
+ 2. **A content area** — placeholder text when empty, or a horizontally scrollable row of `Chip`s
19
+ (reusing `FileUpload`'s chip, same as its file list) once one or more files are selected —
20
+ single- and multiple-file mode render identically here; only the selection/replace behavior
21
+ differs (see "`multiple` defaults to `false`" below).
22
+ 3. **A trailing "clear" `Button`** — shown whenever a file is selected; clears the entire current
23
+ selection, icon overridable via `clearIcon` (see "Trailing clear button" below).
24
+ 4. **A hidden `<input type="file">`**, triggered programmatically — same approach as
25
+ `FileUpload`'s dropzone, not the "invisible overlay input" pattern some styled file inputs use
26
+ (that pattern would need every interactive child — chip remove icons, the clear icon — to sit
27
+ at a higher stacking context than the overlay just to receive its own clicks; keeping the input
28
+ hidden and driving it via `ref.click()` avoids that entirely).
29
+
30
+ ## The stub's exemption comments described a schema that no longer exists
31
+
32
+ Before writing any CSS, the stub `FileInput.module.css`'s 43 `recursica-ignore` comments were
33
+ checked against `packages/official-release/recursica_variables_scoped.css` directly, rather than
34
+ trusted as the token inventory. They didn't match — the stub encoded a `states.default`/
35
+ `states.focus`-shaped schema (mirroring the same stale-plugin-export drift documented in
36
+ `docs/alignment/ALIGNMENT_2026-08-11.md` §3.2 for other components) that the current export has
37
+ never had for `file-input`. The real schema (40 variables, matching that report's own L5 count)
38
+ has:
39
+
40
+ - **Flat, non-state-scoped base properties and colors** (`properties_border-size`,
41
+ `properties_colors_{background-color,border-color,leading-icon,text-color,trailing-icon}`) —
42
+ much closer to `TextField`'s shape than `FileUpload`'s.
43
+ - **Only two states — `disabled` and `error`.** No `default` state (the flat properties above
44
+ are the default) and no `focus` state at all.
45
+ - **`layouts.{stacked,side-by-side}` each carrying their own `max-width`/`min-width`/
46
+ `top-bottom-margin`** — three properties per layout, not the single flat `max-width`/
47
+ `min-width` an early draft of this component assumed.
48
+
49
+ Every token actually referenced in `FileInput.module.css` was re-verified against this real list
50
+ (38 applied + 2 exempted = 40, zero gap on either adapter).
51
+
52
+ ## No forge-defined focus state — generic ring, same fallback as TextField
53
+
54
+ Since `file-input` has no `states.focus` axis, `:focus-visible` on the root falls back to the
55
+ generic `--recursica_brand_states_focus_*` box-shadow ring, exactly like `TextField`/`DatePicker`
56
+ already do for the same reason.
57
+
58
+ ## Disabled/error border-size intentionally unused
59
+
60
+ Unlike `FileUpload` (which has no border-size token at all to choose from), `file-input`'s export
61
+ does define real per-state `border-size` variables for `disabled` and `error`. They're
62
+ `recursica-ignore`d anyway and the flat `properties_border-size` is applied uniformly instead —
63
+ same house policy `TextField`/`DatePicker` already follow (a border that changes thickness across
64
+ states shifts the layout), just applied here to real rather than phantom tokens.
65
+
66
+ ## Why the root is a focusable, clickable `<div>` (a deliberate divergence from FileUpload)
67
+
68
+ `FileUpload`'s dropzone deliberately has no `onClick`/`role="button"`/`tabIndex` of its own — the
69
+ separate "Browse files" `<Button>` is its sole click/keyboard affordance, avoiding a
70
+ nested-interactive-element ambiguity (see `FILEUPLOAD_IMPLEMENTATION_NOTES.md`, "Not a nested
71
+ interactive element"). `FileInput` has no separate Browse button in the reference design — the
72
+ box itself plays that role, the same way a real `<input type="file">` is its own focusable,
73
+ clickable, `Enter`/`Space`-activatable control. So it needs to be one directly: `role="button"`,
74
+ `tabIndex={0}` when interactive, `onClick`/`onKeyDown` (`Enter`/`Space`) both call the same
75
+ `openFilePicker`, and an explicit `aria-label` (`browseLabel`, defaulting to `"Choose file"`)
76
+ since there's no native `<label for>` association available for a custom `div` the way a real
77
+ `<input>` gets one implicitly.
78
+
79
+ ## `multiple` defaults to `false`, unlike `FileUpload`'s `true`
80
+
81
+ The reference design shows "Single File" and "Multiple Files" as two distinct, deliberately-named
82
+ usages, and a single-line `TextField`-shaped control reads most naturally as single-value by
83
+ default — matching a native `<input type="file">`, which is single-file unless `multiple` is set.
84
+ `FileUpload`'s dropzone is the opposite by design (it defaults to accepting a batch).
85
+
86
+ ## Single-file mode replaces; it doesn't append
87
+
88
+ `onFilesAdded`/`onFileRemove` keep the exact same shape as `FileUpload`'s, but single-file mode's
89
+ effective cap is hardcoded to 1 (`currentCount` is never read from the existing `files` prop in
90
+ that mode) rather than counting the file already there — picking a new file is meant to replace
91
+ the old one, not be rejected as "over the limit." This is a documentation convention, not special
92
+ component state: see USAGE.md §2 for the "handlers typically replace, not append" note for
93
+ single-file consumers. Dropping more than one file onto a single-file control still routes the
94
+ extras to `onFilesRejected` via the same effective-cap-of-1 logic, with the default
95
+ `maxFilesMessage` reading `"Only one file is allowed"` instead of `FileUpload`'s
96
+ `"Maximum of N files allowed"` phrasing.
97
+
98
+ ## Trailing clear button
99
+
100
+ The clear-all affordance shown whenever `files.length > 0` is a real shared `Button`
101
+ (`variant="text" size="small"`, icon-only), not a bespoke `<span role="button">` — it gets real
102
+ button semantics and keyboard handling for free, the same reasoning as `Tree`'s expand/collapse
103
+ button (see `Tree.module.css`'s `.expandButton`). It's rendered through Button's own tokened
104
+ color/disabled states, so `file-input`'s own `properties_colors_trailing-icon` token (and its
105
+ `disabled`/`error` state variants) is `recursica-ignore`d rather than applied — it has no
106
+ "clear button is disabled" state of its own anyway, since `disabled` already omits interactivity
107
+ entirely. Clicking/activating it calls `onFileRemove` once per currently-selected file (reusing
108
+ the same callback `FileUpload`'s individual chip removal uses, rather than introducing a separate
109
+ `onClear` prop) — in single-file mode that's one call; in multiple-file mode it clears everything
110
+ at once, distinct from a chip's own individual remove icon. The icon itself defaults to the
111
+ built-in X glyph and is overridable via `clearIcon` — the same pattern as the leading `icon`,
112
+ giving Forge's `leading-icon`/`trailing-icon` token pair a matching pair of override props.
113
+
114
+ ## Why each chip is wrapped with its own `stopPropagation`
115
+
116
+ `FileUpload`'s chip list sits _below_ its dropzone, entirely outside the click-to-browse surface,
117
+ so a click on a chip's body never risks also opening the file picker. `FileInput`'s chip row lives
118
+ _inside_ the same clickable root, so each chip is wrapped in a thin `<span onClick={(e) =>
119
+ e.stopPropagation()}>` — blank space within the row (and the leading icon/placeholder/filename
120
+ text) still bubbles up to open the picker, but clicking directly on a chip's body doesn't also
121
+ trigger it. Chip's own remove icon already calls `stopPropagation` internally (see `Chip.tsx`), so
122
+ it needed no changes for this.
123
+
124
+ ## Keyboard navigation for the chip row
125
+
126
+ Same roving-tabindex model as `FileUpload`'s file list (`activeChipIndex`, `removeIconRefs`,
127
+ Left/Right/Up/Down roving, focus-survives-removal `useEffect`) — reused rather than reinvented,
128
+ and applies in single-file mode too (a one-chip roving group is a no-op but needs no special
129
+ casing). The only addition specific to `FileInput` is that `Tab` reaches the root control itself
130
+ first (since it's the click/keyboard surface for opening the picker), _then_ the chip row's
131
+ roving group, _then_ the trailing clear button as its own stop.
132
+
133
+ ## The chip row scrolls horizontally instead of wrapping or clipping
134
+
135
+ `.chipRow` uses `overflow-x: auto; overflow-y: hidden` rather than `FileUpload`'s file list, which
136
+ wraps onto multiple lines below the dropzone — `FileInput` is a fixed single-line, `min-height`d
137
+ control, so wrapping would grow it vertically. Enough chips to overflow the control's own width
138
+ scroll horizontally within it instead (mouse wheel/trackpad or a native scrollbar), same tradeoff
139
+ already made for `.value`'s ellipsis truncation. The native scrollbar itself is hidden
140
+ (`scrollbar-width: none`, `-ms-overflow-style: none`, `::-webkit-scrollbar { display: none }`) —
141
+ the control's `min-height` isn't tall enough to host a visible horizontal scrollbar without
142
+ clipping the chips, and scrolling (wheel/trackpad/drag) still works with it hidden.
143
+
144
+ ## Read-only vs disabled
145
+
146
+ `readOnly` renders the same content (placeholder/filename/chip row) but the root loses its
147
+ `role="button"` interactivity (no `tabIndex`, no click/keyboard/drag handlers), chips render with
148
+ no `removeLabel`/`onDelete` (so `Chip` itself renders no remove icon, same as `FileUpload`'s
149
+ read-only chips), and the trailing clear icon is omitted entirely. `disabled` keeps the control
150
+ structurally the same but inert (`tabIndex={-1}`, `aria-disabled`, no handlers, native `<input>`
151
+ disabled) — both are computed together as a single `interactive` flag used throughout, but remain
152
+ independently toggleable props (a `readOnly` control is never simultaneously `disabled` in
153
+ practice, but nothing enforces that at the type level, matching `FileUpload`'s own convention).
@@ -0,0 +1,268 @@
1
+ /* Brand-layer exemptions (recursica-allow-brand) — see recursica-token-analyzer README.md.
2
+ * Global hover/focus/disabled state tokens (recursica_variables_scoped.css header, 'Hover & Focus states' / 'Disabled state' — implicit rule for every interactive element; components must not define their own per-component treatment).
3
+ * recursica-allow-brand: --recursica_brand_states_focus_blur
4
+ * recursica-allow-brand: --recursica_brand_states_focus_border-size
5
+ * recursica-allow-brand: --recursica_brand_states_focus_color
6
+ * recursica-allow-brand: --recursica_brand_states_focus_margin
7
+ * recursica-allow-brand: --recursica_brand_states_hover_color
8
+ * recursica-allow-brand: --recursica_brand_states_hover_opacity
9
+ */
10
+
11
+ /* LAYOUT SPACING OVERRIDES:
12
+ - Sets the --form-control-margin-bottom spacing hook to map component-specific layout tokens.
13
+ - Also sets the --file-input-control-{max,min}-width hooks consumed inline in FileInput.tsx,
14
+ since max-width/min-width are split per layout variant (same shape as TextField). */
15
+ .layoutOverride {
16
+ --form-control-margin-bottom: var(
17
+ --recursica_ui-kit_components_file-input_variants_layouts_stacked_properties_top-bottom-margin
18
+ );
19
+ --file-input-control-max-width: var(
20
+ --recursica_ui-kit_components_file-input_variants_layouts_stacked_properties_max-width
21
+ );
22
+ --file-input-control-min-width: var(
23
+ --recursica_ui-kit_components_file-input_variants_layouts_stacked_properties_min-width
24
+ );
25
+ }
26
+
27
+ .layoutOverride[data-form-layout="side-by-side"] {
28
+ --form-control-margin-bottom: var(
29
+ --recursica_ui-kit_components_file-input_variants_layouts_side-by-side_properties_top-bottom-margin
30
+ );
31
+ --file-input-control-max-width: var(
32
+ --recursica_ui-kit_components_file-input_variants_layouts_side-by-side_properties_max-width
33
+ );
34
+ --file-input-control-min-width: var(
35
+ --recursica_ui-kit_components_file-input_variants_layouts_side-by-side_properties_min-width
36
+ );
37
+ }
38
+
39
+ /* HARDCODED VALUES:
40
+ - border-style: solid. Native structural rendering rule (matches TextField).
41
+ - outline: none. Bypassing the browser focus ring to rely strictly on the state cascade below.
42
+ - .root's cursor/position/overflow: structural, not a design-token concern. */
43
+
44
+ .root {
45
+ display: flex;
46
+ align-items: center;
47
+ position: relative;
48
+ box-sizing: border-box;
49
+ width: 100%;
50
+ max-width: var(--file-input-control-max-width);
51
+ min-width: var(--file-input-control-min-width);
52
+ min-height: var(
53
+ --recursica_ui-kit_components_file-input_properties_min-height
54
+ );
55
+ gap: var(--recursica_ui-kit_components_file-input_properties_icon-text-gap);
56
+ padding-top: var(
57
+ --recursica_ui-kit_components_file-input_properties_vertical-padding
58
+ );
59
+ padding-bottom: var(
60
+ --recursica_ui-kit_components_file-input_properties_vertical-padding
61
+ );
62
+ padding-left: var(
63
+ --recursica_ui-kit_components_file-input_properties_horizontal-padding
64
+ );
65
+ padding-right: var(
66
+ --recursica_ui-kit_components_file-input_properties_horizontal-padding
67
+ );
68
+ border-width: var(
69
+ --recursica_ui-kit_components_file-input_properties_border-size
70
+ );
71
+ border-style: solid;
72
+ border-radius: var(
73
+ --recursica_ui-kit_components_file-input_properties_border-radius
74
+ );
75
+ background-color: var(
76
+ --recursica_ui-kit_components_file-input_properties_colors_background-color
77
+ );
78
+ border-color: var(
79
+ --recursica_ui-kit_components_file-input_properties_colors_border-color
80
+ );
81
+ color: var(
82
+ --recursica_ui-kit_components_file-input_properties_colors_text-color
83
+ );
84
+ cursor: pointer;
85
+ outline: none;
86
+ }
87
+
88
+ .root[data-disabled="true"],
89
+ .root[data-readonly="true"] {
90
+ cursor: default;
91
+ }
92
+
93
+ .root > * {
94
+ position: relative;
95
+ }
96
+
97
+ /* Dragging-over state: reuses the generic hover overlay recipe (see Button.module.css) for the
98
+ background, and the shared "selected" border bridge var FormControlWrapper already exposes —
99
+ file-input has no color tokens of its own for this state. Same recipe as FileUpload's
100
+ dropzone; see "Dragging-over visual state" in FILEINPUT_IMPLEMENTATION_NOTES.md. */
101
+ .root::after {
102
+ content: "";
103
+ position: absolute;
104
+ inset: 0;
105
+ border-radius: inherit;
106
+ z-index: 0;
107
+ pointer-events: none;
108
+ transition: opacity 150ms ease;
109
+ opacity: 0;
110
+ background-color: var(--recursica_brand_states_hover_color);
111
+ }
112
+ .root[data-dragging="true"] {
113
+ border-color: var(--form-field-border-selected);
114
+ }
115
+ .root[data-dragging="true"]::after {
116
+ opacity: var(--recursica_brand_states_hover_opacity);
117
+ }
118
+
119
+ .leadingIcon {
120
+ display: flex;
121
+ flex: none;
122
+ width: var(--recursica_ui-kit_components_file-input_properties_icon-size);
123
+ height: var(--recursica_ui-kit_components_file-input_properties_icon-size);
124
+ color: var(
125
+ --recursica_ui-kit_components_file-input_properties_colors_leading-icon
126
+ );
127
+ }
128
+ .leadingIcon svg {
129
+ width: 100%;
130
+ height: 100%;
131
+ }
132
+
133
+ .content {
134
+ display: flex;
135
+ align-items: center;
136
+ flex: 1 1 auto;
137
+ min-width: 0; /* HARDCODE: lets the value/chip row actually shrink and ellipsize */
138
+ overflow: hidden;
139
+ }
140
+
141
+ .value {
142
+ font-family: var(
143
+ --recursica_ui-kit_components_file-input_properties_text_font-family
144
+ );
145
+ font-size: var(
146
+ --recursica_ui-kit_components_file-input_properties_text_font-size
147
+ );
148
+ font-style: var(
149
+ --recursica_ui-kit_components_file-input_properties_text_font-style
150
+ );
151
+ font-weight: var(
152
+ --recursica_ui-kit_components_file-input_properties_text_font-weight
153
+ );
154
+ letter-spacing: var(
155
+ --recursica_ui-kit_components_file-input_properties_text_letter-spacing
156
+ );
157
+ line-height: var(
158
+ --recursica_ui-kit_components_file-input_properties_text_line-height
159
+ );
160
+ text-decoration: var(
161
+ --recursica_ui-kit_components_file-input_properties_text_text-decoration
162
+ );
163
+ text-transform: var(
164
+ --recursica_ui-kit_components_file-input_properties_text_text-transform
165
+ );
166
+ width: 100%;
167
+ white-space: nowrap;
168
+ text-overflow: ellipsis;
169
+ /* HARDCODE: x-only clipping — clipping y too (plain overflow: hidden) cuts off descenders
170
+ (e.g. the "g" in "image.png"); same fix as Chip.module.css's .children. */
171
+ overflow-x: clip;
172
+ overflow-y: visible;
173
+ }
174
+
175
+ .value[data-placeholder="true"] {
176
+ opacity: var(
177
+ --recursica_ui-kit_components_file-input_properties_placeholder-opacity
178
+ );
179
+ }
180
+
181
+ .chipRow {
182
+ display: flex;
183
+ align-items: center;
184
+ flex-wrap: nowrap;
185
+ /* HARDCODE: x-only scroll — the chip list can exceed the control's own width (more files than
186
+ fit on one line), so it scrolls horizontally within the control instead of wrapping/growing
187
+ it or clipping the overflow away. */
188
+ overflow-x: auto;
189
+ overflow-y: hidden;
190
+ gap: var(--recursica_ui-kit_components_file-input_properties_icon-text-gap);
191
+ /* HARDCODE: scrollbar stays functional (still scrolls via wheel/trackpad/drag) but hidden —
192
+ the control isn't tall enough to host a visible scrollbar without clipping the chips. */
193
+ scrollbar-width: none; /* Firefox */
194
+ -ms-overflow-style: none; /* legacy Edge */
195
+ }
196
+ .chipRow::-webkit-scrollbar {
197
+ display: none; /* Chrome, Safari */
198
+ }
199
+
200
+ .chipWrapper {
201
+ display: flex;
202
+ min-width: 0;
203
+ flex: none;
204
+ }
205
+
206
+ /* Structural placement only — the button's own "text" variant/size="small" tokens (including its
207
+ own disabled state) own its visual appearance, same as Tree's .expandButton. */
208
+ .trailingIcon {
209
+ position: relative;
210
+ z-index: 1;
211
+ flex: none;
212
+ }
213
+
214
+ /* -------------------------------------
215
+ STATE CASCADE ARCHITECTURE
216
+ -------------------------------------- */
217
+
218
+ /* Focus State Mapping (Triggered internally via browser pseudo-class on the root control) */
219
+ /* file-input has no per-component focus colors (see EXEMPTIONS above); apply the generic focus
220
+ ring tokens as a box-shadow ring instead of a color swap (matches TextField/DatePicker). */
221
+ .root:focus-visible {
222
+ box-shadow:
223
+ 0 0 0 var(--recursica_brand_states_focus_border-size)
224
+ var(--recursica_brand_states_focus_color),
225
+ 0 0 var(--recursica_brand_states_focus_blur)
226
+ var(--recursica_brand_states_focus_margin)
227
+ var(--recursica_brand_states_focus_color);
228
+ }
229
+
230
+ /* Error State Mapping (Propagated strictly down from the wrapper DOM context) */
231
+ .root[data-error="true"] {
232
+ border-color: var(
233
+ --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_border-color
234
+ ) !important;
235
+ background-color: var(
236
+ --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_background-color
237
+ ) !important;
238
+ color: var(
239
+ --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_text-color
240
+ ) !important;
241
+ }
242
+ .root[data-error="true"] .leadingIcon {
243
+ color: var(
244
+ --recursica_ui-kit_components_file-input_variants_states_error_properties_colors_leading-icon
245
+ ) !important;
246
+ }
247
+
248
+ /* Disabled State Mapping (Propagated strictly down from the wrapper DOM context) */
249
+ .root[data-disabled="true"] {
250
+ border-color: var(
251
+ --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_border-color
252
+ ) !important;
253
+ background-color: var(
254
+ --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_background-color
255
+ ) !important;
256
+ color: var(
257
+ --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_text-color
258
+ ) !important;
259
+ opacity: var(
260
+ --recursica_ui-kit_components_file-input_variants_states_disabled_properties_opacity
261
+ ) !important;
262
+ cursor: not-allowed;
263
+ }
264
+ .root[data-disabled="true"] .leadingIcon {
265
+ color: var(
266
+ --recursica_ui-kit_components_file-input_variants_states_disabled_properties_colors_leading-icon
267
+ ) !important;
268
+ }