@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,362 @@
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_disabled
4
+ * recursica-allow-brand: --recursica_brand_states_hover_color
5
+ * recursica-allow-brand: --recursica_brand_states_hover_opacity
6
+ */
7
+
8
+ /* ==== ACCORDION CONTAINER ==== */
9
+ .root {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ display: flex;
13
+ flex-direction: column;
14
+
15
+ border-style: solid;
16
+ border-width: var(
17
+ --recursica_ui-kit_components_accordion_properties_border-size
18
+ );
19
+ border-radius: var(
20
+ --recursica_ui-kit_components_accordion_properties_border-radius
21
+ );
22
+ border-color: var(
23
+ --recursica_ui-kit_components_accordion_properties_colors_border-color
24
+ );
25
+ background-color: var(
26
+ --recursica_ui-kit_components_accordion_properties_colors_background-color
27
+ );
28
+ box-shadow: var(--recursica_ui-kit_components_accordion_properties_elevation);
29
+
30
+ max-width: var(--recursica_ui-kit_components_accordion_properties_max-width);
31
+ min-width: var(--recursica_ui-kit_components_accordion_properties_min-width);
32
+ padding: var(--recursica_ui-kit_components_accordion_properties_padding);
33
+
34
+ /* Ensure gaps between items */
35
+ gap: var(--recursica_ui-kit_components_accordion_properties_item-gap);
36
+ }
37
+
38
+ /* ==== ACCORDION ITEM ==== */
39
+ .item {
40
+ box-sizing: border-box;
41
+ margin: var(--recursica_ui-kit_components_accordion-item_properties_margin);
42
+ padding: var(--recursica_ui-kit_components_accordion-item_properties_padding);
43
+ position: relative;
44
+ transition: all 0.2s ease;
45
+
46
+ /* Overriding Mantine Default Borders natively */
47
+ border-bottom: none;
48
+
49
+ border-style: solid;
50
+ border-color: var(
51
+ --recursica_ui-kit_components_accordion-item_properties_colors_border-color
52
+ );
53
+ border-width: var(
54
+ --recursica_ui-kit_components_accordion-item_properties_border-size
55
+ );
56
+ border-bottom-color: var(
57
+ --recursica_ui-kit_components_accordion_properties_colors_divider-color
58
+ );
59
+ border-bottom-width: var(
60
+ --recursica_ui-kit_components_accordion_properties_divider-size
61
+ );
62
+ border-radius: var(
63
+ --recursica_ui-kit_components_accordion-item_properties_border-radius
64
+ );
65
+ box-shadow: var(
66
+ --recursica_ui-kit_components_accordion-item_properties_elevation
67
+ );
68
+ }
69
+ /* The collapsed/expanded background now lives on accordion-header (open/closed appearance),
70
+ applied via .control below, rather than on the item wrapper itself. */
71
+ .noDivider {
72
+ border-bottom: none !important;
73
+ border-bottom-width: 0 !important;
74
+ }
75
+
76
+ /* ==== ACCORDION CONTROL (HEADER) ==== */
77
+ .control {
78
+ box-sizing: border-box;
79
+ width: 100%;
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: space-between;
83
+
84
+ /* Re-apply gap defined by UI Kit for icons vs text */
85
+ gap: var(--recursica_ui-kit_components_accordion-header_properties_icon-gap);
86
+
87
+ /* Strip Mantine's baked padding directly */
88
+ padding: var(
89
+ --recursica_ui-kit_components_accordion-header_properties_vertical-padding
90
+ )
91
+ var(
92
+ --recursica_ui-kit_components_accordion-header_properties_horizontal-padding
93
+ );
94
+
95
+ /* Background is intentionally constant across collapsed/expanded (Forge doesn't apply a
96
+ background swap on expand, even though the token schema defines an "open" appearance color) */
97
+ background-color: var(
98
+ --recursica_ui-kit_components_accordion-header_variants_appearance_closed_properties_colors_background-color
99
+ );
100
+
101
+ /* Header's own border box, constant across collapsed/expanded (only its closed-state
102
+ border-color is used, matching the background decision above) */
103
+ border-style: solid;
104
+ border-width: var(
105
+ --recursica_ui-kit_components_accordion-header_properties_border-size
106
+ );
107
+ border-radius: var(
108
+ --recursica_ui-kit_components_accordion-header_properties_border-radius
109
+ );
110
+ border-color: var(
111
+ --recursica_ui-kit_components_accordion-header_variants_appearance_closed_properties_colors_border-color
112
+ );
113
+ box-shadow: var(
114
+ --recursica_ui-kit_components_accordion-header_properties_elevation
115
+ );
116
+
117
+ transition: background-color 0.15s ease;
118
+ position: relative;
119
+ z-index: 1;
120
+ color: var(
121
+ --recursica_ui-kit_components_accordion-header_variants_appearance_closed_properties_colors_text-color
122
+ );
123
+
124
+ /* Header Typography */
125
+ font-family: var(
126
+ --recursica_ui-kit_components_accordion-header_properties_text_font-family
127
+ );
128
+ font-size: var(
129
+ --recursica_ui-kit_components_accordion-header_properties_text_font-size
130
+ );
131
+ font-weight: var(
132
+ --recursica_ui-kit_components_accordion-header_properties_text_font-weight
133
+ );
134
+ font-style: var(
135
+ --recursica_ui-kit_components_accordion-header_properties_text_font-style
136
+ );
137
+ letter-spacing: var(
138
+ --recursica_ui-kit_components_accordion-header_properties_text_letter-spacing
139
+ );
140
+ line-height: var(
141
+ --recursica_ui-kit_components_accordion-header_properties_text_line-height
142
+ );
143
+ text-decoration: var(
144
+ --recursica_ui-kit_components_accordion-header_properties_text_text-decoration
145
+ );
146
+ text-transform: var(
147
+ --recursica_ui-kit_components_accordion-header_properties_text_text-transform
148
+ );
149
+ }
150
+
151
+ .item:global(.Mui-expanded) .control {
152
+ color: var(
153
+ --recursica_ui-kit_components_accordion-header_variants_appearance_open_properties_colors_text-color
154
+ );
155
+ }
156
+
157
+ /* Ensure inner native wrap aligns and has zero margins */
158
+ .control :global(.MuiAccordionSummary-content) {
159
+ margin: 0 !important;
160
+ display: flex;
161
+ align-items: center;
162
+ gap: inherit;
163
+ flex: 1;
164
+ min-width: 0; /* HARDCODE: a flex item's automatic min-width otherwise defaults to its
165
+ content's min-content size — since .label's text is `white-space: nowrap`, that min-content
166
+ size is the full unwrapped title width, which propagates up through this intermediate flex
167
+ item and blocks .label's own `min-width: 0` from letting text-overflow: ellipsis kick in at
168
+ all (title wraps/overflows the control instead of truncating). */
169
+ }
170
+
171
+ .control :global(.MuiAccordionSummary-content.Mui-expanded) {
172
+ margin: 0 !important;
173
+ }
174
+
175
+ /* MUI natively places hover states on the control node. We explicitly re-apply our own
176
+ constant background (MUI's native :hover CSS would otherwise show through) and use an
177
+ overlay ::after structure with the generic hover tokens for the actual hover tint; no per-item
178
+ hover-color/hover-opacity tokens exist anymore. */
179
+ .control:hover:not(:disabled) {
180
+ background-color: var(
181
+ --recursica_ui-kit_components_accordion-header_variants_appearance_closed_properties_colors_background-color
182
+ );
183
+ }
184
+ .control::after {
185
+ content: "";
186
+ position: absolute;
187
+ inset: 0;
188
+ border-radius: inherit;
189
+ z-index: -1;
190
+ pointer-events: none;
191
+ background-color: var(--recursica_brand_states_hover_color);
192
+ opacity: 0;
193
+ transition: opacity 150ms ease;
194
+ }
195
+ .control:hover:not(:disabled)::after {
196
+ opacity: var(--recursica_brand_states_hover_opacity);
197
+ }
198
+
199
+ /* MUI applies its own default disabled treatment on both the item root and the control
200
+ (`.Mui-disabled`, each with its own hardcoded background/opacity) — neutralized here so the
201
+ token-driven dim below is the single source of truth. */
202
+ .item:global(.Mui-disabled) {
203
+ background-color: transparent;
204
+ }
205
+ .control:global(.Mui-disabled) {
206
+ opacity: 1;
207
+ }
208
+
209
+ /* Dims the whole item — control and any currently-visible panel content alike — using the
210
+ generic disabled opacity token, same convention as every other disabled component in the
211
+ design system (no accordion-item-specific disabled token exists). MUI's own `disabled` prop
212
+ already blocks click/keyboard interaction on the control internally; this only handles the
213
+ visual dim. */
214
+ .item[data-disabled] {
215
+ opacity: var(--recursica_brand_states_disabled);
216
+ }
217
+
218
+ /* Label logic inside the Control wrapper */
219
+ .label {
220
+ flex: 1;
221
+ min-width: 0; /* HARDCODE: required for text-overflow ellipsis to take effect on a flex child */
222
+ text-align: left;
223
+ color: inherit;
224
+ padding: 0; /* Clear Mantine inner padding */
225
+ overflow: clip; /* HARDCODE: `hidden` clips descenders (e.g. "g") whenever the text_line-height
226
+ token is tighter than the font's natural ascent+descent; `overflow-clip-margin` gives ink a
227
+ small bleed allowance while still clipping genuinely overflowing text — same fix project-wide,
228
+ see Chip/FileInput's IMPLEMENTATION_NOTES.md for the original discovery. */
229
+ overflow-clip-margin: 0.35em;
230
+ white-space: nowrap;
231
+ text-overflow: ellipsis;
232
+ }
233
+
234
+ /* ==== CHEVRON / RIGHT ICON ==== */
235
+ .chevron {
236
+ flex-shrink: 0;
237
+ width: var(
238
+ --recursica_ui-kit_components_accordion-header_properties_icon-right-size
239
+ );
240
+ height: var(
241
+ --recursica_ui-kit_components_accordion-header_properties_icon-right-size
242
+ );
243
+ color: var(
244
+ --recursica_ui-kit_components_accordion-header_variants_appearance_closed_properties_colors_icon-color
245
+ );
246
+ margin: 0;
247
+ transition: transform 200ms ease;
248
+ display: flex;
249
+ align-items: center;
250
+ justify-content: center;
251
+ }
252
+ .chevron > * {
253
+ width: 100%;
254
+ height: 100%;
255
+ object-fit: contain;
256
+ }
257
+ /* Rotation itself comes from MUI's own `.MuiAccordionSummary-expandIconWrapper.Mui-expanded`,
258
+ which already wraps this span — rotating here too would double it back to 0deg. */
259
+ .item:global(.Mui-expanded) .chevron {
260
+ color: var(
261
+ --recursica_ui-kit_components_accordion-header_variants_appearance_open_properties_colors_icon-color
262
+ );
263
+ }
264
+
265
+ /* ==== LEFT ICON / CUSTOM ICONS ==== */
266
+ .iconLeftWrapper {
267
+ flex-shrink: 0;
268
+ display: flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ width: var(
272
+ --recursica_ui-kit_components_accordion-header_properties_icon-left-size
273
+ );
274
+ height: var(
275
+ --recursica_ui-kit_components_accordion-header_properties_icon-left-size
276
+ );
277
+ color: var(
278
+ --recursica_ui-kit_components_accordion-header_variants_appearance_closed_properties_colors_icon-color
279
+ );
280
+ }
281
+ .item:global(.Mui-expanded) .iconLeftWrapper {
282
+ color: var(
283
+ --recursica_ui-kit_components_accordion-header_variants_appearance_open_properties_colors_icon-color
284
+ );
285
+ }
286
+ .iconLeftWrapper > * {
287
+ width: 100%;
288
+ height: 100%;
289
+ object-fit: contain;
290
+ }
291
+
292
+ /* ==== ACCORDION PANEL (CONTENT) ==== */
293
+ .panel {
294
+ box-sizing: border-box;
295
+ margin: var(
296
+ --recursica_ui-kit_components_accordion-content_properties_margin
297
+ );
298
+ padding: 0; /* Overriding dynamic layout structure */
299
+ background-color: var(
300
+ --recursica_ui-kit_components_accordion-content_properties_colors_background-color
301
+ );
302
+ border-style: solid;
303
+ border-color: var(
304
+ --recursica_ui-kit_components_accordion-content_properties_colors_border-color
305
+ );
306
+ border-width: var(
307
+ --recursica_ui-kit_components_accordion-content_properties_border-size
308
+ );
309
+ border-radius: var(
310
+ --recursica_ui-kit_components_accordion-content_properties_border-radius
311
+ );
312
+ box-shadow: var(
313
+ --recursica_ui-kit_components_accordion-content_properties_elevation
314
+ );
315
+ }
316
+
317
+ .content {
318
+ box-sizing: border-box;
319
+ /* Strip Mantine padding and apply logic directly mapped */
320
+ padding: 0
321
+ var(
322
+ --recursica_ui-kit_components_accordion-content_properties_horizontal-padding
323
+ )
324
+ var(
325
+ --recursica_ui-kit_components_accordion-content_properties_bottom-padding
326
+ );
327
+
328
+ /* Apply offset gap explicitly calculated below header */
329
+ padding-top: var(
330
+ --recursica_ui-kit_components_accordion-content_properties_top-padding
331
+ );
332
+
333
+ color: var(
334
+ --recursica_ui-kit_components_accordion-content_properties_colors_text-color
335
+ );
336
+
337
+ /* Content Typography */
338
+ font-family: var(
339
+ --recursica_ui-kit_components_accordion-content_properties_text_font-family
340
+ );
341
+ font-size: var(
342
+ --recursica_ui-kit_components_accordion-content_properties_text_font-size
343
+ );
344
+ font-weight: var(
345
+ --recursica_ui-kit_components_accordion-content_properties_text_font-weight
346
+ );
347
+ font-style: var(
348
+ --recursica_ui-kit_components_accordion-content_properties_text_font-style
349
+ );
350
+ letter-spacing: var(
351
+ --recursica_ui-kit_components_accordion-content_properties_text_letter-spacing
352
+ );
353
+ line-height: var(
354
+ --recursica_ui-kit_components_accordion-content_properties_text_line-height
355
+ );
356
+ text-decoration: var(
357
+ --recursica_ui-kit_components_accordion-content_properties_text_text-decoration
358
+ );
359
+ text-transform: var(
360
+ --recursica_ui-kit_components_accordion-content_properties_text_text-transform
361
+ );
362
+ }
@@ -0,0 +1,198 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Accordion } from "./Accordion";
3
+ import { Layer } from "@recursica/adapter-common";
4
+
5
+ const SVGIcon = () => (
6
+ <svg
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ width="24"
9
+ height="24"
10
+ viewBox="0 0 24 24"
11
+ fill="none"
12
+ stroke="currentColor"
13
+ strokeWidth="2"
14
+ strokeLinecap="round"
15
+ strokeLinejoin="round"
16
+ >
17
+ <path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" />
18
+ </svg>
19
+ );
20
+
21
+ const ChevronIcon = () => (
22
+ <svg
23
+ width="24"
24
+ height="24"
25
+ viewBox="0 0 24 24"
26
+ fill="none"
27
+ xmlns="http://www.w3.org/2000/svg"
28
+ >
29
+ <path
30
+ d="M20.0306 9.53062L12.5306 17.0306C12.461 17.1003 12.3783 17.1557 12.2872 17.1934C12.1962 17.2312 12.0986 17.2506 12 17.2506C11.9014 17.2506 11.8038 17.2312 11.7128 17.1934C11.6218 17.1557 11.539 17.1003 11.4694 17.0306L3.96938 9.53062C3.82865 9.38988 3.74959 9.19901 3.74959 8.99999C3.74959 8.80097 3.82865 8.61009 3.96938 8.46936C4.11011 8.32863 4.30098 8.24957 4.50001 8.24957C4.69903 8.24957 4.8899 8.32863 5.03063 8.46936L12 15.4397L18.9694 8.46936C19.0391 8.39968 19.1218 8.34441 19.2128 8.30669C19.3039 8.26898 19.4015 8.24957 19.5 8.24957C19.5986 8.24957 19.6961 8.26898 19.7872 8.30669C19.8782 8.34441 19.9609 8.39968 20.0306 8.46936C20.1003 8.53905 20.1556 8.62177 20.1933 8.71282C20.231 8.80386 20.2504 8.90144 20.2504 8.99999C20.2504 9.09854 20.231 9.19612 20.1933 9.28716C20.1556 9.37821 20.1003 9.46093 20.0306 9.53062Z"
31
+ fill="currentColor"
32
+ />
33
+ </svg>
34
+ );
35
+
36
+ const meta: Meta<typeof Accordion> = {
37
+ title: "UI-Kit/Accordion",
38
+ component: Accordion,
39
+ tags: ["autodocs"],
40
+ parameters: {
41
+ docs: {
42
+ description: {
43
+ component: `
44
+ The \`Accordion\` component intelligently wraps \`@mantine/core\`'s underlying Accordion layers while applying strict native design system mapping via \`recursica_variables_scoped.css\`.
45
+
46
+ ### Hybrid Composition API (Smart-Rendering)
47
+ To maximize flexibility while strictly aligning with the explicit Recursica design logic, the \`AccordionItem\` operates utilizing a **Hybrid Smart-Rendering Flow**:
48
+
49
+ 1. **Auto-Construction (Explicit Mapping)**:
50
+ If you supply the explicitly outlined Recursica properties (\`title\`, \`leftIcon\`) directly onto \`<Accordion.Item>\`, the component auto-generates the necessary \`<Accordion.Control>\` DOM layer inherently bridging the icons and titles visually while leaving the raw \`children\` wrapped neatly as the \`<Accordion.Panel>\`.
51
+
52
+ 2. **Graceful Falldown (Raw Composability)**:
53
+ If you deliberately omit the \`title\` property, the entire mapping system gracefully falls backward yielding exactly to the raw \`@mantine/core\` composition model. Under this context, you must inject your localized \`<Accordion.Control>\` and \`<Accordion.Panel>\` configurations completely manually.
54
+
55
+ ### Architecture Warning (\`open\`)
56
+ To structurally protect the parent wrapper's core transitions tracking architecture (\`<Accordion value="...">\`), this configuration explicitly rejects mapping isolated \`open={true}\` object states natively on specific configurations. Use Mantine's inherent sibling arrays matching the corresponding active value map!
57
+ `,
58
+ },
59
+ },
60
+ },
61
+ };
62
+
63
+ export default meta;
64
+
65
+ export const Default: StoryObj<typeof Accordion> = {
66
+ render: () => {
67
+ return (
68
+ <Layer layer={0} style={{ padding: "24px" }}>
69
+ <Accordion defaultValue="item-1" chevron={<ChevronIcon />}>
70
+ <Accordion.Item value="item-1">
71
+ <Accordion.Control>Billing and Membership</Accordion.Control>
72
+ <Accordion.Panel>
73
+ You can manage your billing directly from the dashboard tab. All
74
+ payments are processed automatically.
75
+ </Accordion.Panel>
76
+ </Accordion.Item>
77
+
78
+ <Accordion.Item value="item-2">
79
+ <Accordion.Control>Refund Policy</Accordion.Control>
80
+ <Accordion.Panel>
81
+ We offer a 30-day money-back guarantee for all new subscriptions.
82
+ </Accordion.Panel>
83
+ </Accordion.Item>
84
+
85
+ <Accordion.Item value="item-3">
86
+ <Accordion.Control>Technical Support</Accordion.Control>
87
+ <Accordion.Panel>
88
+ Our support team is available 24/7 via live chat or email.
89
+ </Accordion.Panel>
90
+ </Accordion.Item>
91
+ </Accordion>
92
+ </Layer>
93
+ );
94
+ },
95
+ };
96
+
97
+ export const WithIcons: StoryObj<typeof Accordion> = {
98
+ render: () => {
99
+ return (
100
+ <Layer layer={0} style={{ padding: "24px" }}>
101
+ <Accordion defaultValue="security" chevron={<ChevronIcon />}>
102
+ <Accordion.Item value="security">
103
+ <Accordion.Control leftIcon={<SVGIcon />}>
104
+ Security Settings
105
+ </Accordion.Control>
106
+ <Accordion.Panel>
107
+ Enable two-factor authentication (2FA) and monitor active sessions
108
+ below.
109
+ </Accordion.Panel>
110
+ </Accordion.Item>
111
+
112
+ <Accordion.Item value="privacy">
113
+ <Accordion.Control leftIcon={<SVGIcon />}>
114
+ Privacy Configuration
115
+ </Accordion.Control>
116
+ <Accordion.Panel>
117
+ Choose what data is shared with our analytics partners.
118
+ </Accordion.Panel>
119
+ </Accordion.Item>
120
+ </Accordion>
121
+ </Layer>
122
+ );
123
+ },
124
+ };
125
+
126
+ export const LongTitleTruncation: StoryObj<typeof Accordion> = {
127
+ render: () => {
128
+ return (
129
+ // `style` is stripped from Accordion itself (only passes through with overStyled);
130
+ // constrain width on a plain wrapper div instead to force truncation.
131
+ <Layer layer={0} style={{ padding: "24px" }}>
132
+ <div style={{ maxWidth: 320 }}>
133
+ <Accordion defaultValue="long-title" chevron={<ChevronIcon />}>
134
+ <Accordion.Item value="long-title">
135
+ <Accordion.Control leftIcon={<SVGIcon />}>
136
+ This is a deliberately very long accordion item title used to
137
+ verify that overflowing text truncates with a CSS ellipsis
138
+ instead of wrapping or overflowing the header
139
+ </Accordion.Control>
140
+ <Accordion.Panel>
141
+ The header label above should truncate to a single line with a
142
+ trailing ellipsis (…) rather than wrapping onto multiple lines
143
+ or pushing the chevron out of view.
144
+ </Accordion.Panel>
145
+ </Accordion.Item>
146
+
147
+ <Accordion.Item value="short-title">
148
+ <Accordion.Control leftIcon={<SVGIcon />}>
149
+ Short Title
150
+ </Accordion.Control>
151
+ <Accordion.Panel>
152
+ A short title in the same accordion for visual comparison.
153
+ </Accordion.Panel>
154
+ </Accordion.Item>
155
+ </Accordion>
156
+ </div>
157
+ </Layer>
158
+ );
159
+ },
160
+ };
161
+
162
+ export const Disabled: StoryObj<typeof Accordion> = {
163
+ render: () => {
164
+ return (
165
+ <Layer layer={0} style={{ padding: "24px" }}>
166
+ <Accordion defaultValue="expanded-disabled" chevron={<ChevronIcon />}>
167
+ <Accordion.Item value="expanded-disabled" disabled>
168
+ <Accordion.Control leftIcon={<SVGIcon />}>
169
+ Expanded and Disabled
170
+ </Accordion.Control>
171
+ <Accordion.Panel>
172
+ This item starts expanded so the panel content's dimming can be
173
+ verified alongside the control's, not just the collapsed header.
174
+ </Accordion.Panel>
175
+ </Accordion.Item>
176
+
177
+ <Accordion.Item value="collapsed-disabled" disabled>
178
+ <Accordion.Control leftIcon={<SVGIcon />}>
179
+ Collapsed and Disabled
180
+ </Accordion.Control>
181
+ <Accordion.Panel>
182
+ Clicking or tabbing to this control should have no effect.
183
+ </Accordion.Panel>
184
+ </Accordion.Item>
185
+
186
+ <Accordion.Item value="enabled">
187
+ <Accordion.Control leftIcon={<SVGIcon />}>
188
+ Enabled, for Comparison
189
+ </Accordion.Control>
190
+ <Accordion.Panel>
191
+ A normal, interactive item alongside the disabled ones above.
192
+ </Accordion.Panel>
193
+ </Accordion.Item>
194
+ </Accordion>
195
+ </Layer>
196
+ );
197
+ },
198
+ };
@@ -0,0 +1 @@
1
+ // Placeholder for future Accordion component tests. Add tests here if/when needed.