@strapi/design-system 1.2.7 → 1.3.0-beta.1

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 (730) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +38 -0
  3. package/.prettierrc.js +7 -0
  4. package/.storybook/components/Theme.js +28 -0
  5. package/.storybook/main.js +13 -0
  6. package/.storybook/manager.js +12 -0
  7. package/.storybook/preview.js +42 -0
  8. package/.storybook/utils/createCustomTheme.js +26 -0
  9. package/LICENSE +20 -0
  10. package/__mocks__/fileMock.js +1 -0
  11. package/__mocks__/styleMock.js +1 -0
  12. package/babel.config.js +5 -0
  13. package/createIndexFiles.js +34 -0
  14. package/global-setup.js +4 -0
  15. package/jest.config.js +17 -0
  16. package/package.json +3 -3
  17. package/playwright.config.js +39 -0
  18. package/src/Accordion/Accordion.js +148 -0
  19. package/src/Accordion/Accordion.stories.mdx +327 -0
  20. package/src/Accordion/AccordionContent.js +26 -0
  21. package/src/Accordion/AccordionContext.js +5 -0
  22. package/src/Accordion/AccordionGroup.js +114 -0
  23. package/src/Accordion/AccordionToggle.js +192 -0
  24. package/src/Accordion/__tests__/Accordion.e2e.js +32 -0
  25. package/src/Accordion/__tests__/AccordionKeyboard.e2e.js +73 -0
  26. package/src/Accordion/index.js +4 -0
  27. package/src/Accordion/utils.js +15 -0
  28. package/src/Alert/Alert.js +144 -0
  29. package/src/Alert/Alert.stories.mdx +135 -0
  30. package/src/Alert/__tests__/Alert.e2e.js +39 -0
  31. package/src/Alert/index.js +1 -0
  32. package/src/Alert/utils.js +35 -0
  33. package/src/Avatar/Avatar.js +110 -0
  34. package/src/Avatar/Avatar.stories.mdx +67 -0
  35. package/src/Avatar/AvatarGroup.js +9 -0
  36. package/src/Avatar/__tests__/Avatar.e2e.js +23 -0
  37. package/src/Avatar/__tests__/Avatar.spec.js +153 -0
  38. package/src/Avatar/constants.js +2 -0
  39. package/src/Avatar/index.js +2 -0
  40. package/src/Badge/Badge.js +41 -0
  41. package/src/Badge/Badge.stories.mdx +57 -0
  42. package/src/Badge/__tests__/Badge.e2e.js +23 -0
  43. package/src/Badge/index.js +1 -0
  44. package/src/BaseButton/BaseButton.js +46 -0
  45. package/src/BaseButton/BaseButton.stories.mdx +32 -0
  46. package/src/BaseButton/__tests__/BaseButton.e2e.js +23 -0
  47. package/src/BaseButton/index.js +1 -0
  48. package/src/BaseCheckbox/BaseCheckbox.js +133 -0
  49. package/src/BaseCheckbox/BaseCheckbox.stories.mdx +107 -0
  50. package/src/BaseCheckbox/__tests__/BaseCheckbox.e2e.js +94 -0
  51. package/src/BaseCheckbox/assets/checkmark-black.svg +6 -0
  52. package/src/BaseCheckbox/assets/checkmark.svg +6 -0
  53. package/src/BaseCheckbox/index.js +1 -0
  54. package/src/BaseCheckbox/utils.js +7 -0
  55. package/src/BaseLink/BaseLink.js +38 -0
  56. package/src/BaseLink/BaseLink.stories.mdx +34 -0
  57. package/src/BaseLink/__tests__/BaseLink.e2e.js +23 -0
  58. package/src/BaseLink/__tests__/BaseLink.spec.js +26 -0
  59. package/src/BaseLink/index.js +1 -0
  60. package/src/BaseRadio/BaseRadio.js +69 -0
  61. package/src/BaseRadio/BaseRadio.stories.mdx +110 -0
  62. package/src/BaseRadio/RadioGroup.js +36 -0
  63. package/src/BaseRadio/__tests__/BaseRadio.e2e.js +90 -0
  64. package/src/BaseRadio/context.js +3 -0
  65. package/src/BaseRadio/index.js +2 -0
  66. package/src/BaseRadio/utils.js +30 -0
  67. package/src/Box/Box.js +104 -0
  68. package/src/Box/Box.stories.mdx +57 -0
  69. package/src/Box/BoxProps.js +99 -0
  70. package/src/Box/__tests__/Box.e2e.js +23 -0
  71. package/src/Box/__tests__/Box.spec.js +36 -0
  72. package/src/Box/index.js +1 -0
  73. package/src/Breadcrumbs/Breadcrumbs.js +58 -0
  74. package/src/Breadcrumbs/Breadcrumbs.stories.mdx +47 -0
  75. package/src/Breadcrumbs/__tests__/Breadcrumbs.e2e.js +23 -0
  76. package/src/Breadcrumbs/index.js +1 -0
  77. package/src/Button/Button.js +138 -0
  78. package/src/Button/Button.stories.mdx +216 -0
  79. package/src/Button/__tests__/Button.e2e.js +89 -0
  80. package/src/Button/__tests__/utils.spec.js +19 -0
  81. package/src/Button/constants.js +12 -0
  82. package/src/Button/index.js +1 -0
  83. package/src/Button/utils.js +170 -0
  84. package/src/Card/Card.js +35 -0
  85. package/src/Card/Card.stories.mdx +202 -0
  86. package/src/Card/CardAction.js +13 -0
  87. package/src/Card/CardAsset.js +49 -0
  88. package/src/Card/CardBadge.js +18 -0
  89. package/src/Card/CardBody.js +11 -0
  90. package/src/Card/CardCheckbox.js +14 -0
  91. package/src/Card/CardContent.js +16 -0
  92. package/src/Card/CardContext.js +5 -0
  93. package/src/Card/CardHeader.js +12 -0
  94. package/src/Card/CardTimer.js +23 -0
  95. package/src/Card/CardTitle.js +12 -0
  96. package/src/Card/__tests__/Card.e2e.js +164 -0
  97. package/src/Card/index.js +10 -0
  98. package/src/Card/story-assets/first.jpg +0 -0
  99. package/src/CarouselInput/Carousel.js +138 -0
  100. package/src/CarouselInput/Carousel.stories.mdx +149 -0
  101. package/src/CarouselInput/CarouselActions.js +6 -0
  102. package/src/CarouselInput/CarouselImage.js +39 -0
  103. package/src/CarouselInput/CarouselInput.js +80 -0
  104. package/src/CarouselInput/CarouselSlide.js +32 -0
  105. package/src/CarouselInput/__tests__/CarouselImage.e2e.js +15 -0
  106. package/src/CarouselInput/__tests__/CarouselInput.e2e.js +48 -0
  107. package/src/CarouselInput/index.js +5 -0
  108. package/src/CarouselInput/story-assets/first.jpg +0 -0
  109. package/src/Checkbox/Checkbox.js +63 -0
  110. package/src/Checkbox/Checkbox.stories.mdx +190 -0
  111. package/src/Checkbox/__tests__/Checkbox.e2e.js +96 -0
  112. package/src/Checkbox/index.js +1 -0
  113. package/src/Combobox/Combobox.js +421 -0
  114. package/src/Combobox/Combobox.stories.mdx +191 -0
  115. package/src/Combobox/ComboboxList.js +22 -0
  116. package/src/Combobox/ComboboxOption.js +36 -0
  117. package/src/Combobox/__tests__/Combobox.e2e.js +133 -0
  118. package/src/Combobox/__tests__/utils.spec.js +94 -0
  119. package/src/Combobox/components.js +69 -0
  120. package/src/Combobox/index.js +2 -0
  121. package/src/Combobox/utils.js +97 -0
  122. package/src/DatePicker/DatePicker.js +132 -0
  123. package/src/DatePicker/DatePicker.stories.mdx +172 -0
  124. package/src/DatePicker/DatePickerCalendar.js +134 -0
  125. package/src/DatePicker/DatePickerTd.js +51 -0
  126. package/src/DatePicker/DatePickerTh.js +39 -0
  127. package/src/DatePicker/__tests__/DatePicker.e2e.js +94 -0
  128. package/src/DatePicker/__tests__/DatePicker.spec.js +40 -0
  129. package/src/DatePicker/compareDates.js +9 -0
  130. package/src/DatePicker/components.js +45 -0
  131. package/src/DatePicker/index.js +1 -0
  132. package/src/DatePicker/utils/formatDate.js +5 -0
  133. package/src/DatePicker/utils/generateWeeks.js +58 -0
  134. package/src/DatePicker/utils/getDayOfWeek.js +24 -0
  135. package/src/DatePicker/utils/getMonths.js +10 -0
  136. package/src/DatePicker/utils/getYears.js +19 -0
  137. package/src/DatePicker/utils/index.js +5 -0
  138. package/src/DatePicker/utils/tests/generateWeeks.spec.js +136 -0
  139. package/src/DatePicker/utils/tests/getMonths.spec.js +21 -0
  140. package/src/DatePicker/utils/tests/getYears.spec.js +21 -0
  141. package/src/DateTimePicker/DateTimePicker.js +151 -0
  142. package/src/DateTimePicker/DateTimePicker.stories.mdx +114 -0
  143. package/src/DateTimePicker/DateTimePickerProps.js +85 -0
  144. package/src/DateTimePicker/__tests__/DateTimePicker.e2e.js +103 -0
  145. package/src/DateTimePicker/__tests__/DateTimePicker.spec.js +89 -0
  146. package/src/DateTimePicker/__tests__/__snapshots__/DateTimePicker.spec.js.snap +448 -0
  147. package/src/DateTimePicker/__tests__/parseDate.test.js +10 -0
  148. package/src/DateTimePicker/index.js +1 -0
  149. package/src/DateTimePicker/parseDate.js +11 -0
  150. package/src/Dialog/Dialog.js +86 -0
  151. package/src/Dialog/Dialog.stories.mdx +78 -0
  152. package/src/Dialog/DialogBody.js +36 -0
  153. package/src/Dialog/DialogFooter.js +38 -0
  154. package/src/Dialog/__tests__/Dialog.e2e.js +20 -0
  155. package/src/Dialog/__tests__/Dialog.spec.js +28 -0
  156. package/src/Dialog/index.js +3 -0
  157. package/src/DismissibleLayer/DismissibleLayer.js +87 -0
  158. package/src/DismissibleLayer/DismissibleLayer.stories.mdx +50 -0
  159. package/src/DismissibleLayer/__test__/DimissibleLayer.spec.js +44 -0
  160. package/src/DismissibleLayer/index.js +1 -0
  161. package/src/Divider/Divider.js +26 -0
  162. package/src/Divider/Divider.stories.mdx +55 -0
  163. package/src/Divider/__tests__/Divider.e2e.js +23 -0
  164. package/src/Divider/index.js +1 -0
  165. package/src/EmptyStateLayout/EmptyStateLayout.js +48 -0
  166. package/src/EmptyStateLayout/EmptyStateLayout.stories.mdx +87 -0
  167. package/src/EmptyStateLayout/__tests__/EmptyStateLayout.e2e.js +31 -0
  168. package/src/EmptyStateLayout/index.js +1 -0
  169. package/src/EmptyStateLayout/story-assets/Illo.js +51 -0
  170. package/src/Field/Field.js +29 -0
  171. package/src/Field/Field.stories.mdx +237 -0
  172. package/src/Field/FieldAction.js +25 -0
  173. package/src/Field/FieldContext.js +4 -0
  174. package/src/Field/FieldError.js +17 -0
  175. package/src/Field/FieldHint.js +17 -0
  176. package/src/Field/FieldInput.js +129 -0
  177. package/src/Field/FieldLabel.js +50 -0
  178. package/src/Field/__tests__/Field.e2e.js +61 -0
  179. package/src/Field/index.js +7 -0
  180. package/src/Flex/Flex.js +26 -0
  181. package/src/Flex/Flex.stories.mdx +45 -0
  182. package/src/Flex/FlexProps.js +41 -0
  183. package/src/Flex/__tests__/Flex.e2e.js +23 -0
  184. package/src/Flex/index.js +1 -0
  185. package/src/FocusTrap/ExampleComponent.js +71 -0
  186. package/src/FocusTrap/FocusTrap.js +83 -0
  187. package/src/FocusTrap/FocusTrap.stories.mdx +32 -0
  188. package/src/FocusTrap/__tests__/FocusTrap.e2e.js +126 -0
  189. package/src/FocusTrap/index.js +1 -0
  190. package/src/Grid/Grid.js +30 -0
  191. package/src/Grid/Grid.stories.mdx +112 -0
  192. package/src/Grid/GridContext.js +5 -0
  193. package/src/Grid/GridItem.js +40 -0
  194. package/src/Grid/__tests__/Grid.e2e.js +23 -0
  195. package/src/Grid/index.js +2 -0
  196. package/src/Icon/Icon.js +27 -0
  197. package/src/Icon/Icon.stories.mdx +41 -0
  198. package/src/Icon/__tests__/Icon.e2e.js +21 -0
  199. package/src/Icon/index.js +1 -0
  200. package/src/IconButton/IconButton.js +175 -0
  201. package/src/IconButton/IconButton.stories.mdx +153 -0
  202. package/src/IconButton/__tests__/IconButton.e2e.js +57 -0
  203. package/src/IconButton/index.js +1 -0
  204. package/src/KeyboardNavigable/KeyboardNavigable.js +96 -0
  205. package/src/KeyboardNavigable/index.js +1 -0
  206. package/src/Layout/ActionLayout.js +40 -0
  207. package/src/Layout/ContentLayout.js +15 -0
  208. package/src/Layout/GridLayout.js +12 -0
  209. package/src/Layout/GridLayout.stories.mdx +36 -0
  210. package/src/Layout/HeaderLayout.js +170 -0
  211. package/src/Layout/HeaderLayout.stories.mdx +175 -0
  212. package/src/Layout/Layout.js +31 -0
  213. package/src/Layout/Layout.stories.mdx +240 -0
  214. package/src/Layout/TwoColsLayout.js +26 -0
  215. package/src/Layout/TwoColsLayout.stories.mdx +46 -0
  216. package/src/Layout/__tests__/GridLayout.e2e.js +23 -0
  217. package/src/Layout/__tests__/HeaderLayout.e2e.js +83 -0
  218. package/src/Layout/__tests__/Layout.e2e.js +23 -0
  219. package/src/Layout/__tests__/TwoColsLayout.e2e.js +23 -0
  220. package/src/Layout/index.js +6 -0
  221. package/src/Link/Link.js +105 -0
  222. package/src/Link/Link.stories.mdx +57 -0
  223. package/src/Link/__tests__/Link.e2e.js +23 -0
  224. package/src/Link/index.js +1 -0
  225. package/src/LinkButton/LinkButton.js +113 -0
  226. package/src/LinkButton/LinkButton.stories.mdx +153 -0
  227. package/src/LinkButton/__tests__/LinkButton.e2e.js +89 -0
  228. package/src/LinkButton/index.js +1 -0
  229. package/src/LiveRegions/LiveRegions.js +13 -0
  230. package/src/LiveRegions/LiveRegions.stories.mdx +76 -0
  231. package/src/LiveRegions/StoryComponent.js +26 -0
  232. package/src/LiveRegions/__tests__/LiveRegions.spec.js +200 -0
  233. package/src/LiveRegions/constants.js +5 -0
  234. package/src/LiveRegions/index.js +1 -0
  235. package/src/LiveRegions/useNotifyAT.js +39 -0
  236. package/src/Loader/Loader.js +40 -0
  237. package/src/Loader/Loader.stories.mdx +48 -0
  238. package/src/Loader/__tests__/Loader.e2e.js +23 -0
  239. package/src/Loader/assets/loader.svg +3 -0
  240. package/src/Loader/index.js +1 -0
  241. package/src/Main/Main.js +24 -0
  242. package/src/Main/SkipToContent.js +29 -0
  243. package/src/Main/index.js +2 -0
  244. package/src/MainNav/MainNav.js +31 -0
  245. package/src/MainNav/MainNav.stories.mdx +197 -0
  246. package/src/MainNav/MainNavContext.js +5 -0
  247. package/src/MainNav/NavBrand.js +76 -0
  248. package/src/MainNav/NavCondense.js +44 -0
  249. package/src/MainNav/NavLink.js +143 -0
  250. package/src/MainNav/NavSection.js +53 -0
  251. package/src/MainNav/NavSections.js +20 -0
  252. package/src/MainNav/NavUser.js +53 -0
  253. package/src/MainNav/__tests__/MainNav.e2e.js +23 -0
  254. package/src/MainNav/index.js +7 -0
  255. package/src/MainNav/strapi-img.png +0 -0
  256. package/src/ModalLayout/ModalBody.js +12 -0
  257. package/src/ModalLayout/ModalContext.js +4 -0
  258. package/src/ModalLayout/ModalFooter.js +37 -0
  259. package/src/ModalLayout/ModalHeader.js +35 -0
  260. package/src/ModalLayout/ModalLayout.js +58 -0
  261. package/src/ModalLayout/ModalLayout.stories.mdx +100 -0
  262. package/src/ModalLayout/__tests__/ModalLayout.e2e.js +19 -0
  263. package/src/ModalLayout/__tests__/ModalLayout.spec.js +596 -0
  264. package/src/ModalLayout/index.js +4 -0
  265. package/src/NumberInput/NumberInput.js +253 -0
  266. package/src/NumberInput/NumberInput.stories.mdx +319 -0
  267. package/src/NumberInput/__tests__/NumberInput.e2e.js +194 -0
  268. package/src/NumberInput/index.js +1 -0
  269. package/src/Pagination/Pagination.js +37 -0
  270. package/src/Pagination/Pagination.stories.mdx +97 -0
  271. package/src/Pagination/PaginationContext.js +4 -0
  272. package/src/Pagination/__tests__/Pagination.e2e.js +23 -0
  273. package/src/Pagination/assets/next.svg +3 -0
  274. package/src/Pagination/assets/previous.svg +3 -0
  275. package/src/Pagination/components.js +147 -0
  276. package/src/Pagination/index.js +2 -0
  277. package/src/Popover/Popover.js +167 -0
  278. package/src/Popover/Popover.stories.mdx +167 -0
  279. package/src/Popover/__tests__/Popover.e2e.js +48 -0
  280. package/src/Popover/__tests__/Popover.spec.js +153 -0
  281. package/src/Popover/index.js +1 -0
  282. package/src/Portal/Portal.js +25 -0
  283. package/src/Portal/Portal.stories.mdx +33 -0
  284. package/src/Portal/__tests__/Portal.e2e.js +23 -0
  285. package/src/Portal/index.js +1 -0
  286. package/src/ProgressBar/ProgressBar.js +57 -0
  287. package/src/ProgressBar/ProgressBar.stories.mdx +47 -0
  288. package/src/ProgressBar/__tests__/ProgressBar.e2e.js +41 -0
  289. package/src/ProgressBar/index.js +1 -0
  290. package/src/Radio/Radio.js +25 -0
  291. package/src/Radio/Radio.stories.mdx +66 -0
  292. package/src/Radio/__tests__/Radio.e2e.js +66 -0
  293. package/src/Radio/__tests__/Radio.spec.js +56 -0
  294. package/src/Radio/index.js +2 -0
  295. package/src/RawTable/RawCell.js +182 -0
  296. package/src/RawTable/RawTable.js +123 -0
  297. package/src/RawTable/RawTable.stories.mdx +258 -0
  298. package/src/RawTable/RawTableContext.js +10 -0
  299. package/src/RawTable/RawTbody.js +18 -0
  300. package/src/RawTable/RawThead.js +15 -0
  301. package/src/RawTable/RawTr.js +20 -0
  302. package/src/RawTable/__tests__/RawTable.e2e.js +344 -0
  303. package/src/RawTable/focusFocusable.js +7 -0
  304. package/src/RawTable/index.js +5 -0
  305. package/src/Searchbar/SearchForm.js +3 -0
  306. package/src/Searchbar/Searchbar.js +103 -0
  307. package/src/Searchbar/Searchbar.stories.mdx +115 -0
  308. package/src/Searchbar/__tests__/Searchbar.e2e.js +52 -0
  309. package/src/Searchbar/index.js +2 -0
  310. package/src/Select/MultiSelectNested.js +31 -0
  311. package/src/Select/OptGroup.js +27 -0
  312. package/src/Select/Option.js +123 -0
  313. package/src/Select/Select.js +318 -0
  314. package/src/Select/Select.stories.mdx +362 -0
  315. package/src/Select/SelectButton.js +77 -0
  316. package/src/Select/SelectList.js +113 -0
  317. package/src/Select/SelectTags.js +50 -0
  318. package/src/Select/__tests__/Select.e2e.js +238 -0
  319. package/src/Select/__tests__/Select.spec.js +1020 -0
  320. package/src/Select/components.js +51 -0
  321. package/src/Select/constants.js +6 -0
  322. package/src/Select/hooks/useButtonRef.js +31 -0
  323. package/src/Select/hooks/useListRef.js +35 -0
  324. package/src/Select/index.js +5 -0
  325. package/src/Select/utils.js +27 -0
  326. package/src/SimpleMenu/SimpleMenu.js +252 -0
  327. package/src/SimpleMenu/SimpleMenu.stories.mdx +220 -0
  328. package/src/SimpleMenu/__tests__/SimpleMenu.e2e.js +98 -0
  329. package/src/SimpleMenu/__tests__/SimpleMenu.spec.js +48 -0
  330. package/src/SimpleMenu/index.js +1 -0
  331. package/src/SimpleMenu/utils.js +12 -0
  332. package/src/Stack/Stack.js +75 -0
  333. package/src/Stack/Stack.stories.mdx +66 -0
  334. package/src/Stack/__tests__/Stack.e2e.js +43 -0
  335. package/src/Stack/index.js +1 -0
  336. package/src/Status/Status.js +76 -0
  337. package/src/Status/Status.stories.mdx +80 -0
  338. package/src/Status/__tests__/Status.e2e.js +23 -0
  339. package/src/Status/__tests__/Status.spec.js +48 -0
  340. package/src/Status/index.js +1 -0
  341. package/src/SubNav/SubNav.js +25 -0
  342. package/src/SubNav/SubNav.stories.mdx +234 -0
  343. package/src/SubNav/SubNavHeader.js +122 -0
  344. package/src/SubNav/SubNavLink.js +92 -0
  345. package/src/SubNav/SubNavLinkSection.js +75 -0
  346. package/src/SubNav/SubNavSection.js +75 -0
  347. package/src/SubNav/SubNavSectionLabel.js +67 -0
  348. package/src/SubNav/SubNavSections.js +20 -0
  349. package/src/SubNav/__tests__/SubNav.e2e.js +23 -0
  350. package/src/SubNav/index.js +6 -0
  351. package/src/Switch/Switch.js +97 -0
  352. package/src/Switch/Switch.stories.mdx +76 -0
  353. package/src/Switch/__tests__/Switch.e2e.js +33 -0
  354. package/src/Switch/index.js +1 -0
  355. package/src/Table/Cell.js +49 -0
  356. package/src/Table/TFooter.js +58 -0
  357. package/src/Table/Table.js +96 -0
  358. package/src/Table/Table.stories.mdx +330 -0
  359. package/src/Table/Tbody.js +13 -0
  360. package/src/Table/Thead.js +11 -0
  361. package/src/Table/Tr.js +28 -0
  362. package/src/Table/__tests__/Table.e2e.js +41 -0
  363. package/src/Table/index.js +6 -0
  364. package/src/Tabs/TabGroup.js +46 -0
  365. package/src/Tabs/TabPanels.js +32 -0
  366. package/src/Tabs/Tabs.js +227 -0
  367. package/src/Tabs/Tabs.stories.mdx +211 -0
  368. package/src/Tabs/TabsContext.js +5 -0
  369. package/src/Tabs/__tests__/Tabs.e2e.js +253 -0
  370. package/src/Tabs/components.js +66 -0
  371. package/src/Tabs/index.js +3 -0
  372. package/src/Tabs/useTabsFocus.js +28 -0
  373. package/src/Tag/Tag.js +72 -0
  374. package/src/Tag/Tag.stories.mdx +47 -0
  375. package/src/Tag/__tests__/Tag.e2e.js +37 -0
  376. package/src/Tag/index.js +1 -0
  377. package/src/TextButton/TextButton.js +102 -0
  378. package/src/TextButton/TextButton.stories.mdx +71 -0
  379. package/src/TextButton/__tests__/TextButton.e2e.js +23 -0
  380. package/src/TextButton/index.js +1 -0
  381. package/src/TextInput/TextInput.js +67 -0
  382. package/src/TextInput/TextInput.stories.mdx +228 -0
  383. package/src/TextInput/__tests__/TextInput.e2e.js +73 -0
  384. package/src/TextInput/index.js +1 -0
  385. package/src/Textarea/Textarea.js +74 -0
  386. package/src/Textarea/Textarea.stories.mdx +105 -0
  387. package/src/Textarea/TextareaInput.js +77 -0
  388. package/src/Textarea/__tests__/Textarea.e2e.js +37 -0
  389. package/src/Textarea/index.js +1 -0
  390. package/src/ThemeProvider/ThemeProvider.js +193 -0
  391. package/src/ThemeProvider/hooks.js +5 -0
  392. package/src/ThemeProvider/index.js +2 -0
  393. package/src/TimePicker/TimePicker.js +128 -0
  394. package/src/TimePicker/TimePicker.stories.mdx +171 -0
  395. package/src/TimePicker/__tests__/TimePicker.e2e.js +37 -0
  396. package/src/TimePicker/__tests__/TimePicker.spec.js +2099 -0
  397. package/src/TimePicker/index.js +1 -0
  398. package/src/ToggleCheckbox/ToggleCheckbox.js +169 -0
  399. package/src/ToggleCheckbox/ToggleCheckbox.stories.mdx +96 -0
  400. package/src/ToggleCheckbox/__tests__/ToggleCheckbox.e2e.js +59 -0
  401. package/src/ToggleCheckbox/index.js +1 -0
  402. package/src/ToggleInput/ToggleInput.js +89 -0
  403. package/src/ToggleInput/ToggleInput.stories.mdx +171 -0
  404. package/src/ToggleInput/__tests__/ToggleInput.e2e.js +109 -0
  405. package/src/ToggleInput/index.js +1 -0
  406. package/src/Tooltip/Tooltip.js +72 -0
  407. package/src/Tooltip/Tooltip.stories.mdx +127 -0
  408. package/src/Tooltip/__tests__/Tooltip.e2e.js +33 -0
  409. package/src/Tooltip/__tests__/Tooltip.spec.js +306 -0
  410. package/src/Tooltip/hooks/useTooltipHandlers.js +39 -0
  411. package/src/Tooltip/hooks/useTooltipLayout.js +21 -0
  412. package/src/Tooltip/index.js +1 -0
  413. package/src/Tooltip/utils/__tests__/positionTooltip.spec.js +114 -0
  414. package/src/Tooltip/utils/positionTooltip.js +83 -0
  415. package/src/Typography/Typography.js +24 -0
  416. package/src/Typography/Typography.stories.mdx +86 -0
  417. package/src/Typography/TypographyProps.js +30 -0
  418. package/src/Typography/__tests__/Typography.e2e.js +25 -0
  419. package/src/Typography/__tests__/Typography.spec.js +32 -0
  420. package/src/Typography/__tests__/__snapshots__/Typography.spec.js.snap +103 -0
  421. package/src/Typography/constants.js +9 -0
  422. package/src/Typography/index.js +1 -0
  423. package/src/Typography/utils.js +69 -0
  424. package/src/VisuallyHidden/VisuallyHidden.js +12 -0
  425. package/src/VisuallyHidden/index.js +1 -0
  426. package/src/helpers/__tests__/useId.spec.js +39 -0
  427. package/src/helpers/escapeSelector.js +1 -0
  428. package/src/helpers/genId.js +2 -0
  429. package/src/helpers/getDefaultLocale.js +33 -0
  430. package/src/helpers/getFocusableNodes.js +35 -0
  431. package/src/helpers/handleResponsiveValues.js +34 -0
  432. package/src/helpers/keyboardKeys.js +17 -0
  433. package/src/helpers/setOpacity.js +4 -0
  434. package/src/helpers/setTabIndexOnFirstItem.js +7 -0
  435. package/src/helpers/useElementOnScreen.js +27 -0
  436. package/src/helpers/useId.js +8 -0
  437. package/src/helpers/useIntersection.js +31 -0
  438. package/src/helpers/useLockScroll.js +14 -0
  439. package/src/helpers/usePrevious.js +9 -0
  440. package/src/helpers/useResizeObserver.js +22 -0
  441. package/src/index.js +65 -0
  442. package/src/themes/ColorButton.js +24 -0
  443. package/src/themes/Theme.stories.mdx +227 -0
  444. package/src/themes/__tests__/extendTheme.spec.js +119 -0
  445. package/src/themes/colors.js +46 -0
  446. package/src/themes/common-theme.js +19 -0
  447. package/src/themes/darkTheme/dark-colors.js +49 -0
  448. package/src/themes/darkTheme/dark-shadows.js +10 -0
  449. package/src/themes/darkTheme/index.js +9 -0
  450. package/src/themes/extendTheme.js +60 -0
  451. package/src/themes/index.js +4 -0
  452. package/src/themes/lightTheme/index.js +9 -0
  453. package/src/themes/lightTheme/light-colors.js +49 -0
  454. package/src/themes/lightTheme/light-shadows.js +10 -0
  455. package/src/themes/sizes.js +10 -0
  456. package/src/themes/utils.js +50 -0
  457. package/src/v2/Breadcrumbs/Breadcrumbs.js +45 -0
  458. package/src/v2/Breadcrumbs/Breadcrumbs.stories.mdx +129 -0
  459. package/src/v2/Breadcrumbs/Crumb.js +30 -0
  460. package/src/v2/Breadcrumbs/CrumbLink.js +33 -0
  461. package/src/v2/Breadcrumbs/CrumbSimpleMenu.js +30 -0
  462. package/src/v2/Breadcrumbs/Divider.js +16 -0
  463. package/src/v2/Breadcrumbs/__tests__/Breadcrumbs.e2e.js +47 -0
  464. package/src/v2/Breadcrumbs/__tests__/Breadcrumbs.spec.js +47 -0
  465. package/src/v2/Breadcrumbs/index.js +4 -0
  466. package/src/v2/Link/Link.js +79 -0
  467. package/src/v2/Link/Link.stories.mdx +113 -0
  468. package/src/v2/Link/__tests__/Link.e2e.js +23 -0
  469. package/src/v2/Link/index.js +1 -0
  470. package/src/v2/LinkButton/LinkButton.js +105 -0
  471. package/src/v2/LinkButton/LinkButton.stories.mdx +153 -0
  472. package/src/v2/LinkButton/__tests__/LinkButton.e2e.js +89 -0
  473. package/src/v2/LinkButton/index.js +1 -0
  474. package/src/v2/MainNav/MainNav.js +31 -0
  475. package/src/v2/MainNav/MainNav.stories.mdx +197 -0
  476. package/src/v2/MainNav/MainNavContext.js +5 -0
  477. package/src/v2/MainNav/NavBrand.js +79 -0
  478. package/src/v2/MainNav/NavCondense.js +44 -0
  479. package/src/v2/MainNav/NavLink.js +143 -0
  480. package/src/v2/MainNav/NavSection.js +53 -0
  481. package/src/v2/MainNav/NavSections.js +20 -0
  482. package/src/v2/MainNav/NavUser.js +53 -0
  483. package/src/v2/MainNav/__tests__/MainNav.e2e.js +23 -0
  484. package/src/v2/MainNav/index.js +7 -0
  485. package/src/v2/MainNav/strapi-img.png +0 -0
  486. package/src/v2/Pagination/Pagination.js +37 -0
  487. package/src/v2/Pagination/Pagination.stories.mdx +97 -0
  488. package/src/v2/Pagination/PaginationContext.js +4 -0
  489. package/src/v2/Pagination/__tests__/Pagination.e2e.js +23 -0
  490. package/src/v2/Pagination/assets/next.svg +3 -0
  491. package/src/v2/Pagination/assets/previous.svg +3 -0
  492. package/src/v2/Pagination/components.js +136 -0
  493. package/src/v2/Pagination/index.js +2 -0
  494. package/src/v2/SimpleMenu/SimpleMenu.js +252 -0
  495. package/src/v2/SimpleMenu/SimpleMenu.stories.mdx +220 -0
  496. package/src/v2/SimpleMenu/__tests__/SimpleMenu.e2e.js +100 -0
  497. package/src/v2/SimpleMenu/__tests__/SimpleMenu.spec.js +48 -0
  498. package/src/v2/SimpleMenu/index.js +1 -0
  499. package/src/v2/SimpleMenu/utils.js +12 -0
  500. package/src/v2/SubNav/SubNav.js +25 -0
  501. package/src/v2/SubNav/SubNav.stories.mdx +234 -0
  502. package/src/v2/SubNav/SubNavHeader.js +122 -0
  503. package/src/v2/SubNav/SubNavLink.js +95 -0
  504. package/src/v2/SubNav/SubNavLinkSection.js +75 -0
  505. package/src/v2/SubNav/SubNavSection.js +75 -0
  506. package/src/v2/SubNav/SubNavSectionLabel.js +67 -0
  507. package/src/v2/SubNav/SubNavSections.js +20 -0
  508. package/src/v2/SubNav/__tests__/SubNav.e2e.js +23 -0
  509. package/src/v2/SubNav/index.js +6 -0
  510. package/src/v2/index.js +7 -0
  511. package/test-bundler.js +35 -0
  512. package/tests/check-exports.spec.js +36 -0
  513. package/webpack.config.js +84 -0
  514. package/Accordion.development.js +0 -775
  515. package/Accordion.js +0 -9
  516. package/Accordion.production.js +0 -1
  517. package/Alert.development.js +0 -562
  518. package/Alert.js +0 -9
  519. package/Alert.production.js +0 -1
  520. package/Avatar.development.js +0 -485
  521. package/Avatar.js +0 -9
  522. package/Avatar.production.js +0 -1
  523. package/Badge.development.js +0 -494
  524. package/Badge.js +0 -9
  525. package/Badge.production.js +0 -1
  526. package/BaseButton.development.js +0 -285
  527. package/BaseButton.js +0 -9
  528. package/BaseButton.production.js +0 -1
  529. package/BaseCheckbox.development.js +0 -309
  530. package/BaseCheckbox.js +0 -9
  531. package/BaseCheckbox.production.js +0 -1
  532. package/BaseLink.development.js +0 -273
  533. package/BaseLink.js +0 -9
  534. package/BaseLink.production.js +0 -1
  535. package/BaseRadio.development.js +0 -321
  536. package/BaseRadio.js +0 -9
  537. package/BaseRadio.production.js +0 -1
  538. package/Box.development.js +0 -341
  539. package/Box.js +0 -9
  540. package/Box.production.js +0 -1
  541. package/Breadcrumbs.development.js +0 -518
  542. package/Breadcrumbs.js +0 -9
  543. package/Breadcrumbs.production.js +0 -1
  544. package/Button.development.js +0 -573
  545. package/Button.js +0 -9
  546. package/Button.production.js +0 -1
  547. package/Card.development.js +0 -746
  548. package/Card.js +0 -9
  549. package/Card.production.js +0 -1
  550. package/CarouselInput.development.js +0 -898
  551. package/CarouselInput.js +0 -9
  552. package/CarouselInput.production.js +0 -1
  553. package/Checkbox.development.js +0 -722
  554. package/Checkbox.js +0 -9
  555. package/Checkbox.production.js +0 -1
  556. package/Combobox.development.js +0 -934
  557. package/Combobox.js +0 -9
  558. package/Combobox.production.js +0 -1
  559. package/DatePicker.development.js +0 -1323
  560. package/DatePicker.js +0 -9
  561. package/DatePicker.production.js +0 -1
  562. package/Dialog.development.js +0 -741
  563. package/Dialog.js +0 -9
  564. package/Dialog.production.js +0 -1
  565. package/DismissibleLayer.development.js +0 -218
  566. package/DismissibleLayer.js +0 -9
  567. package/DismissibleLayer.production.js +0 -1
  568. package/Divider.development.js +0 -398
  569. package/Divider.js +0 -9
  570. package/Divider.production.js +0 -1
  571. package/EmptyStateLayout.development.js +0 -425
  572. package/EmptyStateLayout.js +0 -9
  573. package/EmptyStateLayout.production.js +0 -1
  574. package/Field.development.js +0 -614
  575. package/Field.js +0 -9
  576. package/Field.production.js +0 -1
  577. package/Flex.development.js +0 -377
  578. package/Flex.js +0 -9
  579. package/Flex.production.js +0 -1
  580. package/FocusTrap.development.js +0 -341
  581. package/FocusTrap.js +0 -9
  582. package/FocusTrap.production.js +0 -1
  583. package/Grid.development.js +0 -422
  584. package/Grid.js +0 -9
  585. package/Grid.production.js +0 -1
  586. package/Icon.development.js +0 -376
  587. package/Icon.js +0 -9
  588. package/Icon.production.js +0 -1
  589. package/IconButton.development.js +0 -684
  590. package/IconButton.js +0 -9
  591. package/IconButton.production.js +0 -1
  592. package/KeyboardNavigable.development.js +0 -454
  593. package/KeyboardNavigable.js +0 -9
  594. package/KeyboardNavigable.production.js +0 -1
  595. package/Layout.development.js +0 -626
  596. package/Layout.js +0 -9
  597. package/Layout.production.js +0 -1
  598. package/Link.development.js +0 -492
  599. package/Link.js +0 -9
  600. package/Link.production.js +0 -1
  601. package/LinkButton.development.js +0 -573
  602. package/LinkButton.js +0 -9
  603. package/LinkButton.production.js +0 -1
  604. package/LiveRegions.development.js +0 -147
  605. package/LiveRegions.js +0 -9
  606. package/LiveRegions.production.js +0 -1
  607. package/Loader.development.js +0 -309
  608. package/Loader.js +0 -9
  609. package/Loader.production.js +0 -1
  610. package/Main.development.js +0 -410
  611. package/Main.js +0 -9
  612. package/Main.production.js +0 -1
  613. package/MainNav.development.js +0 -957
  614. package/MainNav.js +0 -9
  615. package/MainNav.production.js +0 -1
  616. package/ModalLayout.development.js +0 -895
  617. package/ModalLayout.js +0 -9
  618. package/ModalLayout.production.js +0 -1
  619. package/NumberInput.development.js +0 -733
  620. package/NumberInput.js +0 -9
  621. package/NumberInput.production.js +0 -1
  622. package/Pagination.development.js +0 -587
  623. package/Pagination.js +0 -9
  624. package/Pagination.production.js +0 -1
  625. package/Popover.development.js +0 -481
  626. package/Popover.js +0 -9
  627. package/Popover.production.js +0 -1
  628. package/Portal.development.js +0 -212
  629. package/Portal.js +0 -9
  630. package/Portal.production.js +0 -1
  631. package/ProgressBar.development.js +0 -273
  632. package/ProgressBar.js +0 -9
  633. package/ProgressBar.production.js +0 -1
  634. package/Radio.development.js +0 -518
  635. package/Radio.js +0 -9
  636. package/Radio.production.js +0 -1
  637. package/RawTable.development.js +0 -549
  638. package/RawTable.js +0 -9
  639. package/RawTable.production.js +0 -1
  640. package/Searchbar.development.js +0 -696
  641. package/Searchbar.js +0 -9
  642. package/Searchbar.production.js +0 -1
  643. package/Select.development.js +0 -1063
  644. package/Select.js +0 -9
  645. package/Select.production.js +0 -1
  646. package/SimpleMenu.development.js +0 -821
  647. package/SimpleMenu.js +0 -9
  648. package/SimpleMenu.production.js +0 -1
  649. package/Stack.development.js +0 -434
  650. package/Stack.js +0 -9
  651. package/Stack.production.js +0 -1
  652. package/Status.development.js +0 -494
  653. package/Status.js +0 -9
  654. package/Status.production.js +0 -1
  655. package/SubNav.development.js +0 -1123
  656. package/SubNav.js +0 -9
  657. package/SubNav.production.js +0 -1
  658. package/Switch.development.js +0 -434
  659. package/Switch.js +0 -9
  660. package/Switch.production.js +0 -1
  661. package/Table.development.js +0 -741
  662. package/Table.js +0 -9
  663. package/Table.production.js +0 -1
  664. package/Tabs.development.js +0 -590
  665. package/Tabs.js +0 -9
  666. package/Tabs.production.js +0 -1
  667. package/Tag.development.js +0 -494
  668. package/Tag.js +0 -9
  669. package/Tag.production.js +0 -1
  670. package/TextButton.development.js +0 -517
  671. package/TextButton.js +0 -9
  672. package/TextButton.production.js +0 -1
  673. package/TextInput.development.js +0 -662
  674. package/TextInput.js +0 -9
  675. package/TextInput.production.js +0 -1
  676. package/Textarea.development.js +0 -674
  677. package/Textarea.js +0 -9
  678. package/Textarea.production.js +0 -1
  679. package/ThemeProvider.development.js +0 -300
  680. package/ThemeProvider.js +0 -9
  681. package/ThemeProvider.production.js +0 -1
  682. package/TimePicker.development.js +0 -1098
  683. package/TimePicker.js +0 -9
  684. package/TimePicker.production.js +0 -1
  685. package/ToggleCheckbox.development.js +0 -542
  686. package/ToggleCheckbox.js +0 -9
  687. package/ToggleCheckbox.production.js +0 -1
  688. package/ToggleInput.development.js +0 -745
  689. package/ToggleInput.js +0 -9
  690. package/ToggleInput.production.js +0 -1
  691. package/Tooltip.development.js +0 -588
  692. package/Tooltip.js +0 -9
  693. package/Tooltip.production.js +0 -1
  694. package/Typography.development.js +0 -276
  695. package/Typography.js +0 -9
  696. package/Typography.production.js +0 -1
  697. package/VisuallyHidden.development.js +0 -146
  698. package/VisuallyHidden.js +0 -9
  699. package/VisuallyHidden.production.js +0 -1
  700. package/index.development.js +0 -4290
  701. package/index.js +0 -9
  702. package/index.production.js +0 -1
  703. package/themes.development.js +0 -254
  704. package/themes.js +0 -9
  705. package/themes.production.js +0 -1
  706. package/v2/Breadcrumbs.development.js +0 -906
  707. package/v2/Breadcrumbs.js +0 -9
  708. package/v2/Breadcrumbs.production.js +0 -1
  709. package/v2/Link.development.js +0 -505
  710. package/v2/Link.js +0 -9
  711. package/v2/Link.production.js +0 -1
  712. package/v2/LinkButton.development.js +0 -586
  713. package/v2/LinkButton.js +0 -9
  714. package/v2/LinkButton.production.js +0 -1
  715. package/v2/MainNav.development.js +0 -970
  716. package/v2/MainNav.js +0 -9
  717. package/v2/MainNav.production.js +0 -1
  718. package/v2/Pagination.development.js +0 -600
  719. package/v2/Pagination.js +0 -9
  720. package/v2/Pagination.production.js +0 -1
  721. package/v2/SimpleMenu.development.js +0 -834
  722. package/v2/SimpleMenu.js +0 -9
  723. package/v2/SimpleMenu.production.js +0 -1
  724. package/v2/SubNav.development.js +0 -1136
  725. package/v2/SubNav.js +0 -9
  726. package/v2/SubNav.production.js +0 -1
  727. package/v2/index.development.js +0 -1740
  728. package/v2/index.js +0 -9
  729. package/v2/index.production.js +0 -1
  730. package/v2/package.json +0 -81
