@primer/components 32.1.0 → 33.0.0-rc.9f3670b7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1147) 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 +137 -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/check_for_changeset.yml +25 -0
  10. package/.github/workflows/ci.yml +31 -0
  11. package/.github/workflows/deploy_preview.yml +47 -0
  12. package/.github/workflows/deploy_production.yml +70 -0
  13. package/.github/workflows/release.yml +35 -0
  14. package/.github/workflows/release_canary.yml +70 -0
  15. package/.github/workflows/release_candidate.yml +60 -0
  16. package/.github/workflows/size.yml +13 -0
  17. package/.github/workflows/stale.yml +26 -0
  18. package/.gitignore +10 -0
  19. package/.npmrc +4 -0
  20. package/.nvmrc +1 -0
  21. package/.storybook/main.js +9 -0
  22. package/.storybook/preview.js +117 -0
  23. package/.vscode/launch.json +21 -0
  24. package/.vscode/settings.json +13 -0
  25. package/@types/@styled-system/index.d.ts +0 -0
  26. package/@types/@styled-system/prop-types/index.d.ts +1 -0
  27. package/@types/@styled-system/props/index.d.ts +1 -0
  28. package/@types/jest-styled-components/index.d.ts +1 -0
  29. package/CHANGELOG.md +22 -0
  30. package/CODEOWNERS +2 -0
  31. package/babel-defines.js +13 -0
  32. package/babel.config.js +39 -0
  33. package/contributor-docs/CODE_OF_CONDUCT.md +76 -0
  34. package/contributor-docs/CONTRIBUTING.md +230 -0
  35. package/contributor-docs/adrs/adr-001-typescript.md +23 -0
  36. package/contributor-docs/adrs/adr-002-behavior-isolation.md +108 -0
  37. package/contributor-docs/adrs/adr-003-prop-norms.md +72 -0
  38. package/contributor-docs/behaviors.md +132 -0
  39. package/contributor-docs/component-contents-api-patterns.md +316 -0
  40. package/contributor-docs/principles.md +39 -0
  41. package/dist/browser.esm.js +106 -109
  42. package/dist/browser.esm.js.map +1 -1
  43. package/dist/browser.umd.js +106 -109
  44. package/dist/browser.umd.js.map +1 -1
  45. package/docs/.eslintrc +0 -0
  46. package/docs/.gitignore +91 -0
  47. package/docs/components/PropsList.js +5 -0
  48. package/docs/components/State.js +9 -0
  49. package/docs/components/constants.js +34 -0
  50. package/docs/components/index.js +2 -0
  51. package/docs/content/ActionList.mdx +99 -0
  52. package/docs/content/ActionMenu.mdx +80 -0
  53. package/docs/content/AnchoredOverlay.mdx +37 -0
  54. package/docs/content/Autocomplete.mdx +657 -0
  55. package/docs/content/Avatar.mdx +53 -0
  56. package/docs/content/AvatarStack.mdx +57 -0
  57. package/docs/content/BorderBox.md +46 -0
  58. package/docs/content/Box.mdx +96 -0
  59. package/docs/content/BranchName.md +39 -0
  60. package/docs/content/Breadcrumbs.md +68 -0
  61. package/docs/content/Buttons.md +47 -0
  62. package/docs/content/Checkbox.md +118 -0
  63. package/docs/content/CircleBadge.md +36 -0
  64. package/docs/content/CircleOcticon.md +19 -0
  65. package/docs/content/CounterLabel.md +22 -0
  66. package/docs/content/Details.md +102 -0
  67. package/docs/content/Dialog.md +106 -0
  68. package/docs/content/Dialog2.mdx +181 -0
  69. package/docs/content/Dropdown.md +66 -0
  70. package/docs/content/DropdownMenu.mdx +50 -0
  71. package/docs/content/FilterList.md +38 -0
  72. package/docs/content/FilteredSearch.md +33 -0
  73. package/docs/content/Flash.md +36 -0
  74. package/docs/content/Flex.md +58 -0
  75. package/docs/content/FormGroup.md +39 -0
  76. package/docs/content/Grid.md +59 -0
  77. package/docs/content/Header.md +78 -0
  78. package/docs/content/Heading.md +21 -0
  79. package/docs/content/Label.md +49 -0
  80. package/docs/content/LabelGroup.md +22 -0
  81. package/docs/content/Link.md +29 -0
  82. package/docs/content/Overlay.mdx +86 -0
  83. package/docs/content/Pagehead.md +19 -0
  84. package/docs/content/Pagination.md +179 -0
  85. package/docs/content/PointerBox.md +82 -0
  86. package/docs/content/Popover.md +130 -0
  87. package/docs/content/Portal.mdx +79 -0
  88. package/docs/content/Position.md +93 -0
  89. package/docs/content/ProgressBar.mdx +31 -0
  90. package/docs/content/SelectMenu.md +372 -0
  91. package/docs/content/SelectPanel.mdx +67 -0
  92. package/docs/content/SideNav.md +172 -0
  93. package/docs/content/Spinner.mdx +32 -0
  94. package/docs/content/StateLabel.md +28 -0
  95. package/docs/content/StyledOcticon.md +27 -0
  96. package/docs/content/SubNav.md +101 -0
  97. package/docs/content/TabNav.md +43 -0
  98. package/docs/content/Text.md +32 -0
  99. package/docs/content/TextInput.md +42 -0
  100. package/docs/content/TextInputWithTokens.mdx +211 -0
  101. package/docs/content/Timeline.md +149 -0
  102. package/docs/content/Token.mdx +381 -0
  103. package/docs/content/Tooltip.md +33 -0
  104. package/docs/content/Truncate.md +56 -0
  105. package/docs/content/UnderlineNav.md +46 -0
  106. package/docs/content/anchoredPosition.mdx +163 -0
  107. package/docs/content/core-concepts.md +70 -0
  108. package/docs/content/drafts/ActionList2.mdx +375 -0
  109. package/docs/content/drafts/ActionMenu2.mdx +251 -0
  110. package/docs/content/focusTrap.mdx +103 -0
  111. package/docs/content/focusZone.mdx +145 -0
  112. package/docs/content/getting-started.md +138 -0
  113. package/docs/content/index.md +33 -0
  114. package/docs/content/linting.md +35 -0
  115. package/docs/content/overriding-styles.mdx +82 -0
  116. package/docs/content/philosophy.md +23 -0
  117. package/docs/content/primer-theme.md +89 -0
  118. package/docs/content/ssr.mdx +43 -0
  119. package/docs/content/status.mdx +10 -0
  120. package/docs/content/system-props.mdx +37 -0
  121. package/docs/content/theme-reference.md +16 -0
  122. package/docs/content/theming.md +272 -0
  123. package/docs/content/useOnEscapePress.mdx +56 -0
  124. package/docs/content/useOnOutsideClick.mdx +57 -0
  125. package/docs/content/useOpenAndCloseFocus.mdx +49 -0
  126. package/docs/content/useOverlay.mdx +62 -0
  127. package/docs/content/useSafeTimeout.mdx +32 -0
  128. package/docs/gatsby-config.js +30 -0
  129. package/docs/gatsby-node.js +101 -0
  130. package/docs/package-lock.json +20867 -0
  131. package/docs/package.json +36 -0
  132. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +21 -0
  133. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +41 -0
  134. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +81 -0
  135. package/docs/src/@primer/gatsby-theme-doctocat/mdx-components.js +9 -0
  136. package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +137 -0
  137. package/docs/src/@primer/gatsby-theme-doctocat/primer-components-hero.svg +1411 -0
  138. package/docs/src/component-checklist.js +81 -0
  139. package/docs/src/component-statuses.js +74 -0
  140. package/docs/src/props.js +77 -0
  141. package/jest.config.js +13 -0
  142. package/lib/ActionList/Item.js +3 -3
  143. package/lib/ActionList2/Divider.d.ts +3 -2
  144. package/lib/ActionList2/Divider.js +10 -5
  145. package/lib/ActionList2/Item.js +24 -6
  146. package/lib/ActionList2/List.js +10 -1
  147. package/lib/ActionList2/MenuContext.d.ts +10 -0
  148. package/lib/ActionList2/MenuContext.js +15 -0
  149. package/lib/ActionList2/Selection.js +14 -1
  150. package/lib/ActionList2/index.d.ts +1 -2
  151. package/lib/ActionMenu2.d.ts +310 -0
  152. package/lib/ActionMenu2.js +91 -0
  153. package/lib/Autocomplete/Autocomplete.d.ts +1 -0
  154. package/lib/Autocomplete/AutocompleteInput.d.ts +1 -0
  155. package/lib/Avatar.d.ts +1 -2
  156. package/lib/Avatar.js +1 -1
  157. package/lib/BranchName.d.ts +1 -2
  158. package/lib/BranchName.js +1 -1
  159. package/lib/Button/Button.d.ts +1 -0
  160. package/lib/Button/ButtonClose.d.ts +2 -1
  161. package/lib/Button/ButtonDanger.d.ts +1 -0
  162. package/lib/Button/ButtonInvisible.d.ts +1 -0
  163. package/lib/Button/ButtonOutline.d.ts +1 -0
  164. package/lib/Button/ButtonPrimary.d.ts +1 -0
  165. package/lib/CircleOcticon.d.ts +1 -0
  166. package/lib/Details.d.ts +1 -2
  167. package/lib/Details.js +1 -3
  168. package/lib/Dialog.d.ts +3 -2
  169. package/lib/Dropdown.d.ts +6 -66
  170. package/lib/DropdownMenu/DropdownButton.d.ts +2 -1
  171. package/lib/FilterList.d.ts +1 -0
  172. package/lib/Heading.d.ts +1 -2
  173. package/lib/Heading.js +1 -6
  174. package/lib/Position.d.ts +4 -4
  175. package/lib/ProgressBar.d.ts +16 -11
  176. package/lib/ProgressBar.js +6 -10
  177. package/lib/SelectMenu/SelectMenu.d.ts +10 -4
  178. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  179. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  180. package/lib/Spinner.d.ts +1 -2
  181. package/lib/Spinner.js +1 -3
  182. package/lib/TextInputWithTokens.d.ts +1 -0
  183. package/lib/Token/AvatarToken.d.ts +1 -1
  184. package/lib/Token/IssueLabelToken.d.ts +1 -1
  185. package/lib/Token/Token.d.ts +1 -1
  186. package/lib/__tests__/ActionList.test.d.ts +1 -0
  187. package/lib/__tests__/ActionList.test.js +69 -0
  188. package/lib/__tests__/ActionList.types.test.d.ts +6 -0
  189. package/lib/__tests__/ActionList.types.test.js +69 -0
  190. package/lib/__tests__/ActionList2.test.d.ts +2 -0
  191. package/lib/__tests__/ActionList2.test.js +170 -0
  192. package/lib/__tests__/ActionMenu.test.d.ts +1 -0
  193. package/lib/__tests__/ActionMenu.test.js +151 -0
  194. package/lib/__tests__/AnchoredOverlay.test.d.ts +1 -0
  195. package/lib/__tests__/AnchoredOverlay.test.js +162 -0
  196. package/lib/__tests__/Autocomplete.test.d.ts +1 -0
  197. package/lib/__tests__/Autocomplete.test.js +528 -0
  198. package/lib/__tests__/Avatar.test.d.ts +1 -0
  199. package/lib/__tests__/Avatar.test.js +69 -0
  200. package/lib/__tests__/Avatar.types.test.d.ts +3 -0
  201. package/lib/__tests__/Avatar.types.test.js +31 -0
  202. package/lib/__tests__/AvatarStack.test.d.ts +1 -0
  203. package/lib/__tests__/AvatarStack.test.js +71 -0
  204. package/lib/__tests__/BorderBox.test.d.ts +1 -0
  205. package/lib/__tests__/BorderBox.test.js +58 -0
  206. package/lib/__tests__/Box.test.d.ts +1 -0
  207. package/lib/__tests__/Box.test.js +78 -0
  208. package/lib/__tests__/BranchName.test.d.ts +1 -0
  209. package/lib/__tests__/BranchName.test.js +36 -0
  210. package/lib/__tests__/BranchName.types.test.d.ts +3 -0
  211. package/lib/__tests__/BranchName.types.test.js +28 -0
  212. package/lib/__tests__/Breadcrumbs.test.d.ts +1 -0
  213. package/lib/__tests__/Breadcrumbs.test.js +40 -0
  214. package/lib/__tests__/Breadcrumbs.types.test.d.ts +3 -0
  215. package/lib/__tests__/Breadcrumbs.types.test.js +25 -0
  216. package/lib/__tests__/BreadcrumbsItem.test.d.ts +1 -0
  217. package/lib/__tests__/BreadcrumbsItem.test.js +49 -0
  218. package/lib/__tests__/Button.test.d.ts +1 -0
  219. package/lib/__tests__/Button.test.js +147 -0
  220. package/lib/__tests__/Caret.test.d.ts +1 -0
  221. package/lib/__tests__/Caret.test.js +52 -0
  222. package/lib/__tests__/Checkbox.test.d.ts +2 -0
  223. package/lib/__tests__/Checkbox.test.js +189 -0
  224. package/lib/__tests__/CircleBadge.test.d.ts +1 -0
  225. package/lib/__tests__/CircleBadge.test.js +83 -0
  226. package/lib/__tests__/CircleBadge.types.test.d.ts +3 -0
  227. package/lib/__tests__/CircleBadge.types.test.js +28 -0
  228. package/lib/__tests__/CircleOcticon.test.d.ts +1 -0
  229. package/lib/__tests__/CircleOcticon.test.js +71 -0
  230. package/lib/__tests__/ConfirmationDialog.test.d.ts +1 -0
  231. package/lib/__tests__/ConfirmationDialog.test.js +134 -0
  232. package/lib/__tests__/CounterLabel.test.d.ts +1 -0
  233. package/lib/__tests__/CounterLabel.test.js +58 -0
  234. package/lib/__tests__/CounterLabel.types.test.d.ts +3 -0
  235. package/lib/__tests__/CounterLabel.types.test.js +28 -0
  236. package/lib/__tests__/Details.test.d.ts +1 -0
  237. package/lib/__tests__/Details.test.js +117 -0
  238. package/lib/__tests__/Details.types.test.d.ts +3 -0
  239. package/lib/__tests__/Details.types.test.js +28 -0
  240. package/lib/__tests__/Dialog.test.d.ts +1 -0
  241. package/lib/__tests__/Dialog.test.js +184 -0
  242. package/lib/__tests__/Dialog.types.test.d.ts +3 -0
  243. package/lib/__tests__/Dialog.types.test.js +28 -0
  244. package/lib/__tests__/Dialog2.types.test.d.ts +3 -0
  245. package/lib/__tests__/Dialog2.types.test.js +31 -0
  246. package/lib/__tests__/Dropdown.test.d.ts +1 -0
  247. package/lib/__tests__/Dropdown.test.js +63 -0
  248. package/lib/__tests__/Dropdown.types.test.d.ts +3 -0
  249. package/lib/__tests__/Dropdown.types.test.js +31 -0
  250. package/lib/__tests__/DropdownMenu.test.d.ts +1 -0
  251. package/lib/__tests__/DropdownMenu.test.js +150 -0
  252. package/lib/__tests__/FilterList.test.d.ts +1 -0
  253. package/lib/__tests__/FilterList.test.js +36 -0
  254. package/lib/__tests__/FilterList.types.test.d.ts +3 -0
  255. package/lib/__tests__/FilterList.types.test.js +27 -0
  256. package/lib/__tests__/FilterListItem.test.d.ts +1 -0
  257. package/lib/__tests__/FilterListItem.test.js +46 -0
  258. package/lib/__tests__/FilteredSearch.test.d.ts +1 -0
  259. package/lib/__tests__/FilteredSearch.test.js +36 -0
  260. package/lib/__tests__/FilteredSearch.types.test.d.ts +3 -0
  261. package/lib/__tests__/FilteredSearch.types.test.js +28 -0
  262. package/lib/__tests__/Flash.test.d.ts +1 -0
  263. package/lib/__tests__/Flash.test.js +62 -0
  264. package/lib/__tests__/Flash.types.test.d.ts +3 -0
  265. package/lib/__tests__/Flash.types.test.js +28 -0
  266. package/lib/__tests__/Flex.test.d.ts +1 -0
  267. package/lib/__tests__/Flex.test.js +74 -0
  268. package/lib/__tests__/FormGroup.test.d.ts +1 -0
  269. package/lib/__tests__/FormGroup.test.js +54 -0
  270. package/lib/__tests__/FormGroup.types.test.d.ts +3 -0
  271. package/lib/__tests__/FormGroup.types.test.js +28 -0
  272. package/lib/__tests__/Grid.test.d.ts +1 -0
  273. package/lib/__tests__/Grid.test.js +104 -0
  274. package/lib/__tests__/Header.test.d.ts +1 -0
  275. package/lib/__tests__/Header.test.js +58 -0
  276. package/lib/__tests__/Header.types.test.d.ts +3 -0
  277. package/lib/__tests__/Header.types.test.js +29 -0
  278. package/lib/__tests__/Heading.test.d.ts +1 -0
  279. package/lib/__tests__/Heading.test.js +142 -0
  280. package/lib/__tests__/Heading.types.test.d.ts +3 -0
  281. package/lib/__tests__/Heading.types.test.js +28 -0
  282. package/lib/__tests__/KeyPaths.types.test.d.ts +11 -0
  283. package/lib/__tests__/KeyPaths.types.test.js +10 -0
  284. package/lib/__tests__/Label.test.d.ts +1 -0
  285. package/lib/__tests__/Label.test.js +46 -0
  286. package/lib/__tests__/Label.types.test.d.ts +3 -0
  287. package/lib/__tests__/Label.types.test.js +28 -0
  288. package/lib/__tests__/LabelGroup.test.d.ts +1 -0
  289. package/lib/__tests__/LabelGroup.test.js +38 -0
  290. package/lib/__tests__/LabelGroup.types.test.d.ts +3 -0
  291. package/lib/__tests__/LabelGroup.types.test.js +28 -0
  292. package/lib/__tests__/Link.test.d.ts +1 -0
  293. package/lib/__tests__/Link.test.js +76 -0
  294. package/lib/__tests__/Link.types.test.d.ts +3 -0
  295. package/lib/__tests__/Link.types.test.js +28 -0
  296. package/lib/__tests__/Merge.types.test.d.ts +30 -0
  297. package/lib/__tests__/Merge.types.test.js +27 -0
  298. package/lib/__tests__/NewButton.test.d.ts +1 -0
  299. package/lib/__tests__/NewButton.test.js +95 -0
  300. package/lib/__tests__/Overlay.test.d.ts +1 -0
  301. package/lib/__tests__/Overlay.test.js +145 -0
  302. package/lib/__tests__/Overlay.types.test.d.ts +6 -0
  303. package/lib/__tests__/Overlay.types.test.js +73 -0
  304. package/lib/__tests__/Pagehead.test.d.ts +1 -0
  305. package/lib/__tests__/Pagehead.test.js +37 -0
  306. package/lib/__tests__/Pagehead.types.test.d.ts +3 -0
  307. package/lib/__tests__/Pagehead.types.test.js +28 -0
  308. package/lib/__tests__/Pagination/Pagination.test.d.ts +1 -0
  309. package/lib/__tests__/Pagination/Pagination.test.js +47 -0
  310. package/lib/__tests__/Pagination/PaginationModel.test.d.ts +1 -0
  311. package/lib/__tests__/Pagination/PaginationModel.test.js +186 -0
  312. package/lib/__tests__/Pagination.types.test.d.ts +3 -0
  313. package/lib/__tests__/Pagination.types.test.js +33 -0
  314. package/lib/__tests__/PointerBox.test.d.ts +1 -0
  315. package/lib/__tests__/PointerBox.test.js +46 -0
  316. package/lib/__tests__/Popover.test.d.ts +1 -0
  317. package/lib/__tests__/Popover.test.js +66 -0
  318. package/lib/__tests__/Popover.types.test.d.ts +3 -0
  319. package/lib/__tests__/Popover.types.test.js +27 -0
  320. package/lib/__tests__/Portal.test.d.ts +1 -0
  321. package/lib/__tests__/Portal.test.js +124 -0
  322. package/lib/__tests__/Position.test.d.ts +1 -0
  323. package/lib/__tests__/Position.test.js +143 -0
  324. package/lib/__tests__/ProgressBar.test.d.ts +1 -0
  325. package/lib/__tests__/ProgressBar.test.js +68 -0
  326. package/lib/__tests__/SelectMenu.test.d.ts +1 -0
  327. package/lib/__tests__/SelectMenu.test.js +155 -0
  328. package/lib/__tests__/SelectMenu.types.test.d.ts +3 -0
  329. package/lib/__tests__/SelectMenu.types.test.js +47 -0
  330. package/lib/__tests__/SelectPanel.test.d.ts +1 -0
  331. package/lib/__tests__/SelectPanel.test.js +80 -0
  332. package/lib/__tests__/SelectPanel.types.test.d.ts +3 -0
  333. package/lib/__tests__/SelectPanel.types.test.js +44 -0
  334. package/lib/__tests__/SideNav.test.d.ts +1 -0
  335. package/lib/__tests__/SideNav.test.js +71 -0
  336. package/lib/__tests__/SideNav.types.test.d.ts +3 -0
  337. package/lib/__tests__/SideNav.types.test.js +28 -0
  338. package/lib/__tests__/Spinner.test.d.ts +1 -0
  339. package/lib/__tests__/Spinner.test.js +53 -0
  340. package/lib/__tests__/StateLabel.test.d.ts +1 -0
  341. package/lib/__tests__/StateLabel.test.js +71 -0
  342. package/lib/__tests__/StateLabel.types.test.d.ts +3 -0
  343. package/lib/__tests__/StateLabel.types.test.js +28 -0
  344. package/lib/__tests__/StyledOcticon.test.d.ts +1 -0
  345. package/lib/__tests__/StyledOcticon.test.js +40 -0
  346. package/lib/__tests__/StyledOcticon.types.test.d.ts +3 -0
  347. package/lib/__tests__/StyledOcticon.types.test.js +32 -0
  348. package/lib/__tests__/SubNav.test.d.ts +1 -0
  349. package/lib/__tests__/SubNav.test.js +62 -0
  350. package/lib/__tests__/SubNav.types.test.d.ts +3 -0
  351. package/lib/__tests__/SubNav.types.test.js +27 -0
  352. package/lib/__tests__/SubNavLink.test.d.ts +1 -0
  353. package/lib/__tests__/SubNavLink.test.js +49 -0
  354. package/lib/__tests__/TabNav.test.d.ts +1 -0
  355. package/lib/__tests__/TabNav.test.js +49 -0
  356. package/lib/__tests__/TabNav.types.test.d.ts +3 -0
  357. package/lib/__tests__/TabNav.types.test.js +25 -0
  358. package/lib/__tests__/Text.test.d.ts +1 -0
  359. package/lib/__tests__/Text.test.js +105 -0
  360. package/lib/__tests__/TextInput.test.d.ts +1 -0
  361. package/lib/__tests__/TextInput.test.js +78 -0
  362. package/lib/__tests__/TextInputWithTokens.test.d.ts +1 -0
  363. package/lib/__tests__/TextInputWithTokens.test.js +572 -0
  364. package/lib/__tests__/ThemeProvider.test.d.ts +1 -0
  365. package/lib/__tests__/ThemeProvider.test.js +444 -0
  366. package/lib/__tests__/Timeline.test.d.ts +1 -0
  367. package/lib/__tests__/Timeline.test.js +75 -0
  368. package/lib/__tests__/Timeline.types.test.d.ts +3 -0
  369. package/lib/__tests__/Timeline.types.test.js +31 -0
  370. package/lib/__tests__/Token.test.d.ts +1 -0
  371. package/lib/__tests__/Token.test.js +180 -0
  372. package/lib/__tests__/Tooltip.test.d.ts +1 -0
  373. package/lib/__tests__/Tooltip.test.js +69 -0
  374. package/lib/__tests__/Tooltip.types.test.d.ts +3 -0
  375. package/lib/__tests__/Tooltip.types.test.js +28 -0
  376. package/lib/__tests__/Truncate.test.d.ts +1 -0
  377. package/lib/__tests__/Truncate.test.js +63 -0
  378. package/lib/__tests__/Truncate.types.test.d.ts +3 -0
  379. package/lib/__tests__/Truncate.types.test.js +31 -0
  380. package/lib/__tests__/UnderlineNav.test.d.ts +1 -0
  381. package/lib/__tests__/UnderlineNav.test.js +72 -0
  382. package/lib/__tests__/UnderlineNav.types.test.d.ts +3 -0
  383. package/lib/__tests__/UnderlineNav.types.test.js +25 -0
  384. package/lib/__tests__/UnderlineNavLink.test.d.ts +1 -0
  385. package/lib/__tests__/UnderlineNavLink.test.js +51 -0
  386. package/lib/__tests__/behaviors/anchoredPosition.test.d.ts +1 -0
  387. package/lib/__tests__/behaviors/anchoredPosition.test.js +390 -0
  388. package/lib/__tests__/behaviors/focusTrap.test.d.ts +1 -0
  389. package/lib/__tests__/behaviors/focusTrap.test.js +234 -0
  390. package/lib/__tests__/behaviors/focusZone.test.d.ts +1 -0
  391. package/lib/__tests__/behaviors/focusZone.test.js +570 -0
  392. package/lib/__tests__/behaviors/iterateFocusableElements.test.d.ts +1 -0
  393. package/lib/__tests__/behaviors/iterateFocusableElements.test.js +55 -0
  394. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +1 -0
  395. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +226 -0
  396. package/lib/__tests__/filterObject.test.d.ts +1 -0
  397. package/lib/__tests__/filterObject.test.js +30 -0
  398. package/lib/__tests__/hooks/useAnchoredPosition.test.d.ts +1 -0
  399. package/lib/__tests__/hooks/useAnchoredPosition.test.js +54 -0
  400. package/lib/__tests__/hooks/useOnEscapePress.test.d.ts +1 -0
  401. package/lib/__tests__/hooks/useOnEscapePress.test.js +32 -0
  402. package/lib/__tests__/hooks/useOnOutsideClick.test.d.ts +1 -0
  403. package/lib/__tests__/hooks/useOnOutsideClick.test.js +87 -0
  404. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +1 -0
  405. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.js +60 -0
  406. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +1 -0
  407. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.js +45 -0
  408. package/lib/__tests__/theme.test.d.ts +1 -0
  409. package/lib/__tests__/theme.test.js +36 -0
  410. package/lib/__tests__/themeGet.test.d.ts +1 -0
  411. package/lib/__tests__/themeGet.test.js +25 -0
  412. package/lib/__tests__/themePreval.test.d.ts +1 -0
  413. package/lib/__tests__/themePreval.test.js +14 -0
  414. package/lib/__tests__/useSafeTimeout.test.d.ts +1 -0
  415. package/lib/__tests__/useSafeTimeout.test.js +45 -0
  416. package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
  417. package/lib/__tests__/utils/createSlots.test.js +75 -0
  418. package/lib/drafts.d.ts +1 -0
  419. package/lib/drafts.js +13 -0
  420. package/lib/stories/ActionList.stories.js +454 -0
  421. package/lib/stories/ActionList2.stories.js +923 -0
  422. package/lib/stories/ActionMenu.stories.js +348 -0
  423. package/lib/stories/ActionMenu2.stories.js +433 -0
  424. package/lib/stories/AnchoredOverlay.stories.js +127 -0
  425. package/lib/stories/Autocomplete.stories.js +619 -0
  426. package/lib/stories/AvatarStack.stories.js +49 -0
  427. package/lib/stories/Button.stories.js +125 -0
  428. package/lib/stories/Checkbox.stories.js +227 -0
  429. package/lib/stories/ConfirmationDialog.stories.js +119 -0
  430. package/lib/stories/Dialog.stories.js +269 -0
  431. package/lib/stories/DropdownMenu.stories.js +122 -0
  432. package/lib/stories/IssueLabelToken.stories.js +165 -0
  433. package/lib/stories/NewButton.stories.js +230 -0
  434. package/lib/stories/Overlay.stories.js +204 -0
  435. package/lib/stories/Portal.stories.js +104 -0
  436. package/lib/stories/ProfileToken.stories.js +162 -0
  437. package/lib/stories/SelectPanel.stories.js +399 -0
  438. package/lib/stories/TextInput.stories.js +144 -0
  439. package/lib/stories/TextInputWithTokens.stories.js +252 -0
  440. package/lib/stories/ThemeProvider.stories.js +102 -0
  441. package/lib/stories/Token.stories.js +176 -0
  442. package/lib/stories/useAnchoredPosition.stories.js +351 -0
  443. package/lib/stories/useFocusTrap.stories.js +360 -0
  444. package/lib/stories/useFocusZone.stories.js +607 -0
  445. package/lib/utils/testing.d.ts +1 -0
  446. package/lib/utils/testing.js +29 -0
  447. package/lib-esm/ActionList/Item.js +3 -3
  448. package/lib-esm/ActionList2/Divider.d.ts +3 -2
  449. package/lib-esm/ActionList2/Divider.js +8 -5
  450. package/lib-esm/ActionList2/Item.js +22 -6
  451. package/lib-esm/ActionList2/List.js +8 -1
  452. package/lib-esm/ActionList2/MenuContext.d.ts +10 -0
  453. package/lib-esm/ActionList2/MenuContext.js +3 -0
  454. package/lib-esm/ActionList2/Selection.js +12 -1
  455. package/lib-esm/ActionList2/index.d.ts +1 -2
  456. package/lib-esm/ActionMenu2.d.ts +310 -0
  457. package/lib-esm/ActionMenu2.js +67 -0
  458. package/lib-esm/Autocomplete/Autocomplete.d.ts +1 -0
  459. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +1 -0
  460. package/lib-esm/Avatar.d.ts +1 -2
  461. package/lib-esm/Avatar.js +2 -2
  462. package/lib-esm/BranchName.d.ts +1 -2
  463. package/lib-esm/BranchName.js +2 -2
  464. package/lib-esm/Button/Button.d.ts +1 -0
  465. package/lib-esm/Button/ButtonClose.d.ts +2 -1
  466. package/lib-esm/Button/ButtonDanger.d.ts +1 -0
  467. package/lib-esm/Button/ButtonInvisible.d.ts +1 -0
  468. package/lib-esm/Button/ButtonOutline.d.ts +1 -0
  469. package/lib-esm/Button/ButtonPrimary.d.ts +1 -0
  470. package/lib-esm/CircleOcticon.d.ts +1 -0
  471. package/lib-esm/Details.d.ts +1 -2
  472. package/lib-esm/Details.js +1 -2
  473. package/lib-esm/Dialog.d.ts +3 -2
  474. package/lib-esm/Dropdown.d.ts +6 -66
  475. package/lib-esm/DropdownMenu/DropdownButton.d.ts +2 -1
  476. package/lib-esm/FilterList.d.ts +1 -0
  477. package/lib-esm/Heading.d.ts +1 -2
  478. package/lib-esm/Heading.js +2 -6
  479. package/lib-esm/Position.d.ts +4 -4
  480. package/lib-esm/ProgressBar.d.ts +16 -11
  481. package/lib-esm/ProgressBar.js +7 -11
  482. package/lib-esm/SelectMenu/SelectMenu.d.ts +10 -4
  483. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  484. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  485. package/lib-esm/Spinner.d.ts +1 -2
  486. package/lib-esm/Spinner.js +1 -2
  487. package/lib-esm/TextInputWithTokens.d.ts +1 -0
  488. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  489. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  490. package/lib-esm/Token/Token.d.ts +1 -1
  491. package/lib-esm/__tests__/ActionList.test.d.ts +1 -0
  492. package/lib-esm/__tests__/ActionList.test.js +57 -0
  493. package/lib-esm/__tests__/ActionList.types.test.d.ts +6 -0
  494. package/lib-esm/__tests__/ActionList.types.test.js +45 -0
  495. package/lib-esm/__tests__/ActionList2.test.d.ts +2 -0
  496. package/lib-esm/__tests__/ActionList2.test.js +144 -0
  497. package/lib-esm/__tests__/ActionMenu.test.d.ts +1 -0
  498. package/lib-esm/__tests__/ActionMenu.test.js +139 -0
  499. package/lib-esm/__tests__/AnchoredOverlay.test.d.ts +1 -0
  500. package/lib-esm/__tests__/AnchoredOverlay.test.js +136 -0
  501. package/lib-esm/__tests__/Autocomplete.test.d.ts +1 -0
  502. package/lib-esm/__tests__/Autocomplete.test.js +494 -0
  503. package/lib-esm/__tests__/Avatar.test.d.ts +1 -0
  504. package/lib-esm/__tests__/Avatar.test.js +58 -0
  505. package/lib-esm/__tests__/Avatar.types.test.d.ts +3 -0
  506. package/lib-esm/__tests__/Avatar.types.test.js +16 -0
  507. package/lib-esm/__tests__/AvatarStack.test.d.ts +1 -0
  508. package/lib-esm/__tests__/AvatarStack.test.js +58 -0
  509. package/lib-esm/__tests__/BorderBox.test.d.ts +1 -0
  510. package/lib-esm/__tests__/BorderBox.test.js +47 -0
  511. package/lib-esm/__tests__/Box.test.d.ts +1 -0
  512. package/lib-esm/__tests__/Box.test.js +67 -0
  513. package/lib-esm/__tests__/BranchName.test.d.ts +1 -0
  514. package/lib-esm/__tests__/BranchName.test.js +26 -0
  515. package/lib-esm/__tests__/BranchName.types.test.d.ts +3 -0
  516. package/lib-esm/__tests__/BranchName.types.test.js +13 -0
  517. package/lib-esm/__tests__/Breadcrumbs.test.d.ts +1 -0
  518. package/lib-esm/__tests__/Breadcrumbs.test.js +30 -0
  519. package/lib-esm/__tests__/Breadcrumbs.types.test.d.ts +3 -0
  520. package/lib-esm/__tests__/Breadcrumbs.types.test.js +12 -0
  521. package/lib-esm/__tests__/BreadcrumbsItem.test.d.ts +1 -0
  522. package/lib-esm/__tests__/BreadcrumbsItem.test.js +39 -0
  523. package/lib-esm/__tests__/Button.test.d.ts +1 -0
  524. package/lib-esm/__tests__/Button.test.js +137 -0
  525. package/lib-esm/__tests__/Caret.test.d.ts +1 -0
  526. package/lib-esm/__tests__/Caret.test.js +42 -0
  527. package/lib-esm/__tests__/Checkbox.test.d.ts +2 -0
  528. package/lib-esm/__tests__/Checkbox.test.js +169 -0
  529. package/lib-esm/__tests__/CircleBadge.test.d.ts +1 -0
  530. package/lib-esm/__tests__/CircleBadge.test.js +70 -0
  531. package/lib-esm/__tests__/CircleBadge.types.test.d.ts +3 -0
  532. package/lib-esm/__tests__/CircleBadge.types.test.js +13 -0
  533. package/lib-esm/__tests__/CircleOcticon.test.d.ts +1 -0
  534. package/lib-esm/__tests__/CircleOcticon.test.js +59 -0
  535. package/lib-esm/__tests__/ConfirmationDialog.test.d.ts +1 -0
  536. package/lib-esm/__tests__/ConfirmationDialog.test.js +113 -0
  537. package/lib-esm/__tests__/CounterLabel.test.d.ts +1 -0
  538. package/lib-esm/__tests__/CounterLabel.test.js +47 -0
  539. package/lib-esm/__tests__/CounterLabel.types.test.d.ts +3 -0
  540. package/lib-esm/__tests__/CounterLabel.types.test.js +13 -0
  541. package/lib-esm/__tests__/Details.test.d.ts +1 -0
  542. package/lib-esm/__tests__/Details.test.js +107 -0
  543. package/lib-esm/__tests__/Details.types.test.d.ts +3 -0
  544. package/lib-esm/__tests__/Details.types.test.js +13 -0
  545. package/lib-esm/__tests__/Dialog.test.d.ts +1 -0
  546. package/lib-esm/__tests__/Dialog.test.js +171 -0
  547. package/lib-esm/__tests__/Dialog.types.test.d.ts +3 -0
  548. package/lib-esm/__tests__/Dialog.types.test.js +13 -0
  549. package/lib-esm/__tests__/Dialog2.types.test.d.ts +3 -0
  550. package/lib-esm/__tests__/Dialog2.types.test.js +16 -0
  551. package/lib-esm/__tests__/Dropdown.test.d.ts +1 -0
  552. package/lib-esm/__tests__/Dropdown.test.js +53 -0
  553. package/lib-esm/__tests__/Dropdown.types.test.d.ts +3 -0
  554. package/lib-esm/__tests__/Dropdown.types.test.js +17 -0
  555. package/lib-esm/__tests__/DropdownMenu.test.d.ts +1 -0
  556. package/lib-esm/__tests__/DropdownMenu.test.js +137 -0
  557. package/lib-esm/__tests__/FilterList.test.d.ts +1 -0
  558. package/lib-esm/__tests__/FilterList.test.js +26 -0
  559. package/lib-esm/__tests__/FilterList.types.test.d.ts +3 -0
  560. package/lib-esm/__tests__/FilterList.types.test.js +13 -0
  561. package/lib-esm/__tests__/FilterListItem.test.d.ts +1 -0
  562. package/lib-esm/__tests__/FilterListItem.test.js +36 -0
  563. package/lib-esm/__tests__/FilteredSearch.test.d.ts +1 -0
  564. package/lib-esm/__tests__/FilteredSearch.test.js +26 -0
  565. package/lib-esm/__tests__/FilteredSearch.types.test.d.ts +3 -0
  566. package/lib-esm/__tests__/FilteredSearch.types.test.js +13 -0
  567. package/lib-esm/__tests__/Flash.test.d.ts +1 -0
  568. package/lib-esm/__tests__/Flash.test.js +51 -0
  569. package/lib-esm/__tests__/Flash.types.test.d.ts +3 -0
  570. package/lib-esm/__tests__/Flash.types.test.js +13 -0
  571. package/lib-esm/__tests__/Flex.test.d.ts +1 -0
  572. package/lib-esm/__tests__/Flex.test.js +64 -0
  573. package/lib-esm/__tests__/FormGroup.test.d.ts +1 -0
  574. package/lib-esm/__tests__/FormGroup.test.js +44 -0
  575. package/lib-esm/__tests__/FormGroup.types.test.d.ts +3 -0
  576. package/lib-esm/__tests__/FormGroup.types.test.js +13 -0
  577. package/lib-esm/__tests__/Grid.test.d.ts +1 -0
  578. package/lib-esm/__tests__/Grid.test.js +94 -0
  579. package/lib-esm/__tests__/Header.test.d.ts +1 -0
  580. package/lib-esm/__tests__/Header.test.js +48 -0
  581. package/lib-esm/__tests__/Header.types.test.d.ts +3 -0
  582. package/lib-esm/__tests__/Header.types.test.js +15 -0
  583. package/lib-esm/__tests__/Heading.test.d.ts +1 -0
  584. package/lib-esm/__tests__/Heading.test.js +131 -0
  585. package/lib-esm/__tests__/Heading.types.test.d.ts +3 -0
  586. package/lib-esm/__tests__/Heading.types.test.js +13 -0
  587. package/lib-esm/__tests__/KeyPaths.types.test.d.ts +11 -0
  588. package/lib-esm/__tests__/KeyPaths.types.test.js +3 -0
  589. package/lib-esm/__tests__/Label.test.d.ts +1 -0
  590. package/lib-esm/__tests__/Label.test.js +36 -0
  591. package/lib-esm/__tests__/Label.types.test.d.ts +3 -0
  592. package/lib-esm/__tests__/Label.types.test.js +13 -0
  593. package/lib-esm/__tests__/LabelGroup.test.d.ts +1 -0
  594. package/lib-esm/__tests__/LabelGroup.test.js +26 -0
  595. package/lib-esm/__tests__/LabelGroup.types.test.d.ts +3 -0
  596. package/lib-esm/__tests__/LabelGroup.types.test.js +13 -0
  597. package/lib-esm/__tests__/Link.test.d.ts +1 -0
  598. package/lib-esm/__tests__/Link.test.js +66 -0
  599. package/lib-esm/__tests__/Link.types.test.d.ts +3 -0
  600. package/lib-esm/__tests__/Link.types.test.js +13 -0
  601. package/lib-esm/__tests__/Merge.types.test.d.ts +30 -0
  602. package/lib-esm/__tests__/Merge.types.test.js +14 -0
  603. package/lib-esm/__tests__/NewButton.test.d.ts +1 -0
  604. package/lib-esm/__tests__/NewButton.test.js +84 -0
  605. package/lib-esm/__tests__/Overlay.test.d.ts +1 -0
  606. package/lib-esm/__tests__/Overlay.test.js +123 -0
  607. package/lib-esm/__tests__/Overlay.types.test.d.ts +6 -0
  608. package/lib-esm/__tests__/Overlay.types.test.js +49 -0
  609. package/lib-esm/__tests__/Pagehead.test.d.ts +1 -0
  610. package/lib-esm/__tests__/Pagehead.test.js +26 -0
  611. package/lib-esm/__tests__/Pagehead.types.test.d.ts +3 -0
  612. package/lib-esm/__tests__/Pagehead.types.test.js +13 -0
  613. package/lib-esm/__tests__/Pagination/Pagination.test.d.ts +1 -0
  614. package/lib-esm/__tests__/Pagination/Pagination.test.js +35 -0
  615. package/lib-esm/__tests__/Pagination/PaginationModel.test.d.ts +1 -0
  616. package/lib-esm/__tests__/Pagination/PaginationModel.test.js +182 -0
  617. package/lib-esm/__tests__/Pagination.types.test.d.ts +3 -0
  618. package/lib-esm/__tests__/Pagination.types.test.js +18 -0
  619. package/lib-esm/__tests__/PointerBox.test.d.ts +1 -0
  620. package/lib-esm/__tests__/PointerBox.test.js +36 -0
  621. package/lib-esm/__tests__/Popover.test.d.ts +1 -0
  622. package/lib-esm/__tests__/Popover.test.js +53 -0
  623. package/lib-esm/__tests__/Popover.types.test.d.ts +3 -0
  624. package/lib-esm/__tests__/Popover.types.test.js +13 -0
  625. package/lib-esm/__tests__/Portal.test.d.ts +1 -0
  626. package/lib-esm/__tests__/Portal.test.js +104 -0
  627. package/lib-esm/__tests__/Position.test.d.ts +1 -0
  628. package/lib-esm/__tests__/Position.test.js +133 -0
  629. package/lib-esm/__tests__/ProgressBar.test.d.ts +1 -0
  630. package/lib-esm/__tests__/ProgressBar.test.js +58 -0
  631. package/lib-esm/__tests__/SelectMenu.test.d.ts +1 -0
  632. package/lib-esm/__tests__/SelectMenu.test.js +145 -0
  633. package/lib-esm/__tests__/SelectMenu.types.test.d.ts +3 -0
  634. package/lib-esm/__tests__/SelectMenu.types.test.js +33 -0
  635. package/lib-esm/__tests__/SelectPanel.test.d.ts +1 -0
  636. package/lib-esm/__tests__/SelectPanel.test.js +65 -0
  637. package/lib-esm/__tests__/SelectPanel.types.test.d.ts +3 -0
  638. package/lib-esm/__tests__/SelectPanel.types.test.js +29 -0
  639. package/lib-esm/__tests__/SideNav.test.d.ts +1 -0
  640. package/lib-esm/__tests__/SideNav.test.js +60 -0
  641. package/lib-esm/__tests__/SideNav.types.test.d.ts +3 -0
  642. package/lib-esm/__tests__/SideNav.types.test.js +13 -0
  643. package/lib-esm/__tests__/Spinner.test.d.ts +1 -0
  644. package/lib-esm/__tests__/Spinner.test.js +43 -0
  645. package/lib-esm/__tests__/StateLabel.test.d.ts +1 -0
  646. package/lib-esm/__tests__/StateLabel.test.js +61 -0
  647. package/lib-esm/__tests__/StateLabel.types.test.d.ts +3 -0
  648. package/lib-esm/__tests__/StateLabel.types.test.js +13 -0
  649. package/lib-esm/__tests__/StyledOcticon.test.d.ts +1 -0
  650. package/lib-esm/__tests__/StyledOcticon.test.js +29 -0
  651. package/lib-esm/__tests__/StyledOcticon.types.test.d.ts +3 -0
  652. package/lib-esm/__tests__/StyledOcticon.types.test.js +16 -0
  653. package/lib-esm/__tests__/SubNav.test.d.ts +1 -0
  654. package/lib-esm/__tests__/SubNav.test.js +50 -0
  655. package/lib-esm/__tests__/SubNav.types.test.d.ts +3 -0
  656. package/lib-esm/__tests__/SubNav.types.test.js +14 -0
  657. package/lib-esm/__tests__/SubNavLink.test.d.ts +1 -0
  658. package/lib-esm/__tests__/SubNavLink.test.js +39 -0
  659. package/lib-esm/__tests__/TabNav.test.d.ts +1 -0
  660. package/lib-esm/__tests__/TabNav.test.js +39 -0
  661. package/lib-esm/__tests__/TabNav.types.test.d.ts +3 -0
  662. package/lib-esm/__tests__/TabNav.types.test.js +12 -0
  663. package/lib-esm/__tests__/Text.test.d.ts +1 -0
  664. package/lib-esm/__tests__/Text.test.js +93 -0
  665. package/lib-esm/__tests__/TextInput.test.d.ts +1 -0
  666. package/lib-esm/__tests__/TextInput.test.js +68 -0
  667. package/lib-esm/__tests__/TextInputWithTokens.test.d.ts +1 -0
  668. package/lib-esm/__tests__/TextInputWithTokens.test.js +511 -0
  669. package/lib-esm/__tests__/ThemeProvider.test.d.ts +1 -0
  670. package/lib-esm/__tests__/ThemeProvider.test.js +408 -0
  671. package/lib-esm/__tests__/Timeline.test.d.ts +1 -0
  672. package/lib-esm/__tests__/Timeline.test.js +65 -0
  673. package/lib-esm/__tests__/Timeline.types.test.d.ts +3 -0
  674. package/lib-esm/__tests__/Timeline.types.test.js +18 -0
  675. package/lib-esm/__tests__/Token.test.d.ts +1 -0
  676. package/lib-esm/__tests__/Token.test.js +166 -0
  677. package/lib-esm/__tests__/Tooltip.test.d.ts +1 -0
  678. package/lib-esm/__tests__/Tooltip.test.js +59 -0
  679. package/lib-esm/__tests__/Tooltip.types.test.d.ts +3 -0
  680. package/lib-esm/__tests__/Tooltip.types.test.js +13 -0
  681. package/lib-esm/__tests__/Truncate.test.d.ts +1 -0
  682. package/lib-esm/__tests__/Truncate.test.js +53 -0
  683. package/lib-esm/__tests__/Truncate.types.test.d.ts +3 -0
  684. package/lib-esm/__tests__/Truncate.types.test.js +16 -0
  685. package/lib-esm/__tests__/UnderlineNav.test.d.ts +1 -0
  686. package/lib-esm/__tests__/UnderlineNav.test.js +60 -0
  687. package/lib-esm/__tests__/UnderlineNav.types.test.d.ts +3 -0
  688. package/lib-esm/__tests__/UnderlineNav.types.test.js +12 -0
  689. package/lib-esm/__tests__/UnderlineNavLink.test.d.ts +1 -0
  690. package/lib-esm/__tests__/UnderlineNavLink.test.js +41 -0
  691. package/lib-esm/__tests__/behaviors/anchoredPosition.test.d.ts +1 -0
  692. package/lib-esm/__tests__/behaviors/anchoredPosition.test.js +388 -0
  693. package/lib-esm/__tests__/behaviors/focusTrap.test.d.ts +1 -0
  694. package/lib-esm/__tests__/behaviors/focusTrap.test.js +227 -0
  695. package/lib-esm/__tests__/behaviors/focusZone.test.d.ts +1 -0
  696. package/lib-esm/__tests__/behaviors/focusZone.test.js +487 -0
  697. package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.d.ts +1 -0
  698. package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.js +48 -0
  699. package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +1 -0
  700. package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.js +224 -0
  701. package/lib-esm/__tests__/filterObject.test.d.ts +1 -0
  702. package/lib-esm/__tests__/filterObject.test.js +27 -0
  703. package/lib-esm/__tests__/hooks/useAnchoredPosition.test.d.ts +1 -0
  704. package/lib-esm/__tests__/hooks/useAnchoredPosition.test.js +46 -0
  705. package/lib-esm/__tests__/hooks/useOnEscapePress.test.d.ts +1 -0
  706. package/lib-esm/__tests__/hooks/useOnEscapePress.test.js +23 -0
  707. package/lib-esm/__tests__/hooks/useOnOutsideClick.test.d.ts +1 -0
  708. package/lib-esm/__tests__/hooks/useOnOutsideClick.test.js +68 -0
  709. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +1 -0
  710. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.js +52 -0
  711. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +1 -0
  712. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.js +36 -0
  713. package/lib-esm/__tests__/theme.test.d.ts +1 -0
  714. package/lib-esm/__tests__/theme.test.js +33 -0
  715. package/lib-esm/__tests__/themeGet.test.d.ts +1 -0
  716. package/lib-esm/__tests__/themeGet.test.js +22 -0
  717. package/lib-esm/__tests__/themePreval.test.d.ts +1 -0
  718. package/lib-esm/__tests__/themePreval.test.js +7 -0
  719. package/lib-esm/__tests__/useSafeTimeout.test.d.ts +1 -0
  720. package/lib-esm/__tests__/useSafeTimeout.test.js +39 -0
  721. package/lib-esm/__tests__/utils/createSlots.test.d.ts +1 -0
  722. package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
  723. package/lib-esm/drafts.d.ts +1 -0
  724. package/lib-esm/drafts.js +2 -1
  725. package/lib-esm/stories/ActionList.stories.js +395 -0
  726. package/lib-esm/stories/ActionList2.stories.js +811 -0
  727. package/lib-esm/stories/ActionMenu.stories.js +303 -0
  728. package/lib-esm/stories/ActionMenu2.stories.js +376 -0
  729. package/lib-esm/stories/AnchoredOverlay.stories.js +101 -0
  730. package/lib-esm/stories/Autocomplete.stories.js +560 -0
  731. package/lib-esm/stories/AvatarStack.stories.js +32 -0
  732. package/lib-esm/stories/Button.stories.js +86 -0
  733. package/lib-esm/stories/Checkbox.stories.js +197 -0
  734. package/lib-esm/stories/ConfirmationDialog.stories.js +94 -0
  735. package/lib-esm/stories/Dialog.stories.js +244 -0
  736. package/lib-esm/stories/DropdownMenu.stories.js +94 -0
  737. package/lib-esm/stories/IssueLabelToken.stories.js +139 -0
  738. package/lib-esm/stories/NewButton.stories.js +178 -0
  739. package/lib-esm/stories/Overlay.stories.js +173 -0
  740. package/lib-esm/stories/Portal.stories.js +68 -0
  741. package/lib-esm/stories/ProfileToken.stories.js +136 -0
  742. package/lib-esm/stories/SelectPanel.stories.js +334 -0
  743. package/lib-esm/stories/TextInput.stories.js +117 -0
  744. package/lib-esm/stories/TextInputWithTokens.stories.js +210 -0
  745. package/lib-esm/stories/ThemeProvider.stories.js +83 -0
  746. package/lib-esm/stories/Token.stories.js +146 -0
  747. package/lib-esm/stories/useAnchoredPosition.stories.js +313 -0
  748. package/lib-esm/stories/useFocusTrap.stories.js +313 -0
  749. package/lib-esm/stories/useFocusZone.stories.js +562 -0
  750. package/lib-esm/utils/testing.d.ts +1 -0
  751. package/lib-esm/utils/testing.js +24 -0
  752. package/migrating.md +250 -0
  753. package/now.json +17 -0
  754. package/package-lock.json +66668 -0
  755. package/package.json +2 -2
  756. package/rollup.config.js +36 -0
  757. package/script/build +21 -0
  758. package/script/build-storybook +10 -0
  759. package/script/setup +12 -0
  760. package/src/ActionList/Divider.tsx +25 -0
  761. package/src/ActionList/Group.tsx +45 -0
  762. package/src/ActionList/Header.tsx +74 -0
  763. package/src/ActionList/Item.tsx +481 -0
  764. package/src/ActionList/List.tsx +258 -0
  765. package/src/ActionList/index.ts +21 -0
  766. package/src/ActionList2/Description.tsx +52 -0
  767. package/src/ActionList2/Divider.tsx +29 -0
  768. package/src/ActionList2/Group.tsx +103 -0
  769. package/src/ActionList2/Item.tsx +257 -0
  770. package/src/ActionList2/LinkItem.tsx +49 -0
  771. package/src/ActionList2/List.tsx +54 -0
  772. package/src/ActionList2/MenuContext.tsx +6 -0
  773. package/src/ActionList2/Selection.tsx +70 -0
  774. package/src/ActionList2/Visuals.tsx +76 -0
  775. package/src/ActionList2/index.ts +39 -0
  776. package/src/ActionMenu.tsx +106 -0
  777. package/src/ActionMenu2.tsx +94 -0
  778. package/src/AnchoredOverlay/AnchoredOverlay.tsx +191 -0
  779. package/src/AnchoredOverlay/index.ts +2 -0
  780. package/src/Autocomplete/Autocomplete.tsx +103 -0
  781. package/src/Autocomplete/AutocompleteContext.tsx +19 -0
  782. package/src/Autocomplete/AutocompleteInput.tsx +179 -0
  783. package/src/Autocomplete/AutocompleteMenu.tsx +341 -0
  784. package/src/Autocomplete/AutocompleteOverlay.tsx +68 -0
  785. package/src/Autocomplete/index.ts +2 -0
  786. package/src/Avatar.tsx +44 -0
  787. package/src/AvatarPair.tsx +35 -0
  788. package/src/AvatarStack.tsx +159 -0
  789. package/src/BaseStyles.tsx +53 -0
  790. package/src/BorderBox.tsx +18 -0
  791. package/src/Box.tsx +54 -0
  792. package/src/BranchName.tsx +19 -0
  793. package/src/Breadcrumbs.tsx +101 -0
  794. package/src/Button/Button.tsx +39 -0
  795. package/src/Button/ButtonBase.tsx +39 -0
  796. package/src/Button/ButtonClose.tsx +36 -0
  797. package/src/Button/ButtonDanger.tsx +42 -0
  798. package/src/Button/ButtonGroup.tsx +55 -0
  799. package/src/Button/ButtonInvisible.tsx +31 -0
  800. package/src/Button/ButtonOutline.tsx +42 -0
  801. package/src/Button/ButtonPrimary.tsx +40 -0
  802. package/src/Button/ButtonStyles.tsx +36 -0
  803. package/src/Button/ButtonTableList.tsx +45 -0
  804. package/src/Button/index.ts +16 -0
  805. package/src/Caret.tsx +133 -0
  806. package/src/Checkbox.tsx +75 -0
  807. package/src/CircleBadge.tsx +53 -0
  808. package/src/CircleOcticon.tsx +37 -0
  809. package/src/CounterLabel.tsx +50 -0
  810. package/src/Details.tsx +19 -0
  811. package/src/Dialog/ConfirmationDialog.tsx +184 -0
  812. package/src/Dialog/Dialog.tsx +444 -0
  813. package/src/Dialog.tsx +145 -0
  814. package/src/Dropdown.tsx +154 -0
  815. package/src/DropdownMenu/DropdownButton.tsx +15 -0
  816. package/src/DropdownMenu/DropdownMenu.tsx +115 -0
  817. package/src/DropdownMenu/index.ts +4 -0
  818. package/src/DropdownStyles.ts +128 -0
  819. package/src/FilterList.tsx +75 -0
  820. package/src/FilteredActionList/FilteredActionList.tsx +142 -0
  821. package/src/FilteredActionList/index.ts +2 -0
  822. package/src/FilteredSearch.tsx +27 -0
  823. package/src/Flash.tsx +75 -0
  824. package/src/Flex.tsx +15 -0
  825. package/src/FormGroup.tsx +24 -0
  826. package/src/Grid.tsx +15 -0
  827. package/src/Header.tsx +74 -0
  828. package/src/Heading.tsx +14 -0
  829. package/src/Label.tsx +72 -0
  830. package/src/LabelGroup.tsx +17 -0
  831. package/src/Link.tsx +42 -0
  832. package/src/NewButton/button-counter.tsx +15 -0
  833. package/src/NewButton/button.tsx +283 -0
  834. package/src/NewButton/index.ts +10 -0
  835. package/src/NewButton/types.ts +36 -0
  836. package/src/Overlay.tsx +203 -0
  837. package/src/Pagehead.tsx +16 -0
  838. package/src/Pagination/Pagination.tsx +212 -0
  839. package/src/Pagination/index.ts +4 -0
  840. package/src/Pagination/model.tsx +187 -0
  841. package/src/PointerBox.tsx +31 -0
  842. package/src/Popover.tsx +225 -0
  843. package/src/Portal/Portal.tsx +97 -0
  844. package/src/Portal/index.ts +5 -0
  845. package/src/Position.tsx +63 -0
  846. package/src/ProgressBar.tsx +53 -0
  847. package/src/SelectMenu/SelectMenu.tsx +123 -0
  848. package/src/SelectMenu/SelectMenuContext.tsx +9 -0
  849. package/src/SelectMenu/SelectMenuDivider.tsx +24 -0
  850. package/src/SelectMenu/SelectMenuFilter.tsx +50 -0
  851. package/src/SelectMenu/SelectMenuFooter.tsx +27 -0
  852. package/src/SelectMenu/SelectMenuHeader.tsx +48 -0
  853. package/src/SelectMenu/SelectMenuItem.tsx +136 -0
  854. package/src/SelectMenu/SelectMenuList.tsx +41 -0
  855. package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +25 -0
  856. package/src/SelectMenu/SelectMenuModal.tsx +119 -0
  857. package/src/SelectMenu/SelectMenuTab.tsx +87 -0
  858. package/src/SelectMenu/SelectMenuTabPanel.tsx +29 -0
  859. package/src/SelectMenu/SelectMenuTabs.tsx +43 -0
  860. package/src/SelectMenu/hooks/useKeyboardNav.js +90 -0
  861. package/src/SelectMenu/index.ts +15 -0
  862. package/src/SelectPanel/SelectPanel.tsx +173 -0
  863. package/src/SelectPanel/index.ts +2 -0
  864. package/src/SideNav.tsx +191 -0
  865. package/src/Spinner.tsx +57 -0
  866. package/src/StateLabel.tsx +112 -0
  867. package/src/StyledOcticon.tsx +22 -0
  868. package/src/SubNav.tsx +124 -0
  869. package/src/TabNav.tsx +73 -0
  870. package/src/Text.tsx +13 -0
  871. package/src/TextInput.tsx +68 -0
  872. package/src/TextInputWithTokens.tsx +351 -0
  873. package/src/ThemeProvider.tsx +176 -0
  874. package/src/Timeline.tsx +140 -0
  875. package/src/Token/AvatarToken.tsx +54 -0
  876. package/src/Token/IssueLabelToken.tsx +150 -0
  877. package/src/Token/Token.tsx +126 -0
  878. package/src/Token/TokenBase.tsx +129 -0
  879. package/src/Token/_RemoveTokenButton.tsx +111 -0
  880. package/src/Token/_TokenTextContainer.tsx +47 -0
  881. package/src/Token/index.ts +3 -0
  882. package/src/Tooltip.tsx +263 -0
  883. package/src/Truncate.tsx +31 -0
  884. package/src/UnderlineNav.tsx +107 -0
  885. package/src/_TextInputWrapper.tsx +113 -0
  886. package/src/_UnstyledTextInput.tsx +19 -0
  887. package/src/__tests__/.eslintrc.json +11 -0
  888. package/src/__tests__/ActionList.test.tsx +53 -0
  889. package/src/__tests__/ActionList.types.test.tsx +51 -0
  890. package/src/__tests__/ActionList2.test.tsx +156 -0
  891. package/src/__tests__/ActionMenu.test.tsx +136 -0
  892. package/src/__tests__/AnchoredOverlay.test.tsx +150 -0
  893. package/src/__tests__/Autocomplete.test.tsx +444 -0
  894. package/src/__tests__/Avatar.test.tsx +44 -0
  895. package/src/__tests__/Avatar.types.test.tsx +11 -0
  896. package/src/__tests__/AvatarStack.test.tsx +48 -0
  897. package/src/__tests__/BorderBox.test.tsx +43 -0
  898. package/src/__tests__/Box.test.tsx +42 -0
  899. package/src/__tests__/BranchName.test.tsx +26 -0
  900. package/src/__tests__/BranchName.types.test.tsx +11 -0
  901. package/src/__tests__/Breadcrumbs.test.tsx +27 -0
  902. package/src/__tests__/Breadcrumbs.types.test.tsx +22 -0
  903. package/src/__tests__/BreadcrumbsItem.test.tsx +31 -0
  904. package/src/__tests__/Button.test.tsx +128 -0
  905. package/src/__tests__/Caret.test.tsx +36 -0
  906. package/src/__tests__/Checkbox.test.tsx +155 -0
  907. package/src/__tests__/CircleBadge.test.tsx +66 -0
  908. package/src/__tests__/CircleBadge.types.test.tsx +11 -0
  909. package/src/__tests__/CircleOcticon.test.tsx +50 -0
  910. package/src/__tests__/ConfirmationDialog.test.tsx +120 -0
  911. package/src/__tests__/CounterLabel.test.tsx +50 -0
  912. package/src/__tests__/CounterLabel.types.test.tsx +11 -0
  913. package/src/__tests__/Details.test.tsx +115 -0
  914. package/src/__tests__/Details.types.test.tsx +11 -0
  915. package/src/__tests__/Dialog.test.tsx +155 -0
  916. package/src/__tests__/Dialog.types.test.tsx +11 -0
  917. package/src/__tests__/Dialog2.types.test.tsx +11 -0
  918. package/src/__tests__/Dropdown.test.tsx +53 -0
  919. package/src/__tests__/Dropdown.types.test.tsx +21 -0
  920. package/src/__tests__/DropdownMenu.test.tsx +136 -0
  921. package/src/__tests__/FilterList.test.tsx +26 -0
  922. package/src/__tests__/FilterList.types.test.tsx +17 -0
  923. package/src/__tests__/FilterListItem.test.tsx +31 -0
  924. package/src/__tests__/FilteredSearch.test.tsx +26 -0
  925. package/src/__tests__/FilteredSearch.types.test.tsx +11 -0
  926. package/src/__tests__/Flash.test.tsx +45 -0
  927. package/src/__tests__/Flash.types.test.tsx +11 -0
  928. package/src/__tests__/Flex.test.tsx +58 -0
  929. package/src/__tests__/FormGroup.test.tsx +38 -0
  930. package/src/__tests__/FormGroup.types.test.tsx +11 -0
  931. package/src/__tests__/Grid.test.tsx +82 -0
  932. package/src/__tests__/Header.test.tsx +49 -0
  933. package/src/__tests__/Header.types.test.tsx +19 -0
  934. package/src/__tests__/Heading.test.tsx +137 -0
  935. package/src/__tests__/Heading.types.test.tsx +11 -0
  936. package/src/__tests__/KeyPaths.types.test.ts +14 -0
  937. package/src/__tests__/Label.test.tsx +34 -0
  938. package/src/__tests__/Label.types.test.tsx +11 -0
  939. package/src/__tests__/LabelGroup.test.tsx +30 -0
  940. package/src/__tests__/LabelGroup.types.test.tsx +11 -0
  941. package/src/__tests__/Link.test.tsx +47 -0
  942. package/src/__tests__/Link.types.test.tsx +11 -0
  943. package/src/__tests__/Merge.types.test.ts +39 -0
  944. package/src/__tests__/NewButton.test.tsx +70 -0
  945. package/src/__tests__/Overlay.test.tsx +103 -0
  946. package/src/__tests__/Overlay.types.test.tsx +33 -0
  947. package/src/__tests__/Pagehead.test.tsx +23 -0
  948. package/src/__tests__/Pagehead.types.test.tsx +11 -0
  949. package/src/__tests__/Pagination/Pagination.test.tsx +30 -0
  950. package/src/__tests__/Pagination/PaginationModel.test.tsx +133 -0
  951. package/src/__tests__/Pagination/__snapshots__/Pagination.test.tsx.snap +184 -0
  952. package/src/__tests__/Pagination.types.test.tsx +11 -0
  953. package/src/__tests__/PointerBox.test.tsx +34 -0
  954. package/src/__tests__/Popover.test.tsx +68 -0
  955. package/src/__tests__/Popover.types.test.tsx +17 -0
  956. package/src/__tests__/Portal.test.tsx +103 -0
  957. package/src/__tests__/Position.test.tsx +117 -0
  958. package/src/__tests__/ProgressBar.test.tsx +40 -0
  959. package/src/__tests__/SelectMenu.test.tsx +142 -0
  960. package/src/__tests__/SelectMenu.types.test.tsx +37 -0
  961. package/src/__tests__/SelectPanel.test.tsx +63 -0
  962. package/src/__tests__/SelectPanel.types.test.tsx +31 -0
  963. package/src/__tests__/SideNav.test.tsx +62 -0
  964. package/src/__tests__/SideNav.types.test.tsx +11 -0
  965. package/src/__tests__/Spinner.test.tsx +42 -0
  966. package/src/__tests__/StateLabel.test.tsx +48 -0
  967. package/src/__tests__/StateLabel.types.test.tsx +11 -0
  968. package/src/__tests__/StyledOcticon.test.tsx +26 -0
  969. package/src/__tests__/StyledOcticon.types.test.tsx +12 -0
  970. package/src/__tests__/SubNav.test.tsx +50 -0
  971. package/src/__tests__/SubNav.types.test.tsx +25 -0
  972. package/src/__tests__/SubNavLink.test.tsx +31 -0
  973. package/src/__tests__/TabNav.test.tsx +32 -0
  974. package/src/__tests__/TabNav.types.test.tsx +22 -0
  975. package/src/__tests__/Text.test.tsx +78 -0
  976. package/src/__tests__/TextInput.test.tsx +49 -0
  977. package/src/__tests__/TextInputWithTokens.test.tsx +422 -0
  978. package/src/__tests__/ThemeProvider.test.tsx +441 -0
  979. package/src/__tests__/Timeline.test.tsx +58 -0
  980. package/src/__tests__/Timeline.types.test.tsx +31 -0
  981. package/src/__tests__/Token.test.tsx +118 -0
  982. package/src/__tests__/Tooltip.test.tsx +52 -0
  983. package/src/__tests__/Tooltip.types.test.tsx +11 -0
  984. package/src/__tests__/Truncate.test.tsx +43 -0
  985. package/src/__tests__/Truncate.types.test.tsx +11 -0
  986. package/src/__tests__/UnderlineNav.test.tsx +58 -0
  987. package/src/__tests__/UnderlineNav.types.test.tsx +22 -0
  988. package/src/__tests__/UnderlineNavLink.test.tsx +31 -0
  989. package/src/__tests__/__snapshots__/ActionList.test.tsx.snap +223 -0
  990. package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
  991. package/src/__tests__/__snapshots__/ActionMenu.test.tsx.snap +80 -0
  992. package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +232 -0
  993. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +3901 -0
  994. package/src/__tests__/__snapshots__/Avatar.test.tsx.snap +19 -0
  995. package/src/__tests__/__snapshots__/AvatarStack.test.tsx.snap +377 -0
  996. package/src/__tests__/__snapshots__/BorderBox.test.tsx.snap +14 -0
  997. package/src/__tests__/__snapshots__/Box.test.tsx.snap +201 -0
  998. package/src/__tests__/__snapshots__/BranchName.test.tsx.snap +17 -0
  999. package/src/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +29 -0
  1000. package/src/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap +79 -0
  1001. package/src/__tests__/__snapshots__/Button.test.tsx.snap +840 -0
  1002. package/src/__tests__/__snapshots__/Caret.test.tsx.snap +373 -0
  1003. package/src/__tests__/__snapshots__/Checkbox.test.tsx.snap +16 -0
  1004. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +142 -0
  1005. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +65 -0
  1006. package/src/__tests__/__snapshots__/ConfirmationDialog.test.tsx.snap +89 -0
  1007. package/src/__tests__/__snapshots__/CounterLabel.test.tsx.snap +22 -0
  1008. package/src/__tests__/__snapshots__/Details.test.tsx.snap +15 -0
  1009. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +201 -0
  1010. package/src/__tests__/__snapshots__/Dropdown.test.tsx.snap +249 -0
  1011. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +107 -0
  1012. package/src/__tests__/__snapshots__/FilterList.test.tsx.snap +13 -0
  1013. package/src/__tests__/__snapshots__/FilterListItem.test.tsx.snap +80 -0
  1014. package/src/__tests__/__snapshots__/FilteredSearch.test.tsx.snap +32 -0
  1015. package/src/__tests__/__snapshots__/Flash.test.tsx.snap +32 -0
  1016. package/src/__tests__/__snapshots__/Flex.test.tsx.snap +130 -0
  1017. package/src/__tests__/__snapshots__/FormGroup.test.tsx.snap +25 -0
  1018. package/src/__tests__/__snapshots__/Grid.test.tsx.snap +178 -0
  1019. package/src/__tests__/__snapshots__/Header.test.tsx.snap +79 -0
  1020. package/src/__tests__/__snapshots__/Heading.test.tsx.snap +13 -0
  1021. package/src/__tests__/__snapshots__/Label.test.tsx.snap +73 -0
  1022. package/src/__tests__/__snapshots__/LabelGroup.test.tsx.snap +15 -0
  1023. package/src/__tests__/__snapshots__/Link.test.tsx.snap +212 -0
  1024. package/src/__tests__/__snapshots__/NewButton.test.tsx.snap +305 -0
  1025. package/src/__tests__/__snapshots__/Pagehead.test.tsx.snap +15 -0
  1026. package/src/__tests__/__snapshots__/PointerBox.test.tsx.snap +174 -0
  1027. package/src/__tests__/__snapshots__/Popover.test.tsx.snap +4687 -0
  1028. package/src/__tests__/__snapshots__/Position.test.tsx.snap +44 -0
  1029. package/src/__tests__/__snapshots__/ProgressBar.test.tsx.snap +53 -0
  1030. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +473 -0
  1031. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +124 -0
  1032. package/src/__tests__/__snapshots__/SideNav.test.tsx.snap +143 -0
  1033. package/src/__tests__/__snapshots__/Spinner.test.tsx.snap +33 -0
  1034. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +395 -0
  1035. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +26 -0
  1036. package/src/__tests__/__snapshots__/SubNav.test.tsx.snap +44 -0
  1037. package/src/__tests__/__snapshots__/SubNavLink.test.tsx.snap +199 -0
  1038. package/src/__tests__/__snapshots__/TabNav.test.tsx.snap +58 -0
  1039. package/src/__tests__/__snapshots__/Text.test.tsx.snap +7 -0
  1040. package/src/__tests__/__snapshots__/TextInput.test.tsx.snap +446 -0
  1041. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +6045 -0
  1042. package/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap +15 -0
  1043. package/src/__tests__/__snapshots__/Timeline.test.tsx.snap +159 -0
  1044. package/src/__tests__/__snapshots__/Token.test.tsx.snap +3811 -0
  1045. package/src/__tests__/__snapshots__/Tooltip.test.tsx.snap +227 -0
  1046. package/src/__tests__/__snapshots__/Truncate.test.tsx.snap +17 -0
  1047. package/src/__tests__/__snapshots__/UnderlineNav.test.tsx.snap +59 -0
  1048. package/src/__tests__/__snapshots__/UnderlineNavLink.test.tsx.snap +130 -0
  1049. package/src/__tests__/__snapshots__/themePreval.test.ts.snap +3176 -0
  1050. package/src/__tests__/behaviors/anchoredPosition.test.ts +295 -0
  1051. package/src/__tests__/behaviors/focusTrap.test.tsx +236 -0
  1052. package/src/__tests__/behaviors/focusZone.test.tsx +549 -0
  1053. package/src/__tests__/behaviors/iterateFocusableElements.test.tsx +61 -0
  1054. package/src/__tests__/behaviors/scrollIntoViewingArea.test.ts +195 -0
  1055. package/src/__tests__/filterObject.test.ts +54 -0
  1056. package/src/__tests__/hooks/useAnchoredPosition.test.tsx +31 -0
  1057. package/src/__tests__/hooks/useOnEscapePress.test.tsx +16 -0
  1058. package/src/__tests__/hooks/useOnOutsideClick.test.tsx +48 -0
  1059. package/src/__tests__/hooks/useOpenAndCloseFocus.test.tsx +48 -0
  1060. package/src/__tests__/hooks/useProvidedStateOrCreate.test.tsx +39 -0
  1061. package/src/__tests__/theme.test.ts +41 -0
  1062. package/src/__tests__/themeGet.test.ts +15 -0
  1063. package/src/__tests__/themePreval.test.ts +8 -0
  1064. package/src/__tests__/useSafeTimeout.test.tsx +36 -0
  1065. package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
  1066. package/src/__tests__/utils/createSlots.test.tsx +74 -0
  1067. package/src/behaviors/anchoredPosition.ts +442 -0
  1068. package/src/behaviors/focusTrap.ts +184 -0
  1069. package/src/behaviors/focusZone.ts +713 -0
  1070. package/src/behaviors/scrollIntoViewingArea.ts +27 -0
  1071. package/src/constants.ts +62 -0
  1072. package/src/drafts.ts +11 -0
  1073. package/src/hooks/index.ts +11 -0
  1074. package/src/hooks/useAnchoredPosition.ts +54 -0
  1075. package/src/hooks/useCombinedRefs.ts +40 -0
  1076. package/src/hooks/useDetails.tsx +54 -0
  1077. package/src/hooks/useDialog.ts +121 -0
  1078. package/src/hooks/useFocusTrap.ts +80 -0
  1079. package/src/hooks/useFocusZone.ts +64 -0
  1080. package/src/hooks/useOnEscapePress.ts +63 -0
  1081. package/src/hooks/useOnOutsideClick.tsx +82 -0
  1082. package/src/hooks/useOpenAndCloseFocus.ts +32 -0
  1083. package/src/hooks/useOverlay.tsx +34 -0
  1084. package/src/hooks/useProvidedRefOrCreate.ts +14 -0
  1085. package/src/hooks/useProvidedStateOrCreate.ts +27 -0
  1086. package/src/hooks/useRenderForcingRef.ts +22 -0
  1087. package/src/hooks/useResizeObserver.ts +11 -0
  1088. package/src/hooks/useSafeTimeout.ts +38 -0
  1089. package/src/hooks/useScrollFlash.ts +21 -0
  1090. package/src/index.ts +175 -0
  1091. package/src/polyfills/eventListenerSignal.ts +66 -0
  1092. package/src/stories/ActionList.stories.tsx +436 -0
  1093. package/src/stories/ActionList2.stories.tsx +1305 -0
  1094. package/src/stories/ActionMenu.stories.tsx +331 -0
  1095. package/src/stories/ActionMenu2.stories.tsx +551 -0
  1096. package/src/stories/AnchoredOverlay.stories.tsx +117 -0
  1097. package/src/stories/Autocomplete.stories.tsx +655 -0
  1098. package/src/stories/AvatarStack.stories.tsx +37 -0
  1099. package/src/stories/Button.stories.tsx +92 -0
  1100. package/src/stories/Checkbox.stories.tsx +164 -0
  1101. package/src/stories/ConfirmationDialog.stories.tsx +105 -0
  1102. package/src/stories/Dialog.stories.tsx +240 -0
  1103. package/src/stories/DropdownMenu.stories.tsx +84 -0
  1104. package/src/stories/IssueLabelToken.stories.tsx +138 -0
  1105. package/src/stories/NewButton.stories.tsx +201 -0
  1106. package/src/stories/Overlay.stories.tsx +213 -0
  1107. package/src/stories/Portal.stories.tsx +109 -0
  1108. package/src/stories/ProfileToken.stories.tsx +129 -0
  1109. package/src/stories/SelectPanel.stories.tsx +353 -0
  1110. package/src/stories/TextInput.stories.tsx +113 -0
  1111. package/src/stories/TextInputWithTokens.stories.tsx +155 -0
  1112. package/src/stories/ThemeProvider.stories.tsx +104 -0
  1113. package/src/stories/Token.stories.tsx +137 -0
  1114. package/src/stories/useAnchoredPosition.stories.tsx +332 -0
  1115. package/src/stories/useFocusTrap.stories.tsx +400 -0
  1116. package/src/stories/useFocusZone.stories.tsx +663 -0
  1117. package/src/sx.ts +24 -0
  1118. package/src/theme-preval.js +80 -0
  1119. package/src/theme.ts +89 -0
  1120. package/src/utils/create-slots.tsx +96 -0
  1121. package/src/utils/deprecate.tsx +73 -0
  1122. package/src/utils/isNumeric.tsx +4 -0
  1123. package/src/utils/iterateFocusableElements.ts +121 -0
  1124. package/src/utils/ssr.tsx +1 -0
  1125. package/src/utils/test-deprecations.tsx +19 -0
  1126. package/src/utils/test-helpers.tsx +7 -0
  1127. package/src/utils/test-matchers.tsx +109 -0
  1128. package/src/utils/testing.tsx +264 -0
  1129. package/src/utils/theme.js +64 -0
  1130. package/src/utils/types/AriaRole.ts +71 -0
  1131. package/src/utils/types/ComponentProps.ts +13 -0
  1132. package/src/utils/types/Flatten.ts +4 -0
  1133. package/src/utils/types/KeyPaths.ts +10 -0
  1134. package/src/utils/types/MandateProps.ts +19 -0
  1135. package/src/utils/types/Merge.ts +20 -0
  1136. package/src/utils/types/index.ts +5 -0
  1137. package/src/utils/uniqueId.ts +6 -0
  1138. package/src/utils/use-force-update.ts +7 -0
  1139. package/src/utils/useIsomorphicLayoutEffect.ts +10 -0
  1140. package/src/utils/userAgent.ts +7 -0
  1141. package/stats.html +3279 -0
  1142. package/tsconfig.build.json +7 -0
  1143. package/tsconfig.json +20 -0
  1144. package/lib/ActionList2/Header.d.ts +0 -26
  1145. package/lib/ActionList2/Header.js +0 -55
  1146. package/lib-esm/ActionList2/Header.d.ts +0 -26
  1147. package/lib-esm/ActionList2/Header.js +0 -44
