@fabio.caffarello/react-design-system 1.7.0 → 1.8.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 (460) hide show
  1. package/README.md +48 -3
  2. package/dist/docs/components/ComponentStatusTable.d.ts +11 -0
  3. package/dist/ui/atoms/Accordion/Accordion.d.ts +34 -0
  4. package/dist/ui/atoms/Accordion/Accordion.stories.d.ts +11 -0
  5. package/dist/ui/atoms/Accordion/Accordion.test.d.ts +1 -0
  6. package/dist/ui/atoms/Accordion/index.d.ts +2 -0
  7. package/dist/ui/atoms/Avatar/Avatar.d.ts +30 -0
  8. package/dist/ui/atoms/Avatar/Avatar.stories.d.ts +13 -0
  9. package/dist/ui/atoms/Avatar/Avatar.test.d.ts +1 -0
  10. package/dist/ui/atoms/Avatar/AvatarGroup.d.ts +26 -0
  11. package/dist/ui/atoms/Avatar/index.d.ts +9 -0
  12. package/dist/ui/atoms/Badge/Badge.d.ts +14 -6
  13. package/dist/ui/atoms/Badge/Badge.stories.d.ts +8 -9
  14. package/dist/ui/atoms/BoxWrapper/BoxWrapper.d.ts +3 -3
  15. package/dist/ui/atoms/BoxWrapper/BoxWrapper.test.d.ts +1 -0
  16. package/dist/ui/atoms/Button/Button.d.ts +32 -10
  17. package/dist/ui/atoms/Button/Button.stories.d.ts +7 -0
  18. package/dist/ui/atoms/Button/Button.test.d.ts +1 -0
  19. package/dist/ui/atoms/Checkbox/Checkbox.d.ts +2 -1
  20. package/dist/ui/atoms/Collapsible/Collapsible.stories.d.ts +2 -0
  21. package/dist/ui/atoms/Info/Info.d.ts +2 -3
  22. package/dist/ui/atoms/Info/Info.test.d.ts +1 -0
  23. package/dist/ui/atoms/Input/Input.d.ts +14 -4
  24. package/dist/ui/atoms/Input/Input.stories.d.ts +6 -0
  25. package/dist/ui/atoms/Popover/Popover.d.ts +35 -0
  26. package/dist/ui/atoms/Popover/Popover.stories.d.ts +11 -0
  27. package/dist/ui/atoms/Popover/Popover.test.d.ts +1 -0
  28. package/dist/ui/atoms/Popover/index.d.ts +2 -0
  29. package/dist/ui/atoms/Progress/Progress.d.ts +33 -0
  30. package/dist/ui/atoms/Progress/Progress.stories.d.ts +12 -0
  31. package/dist/ui/atoms/Progress/Progress.test.d.ts +1 -0
  32. package/dist/ui/atoms/Select/Select.d.ts +18 -6
  33. package/dist/ui/atoms/Select/Select.stories.d.ts +11 -8
  34. package/dist/ui/atoms/Separator/Separator.d.ts +23 -0
  35. package/dist/ui/atoms/Separator/Separator.stories.d.ts +10 -0
  36. package/dist/ui/atoms/Separator/Separator.test.d.ts +1 -0
  37. package/dist/ui/atoms/Separator/index.d.ts +2 -0
  38. package/dist/ui/atoms/Skeleton/Skeleton.d.ts +1 -1
  39. package/dist/ui/atoms/Skeleton/Skeleton.stories.d.ts +24 -0
  40. package/dist/ui/atoms/Slider/Slider.d.ts +45 -0
  41. package/dist/ui/atoms/Slider/Slider.stories.d.ts +13 -0
  42. package/dist/ui/atoms/Slider/Slider.test.d.ts +1 -0
  43. package/dist/ui/atoms/Slider/index.d.ts +2 -0
  44. package/dist/ui/atoms/Spinner/Spinner.d.ts +22 -0
  45. package/dist/ui/atoms/Spinner/Spinner.stories.d.ts +9 -0
  46. package/dist/ui/atoms/Spinner/Spinner.test.d.ts +1 -0
  47. package/dist/ui/atoms/Switch/Switch.d.ts +28 -0
  48. package/dist/ui/atoms/Switch/Switch.stories.d.ts +11 -0
  49. package/dist/ui/atoms/Switch/Switch.test.d.ts +1 -0
  50. package/dist/ui/atoms/Switch/index.d.ts +2 -0
  51. package/dist/ui/atoms/Tooltip/Tooltip.d.ts +2 -1
  52. package/dist/ui/atoms/Tooltip/Tooltip.stories.d.ts +17 -0
  53. package/dist/ui/atoms/index.d.ts +20 -3
  54. package/dist/ui/index.d.ts +6 -1
  55. package/dist/ui/molecules/Card/Card.d.ts +6 -2
  56. package/dist/ui/molecules/Card/Card.stories.d.ts +2 -0
  57. package/dist/ui/molecules/ColorPicker/ColorPicker.d.ts +28 -0
  58. package/dist/ui/molecules/ColorPicker/ColorPicker.stories.d.ts +12 -0
  59. package/dist/ui/molecules/ColorPicker/ColorPicker.test.d.ts +1 -0
  60. package/dist/ui/molecules/ColorPicker/index.d.ts +2 -0
  61. package/dist/ui/molecules/DatePicker/DatePicker.d.ts +74 -0
  62. package/dist/ui/molecules/DatePicker/DatePicker.stories.d.ts +12 -0
  63. package/dist/ui/molecules/DatePicker/DatePicker.test.d.ts +1 -0
  64. package/dist/ui/molecules/DatePicker/DatePickerCalendar.d.ts +6 -0
  65. package/dist/ui/molecules/DatePicker/DatePickerContext.d.ts +28 -0
  66. package/dist/ui/molecules/DatePicker/DatePickerInput.d.ts +9 -0
  67. package/dist/ui/molecules/DatePicker/DatePickerProvider.d.ts +23 -0
  68. package/dist/ui/molecules/DatePicker/index.d.ts +14 -0
  69. package/dist/ui/molecules/Dropdown/Dropdown.d.ts +2 -1
  70. package/dist/ui/molecules/Dropdown/Dropdown.stories.d.ts +13 -0
  71. package/dist/ui/molecules/EmptyState/EmptyState.stories.d.ts +22 -0
  72. package/dist/ui/molecules/FileUpload/FileUpload.d.ts +37 -0
  73. package/dist/ui/molecules/FileUpload/FileUpload.stories.d.ts +12 -0
  74. package/dist/ui/molecules/FileUpload/FileUpload.test.d.ts +1 -0
  75. package/dist/ui/molecules/FileUpload/index.d.ts +2 -0
  76. package/dist/ui/molecules/Form/Form.d.ts +29 -4
  77. package/dist/ui/molecules/Form/Form.stories.d.ts +2 -0
  78. package/dist/ui/molecules/Form/FormContext.d.ts +17 -0
  79. package/dist/ui/molecules/Form/FormField.d.ts +36 -0
  80. package/dist/ui/molecules/Form/FormProvider.d.ts +14 -0
  81. package/dist/ui/molecules/Form/index.d.ts +13 -0
  82. package/dist/ui/molecules/Form/useFormFieldArray.d.ts +28 -0
  83. package/dist/ui/molecules/InputWithLabel/InputWithLabel.test.d.ts +1 -0
  84. package/dist/ui/molecules/Rating/Rating.d.ts +33 -0
  85. package/dist/ui/molecules/Rating/Rating.stories.d.ts +13 -0
  86. package/dist/ui/molecules/Rating/Rating.test.d.ts +1 -0
  87. package/dist/ui/molecules/Rating/index.d.ts +2 -0
  88. package/dist/ui/molecules/SearchInput/SearchInput.d.ts +24 -0
  89. package/dist/ui/molecules/SearchInput/SearchInput.stories.d.ts +10 -0
  90. package/dist/ui/molecules/SearchInput/SearchInput.test.d.ts +1 -0
  91. package/dist/ui/molecules/SearchInput/index.d.ts +2 -0
  92. package/dist/ui/molecules/SidebarHeader/SidebarHeader.test.d.ts +1 -0
  93. package/dist/ui/molecules/TableActions/TableActions.d.ts +31 -0
  94. package/dist/ui/molecules/TableActions/TableActions.stories.d.ts +7 -0
  95. package/dist/ui/molecules/TableActions/TableActions.test.d.ts +1 -0
  96. package/dist/ui/molecules/TableFilters/TableFilters.d.ts +37 -0
  97. package/dist/ui/molecules/TableFilters/TableFilters.stories.d.ts +7 -0
  98. package/dist/ui/molecules/TableFilters/TableFilters.test.d.ts +1 -0
  99. package/dist/ui/molecules/TablePagination/TablePagination.d.ts +29 -0
  100. package/dist/ui/molecules/TablePagination/TablePagination.stories.d.ts +8 -0
  101. package/dist/ui/molecules/TablePagination/TablePagination.test.d.ts +1 -0
  102. package/dist/ui/molecules/Tabs/Tabs.d.ts +15 -0
  103. package/dist/ui/molecules/Tabs/Tabs.stories.d.ts +10 -0
  104. package/dist/ui/molecules/Tabs/Tabs.test.d.ts +1 -0
  105. package/dist/ui/molecules/Tabs/TabsContent.d.ts +14 -0
  106. package/dist/ui/molecules/Tabs/TabsContext.d.ts +18 -0
  107. package/dist/ui/molecules/Tabs/TabsList.d.ts +12 -0
  108. package/dist/ui/molecules/Tabs/TabsProvider.d.ts +16 -0
  109. package/dist/ui/molecules/Tabs/TabsTrigger.d.ts +13 -0
  110. package/dist/ui/molecules/Tabs/index.d.ts +17 -0
  111. package/dist/ui/molecules/TimePicker/TimePicker.d.ts +29 -0
  112. package/dist/ui/molecules/TimePicker/TimePicker.stories.d.ts +12 -0
  113. package/dist/ui/molecules/TimePicker/TimePicker.test.d.ts +1 -0
  114. package/dist/ui/molecules/TimePicker/index.d.ts +2 -0
  115. package/dist/ui/molecules/index.d.ts +13 -5
  116. package/dist/ui/organisms/CommandPalette/CommandPalette.d.ts +37 -0
  117. package/dist/ui/organisms/CommandPalette/CommandPalette.stories.d.ts +11 -0
  118. package/dist/ui/organisms/CommandPalette/CommandPalette.test.d.ts +1 -0
  119. package/dist/ui/organisms/CommandPalette/index.d.ts +2 -0
  120. package/dist/ui/organisms/DataGrid/DataGrid.d.ts +84 -0
  121. package/dist/ui/organisms/DataGrid/DataGrid.stories.d.ts +14 -0
  122. package/dist/ui/organisms/DataGrid/DataGrid.test.d.ts +1 -0
  123. package/dist/ui/organisms/DataGrid/index.d.ts +2 -0
  124. package/dist/ui/organisms/Dialog/AlertDialog.d.ts +34 -0
  125. package/dist/ui/organisms/Dialog/Dialog.d.ts +58 -0
  126. package/dist/ui/organisms/Dialog/Dialog.stories.d.ts +13 -0
  127. package/dist/ui/organisms/Dialog/Dialog.test.d.ts +1 -0
  128. package/dist/ui/organisms/Dialog/DialogClose.d.ts +8 -0
  129. package/dist/ui/organisms/Dialog/DialogContent.d.ts +8 -0
  130. package/dist/ui/organisms/Dialog/DialogContext.d.ts +10 -0
  131. package/dist/ui/organisms/Dialog/DialogDescription.d.ts +4 -0
  132. package/dist/ui/organisms/Dialog/DialogFooter.d.ts +5 -0
  133. package/dist/ui/organisms/Dialog/DialogHeader.d.ts +5 -0
  134. package/dist/ui/organisms/Dialog/DialogProvider.d.ts +10 -0
  135. package/dist/ui/organisms/Dialog/DialogTitle.d.ts +5 -0
  136. package/dist/ui/organisms/Dialog/DialogTrigger.d.ts +6 -0
  137. package/dist/ui/organisms/Dialog/index.d.ts +22 -0
  138. package/dist/ui/organisms/Sidebar/Sidebar.d.ts +7 -4
  139. package/dist/ui/organisms/Sidebar/SidebarGroup/SidebarGroup.d.ts +27 -0
  140. package/dist/ui/organisms/Sidebar/SidebarGroup/SidebarGroup.stories.d.ts +11 -0
  141. package/dist/ui/organisms/Sidebar/SidebarGroup/SidebarGroup.test.d.ts +1 -0
  142. package/dist/ui/organisms/Sidebar/SidebarHeader/SidebarHeader.d.ts +19 -0
  143. package/dist/ui/organisms/Sidebar/SidebarHeader/SidebarHeader.test.d.ts +1 -0
  144. package/dist/ui/organisms/Sidebar/SidebarItem/SidebarItem.d.ts +23 -0
  145. package/dist/ui/organisms/Sidebar/SidebarItem/SidebarItem.stories.d.ts +10 -0
  146. package/dist/ui/organisms/Sidebar/SidebarItem/SidebarItem.test.d.ts +1 -0
  147. package/dist/ui/organisms/Sidebar/index.d.ts +8 -0
  148. package/dist/ui/organisms/Stepper/Stepper.d.ts +40 -0
  149. package/dist/ui/organisms/Stepper/Stepper.stories.d.ts +12 -0
  150. package/dist/ui/organisms/Stepper/Stepper.test.d.ts +1 -0
  151. package/dist/ui/organisms/Stepper/index.d.ts +2 -0
  152. package/dist/ui/organisms/Table/Table.d.ts +84 -16
  153. package/dist/ui/organisms/Table/Table.stories.d.ts +15 -0
  154. package/dist/ui/organisms/Table/TableActions/TableActions.d.ts +31 -0
  155. package/dist/ui/organisms/Table/TableActions/TableActions.stories.d.ts +7 -0
  156. package/dist/ui/organisms/Table/TableActions/TableActions.test.d.ts +1 -0
  157. package/dist/ui/organisms/Table/TableActions.d.ts +13 -0
  158. package/dist/ui/organisms/Table/TableBody.d.ts +12 -0
  159. package/dist/ui/organisms/Table/TableCell.d.ts +14 -0
  160. package/dist/ui/organisms/Table/TableContext.d.ts +75 -0
  161. package/dist/ui/organisms/Table/TableEmptyState.d.ts +11 -0
  162. package/dist/ui/organisms/Table/TableFilters/TableFilters.d.ts +37 -0
  163. package/dist/ui/organisms/Table/TableFilters/TableFilters.stories.d.ts +7 -0
  164. package/dist/ui/organisms/Table/TableFilters/TableFilters.test.d.ts +1 -0
  165. package/dist/ui/organisms/Table/TableFilters.d.ts +12 -0
  166. package/dist/ui/organisms/Table/TableHeader.d.ts +10 -0
  167. package/dist/ui/organisms/Table/TableHeaderCell.d.ts +18 -0
  168. package/dist/ui/organisms/Table/TableHeaderRow.d.ts +10 -0
  169. package/dist/ui/organisms/Table/TablePagination/TablePagination.d.ts +29 -0
  170. package/dist/ui/organisms/Table/TablePagination/TablePagination.stories.d.ts +8 -0
  171. package/dist/ui/organisms/Table/TablePagination/TablePagination.test.d.ts +1 -0
  172. package/dist/ui/organisms/Table/TablePagination.d.ts +14 -0
  173. package/dist/ui/organisms/Table/TableProvider.d.ts +55 -0
  174. package/dist/ui/organisms/Table/TableRow.d.ts +14 -0
  175. package/dist/ui/organisms/Table/TableTypes.d.ts +8 -0
  176. package/dist/ui/organisms/Table/index.d.ts +30 -0
  177. package/dist/ui/organisms/Table/useColumnResizing.d.ts +39 -0
  178. package/dist/ui/organisms/Table/useVirtualScrolling.d.ts +35 -0
  179. package/dist/ui/organisms/Timeline/Timeline.d.ts +34 -0
  180. package/dist/ui/organisms/Timeline/Timeline.stories.d.ts +12 -0
  181. package/dist/ui/organisms/Timeline/Timeline.test.d.ts +1 -0
  182. package/dist/ui/organisms/Timeline/index.d.ts +2 -0
  183. package/dist/ui/organisms/Toast/Toast.d.ts +8 -0
  184. package/dist/ui/organisms/Toast/Toast.stories.d.ts +14 -0
  185. package/dist/ui/organisms/Toast/Toast.test.d.ts +1 -0
  186. package/dist/ui/organisms/Toast/ToastContainer.d.ts +5 -0
  187. package/dist/ui/organisms/Toast/ToastContext.d.ts +21 -0
  188. package/dist/ui/organisms/Toast/ToastProvider.d.ts +7 -0
  189. package/dist/ui/organisms/Toast/index.d.ts +15 -0
  190. package/dist/ui/organisms/Toast/useToast.d.ts +35 -0
  191. package/dist/ui/organisms/index.d.ts +12 -2
  192. package/dist/ui/providers/AdvancedThemeProvider.d.ts +52 -0
  193. package/dist/ui/providers/index.d.ts +9 -0
  194. package/dist/ui/themes/ThemeBuilder.d.ts +28 -0
  195. package/dist/ui/themes/ThemeRegistry.d.ts +55 -0
  196. package/dist/ui/themes/index.d.ts +9 -0
  197. package/dist/ui/themes/types.d.ts +48 -0
  198. package/dist/ui/themes/utils.d.ts +21 -0
  199. package/dist/ui/tokens/TokenVisualizations.d.ts +41 -0
  200. package/dist/ui/tokens/animations.d.ts +65 -0
  201. package/dist/ui/tokens/borders.d.ts +61 -0
  202. package/dist/ui/tokens/gradients.d.ts +55 -0
  203. package/dist/ui/tokens/index.d.ts +31 -0
  204. package/dist/ui/tokens/opacity.d.ts +51 -0
  205. package/dist/ui/tokens/radius.d.ts +45 -0
  206. package/dist/ui/tokens/shadows.d.ts +42 -0
  207. package/dist/ui/tokens/themes/dark.d.ts +26 -26
  208. package/dist/ui/tokens/themes/light.d.ts +26 -26
  209. package/dist/ui/tokens/tokens.factory.d.ts +42 -0
  210. package/dist/ui/tokens/z-index.d.ts +44 -0
  211. package/dist/ui/utils/index.d.ts +6 -0
  212. package/package.json +50 -6
  213. package/src/docs/Accessibility.mdx +402 -0
  214. package/src/docs/BestPractices.mdx +315 -0
  215. package/src/docs/ComponentComposition.mdx +381 -0
  216. package/src/docs/ComponentStatus.mdx +177 -0
  217. package/src/docs/DesignSystem.mdx +121 -0
  218. package/src/docs/GettingStarted.mdx +284 -0
  219. package/src/docs/MigrationGuide.mdx +297 -0
  220. package/src/docs/Performance.mdx +206 -0
  221. package/src/docs/components/ComponentStatusTable.tsx +184 -0
  222. package/src/setupTests.ts +32 -0
  223. package/src/ui/atoms/Accordion/Accordion.stories.tsx +147 -0
  224. package/src/ui/atoms/Accordion/Accordion.test.tsx +86 -0
  225. package/src/ui/atoms/Accordion/Accordion.tsx +147 -0
  226. package/src/ui/atoms/Accordion/index.ts +2 -0
  227. package/src/ui/atoms/Avatar/Avatar.stories.tsx +226 -0
  228. package/src/ui/atoms/Avatar/Avatar.test.tsx +233 -0
  229. package/src/ui/atoms/Avatar/Avatar.tsx +128 -0
  230. package/src/ui/atoms/Avatar/AvatarGroup.tsx +96 -0
  231. package/src/ui/atoms/Avatar/index.ts +11 -0
  232. package/src/ui/atoms/Badge/Badge.stories.tsx +65 -56
  233. package/src/ui/atoms/Badge/Badge.test.tsx +27 -50
  234. package/src/ui/atoms/Badge/Badge.tsx +70 -27
  235. package/src/ui/atoms/BoxWrapper/BoxWrapper.stories.tsx +1 -1
  236. package/src/ui/atoms/BoxWrapper/BoxWrapper.test.tsx +27 -0
  237. package/src/ui/atoms/BoxWrapper/BoxWrapper.tsx +5 -2
  238. package/src/ui/atoms/Button/Button.stories.tsx +130 -1
  239. package/src/ui/atoms/Button/Button.test.tsx +233 -0
  240. package/src/ui/atoms/Button/Button.tsx +160 -53
  241. package/src/ui/atoms/Checkbox/Checkbox.tsx +14 -1
  242. package/src/ui/atoms/Collapsible/Collapsible.stories.tsx +47 -1
  243. package/src/ui/atoms/Collapsible/Collapsible.test.tsx +36 -24
  244. package/src/ui/atoms/Collapsible/Collapsible.tsx +9 -1
  245. package/src/ui/atoms/ErrorMessage/ErrorMessage.stories.tsx +1 -1
  246. package/src/ui/atoms/Info/Info.stories.tsx +1 -1
  247. package/src/ui/atoms/Info/Info.test.tsx +45 -0
  248. package/src/ui/atoms/Info/Info.tsx +2 -2
  249. package/src/ui/atoms/Input/Input.stories.tsx +80 -0
  250. package/src/ui/atoms/Input/Input.test.tsx +190 -36
  251. package/src/ui/atoms/Input/Input.tsx +144 -25
  252. package/src/ui/atoms/Label/Label.stories.tsx +1 -1
  253. package/src/ui/atoms/NavLink/NavLink.stories.tsx +1 -1
  254. package/src/ui/atoms/Popover/Popover.stories.tsx +157 -0
  255. package/src/ui/atoms/Popover/Popover.test.tsx +80 -0
  256. package/src/ui/atoms/Popover/Popover.tsx +256 -0
  257. package/src/ui/atoms/Popover/index.ts +2 -0
  258. package/src/ui/atoms/Progress/Progress.css +17 -0
  259. package/src/ui/atoms/Progress/Progress.stories.tsx +170 -0
  260. package/src/ui/atoms/Progress/Progress.test.tsx +134 -0
  261. package/src/ui/atoms/Progress/Progress.tsx +138 -0
  262. package/src/ui/atoms/Radio/Radio.tsx +1 -1
  263. package/src/ui/atoms/Select/Select.stories.tsx +93 -58
  264. package/src/ui/atoms/Select/Select.test.tsx +162 -46
  265. package/src/ui/atoms/Select/Select.tsx +142 -44
  266. package/src/ui/atoms/Separator/Separator.stories.tsx +88 -0
  267. package/src/ui/atoms/Separator/Separator.test.tsx +34 -0
  268. package/src/ui/atoms/Separator/Separator.tsx +81 -0
  269. package/src/ui/atoms/Separator/index.ts +2 -0
  270. package/src/ui/atoms/Skeleton/Skeleton.stories.tsx +62 -0
  271. package/src/ui/atoms/Skeleton/Skeleton.tsx +19 -2
  272. package/src/ui/atoms/Slider/Slider.stories.tsx +205 -0
  273. package/src/ui/atoms/Slider/Slider.test.tsx +53 -0
  274. package/src/ui/atoms/Slider/Slider.tsx +307 -0
  275. package/src/ui/atoms/Slider/index.ts +2 -0
  276. package/src/ui/atoms/Spinner/Spinner.stories.tsx +56 -0
  277. package/src/ui/atoms/Spinner/Spinner.test.tsx +35 -0
  278. package/src/ui/atoms/Spinner/Spinner.tsx +88 -0
  279. package/src/ui/atoms/Switch/Switch.stories.tsx +182 -0
  280. package/src/ui/atoms/Switch/Switch.test.tsx +90 -0
  281. package/src/ui/atoms/Switch/Switch.tsx +181 -0
  282. package/src/ui/atoms/Switch/index.ts +2 -0
  283. package/src/ui/atoms/Text/Text.stories.tsx +1 -1
  284. package/src/ui/atoms/Text/Text.test.tsx +48 -32
  285. package/src/ui/atoms/Textarea/Textarea.stories.tsx +1 -1
  286. package/src/ui/atoms/Tooltip/Tooltip.stories.tsx +44 -0
  287. package/src/ui/atoms/Tooltip/Tooltip.tsx +94 -6
  288. package/src/ui/atoms/index.ts +27 -4
  289. package/src/ui/index.ts +6 -1
  290. package/src/ui/molecules/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  291. package/src/ui/molecules/Breadcrumb/Breadcrumb.tsx +1 -1
  292. package/src/ui/molecules/Card/Card.stories.tsx +49 -1
  293. package/src/ui/molecules/Card/Card.tsx +40 -5
  294. package/src/ui/molecules/ColorPicker/ColorPicker.stories.tsx +156 -0
  295. package/src/ui/molecules/ColorPicker/ColorPicker.test.tsx +47 -0
  296. package/src/ui/molecules/ColorPicker/ColorPicker.tsx +271 -0
  297. package/src/ui/molecules/ColorPicker/index.ts +2 -0
  298. package/src/ui/molecules/DatePicker/DatePicker.mdx +150 -0
  299. package/src/ui/molecules/DatePicker/DatePicker.stories.tsx +188 -0
  300. package/src/ui/molecules/DatePicker/DatePicker.test.tsx +381 -0
  301. package/src/ui/molecules/DatePicker/DatePicker.tsx +231 -0
  302. package/src/ui/molecules/DatePicker/DatePickerCalendar.tsx +277 -0
  303. package/src/ui/molecules/DatePicker/DatePickerContext.tsx +39 -0
  304. package/src/ui/molecules/DatePicker/DatePickerInput.tsx +147 -0
  305. package/src/ui/molecules/DatePicker/DatePickerProvider.tsx +100 -0
  306. package/src/ui/molecules/DatePicker/index.ts +16 -0
  307. package/src/ui/molecules/Dropdown/Dropdown.stories.tsx +50 -8
  308. package/src/ui/molecules/Dropdown/Dropdown.test.tsx +272 -12
  309. package/src/ui/molecules/Dropdown/Dropdown.tsx +176 -10
  310. package/src/ui/molecules/EmptyState/EmptyState.stories.tsx +24 -2
  311. package/src/ui/molecules/EmptyState/EmptyState.tsx +9 -3
  312. package/src/ui/molecules/FileUpload/FileUpload.stories.tsx +177 -0
  313. package/src/ui/molecules/FileUpload/FileUpload.test.tsx +114 -0
  314. package/src/ui/molecules/FileUpload/FileUpload.tsx +312 -0
  315. package/src/ui/molecules/FileUpload/index.ts +2 -0
  316. package/src/ui/molecules/Form/Form.mdx +145 -0
  317. package/src/ui/molecules/Form/Form.stories.tsx +121 -1
  318. package/src/ui/molecules/Form/Form.test.tsx +1 -3
  319. package/src/ui/molecules/Form/Form.tsx +95 -15
  320. package/src/ui/molecules/Form/FormContext.tsx +35 -0
  321. package/src/ui/molecules/Form/FormField.tsx +83 -0
  322. package/src/ui/molecules/Form/FormProvider.tsx +34 -0
  323. package/src/ui/molecules/Form/index.ts +21 -0
  324. package/src/ui/molecules/Form/useFormFieldArray.ts +46 -0
  325. package/src/ui/molecules/InputWithLabel/InputWithLabel.stories.tsx +1 -1
  326. package/src/ui/molecules/InputWithLabel/InputWithLabel.test.tsx +44 -0
  327. package/src/ui/molecules/InputWithLabel/InputWithLabel.tsx +3 -1
  328. package/src/ui/molecules/NavbarGroup/NavbarGroup.stories.tsx +1 -1
  329. package/src/ui/molecules/Pagination/Pagination.stories.tsx +1 -1
  330. package/src/ui/molecules/Rating/Rating.stories.tsx +206 -0
  331. package/src/ui/molecules/Rating/Rating.test.tsx +60 -0
  332. package/src/ui/molecules/Rating/Rating.tsx +173 -0
  333. package/src/ui/molecules/Rating/index.ts +2 -0
  334. package/src/ui/molecules/SearchInput/SearchInput.stories.tsx +146 -0
  335. package/src/ui/molecules/SearchInput/SearchInput.test.tsx +82 -0
  336. package/src/ui/molecules/SearchInput/SearchInput.tsx +133 -0
  337. package/src/ui/molecules/SearchInput/index.ts +2 -0
  338. package/src/ui/molecules/Tabs/Tabs.stories.tsx +229 -0
  339. package/src/ui/molecules/Tabs/Tabs.test.tsx +497 -0
  340. package/src/ui/molecules/Tabs/Tabs.tsx +58 -0
  341. package/src/ui/molecules/Tabs/TabsContent.tsx +50 -0
  342. package/src/ui/molecules/Tabs/TabsContext.tsx +36 -0
  343. package/src/ui/molecules/Tabs/TabsList.tsx +98 -0
  344. package/src/ui/molecules/Tabs/TabsProvider.tsx +53 -0
  345. package/src/ui/molecules/Tabs/TabsTrigger.tsx +111 -0
  346. package/src/ui/molecules/Tabs/index.ts +23 -0
  347. package/src/ui/molecules/TimePicker/TimePicker.stories.tsx +145 -0
  348. package/src/ui/molecules/TimePicker/TimePicker.test.tsx +41 -0
  349. package/src/ui/molecules/TimePicker/TimePicker.tsx +264 -0
  350. package/src/ui/molecules/TimePicker/index.ts +2 -0
  351. package/src/ui/molecules/index.ts +20 -7
  352. package/src/ui/organisms/CommandPalette/CommandPalette.stories.tsx +218 -0
  353. package/src/ui/organisms/CommandPalette/CommandPalette.test.tsx +85 -0
  354. package/src/ui/organisms/CommandPalette/CommandPalette.tsx +333 -0
  355. package/src/ui/organisms/CommandPalette/index.ts +2 -0
  356. package/src/ui/organisms/DataGrid/DataGrid.stories.tsx +196 -0
  357. package/src/ui/organisms/DataGrid/DataGrid.test.tsx +53 -0
  358. package/src/ui/organisms/DataGrid/DataGrid.tsx +294 -0
  359. package/src/ui/organisms/DataGrid/index.ts +2 -0
  360. package/src/ui/organisms/Dialog/AlertDialog.tsx +92 -0
  361. package/src/ui/organisms/Dialog/Dialog.mdx +200 -0
  362. package/src/ui/organisms/Dialog/Dialog.stories.tsx +226 -0
  363. package/src/ui/organisms/Dialog/Dialog.test.tsx +435 -0
  364. package/src/ui/organisms/Dialog/Dialog.tsx +79 -0
  365. package/src/ui/organisms/Dialog/DialogClose.tsx +45 -0
  366. package/src/ui/organisms/Dialog/DialogContent.tsx +149 -0
  367. package/src/ui/organisms/Dialog/DialogContext.tsx +25 -0
  368. package/src/ui/organisms/Dialog/DialogDescription.tsx +28 -0
  369. package/src/ui/organisms/Dialog/DialogFooter.tsx +18 -0
  370. package/src/ui/organisms/Dialog/DialogHeader.tsx +18 -0
  371. package/src/ui/organisms/Dialog/DialogProvider.tsx +73 -0
  372. package/src/ui/organisms/Dialog/DialogTitle.tsx +31 -0
  373. package/src/ui/organisms/Dialog/DialogTrigger.tsx +34 -0
  374. package/src/ui/organisms/Dialog/index.ts +24 -0
  375. package/src/ui/organisms/LoginBox/LoginBox.stories.tsx +1 -1
  376. package/src/ui/organisms/Modal/Modal.stories.tsx +2 -2
  377. package/src/ui/organisms/Modal/Modal.test.tsx +1 -1
  378. package/src/ui/organisms/Sidebar/Sidebar.stories.tsx +1 -1
  379. package/src/ui/organisms/Sidebar/Sidebar.test.tsx +5 -3
  380. package/src/ui/organisms/Sidebar/Sidebar.tsx +21 -6
  381. package/src/ui/{molecules → organisms/Sidebar}/SidebarGroup/SidebarGroup.stories.tsx +2 -2
  382. package/src/ui/{molecules → organisms/Sidebar}/SidebarGroup/SidebarGroup.test.tsx +32 -9
  383. package/src/ui/{molecules → organisms/Sidebar}/SidebarGroup/SidebarGroup.tsx +7 -7
  384. package/src/ui/organisms/Sidebar/SidebarHeader/SidebarHeader.test.tsx +66 -0
  385. package/src/ui/{molecules → organisms/Sidebar}/SidebarHeader/SidebarHeader.tsx +1 -2
  386. package/src/ui/{atoms → organisms/Sidebar}/SidebarItem/SidebarItem.stories.tsx +1 -1
  387. package/src/ui/{atoms → organisms/Sidebar}/SidebarItem/SidebarItem.test.tsx +9 -8
  388. package/src/ui/{atoms → organisms/Sidebar}/SidebarItem/SidebarItem.tsx +9 -3
  389. package/src/ui/organisms/Sidebar/index.ts +13 -0
  390. package/src/ui/organisms/Stepper/Stepper.stories.tsx +253 -0
  391. package/src/ui/organisms/Stepper/Stepper.test.tsx +76 -0
  392. package/src/ui/organisms/Stepper/Stepper.tsx +323 -0
  393. package/src/ui/organisms/Stepper/index.ts +2 -0
  394. package/src/ui/organisms/Table/Table.mdx +154 -0
  395. package/src/ui/organisms/Table/Table.stories.tsx +614 -4
  396. package/src/ui/organisms/Table/Table.test.tsx +86 -4
  397. package/src/ui/organisms/Table/Table.tsx +215 -99
  398. package/src/ui/organisms/Table/TableActions/TableActions.stories.tsx +88 -0
  399. package/src/ui/organisms/Table/TableActions/TableActions.test.tsx +64 -0
  400. package/src/ui/organisms/Table/TableActions/TableActions.tsx +71 -0
  401. package/src/ui/organisms/Table/TableActions.tsx +46 -0
  402. package/src/ui/organisms/Table/TableBody.tsx +137 -0
  403. package/src/ui/organisms/Table/TableCell.tsx +36 -0
  404. package/src/ui/organisms/Table/TableContext.tsx +111 -0
  405. package/src/ui/organisms/Table/TableEmptyState.tsx +51 -0
  406. package/src/ui/organisms/Table/TableFilters/TableFilters.stories.tsx +111 -0
  407. package/src/ui/organisms/Table/TableFilters/TableFilters.test.tsx +104 -0
  408. package/src/ui/organisms/Table/TableFilters/TableFilters.tsx +191 -0
  409. package/src/ui/organisms/Table/TableFilters.tsx +39 -0
  410. package/src/ui/organisms/Table/TableHeader.tsx +29 -0
  411. package/src/ui/organisms/Table/TableHeaderCell.tsx +142 -0
  412. package/src/ui/organisms/Table/TableHeaderRow.tsx +72 -0
  413. package/src/ui/organisms/Table/TablePagination/TablePagination.stories.tsx +87 -0
  414. package/src/ui/organisms/Table/TablePagination/TablePagination.test.tsx +90 -0
  415. package/src/ui/organisms/Table/TablePagination/TablePagination.tsx +207 -0
  416. package/src/ui/organisms/Table/TablePagination.tsx +48 -0
  417. package/src/ui/organisms/Table/TableProvider.tsx +429 -0
  418. package/src/ui/organisms/Table/TableRow.tsx +85 -0
  419. package/src/ui/organisms/Table/TableTypes.ts +11 -0
  420. package/src/ui/organisms/Table/index.ts +55 -0
  421. package/src/ui/organisms/Table/useColumnResizing.ts +134 -0
  422. package/src/ui/organisms/Table/useVirtualScrolling.ts +116 -0
  423. package/src/ui/organisms/Timeline/Timeline.stories.tsx +230 -0
  424. package/src/ui/organisms/Timeline/Timeline.test.tsx +47 -0
  425. package/src/ui/organisms/Timeline/Timeline.tsx +179 -0
  426. package/src/ui/organisms/Timeline/index.ts +2 -0
  427. package/src/ui/organisms/Toast/Toast.stories.tsx +169 -0
  428. package/src/ui/organisms/Toast/Toast.test.tsx +537 -0
  429. package/src/ui/organisms/Toast/Toast.tsx +144 -0
  430. package/src/ui/organisms/Toast/ToastContainer.tsx +54 -0
  431. package/src/ui/organisms/Toast/ToastContext.tsx +38 -0
  432. package/src/ui/organisms/Toast/ToastProvider.tsx +56 -0
  433. package/src/ui/organisms/Toast/index.ts +17 -0
  434. package/src/ui/organisms/Toast/useToast.ts +70 -0
  435. package/src/ui/organisms/index.ts +17 -2
  436. package/src/ui/providers/AdvancedThemeProvider.tsx +229 -0
  437. package/src/ui/providers/index.ts +14 -0
  438. package/src/ui/themes/README.md +281 -0
  439. package/src/ui/themes/ThemeBuilder.ts +149 -0
  440. package/src/ui/themes/ThemeRegistry.ts +187 -0
  441. package/src/ui/themes/index.ts +20 -0
  442. package/src/ui/themes/types.ts +53 -0
  443. package/src/ui/themes/utils.ts +70 -0
  444. package/src/ui/tokens/README.md +212 -0
  445. package/src/ui/tokens/TokenVisualizations.tsx +273 -0
  446. package/src/ui/tokens/Tokens.mdx +348 -0
  447. package/src/ui/tokens/animations.ts +157 -0
  448. package/src/ui/tokens/borders.ts +121 -0
  449. package/src/ui/tokens/gradients.ts +154 -0
  450. package/src/ui/tokens/index.ts +57 -0
  451. package/src/ui/tokens/opacity.ts +107 -0
  452. package/src/ui/tokens/radius.ts +107 -0
  453. package/src/ui/tokens/shadows.ts +92 -0
  454. package/src/ui/tokens/tokens.factory.ts +124 -0
  455. package/src/ui/tokens/z-index.ts +113 -0
  456. package/src/ui/utils/index.ts +10 -0
  457. package/src/App.css +0 -42
  458. package/src/App.tsx +0 -35
  459. package/src/index.css +0 -68
  460. package/src/main.tsx +0 -15