@@ -0,0 +1,258 @@
1
+ <!--- RawTable.stories.mdx --->
2
+
3
+ import { Meta, Story, Canvas } from '@storybook/addon-docs';
4
+ import { ArgsTable } from '@storybook/addon-docs';
5
+ import Pencil from '@strapi/icons/Pencil';
6
+ import Trash from '@strapi/icons/Trash';
7
+
8
+ import { TextInput } from '../TextInput';
9
+ import { Box } from '../Box';
10
+ import { Flex } from '../Flex';
11
+ import { IconButton } from '../IconButton';
12
+ import { Link } from '../Link';
13
+
14
+ import { RawTable } from './RawTable';
15
+ import { RawTh, RawTd } from './RawCell';
16
+ import { RawTr } from './RawTr';
17
+ import { RawThead } from './RawThead';
18
+ import { RawTbody } from './RawTbody';
19
+
20
+ <Meta title="Design System/Technical Components/RawTable" component={RawTable} />
21
+
22
+ # RawTable
23
+
24
+ This is the doc of the `RawTable` component
25
+
26
+ [View source](https://github.com/strapi/design-system/tree/main/packages/strapi-design-system/src/RawTable)
27
+
28
+ ## Imports
29
+
30
+ ```js
31
+ import { RawTable, RawTh, RawTd, RawTr, RawThead, RawTbody } from '@strapi/design-system/RawTable';
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ <Canvas>
37
+ <Story name="base">
38
+ {() => {
39
+ const ROW_COUNT = 30;
40
+ const COL_COUNT = 5;
41
+ const rows = Array(ROW_COUNT - 1)
42
+ .fill(null)
43
+ .map(() =>
44
+ Array(COL_COUNT)
45
+ .fill(null)
46
+ .map((e, x) => x),
47
+ );
48
+ return (
49
+ <Box shadow="filterShadow" padding={3} hasRadius>
50
+ <RawTable colCount={COL_COUNT} rowCount={ROW_COUNT}>
51
+ <RawThead>
52
+ <RawTr>
53
+ <RawTh>
54
+ <Box color="neutral800" padding={2} background="neutral200">
55
+ One
56
+ </Box>
57
+ </RawTh>
58
+ <RawTh>
59
+ <Box color="neutral800" padding={2} background="neutral200">
60
+ Two
61
+ </Box>
62
+ </RawTh>
63
+ <RawTh>
64
+ <Box color="neutral800" padding={2} background="neutral200">
65
+ Three
66
+ </Box>
67
+ </RawTh>
68
+ <RawTh>
69
+ <Box color="neutral800" padding={2} background="neutral200">
70
+ Four
71
+ </Box>
72
+ </RawTh>
73
+ <RawTh>
74
+ <Box color="neutral800" padding={2} background="neutral200">
75
+ Five
76
+ </Box>
77
+ </RawTh>
78
+ </RawTr>
79
+ </RawThead>
80
+ <RawTbody>
81
+ {rows.map((row, rowIndex) => (
82
+ <RawTr key={`row-${rowIndex}`}>
83
+ {row.map((cell) => (
84
+ <RawTd key={`cell-${rowIndex}-${cell}`}>
85
+ <Box color="neutral800" padding={2}>
86
+ {rowIndex}/{cell}
87
+ </Box>
88
+ </RawTd>
89
+ ))}
90
+ </RawTr>
91
+ ))}
92
+ </RawTbody>
93
+ </RawTable>
94
+ </Box>
95
+ );
96
+ }}
97
+ </Story>
98
+ <Story name="simple">
99
+ {() => {
100
+ const ROW_COUNT = 30;
101
+ const COL_COUNT = 5;
102
+ return (
103
+ <Box shadow="filterShadow" padding={3} hasRadius>
104
+ <RawTable colCount={COL_COUNT} rowCount={ROW_COUNT}>
105
+ <RawThead>
106
+ <RawTr>
107
+ <RawTh>
108
+ <Box color="neutral800" padding={2} background="neutral200">
109
+ One
110
+ </Box>
111
+ </RawTh>
112
+ <RawTh>
113
+ <Box color="neutral800" padding={2} background="neutral200">
114
+ Two
115
+ </Box>
116
+ </RawTh>
117
+ <RawTh>
118
+ <Box color="neutral800" padding={2} background="neutral200">
119
+ Three
120
+ </Box>
121
+ </RawTh>
122
+ <RawTh>
123
+ <Box color="neutral800" padding={2} background="neutral200">
124
+ Four
125
+ </Box>
126
+ </RawTh>
127
+ <RawTh>
128
+ <Box color="neutral800" padding={2} background="neutral200">
129
+ Five
130
+ </Box>
131
+ </RawTh>
132
+ </RawTr>
133
+ </RawThead>
134
+ <RawTbody>
135
+ <RawTr>
136
+ <RawTd color="neutral800">2/1</RawTd>
137
+ <RawTd color="neutral800">2/2</RawTd>
138
+ <RawTd color="neutral800">2/3</RawTd>
139
+ <RawTd color="neutral800">2/4</RawTd>
140
+ <RawTd color="neutral800">2/5</RawTd>
141
+ </RawTr>
142
+ <RawTr>
143
+ <RawTd color="neutral800">3/1</RawTd>
144
+ <RawTd>
145
+ <Link href="#">Link to somewhere</Link>
146
+ </RawTd>
147
+ <RawTd color="neutral800">3/3</RawTd>
148
+ <RawTd color="neutral800">3/4</RawTd>
149
+ <RawTd color="neutral800">3/5</RawTd>
150
+ </RawTr>
151
+ </RawTbody>
152
+ </RawTable>
153
+ </Box>
154
+ );
155
+ }}
156
+ </Story>
157
+ <Story name="aria">
158
+ {() => {
159
+ const ROW_COUNT = 30;
160
+ const COL_COUNT = 5;
161
+ const rows = Array(ROW_COUNT - 1)
162
+ .fill(null)
163
+ .map(() =>
164
+ Array(COL_COUNT)
165
+ .fill(null)
166
+ .map((e, x) => x),
167
+ );
168
+ return (
169
+ <Box shadow="filterShadow" padding={3} hasRadius>
170
+ <RawTable colCount={COL_COUNT} rowCount={ROW_COUNT}>
171
+ <RawThead>
172
+ <RawTr>
173
+ <RawTh>
174
+ <Box color="neutral800" padding={2} background="neutral200">
175
+ One
176
+ </Box>
177
+ </RawTh>
178
+ <RawTh>
179
+ <Box color="neutral800" padding={2} background="neutral200">
180
+ Two
181
+ </Box>
182
+ </RawTh>
183
+ <RawTh>
184
+ <Box color="neutral800" padding={2} background="neutral200">
185
+ Three
186
+ </Box>
187
+ </RawTh>
188
+ <RawTh>
189
+ <Box color="neutral800" padding={2} background="neutral200">
190
+ Four
191
+ </Box>
192
+ </RawTh>
193
+ <RawTh>
194
+ <Box color="neutral800" padding={2} background="neutral200">
195
+ Five
196
+ </Box>
197
+ </RawTh>
198
+ </RawTr>
199
+ </RawThead>
200
+ <RawTbody>
201
+ {rows.map((row, rowIndex) => (
202
+ <RawTr key={`row-${rowIndex}`}>
203
+ {row.map((cell, cellIndex) =>
204
+ cellIndex === 3 ? (
205
+ <RawTd>
206
+ <TextInput label="name" />
207
+ </RawTd>
208
+ ) : cellIndex === row.length - 1 ? (
209
+ <RawTd>
210
+ <Flex>
211
+ <IconButton onClick={() => console.log('edit')} label="Edit" noBorder icon={<Pencil />} />
212
+ <Box paddingLeft={1}>
213
+ <IconButton
214
+ onClick={() => console.log('delete')}
215
+ label="Delete"
216
+ noBorder
217
+ icon={<Trash />}
218
+ />
219
+ </Box>
220
+ </Flex>
221
+ </RawTd>
222
+ ) : (
223
+ <RawTd key={`cell-${rowIndex}-${cell}`}>
224
+ <Box color="neutral800" padding={2}>
225
+ {rowIndex}/{cell}
226
+ </Box>
227
+ </RawTd>
228
+ ),
229
+ )}
230
+ </RawTr>
231
+ ))}
232
+ </RawTbody>
233
+ </RawTable>
234
+ </Box>
235
+ );
236
+ }}
237
+ </Story>
238
+ </Canvas>
239
+
240
+ ## RawTable Props
241
+
242
+ <ArgsTable of={RawTable} />
243
+
244
+ ## RawThead Props
245
+
246
+ <ArgsTable of={RawThead} />
247
+
248
+ ## RawTr Props
249
+
250
+ <ArgsTable of={RawTr} />
251
+
252
+ ## RawTh Props
253
+
254
+ <ArgsTable of={RawTh} />
255
+
256
+ ## RawTd Props
257
+
258
+ <ArgsTable of={RawTd} />
@@ -0,0 +1,10 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ export const RawTableContext = createContext({
4
+ rowIndex: 0,
5
+ colIndex: 0,
6
+ setTableValues: () => {
7
+ throw new Error('setTableValues must be initialized via the RawTableContext.Provider');
8
+ },
9
+ });
10
+ export const useTable = () => useContext(RawTableContext);
@@ -0,0 +1,18 @@
1
+ import React, { cloneElement, Children } from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ export const RawTbody = ({ children, ...props }) => {
5
+ /**
6
+ * aria-rowindex is 1-based: we have to start from 1
7
+ * since the <tr><th></th></tr> elements count as 1 row, we have to increment the index by 2 (because of the base 1 AND the th)
8
+ */
9
+ const childrenClone = Children.toArray(children).map((child, index) =>
10
+ cloneElement(child, { 'aria-rowindex': index + 2 }),
11
+ );
12
+
13
+ return <tbody {...props}>{childrenClone}</tbody>;
14
+ };
15
+
16
+ RawTbody.propTypes = {
17
+ children: PropTypes.node.isRequired,
18
+ };
@@ -0,0 +1,15 @@
1
+ import React, { cloneElement, Children } from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ export const RawThead = ({ children, ...props }) => {
5
+ /**
6
+ * aria-rowindex is 1-based: we have to start from 1
7
+ */
8
+ const childrenClone = Children.toArray(children).map((child) => cloneElement(child, { 'aria-rowindex': 1 }));
9
+
10
+ return <thead {...props}>{childrenClone}</thead>;
11
+ };
12
+
13
+ RawThead.propTypes = {
14
+ children: PropTypes.node.isRequired,
15
+ };
@@ -0,0 +1,20 @@
1
+ import React, { cloneElement, Children } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Box } from '../Box';
4
+
5
+ export const RawTr = ({ children, ...props }) => {
6
+ const childrenClone = Children.toArray(children).map((child, index) =>
7
+ cloneElement(child, { 'aria-colindex': index + 1, coords: { col: index + 1, row: props['aria-rowindex'] } }),
8
+ );
9
+
10
+ return (
11
+ <Box as="tr" {...props}>
12
+ {childrenClone}
13
+ </Box>
14
+ );
15
+ };
16
+
17
+ RawTr.propTypes = {
18
+ ['aria-rowindex']: PropTypes.number.isRequired,
19
+ children: PropTypes.node.isRequired,
20
+ };
@@ -0,0 +1,344 @@
1
+ import { injectAxe, checkA11y } from 'axe-playwright';
2
+
3
+ import { test, expect } from '@playwright/test';
4
+
5
+ test.describe.parallel('RawTable', () => {
6
+ test.describe('light mode', () => {
7
+ test.describe('Default story', () => {
8
+ test.beforeEach(async ({ page }) => {
9
+ // This is the URL of the Storybook Iframe
10
+ await page.goto('/iframe.html?id=design-system-technical-components-rawtable--base&viewMode=story');
11
+ await injectAxe(page);
12
+ });
13
+
14
+ test('triggers axe on the document', async ({ page }) => {
15
+ await checkA11y(page);
16
+ });
17
+
18
+ test.describe('Keyboard interactions', () => {
19
+ test.beforeEach(async ({ page }) => {
20
+ await page.keyboard.press('Tab');
21
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
22
+ });
23
+
24
+ test('focus the next element in the row when pressing ArrowDown', async ({ page }) => {
25
+ await page.keyboard.press('ArrowDown');
26
+ await page.keyboard.press('ArrowDown');
27
+ await page.keyboard.press('ArrowDown');
28
+
29
+ await expect(page.locator('[aria-rowindex="4"] > [aria-colindex="1"]')).toBeFocused();
30
+ });
31
+
32
+ test('focus the previous element in the row when pressing ArrowUp', async ({ page }) => {
33
+ await page.keyboard.press('ArrowDown');
34
+ await page.keyboard.press('ArrowDown');
35
+ await page.keyboard.press('ArrowDown');
36
+ await page.keyboard.press('ArrowUp');
37
+ await page.keyboard.press('ArrowUp');
38
+
39
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="1"]')).toBeFocused();
40
+ });
41
+
42
+ test('focus the next element in the col when pressing ArrowRight', async ({ page }) => {
43
+ await page.keyboard.press('ArrowRight');
44
+ await page.keyboard.press('ArrowRight');
45
+ await page.keyboard.press('ArrowRight');
46
+
47
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="4"]')).toBeFocused();
48
+ });
49
+
50
+ test('focus the previous element in the col when pressing ArrowLeft', async ({ page }) => {
51
+ await page.keyboard.press('ArrowRight');
52
+ await page.keyboard.press('ArrowRight');
53
+ await page.keyboard.press('ArrowLeft');
54
+
55
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="2"]')).toBeFocused();
56
+ });
57
+
58
+ test('focus the last element on the row when pressing End', async ({ page }) => {
59
+ await page.keyboard.press('End');
60
+
61
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="5"]')).toBeFocused();
62
+ });
63
+
64
+ test('focus the last element on the last row when pressing End AND ctrl', async ({ page }) => {
65
+ await page.keyboard.press('Control+End');
66
+
67
+ await expect(page.locator('[aria-rowindex="30"] > [aria-colindex="5"]')).toBeFocused();
68
+ });
69
+
70
+ test('focus the first element on the row when pressing Home', async ({ page }) => {
71
+ await page.keyboard.press('End');
72
+ await page.keyboard.press('Home');
73
+
74
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
75
+ });
76
+
77
+ test('focus the first element on the first row when pressing Home AND ctrl', async ({ page }) => {
78
+ await page.keyboard.press('Control+End');
79
+ await page.keyboard.press('Control+Home');
80
+
81
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
82
+ });
83
+
84
+ test('focus the first element on the first row when pressing Page', async ({ page }) => {
85
+ await page.keyboard.press('End');
86
+ await page.keyboard.press('Home');
87
+
88
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
89
+ });
90
+
91
+ test('keeps focusing the most left positioned cell when pressing ArrowLeft on it', async ({ page }) => {
92
+ await page.keyboard.press('ArrowLeft');
93
+
94
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
95
+ });
96
+
97
+ test('keeps focusing the most top positioned cell when pressing ArrowTop on it', async ({ page }) => {
98
+ await page.keyboard.press('ArrowUp');
99
+
100
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
101
+ });
102
+
103
+ test('keeps focusing the most right positioned cell when pressing ArrowRight on it', async ({ page }) => {
104
+ await page.keyboard.press('End');
105
+ await page.keyboard.press('ArrowRight');
106
+
107
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="5"]')).toBeFocused();
108
+ });
109
+
110
+ test('keeps focusing the most bottom positioned cell when pressing ArrowDown on it', async ({ page }) => {
111
+ await page.keyboard.press('Control+End');
112
+ await page.keyboard.press('ArrowDown');
113
+
114
+ await expect(page.locator('[aria-rowindex="30"] > [aria-colindex="5"]')).toBeFocused();
115
+ });
116
+
117
+ test('focus the cell 3 rows below when pressing PageDown', async ({ page }) => {
118
+ await page.keyboard.press('PageDown');
119
+
120
+ await expect(page.locator('[aria-rowindex="4"] > [aria-colindex="1"]')).toBeFocused();
121
+ });
122
+
123
+ test('focus the cell 2 rows below when pressing PageDown and that there s only space for jumping 2 rows', async ({
124
+ page,
125
+ }) => {
126
+ await page.keyboard.press('Control+End');
127
+ await page.keyboard.press('ArrowUp');
128
+ await page.keyboard.press('PageDown');
129
+
130
+ await expect(page.locator('[aria-rowindex="30"] > [aria-colindex="5"]')).toBeFocused();
131
+ });
132
+
133
+ test('focus the cell 3 rows above when pressing PageUp', async ({ page }) => {
134
+ await page.keyboard.press('Control+End');
135
+ await page.keyboard.press('PageUp');
136
+
137
+ await expect(page.locator('[aria-rowindex="27"] > [aria-colindex="5"]')).toBeFocused();
138
+ });
139
+
140
+ test('focus the cell 2 rows above when pressing PageUp and that there s only space for jumping 2 rows', async ({
141
+ page,
142
+ }) => {
143
+ await page.keyboard.press('ArrowUp');
144
+ await page.keyboard.press('ArrowUp');
145
+ await page.keyboard.press('PageUp');
146
+
147
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
148
+ });
149
+ });
150
+ });
151
+
152
+ test.describe('Simple story', () => {
153
+ test.beforeEach(async ({ page }) => {
154
+ // This is the URL of the Storybook Iframe
155
+ await page.goto('/iframe.html?id=design-system-technical-components-rawtable--simple&viewMode=story');
156
+ await injectAxe(page);
157
+ });
158
+
159
+ test('triggers axe on the document', async ({ page }) => {
160
+ await checkA11y(page);
161
+ });
162
+
163
+ test.describe('Keyboard interactions', () => {
164
+ test.beforeEach(async ({ page }) => {
165
+ await page.keyboard.press('Tab');
166
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
167
+ });
168
+
169
+ test('focus the next element in the row when pressing ArrowDown', async ({ page }) => {
170
+ await page.keyboard.press('ArrowDown');
171
+ await page.keyboard.press('ArrowDown');
172
+ await page.keyboard.press('ArrowRight');
173
+
174
+ const tabIndexTd = await page.$eval('[aria-rowindex="3"] > [aria-colindex="2"]', (node) =>
175
+ node.getAttribute('tabindex'),
176
+ );
177
+
178
+ expect(tabIndexTd).toBe(null);
179
+
180
+ const tabIndexA = await page.$eval('[aria-rowindex="3"] > [aria-colindex="2"] > a', (node) =>
181
+ node.getAttribute('tabindex'),
182
+ );
183
+
184
+ expect(tabIndexA).toBe('0');
185
+
186
+ await expect(page.locator('[aria-rowindex="3"] > [aria-colindex="2"]')).not.toBeFocused();
187
+ await expect(page.locator('[aria-rowindex="3"] > [aria-colindex="2"] > a')).toBeFocused();
188
+ });
189
+ });
190
+ });
191
+
192
+ test.describe('Aria story', () => {
193
+ test.beforeEach(async ({ page }) => {
194
+ // This is the URL of the Storybook Iframe
195
+ await page.goto('/iframe.html?id=design-system-technical-components-rawtable--aria&viewMode=story');
196
+ await injectAxe(page);
197
+ });
198
+
199
+ test('triggers axe on the document', async ({ page }) => {
200
+ await checkA11y(page);
201
+ });
202
+
203
+ test.describe('Keyboard Interaction with inputs in tables', () => {
204
+ test(`should focus the cell when there's an input within & skip over input when pressing an ArrowKey`, async ({
205
+ page,
206
+ }) => {
207
+ /**
208
+ * Navigate to Column 4 row 1
209
+ */
210
+ await page.keyboard.press('Tab');
211
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
212
+ await page.keyboard.press('ArrowDown');
213
+ await page.keyboard.press('ArrowRight');
214
+ await page.keyboard.press('ArrowRight');
215
+ await page.keyboard.press('ArrowRight');
216
+
217
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"]')).toBeFocused();
218
+
219
+ await page.keyboard.press('ArrowRight');
220
+
221
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="5"] button').nth(0)).toBeFocused();
222
+ });
223
+
224
+ test('should ignore the inputs inside the table when tabbing through the page', async ({ page }) => {
225
+ await page.keyboard.press('Tab');
226
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
227
+
228
+ await page.keyboard.press('Tab');
229
+ /**
230
+ * This is the first input element in the table
231
+ */
232
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"] input')).not.toBeFocused();
233
+ });
234
+
235
+ test('should access the cells input with Enter, allow arrow keys to be used and allow esaping the cell with Escape', async ({
236
+ page,
237
+ }) => {
238
+ /**
239
+ * Navigate to Column 4 row 1
240
+ */
241
+ await page.keyboard.press('Tab');
242
+
243
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
244
+
245
+ await page.keyboard.press('ArrowDown');
246
+ await page.keyboard.press('ArrowRight');
247
+ await page.keyboard.press('ArrowRight');
248
+ await page.keyboard.press('ArrowRight');
249
+
250
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"]')).toBeFocused();
251
+
252
+ await page.keyboard.press('Enter');
253
+
254
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"] input')).toBeFocused();
255
+
256
+ await page.keyboard.insertText('Hello');
257
+
258
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"] input')).toHaveValue('Hello');
259
+
260
+ await page.keyboard.press('ArrowLeft');
261
+ await page.keyboard.press('ArrowLeft');
262
+ await page.keyboard.press('Backspace');
263
+
264
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"] input')).toHaveValue('Helo');
265
+
266
+ await page.keyboard.press('Escape');
267
+
268
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"]')).toBeFocused();
269
+ });
270
+
271
+ test('clicking on an input and then pressing Escape should focus the cell containing the input and then allow navigation from that cell', async ({
272
+ page,
273
+ }) => {
274
+ await page.locator('[aria-rowindex="2"] > [aria-colindex="4"] input').click();
275
+
276
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"] input')).toBeFocused();
277
+
278
+ await page.keyboard.press('Escape');
279
+
280
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="4"]')).toBeFocused();
281
+
282
+ await page.keyboard.press('ArrowLeft');
283
+
284
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="3"]')).toBeFocused();
285
+ });
286
+
287
+ test('trying to access a cell with no focussable children should do nothing', async ({ page }) => {
288
+ await page.keyboard.press('Tab');
289
+
290
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
291
+
292
+ await page.keyboard.press('Enter');
293
+
294
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
295
+
296
+ await page.keyboard.press('ArrowRight');
297
+
298
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="2"]')).toBeFocused();
299
+ });
300
+
301
+ test('mutliple buttons should not require their cell to be activated', async ({ page }) => {
302
+ await page.keyboard.press('Tab');
303
+
304
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="1"]')).toBeFocused();
305
+
306
+ await page.keyboard.press('ArrowDown');
307
+ await page.keyboard.press('ArrowRight');
308
+ await page.keyboard.press('ArrowRight');
309
+ await page.keyboard.press('ArrowRight');
310
+ await page.keyboard.press('ArrowRight');
311
+
312
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="5"] button').nth(0)).toBeFocused();
313
+
314
+ await page.keyboard.press('ArrowRight');
315
+
316
+ await expect(page.locator('[aria-rowindex="2"] > [aria-colindex="5"] button').nth(1)).toBeFocused();
317
+
318
+ await page.keyboard.press('ArrowDown');
319
+
320
+ await expect(page.locator('[aria-rowindex="3"] > [aria-colindex="5"] button').nth(0)).toBeFocused();
321
+
322
+ await page.keyboard.press('ArrowLeft');
323
+
324
+ await expect(page.locator('[aria-rowindex="3"] > [aria-colindex="4"]')).toBeFocused();
325
+
326
+ await page.keyboard.press('ArrowRight');
327
+ await page.keyboard.press('ArrowUp');
328
+ await page.keyboard.press('ArrowUp');
329
+
330
+ await expect(page.locator('[aria-rowindex="1"] > [aria-colindex="5"]')).toBeFocused();
331
+ });
332
+ });
333
+ });
334
+ });
335
+
336
+ test.describe('dark mode', () => {
337
+ test('triggers axe on the document', async ({ page }) => {
338
+ // This is the URL of the Storybook Iframe
339
+ await page.goto('/iframe.html?id=design-system-technical-components-rawtable--base&viewMode=story&theme=dark');
340
+ await injectAxe(page);
341
+ await checkA11y(page);
342
+ });
343
+ });
344
+ });
@@ -0,0 +1,7 @@
1
+ export const focusFocusable = (node) => {
2
+ const nextNode = node.querySelector('[tabindex="0"]');
3
+
4
+ if (nextNode) {
5
+ nextNode.focus();
6
+ }
7
+ };
@@ -0,0 +1,5 @@
1
+ export * from './RawTable';
2
+ export * from './RawCell';
3
+ export * from './RawThead';
4
+ export * from './RawTbody';
5
+ export * from './RawTr';