@primer/components 29.1.1 → 30.0.0-rc.9be85598

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 (740) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +10 -0
  3. package/.devcontainer/devcontainer.json +8 -0
  4. package/.eslintrc.json +136 -0
  5. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  6. package/.github/ISSUE_TEMPLATE/new_component_proposal_template.md +41 -0
  7. package/.github/dependabot.yml +18 -0
  8. package/.github/pull_request_template.md +18 -0
  9. package/.github/workflows/ci.yml +31 -0
  10. package/.github/workflows/deploy_preview.yml +47 -0
  11. package/.github/workflows/deploy_production.yml +70 -0
  12. package/.github/workflows/release.yml +35 -0
  13. package/.github/workflows/release_canary.yml +70 -0
  14. package/.github/workflows/release_candidate.yml +60 -0
  15. package/.github/workflows/size.yml +13 -0
  16. package/.github/workflows/stale.yml +26 -0
  17. package/.gitignore +10 -0
  18. package/.npmrc +4 -0
  19. package/.nvmrc +1 -0
  20. package/.storybook/main.js +11 -0
  21. package/.storybook/preview.js +69 -0
  22. package/.vscode/launch.json +21 -0
  23. package/.vscode/settings.json +13 -0
  24. package/@types/@styled-system/index.d.ts +0 -0
  25. package/@types/@styled-system/prop-types/index.d.ts +1 -0
  26. package/@types/@styled-system/props/index.d.ts +1 -0
  27. package/@types/jest-styled-components/index.d.ts +1 -0
  28. package/CHANGELOG.md +13 -1
  29. package/CODEOWNERS +2 -0
  30. package/babel-defines.js +13 -0
  31. package/babel.config.js +39 -0
  32. package/contributor-docs/CODE_OF_CONDUCT.md +76 -0
  33. package/contributor-docs/CONTRIBUTING.md +274 -0
  34. package/contributor-docs/adrs/adr-001-typescript.md +23 -0
  35. package/contributor-docs/adrs/adr-002-behavior-isolation.md +106 -0
  36. package/contributor-docs/behaviors.md +132 -0
  37. package/contributor-docs/component-contents-api-patterns.md +316 -0
  38. package/contributor-docs/principles.md +39 -0
  39. package/dist/browser.esm.js +131 -131
  40. package/dist/browser.esm.js.map +1 -1
  41. package/dist/browser.umd.js +114 -114
  42. package/dist/browser.umd.js.map +1 -1
  43. package/docs/.eslintrc +0 -0
  44. package/docs/.gitignore +91 -0
  45. package/docs/components/PropsList.js +5 -0
  46. package/docs/components/State.js +9 -0
  47. package/docs/components/constants.js +34 -0
  48. package/docs/components/index.js +2 -0
  49. package/docs/content/ActionList.mdx +72 -0
  50. package/docs/content/ActionMenu.mdx +80 -0
  51. package/docs/content/AnchoredOverlay.mdx +37 -0
  52. package/docs/content/Avatar.mdx +33 -0
  53. package/docs/content/AvatarStack.mdx +43 -0
  54. package/docs/content/BorderBox.md +46 -0
  55. package/docs/content/Box.md +74 -0
  56. package/docs/content/BranchName.md +18 -0
  57. package/docs/content/Breadcrumbs.md +52 -0
  58. package/docs/content/Buttons.md +56 -0
  59. package/docs/content/CircleBadge.md +45 -0
  60. package/docs/content/CircleOcticon.md +18 -0
  61. package/docs/content/CounterLabel.md +32 -0
  62. package/docs/content/Details.md +105 -0
  63. package/docs/content/Dialog.md +108 -0
  64. package/docs/content/Dialog2.mdx +179 -0
  65. package/docs/content/Dropdown.md +72 -0
  66. package/docs/content/DropdownMenu.mdx +49 -0
  67. package/docs/content/FilterList.md +44 -0
  68. package/docs/content/FilteredSearch.md +39 -0
  69. package/docs/content/Flash.md +44 -0
  70. package/docs/content/Flex.md +58 -0
  71. package/docs/content/FormGroup.md +46 -0
  72. package/docs/content/Grid.md +59 -0
  73. package/docs/content/Header.md +79 -0
  74. package/docs/content/Heading.md +22 -0
  75. package/docs/content/Label.md +42 -0
  76. package/docs/content/LabelGroup.md +31 -0
  77. package/docs/content/Link.md +37 -0
  78. package/docs/content/Overlay.mdx +94 -0
  79. package/docs/content/Pagehead.md +27 -0
  80. package/docs/content/Pagination.md +187 -0
  81. package/docs/content/PointerBox.md +81 -0
  82. package/docs/content/Popover.md +137 -0
  83. package/docs/content/Portal.mdx +78 -0
  84. package/docs/content/Position.md +100 -0
  85. package/docs/content/ProgressBar.mdx +29 -0
  86. package/docs/content/SelectMenu.md +435 -0
  87. package/docs/content/SelectPanel.mdx +67 -0
  88. package/docs/content/SideNav.md +179 -0
  89. package/docs/content/Spinner.mdx +32 -0
  90. package/docs/content/StateLabel.md +35 -0
  91. package/docs/content/StyledOcticon.md +36 -0
  92. package/docs/content/SubNav.md +102 -0
  93. package/docs/content/TabNav.md +50 -0
  94. package/docs/content/Text.md +31 -0
  95. package/docs/content/TextInput.md +34 -0
  96. package/docs/content/Timeline.md +138 -0
  97. package/docs/content/Tooltip.md +41 -0
  98. package/docs/content/Truncate.md +64 -0
  99. package/docs/content/UnderlineNav.md +53 -0
  100. package/docs/content/anchoredPosition.mdx +163 -0
  101. package/docs/content/core-concepts.md +70 -0
  102. package/docs/content/focusTrap.mdx +103 -0
  103. package/docs/content/focusZone.mdx +145 -0
  104. package/docs/content/getting-started.md +138 -0
  105. package/docs/content/index.md +33 -0
  106. package/docs/content/linting.md +35 -0
  107. package/docs/content/overriding-styles.mdx +81 -0
  108. package/docs/content/philosophy.md +23 -0
  109. package/docs/content/primer-theme.md +89 -0
  110. package/docs/content/ssr.mdx +43 -0
  111. package/docs/content/system-props.mdx +37 -0
  112. package/docs/content/theme-reference.md +16 -0
  113. package/docs/content/theming.md +249 -0
  114. package/docs/content/useOnEscapePress.mdx +56 -0
  115. package/docs/content/useOnOutsideClick.mdx +57 -0
  116. package/docs/content/useOpenAndCloseFocus.mdx +49 -0
  117. package/docs/content/useOverlay.mdx +62 -0
  118. package/docs/content/useSafeTimeout.mdx +32 -0
  119. package/docs/gatsby-config.js +30 -0
  120. package/docs/gatsby-node.js +101 -0
  121. package/docs/package-lock.json +20979 -0
  122. package/docs/package.json +36 -0
  123. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +21 -0
  124. package/docs/src/@primer/gatsby-theme-doctocat/components/live-code.js +84 -0
  125. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +39 -0
  126. package/docs/src/@primer/gatsby-theme-doctocat/components/nav-dropdown.js +48 -0
  127. package/docs/src/@primer/gatsby-theme-doctocat/components/wrap-page-element.js +25 -0
  128. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +54 -0
  129. package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +127 -0
  130. package/docs/src/@primer/gatsby-theme-doctocat/primer-components-hero.svg +1411 -0
  131. package/docs/src/props.js +77 -0
  132. package/jest.config.js +13 -0
  133. package/lib/ActionList/Item.js +1 -1
  134. package/lib/Breadcrumbs.d.ts +40 -0
  135. package/lib/{Breadcrumb.js → Breadcrumbs.js} +31 -21
  136. package/lib/__tests__/ActionList.d.ts +1 -0
  137. package/lib/__tests__/ActionList.js +64 -0
  138. package/lib/__tests__/ActionMenu.d.ts +1 -0
  139. package/lib/__tests__/ActionMenu.js +151 -0
  140. package/lib/__tests__/AnchoredOverlay.d.ts +1 -0
  141. package/lib/__tests__/AnchoredOverlay.js +160 -0
  142. package/lib/__tests__/Avatar.d.ts +1 -0
  143. package/lib/__tests__/Avatar.js +67 -0
  144. package/lib/__tests__/AvatarStack.d.ts +1 -0
  145. package/lib/__tests__/AvatarStack.js +68 -0
  146. package/lib/__tests__/BorderBox.d.ts +1 -0
  147. package/lib/__tests__/BorderBox.js +58 -0
  148. package/lib/__tests__/Box.d.ts +1 -0
  149. package/lib/__tests__/Box.js +78 -0
  150. package/lib/__tests__/BranchName.d.ts +1 -0
  151. package/lib/__tests__/BranchName.js +36 -0
  152. package/lib/__tests__/Breadcrumbs.d.ts +1 -0
  153. package/lib/__tests__/Breadcrumbs.js +37 -0
  154. package/lib/__tests__/BreadcrumbsItem.d.ts +1 -0
  155. package/lib/__tests__/BreadcrumbsItem.js +49 -0
  156. package/lib/__tests__/Button.d.ts +1 -0
  157. package/lib/__tests__/Button.js +143 -0
  158. package/lib/__tests__/Caret.d.ts +1 -0
  159. package/lib/__tests__/Caret.js +52 -0
  160. package/lib/__tests__/CircleBadge.d.ts +1 -0
  161. package/lib/__tests__/CircleBadge.js +83 -0
  162. package/lib/__tests__/CircleOcticon.d.ts +1 -0
  163. package/lib/__tests__/CircleOcticon.js +71 -0
  164. package/lib/__tests__/CounterLabel.d.ts +1 -0
  165. package/lib/__tests__/CounterLabel.js +58 -0
  166. package/lib/__tests__/Details.d.ts +1 -0
  167. package/lib/__tests__/Details.js +117 -0
  168. package/lib/__tests__/Dialog.d.ts +1 -0
  169. package/lib/__tests__/Dialog.js +184 -0
  170. package/lib/__tests__/Dropdown.d.ts +1 -0
  171. package/lib/__tests__/Dropdown.js +63 -0
  172. package/lib/__tests__/DropdownMenu.d.ts +1 -0
  173. package/lib/__tests__/DropdownMenu.js +150 -0
  174. package/lib/__tests__/FilterList.d.ts +1 -0
  175. package/lib/__tests__/FilterList.js +36 -0
  176. package/lib/__tests__/FilterListItem.d.ts +1 -0
  177. package/lib/__tests__/FilterListItem.js +46 -0
  178. package/lib/__tests__/FilteredSearch.d.ts +1 -0
  179. package/lib/__tests__/FilteredSearch.js +36 -0
  180. package/lib/__tests__/Flash.d.ts +1 -0
  181. package/lib/__tests__/Flash.js +62 -0
  182. package/lib/__tests__/Flex.d.ts +1 -0
  183. package/lib/__tests__/Flex.js +74 -0
  184. package/lib/__tests__/FormGroup.d.ts +1 -0
  185. package/lib/__tests__/FormGroup.js +54 -0
  186. package/lib/__tests__/Grid.d.ts +1 -0
  187. package/lib/__tests__/Grid.js +104 -0
  188. package/lib/__tests__/Header.d.ts +1 -0
  189. package/lib/__tests__/Header.js +58 -0
  190. package/lib/__tests__/Heading.d.ts +1 -0
  191. package/lib/__tests__/Heading.js +109 -0
  192. package/lib/__tests__/Label.d.ts +1 -0
  193. package/lib/__tests__/Label.js +46 -0
  194. package/lib/__tests__/LabelGroup.d.ts +1 -0
  195. package/lib/__tests__/LabelGroup.js +38 -0
  196. package/lib/__tests__/Link.d.ts +1 -0
  197. package/lib/__tests__/Link.js +70 -0
  198. package/lib/__tests__/Overlay.d.ts +1 -0
  199. package/lib/__tests__/Overlay.js +145 -0
  200. package/lib/__tests__/Pagehead.d.ts +1 -0
  201. package/lib/__tests__/Pagehead.js +37 -0
  202. package/lib/__tests__/Pagination/Pagination.d.ts +1 -0
  203. package/lib/__tests__/Pagination/Pagination.js +47 -0
  204. package/lib/__tests__/Pagination/PaginationModel.d.ts +1 -0
  205. package/lib/__tests__/Pagination/PaginationModel.js +186 -0
  206. package/lib/__tests__/PointerBox.d.ts +1 -0
  207. package/lib/__tests__/PointerBox.js +46 -0
  208. package/lib/__tests__/Popover.d.ts +1 -0
  209. package/lib/__tests__/Popover.js +66 -0
  210. package/lib/__tests__/Portal.d.ts +1 -0
  211. package/lib/__tests__/Portal.js +124 -0
  212. package/lib/__tests__/Position.d.ts +1 -0
  213. package/lib/__tests__/Position.js +143 -0
  214. package/lib/__tests__/ProgressBar.d.ts +1 -0
  215. package/lib/__tests__/ProgressBar.js +68 -0
  216. package/lib/__tests__/SelectMenu.d.ts +1 -0
  217. package/lib/__tests__/SelectMenu.js +155 -0
  218. package/lib/__tests__/SelectPanel.d.ts +1 -0
  219. package/lib/__tests__/SelectPanel.js +80 -0
  220. package/lib/__tests__/SideNav.d.ts +1 -0
  221. package/lib/__tests__/SideNav.js +71 -0
  222. package/lib/__tests__/Spinner.d.ts +1 -0
  223. package/lib/__tests__/Spinner.js +53 -0
  224. package/lib/__tests__/StateLabel.d.ts +1 -0
  225. package/lib/__tests__/StateLabel.js +71 -0
  226. package/lib/__tests__/StyledOcticon.d.ts +1 -0
  227. package/lib/__tests__/StyledOcticon.js +40 -0
  228. package/lib/__tests__/SubNav.d.ts +1 -0
  229. package/lib/__tests__/SubNav.js +62 -0
  230. package/lib/__tests__/SubNavLink.d.ts +1 -0
  231. package/lib/__tests__/SubNavLink.js +49 -0
  232. package/lib/__tests__/TabNav.d.ts +1 -0
  233. package/lib/__tests__/TabNav.js +49 -0
  234. package/lib/__tests__/Text.d.ts +1 -0
  235. package/lib/__tests__/Text.js +105 -0
  236. package/lib/__tests__/TextInput.d.ts +1 -0
  237. package/lib/__tests__/TextInput.js +78 -0
  238. package/lib/__tests__/ThemeProvider.d.ts +1 -0
  239. package/lib/__tests__/ThemeProvider.js +444 -0
  240. package/lib/__tests__/Timeline.d.ts +1 -0
  241. package/lib/__tests__/Timeline.js +75 -0
  242. package/lib/__tests__/Tooltip.d.ts +1 -0
  243. package/lib/__tests__/Tooltip.js +69 -0
  244. package/lib/__tests__/Truncate.d.ts +1 -0
  245. package/lib/__tests__/Truncate.js +63 -0
  246. package/lib/__tests__/UnderlineNav.d.ts +1 -0
  247. package/lib/__tests__/UnderlineNav.js +72 -0
  248. package/lib/__tests__/UnderlineNavLink.d.ts +1 -0
  249. package/lib/__tests__/UnderlineNavLink.js +51 -0
  250. package/lib/__tests__/behaviors/anchoredPosition.d.ts +1 -0
  251. package/lib/__tests__/behaviors/anchoredPosition.js +390 -0
  252. package/lib/__tests__/behaviors/focusTrap.d.ts +1 -0
  253. package/lib/__tests__/behaviors/focusTrap.js +234 -0
  254. package/lib/__tests__/behaviors/focusZone.d.ts +1 -0
  255. package/lib/__tests__/behaviors/focusZone.js +570 -0
  256. package/lib/__tests__/behaviors/iterateFocusableElements.d.ts +1 -0
  257. package/lib/__tests__/behaviors/iterateFocusableElements.js +55 -0
  258. package/lib/__tests__/filterObject.d.ts +1 -0
  259. package/lib/__tests__/filterObject.js +30 -0
  260. package/lib/__tests__/hooks/useAnchoredPosition.d.ts +1 -0
  261. package/lib/__tests__/hooks/useAnchoredPosition.js +54 -0
  262. package/lib/__tests__/hooks/useOnEscapePress.d.ts +1 -0
  263. package/lib/__tests__/hooks/useOnEscapePress.js +32 -0
  264. package/lib/__tests__/hooks/useOnOutsideClick.d.ts +1 -0
  265. package/lib/__tests__/hooks/useOnOutsideClick.js +87 -0
  266. package/lib/__tests__/hooks/useOpenAndCloseFocus.d.ts +1 -0
  267. package/lib/__tests__/hooks/useOpenAndCloseFocus.js +60 -0
  268. package/lib/__tests__/hooks/useProvidedStateOrCreate.d.ts +1 -0
  269. package/lib/__tests__/hooks/useProvidedStateOrCreate.js +45 -0
  270. package/lib/__tests__/theme.d.ts +1 -0
  271. package/lib/__tests__/theme.js +36 -0
  272. package/lib/__tests__/themeGet.d.ts +1 -0
  273. package/lib/__tests__/themeGet.js +25 -0
  274. package/lib/__tests__/useSafeTimeout.d.ts +1 -0
  275. package/lib/__tests__/useSafeTimeout.js +45 -0
  276. package/lib/index.d.ts +2 -2
  277. package/lib/index.js +8 -2
  278. package/lib/stories/ActionList.stories.js +382 -0
  279. package/lib/stories/ActionMenu.stories.js +338 -0
  280. package/lib/stories/AnchoredOverlay.stories.js +127 -0
  281. package/lib/stories/AvatarStack.stories.js +49 -0
  282. package/lib/stories/Button.stories.js +114 -0
  283. package/lib/stories/ConfirmationDialog.stories.js +111 -0
  284. package/lib/stories/Dialog.stories.js +265 -0
  285. package/lib/stories/DropdownMenu.stories.js +122 -0
  286. package/lib/stories/Overlay.stories.js +185 -0
  287. package/lib/stories/Portal.stories.js +104 -0
  288. package/lib/stories/SelectPanel.stories.js +342 -0
  289. package/lib/stories/ThemeProvider.stories.js +102 -0
  290. package/lib/stories/useAnchoredPosition.stories.js +351 -0
  291. package/lib/stories/useFocusTrap.stories.js +356 -0
  292. package/lib/stories/useFocusZone.stories.js +599 -0
  293. package/lib/utils/testing.d.ts +0 -1
  294. package/lib-esm/ActionList/Item.js +1 -1
  295. package/lib-esm/Breadcrumbs.d.ts +40 -0
  296. package/lib-esm/{Breadcrumb.js → Breadcrumbs.js} +28 -19
  297. package/lib-esm/__tests__/ActionList.d.ts +1 -0
  298. package/lib-esm/__tests__/ActionList.js +52 -0
  299. package/lib-esm/__tests__/ActionMenu.d.ts +1 -0
  300. package/lib-esm/__tests__/ActionMenu.js +139 -0
  301. package/lib-esm/__tests__/AnchoredOverlay.d.ts +1 -0
  302. package/lib-esm/__tests__/AnchoredOverlay.js +134 -0
  303. package/lib-esm/__tests__/Avatar.d.ts +1 -0
  304. package/lib-esm/__tests__/Avatar.js +56 -0
  305. package/lib-esm/__tests__/AvatarStack.d.ts +1 -0
  306. package/lib-esm/__tests__/AvatarStack.js +55 -0
  307. package/lib-esm/__tests__/BorderBox.d.ts +1 -0
  308. package/lib-esm/__tests__/BorderBox.js +47 -0
  309. package/lib-esm/__tests__/Box.d.ts +1 -0
  310. package/lib-esm/__tests__/Box.js +67 -0
  311. package/lib-esm/__tests__/BranchName.d.ts +1 -0
  312. package/lib-esm/__tests__/BranchName.js +26 -0
  313. package/lib-esm/__tests__/Breadcrumbs.d.ts +1 -0
  314. package/lib-esm/__tests__/Breadcrumbs.js +27 -0
  315. package/lib-esm/__tests__/BreadcrumbsItem.d.ts +1 -0
  316. package/lib-esm/__tests__/BreadcrumbsItem.js +39 -0
  317. package/lib-esm/__tests__/Button.d.ts +1 -0
  318. package/lib-esm/__tests__/Button.js +133 -0
  319. package/lib-esm/__tests__/Caret.d.ts +1 -0
  320. package/lib-esm/__tests__/Caret.js +42 -0
  321. package/lib-esm/__tests__/CircleBadge.d.ts +1 -0
  322. package/lib-esm/__tests__/CircleBadge.js +70 -0
  323. package/lib-esm/__tests__/CircleOcticon.d.ts +1 -0
  324. package/lib-esm/__tests__/CircleOcticon.js +59 -0
  325. package/lib-esm/__tests__/CounterLabel.d.ts +1 -0
  326. package/lib-esm/__tests__/CounterLabel.js +47 -0
  327. package/lib-esm/__tests__/Details.d.ts +1 -0
  328. package/lib-esm/__tests__/Details.js +107 -0
  329. package/lib-esm/__tests__/Dialog.d.ts +1 -0
  330. package/lib-esm/__tests__/Dialog.js +171 -0
  331. package/lib-esm/__tests__/Dropdown.d.ts +1 -0
  332. package/lib-esm/__tests__/Dropdown.js +53 -0
  333. package/lib-esm/__tests__/DropdownMenu.d.ts +1 -0
  334. package/lib-esm/__tests__/DropdownMenu.js +137 -0
  335. package/lib-esm/__tests__/FilterList.d.ts +1 -0
  336. package/lib-esm/__tests__/FilterList.js +26 -0
  337. package/lib-esm/__tests__/FilterListItem.d.ts +1 -0
  338. package/lib-esm/__tests__/FilterListItem.js +36 -0
  339. package/lib-esm/__tests__/FilteredSearch.d.ts +1 -0
  340. package/lib-esm/__tests__/FilteredSearch.js +26 -0
  341. package/lib-esm/__tests__/Flash.d.ts +1 -0
  342. package/lib-esm/__tests__/Flash.js +51 -0
  343. package/lib-esm/__tests__/Flex.d.ts +1 -0
  344. package/lib-esm/__tests__/Flex.js +64 -0
  345. package/lib-esm/__tests__/FormGroup.d.ts +1 -0
  346. package/lib-esm/__tests__/FormGroup.js +44 -0
  347. package/lib-esm/__tests__/Grid.d.ts +1 -0
  348. package/lib-esm/__tests__/Grid.js +94 -0
  349. package/lib-esm/__tests__/Header.d.ts +1 -0
  350. package/lib-esm/__tests__/Header.js +48 -0
  351. package/lib-esm/__tests__/Heading.d.ts +1 -0
  352. package/lib-esm/__tests__/Heading.js +99 -0
  353. package/lib-esm/__tests__/Label.d.ts +1 -0
  354. package/lib-esm/__tests__/Label.js +36 -0
  355. package/lib-esm/__tests__/LabelGroup.d.ts +1 -0
  356. package/lib-esm/__tests__/LabelGroup.js +26 -0
  357. package/lib-esm/__tests__/Link.d.ts +1 -0
  358. package/lib-esm/__tests__/Link.js +60 -0
  359. package/lib-esm/__tests__/Overlay.d.ts +1 -0
  360. package/lib-esm/__tests__/Overlay.js +123 -0
  361. package/lib-esm/__tests__/Pagehead.d.ts +1 -0
  362. package/lib-esm/__tests__/Pagehead.js +26 -0
  363. package/lib-esm/__tests__/Pagination/Pagination.d.ts +1 -0
  364. package/lib-esm/__tests__/Pagination/Pagination.js +35 -0
  365. package/lib-esm/__tests__/Pagination/PaginationModel.d.ts +1 -0
  366. package/lib-esm/__tests__/Pagination/PaginationModel.js +182 -0
  367. package/lib-esm/__tests__/PointerBox.d.ts +1 -0
  368. package/lib-esm/__tests__/PointerBox.js +36 -0
  369. package/lib-esm/__tests__/Popover.d.ts +1 -0
  370. package/lib-esm/__tests__/Popover.js +53 -0
  371. package/lib-esm/__tests__/Portal.d.ts +1 -0
  372. package/lib-esm/__tests__/Portal.js +104 -0
  373. package/lib-esm/__tests__/Position.d.ts +1 -0
  374. package/lib-esm/__tests__/Position.js +133 -0
  375. package/lib-esm/__tests__/ProgressBar.d.ts +1 -0
  376. package/lib-esm/__tests__/ProgressBar.js +58 -0
  377. package/lib-esm/__tests__/SelectMenu.d.ts +1 -0
  378. package/lib-esm/__tests__/SelectMenu.js +145 -0
  379. package/lib-esm/__tests__/SelectPanel.d.ts +1 -0
  380. package/lib-esm/__tests__/SelectPanel.js +65 -0
  381. package/lib-esm/__tests__/SideNav.d.ts +1 -0
  382. package/lib-esm/__tests__/SideNav.js +60 -0
  383. package/lib-esm/__tests__/Spinner.d.ts +1 -0
  384. package/lib-esm/__tests__/Spinner.js +43 -0
  385. package/lib-esm/__tests__/StateLabel.d.ts +1 -0
  386. package/lib-esm/__tests__/StateLabel.js +61 -0
  387. package/lib-esm/__tests__/StyledOcticon.d.ts +1 -0
  388. package/lib-esm/__tests__/StyledOcticon.js +29 -0
  389. package/lib-esm/__tests__/SubNav.d.ts +1 -0
  390. package/lib-esm/__tests__/SubNav.js +50 -0
  391. package/lib-esm/__tests__/SubNavLink.d.ts +1 -0
  392. package/lib-esm/__tests__/SubNavLink.js +39 -0
  393. package/lib-esm/__tests__/TabNav.d.ts +1 -0
  394. package/lib-esm/__tests__/TabNav.js +39 -0
  395. package/lib-esm/__tests__/Text.d.ts +1 -0
  396. package/lib-esm/__tests__/Text.js +93 -0
  397. package/lib-esm/__tests__/TextInput.d.ts +1 -0
  398. package/lib-esm/__tests__/TextInput.js +68 -0
  399. package/lib-esm/__tests__/ThemeProvider.d.ts +1 -0
  400. package/lib-esm/__tests__/ThemeProvider.js +408 -0
  401. package/lib-esm/__tests__/Timeline.d.ts +1 -0
  402. package/lib-esm/__tests__/Timeline.js +65 -0
  403. package/lib-esm/__tests__/Tooltip.d.ts +1 -0
  404. package/lib-esm/__tests__/Tooltip.js +59 -0
  405. package/lib-esm/__tests__/Truncate.d.ts +1 -0
  406. package/lib-esm/__tests__/Truncate.js +53 -0
  407. package/lib-esm/__tests__/UnderlineNav.d.ts +1 -0
  408. package/lib-esm/__tests__/UnderlineNav.js +60 -0
  409. package/lib-esm/__tests__/UnderlineNavLink.d.ts +1 -0
  410. package/lib-esm/__tests__/UnderlineNavLink.js +41 -0
  411. package/lib-esm/__tests__/behaviors/anchoredPosition.d.ts +1 -0
  412. package/lib-esm/__tests__/behaviors/anchoredPosition.js +388 -0
  413. package/lib-esm/__tests__/behaviors/focusTrap.d.ts +1 -0
  414. package/lib-esm/__tests__/behaviors/focusTrap.js +227 -0
  415. package/lib-esm/__tests__/behaviors/focusZone.d.ts +1 -0
  416. package/lib-esm/__tests__/behaviors/focusZone.js +487 -0
  417. package/lib-esm/__tests__/behaviors/iterateFocusableElements.d.ts +1 -0
  418. package/lib-esm/__tests__/behaviors/iterateFocusableElements.js +48 -0
  419. package/lib-esm/__tests__/filterObject.d.ts +1 -0
  420. package/lib-esm/__tests__/filterObject.js +27 -0
  421. package/lib-esm/__tests__/hooks/useAnchoredPosition.d.ts +1 -0
  422. package/lib-esm/__tests__/hooks/useAnchoredPosition.js +46 -0
  423. package/lib-esm/__tests__/hooks/useOnEscapePress.d.ts +1 -0
  424. package/lib-esm/__tests__/hooks/useOnEscapePress.js +23 -0
  425. package/lib-esm/__tests__/hooks/useOnOutsideClick.d.ts +1 -0
  426. package/lib-esm/__tests__/hooks/useOnOutsideClick.js +68 -0
  427. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.d.ts +1 -0
  428. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.js +52 -0
  429. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.d.ts +1 -0
  430. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.js +36 -0
  431. package/lib-esm/__tests__/theme.d.ts +1 -0
  432. package/lib-esm/__tests__/theme.js +33 -0
  433. package/lib-esm/__tests__/themeGet.d.ts +1 -0
  434. package/lib-esm/__tests__/themeGet.js +22 -0
  435. package/lib-esm/__tests__/useSafeTimeout.d.ts +1 -0
  436. package/lib-esm/__tests__/useSafeTimeout.js +39 -0
  437. package/lib-esm/index.d.ts +2 -2
  438. package/lib-esm/index.js +1 -1
  439. package/lib-esm/stories/ActionList.stories.js +334 -0
  440. package/lib-esm/stories/ActionMenu.stories.js +293 -0
  441. package/lib-esm/stories/AnchoredOverlay.stories.js +101 -0
  442. package/lib-esm/stories/AvatarStack.stories.js +32 -0
  443. package/lib-esm/stories/Button.stories.js +78 -0
  444. package/lib-esm/stories/ConfirmationDialog.stories.js +86 -0
  445. package/lib-esm/stories/Dialog.stories.js +240 -0
  446. package/lib-esm/stories/DropdownMenu.stories.js +94 -0
  447. package/lib-esm/stories/Overlay.stories.js +154 -0
  448. package/lib-esm/stories/Portal.stories.js +68 -0
  449. package/lib-esm/stories/SelectPanel.stories.js +284 -0
  450. package/lib-esm/stories/ThemeProvider.stories.js +83 -0
  451. package/lib-esm/stories/useAnchoredPosition.stories.js +313 -0
  452. package/lib-esm/stories/useFocusTrap.stories.js +309 -0
  453. package/lib-esm/stories/useFocusZone.stories.js +554 -0
  454. package/lib-esm/utils/testing.d.ts +0 -1
  455. package/migrating.md +250 -0
  456. package/now.json +17 -0
  457. package/package-lock.json +29072 -0
  458. package/package.json +10 -9
  459. package/rollup.config.js +36 -0
  460. package/script/build +19 -0
  461. package/script/build-storybook +10 -0
  462. package/script/setup +12 -0
  463. package/src/ActionList/Divider.tsx +25 -0
  464. package/src/ActionList/Group.tsx +45 -0
  465. package/src/ActionList/Header.tsx +74 -0
  466. package/src/ActionList/Item.tsx +460 -0
  467. package/src/ActionList/List.tsx +253 -0
  468. package/src/ActionList/index.ts +21 -0
  469. package/src/ActionMenu.tsx +106 -0
  470. package/src/AnchoredOverlay/AnchoredOverlay.tsx +180 -0
  471. package/src/AnchoredOverlay/index.ts +2 -0
  472. package/src/Avatar.tsx +46 -0
  473. package/src/AvatarPair.tsx +35 -0
  474. package/src/AvatarStack.tsx +161 -0
  475. package/src/BaseStyles.tsx +53 -0
  476. package/src/BorderBox.tsx +18 -0
  477. package/src/Box.tsx +54 -0
  478. package/src/BranchName.tsx +19 -0
  479. package/src/Breadcrumbs.tsx +101 -0
  480. package/src/Button/Button.tsx +40 -0
  481. package/src/Button/ButtonBase.tsx +43 -0
  482. package/src/Button/ButtonClose.tsx +40 -0
  483. package/src/Button/ButtonDanger.tsx +43 -0
  484. package/src/Button/ButtonGroup.tsx +55 -0
  485. package/src/Button/ButtonInvisible.tsx +27 -0
  486. package/src/Button/ButtonOutline.tsx +43 -0
  487. package/src/Button/ButtonPrimary.tsx +41 -0
  488. package/src/Button/ButtonStyles.tsx +36 -0
  489. package/src/Button/ButtonTableList.tsx +58 -0
  490. package/src/Button/index.ts +16 -0
  491. package/src/Caret.tsx +133 -0
  492. package/src/CircleBadge.tsx +55 -0
  493. package/src/CircleOcticon.tsx +37 -0
  494. package/src/CounterLabel.tsx +52 -0
  495. package/src/Details.tsx +23 -0
  496. package/src/Dialog/ConfirmationDialog.tsx +184 -0
  497. package/src/Dialog/Dialog.tsx +419 -0
  498. package/src/Dialog.tsx +149 -0
  499. package/src/Dropdown.tsx +158 -0
  500. package/src/DropdownMenu/DropdownButton.tsx +15 -0
  501. package/src/DropdownMenu/DropdownMenu.tsx +115 -0
  502. package/src/DropdownMenu/index.ts +4 -0
  503. package/src/DropdownStyles.ts +128 -0
  504. package/src/FilterList.tsx +81 -0
  505. package/src/FilteredActionList/FilteredActionList.tsx +152 -0
  506. package/src/FilteredActionList/index.ts +2 -0
  507. package/src/FilteredSearch.tsx +28 -0
  508. package/src/Flash.tsx +77 -0
  509. package/src/Flex.tsx +15 -0
  510. package/src/FormGroup.tsx +27 -0
  511. package/src/Grid.tsx +15 -0
  512. package/src/Header.tsx +84 -0
  513. package/src/Heading.tsx +21 -0
  514. package/src/Label.tsx +75 -0
  515. package/src/LabelGroup.tsx +18 -0
  516. package/src/Link.tsx +46 -0
  517. package/src/Overlay.tsx +194 -0
  518. package/src/Pagehead.tsx +17 -0
  519. package/src/Pagination/Pagination.tsx +214 -0
  520. package/src/Pagination/index.ts +4 -0
  521. package/src/Pagination/model.tsx +187 -0
  522. package/src/PointerBox.tsx +31 -0
  523. package/src/Popover.tsx +236 -0
  524. package/src/Portal/Portal.tsx +96 -0
  525. package/src/Portal/index.ts +5 -0
  526. package/src/Position.tsx +63 -0
  527. package/src/ProgressBar.tsx +52 -0
  528. package/src/SelectMenu/SelectMenu.tsx +125 -0
  529. package/src/SelectMenu/SelectMenuContext.tsx +9 -0
  530. package/src/SelectMenu/SelectMenuDivider.tsx +25 -0
  531. package/src/SelectMenu/SelectMenuFilter.tsx +51 -0
  532. package/src/SelectMenu/SelectMenuFooter.tsx +28 -0
  533. package/src/SelectMenu/SelectMenuHeader.tsx +50 -0
  534. package/src/SelectMenu/SelectMenuItem.tsx +137 -0
  535. package/src/SelectMenu/SelectMenuList.tsx +42 -0
  536. package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +24 -0
  537. package/src/SelectMenu/SelectMenuModal.tsx +121 -0
  538. package/src/SelectMenu/SelectMenuTab.tsx +88 -0
  539. package/src/SelectMenu/SelectMenuTabPanel.tsx +30 -0
  540. package/src/SelectMenu/SelectMenuTabs.tsx +44 -0
  541. package/src/SelectMenu/hooks/useKeyboardNav.js +90 -0
  542. package/src/SelectMenu/index.ts +15 -0
  543. package/src/SelectPanel/SelectPanel.tsx +172 -0
  544. package/src/SelectPanel/index.ts +2 -0
  545. package/src/SideNav.tsx +193 -0
  546. package/src/Spinner.tsx +59 -0
  547. package/src/StateLabel.tsx +110 -0
  548. package/src/StyledOcticon.tsx +24 -0
  549. package/src/SubNav.tsx +129 -0
  550. package/src/TabNav.tsx +77 -0
  551. package/src/Text.tsx +13 -0
  552. package/src/TextInput.tsx +183 -0
  553. package/src/ThemeProvider.tsx +176 -0
  554. package/src/Timeline.tsx +141 -0
  555. package/src/Tooltip.tsx +263 -0
  556. package/src/Truncate.tsx +36 -0
  557. package/src/UnderlineNav.tsx +110 -0
  558. package/src/__tests__/.eslintrc.json +11 -0
  559. package/src/__tests__/ActionList.tsx +47 -0
  560. package/src/__tests__/ActionMenu.tsx +136 -0
  561. package/src/__tests__/AnchoredOverlay.tsx +150 -0
  562. package/src/__tests__/Avatar.tsx +44 -0
  563. package/src/__tests__/AvatarStack.tsx +44 -0
  564. package/src/__tests__/BorderBox.tsx +43 -0
  565. package/src/__tests__/Box.tsx +42 -0
  566. package/src/__tests__/BranchName.tsx +26 -0
  567. package/src/__tests__/Breadcrumbs.tsx +27 -0
  568. package/src/__tests__/BreadcrumbsItem.tsx +31 -0
  569. package/src/__tests__/Button.tsx +128 -0
  570. package/src/__tests__/Caret.tsx +36 -0
  571. package/src/__tests__/CircleBadge.tsx +66 -0
  572. package/src/__tests__/CircleOcticon.tsx +50 -0
  573. package/src/__tests__/CounterLabel.tsx +50 -0
  574. package/src/__tests__/Details.tsx +115 -0
  575. package/src/__tests__/Dialog.tsx +155 -0
  576. package/src/__tests__/Dropdown.tsx +53 -0
  577. package/src/__tests__/DropdownMenu.tsx +136 -0
  578. package/src/__tests__/FilterList.tsx +26 -0
  579. package/src/__tests__/FilterListItem.tsx +31 -0
  580. package/src/__tests__/FilteredSearch.tsx +26 -0
  581. package/src/__tests__/Flash.tsx +45 -0
  582. package/src/__tests__/Flex.tsx +58 -0
  583. package/src/__tests__/FormGroup.tsx +38 -0
  584. package/src/__tests__/Grid.tsx +82 -0
  585. package/src/__tests__/Header.tsx +49 -0
  586. package/src/__tests__/Heading.tsx +91 -0
  587. package/src/__tests__/Label.tsx +34 -0
  588. package/src/__tests__/LabelGroup.tsx +30 -0
  589. package/src/__tests__/Link.tsx +47 -0
  590. package/src/__tests__/Overlay.tsx +103 -0
  591. package/src/__tests__/Pagehead.tsx +23 -0
  592. package/src/__tests__/Pagination/Pagination.tsx +30 -0
  593. package/src/__tests__/Pagination/PaginationModel.tsx +133 -0
  594. package/src/__tests__/Pagination/__snapshots__/Pagination.tsx.snap +184 -0
  595. package/src/__tests__/PointerBox.tsx +34 -0
  596. package/src/__tests__/Popover.tsx +68 -0
  597. package/src/__tests__/Portal.tsx +103 -0
  598. package/src/__tests__/Position.tsx +117 -0
  599. package/src/__tests__/ProgressBar.tsx +40 -0
  600. package/src/__tests__/SelectMenu.tsx +142 -0
  601. package/src/__tests__/SelectPanel.tsx +63 -0
  602. package/src/__tests__/SideNav.tsx +62 -0
  603. package/src/__tests__/Spinner.tsx +42 -0
  604. package/src/__tests__/StateLabel.tsx +48 -0
  605. package/src/__tests__/StyledOcticon.tsx +26 -0
  606. package/src/__tests__/SubNav.tsx +50 -0
  607. package/src/__tests__/SubNavLink.tsx +31 -0
  608. package/src/__tests__/TabNav.tsx +32 -0
  609. package/src/__tests__/Text.tsx +78 -0
  610. package/src/__tests__/TextInput.tsx +49 -0
  611. package/src/__tests__/ThemeProvider.tsx +441 -0
  612. package/src/__tests__/Timeline.tsx +58 -0
  613. package/src/__tests__/Tooltip.tsx +52 -0
  614. package/src/__tests__/Truncate.tsx +43 -0
  615. package/src/__tests__/UnderlineNav.tsx +58 -0
  616. package/src/__tests__/UnderlineNavLink.tsx +31 -0
  617. package/src/__tests__/__snapshots__/ActionList.tsx.snap +27 -0
  618. package/src/__tests__/__snapshots__/ActionMenu.tsx.snap +80 -0
  619. package/src/__tests__/__snapshots__/AnchoredOverlay.tsx.snap +332 -0
  620. package/src/__tests__/__snapshots__/Avatar.tsx.snap +19 -0
  621. package/src/__tests__/__snapshots__/AvatarStack.tsx.snap +377 -0
  622. package/src/__tests__/__snapshots__/BorderBox.tsx.snap +14 -0
  623. package/src/__tests__/__snapshots__/Box.tsx.snap +201 -0
  624. package/src/__tests__/__snapshots__/BranchName.tsx.snap +17 -0
  625. package/src/__tests__/__snapshots__/Breadcrumbs.tsx.snap +29 -0
  626. package/src/__tests__/__snapshots__/BreadcrumbsItem.tsx.snap +79 -0
  627. package/src/__tests__/__snapshots__/Button.tsx.snap +832 -0
  628. package/src/__tests__/__snapshots__/Caret.tsx.snap +373 -0
  629. package/src/__tests__/__snapshots__/CircleBadge.tsx.snap +141 -0
  630. package/src/__tests__/__snapshots__/CircleOcticon.tsx.snap +64 -0
  631. package/src/__tests__/__snapshots__/CounterLabel.tsx.snap +22 -0
  632. package/src/__tests__/__snapshots__/Details.tsx.snap +15 -0
  633. package/src/__tests__/__snapshots__/Dialog.tsx.snap +200 -0
  634. package/src/__tests__/__snapshots__/Dropdown.tsx.snap +249 -0
  635. package/src/__tests__/__snapshots__/DropdownMenu.tsx.snap +106 -0
  636. package/src/__tests__/__snapshots__/FilterList.tsx.snap +13 -0
  637. package/src/__tests__/__snapshots__/FilterListItem.tsx.snap +80 -0
  638. package/src/__tests__/__snapshots__/FilteredSearch.tsx.snap +32 -0
  639. package/src/__tests__/__snapshots__/Flash.tsx.snap +32 -0
  640. package/src/__tests__/__snapshots__/Flex.tsx.snap +130 -0
  641. package/src/__tests__/__snapshots__/FormGroup.tsx.snap +25 -0
  642. package/src/__tests__/__snapshots__/Grid.tsx.snap +178 -0
  643. package/src/__tests__/__snapshots__/Header.tsx.snap +79 -0
  644. package/src/__tests__/__snapshots__/Heading.tsx.snap +13 -0
  645. package/src/__tests__/__snapshots__/Label.tsx.snap +74 -0
  646. package/src/__tests__/__snapshots__/LabelGroup.tsx.snap +15 -0
  647. package/src/__tests__/__snapshots__/Link.tsx.snap +213 -0
  648. package/src/__tests__/__snapshots__/Pagehead.tsx.snap +15 -0
  649. package/src/__tests__/__snapshots__/PointerBox.tsx.snap +174 -0
  650. package/src/__tests__/__snapshots__/Popover.tsx.snap +4687 -0
  651. package/src/__tests__/__snapshots__/Position.tsx.snap +44 -0
  652. package/src/__tests__/__snapshots__/ProgressBar.tsx.snap +53 -0
  653. package/src/__tests__/__snapshots__/SelectMenu.tsx.snap +469 -0
  654. package/src/__tests__/__snapshots__/SelectPanel.tsx.snap +123 -0
  655. package/src/__tests__/__snapshots__/SideNav.tsx.snap +143 -0
  656. package/src/__tests__/__snapshots__/Spinner.tsx.snap +33 -0
  657. package/src/__tests__/__snapshots__/StateLabel.tsx.snap +409 -0
  658. package/src/__tests__/__snapshots__/StyledOcticon.tsx.snap +25 -0
  659. package/src/__tests__/__snapshots__/SubNav.tsx.snap +44 -0
  660. package/src/__tests__/__snapshots__/SubNavLink.tsx.snap +199 -0
  661. package/src/__tests__/__snapshots__/TabNav.tsx.snap +58 -0
  662. package/src/__tests__/__snapshots__/Text.tsx.snap +7 -0
  663. package/src/__tests__/__snapshots__/TextInput.tsx.snap +440 -0
  664. package/src/__tests__/__snapshots__/ThemeProvider.tsx.snap +15 -0
  665. package/src/__tests__/__snapshots__/Timeline.tsx.snap +159 -0
  666. package/src/__tests__/__snapshots__/Tooltip.tsx.snap +227 -0
  667. package/src/__tests__/__snapshots__/Truncate.tsx.snap +17 -0
  668. package/src/__tests__/__snapshots__/UnderlineNav.tsx.snap +59 -0
  669. package/src/__tests__/__snapshots__/UnderlineNavLink.tsx.snap +130 -0
  670. package/src/__tests__/behaviors/anchoredPosition.ts +295 -0
  671. package/src/__tests__/behaviors/focusTrap.tsx +236 -0
  672. package/src/__tests__/behaviors/focusZone.tsx +549 -0
  673. package/src/__tests__/behaviors/iterateFocusableElements.tsx +61 -0
  674. package/src/__tests__/filterObject.ts +54 -0
  675. package/src/__tests__/hooks/useAnchoredPosition.tsx +31 -0
  676. package/src/__tests__/hooks/useOnEscapePress.tsx +16 -0
  677. package/src/__tests__/hooks/useOnOutsideClick.tsx +48 -0
  678. package/src/__tests__/hooks/useOpenAndCloseFocus.tsx +48 -0
  679. package/src/__tests__/hooks/useProvidedStateOrCreate.tsx +39 -0
  680. package/src/__tests__/theme.ts +41 -0
  681. package/src/__tests__/themeGet.ts +15 -0
  682. package/src/__tests__/useSafeTimeout.tsx +36 -0
  683. package/src/behaviors/anchoredPosition.ts +442 -0
  684. package/src/behaviors/focusTrap.ts +184 -0
  685. package/src/behaviors/focusZone.ts +713 -0
  686. package/src/constants.ts +62 -0
  687. package/src/hooks/index.ts +11 -0
  688. package/src/hooks/useAnchoredPosition.ts +53 -0
  689. package/src/hooks/useCombinedRefs.ts +40 -0
  690. package/src/hooks/useDetails.tsx +54 -0
  691. package/src/hooks/useDialog.ts +121 -0
  692. package/src/hooks/useFocusTrap.ts +80 -0
  693. package/src/hooks/useFocusZone.ts +64 -0
  694. package/src/hooks/useOnEscapePress.ts +63 -0
  695. package/src/hooks/useOnOutsideClick.tsx +82 -0
  696. package/src/hooks/useOpenAndCloseFocus.ts +27 -0
  697. package/src/hooks/useOverlay.tsx +32 -0
  698. package/src/hooks/useProvidedRefOrCreate.ts +14 -0
  699. package/src/hooks/useProvidedStateOrCreate.ts +27 -0
  700. package/src/hooks/useRenderForcingRef.ts +22 -0
  701. package/src/hooks/useResizeObserver.ts +11 -0
  702. package/src/hooks/useSafeTimeout.ts +38 -0
  703. package/src/hooks/useScrollFlash.ts +21 -0
  704. package/src/index.ts +165 -0
  705. package/src/polyfills/eventListenerSignal.ts +66 -0
  706. package/src/stories/ActionList.stories.tsx +364 -0
  707. package/src/stories/ActionMenu.stories.tsx +322 -0
  708. package/src/stories/AnchoredOverlay.stories.tsx +117 -0
  709. package/src/stories/AvatarStack.stories.tsx +37 -0
  710. package/src/stories/Button.stories.tsx +88 -0
  711. package/src/stories/ConfirmationDialog.stories.tsx +105 -0
  712. package/src/stories/Dialog.stories.tsx +240 -0
  713. package/src/stories/DropdownMenu.stories.tsx +84 -0
  714. package/src/stories/Overlay.stories.tsx +186 -0
  715. package/src/stories/Portal.stories.tsx +109 -0
  716. package/src/stories/SelectPanel.stories.tsx +300 -0
  717. package/src/stories/ThemeProvider.stories.tsx +104 -0
  718. package/src/stories/useAnchoredPosition.stories.tsx +320 -0
  719. package/src/stories/useFocusTrap.stories.tsx +400 -0
  720. package/src/stories/useFocusZone.stories.tsx +663 -0
  721. package/src/sx.ts +9 -0
  722. package/src/theme-preval.js +136 -0
  723. package/src/theme.ts +3 -0
  724. package/src/utils/deprecate.tsx +73 -0
  725. package/src/utils/isNumeric.tsx +4 -0
  726. package/src/utils/iterateFocusableElements.ts +121 -0
  727. package/src/utils/ssr.tsx +1 -0
  728. package/src/utils/test-deprecations.tsx +19 -0
  729. package/src/utils/test-helpers.tsx +7 -0
  730. package/src/utils/test-matchers.tsx +109 -0
  731. package/src/utils/testing.tsx +242 -0
  732. package/src/utils/theme.js +64 -0
  733. package/src/utils/types.ts +90 -0
  734. package/src/utils/uniqueId.ts +6 -0
  735. package/src/utils/userAgent.ts +7 -0
  736. package/stats.html +3279 -0
  737. package/tsconfig.build.json +7 -0
  738. package/tsconfig.json +20 -0
  739. package/lib/Breadcrumb.d.ts +0 -23
  740. package/lib-esm/Breadcrumb.d.ts +0 -23