@@ -0,0 +1,402 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks';
2
+
3
+ <Meta title="Design System/Accessibility" />
4
+
5
+ # Accessibility Guide
6
+
7
+ Este guia explica como usar o React Design System de forma acessível e como os componentes atendem aos padrões WCAG 2.1 AA.
8
+
9
+ ## Padrões de Acessibilidade
10
+
11
+ Todos os componentes do design system são **WCAG 2.1 AA compliant**, garantindo:
12
+
13
+ - ✅ Contraste de cores adequado (4.5:1 para texto normal, 3:1 para texto grande)
14
+ - ✅ Navegação completa por teclado
15
+ - ✅ Suporte a screen readers
16
+ - ✅ ARIA attributes apropriados
17
+ - ✅ Focus management correto
18
+
19
+ ## Uso Acessível de Componentes
20
+
21
+ ### Labels Sempre Obrigatórios
22
+
23
+ ```tsx
24
+ // ✅ Correto: Label associado
25
+ <Label htmlFor="email">Email</Label>
26
+ <Input id="email" type="email" />
27
+
28
+ // ❌ Incorreto: Sem label
29
+ <Input placeholder="Email" /> // Não acessível para screen readers
30
+ ```
31
+
32
+ ### ARIA Labels para Ícones
33
+
34
+ ```tsx
35
+ // ✅ Correto: ARIA label para botões com apenas ícones
36
+ <Button aria-label="Close dialog" onClick={handleClose}>
37
+ <CloseIcon />
38
+ </Button>
39
+
40
+ // ❌ Incorreto: Sem contexto
41
+ <Button onClick={handleClose}>
42
+ <CloseIcon />
43
+ </Button>
44
+ ```
45
+
46
+ ### Descrições Adicionais
47
+
48
+ ```tsx
49
+ // ✅ Correto: Descrição associada
50
+ <Input
51
+ id="password"
52
+ type="password"
53
+ aria-describedby="password-help"
54
+ />
55
+ <span id="password-help">Password must be at least 8 characters</span>
56
+
57
+ // ❌ Incorreto: Sem descrição
58
+ <Input type="password" />
59
+ ```
60
+
61
+ ## Navegação por Teclado
62
+
63
+ Todos os componentes interativos suportam navegação por teclado:
64
+
65
+ ### Teclas Suportadas
66
+
67
+ - **Tab**: Navegar entre elementos
68
+ - **Enter/Space**: Ativar botões e links
69
+ - **Arrow Keys**: Navegar em menus, tabs, selects
70
+ - **Escape**: Fechar modais e popovers
71
+ - **Home/End**: Navegar para início/fim em listas
72
+
73
+ ### Exemplo: Menu Acessível
74
+
75
+ ```tsx
76
+ import { Dropdown, Button } from '@fabio.caffarello/react-design-system';
77
+
78
+ function AccessibleMenu() {
79
+ return (
80
+ <Dropdown
81
+ trigger={<Button>Menu</Button>}
82
+ items={[
83
+ { label: 'Item 1', onClick: () => {} },
84
+ { label: 'Item 2', onClick: () => {} },
85
+ ]}
86
+ />
87
+ );
88
+ }
89
+ // Navegação por teclado já implementada
90
+ ```
91
+
92
+ ## Focus Management
93
+
94
+ ### Focus Trap em Modais
95
+
96
+ ```tsx
97
+ import { Modal, Button } from '@fabio.caffarello/react-design-system';
98
+
99
+ function AccessibleModal() {
100
+ return (
101
+ <Modal
102
+ isOpen={isOpen}
103
+ onClose={handleClose}
104
+ // Focus trap automático
105
+ // Focus retorna ao trigger ao fechar
106
+ >
107
+ <h2>Modal Title</h2>
108
+ <p>Modal content</p>
109
+ <Button onClick={handleClose}>Close</Button>
110
+ </Modal>
111
+ );
112
+ }
113
+ ```
114
+
115
+ ### Focus Visible
116
+
117
+ Todos os componentes têm estilos de focus visíveis:
118
+
119
+ ```css
120
+ /* Automático em todos os componentes */
121
+ button:focus-visible {
122
+ outline: 2px solid var(--color-primary-default);
123
+ outline-offset: 2px;
124
+ }
125
+ ```
126
+
127
+ ## Screen Readers
128
+
129
+ ### Estrutura Semântica
130
+
131
+ ```tsx
132
+ // ✅ Correto: HTML semântico
133
+ import { Card, Text, Button } from '@fabio.caffarello/react-design-system';
134
+
135
+ <Card>
136
+ <Text variant="heading">Title</Text>
137
+ <Text>Description</Text>
138
+ <Button>Action</Button>
139
+ </Card>
140
+
141
+ // ❌ Incorreto: Divs genéricas
142
+ <div>
143
+ <div>Title</div>
144
+ <div>Description</div>
145
+ <div>Action</div>
146
+ </div>
147
+ ```
148
+
149
+ ### ARIA Roles
150
+
151
+ Componentes usam roles apropriados automaticamente:
152
+
153
+ ```tsx
154
+ // Button usa role="button" automaticamente
155
+ <Button>Click me</Button>
156
+
157
+ // Input usa role apropriado baseado no type
158
+ <Input type="email" role="textbox" />
159
+
160
+ // Modal usa role="dialog" automaticamente
161
+ <Modal>Content</Modal>
162
+ ```
163
+
164
+ ## Contraste de Cores
165
+
166
+ ### Verificação Automática
167
+
168
+ O design system garante contraste adequado:
169
+
170
+ ```tsx
171
+ // ✅ Correto: Cores do design system garantem contraste
172
+ import { getColorClass } from '@fabio.caffarello/react-design-system';
173
+
174
+ <div className={getColorClass('primary', 'DEFAULT', 'bg')}>
175
+ <Text className={getColorClass('primary', 'contrast', 'text')}>
176
+ Text with proper contrast
177
+ </Text>
178
+ </div>
179
+
180
+ // ❌ Evitar: Cores customizadas sem verificar contraste
181
+ <div className="bg-blue-500 text-blue-200">
182
+ Text with poor contrast
183
+ </div>
184
+ ```
185
+
186
+ ### Dark Mode
187
+
188
+ O sistema de temas garante contraste adequado em ambos os modos:
189
+
190
+ ```tsx
191
+ import { AdvancedThemeProvider } from '@fabio.caffarello/react-design-system';
192
+
193
+ <AdvancedThemeProvider defaultTheme="dark">
194
+ {/* Contraste garantido automaticamente */}
195
+ </AdvancedThemeProvider>
196
+ ```
197
+
198
+ ## Formulários Acessíveis
199
+
200
+ ### Estrutura Completa
201
+
202
+ ```tsx
203
+ import { Form, Label, Input, ErrorMessage, Button } from '@fabio.caffarello/react-design-system';
204
+
205
+ function AccessibleForm() {
206
+ return (
207
+ <Form onSubmit={handleSubmit}>
208
+ <Label htmlFor="email">Email</Label>
209
+ <Input
210
+ id="email"
211
+ type="email"
212
+ required
213
+ aria-required="true"
214
+ aria-invalid={errors.email ? 'true' : 'false'}
215
+ aria-describedby={errors.email ? 'email-error' : undefined}
216
+ />
217
+ {errors.email && (
218
+ <ErrorMessage id="email-error">
219
+ {errors.email}
220
+ </ErrorMessage>
221
+ )}
222
+
223
+ <Button type="submit">Submit</Button>
224
+ </Form>
225
+ );
226
+ }
227
+ ```
228
+
229
+ ### Validação Acessível
230
+
231
+ ```tsx
232
+ import { Input, ErrorMessage } from '@fabio.caffarello/react-design-system';
233
+
234
+ function ValidatedInput({ error, ...props }) {
235
+ return (
236
+ <div>
237
+ <Input
238
+ {...props}
239
+ aria-invalid={error ? 'true' : 'false'}
240
+ aria-describedby={error ? `${props.id}-error` : undefined}
241
+ />
242
+ {error && (
243
+ <ErrorMessage id={`${props.id}-error`} role="alert">
244
+ {error}
245
+ </ErrorMessage>
246
+ )}
247
+ </div>
248
+ );
249
+ }
250
+ ```
251
+
252
+ ## Listas e Tabelas
253
+
254
+ ### Tabelas Acessíveis
255
+
256
+ ```tsx
257
+ import { Table } from '@fabio.caffarello/react-design-system';
258
+
259
+ function AccessibleTable() {
260
+ return (
261
+ <Table
262
+ data={data}
263
+ columns={columns}
264
+ // Headers automáticos com scope="col"
265
+ // Caption opcional
266
+ caption="User data table"
267
+ />
268
+ );
269
+ }
270
+ ```
271
+
272
+ ### Listas Acessíveis
273
+
274
+ ```tsx
275
+ import { Card, Text } from '@fabio.caffarello/react-design-system';
276
+
277
+ function AccessibleList({ items }) {
278
+ return (
279
+ <ul role="list">
280
+ {items.map((item) => (
281
+ <li key={item.id}>
282
+ <Card>
283
+ <Text>{item.name}</Text>
284
+ </Card>
285
+ </li>
286
+ ))}
287
+ </ul>
288
+ );
289
+ }
290
+ ```
291
+
292
+ ## Animações e Transições
293
+
294
+ ### Preferências de Movimento
295
+
296
+ O design system respeita `prefers-reduced-motion`:
297
+
298
+ ```css
299
+ /* Automático em todos os componentes */
300
+ @media (prefers-reduced-motion: reduce) {
301
+ * {
302
+ animation-duration: 0.01ms !important;
303
+ transition-duration: 0.01ms !important;
304
+ }
305
+ }
306
+ ```
307
+
308
+ ### Animações Não Essenciais
309
+
310
+ Animações decorativas podem ser desabilitadas:
311
+
312
+ ```tsx
313
+ // Animações são opcionais e podem ser desabilitadas
314
+ <Spinner /> // Animação pode ser desabilitada via CSS
315
+ ```
316
+
317
+ ## Testes de Acessibilidade
318
+
319
+ ### Testes Automatizados
320
+
321
+ Todos os componentes têm testes de acessibilidade:
322
+
323
+ ```tsx
324
+ import { render, screen } from '@testing-library/react';
325
+ import { axe, toHaveNoViolations } from 'jest-axe';
326
+ import { Button } from '@fabio.caffarello/react-design-system';
327
+
328
+ expect.extend(toHaveNoViolations);
329
+
330
+ test('Button is accessible', async () => {
331
+ const { container } = render(<Button>Click me</Button>);
332
+ const results = await axe(container);
333
+ expect(results).toHaveNoViolations();
334
+ });
335
+ ```
336
+
337
+ ### Testes Manuais
338
+
339
+ Checklist para testes manuais:
340
+
341
+ - [ ] Navegação completa por teclado
342
+ - [ ] Screen reader anuncia corretamente
343
+ - [ ] Contraste de cores adequado
344
+ - [ ] Focus visível em todos os elementos
345
+ - [ ] Labels associados corretamente
346
+ - [ ] Erros anunciados apropriadamente
347
+
348
+ ## Ferramentas
349
+
350
+ ### axe DevTools
351
+
352
+ Use o axe DevTools para verificar acessibilidade:
353
+
354
+ 1. Instale a extensão do navegador
355
+ 2. Abra a página
356
+ 3. Execute a verificação
357
+ 4. Corrija problemas encontrados
358
+
359
+ ### WAVE
360
+
361
+ Use o WAVE para análise de acessibilidade:
362
+
363
+ 1. Acesse [wave.webaim.org](https://wave.webaim.org)
364
+ 2. Insira a URL ou código
365
+ 3. Analise os resultados
366
+
367
+ ### Lighthouse
368
+
369
+ Use o Lighthouse para auditoria completa:
370
+
371
+ 1. Abra DevTools
372
+ 2. Vá para a aba Lighthouse
373
+ 3. Selecione "Accessibility"
374
+ 4. Execute a auditoria
375
+
376
+ ## Checklist de Acessibilidade
377
+
378
+ Antes de publicar um componente ou página:
379
+
380
+ - [ ] Todos os inputs têm labels associados
381
+ - [ ] Botões com apenas ícones têm aria-label
382
+ - [ ] Navegação por teclado funciona
383
+ - [ ] Contraste de cores adequado (4.5:1 mínimo)
384
+ - [ ] Focus visível em todos os elementos
385
+ - [ ] Screen reader anuncia corretamente
386
+ - [ ] Erros são anunciados apropriadamente
387
+ - [ ] Animações respeitam prefers-reduced-motion
388
+
389
+ ## Recursos Adicionais
390
+
391
+ - [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
392
+ - [ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)
393
+ - [WebAIM](https://webaim.org/)
394
+ - [A11y Project](https://www.a11yproject.com/)
395
+
396
+ ## Suporte
397
+
398
+ Se encontrar problemas de acessibilidade:
399
+
400
+ 1. Consulte a [documentação do componente](./Design%20System/Components)
401
+ 2. Verifique os [testes de acessibilidade](./Design%20System/Component%20Status)
402
+ 3. Abra uma [issue no GitHub](https://github.com/fabiocaffarello/react-design-system/issues)
@@ -0,0 +1,315 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks';
2
+
3
+ <Meta title="Design System/Best Practices" />
4
+
5
+ # Best Practices
6
+
7
+ Este guia apresenta as melhores práticas para usar o React Design System de forma eficiente e consistente.
8
+
9
+ ## Estrutura de Componentes
10
+
11
+ ### Atomic Design
12
+
13
+ Sempre siga a hierarquia do Atomic Design:
14
+
15
+ 1. **Atoms** → Componentes básicos e indivisíveis
16
+ 2. **Molecules** → Combinações de atoms
17
+ 3. **Organisms** → Combinações de molecules e atoms
18
+
19
+ ```tsx
20
+ // ✅ Correto: Usar atoms para construir molecules
21
+ import { Input, Label, Button } from '@fabio.caffarello/react-design-system';
22
+
23
+ function LoginForm() {
24
+ return (
25
+ <form>
26
+ <Label htmlFor="email">Email</Label>
27
+ <Input id="email" type="email" />
28
+ <Button type="submit">Login</Button>
29
+ </form>
30
+ );
31
+ }
32
+
33
+ // ❌ Incorreto: Não recriar atoms dentro de molecules
34
+ function BadLoginForm() {
35
+ return (
36
+ <form>
37
+ <input type="email" /> {/* Use o componente Input do design system */}
38
+ </form>
39
+ );
40
+ }
41
+ ```
42
+
43
+ ## Uso de Tokens
44
+
45
+ ### Sempre Use Design Tokens
46
+
47
+ Use tokens em vez de valores hardcoded:
48
+
49
+ ```tsx
50
+ // ✅ Correto: Usar tokens
51
+ import { getSpacingClass, getColorClass } from '@fabio.caffarello/react-design-system';
52
+
53
+ <div className={`${getSpacingClass('md', 'p')} ${getColorClass('primary', 'DEFAULT', 'bg')}`}>
54
+ Content
55
+ </div>
56
+
57
+ // ❌ Incorreto: Valores hardcoded
58
+ <div className="p-4 bg-indigo-500">
59
+ Content
60
+ </div>
61
+ ```
62
+
63
+ ### Tokens de Cores
64
+
65
+ Use cores semânticas:
66
+
67
+ ```tsx
68
+ // ✅ Correto: Cores semânticas
69
+ getColorClass('primary', 'DEFAULT', 'bg')
70
+ getColorClass('error', 'DEFAULT', 'text')
71
+ getColorClass('success', 'DEFAULT', 'border')
72
+
73
+ // ❌ Incorreto: Cores específicas
74
+ 'bg-indigo-500'
75
+ 'text-red-600'
76
+ ```
77
+
78
+ ## Acessibilidade
79
+
80
+ ### Sempre Forneça Labels
81
+
82
+ ```tsx
83
+ // ✅ Correto
84
+ <Label htmlFor="username">Username</Label>
85
+ <Input id="username" />
86
+
87
+ // ❌ Incorreto
88
+ <Input placeholder="Username" /> // Sem label associado
89
+ ```
90
+
91
+ ### Use ARIA Attributes Quando Necessário
92
+
93
+ ```tsx
94
+ // ✅ Correto: Componente com ARIA
95
+ <Button aria-label="Close dialog" onClick={handleClose}>
96
+ <CloseIcon />
97
+ </Button>
98
+
99
+ // ✅ Correto: Componente com descrição
100
+ <Input
101
+ id="password"
102
+ type="password"
103
+ aria-describedby="password-help"
104
+ />
105
+ <span id="password-help">Password must be at least 8 characters</span>
106
+ ```
107
+
108
+ ### Navegação por Teclado
109
+
110
+ Todos os componentes interativos já suportam navegação por teclado. Não desabilite isso:
111
+
112
+ ```tsx
113
+ // ✅ Correto: Deixar navegação por teclado funcionar
114
+ <Button onClick={handleClick}>Click me</Button>
115
+
116
+ // ❌ Incorreto: Desabilitar navegação por teclado
117
+ <Button onClick={handleClick} onKeyDown={(e) => e.preventDefault()}>
118
+ Click me
119
+ </Button>
120
+ ```
121
+
122
+ ## Performance
123
+
124
+ ### Use Code Splitting
125
+
126
+ Importe apenas o que você precisa:
127
+
128
+ ```tsx
129
+ // ✅ Correto: Import específico
130
+ import { Button, Input } from '@fabio.caffarello/react-design-system/atoms';
131
+
132
+ // ⚠️ Aceitável mas menos otimizado
133
+ import { Button, Input } from '@fabio.caffarello/react-design-system';
134
+ ```
135
+
136
+ ### Memoização
137
+
138
+ Componentes já otimizados não precisam de memoização adicional:
139
+
140
+ ```tsx
141
+ // ✅ Correto: Componentes já são memoizados
142
+ import { Card } from '@fabio.caffarello/react-design-system';
143
+
144
+ function MyComponent() {
145
+ return <Card>Content</Card>;
146
+ }
147
+
148
+ // ❌ Desnecessário: Componentes já são otimizados
149
+ import { memo } from 'react';
150
+ const MyCard = memo(Card);
151
+ ```
152
+
153
+ ## Temas
154
+
155
+ ### Use AdvancedThemeProvider
156
+
157
+ ```tsx
158
+ // ✅ Correto: Usar AdvancedThemeProvider
159
+ import { AdvancedThemeProvider } from '@fabio.caffarello/react-design-system';
160
+
161
+ function App() {
162
+ return (
163
+ <AdvancedThemeProvider defaultTheme="light">
164
+ <YourApp />
165
+ </AdvancedThemeProvider>
166
+ );
167
+ }
168
+ ```
169
+
170
+ ### Crie Temas Customizados
171
+
172
+ ```tsx
173
+ // ✅ Correto: Criar tema customizado
174
+ import { ThemeBuilder } from '@fabio.caffarello/react-design-system';
175
+
176
+ const brandTheme = ThemeBuilder.create({
177
+ name: 'brand',
178
+ base: 'light',
179
+ colors: {
180
+ primary: {
181
+ DEFAULT: { hex: '#your-brand-color' },
182
+ },
183
+ },
184
+ }).build();
185
+ ```
186
+
187
+ ## Composição de Componentes
188
+
189
+ ### Compose, Não Modifique
190
+
191
+ ```tsx
192
+ // ✅ Correto: Compor componentes
193
+ function CustomCard({ children, ...props }) {
194
+ return (
195
+ <Card padding="large" variant="hover" {...props}>
196
+ {children}
197
+ </Card>
198
+ );
199
+ }
200
+
201
+ // ❌ Incorreto: Modificar componentes diretamente
202
+ // Não modifique os componentes do design system
203
+ ```
204
+
205
+ ### Use Variants
206
+
207
+ ```tsx
208
+ // ✅ Correto: Usar variants
209
+ <Button variant="primary" size="large">Submit</Button>
210
+ <Button variant="secondary" size="small">Cancel</Button>
211
+
212
+ // ❌ Incorreto: Criar componentes customizados para variantes
213
+ function CustomButton() {
214
+ return <button className="custom-primary-large">Submit</button>;
215
+ }
216
+ ```
217
+
218
+ ## Formulários
219
+
220
+ ### Use Form Component
221
+
222
+ ```tsx
223
+ // ✅ Correto: Usar componente Form
224
+ import { Form, Input, Button } from '@fabio.caffarello/react-design-system';
225
+
226
+ function LoginForm() {
227
+ return (
228
+ <Form onSubmit={handleSubmit}>
229
+ <Input name="email" type="email" required />
230
+ <Input name="password" type="password" required />
231
+ <Button type="submit">Login</Button>
232
+ </Form>
233
+ );
234
+ }
235
+ ```
236
+
237
+ ### Validação
238
+
239
+ ```tsx
240
+ // ✅ Correto: Validação com react-hook-form
241
+ import { useForm } from 'react-hook-form';
242
+ import { Form, Input, Button } from '@fabio.caffarello/react-design-system';
243
+
244
+ function ValidatedForm() {
245
+ const { register, handleSubmit, formState: { errors } } = useForm();
246
+
247
+ return (
248
+ <Form onSubmit={handleSubmit(onSubmit)}>
249
+ <Input
250
+ {...register('email', { required: true })}
251
+ error={errors.email ? 'Email is required' : undefined}
252
+ />
253
+ <Button type="submit">Submit</Button>
254
+ </Form>
255
+ );
256
+ }
257
+ ```
258
+
259
+ ## Testes
260
+
261
+ ### Teste Componentes
262
+
263
+ ```tsx
264
+ // ✅ Correto: Testar componentes
265
+ import { render, screen } from '@testing-library/react';
266
+ import { Button } from '@fabio.caffarello/react-design-system';
267
+
268
+ test('renders button', () => {
269
+ render(<Button>Click me</Button>);
270
+ expect(screen.getByRole('button')).toBeInTheDocument();
271
+ });
272
+ ```
273
+
274
+ ## TypeScript
275
+
276
+ ### Use Types do Design System
277
+
278
+ ```tsx
279
+ // ✅ Correto: Usar tipos exportados
280
+ import type { ButtonProps } from '@fabio.caffarello/react-design-system';
281
+
282
+ function MyButton(props: ButtonProps) {
283
+ return <Button {...props} />;
284
+ }
285
+
286
+ // ❌ Incorreto: Criar tipos próprios
287
+ interface MyButtonProps {
288
+ // ...
289
+ }
290
+ ```
291
+
292
+ ## Erros Comuns
293
+
294
+ ### ❌ Não Faça Isso
295
+
296
+ 1. **Não modifique componentes diretamente**
297
+ 2. **Não use valores hardcoded em vez de tokens**
298
+ 3. **Não ignore acessibilidade**
299
+ 4. **Não importe tudo quando precisa de pouco**
300
+ 5. **Não crie componentes que já existem**
301
+
302
+ ### ✅ Faça Isso
303
+
304
+ 1. **Use componentes como estão**
305
+ 2. **Use design tokens**
306
+ 3. **Sempre considere acessibilidade**
307
+ 4. **Use code splitting**
308
+ 5. **Reutilize componentes existentes**
309
+
310
+ ## Recursos Adicionais
311
+
312
+ - [Getting Started Guide](./Design%20System/Getting%20Started)
313
+ - [Component Composition Guide](./Design%20System/Component%20Composition)
314
+ - [Accessibility Guide](./Design%20System/Accessibility)
315
+ - [Performance Guide](./Design%20System/Performance)