@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,114 @@
1
+ import { positionTooltip } from '../positionTooltip';
2
+
3
+ describe('positionTooltip', () => {
4
+ let tooltipNode;
5
+ let toggleSourceNode;
6
+
7
+ beforeEach(() => {
8
+ tooltipNode = {
9
+ getBoundingClientRect: () => ({ width: 160, height: 40 }),
10
+ };
11
+ toggleSourceNode = {
12
+ getBoundingClientRect: () => ({ left: 500, top: 300, width: 100, height: 30 }),
13
+ };
14
+
15
+ window.pageYOffset = 800;
16
+ });
17
+
18
+ it('positions the tooltip at the top of the toggle source', () => {
19
+ const position = positionTooltip(tooltipNode, toggleSourceNode);
20
+
21
+ expect(position).toEqual({ left: 470, top: 1052 });
22
+ });
23
+
24
+ it('positions the tooltip at the bottom of the toggle source', () => {
25
+ const position = positionTooltip(tooltipNode, toggleSourceNode, 'bottom');
26
+
27
+ expect(position).toEqual({ left: 470, top: 1138 });
28
+ });
29
+
30
+ it('positions the tooltip on the left of the toggle source', () => {
31
+ const position = positionTooltip(tooltipNode, toggleSourceNode, 'left');
32
+
33
+ expect(position).toEqual({ left: 332, top: 1095 });
34
+ });
35
+
36
+ it('positions the tooltip on the right of the toggle source', () => {
37
+ const position = positionTooltip(tooltipNode, toggleSourceNode, 'right');
38
+
39
+ expect(position).toEqual({ left: 608, top: 1095 });
40
+ });
41
+
42
+ it('positions the tooltip on the right of the toggle source when toggle source pos is top-left', () => {
43
+ toggleSourceNode = {
44
+ getBoundingClientRect: () => ({ left: 15, top: 15, width: 50, height: 20 }),
45
+ };
46
+ window.pageYOffset = 0;
47
+
48
+ const position = positionTooltip(tooltipNode, toggleSourceNode);
49
+
50
+ expect(position).toEqual({ left: 73, top: 3 });
51
+ });
52
+
53
+ it('positions the tooltip on the right of the toggle source when toggle source pos is bottom-left', () => {
54
+ toggleSourceNode = {
55
+ getBoundingClientRect: () => ({ left: 15, top: 760, width: 50, height: 20 }),
56
+ };
57
+
58
+ window.pageYOffset = 0;
59
+ window.innerHeight = 800;
60
+
61
+ const position = positionTooltip(tooltipNode, toggleSourceNode);
62
+
63
+ expect(position).toEqual({ left: 73, top: 748 });
64
+ });
65
+
66
+ it('positions the tooltip below the toggle source when toggle source pos is top-center', () => {
67
+ toggleSourceNode = {
68
+ getBoundingClientRect: () => ({ left: 400, top: 15, width: 50, height: 20 }),
69
+ };
70
+ window.pageYOffset = 0;
71
+ window.innerWidth = 800;
72
+
73
+ const position = positionTooltip(tooltipNode, toggleSourceNode);
74
+
75
+ expect(position).toEqual({ left: 345, top: 43 });
76
+ });
77
+
78
+ it('positions the tooltip above the toggle source when toggle source pos is bottom-center', () => {
79
+ toggleSourceNode = {
80
+ getBoundingClientRect: () => ({ left: 400, top: 760, width: 50, height: 20 }),
81
+ };
82
+ window.pageYOffset = 0;
83
+ window.innerWidth = 800;
84
+
85
+ const position = positionTooltip(tooltipNode, toggleSourceNode);
86
+
87
+ expect(position).toEqual({ left: 345, top: 712 });
88
+ });
89
+
90
+ it('positions the tooltip on the left of the toggle source when toggle source pos is top-right', () => {
91
+ toggleSourceNode = {
92
+ getBoundingClientRect: () => ({ left: 750, right: 800, top: 15, width: 50, height: 20 }),
93
+ };
94
+ window.innerWidth = 800;
95
+ window.pageYOffset = 0;
96
+
97
+ const position = positionTooltip(tooltipNode, toggleSourceNode);
98
+
99
+ expect(position).toEqual({ left: 582, top: 5 });
100
+ });
101
+
102
+ it('positions the tooltip on the left of the toggle source when toggle source pos is bottom-right', () => {
103
+ toggleSourceNode = {
104
+ getBoundingClientRect: () => ({ left: 750, right: 800, top: 760, width: 50, height: 20 }),
105
+ };
106
+ window.innerWidth = 800;
107
+ window.innerHeight = 800;
108
+ window.pageYOffset = 0;
109
+
110
+ const position = positionTooltip(tooltipNode, toggleSourceNode);
111
+
112
+ expect(position).toEqual({ left: 582, top: 750 });
113
+ });
114
+ });
@@ -0,0 +1,83 @@
1
+ const SPACE_BETWEEN = 8;
2
+
3
+ const positionBottom = (tooltipRect, toggleSourceRect) => {
4
+ const widthDifference = (tooltipRect.width - toggleSourceRect.width) / 2;
5
+ const left = toggleSourceRect.left - widthDifference;
6
+ const top = toggleSourceRect.top + toggleSourceRect.height + SPACE_BETWEEN + window.pageYOffset;
7
+
8
+ return {
9
+ left,
10
+ top,
11
+ };
12
+ };
13
+
14
+ const positionRight = (tooltipRect, toggleSourceRect) => {
15
+ const heightDifference = (tooltipRect.height - toggleSourceRect.height) / 2;
16
+ const left = toggleSourceRect.left + toggleSourceRect.width + SPACE_BETWEEN;
17
+ const top = toggleSourceRect.top - heightDifference + window.pageYOffset;
18
+
19
+ return { left, top };
20
+ };
21
+
22
+ const positionLeft = (tooltipRect, toggleSourceRect) => {
23
+ const heightDifference = (tooltipRect.height - toggleSourceRect.height) / 2;
24
+ const left = toggleSourceRect.left - tooltipRect.width - SPACE_BETWEEN;
25
+ const top = toggleSourceRect.top - heightDifference + window.pageYOffset;
26
+
27
+ return { left, top };
28
+ };
29
+
30
+ const positionTop = (tooltipRect, toggleSourceRect) => {
31
+ const widthDifference = (tooltipRect.width - toggleSourceRect.width) / 2;
32
+ let left = toggleSourceRect.left - widthDifference;
33
+ let top = toggleSourceRect.top - tooltipRect.height - SPACE_BETWEEN + window.pageYOffset;
34
+
35
+ //CONDITIONS TO HANDLE TOOLTIP OVERFLOW OUT OF VIEWPORT
36
+
37
+ //calculate the space between rightside viewport to rightside source element
38
+ //knowing this space will help calculate if tooltip will overflow right side
39
+ const rightSpaceDifference = window.innerWidth - toggleSourceRect.right;
40
+
41
+ //calculate rightside pos of tooltip to compare later to window.innerWidth
42
+ const overflowRight = toggleSourceRect.left + tooltipRect.width - rightSpaceDifference;
43
+
44
+ if (overflowRight > window.innerWidth) {
45
+ //if tooltip overflow right side of viewport
46
+ //place tooltip left side from source element
47
+ left = toggleSourceRect.left - tooltipRect.width - SPACE_BETWEEN;
48
+ top = toggleSourceRect.top + window.scrollY - toggleSourceRect.height / 2;
49
+ } else if (left < 0) {
50
+ //if overflow left
51
+ //place tooltip right side from source element
52
+ left = toggleSourceRect.width + toggleSourceRect.left + SPACE_BETWEEN;
53
+ top = toggleSourceRect.top + window.scrollY - tooltipRect.height / 2 + SPACE_BETWEEN;
54
+ } else if (top < 0 && left > 0) {
55
+ //if overflow top but not left
56
+ //place tooltip below source element
57
+ top = toggleSourceRect.top + toggleSourceRect.height + SPACE_BETWEEN;
58
+ }
59
+
60
+ return {
61
+ left,
62
+ top,
63
+ };
64
+ };
65
+
66
+ export const positionTooltip = (tooltipNode, toggleSourceNode, position) => {
67
+ const tooltipRect = tooltipNode.getBoundingClientRect();
68
+ const toggleSourceRect = toggleSourceNode.getBoundingClientRect();
69
+
70
+ if (position === 'bottom') {
71
+ return positionBottom(tooltipRect, toggleSourceRect);
72
+ }
73
+
74
+ if (position === 'right') {
75
+ return positionRight(tooltipRect, toggleSourceRect);
76
+ }
77
+
78
+ if (position === 'left') {
79
+ return positionLeft(tooltipRect, toggleSourceRect);
80
+ }
81
+
82
+ return positionTop(tooltipRect, toggleSourceRect);
83
+ };
@@ -0,0 +1,24 @@
1
+ import styled from 'styled-components';
2
+ import { ellipsisStyle, variantStyle, handleColor } from './utils';
3
+ import { typographyDefaultProps, typographyPropTypes } from './TypographyProps';
4
+
5
+ const transientProps = {
6
+ fontSize: true,
7
+ fontWeight: true,
8
+ };
9
+
10
+ export const Typography = styled.span.withConfig({
11
+ shouldForwardProp: (prop, defPropValFN) => !transientProps[prop] && defPropValFN(prop),
12
+ })`
13
+ font-weight: ${({ theme, fontWeight }) => theme.fontWeights[fontWeight]};
14
+ font-size: ${({ theme, fontSize }) => theme.fontSizes[fontSize]};
15
+ line-height: ${({ theme, lineHeight }) => theme.lineHeights[lineHeight]};
16
+ color: ${handleColor};
17
+ text-align: ${({ textAlign }) => textAlign};
18
+ text-transform: ${({ textTransform }) => textTransform};
19
+ ${ellipsisStyle}
20
+ ${variantStyle}
21
+ `;
22
+
23
+ Typography.defaultProps = typographyDefaultProps;
24
+ Typography.propTypes = typographyPropTypes;
@@ -0,0 +1,86 @@
1
+ <!--- Typography.stories.mdx --->
2
+
3
+ import { Meta, Story, Canvas } from '@storybook/addon-docs';
4
+ import { ArgsTable } from '@storybook/addon-docs';
5
+ import { Typography } from './Typography';
6
+ import { TypographyProps } from './TypographyProps';
7
+ import { Box } from '../Box';
8
+
9
+ <Meta title="Design System/Technical Components/Typography" component={Typography} />
10
+
11
+ # Text
12
+
13
+ This is the doc of the different Text / Typography components.
14
+
15
+ [View source](https://github.com/strapi/design-system/tree/main/packages/strapi-design-system/src/Typography)
16
+
17
+ ## Imports
18
+
19
+ ```js
20
+ import { Typography } from '@strapi/design-system/Typography';
21
+ ```
22
+
23
+ ## Usage of the different variants
24
+
25
+ The main way to display text content on the screen
26
+
27
+ <Canvas>
28
+ <Story name="variants">
29
+ <Box paddingTop={2} paddingLeft={4}>
30
+ <Typography variant="alpha">Alpha - header 1</Typography>
31
+ </Box>
32
+ <Box paddingTop={2} paddingLeft={4}>
33
+ <Typography variant="beta">Beta - header 2</Typography>
34
+ </Box>
35
+ <Box paddingTop={2} paddingLeft={4}>
36
+ <Typography variant="delta">Delta - header 3</Typography>
37
+ </Box>
38
+ <Box paddingTop={2} paddingLeft={4}>
39
+ <Typography variant="epsilon">Epsilon - subtitle</Typography>
40
+ </Box>
41
+ <Box paddingTop={2} paddingLeft={4}>
42
+ <Typography variant="omega">Omega - body</Typography>
43
+ </Box>
44
+ <Box paddingTop={2} paddingLeft={4}>
45
+ <Typography variant="omega" fontWeight="semiBold">
46
+ Omega semibold - body highlight
47
+ </Typography>
48
+ </Box>
49
+ <Box paddingTop={2} paddingLeft={4}>
50
+ <Typography variant="omega" fontWeight="bold">
51
+ Omega bold - button text
52
+ </Typography>
53
+ </Box>
54
+ <Box paddingTop={2} paddingLeft={4}>
55
+ <Typography variant="pi">Pi - small text</Typography>
56
+ </Box>
57
+ <Box paddingTop={2} paddingLeft={4}>
58
+ <Typography variant="pi" fontWeight="bold">
59
+ Pi bold - small button text
60
+ </Typography>
61
+ </Box>
62
+ <Box paddingTop={2} paddingLeft={4}>
63
+ <Typography variant="sigma">Sigma - table label</Typography>
64
+ </Box>
65
+ <Box paddingTop={2} paddingLeft={4} width="200px">
66
+ <Typography ellipsis>Ellipsis example - long text - long text</Typography>
67
+ </Box>
68
+ </Story>
69
+ </Canvas>
70
+
71
+ ### Ellipsis
72
+
73
+ By using the prop `ellipsis` it is possible to limit the text to one line and to
74
+ signal to the user there is more to it.
75
+
76
+ <Canvas>
77
+ <Story name="ellipsis">
78
+ <Box maxWidth="150px" borderStyle="solid" borderWidth="1px" borderColor="neutral200">
79
+ <Typography ellipsis>Loong text, that will be cut off</Typography>
80
+ </Box>
81
+ </Story>
82
+ </Canvas>
83
+
84
+ ## Props
85
+
86
+ <ArgsTable of={TypographyProps} />
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { TEXT_VARIANTS, OMEGA } from './constants';
4
+
5
+ export const TypographyProps = (props) => <div {...props} />;
6
+
7
+ export const typographyDefaultProps = {
8
+ ellipsis: false,
9
+ fontWeight: undefined,
10
+ fontSize: undefined,
11
+ lineHeight: undefined,
12
+ textColor: undefined,
13
+ textAlign: undefined,
14
+ textTransform: undefined,
15
+ variant: OMEGA,
16
+ };
17
+
18
+ export const typographyPropTypes = {
19
+ ellipsis: PropTypes.bool,
20
+ fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
21
+ fontWeight: PropTypes.string,
22
+ lineHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
23
+ textAlign: PropTypes.string,
24
+ textColor: PropTypes.string,
25
+ textTransform: PropTypes.string,
26
+ variant: PropTypes.oneOf(TEXT_VARIANTS),
27
+ };
28
+
29
+ TypographyProps.defaultProps = typographyDefaultProps;
30
+ TypographyProps.propTypes = typographyPropTypes;
@@ -0,0 +1,25 @@
1
+ import { injectAxe, checkA11y } from 'axe-playwright';
2
+
3
+ import { test } from '@playwright/test';
4
+
5
+ test.describe.parallel('Typography', () => {
6
+ test.describe('light mode', () => {
7
+ test('triggers axe on the document', async ({ page }) => {
8
+ // This is the URL of the Storybook Iframe
9
+ await page.goto('/iframe.html?id=design-system-technical-components-typography--variants&viewMode=story');
10
+ await injectAxe(page);
11
+ await checkA11y(page);
12
+ });
13
+ });
14
+
15
+ test.describe('dark mode', () => {
16
+ test('triggers axe on the document', async ({ page }) => {
17
+ // This is the URL of the Storybook Iframe
18
+ await page.goto(
19
+ '/iframe.html?id=design-system-technical-components-typography--variants&viewMode=story&theme=dark',
20
+ );
21
+ await injectAxe(page);
22
+ await checkA11y(page);
23
+ });
24
+ });
25
+ });
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { Typography } from '../Typography';
4
+ import { ThemeProvider } from '../../ThemeProvider';
5
+ import { lightTheme } from '../../themes';
6
+
7
+ const setup = (props) =>
8
+ render(
9
+ <ThemeProvider theme={lightTheme}>
10
+ <Typography {...props} />
11
+ </ThemeProvider>,
12
+ );
13
+
14
+ describe('Typography', () => {
15
+ test('textAlign', async () => {
16
+ const { container } = setup({
17
+ children: 'Test',
18
+ textAlign: 'center',
19
+ });
20
+
21
+ expect(container).toMatchSnapshot();
22
+ });
23
+
24
+ test('textTransform', () => {
25
+ const { container } = setup({
26
+ children: 'Test',
27
+ textTransform: 'uppercase',
28
+ });
29
+
30
+ expect(container).toMatchSnapshot();
31
+ });
32
+ });
@@ -0,0 +1,103 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Typography textAlign 1`] = `
4
+ .c0 {
5
+ color: #32324d;
6
+ text-align: center;
7
+ font-size: 0.875rem;
8
+ line-height: 1.43;
9
+ }
10
+
11
+ .c1 {
12
+ border: 0;
13
+ -webkit-clip: rect(0 0 0 0);
14
+ clip: rect(0 0 0 0);
15
+ height: 1px;
16
+ margin: -1px;
17
+ overflow: hidden;
18
+ padding: 0;
19
+ position: absolute;
20
+ width: 1px;
21
+ }
22
+
23
+ <div>
24
+ <span
25
+ class="c0"
26
+ >
27
+ Test
28
+ </span>
29
+ <div
30
+ class="c1"
31
+ >
32
+ <p
33
+ aria-live="polite"
34
+ aria-relevant="all"
35
+ id="live-region-log"
36
+ role="log"
37
+ />
38
+ <p
39
+ aria-live="polite"
40
+ aria-relevant="all"
41
+ id="live-region-status"
42
+ role="status"
43
+ />
44
+ <p
45
+ aria-live="assertive"
46
+ aria-relevant="all"
47
+ id="live-region-alert"
48
+ role="alert"
49
+ />
50
+ </div>
51
+ </div>
52
+ `;
53
+
54
+ exports[`Typography textTransform 1`] = `
55
+ .c0 {
56
+ color: #32324d;
57
+ text-transform: uppercase;
58
+ font-size: 0.875rem;
59
+ line-height: 1.43;
60
+ }
61
+
62
+ .c1 {
63
+ border: 0;
64
+ -webkit-clip: rect(0 0 0 0);
65
+ clip: rect(0 0 0 0);
66
+ height: 1px;
67
+ margin: -1px;
68
+ overflow: hidden;
69
+ padding: 0;
70
+ position: absolute;
71
+ width: 1px;
72
+ }
73
+
74
+ <div>
75
+ <span
76
+ class="c0"
77
+ >
78
+ Test
79
+ </span>
80
+ <div
81
+ class="c1"
82
+ >
83
+ <p
84
+ aria-live="polite"
85
+ aria-relevant="all"
86
+ id="live-region-log"
87
+ role="log"
88
+ />
89
+ <p
90
+ aria-live="polite"
91
+ aria-relevant="all"
92
+ id="live-region-status"
93
+ role="status"
94
+ />
95
+ <p
96
+ aria-live="assertive"
97
+ aria-relevant="all"
98
+ id="live-region-alert"
99
+ role="alert"
100
+ />
101
+ </div>
102
+ </div>
103
+ `;
@@ -0,0 +1,9 @@
1
+ export const ALPHA = 'alpha';
2
+ export const BETA = 'beta';
3
+ export const DELTA = 'delta';
4
+ export const EPSILON = 'epsilon';
5
+ export const OMEGA = 'omega';
6
+ export const PI = 'pi';
7
+ export const SIGMA = 'sigma';
8
+
9
+ export const TEXT_VARIANTS = [ALPHA, BETA, DELTA, EPSILON, OMEGA, PI, SIGMA];
@@ -0,0 +1 @@
1
+ export * from './Typography';
@@ -0,0 +1,69 @@
1
+ import { ALPHA, BETA, DELTA, EPSILON, OMEGA, PI, SIGMA } from './constants';
2
+
3
+ export const ellipsisStyle = ({ ellipsis }) =>
4
+ ellipsis &&
5
+ `
6
+ display: block;
7
+ white-space: nowrap;
8
+ overflow: hidden;
9
+ text-overflow: ellipsis;
10
+ `;
11
+
12
+ export const variantStyle = ({ variant, theme }) => {
13
+ switch (variant) {
14
+ case ALPHA: {
15
+ return `
16
+ font-weight: ${theme.fontWeights.bold};
17
+ font-size: ${theme.fontSizes[5]};
18
+ line-height: ${theme.lineHeights[2]};
19
+ `;
20
+ }
21
+ case BETA: {
22
+ return `
23
+ font-weight: ${theme.fontWeights.bold};
24
+ font-size: ${theme.fontSizes[4]};
25
+ line-height: ${theme.lineHeights[1]};
26
+ `;
27
+ }
28
+ case DELTA: {
29
+ return `
30
+ font-weight: ${theme.fontWeights.semiBold};
31
+ font-size: ${theme.fontSizes[3]};
32
+ line-height: ${theme.lineHeights[2]};
33
+ `;
34
+ }
35
+ case EPSILON: {
36
+ return `
37
+ font-size: ${theme.fontSizes[3]};
38
+ line-height: ${theme.lineHeights[6]};
39
+ `;
40
+ }
41
+ case OMEGA: {
42
+ return `
43
+ font-size: ${theme.fontSizes[2]};
44
+ line-height: ${theme.lineHeights[4]};
45
+ `;
46
+ }
47
+ case PI: {
48
+ return `
49
+ font-size: ${theme.fontSizes[1]};
50
+ line-height: ${theme.lineHeights[3]};
51
+ `;
52
+ }
53
+ case SIGMA: {
54
+ return `
55
+ font-weight: ${theme.fontWeights.bold};
56
+ font-size: ${theme.fontSizes[0]};
57
+ line-height: ${theme.lineHeights[5]};
58
+ text-transform: uppercase;
59
+ `;
60
+ }
61
+ default: {
62
+ return `
63
+ font-size: ${theme.fontSizes[2]};
64
+ `;
65
+ }
66
+ }
67
+ };
68
+
69
+ export const handleColor = ({ theme, textColor }) => theme.colors[textColor || 'neutral800'];
@@ -0,0 +1,12 @@
1
+ import styled from 'styled-components';
2
+
3
+ export const VisuallyHidden = styled.div`
4
+ border: 0;
5
+ clip: rect(0 0 0 0);
6
+ height: 1px;
7
+ margin: -1px;
8
+ overflow: hidden;
9
+ padding: 0;
10
+ position: absolute;
11
+ width: 1px;
12
+ `;
@@ -0,0 +1 @@
1
+ export * from './VisuallyHidden';
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { useId } from '../useId';
4
+
5
+ describe('useId', () => {
6
+ it('snapshots with a generated id and a prefix', () => {
7
+ const TestCompo = () => {
8
+ const id = useId('my-prefix', undefined);
9
+
10
+ return <div id={id} />;
11
+ };
12
+
13
+ const { container } = render(<TestCompo />);
14
+ expect(container).toMatchInlineSnapshot(`
15
+ <div>
16
+ <div
17
+ id="my-prefix-1"
18
+ />
19
+ </div>
20
+ `);
21
+ });
22
+
23
+ it('snapshots with a predefined ID', () => {
24
+ const TestCompo = () => {
25
+ const id = useId('my-prefix', 'my-custom-id');
26
+
27
+ return <div id={id} />;
28
+ };
29
+
30
+ const { container } = render(<TestCompo />);
31
+ expect(container).toMatchInlineSnapshot(`
32
+ <div>
33
+ <div
34
+ id="my-custom-id"
35
+ />
36
+ </div>
37
+ `);
38
+ });
39
+ });
@@ -0,0 +1 @@
1
+ export const escapeSelector = (selector) => selector.replace(':', '-');
@@ -0,0 +1,2 @@
1
+ let id = 0;
2
+ export const genId = () => ++id;
@@ -0,0 +1,33 @@
1
+ /**
2
+ *
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.} operator
14
+
15
+ Link to the code: https://github.com/adobe/react-spectrum/blob/1e2b7f280a04ead83e21b27fa580eb189e5f4186/packages/%40react-aria/i18n/src/useDefaultLocale.ts#L28
16
+ */
17
+ const DEFAULT_LOCALE = 'en-EN';
18
+
19
+ export const getDefaultLocale = () => {
20
+ if (typeof navigator === 'undefined') {
21
+ return DEFAULT_LOCALE;
22
+ }
23
+
24
+ if (navigator.language) {
25
+ return navigator.language;
26
+ }
27
+
28
+ if (navigator.userLanguage) {
29
+ return navigator.userLanguage;
30
+ }
31
+
32
+ return DEFAULT_LOCALE;
33
+ };