@@ -0,0 +1,117 @@
1
+ import React, {useEffect, useRef, useState} from 'react'
2
+ import {Meta} from '@storybook/react'
3
+
4
+ import {BaseStyles, Box, ThemeProvider} from '..'
5
+ import Heading from '../Heading'
6
+ import DropdownButton from '../Button'
7
+ import {AnchoredOverlay} from '../AnchoredOverlay'
8
+ import {registerPortalRoot} from '../Portal'
9
+
10
+ export default {
11
+ title: 'Generic behaviors/AnchoredOverlay',
12
+ decorators: [
13
+ Story => {
14
+ return (
15
+ <ThemeProvider>
16
+ <BaseStyles>
17
+ <Story />
18
+ </BaseStyles>
19
+ </ThemeProvider>
20
+ )
21
+ }
22
+ ]
23
+ } as Meta
24
+
25
+ const HeaderAndLayout = ({children}: {children: JSX.Element}) => {
26
+ const scrollingElementRef = useRef<HTMLDivElement>(null)
27
+ useEffect(() => {
28
+ if (scrollingElementRef.current) {
29
+ registerPortalRoot(scrollingElementRef.current, 'scrollingPortal')
30
+ }
31
+ }, [scrollingElementRef])
32
+ return (
33
+ <Box position="absolute" top={0} right={0} bottom={0} left={0} padding={4} backgroundColor="lavenderblush">
34
+ <Heading>Header or some such</Heading>
35
+ <Box position="absolute" top={10} right={4} bottom={4} left={4} overflow="scroll" backgroundColor="powderblue">
36
+ {children}
37
+ <Box ref={scrollingElementRef} position="absolute" top={0} left={0} />
38
+ </Box>
39
+ </Box>
40
+ )
41
+ }
42
+
43
+ const ButtonWithAnchoredOverlay = ({portalContainerName}: {portalContainerName?: string}) => {
44
+ const [open, setOpen] = useState(false)
45
+
46
+ return (
47
+ <AnchoredOverlay
48
+ open={open}
49
+ onOpen={() => setOpen(true)}
50
+ onClose={() => setOpen(false)}
51
+ width="small"
52
+ height="auto"
53
+ renderAnchor={props => <DropdownButton {...props}>Kitten, please</DropdownButton>}
54
+ overlayProps={{portalContainerName}}
55
+ >
56
+ <Box width="100%" height="100%" backgroundColor="thistle" display="flex" flexDirection="column">
57
+ <img src={`//placekitten.com/200/300`} alt="kitten" />
58
+ </Box>
59
+ </AnchoredOverlay>
60
+ )
61
+ }
62
+
63
+ export const DefaultPortal = () => {
64
+ const rows = 40
65
+ const columns = 20
66
+ return (
67
+ <HeaderAndLayout>
68
+ <table>
69
+ <tbody>
70
+ {Array(rows)
71
+ .fill(null)
72
+ .map((_, i) => (
73
+ <tr key={i}>
74
+ {Array(columns)
75
+ .fill(null)
76
+ .map((_1, j) => (
77
+ <td key={`${i}${j}`}>
78
+ <Box m={2}>
79
+ <ButtonWithAnchoredOverlay />
80
+ </Box>
81
+ </td>
82
+ ))}
83
+ </tr>
84
+ ))}
85
+ </tbody>
86
+ </table>
87
+ </HeaderAndLayout>
88
+ )
89
+ }
90
+
91
+ export const PortalInsideScrollingElement = () => {
92
+ const rows = 40
93
+ const columns = 20
94
+ return (
95
+ <HeaderAndLayout>
96
+ <table>
97
+ <tbody>
98
+ {Array(rows)
99
+ .fill(null)
100
+ .map((_, i) => (
101
+ <tr key={i}>
102
+ {Array(columns)
103
+ .fill(null)
104
+ .map((_1, j) => (
105
+ <td key={`${i}${j}`}>
106
+ <Box m={2}>
107
+ <ButtonWithAnchoredOverlay portalContainerName="scrollingPortal" />
108
+ </Box>
109
+ </td>
110
+ ))}
111
+ </tr>
112
+ ))}
113
+ </tbody>
114
+ </table>
115
+ </HeaderAndLayout>
116
+ )
117
+ }
@@ -0,0 +1,37 @@
1
+ import AvatarStack from '../AvatarStack'
2
+ import {Meta} from '@storybook/react'
3
+ import React from 'react'
4
+ import {ThemeProvider} from '..'
5
+ import BaseStyles from '../BaseStyles'
6
+
7
+ const meta: Meta = {
8
+ title: 'Composite components/AvatarStack',
9
+ component: AvatarStack,
10
+ decorators: [
11
+ (Story: React.ComponentType): JSX.Element => (
12
+ <ThemeProvider>
13
+ <BaseStyles>
14
+ <Story />
15
+ </BaseStyles>
16
+ </ThemeProvider>
17
+ )
18
+ ],
19
+ parameters: {
20
+ controls: {
21
+ disabled: true
22
+ }
23
+ }
24
+ }
25
+ export default meta
26
+
27
+ export function AvatarStackStory(): JSX.Element {
28
+ return (
29
+ <AvatarStack>
30
+ <img src="https://avatars.githubusercontent.com/primer" alt="" />
31
+ <img src="https://avatars.githubusercontent.com/github" alt="" />
32
+ <img src="https://avatars.githubusercontent.com/primer" alt="" />
33
+ <img src="https://avatars.githubusercontent.com/github" alt="" />
34
+ </AvatarStack>
35
+ )
36
+ }
37
+ AvatarStackStory.storyName = 'AvatarStack'
@@ -0,0 +1,88 @@
1
+ import React from 'react'
2
+ import {Meta} from '@storybook/react'
3
+
4
+ import {
5
+ BaseStyles,
6
+ Button,
7
+ ButtonClose,
8
+ ButtonDanger,
9
+ ButtonGroup,
10
+ ButtonInvisible,
11
+ ButtonOutline,
12
+ ButtonPrimary,
13
+ ButtonTableList,
14
+ ThemeProvider
15
+ } from '..'
16
+ import {ButtonStyleProps} from 'styled-system'
17
+ import {ButtonBaseProps} from '../Button/ButtonBase'
18
+ type StrictButtonStyleProps = ButtonStyleProps & {variant: ButtonBaseProps['variant']}
19
+
20
+ export default {
21
+ title: 'Composite components/Button',
22
+
23
+ decorators: [
24
+ Story => {
25
+ return (
26
+ <ThemeProvider>
27
+ <BaseStyles>
28
+ <Story />
29
+ </BaseStyles>
30
+ </ThemeProvider>
31
+ )
32
+ }
33
+ ],
34
+ argTypes: {
35
+ as: {
36
+ table: {
37
+ disable: true
38
+ }
39
+ },
40
+ theme: {
41
+ table: {
42
+ disable: true
43
+ }
44
+ },
45
+ sx: {
46
+ table: {
47
+ disable: true
48
+ }
49
+ },
50
+ variant: {
51
+ control: {
52
+ type: 'radio',
53
+ options: ['small', 'medium', 'large']
54
+ }
55
+ }
56
+ }
57
+ } as Meta
58
+
59
+ export const defaultButton = (args: StrictButtonStyleProps) => <Button {...args}>Default Button</Button>
60
+ export const dangerButton = (args: StrictButtonStyleProps) => <ButtonDanger {...args}>Danger Button</ButtonDanger>
61
+ export const outlineButton = (args: StrictButtonStyleProps) => <ButtonOutline {...args}>Outline Button</ButtonOutline>
62
+ export const primaryButton = (args: StrictButtonStyleProps) => <ButtonPrimary {...args}>Primary Button</ButtonPrimary>
63
+ export const invisibleButton = (args: StrictButtonStyleProps) => (
64
+ <ButtonInvisible {...args}>Invisible Button</ButtonInvisible>
65
+ )
66
+
67
+ export const closeButton = (args: ButtonStyleProps) => (
68
+ <ButtonClose {...args} onClick={() => alert('button clicked.')} />
69
+ )
70
+ export const buttonGroup = (args: StrictButtonStyleProps) => (
71
+ <ButtonGroup display="block" my={2}>
72
+ <Button {...args}>Button 1</Button>
73
+ <Button {...args}>Button 2</Button>
74
+ <Button {...args}>Button 3</Button>
75
+ </ButtonGroup>
76
+ )
77
+ export const buttonTableList = (args: ButtonStyleProps) => (
78
+ <ButtonTableList {...args}>Button Table List</ButtonTableList>
79
+ )
80
+
81
+ defaultButton.args = {variant: 'medium'}
82
+ dangerButton.args = {variant: 'medium'}
83
+ outlineButton.args = {variant: 'medium'}
84
+ primaryButton.args = {variant: 'medium'}
85
+ invisibleButton.args = {variant: 'medium'}
86
+ closeButton.args = {variant: 'medium'}
87
+ buttonGroup.args = {variant: 'medium'}
88
+ buttonTableList.args = {variant: 'medium'}
@@ -0,0 +1,105 @@
1
+ import React, {useState, useRef, useCallback} from 'react'
2
+ import {Meta} from '@storybook/react'
3
+
4
+ import {BaseStyles, Button, Box, ThemeProvider, useTheme} from '..'
5
+ import {ConfirmationDialog, useConfirm} from '../Dialog/ConfirmationDialog'
6
+ import {ActionMenu} from '../ActionMenu'
7
+
8
+ export default {
9
+ title: 'Internal components/ConfirmationDialog',
10
+ component: ConfirmationDialog,
11
+ decorators: [
12
+ Story => {
13
+ // Since portal roots are registered globally, we need this line so that each storybook
14
+ // story works in isolation.
15
+ return (
16
+ <ThemeProvider>
17
+ <BaseStyles>
18
+ <Story />
19
+ </BaseStyles>
20
+ </ThemeProvider>
21
+ )
22
+ }
23
+ ]
24
+ } as Meta
25
+
26
+ export const BasicConfirmationDialog = () => {
27
+ const [isOpen, setIsOpen] = useState(false)
28
+ const buttonRef = useRef<HTMLButtonElement>(null)
29
+ const onDialogClose = useCallback(() => setIsOpen(false), [])
30
+ return (
31
+ <>
32
+ <Button ref={buttonRef} onClick={() => setIsOpen(!isOpen)}>
33
+ Show dialog
34
+ </Button>
35
+ {isOpen && (
36
+ <ConfirmationDialog
37
+ title="Delete universe?"
38
+ onClose={onDialogClose}
39
+ confirmButtonContent="Delete it!"
40
+ confirmButtonType="danger"
41
+ >
42
+ Deleting the universe could have disastrous effects, including but not limited to destroying all life on
43
+ Earth.
44
+ </ConfirmationDialog>
45
+ )}
46
+ </>
47
+ )
48
+ }
49
+
50
+ export const ShorthandHook = () => {
51
+ const confirm = useConfirm()
52
+ const {theme} = useTheme()
53
+ const onButtonClick = useCallback(
54
+ async (event: React.MouseEvent) => {
55
+ if (
56
+ (await confirm({title: 'Are you sure?', content: 'Do you really want to turn this button green?'})) &&
57
+ event.target instanceof HTMLElement
58
+ ) {
59
+ event.target.style.backgroundColor = theme?.colors.auto.green[3] ?? 'green'
60
+ event.target.textContent = "I'm green!"
61
+ }
62
+ },
63
+ [confirm, theme]
64
+ )
65
+ return (
66
+ <Box display="flex" flexDirection="column" alignItems="flex-start">
67
+ <Button mb={2} onClick={onButtonClick}>
68
+ Turn me green!
69
+ </Button>
70
+ <Button mb={2} onClick={onButtonClick}>
71
+ Turn me green!
72
+ </Button>
73
+ <Button mb={2} onClick={onButtonClick}>
74
+ Turn me green!
75
+ </Button>
76
+ <Button mb={2} onClick={onButtonClick}>
77
+ Turn me green!
78
+ </Button>
79
+ </Box>
80
+ )
81
+ }
82
+
83
+ export const ShorthandHookFromActionMenu = () => {
84
+ const confirm = useConfirm()
85
+ const [text, setText] = useState('open me')
86
+ const onButtonClick = useCallback(async () => {
87
+ if (await confirm({title: 'Are you sure?', content: 'Do you really want to do a trick?'})) {
88
+ setText('tada!')
89
+ }
90
+ }, [confirm])
91
+
92
+ return (
93
+ <Box display="flex" flexDirection="column" alignItems="flex-start">
94
+ <ActionMenu
95
+ renderAnchor={props => <Button {...props}>{text}</Button>}
96
+ items={[
97
+ {
98
+ text: 'Do a trick!',
99
+ onAction: onButtonClick
100
+ }
101
+ ]}
102
+ />
103
+ </Box>
104
+ )
105
+ }
@@ -0,0 +1,240 @@
1
+ import React, {useState, useRef, useCallback} from 'react'
2
+ import {Meta} from '@storybook/react'
3
+
4
+ import {BaseStyles, Button, ThemeProvider, Box} from '..'
5
+ import {Dialog, DialogProps, DialogWidth, DialogHeight} from '../Dialog/Dialog'
6
+
7
+ export default {
8
+ title: 'Internal components/Dialog',
9
+ component: Dialog,
10
+ decorators: [
11
+ Story => {
12
+ // Since portal roots are registered globally, we need this line so that each storybook
13
+ // story works in isolation.
14
+ return (
15
+ <ThemeProvider>
16
+ <BaseStyles>
17
+ <Story />
18
+ </BaseStyles>
19
+ </ThemeProvider>
20
+ )
21
+ }
22
+ ],
23
+ argTypes: {
24
+ width: {
25
+ defaultValue: 'xlarge',
26
+ control: {
27
+ type: 'radio',
28
+ options: ['small', 'medium', 'large', 'xlarge']
29
+ }
30
+ },
31
+ height: {
32
+ defaultValue: 'auto',
33
+ control: {
34
+ type: 'radio',
35
+ options: ['small', 'large', 'auto']
36
+ }
37
+ },
38
+ subtitle: {
39
+ name: 'show subtitle',
40
+ defaultValue: true,
41
+ control: {
42
+ type: 'boolean'
43
+ }
44
+ },
45
+ title: {table: {disable: true}},
46
+
47
+ renderHeader: {table: {disable: true}},
48
+ renderBody: {table: {disable: true}},
49
+ renderFooter: {table: {disable: true}},
50
+ onClose: {table: {disable: true}},
51
+ role: {table: {disable: true}},
52
+ ref: {table: {disable: true}},
53
+ key: {table: {disable: true}},
54
+ footerButtons: {table: {disable: true}}
55
+ }
56
+ } as Meta
57
+
58
+ const lipsum = (
59
+ <div style={{fontSize: '14px'}}>
60
+ <p style={{marginBlockStart: 0}}>
61
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sollicitudin mauris maximus elit sagittis, nec
62
+ lobortis ligula elementum. Nam iaculis, urna nec lobortis posuere, eros urna venenatis eros, vel accumsan turpis
63
+ nunc vitae enim. Maecenas et lorem lectus. Vivamus iaculis tortor eget ante placerat, nec posuere nisl tincidunt.
64
+ Cras condimentum ante in accumsan ultricies. Morbi quis porta est, sit amet congue augue. Lorem ipsum dolor sit
65
+ amet, consectetur adipiscing elit. Ut consequat nunc id quam tempus, id tincidunt neque venenatis. Mauris
66
+ fringilla tempor est, vitae fermentum enim elementum vitae. Nullam eleifend odio ut porta efficitur. Phasellus
67
+ luctus tempus posuere.
68
+ </p>
69
+
70
+ <p>
71
+ Curabitur scelerisque bibendum faucibus. Duis rhoncus nunc est, at pharetra eros tristique a. Nam sodales turpis
72
+ lectus, quis faucibus felis fermentum in. Curabitur vel velit vel eros laoreet pharetra. Aenean in facilisis
73
+ sapien, eu porttitor ex. Donec ultrices ac arcu ut lobortis. Pellentesque vitae rutrum orci. Etiam pretium et enim
74
+ sit amet scelerisque. Nulla sed odio nec lorem dapibus condimentum at sagittis quam. Sed in ornare ex, sed luctus
75
+ sem. Mauris a est tellus.
76
+ </p>
77
+
78
+ <p>
79
+ Sed fringilla est ac urna aliquet, eget condimentum felis vulputate. Sed sagittis eros non mauris sodales
80
+ molestie. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nullam ante leo,
81
+ condimentum sed lectus non, rutrum octopodes urna. Mauris neque ante, interdum molestie tellus pharetra, eleifend
82
+ dapibus justo. Sed at diam ligula. Donec dapibus ipsum quis elit euismod, sed suscipit eros euismod. Aliquam
83
+ pretium felis quis risus luctus fringilla. Ut purus lacus, mattis a turpis eget, sollicitudin pellentesque neque.
84
+ </p>
85
+
86
+ <p>
87
+ Nunc sodales quis ante quis porttitor. Vestibulum ornare lacinia ante. Donec a nisi nec arcu aliquam pretium in
88
+ nec nunc. Donec fringilla erat vitae viverra feugiat. Sed non odio vel ipsum porttitor maximus. Donec id eleifend
89
+ lectus. Proin varius felis sit amet neque eleifend, vitae porttitor ligula commodo.
90
+ </p>
91
+
92
+ <p>
93
+ Vivamus felis quam, porttitor a justo sit amet, placerat ultricies nisl. Suspendisse potenti. Maecenas non
94
+ consequat lorem, eu porta ante. Pellentesque elementum diam sapien, nec ultrices risus convallis eget. Nam
95
+ pharetra dolor at dictum tempor. Quisque ut est a ligula hendrerit sodales. Curabitur ornare a nulla in laoreet.
96
+ Maecenas semper mi egestas, dignissim nisi et, elementum neque.
97
+ </p>
98
+ </div>
99
+ )
100
+ interface DialogStoryProps {
101
+ width: DialogWidth
102
+ height: DialogHeight
103
+ subtitle: boolean
104
+ }
105
+ export const BasicDialog = ({width, height, subtitle}: DialogStoryProps) => {
106
+ const [isOpen, setIsOpen] = useState(false)
107
+ const [secondOpen, setSecondOpen] = useState(false)
108
+ const buttonRef = useRef<HTMLButtonElement>(null)
109
+ const onDialogClose = useCallback(() => setIsOpen(false), [])
110
+ const onSecondDialogClose = useCallback(() => setSecondOpen(false), [])
111
+ const openSecondDialog = useCallback(() => setSecondOpen(true), [])
112
+ return (
113
+ <>
114
+ <Button ref={buttonRef} onClick={() => setIsOpen(!isOpen)}>
115
+ Show dialog
116
+ </Button>
117
+ {isOpen && (
118
+ <Dialog
119
+ title="My Dialog"
120
+ subtitle={subtitle ? 'This is a subtitle!' : undefined}
121
+ onClose={onDialogClose}
122
+ width={width}
123
+ height={height}
124
+ footerButtons={[
125
+ {buttonType: 'danger', content: 'Delete the universe', onClick: onDialogClose},
126
+ {buttonType: 'primary', content: 'Proceed', onClick: openSecondDialog, autoFocus: true}
127
+ ]}
128
+ >
129
+ {lipsum}
130
+ {secondOpen && (
131
+ <Dialog title="Inner dialog!" onClose={onSecondDialogClose} width="small">
132
+ Hello world
133
+ </Dialog>
134
+ )}
135
+ </Dialog>
136
+ )}
137
+ </>
138
+ )
139
+ }
140
+
141
+ function CustomHeader({
142
+ title,
143
+ subtitle,
144
+ dialogLabelId,
145
+ dialogDescriptionId,
146
+ onClose
147
+ }: React.PropsWithChildren<DialogProps & {dialogLabelId: string; dialogDescriptionId: string}>) {
148
+ const onCloseClick = useCallback(() => {
149
+ onClose('close-button')
150
+ }, [onClose])
151
+ if (typeof title === 'string' && typeof subtitle === 'string') {
152
+ return (
153
+ <Box bg="auto.blue.3">
154
+ <h1 id={dialogLabelId}>{title.toUpperCase()}</h1>
155
+ <h2 id={dialogDescriptionId}>{subtitle.toLowerCase()}</h2>
156
+ <Dialog.CloseButton onClose={onCloseClick} />
157
+ </Box>
158
+ )
159
+ }
160
+ return null
161
+ }
162
+ function CustomBody({children}: React.PropsWithChildren<DialogProps>) {
163
+ return <Dialog.Body bg="auto.red.3">{children}</Dialog.Body>
164
+ }
165
+ function CustomFooter({footerButtons}: React.PropsWithChildren<DialogProps>) {
166
+ return (
167
+ <Dialog.Footer bg="auto.yellow.3">
168
+ {footerButtons ? <Dialog.Buttons buttons={footerButtons} /> : null}
169
+ </Dialog.Footer>
170
+ )
171
+ }
172
+ export const WithCustomRenderers = ({width, height, subtitle}: DialogStoryProps) => {
173
+ const [isOpen, setIsOpen] = useState(false)
174
+ const onDialogClose = useCallback(() => setIsOpen(false), [])
175
+ return (
176
+ <>
177
+ <Button onClick={() => setIsOpen(!isOpen)}>Show dialog</Button>
178
+ {isOpen && (
179
+ <Dialog
180
+ title="My Dialog"
181
+ subtitle={subtitle ? 'This is a subtitle!' : undefined}
182
+ width={width}
183
+ height={height}
184
+ renderHeader={CustomHeader}
185
+ renderBody={CustomBody}
186
+ renderFooter={CustomFooter}
187
+ onClose={onDialogClose}
188
+ footerButtons={[
189
+ {buttonType: 'danger', content: 'Delete the universe', onClick: onDialogClose},
190
+ {buttonType: 'primary', content: 'Proceed'}
191
+ ]}
192
+ >
193
+ {lipsum}
194
+ </Dialog>
195
+ )}
196
+ </>
197
+ )
198
+ }
199
+
200
+ export const StressTest = ({width, height, subtitle}: DialogStoryProps) => {
201
+ const [isOpen, setIsOpen] = useState(false)
202
+ const [secondOpen, setSecondOpen] = useState(false)
203
+ const buttonRef = useRef<HTMLButtonElement>(null)
204
+ const onDialogClose = useCallback(() => setIsOpen(false), [])
205
+ const onSecondDialogClose = useCallback(() => setSecondOpen(false), [])
206
+ const openSecondDialog = useCallback(() => setSecondOpen(true), [])
207
+ const manyButtons = new Array(10).fill(undefined).map((_, i) => ({content: `Button ${i}`}))
208
+ return (
209
+ <>
210
+ <Button ref={buttonRef} onClick={() => setIsOpen(!isOpen)}>
211
+ Show dialog
212
+ </Button>
213
+ {isOpen && (
214
+ <Dialog
215
+ title="This dialog has a really long title. So long, in fact, that it should cause wrapping, going to multiple lines!."
216
+ subtitle={
217
+ subtitle
218
+ ? "It's not a common scenario, sure, but what if the subtitle is generated from a really long value? Do we just break the dialog? Or do we handle it because we are pros?"
219
+ : undefined
220
+ }
221
+ onClose={onDialogClose}
222
+ width={width}
223
+ height={height}
224
+ footerButtons={[
225
+ ...manyButtons,
226
+ {buttonType: 'danger', content: 'Delete the universe', onClick: onDialogClose},
227
+ {buttonType: 'primary', content: 'Proceed', onClick: openSecondDialog, autoFocus: true}
228
+ ]}
229
+ >
230
+ {lipsum}
231
+ {secondOpen && (
232
+ <Dialog title="Inner dialog!" onClose={onSecondDialogClose} width="small">
233
+ Hello world
234
+ </Dialog>
235
+ )}
236
+ </Dialog>
237
+ )}
238
+ </>
239
+ )
240
+ }
@@ -0,0 +1,84 @@
1
+ import {Meta} from '@storybook/react'
2
+ import React from 'react'
3
+ import {theme, ThemeProvider} from '..'
4
+ import {ItemInput} from '../ActionList/List'
5
+ import BaseStyles from '../BaseStyles'
6
+ import Box from '../Box'
7
+ import {DropdownMenu, DropdownButton} from '../DropdownMenu'
8
+ import TextInput from '../TextInput'
9
+
10
+ const meta: Meta = {
11
+ title: 'Composite components/DropdownMenu',
12
+ component: DropdownMenu,
13
+ decorators: [
14
+ (Story: React.ComponentType): JSX.Element => {
15
+ return (
16
+ <ThemeProvider theme={theme}>
17
+ <BaseStyles>
18
+ <Story />
19
+ </BaseStyles>
20
+ </ThemeProvider>
21
+ )
22
+ }
23
+ ],
24
+ parameters: {
25
+ controls: {
26
+ disable: true
27
+ }
28
+ }
29
+ }
30
+ export default meta
31
+
32
+ export function FavoriteColorStory(): JSX.Element {
33
+ const items = React.useMemo(() => [{text: '🔵 Cyan'}, {text: '🔴 Magenta'}, {text: '🟡 Yellow'}], [])
34
+ const [selectedItem, setSelectedItem] = React.useState<ItemInput | undefined>()
35
+
36
+ return (
37
+ <>
38
+ <h1>Favorite Color</h1>
39
+ <TextInput placeholder="Input for focus testing" sx={{mb: 2}} />
40
+ <div id="favorite-color-label">Please select your favorite color:</div>
41
+ <DropdownMenu
42
+ renderAnchor={({children, 'aria-labelledby': ariaLabelledBy, ...anchorProps}) => (
43
+ <DropdownButton aria-labelledby={`favorite-color-label ${ariaLabelledBy}`} {...anchorProps}>
44
+ {children}
45
+ </DropdownButton>
46
+ )}
47
+ placeholder="🎨"
48
+ items={items}
49
+ selectedItem={selectedItem}
50
+ onChange={setSelectedItem}
51
+ />
52
+ </>
53
+ )
54
+ }
55
+ FavoriteColorStory.storyName = 'Favorite Color'
56
+
57
+ export function ExternalAnchorStory(): JSX.Element {
58
+ const items = React.useMemo(() => [{text: '🔵 Cyan'}, {text: '🔴 Magenta'}, {text: '🟡 Yellow'}], [])
59
+ const [selectedItem, setSelectedItem] = React.useState<ItemInput | undefined>()
60
+ const anchorRef = React.useRef<HTMLDivElement>(null)
61
+ const [open, setOpen] = React.useState(false)
62
+
63
+ return (
64
+ <Box display="flex" flexDirection="column" alignItems="flex-start">
65
+ <Box display="flex" flexDirection="row">
66
+ <DropdownButton onClick={() => setOpen(true)}>Click me to open the dropdown</DropdownButton>
67
+ <Box ref={anchorRef} bg="papayawhip" p={4} ml={40} borderRadius={2} display="inline-block">
68
+ Anchored on me!
69
+ </Box>
70
+ </Box>
71
+ <DropdownMenu
72
+ renderAnchor={null}
73
+ anchorRef={anchorRef}
74
+ open={open}
75
+ onOpenChange={setOpen}
76
+ placeholder="🎨"
77
+ items={items}
78
+ selectedItem={selectedItem}
79
+ onChange={setSelectedItem}
80
+ />
81
+ </Box>
82
+ )
83
+ }
84
+ ExternalAnchorStory.storyName = 'DropdownMenu with External Anchor'