@@ -0,0 +1,251 @@
1
+ ---
2
+ title: ActionMenu
3
+ status: Alpha
4
+ source: https://github.com/primer/react/tree/main/src/ActionMenu
5
+ storybook: '/react/storybook?path=/story/composite-components-actionmenu2'
6
+ description: An ActionMenu is an ActionList-based component for creating a menu of actions that expands through a trigger button.
7
+ ---
8
+
9
+ import {Box, Avatar} from '@primer/components'
10
+ import {ActionMenu, ActionList} from '@primer/components/drafts'
11
+ import {Props} from '../../src/props'
12
+
13
+ <br />
14
+
15
+ <Box sx={{border: '1px solid', borderColor: 'border.default', borderRadius: 2, padding: 6}}>
16
+ <ActionMenu>
17
+ <ActionMenu.Button>Menu</ActionMenu.Button>
18
+ <ActionList>
19
+ <ActionList.Item onSelect={() => onSelect('Copy link')}>
20
+ Copy link
21
+ <ActionList.TrailingVisual>⌘C</ActionList.TrailingVisual>
22
+ </ActionList.Item>
23
+ <ActionList.Item onSelect={() => onSelect('Quote reply')}>
24
+ Quote reply
25
+ <ActionList.TrailingVisual>⌘Q</ActionList.TrailingVisual>
26
+ </ActionList.Item>
27
+ <ActionList.Item onSelect={() => onSelect('Edit comment')}>
28
+ Edit comment
29
+ <ActionList.TrailingVisual>⌘E</ActionList.TrailingVisual>
30
+ </ActionList.Item>
31
+ <ActionList.Divider />
32
+ <ActionList.Item variant="danger" onSelect={() => onSelect('Delete file')}>
33
+ Delete file
34
+ <ActionList.TrailingVisual>⌘D</ActionList.TrailingVisual>
35
+ </ActionList.Item>
36
+ </ActionList>
37
+
38
+ </ActionMenu>
39
+ </Box>
40
+
41
+ <br />
42
+
43
+ ```js
44
+ import {ActionMenu} from '@primer/components/drafts'
45
+ ```
46
+
47
+ <br />
48
+
49
+ ## Examples
50
+
51
+ ### Minimal example
52
+
53
+ `ActionMenu` ships with `ActionMenu.Button` which is an accessible trigger for the overlay. It's recommended to compose `ActionList` with this component.
54
+
55
+ &nbsp;
56
+
57
+ ```javascript live noinline
58
+ // import {ActionMenu, ActionList} from '@primer/components/drafts'
59
+ const {ActionMenu, ActionList} = drafts // ignore docs silliness; import like that ↑
60
+
61
+ render(
62
+ <ActionMenu>
63
+ <ActionMenu.Button>Menu</ActionMenu.Button>
64
+
65
+ <ActionList>
66
+ <ActionList.Item onSelect={event => console.log('New file')}>New file</ActionList.Item>
67
+ <ActionList.Item>Copy link</ActionList.Item>
68
+ <ActionList.Item>Edit file</ActionList.Item>
69
+ <ActionList.Divider />
70
+ <ActionList.Item variant="danger">Delete file</ActionList.Item>
71
+ </ActionList>
72
+ </ActionMenu>
73
+ )
74
+ ```
75
+
76
+ ### With a custom anchor
77
+
78
+ You can choose to have a different _anchor_ for the Menu dependending on the application's context.
79
+
80
+ &nbsp;
81
+
82
+ ```javascript live noinline
83
+ // import {ActionMenu, ActionList} from '@primer/components/drafts'
84
+ const {ActionMenu, ActionList} = drafts // ignore docs silliness; import like that ↑
85
+
86
+ render(
87
+ <ActionMenu>
88
+ <ActionMenu.Anchor>
89
+ <ButtonInvisible aria-label="Open column options">
90
+ <KebabHorizontalIcon />
91
+ </ButtonInvisible>
92
+ </ActionMenu.Anchor>
93
+
94
+ <ActionList>
95
+ <ActionList.Item>
96
+ <ActionList.LeadingVisual>
97
+ <PencilIcon />
98
+ </ActionList.LeadingVisual>
99
+ Rename
100
+ </ActionList.Item>
101
+ <ActionList.Item>
102
+ <ActionList.LeadingVisual>
103
+ <ArchiveIcon />
104
+ </ActionList.LeadingVisual>
105
+ Archive all cards
106
+ </ActionList.Item>
107
+ <ActionList.Item variant="danger">
108
+ <ActionList.LeadingVisual>
109
+ <TrashIcon />
110
+ </ActionList.LeadingVisual>
111
+ Delete
112
+ </ActionList.Item>
113
+ </ActionList>
114
+ </ActionMenu>
115
+ )
116
+ ```
117
+
118
+ ### With Groups
119
+
120
+ ```javascript live noinline
121
+ // import {ActionMenu, ActionList} from '@primer/components/drafts'
122
+ const {ActionMenu, ActionList} = drafts // ignore docs silliness; import like that ↑
123
+
124
+ render(
125
+ <ActionMenu>
126
+ <ActionMenu.Button>Open column menu</ActionMenu.Button>
127
+
128
+ <ActionList showDividers>
129
+ <ActionList.Group title="Live query">
130
+ <ActionList.Item>
131
+ <ActionList.LeadingVisual>
132
+ <SearchIcon />
133
+ </ActionList.LeadingVisual>
134
+ repo:github/memex,github/github
135
+ </ActionList.Item>
136
+ </ActionList.Group>
137
+ <ActionList.Divider />
138
+ <ActionList.Group title="Layout" variant="subtle">
139
+ <ActionList.Item>
140
+ <ActionList.LeadingVisual>
141
+ <NoteIcon />
142
+ </ActionList.LeadingVisual>
143
+ Table
144
+ <ActionList.Description variant="block">
145
+ Information-dense table optimized for operations across teams
146
+ </ActionList.Description>
147
+ </ActionList.Item>
148
+ <ActionList.Item role="listitem">
149
+ <ActionList.LeadingVisual>
150
+ <ProjectIcon />
151
+ </ActionList.LeadingVisual>
152
+ Board
153
+ <ActionList.Description variant="block">Kanban-style board focused on visual states</ActionList.Description>
154
+ </ActionList.Item>
155
+ </ActionList.Group>
156
+ <ActionList.Divider />
157
+ <ActionList.Group>
158
+ <ActionList.Item>
159
+ <ActionList.LeadingVisual>
160
+ <FilterIcon />
161
+ </ActionList.LeadingVisual>
162
+ Save sort and filters to current view
163
+ </ActionList.Item>
164
+ <ActionList.Item>
165
+ <ActionList.LeadingVisual>
166
+ <FilterIcon />
167
+ </ActionList.LeadingVisual>
168
+ Save sort and filters to new view
169
+ </ActionList.Item>
170
+ </ActionList.Group>
171
+ <ActionList.Divider />
172
+ <ActionList.Group>
173
+ <ActionList.Item>
174
+ <ActionList.LeadingVisual>
175
+ <GearIcon />
176
+ </ActionList.LeadingVisual>
177
+ View settings
178
+ </ActionList.Item>
179
+ </ActionList.Group>
180
+ </ActionList>
181
+ </ActionMenu>
182
+ )
183
+ ```
184
+
185
+ ### With External Anchor
186
+
187
+ To create an anchor outside of the menu, you need to switch to controlled mode for the menu and pass it as `anchorRef` to `ActionMenu`:
188
+
189
+ ```javascript live noinline
190
+ // import {ActionMenu, ActionList} from '@primer/components/drafts'
191
+ const {ActionMenu, ActionList} = drafts // ignore docs silliness; import like that ↑
192
+
193
+ const Example = () => {
194
+ const [open, setOpen] = React.useState(false)
195
+ const anchorRef = React.createRef()
196
+
197
+ return (
198
+ <>
199
+ <Button ref={anchorRef} onClick={() => setOpen(!open)}>
200
+ {open ? 'Close Menu' : 'Open Menu'}
201
+ </Button>
202
+
203
+ <ActionMenu open={open} onOpenChange={setOpen} anchorRef={anchorRef}>
204
+ <ActionList>
205
+ <ActionList.Item>Copy link</ActionList.Item>
206
+ <ActionList.Item>Quote reply</ActionList.Item>
207
+ <ActionList.Item>Edit comment</ActionList.Item>
208
+ <ActionList.Divider />
209
+ <ActionList.Item variant="danger">Delete file</ActionList.Item>
210
+ </ActionList>
211
+ </ActionMenu>
212
+ </>
213
+ )
214
+ }
215
+
216
+ render(<Example />)
217
+ ```
218
+
219
+ ## Props / API reference
220
+
221
+ ### ActionMenu
222
+
223
+ | Name | Type | Default | Description |
224
+ | :----------- | :-------------------------------------------------- | :-----: | :----------------------------------------------------------------------------------------------------------------------- |
225
+ | children\* | `React.ReactElement[]` | - | Required. Recommended: `ActionMenu.Button` or `ActionMenu.Anchor` with [`ActionList`](/drafts/ActionList2) |
226
+ | open | `boolean` | - | Optional. If defined, will control the open/closed state of the overlay. Must be used in conjuction with `onOpenChange`. |
227
+ | onOpenChange | `(open: boolean) => void` | - | Optional. If defined, will control the open/closed state of the overlay. Must be used in conjuction with `open`. |
228
+ | anchorRef | `React.RefObject<HTMLElement>` | - | Optional. Useful for defining an external anchor |
229
+ | overlayProps | [`Partial<OverlayProps>`](/Overlay#component-props) | - | Optional. Props to be spread on the internal [`AnchoredOverlay`](/AnchoredOverlay) component. |
230
+
231
+ ### ActionMenu.Button
232
+
233
+ | Type | Default | Description |
234
+ | :-------------------------------------- | :-----: | :------------------------------------------------------------------------------------------------------------------- |
235
+ | [ButtonProps](/Buttons#component-props) | - | Optional. You can pass all of the props that you would pass to a [`Button`](/Buttons) component like `variant`, `sx` |
236
+
237
+ ### ActionMenu.Anchor
238
+
239
+ | Name | Type | Default | Description |
240
+ | :--------- | :------------------- | :-----: | :-------------------------------- |
241
+ | children\* | `React.ReactElement` | - | Required. Accepts a single child. |
242
+
243
+ ## Further reading
244
+
245
+ [Interface guidelines: Action List + Menu](https://primer.style/design/components/action-list)
246
+
247
+ ## Related components
248
+
249
+ - [ActionList](/drafts/ActionList2)
250
+ - [DropdownMenu](/DropdownMenu)
251
+ - [SelectPanel](/SelectPanel)
@@ -0,0 +1,103 @@
1
+ ---
2
+ title: Focus Trap Behavior
3
+ ---
4
+
5
+ The `focusTrap` behavior and `useFocusTrap` hook are used prevent focus from leaving a particular element. This is useful for implementing modal dialogs: only the content within the dialog should be interactive, even though the UI underneath may still be visible.
6
+
7
+ ### Behavior
8
+
9
+ - Activation: As soon as the focus trap is activated, it will ensure that an element within the container has focus. If it doesn't, it will focus the first focusable element within the container, or, if provided, the element indicated by the `initialFocus` parameter (see API below).
10
+ - External focus changes: If an external cause (e.g. mouse click, scripts, or accessibility software) results in an element outside the container to be focused, focus will immediately be redirected to the last-focused element that is inside the container.
11
+ - Circular tab focus: Using the `TAB` key on the last focusable element within the container will result in the first focusable element within the container receiving focus. Similarly, `Shift+TAB` can be used to focus the last element from the first.
12
+ - Global: Only one focus trap can be _active_ at a time. When a focus trap is enabled, if there is already an active focus trap, it becomes suspended and pushed onto a stack. Once the newly-active focus trap is disabled, the most recently-suspended trap will reactivate. Suspended focus traps can be disabled, causing them to be removed from the stack of suspended traps.
13
+
14
+ ### Demo
15
+
16
+ To see a demo, deploy Storybook and find the `useFocusTrap` stories.
17
+
18
+ ### Usage
19
+
20
+ ```ts
21
+ function showDialog() {
22
+ const dialog = document.getElementById('myDialog')
23
+ if (dialog instanceof HTMLElement) {
24
+ dialog.style.display = ''
25
+ return focusTrap(dialog)
26
+ }
27
+ }
28
+ function hideDialog(controller: AbortController) {
29
+ document.getElementById('myDialog')?.style.display = 'none'
30
+ controller.abort()
31
+ }
32
+ const dialogController = showDialog()
33
+
34
+ // later
35
+ if (dialogController) {
36
+ hideDialog(controller)
37
+ }
38
+ ```
39
+
40
+ ### API
41
+
42
+ The `focusTrap` function takes the following arguments.
43
+
44
+ | Name | Type | Default | Description |
45
+ | :----------- | :------------- | :---------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
46
+ | container | `HTMLElement` | | When active, only elements within this container (along with the container itself) can be focused. |
47
+ | initialFocus | `HTMLElement` | | Specifies the element which will receive focus when the focus trap is activated. Defaults to the first tabbable element inside the container. |
48
+ | signal | `AbortSignal?` | `undefined` | Optional abort signal to control the focus trap. If one is not provided, an `AbortController` will be returned, which can be used to disable the focus trap. |
49
+
50
+ #### Return value
51
+
52
+ If the `signal` argument is omitted, `focusTrap()` will return an `AbortController`. This object has an `abort()` method, which can be called to disable the focus trap.
53
+
54
+ ### Best practices
55
+
56
+ - Focus management is an important consideration for accessible applications. Sometimes poor focus management can make certain tasks impossible to complete for users not using a mouse. To learn more, read the [ARIA guidelines for keyboard focus](https://www.w3.org/TR/wai-aria-practices/#kbd_focus_discernable_predictable).
57
+ - Only activate a focus trap if all UI outside of the trap container should be inert (non-interactive).
58
+ - Avoid situations where multiple focus traps may be active (e.g. dialogs that open more dialogs). This behavior handles those situations, but the pattern may indicate poor UX.
59
+
60
+ ### A note on performance
61
+
62
+ When focus trap is activated, it must perform [reflow](https://developers.google.com/speed/docs/insights/browser-reflow) to discover focusable elements. Use caution not to rapidly enable and disable focus traps.
63
+
64
+ ## useFocusTrap hook
65
+
66
+ The `useFocusTrap` hook is used to achieve focus trapping for React components. The hook returns a `ref` that must be applied to the focus trap container. The hook also returns a ref that can be used to indicate the initially-focused element when a focus trap is activated.
67
+
68
+ The focus trap can be disabled in two ways:
69
+
70
+ 1. Simply do not render the component. When a component that uses focus trapping is unmounted, its focus trap will be aborted automatically.
71
+ 2. Pass `disabled: true` to the settings argument of `useFocusTrap`.
72
+
73
+ The `useFocusTrap` hook also has an additional setting, `restoreFocusOnCleanUp`. If this is set to true, when the hook is either disabled (called with `disabled: true` or unmounted), we will attempt to re-focus the element that was focused immediately before the focus trap was enabled.
74
+
75
+ ### Using your own refs
76
+
77
+ If you would like to use your own refs, you can pass them into the hook as part of the settings object (see the interface below).
78
+
79
+ ### Usage
80
+
81
+ ```jsx
82
+ export const FocusTrapExample = () => {
83
+ const {containerRef} = useFocusTrap()
84
+ return (
85
+ <div ref={containerRef as React.RefObject<HTMLDivElement>}>
86
+ <Button>Apple</Button>
87
+ <Button>Banana</Button>
88
+ <Button>Cantaloupe</Button>
89
+ </div>
90
+ )
91
+ }
92
+ ```
93
+
94
+ ### FocusTrapHookSettings interface
95
+
96
+ `FocusTrapHookSettings` has the following properties:
97
+
98
+ | Name | Type | Default | Description |
99
+ | :-------------------- | :---------------- | :---------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
100
+ | containerRef | `React.RefObject` | `undefined` | If provided, this will be the ref used to access the focus trap container. Otherwise, this hook will create the ref for you and return it. In both cases, the ref must be provided to the container element's JSX. |
101
+ | initialFocusRef | `React.RefObject` | `undefined` | If provided, this will be the ref used to access the element that should receive initial focus when the focus trap is activated. Otherwise, this hook will create the ref for you and return it. If unused, the first tabbable element inside the container will be focused. |
102
+ | disabled | `boolean` | `false` | If true, the previously-established focus trap for this container will be aborted. |
103
+ | restoreFocusOnCleanUp | `boolean` | `false` | If true, attempt to restore focus to the previously-focused element when the trap is disabled or unmounted. |
@@ -0,0 +1,145 @@
1
+ ---
2
+ title: Focus Zone Behavior
3
+ ---
4
+
5
+ The `focusZone` behavior and `useFocusZone` hook are used to designate a container where focus can be moved using keys other than `Tab`. This is useful for implementing many of the patterns described in [Section 6](https://www.w3.org/TR/wai-aria-practices-1.1/#keyboard) of the WAI-ARIA Authoring Practices document. The most common use case of this behavior is to allow arrow keys (up and down or left and right) to move focus between related elements, such as items in a menu.
6
+
7
+ At a high level, the `focusZone` behavior works by adjusting the `tabindex` attribute on focusable elements and setting up event listeners on the container that respond to the relevant key presses.
8
+
9
+ Settings for this behavior allow the user to customize several aspects of the focus zone. See **FocusZoneSettings** below for a detailed description of these settings.
10
+
11
+ ### Focusability: which elements participate in the Focus Zone?
12
+
13
+ When the `focusZone` behavior is established, it will discover all _focusable_ elements within the given container and allow them to be focused with the bound keys. _Focusable_ elements are those that either are normally focusable via the Tab key OR have a valid `tabindex` attribute (including `"-1"`). The easiest way to ensure an element participates in the focus zone is by applying the attribute `tabindex="-1"`. If you need to prevent a focusable element from participating in the focus zone, you can provide a `focusableElementFilter`.
14
+
15
+ ### Focus order
16
+
17
+ The `focusZone` behavior uses the natural DOM ordering of elements to determine focus order. This means that a key that moves focus will either move to a "next" element or to a "previous" element. For example, the left arrow key and the up arrow key would both move focus to the previous element in the DOM order, while the right arrow key and the down arrow key would both move focus to the next element in the DOM order.
18
+
19
+ Focus cannot be moved beyond the last element of the container (other than using the Tab key). The `focusOutBehavior` option can be used to allow focus to wrap around from last to first element (or vice-versa).
20
+
21
+ For a more customized focus movement behavior, the consumer has the ability to supply a custom callback that identifies the next element to focus.
22
+
23
+ #### Entering the focus zone
24
+
25
+ By default, when focus enters a focus zone, the element that receives focus will be the most recently-focused element within that focus zone. If no element had previously been focused, or if that previously-focused element was removed, focus will revert to the first focusable element within the focus zone, regardless of the direction of focus movement.
26
+
27
+ Using the `focusInStrategy` option, you can change this behavior. Setting this option to `"first"` will simply cause the first focusable element in the container to be focused whenever focus enters the focus zone. Setting it to `"closest"` will cause either the first or last focusable element in the container to be focused depending on the direction of focus movement (for example, a shift+tab that brings focus to the container will cause the last focusable element to be focused, whereas a regular tab would cause the first focusable element to be focused). Otherwise, you may provide a callback to choose a custom element to receive initial focus. One scenario where this would be useful is if you wanted to focus an item that is "selected" in a list.
28
+
29
+ For more information on choosing the right focus in behavior, see [6.6 Keyboard Navigation Inside Components](https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_general_within) from the ARIA Authoring Practices document.
30
+
31
+ ### Supported keys
32
+
33
+ The `focusZone` behavior supports different sets of keys for moving focus around. The `bindKeys` option is used to set which of the following keys can be used to move focus.
34
+
35
+ | Key(s) | Notes | Use case |
36
+ | :-------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |
37
+ | ArrowVertical | Prevents default behavior of scrolling where applicable | Most focus zones with vertically-positioned elements |
38
+ | ArrowHorizontal | Prevents default behavior of scrolling where applicable | Most focus zones with horizontally-positioned elements |
39
+ | HomeAndEnd | Causes focus to jump to the first or last focusable item in the container. Does not move focus if the currently-focused element is a text box. | Generally used with arrow keys |
40
+ | PageUpDown | Works the same as the Home and End keys. Advisable only when supplying a custom callback that supports paging. | In a long, scrollable list |
41
+ | Tab/Shift+Tab | Unlike other keys, the Tab key will always allow movement outside of the focus zone (use the Focus Trap behavior to prevent this). Tab moves to the next item, Shift+Tab moves to the previous. | Bind Tab if you want to continue allowing tab to move focus between elements in your container rather than jumping out of the container. |
42
+ | JK | J moves focus to the next item, K moves to the previous. Does not move focus if the currently-focused element is a text box. [Originally from](https://catonmat.net/why-vim-uses-hjkl-as-arrow-keys) the vi keybindings | Used in certain lists |
43
+ | HL | H moves focus to the previous item, L moves to the next. Does not move focus if the currently-focused element is a text box. [Originally from](https://catonmat.net/why-vim-uses-hjkl-as-arrow-keys) the vi keybindings | Used in certain lists |
44
+ | WS | W moves focus to the previous item, S moves to the next. Does not move focus if the currently-focused element is a text box. | Any situation where it is more ergonomic for the left hand to perform this action, such as in a gaming context (rare) |
45
+ | AD | A moves focus to the previous item, D moves to the next. Does not move focus if the currently-focused element is a text box. | Any situation where it is more ergonomic for the left hand to perform this action, such as in a gaming context (rare) |
46
+
47
+ ### DOM Focus vs. Active Descendant
48
+
49
+ The `focusZone` behavior supports two modes of operation: DOM Focus and Active Descendant.
50
+
51
+ - DOM Focus is the default mode and by far the most commonly needed. When a key is used to move focus, we call `.focus()` directly on the element to receive focus. This results in `document.activeElement` getting set to this new element, and it will receive any necessary styles via `:focus` and `:focus-within`.
52
+ - Active Descendant mode does _not_ move DOM focus. Instead, focus remains on the _control_ element, and its `aria-activedescendant` attribute is set to the ID of the relevant element. Because there are no `:focus` styles applied and no `focus` events fired, you can supply an `onActiveDescendantChanged` callback to handle any necessary styles or other logic as the active descendant changes. For more information on the Active Descendant focus pattern, see [6.6.2 Managing Focus in Composites Using `aria-activedescendant`](https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_focus_activedescendant) from the ARIA Authoring Practices document.
53
+
54
+ ### Demo
55
+
56
+ Deploy Storybook to see live demos of `focusZone`.
57
+
58
+ ### Usage
59
+
60
+ ```ts
61
+ const settings = {
62
+ bindKeys: FocusKeys.ArrowVertical | FocusKeys.HomeAndEnd
63
+ } as FocusZoneSettings
64
+ const focusZone = document.getElementById('focusZoneContainer')
65
+ focusZone(focusZone, settings)
66
+ ```
67
+
68
+ ### API
69
+
70
+ The `focusZone` function takes the following arguments.
71
+
72
+ | Name | Type | Default | Description |
73
+ | :-------- | :------------------ | :-----: | :--------------------------------------------------------------------------------- |
74
+ | container | `Element` | | The focus zone will apply to this container and all of its focusable descendants. |
75
+ | settings | `FocusZoneSettings` | `{}` | Settings to customize the focus zone. See below for a description of each setting. |
76
+
77
+ #### FocusZoneSettings interface
78
+
79
+ `FocusZoneSettings` is an object with the following interface. All properties are optional and have default behaviors.
80
+
81
+ | Name | Type | Default | Description |
82
+ | :------------------------ | :-------------------------------------------- | :----------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
83
+ | bindKeys | `FocusKeys` (numeric enum) | `FocusKeys.ArrowVertical │ FocusKeys.HomeAndEnd` | Bit flags that identify keys that will move focus around the focus zone. Each available key either moves focus to the "next", "previous", "start", or "end" element, so it is best to only bind the keys that make sense to move focus in your UI. Use the `FocusKeys` object to discover supported keys (listed in the "Supported keys" section above). <br /><br />Use the bitwise "OR" operator (&#124;) to combine key types. For example, `FocusKeys.WASD │ FocusKeys.HJKL` represents all of W, A, S, D, H, J, K, and L.<br /><br />The default for this setting is `FocusKeys.ArrowVertical │ FocusKeys.HomeAndEnd`, unless `getNextFocusable` is provided, in which case `FocusKeys.ArrowAll │ FocusKeys.HomeAndEnd` is used as the default. |
84
+ | focusOutBehavior | `"stop" │ "wrap"` | `"stop"` | Choose the behavior applied in cases where focus is currently at either the first or last element of the container. `"stop"` - do nothing and keep focus where it was; `"wrap"` - wrap focus around to the first element from the last, or the last element from the first |
85
+ | focusInStrategy | `"first" │ "closest" │ "previous" │ Function` | `"previous"` | This option allows customization of the behavior that determines which of the focusable elements should be focused when focus enters the container via the Tab key.<br /><br />When set to `"first"`, whenever focus enters the container via Tab, we will focus the first focusable element. When set to `"previous"`, the most recently focused element will be focused (fallback to first if there was no previous).<br /><br />The "closest" strategy works like "first", except either the first or the last element of the container will be focused, depending on the direction from which focus comes.<br /><br />If a function is provided, this function should return the `HTMLElement` intended to receive focus. This is useful if you want to focus the currently "selected" item or element. |
86
+ | getNextFocusable | `Function` | | This is a callback used to customize the next element to focus when a bound key is pressed. The function takes 3 arguments: `direction` (`"previous"`, `"next"`, `"start"`, or `"end"`), `from` (Element or `undefined`), and `event` (KeyboardEvent). The function should return the next element to focus, or `undefined`. If `undefined` is returned, the regular algorithm to select the next element to focus will be used. |
87
+ | focusableElementFilter | `Function` | | This is a callback used to cull focusable elements from participating in the focus zone. |
88
+ | abortSignal | `AbortSignal` | | If passed, the focus zone will be deactivated and all event listeners removed when this signal is aborted. If not passed, an `AbortSignal` will be returned by the `focusZone` function. |
89
+ | activeDescendantControl | `HTMLElement` | | If `activeDescendantControl` is supplied, do not move focus or alter `tabindex` on any element. Instead, manage `aria-activedescendant` according to the [ARIA best practices guidelines](https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_focus_activedescendant).<br /><br />The given `activeDescendantControl` will be given an `aria-controls` attribute that references the ID of the `container`. Additionally, it will be given an `aria-activedescendant` attribute that references the ID of the currently-active descendant.<br /><br />This element will retain DOM focus as arrow keys are pressed. |
90
+ | onActiveDescendantChanged | `Function` | | This function is called each time the active descendant changes (only applicable if `activeDescendantControl` is given). The function takes two arguments: `newActiveDescendant` and `previousActiveDescendant`, both `HTMLElement`, either of which can be undefined (e.g. when an element in the container first becomes active, or when the controlling element becomes unfocused). |
91
+
92
+ ### Best practices
93
+
94
+ We highly recommend reading [Section 6: Developing a Keyboard Interface](https://www.w3.org/TR/wai-aria-practices-1.1/#keyboard) from the WAI-ARIA Authoring Practices document.
95
+
96
+ ## useFocusZone hook
97
+
98
+ The `useFocusZone` hook is used to provide focus zone behavior to React components. The hook returns a ref that must be added to the container element.
99
+
100
+ ### Using your own refs
101
+
102
+ If you would like to use your own refs, you can pass them into the hook as part of the settings object (see the interface below).
103
+
104
+ ### Hook dependencies
105
+
106
+ Like other hooks such as `useCallback` and `useEffect`, this hook takes a dependencies array. If defined, the focus zone will be re-applied when a dependency changes (and the old one will be cleaned up).
107
+
108
+ ### Usage
109
+
110
+ ```jsx
111
+ export const FocusZoneExample = () => {
112
+ const {containerRef} = useFocusZone({bindKeys: FocusKeys.ArrowVertical | FocusKeys.HomeAndEnd})
113
+ return (
114
+ <div ref={containerRef}>
115
+ <button>First</button>
116
+ <button>Second</button>
117
+ <button>Third</button>
118
+ </div>
119
+ )
120
+ }
121
+ ```
122
+
123
+ ### useFocusZone hook
124
+
125
+ | Name | Type | Default | Description |
126
+ | :----------- | :---------------------- | :-------: | :------------------------------------------------------------------ |
127
+ | settings | `FocusZoneHookSettings` | undefined | Optional settings to control how the focus zone behaves. See below. |
128
+ | dependencies | `React.DependencyList` | undefined | Dependencies to determine when to initialize the focus zone. |
129
+
130
+ **Return value**
131
+
132
+ | Name | Type | Description |
133
+ | :------------------------- | :----------------------------- | :---------------------------------------------------------------------------------------- |
134
+ | containerRef | `React.RefObject<HTMLElement>` | This ref must be added to the container's JSX. |
135
+ | activeDescendantControlRef | `React.RefObject<HTMLElement>` | If using active descendant focusing, this ref must be added to the control element's JSX. |
136
+
137
+ ### FocusZoneHookSettings interface
138
+
139
+ `FocusZoneHookSettings` is an object with an interface that extends `FocusZoneSettings` (see above), however, the `activeDescendantControl` prop is omitted (instead see the `activeDescendantFocus` prop below). Additionally, it adds the following properties:
140
+
141
+ | Name | Type | Default | Description |
142
+ | :-------------------- | :--------------------------------------- | :---------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
143
+ | containerRef | `React.RefObject` | `undefined` | If provided, this will be the ref used to access the element that will become the container of the focus zone. Otherwise, this hook will create the ref for you and return it. In both cases, the ref must be provided to the container's JSX. |
144
+ | activeDescendantFocus | `boolean │ React.RefObject<HTMLElement>` | `false` | If false, the focus zone will apply normal DOM focusing (see **DOM Focus vs. Active Descendant** above). If true, or if a ref is provided, the focus zone will use "active descendant" focusing. If a ref is applied, it will be used as the control element for active descendant focus. If `true` is given, a ref will be created and returned by the hook. |
145
+ | disabled | `boolean` | `false` | Set to true to disable the focus zone and clean up listeners. Can be re-enabled at any time. |