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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (740) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +10 -0
  3. package/.devcontainer/devcontainer.json +8 -0
  4. package/.eslintrc.json +136 -0
  5. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  6. package/.github/ISSUE_TEMPLATE/new_component_proposal_template.md +41 -0
  7. package/.github/dependabot.yml +18 -0
  8. package/.github/pull_request_template.md +18 -0
  9. package/.github/workflows/ci.yml +31 -0
  10. package/.github/workflows/deploy_preview.yml +47 -0
  11. package/.github/workflows/deploy_production.yml +70 -0
  12. package/.github/workflows/release.yml +35 -0
  13. package/.github/workflows/release_canary.yml +70 -0
  14. package/.github/workflows/release_candidate.yml +60 -0
  15. package/.github/workflows/size.yml +13 -0
  16. package/.github/workflows/stale.yml +26 -0
  17. package/.gitignore +10 -0
  18. package/.npmrc +4 -0
  19. package/.nvmrc +1 -0
  20. package/.storybook/main.js +11 -0
  21. package/.storybook/preview.js +69 -0
  22. package/.vscode/launch.json +21 -0
  23. package/.vscode/settings.json +13 -0
  24. package/@types/@styled-system/index.d.ts +0 -0
  25. package/@types/@styled-system/prop-types/index.d.ts +1 -0
  26. package/@types/@styled-system/props/index.d.ts +1 -0
  27. package/@types/jest-styled-components/index.d.ts +1 -0
  28. package/CHANGELOG.md +13 -1
  29. package/CODEOWNERS +2 -0
  30. package/babel-defines.js +13 -0
  31. package/babel.config.js +39 -0
  32. package/contributor-docs/CODE_OF_CONDUCT.md +76 -0
  33. package/contributor-docs/CONTRIBUTING.md +274 -0
  34. package/contributor-docs/adrs/adr-001-typescript.md +23 -0
  35. package/contributor-docs/adrs/adr-002-behavior-isolation.md +106 -0
  36. package/contributor-docs/behaviors.md +132 -0
  37. package/contributor-docs/component-contents-api-patterns.md +316 -0
  38. package/contributor-docs/principles.md +39 -0
  39. package/dist/browser.esm.js +131 -131
  40. package/dist/browser.esm.js.map +1 -1
  41. package/dist/browser.umd.js +114 -114
  42. package/dist/browser.umd.js.map +1 -1
  43. package/docs/.eslintrc +0 -0
  44. package/docs/.gitignore +91 -0
  45. package/docs/components/PropsList.js +5 -0
  46. package/docs/components/State.js +9 -0
  47. package/docs/components/constants.js +34 -0
  48. package/docs/components/index.js +2 -0
  49. package/docs/content/ActionList.mdx +72 -0
  50. package/docs/content/ActionMenu.mdx +80 -0
  51. package/docs/content/AnchoredOverlay.mdx +37 -0
  52. package/docs/content/Avatar.mdx +33 -0
  53. package/docs/content/AvatarStack.mdx +43 -0
  54. package/docs/content/BorderBox.md +46 -0
  55. package/docs/content/Box.md +74 -0
  56. package/docs/content/BranchName.md +18 -0
  57. package/docs/content/Breadcrumbs.md +52 -0
  58. package/docs/content/Buttons.md +56 -0
  59. package/docs/content/CircleBadge.md +45 -0
  60. package/docs/content/CircleOcticon.md +18 -0
  61. package/docs/content/CounterLabel.md +32 -0
  62. package/docs/content/Details.md +105 -0
  63. package/docs/content/Dialog.md +108 -0
  64. package/docs/content/Dialog2.mdx +179 -0
  65. package/docs/content/Dropdown.md +72 -0
  66. package/docs/content/DropdownMenu.mdx +49 -0
  67. package/docs/content/FilterList.md +44 -0
  68. package/docs/content/FilteredSearch.md +39 -0
  69. package/docs/content/Flash.md +44 -0
  70. package/docs/content/Flex.md +58 -0
  71. package/docs/content/FormGroup.md +46 -0
  72. package/docs/content/Grid.md +59 -0
  73. package/docs/content/Header.md +79 -0
  74. package/docs/content/Heading.md +22 -0
  75. package/docs/content/Label.md +42 -0
  76. package/docs/content/LabelGroup.md +31 -0
  77. package/docs/content/Link.md +37 -0
  78. package/docs/content/Overlay.mdx +94 -0
  79. package/docs/content/Pagehead.md +27 -0
  80. package/docs/content/Pagination.md +187 -0
  81. package/docs/content/PointerBox.md +81 -0
  82. package/docs/content/Popover.md +137 -0
  83. package/docs/content/Portal.mdx +78 -0
  84. package/docs/content/Position.md +100 -0
  85. package/docs/content/ProgressBar.mdx +29 -0
  86. package/docs/content/SelectMenu.md +435 -0
  87. package/docs/content/SelectPanel.mdx +67 -0
  88. package/docs/content/SideNav.md +179 -0
  89. package/docs/content/Spinner.mdx +32 -0
  90. package/docs/content/StateLabel.md +35 -0
  91. package/docs/content/StyledOcticon.md +36 -0
  92. package/docs/content/SubNav.md +102 -0
  93. package/docs/content/TabNav.md +50 -0
  94. package/docs/content/Text.md +31 -0
  95. package/docs/content/TextInput.md +34 -0
  96. package/docs/content/Timeline.md +138 -0
  97. package/docs/content/Tooltip.md +41 -0
  98. package/docs/content/Truncate.md +64 -0
  99. package/docs/content/UnderlineNav.md +53 -0
  100. package/docs/content/anchoredPosition.mdx +163 -0
  101. package/docs/content/core-concepts.md +70 -0
  102. package/docs/content/focusTrap.mdx +103 -0
  103. package/docs/content/focusZone.mdx +145 -0
  104. package/docs/content/getting-started.md +138 -0
  105. package/docs/content/index.md +33 -0
  106. package/docs/content/linting.md +35 -0
  107. package/docs/content/overriding-styles.mdx +81 -0
  108. package/docs/content/philosophy.md +23 -0
  109. package/docs/content/primer-theme.md +89 -0
  110. package/docs/content/ssr.mdx +43 -0
  111. package/docs/content/system-props.mdx +37 -0
  112. package/docs/content/theme-reference.md +16 -0
  113. package/docs/content/theming.md +249 -0
  114. package/docs/content/useOnEscapePress.mdx +56 -0
  115. package/docs/content/useOnOutsideClick.mdx +57 -0
  116. package/docs/content/useOpenAndCloseFocus.mdx +49 -0
  117. package/docs/content/useOverlay.mdx +62 -0
  118. package/docs/content/useSafeTimeout.mdx +32 -0
  119. package/docs/gatsby-config.js +30 -0
  120. package/docs/gatsby-node.js +101 -0
  121. package/docs/package-lock.json +20979 -0
  122. package/docs/package.json +36 -0
  123. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +21 -0
  124. package/docs/src/@primer/gatsby-theme-doctocat/components/live-code.js +84 -0
  125. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +39 -0
  126. package/docs/src/@primer/gatsby-theme-doctocat/components/nav-dropdown.js +48 -0
  127. package/docs/src/@primer/gatsby-theme-doctocat/components/wrap-page-element.js +25 -0
  128. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +54 -0
  129. package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +127 -0
  130. package/docs/src/@primer/gatsby-theme-doctocat/primer-components-hero.svg +1411 -0
  131. package/docs/src/props.js +77 -0
  132. package/jest.config.js +13 -0
  133. package/lib/ActionList/Item.js +1 -1
  134. package/lib/Breadcrumbs.d.ts +40 -0
  135. package/lib/{Breadcrumb.js → Breadcrumbs.js} +31 -21
  136. package/lib/__tests__/ActionList.d.ts +1 -0
  137. package/lib/__tests__/ActionList.js +64 -0
  138. package/lib/__tests__/ActionMenu.d.ts +1 -0
  139. package/lib/__tests__/ActionMenu.js +151 -0
  140. package/lib/__tests__/AnchoredOverlay.d.ts +1 -0
  141. package/lib/__tests__/AnchoredOverlay.js +160 -0
  142. package/lib/__tests__/Avatar.d.ts +1 -0
  143. package/lib/__tests__/Avatar.js +67 -0
  144. package/lib/__tests__/AvatarStack.d.ts +1 -0
  145. package/lib/__tests__/AvatarStack.js +68 -0
  146. package/lib/__tests__/BorderBox.d.ts +1 -0
  147. package/lib/__tests__/BorderBox.js +58 -0
  148. package/lib/__tests__/Box.d.ts +1 -0
  149. package/lib/__tests__/Box.js +78 -0
  150. package/lib/__tests__/BranchName.d.ts +1 -0
  151. package/lib/__tests__/BranchName.js +36 -0
  152. package/lib/__tests__/Breadcrumbs.d.ts +1 -0
  153. package/lib/__tests__/Breadcrumbs.js +37 -0
  154. package/lib/__tests__/BreadcrumbsItem.d.ts +1 -0
  155. package/lib/__tests__/BreadcrumbsItem.js +49 -0
  156. package/lib/__tests__/Button.d.ts +1 -0
  157. package/lib/__tests__/Button.js +143 -0
  158. package/lib/__tests__/Caret.d.ts +1 -0
  159. package/lib/__tests__/Caret.js +52 -0
  160. package/lib/__tests__/CircleBadge.d.ts +1 -0
  161. package/lib/__tests__/CircleBadge.js +83 -0
  162. package/lib/__tests__/CircleOcticon.d.ts +1 -0
  163. package/lib/__tests__/CircleOcticon.js +71 -0
  164. package/lib/__tests__/CounterLabel.d.ts +1 -0
  165. package/lib/__tests__/CounterLabel.js +58 -0
  166. package/lib/__tests__/Details.d.ts +1 -0
  167. package/lib/__tests__/Details.js +117 -0
  168. package/lib/__tests__/Dialog.d.ts +1 -0
  169. package/lib/__tests__/Dialog.js +184 -0
  170. package/lib/__tests__/Dropdown.d.ts +1 -0
  171. package/lib/__tests__/Dropdown.js +63 -0
  172. package/lib/__tests__/DropdownMenu.d.ts +1 -0
  173. package/lib/__tests__/DropdownMenu.js +150 -0
  174. package/lib/__tests__/FilterList.d.ts +1 -0
  175. package/lib/__tests__/FilterList.js +36 -0
  176. package/lib/__tests__/FilterListItem.d.ts +1 -0
  177. package/lib/__tests__/FilterListItem.js +46 -0
  178. package/lib/__tests__/FilteredSearch.d.ts +1 -0
  179. package/lib/__tests__/FilteredSearch.js +36 -0
  180. package/lib/__tests__/Flash.d.ts +1 -0
  181. package/lib/__tests__/Flash.js +62 -0
  182. package/lib/__tests__/Flex.d.ts +1 -0
  183. package/lib/__tests__/Flex.js +74 -0
  184. package/lib/__tests__/FormGroup.d.ts +1 -0
  185. package/lib/__tests__/FormGroup.js +54 -0
  186. package/lib/__tests__/Grid.d.ts +1 -0
  187. package/lib/__tests__/Grid.js +104 -0
  188. package/lib/__tests__/Header.d.ts +1 -0
  189. package/lib/__tests__/Header.js +58 -0
  190. package/lib/__tests__/Heading.d.ts +1 -0
  191. package/lib/__tests__/Heading.js +109 -0
  192. package/lib/__tests__/Label.d.ts +1 -0
  193. package/lib/__tests__/Label.js +46 -0
  194. package/lib/__tests__/LabelGroup.d.ts +1 -0
  195. package/lib/__tests__/LabelGroup.js +38 -0
  196. package/lib/__tests__/Link.d.ts +1 -0
  197. package/lib/__tests__/Link.js +70 -0
  198. package/lib/__tests__/Overlay.d.ts +1 -0
  199. package/lib/__tests__/Overlay.js +145 -0
  200. package/lib/__tests__/Pagehead.d.ts +1 -0
  201. package/lib/__tests__/Pagehead.js +37 -0
  202. package/lib/__tests__/Pagination/Pagination.d.ts +1 -0
  203. package/lib/__tests__/Pagination/Pagination.js +47 -0
  204. package/lib/__tests__/Pagination/PaginationModel.d.ts +1 -0
  205. package/lib/__tests__/Pagination/PaginationModel.js +186 -0
  206. package/lib/__tests__/PointerBox.d.ts +1 -0
  207. package/lib/__tests__/PointerBox.js +46 -0
  208. package/lib/__tests__/Popover.d.ts +1 -0
  209. package/lib/__tests__/Popover.js +66 -0
  210. package/lib/__tests__/Portal.d.ts +1 -0
  211. package/lib/__tests__/Portal.js +124 -0
  212. package/lib/__tests__/Position.d.ts +1 -0
  213. package/lib/__tests__/Position.js +143 -0
  214. package/lib/__tests__/ProgressBar.d.ts +1 -0
  215. package/lib/__tests__/ProgressBar.js +68 -0
  216. package/lib/__tests__/SelectMenu.d.ts +1 -0
  217. package/lib/__tests__/SelectMenu.js +155 -0
  218. package/lib/__tests__/SelectPanel.d.ts +1 -0
  219. package/lib/__tests__/SelectPanel.js +80 -0
  220. package/lib/__tests__/SideNav.d.ts +1 -0
  221. package/lib/__tests__/SideNav.js +71 -0
  222. package/lib/__tests__/Spinner.d.ts +1 -0
  223. package/lib/__tests__/Spinner.js +53 -0
  224. package/lib/__tests__/StateLabel.d.ts +1 -0
  225. package/lib/__tests__/StateLabel.js +71 -0
  226. package/lib/__tests__/StyledOcticon.d.ts +1 -0
  227. package/lib/__tests__/StyledOcticon.js +40 -0
  228. package/lib/__tests__/SubNav.d.ts +1 -0
  229. package/lib/__tests__/SubNav.js +62 -0
  230. package/lib/__tests__/SubNavLink.d.ts +1 -0
  231. package/lib/__tests__/SubNavLink.js +49 -0
  232. package/lib/__tests__/TabNav.d.ts +1 -0
  233. package/lib/__tests__/TabNav.js +49 -0
  234. package/lib/__tests__/Text.d.ts +1 -0
  235. package/lib/__tests__/Text.js +105 -0
  236. package/lib/__tests__/TextInput.d.ts +1 -0
  237. package/lib/__tests__/TextInput.js +78 -0
  238. package/lib/__tests__/ThemeProvider.d.ts +1 -0
  239. package/lib/__tests__/ThemeProvider.js +444 -0
  240. package/lib/__tests__/Timeline.d.ts +1 -0
  241. package/lib/__tests__/Timeline.js +75 -0
  242. package/lib/__tests__/Tooltip.d.ts +1 -0
  243. package/lib/__tests__/Tooltip.js +69 -0
  244. package/lib/__tests__/Truncate.d.ts +1 -0
  245. package/lib/__tests__/Truncate.js +63 -0
  246. package/lib/__tests__/UnderlineNav.d.ts +1 -0
  247. package/lib/__tests__/UnderlineNav.js +72 -0
  248. package/lib/__tests__/UnderlineNavLink.d.ts +1 -0
  249. package/lib/__tests__/UnderlineNavLink.js +51 -0
  250. package/lib/__tests__/behaviors/anchoredPosition.d.ts +1 -0
  251. package/lib/__tests__/behaviors/anchoredPosition.js +390 -0
  252. package/lib/__tests__/behaviors/focusTrap.d.ts +1 -0
  253. package/lib/__tests__/behaviors/focusTrap.js +234 -0
  254. package/lib/__tests__/behaviors/focusZone.d.ts +1 -0
  255. package/lib/__tests__/behaviors/focusZone.js +570 -0
  256. package/lib/__tests__/behaviors/iterateFocusableElements.d.ts +1 -0
  257. package/lib/__tests__/behaviors/iterateFocusableElements.js +55 -0
  258. package/lib/__tests__/filterObject.d.ts +1 -0
  259. package/lib/__tests__/filterObject.js +30 -0
  260. package/lib/__tests__/hooks/useAnchoredPosition.d.ts +1 -0
  261. package/lib/__tests__/hooks/useAnchoredPosition.js +54 -0
  262. package/lib/__tests__/hooks/useOnEscapePress.d.ts +1 -0
  263. package/lib/__tests__/hooks/useOnEscapePress.js +32 -0
  264. package/lib/__tests__/hooks/useOnOutsideClick.d.ts +1 -0
  265. package/lib/__tests__/hooks/useOnOutsideClick.js +87 -0
  266. package/lib/__tests__/hooks/useOpenAndCloseFocus.d.ts +1 -0
  267. package/lib/__tests__/hooks/useOpenAndCloseFocus.js +60 -0
  268. package/lib/__tests__/hooks/useProvidedStateOrCreate.d.ts +1 -0
  269. package/lib/__tests__/hooks/useProvidedStateOrCreate.js +45 -0
  270. package/lib/__tests__/theme.d.ts +1 -0
  271. package/lib/__tests__/theme.js +36 -0
  272. package/lib/__tests__/themeGet.d.ts +1 -0
  273. package/lib/__tests__/themeGet.js +25 -0
  274. package/lib/__tests__/useSafeTimeout.d.ts +1 -0
  275. package/lib/__tests__/useSafeTimeout.js +45 -0
  276. package/lib/index.d.ts +2 -2
  277. package/lib/index.js +8 -2
  278. package/lib/stories/ActionList.stories.js +382 -0
  279. package/lib/stories/ActionMenu.stories.js +338 -0
  280. package/lib/stories/AnchoredOverlay.stories.js +127 -0
  281. package/lib/stories/AvatarStack.stories.js +49 -0
  282. package/lib/stories/Button.stories.js +114 -0
  283. package/lib/stories/ConfirmationDialog.stories.js +111 -0
  284. package/lib/stories/Dialog.stories.js +265 -0
  285. package/lib/stories/DropdownMenu.stories.js +122 -0
  286. package/lib/stories/Overlay.stories.js +185 -0
  287. package/lib/stories/Portal.stories.js +104 -0
  288. package/lib/stories/SelectPanel.stories.js +342 -0
  289. package/lib/stories/ThemeProvider.stories.js +102 -0
  290. package/lib/stories/useAnchoredPosition.stories.js +351 -0
  291. package/lib/stories/useFocusTrap.stories.js +356 -0
  292. package/lib/stories/useFocusZone.stories.js +599 -0
  293. package/lib/utils/testing.d.ts +0 -1
  294. package/lib-esm/ActionList/Item.js +1 -1
  295. package/lib-esm/Breadcrumbs.d.ts +40 -0
  296. package/lib-esm/{Breadcrumb.js → Breadcrumbs.js} +28 -19
  297. package/lib-esm/__tests__/ActionList.d.ts +1 -0
  298. package/lib-esm/__tests__/ActionList.js +52 -0
  299. package/lib-esm/__tests__/ActionMenu.d.ts +1 -0
  300. package/lib-esm/__tests__/ActionMenu.js +139 -0
  301. package/lib-esm/__tests__/AnchoredOverlay.d.ts +1 -0
  302. package/lib-esm/__tests__/AnchoredOverlay.js +134 -0
  303. package/lib-esm/__tests__/Avatar.d.ts +1 -0
  304. package/lib-esm/__tests__/Avatar.js +56 -0
  305. package/lib-esm/__tests__/AvatarStack.d.ts +1 -0
  306. package/lib-esm/__tests__/AvatarStack.js +55 -0
  307. package/lib-esm/__tests__/BorderBox.d.ts +1 -0
  308. package/lib-esm/__tests__/BorderBox.js +47 -0
  309. package/lib-esm/__tests__/Box.d.ts +1 -0
  310. package/lib-esm/__tests__/Box.js +67 -0
  311. package/lib-esm/__tests__/BranchName.d.ts +1 -0
  312. package/lib-esm/__tests__/BranchName.js +26 -0
  313. package/lib-esm/__tests__/Breadcrumbs.d.ts +1 -0
  314. package/lib-esm/__tests__/Breadcrumbs.js +27 -0
  315. package/lib-esm/__tests__/BreadcrumbsItem.d.ts +1 -0
  316. package/lib-esm/__tests__/BreadcrumbsItem.js +39 -0
  317. package/lib-esm/__tests__/Button.d.ts +1 -0
  318. package/lib-esm/__tests__/Button.js +133 -0
  319. package/lib-esm/__tests__/Caret.d.ts +1 -0
  320. package/lib-esm/__tests__/Caret.js +42 -0
  321. package/lib-esm/__tests__/CircleBadge.d.ts +1 -0
  322. package/lib-esm/__tests__/CircleBadge.js +70 -0
  323. package/lib-esm/__tests__/CircleOcticon.d.ts +1 -0
  324. package/lib-esm/__tests__/CircleOcticon.js +59 -0
  325. package/lib-esm/__tests__/CounterLabel.d.ts +1 -0
  326. package/lib-esm/__tests__/CounterLabel.js +47 -0
  327. package/lib-esm/__tests__/Details.d.ts +1 -0
  328. package/lib-esm/__tests__/Details.js +107 -0
  329. package/lib-esm/__tests__/Dialog.d.ts +1 -0
  330. package/lib-esm/__tests__/Dialog.js +171 -0
  331. package/lib-esm/__tests__/Dropdown.d.ts +1 -0
  332. package/lib-esm/__tests__/Dropdown.js +53 -0
  333. package/lib-esm/__tests__/DropdownMenu.d.ts +1 -0
  334. package/lib-esm/__tests__/DropdownMenu.js +137 -0
  335. package/lib-esm/__tests__/FilterList.d.ts +1 -0
  336. package/lib-esm/__tests__/FilterList.js +26 -0
  337. package/lib-esm/__tests__/FilterListItem.d.ts +1 -0
  338. package/lib-esm/__tests__/FilterListItem.js +36 -0
  339. package/lib-esm/__tests__/FilteredSearch.d.ts +1 -0
  340. package/lib-esm/__tests__/FilteredSearch.js +26 -0
  341. package/lib-esm/__tests__/Flash.d.ts +1 -0
  342. package/lib-esm/__tests__/Flash.js +51 -0
  343. package/lib-esm/__tests__/Flex.d.ts +1 -0
  344. package/lib-esm/__tests__/Flex.js +64 -0
  345. package/lib-esm/__tests__/FormGroup.d.ts +1 -0
  346. package/lib-esm/__tests__/FormGroup.js +44 -0
  347. package/lib-esm/__tests__/Grid.d.ts +1 -0
  348. package/lib-esm/__tests__/Grid.js +94 -0
  349. package/lib-esm/__tests__/Header.d.ts +1 -0
  350. package/lib-esm/__tests__/Header.js +48 -0
  351. package/lib-esm/__tests__/Heading.d.ts +1 -0
  352. package/lib-esm/__tests__/Heading.js +99 -0
  353. package/lib-esm/__tests__/Label.d.ts +1 -0
  354. package/lib-esm/__tests__/Label.js +36 -0
  355. package/lib-esm/__tests__/LabelGroup.d.ts +1 -0
  356. package/lib-esm/__tests__/LabelGroup.js +26 -0
  357. package/lib-esm/__tests__/Link.d.ts +1 -0
  358. package/lib-esm/__tests__/Link.js +60 -0
  359. package/lib-esm/__tests__/Overlay.d.ts +1 -0
  360. package/lib-esm/__tests__/Overlay.js +123 -0
  361. package/lib-esm/__tests__/Pagehead.d.ts +1 -0
  362. package/lib-esm/__tests__/Pagehead.js +26 -0
  363. package/lib-esm/__tests__/Pagination/Pagination.d.ts +1 -0
  364. package/lib-esm/__tests__/Pagination/Pagination.js +35 -0
  365. package/lib-esm/__tests__/Pagination/PaginationModel.d.ts +1 -0
  366. package/lib-esm/__tests__/Pagination/PaginationModel.js +182 -0
  367. package/lib-esm/__tests__/PointerBox.d.ts +1 -0
  368. package/lib-esm/__tests__/PointerBox.js +36 -0
  369. package/lib-esm/__tests__/Popover.d.ts +1 -0
  370. package/lib-esm/__tests__/Popover.js +53 -0
  371. package/lib-esm/__tests__/Portal.d.ts +1 -0
  372. package/lib-esm/__tests__/Portal.js +104 -0
  373. package/lib-esm/__tests__/Position.d.ts +1 -0
  374. package/lib-esm/__tests__/Position.js +133 -0
  375. package/lib-esm/__tests__/ProgressBar.d.ts +1 -0
  376. package/lib-esm/__tests__/ProgressBar.js +58 -0
  377. package/lib-esm/__tests__/SelectMenu.d.ts +1 -0
  378. package/lib-esm/__tests__/SelectMenu.js +145 -0
  379. package/lib-esm/__tests__/SelectPanel.d.ts +1 -0
  380. package/lib-esm/__tests__/SelectPanel.js +65 -0
  381. package/lib-esm/__tests__/SideNav.d.ts +1 -0
  382. package/lib-esm/__tests__/SideNav.js +60 -0
  383. package/lib-esm/__tests__/Spinner.d.ts +1 -0
  384. package/lib-esm/__tests__/Spinner.js +43 -0
  385. package/lib-esm/__tests__/StateLabel.d.ts +1 -0
  386. package/lib-esm/__tests__/StateLabel.js +61 -0
  387. package/lib-esm/__tests__/StyledOcticon.d.ts +1 -0
  388. package/lib-esm/__tests__/StyledOcticon.js +29 -0
  389. package/lib-esm/__tests__/SubNav.d.ts +1 -0
  390. package/lib-esm/__tests__/SubNav.js +50 -0
  391. package/lib-esm/__tests__/SubNavLink.d.ts +1 -0
  392. package/lib-esm/__tests__/SubNavLink.js +39 -0
  393. package/lib-esm/__tests__/TabNav.d.ts +1 -0
  394. package/lib-esm/__tests__/TabNav.js +39 -0
  395. package/lib-esm/__tests__/Text.d.ts +1 -0
  396. package/lib-esm/__tests__/Text.js +93 -0
  397. package/lib-esm/__tests__/TextInput.d.ts +1 -0
  398. package/lib-esm/__tests__/TextInput.js +68 -0
  399. package/lib-esm/__tests__/ThemeProvider.d.ts +1 -0
  400. package/lib-esm/__tests__/ThemeProvider.js +408 -0
  401. package/lib-esm/__tests__/Timeline.d.ts +1 -0
  402. package/lib-esm/__tests__/Timeline.js +65 -0
  403. package/lib-esm/__tests__/Tooltip.d.ts +1 -0
  404. package/lib-esm/__tests__/Tooltip.js +59 -0
  405. package/lib-esm/__tests__/Truncate.d.ts +1 -0
  406. package/lib-esm/__tests__/Truncate.js +53 -0
  407. package/lib-esm/__tests__/UnderlineNav.d.ts +1 -0
  408. package/lib-esm/__tests__/UnderlineNav.js +60 -0
  409. package/lib-esm/__tests__/UnderlineNavLink.d.ts +1 -0
  410. package/lib-esm/__tests__/UnderlineNavLink.js +41 -0
  411. package/lib-esm/__tests__/behaviors/anchoredPosition.d.ts +1 -0
  412. package/lib-esm/__tests__/behaviors/anchoredPosition.js +388 -0
  413. package/lib-esm/__tests__/behaviors/focusTrap.d.ts +1 -0
  414. package/lib-esm/__tests__/behaviors/focusTrap.js +227 -0
  415. package/lib-esm/__tests__/behaviors/focusZone.d.ts +1 -0
  416. package/lib-esm/__tests__/behaviors/focusZone.js +487 -0
  417. package/lib-esm/__tests__/behaviors/iterateFocusableElements.d.ts +1 -0
  418. package/lib-esm/__tests__/behaviors/iterateFocusableElements.js +48 -0
  419. package/lib-esm/__tests__/filterObject.d.ts +1 -0
  420. package/lib-esm/__tests__/filterObject.js +27 -0
  421. package/lib-esm/__tests__/hooks/useAnchoredPosition.d.ts +1 -0
  422. package/lib-esm/__tests__/hooks/useAnchoredPosition.js +46 -0
  423. package/lib-esm/__tests__/hooks/useOnEscapePress.d.ts +1 -0
  424. package/lib-esm/__tests__/hooks/useOnEscapePress.js +23 -0
  425. package/lib-esm/__tests__/hooks/useOnOutsideClick.d.ts +1 -0
  426. package/lib-esm/__tests__/hooks/useOnOutsideClick.js +68 -0
  427. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.d.ts +1 -0
  428. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.js +52 -0
  429. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.d.ts +1 -0
  430. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.js +36 -0
  431. package/lib-esm/__tests__/theme.d.ts +1 -0
  432. package/lib-esm/__tests__/theme.js +33 -0
  433. package/lib-esm/__tests__/themeGet.d.ts +1 -0
  434. package/lib-esm/__tests__/themeGet.js +22 -0
  435. package/lib-esm/__tests__/useSafeTimeout.d.ts +1 -0
  436. package/lib-esm/__tests__/useSafeTimeout.js +39 -0
  437. package/lib-esm/index.d.ts +2 -2
  438. package/lib-esm/index.js +1 -1
  439. package/lib-esm/stories/ActionList.stories.js +334 -0
  440. package/lib-esm/stories/ActionMenu.stories.js +293 -0
  441. package/lib-esm/stories/AnchoredOverlay.stories.js +101 -0
  442. package/lib-esm/stories/AvatarStack.stories.js +32 -0
  443. package/lib-esm/stories/Button.stories.js +78 -0
  444. package/lib-esm/stories/ConfirmationDialog.stories.js +86 -0
  445. package/lib-esm/stories/Dialog.stories.js +240 -0
  446. package/lib-esm/stories/DropdownMenu.stories.js +94 -0
  447. package/lib-esm/stories/Overlay.stories.js +154 -0
  448. package/lib-esm/stories/Portal.stories.js +68 -0
  449. package/lib-esm/stories/SelectPanel.stories.js +284 -0
  450. package/lib-esm/stories/ThemeProvider.stories.js +83 -0
  451. package/lib-esm/stories/useAnchoredPosition.stories.js +313 -0
  452. package/lib-esm/stories/useFocusTrap.stories.js +309 -0
  453. package/lib-esm/stories/useFocusZone.stories.js +554 -0
  454. package/lib-esm/utils/testing.d.ts +0 -1
  455. package/migrating.md +250 -0
  456. package/now.json +17 -0
  457. package/package-lock.json +29072 -0
  458. package/package.json +10 -9
  459. package/rollup.config.js +36 -0
  460. package/script/build +19 -0
  461. package/script/build-storybook +10 -0
  462. package/script/setup +12 -0
  463. package/src/ActionList/Divider.tsx +25 -0
  464. package/src/ActionList/Group.tsx +45 -0
  465. package/src/ActionList/Header.tsx +74 -0
  466. package/src/ActionList/Item.tsx +460 -0
  467. package/src/ActionList/List.tsx +253 -0
  468. package/src/ActionList/index.ts +21 -0
  469. package/src/ActionMenu.tsx +106 -0
  470. package/src/AnchoredOverlay/AnchoredOverlay.tsx +180 -0
  471. package/src/AnchoredOverlay/index.ts +2 -0
  472. package/src/Avatar.tsx +46 -0
  473. package/src/AvatarPair.tsx +35 -0
  474. package/src/AvatarStack.tsx +161 -0
  475. package/src/BaseStyles.tsx +53 -0
  476. package/src/BorderBox.tsx +18 -0
  477. package/src/Box.tsx +54 -0
  478. package/src/BranchName.tsx +19 -0
  479. package/src/Breadcrumbs.tsx +101 -0
  480. package/src/Button/Button.tsx +40 -0
  481. package/src/Button/ButtonBase.tsx +43 -0
  482. package/src/Button/ButtonClose.tsx +40 -0
  483. package/src/Button/ButtonDanger.tsx +43 -0
  484. package/src/Button/ButtonGroup.tsx +55 -0
  485. package/src/Button/ButtonInvisible.tsx +27 -0
  486. package/src/Button/ButtonOutline.tsx +43 -0
  487. package/src/Button/ButtonPrimary.tsx +41 -0
  488. package/src/Button/ButtonStyles.tsx +36 -0
  489. package/src/Button/ButtonTableList.tsx +58 -0
  490. package/src/Button/index.ts +16 -0
  491. package/src/Caret.tsx +133 -0
  492. package/src/CircleBadge.tsx +55 -0
  493. package/src/CircleOcticon.tsx +37 -0
  494. package/src/CounterLabel.tsx +52 -0
  495. package/src/Details.tsx +23 -0
  496. package/src/Dialog/ConfirmationDialog.tsx +184 -0
  497. package/src/Dialog/Dialog.tsx +419 -0
  498. package/src/Dialog.tsx +149 -0
  499. package/src/Dropdown.tsx +158 -0
  500. package/src/DropdownMenu/DropdownButton.tsx +15 -0
  501. package/src/DropdownMenu/DropdownMenu.tsx +115 -0
  502. package/src/DropdownMenu/index.ts +4 -0
  503. package/src/DropdownStyles.ts +128 -0
  504. package/src/FilterList.tsx +81 -0
  505. package/src/FilteredActionList/FilteredActionList.tsx +152 -0
  506. package/src/FilteredActionList/index.ts +2 -0
  507. package/src/FilteredSearch.tsx +28 -0
  508. package/src/Flash.tsx +77 -0
  509. package/src/Flex.tsx +15 -0
  510. package/src/FormGroup.tsx +27 -0
  511. package/src/Grid.tsx +15 -0
  512. package/src/Header.tsx +84 -0
  513. package/src/Heading.tsx +21 -0
  514. package/src/Label.tsx +75 -0
  515. package/src/LabelGroup.tsx +18 -0
  516. package/src/Link.tsx +46 -0
  517. package/src/Overlay.tsx +194 -0
  518. package/src/Pagehead.tsx +17 -0
  519. package/src/Pagination/Pagination.tsx +214 -0
  520. package/src/Pagination/index.ts +4 -0
  521. package/src/Pagination/model.tsx +187 -0
  522. package/src/PointerBox.tsx +31 -0
  523. package/src/Popover.tsx +236 -0
  524. package/src/Portal/Portal.tsx +96 -0
  525. package/src/Portal/index.ts +5 -0
  526. package/src/Position.tsx +63 -0
  527. package/src/ProgressBar.tsx +52 -0
  528. package/src/SelectMenu/SelectMenu.tsx +125 -0
  529. package/src/SelectMenu/SelectMenuContext.tsx +9 -0
  530. package/src/SelectMenu/SelectMenuDivider.tsx +25 -0
  531. package/src/SelectMenu/SelectMenuFilter.tsx +51 -0
  532. package/src/SelectMenu/SelectMenuFooter.tsx +28 -0
  533. package/src/SelectMenu/SelectMenuHeader.tsx +50 -0
  534. package/src/SelectMenu/SelectMenuItem.tsx +137 -0
  535. package/src/SelectMenu/SelectMenuList.tsx +42 -0
  536. package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +24 -0
  537. package/src/SelectMenu/SelectMenuModal.tsx +121 -0
  538. package/src/SelectMenu/SelectMenuTab.tsx +88 -0
  539. package/src/SelectMenu/SelectMenuTabPanel.tsx +30 -0
  540. package/src/SelectMenu/SelectMenuTabs.tsx +44 -0
  541. package/src/SelectMenu/hooks/useKeyboardNav.js +90 -0
  542. package/src/SelectMenu/index.ts +15 -0
  543. package/src/SelectPanel/SelectPanel.tsx +172 -0
  544. package/src/SelectPanel/index.ts +2 -0
  545. package/src/SideNav.tsx +193 -0
  546. package/src/Spinner.tsx +59 -0
  547. package/src/StateLabel.tsx +110 -0
  548. package/src/StyledOcticon.tsx +24 -0
  549. package/src/SubNav.tsx +129 -0
  550. package/src/TabNav.tsx +77 -0
  551. package/src/Text.tsx +13 -0
  552. package/src/TextInput.tsx +183 -0
  553. package/src/ThemeProvider.tsx +176 -0
  554. package/src/Timeline.tsx +141 -0
  555. package/src/Tooltip.tsx +263 -0
  556. package/src/Truncate.tsx +36 -0
  557. package/src/UnderlineNav.tsx +110 -0
  558. package/src/__tests__/.eslintrc.json +11 -0
  559. package/src/__tests__/ActionList.tsx +47 -0
  560. package/src/__tests__/ActionMenu.tsx +136 -0
  561. package/src/__tests__/AnchoredOverlay.tsx +150 -0
  562. package/src/__tests__/Avatar.tsx +44 -0
  563. package/src/__tests__/AvatarStack.tsx +44 -0
  564. package/src/__tests__/BorderBox.tsx +43 -0
  565. package/src/__tests__/Box.tsx +42 -0
  566. package/src/__tests__/BranchName.tsx +26 -0
  567. package/src/__tests__/Breadcrumbs.tsx +27 -0
  568. package/src/__tests__/BreadcrumbsItem.tsx +31 -0
  569. package/src/__tests__/Button.tsx +128 -0
  570. package/src/__tests__/Caret.tsx +36 -0
  571. package/src/__tests__/CircleBadge.tsx +66 -0
  572. package/src/__tests__/CircleOcticon.tsx +50 -0
  573. package/src/__tests__/CounterLabel.tsx +50 -0
  574. package/src/__tests__/Details.tsx +115 -0
  575. package/src/__tests__/Dialog.tsx +155 -0
  576. package/src/__tests__/Dropdown.tsx +53 -0
  577. package/src/__tests__/DropdownMenu.tsx +136 -0
  578. package/src/__tests__/FilterList.tsx +26 -0
  579. package/src/__tests__/FilterListItem.tsx +31 -0
  580. package/src/__tests__/FilteredSearch.tsx +26 -0
  581. package/src/__tests__/Flash.tsx +45 -0
  582. package/src/__tests__/Flex.tsx +58 -0
  583. package/src/__tests__/FormGroup.tsx +38 -0
  584. package/src/__tests__/Grid.tsx +82 -0
  585. package/src/__tests__/Header.tsx +49 -0
  586. package/src/__tests__/Heading.tsx +91 -0
  587. package/src/__tests__/Label.tsx +34 -0
  588. package/src/__tests__/LabelGroup.tsx +30 -0
  589. package/src/__tests__/Link.tsx +47 -0
  590. package/src/__tests__/Overlay.tsx +103 -0
  591. package/src/__tests__/Pagehead.tsx +23 -0
  592. package/src/__tests__/Pagination/Pagination.tsx +30 -0
  593. package/src/__tests__/Pagination/PaginationModel.tsx +133 -0
  594. package/src/__tests__/Pagination/__snapshots__/Pagination.tsx.snap +184 -0
  595. package/src/__tests__/PointerBox.tsx +34 -0
  596. package/src/__tests__/Popover.tsx +68 -0
  597. package/src/__tests__/Portal.tsx +103 -0
  598. package/src/__tests__/Position.tsx +117 -0
  599. package/src/__tests__/ProgressBar.tsx +40 -0
  600. package/src/__tests__/SelectMenu.tsx +142 -0
  601. package/src/__tests__/SelectPanel.tsx +63 -0
  602. package/src/__tests__/SideNav.tsx +62 -0
  603. package/src/__tests__/Spinner.tsx +42 -0
  604. package/src/__tests__/StateLabel.tsx +48 -0
  605. package/src/__tests__/StyledOcticon.tsx +26 -0
  606. package/src/__tests__/SubNav.tsx +50 -0
  607. package/src/__tests__/SubNavLink.tsx +31 -0
  608. package/src/__tests__/TabNav.tsx +32 -0
  609. package/src/__tests__/Text.tsx +78 -0
  610. package/src/__tests__/TextInput.tsx +49 -0
  611. package/src/__tests__/ThemeProvider.tsx +441 -0
  612. package/src/__tests__/Timeline.tsx +58 -0
  613. package/src/__tests__/Tooltip.tsx +52 -0
  614. package/src/__tests__/Truncate.tsx +43 -0
  615. package/src/__tests__/UnderlineNav.tsx +58 -0
  616. package/src/__tests__/UnderlineNavLink.tsx +31 -0
  617. package/src/__tests__/__snapshots__/ActionList.tsx.snap +27 -0
  618. package/src/__tests__/__snapshots__/ActionMenu.tsx.snap +80 -0
  619. package/src/__tests__/__snapshots__/AnchoredOverlay.tsx.snap +332 -0
  620. package/src/__tests__/__snapshots__/Avatar.tsx.snap +19 -0
  621. package/src/__tests__/__snapshots__/AvatarStack.tsx.snap +377 -0
  622. package/src/__tests__/__snapshots__/BorderBox.tsx.snap +14 -0
  623. package/src/__tests__/__snapshots__/Box.tsx.snap +201 -0
  624. package/src/__tests__/__snapshots__/BranchName.tsx.snap +17 -0
  625. package/src/__tests__/__snapshots__/Breadcrumbs.tsx.snap +29 -0
  626. package/src/__tests__/__snapshots__/BreadcrumbsItem.tsx.snap +79 -0
  627. package/src/__tests__/__snapshots__/Button.tsx.snap +832 -0
  628. package/src/__tests__/__snapshots__/Caret.tsx.snap +373 -0
  629. package/src/__tests__/__snapshots__/CircleBadge.tsx.snap +141 -0
  630. package/src/__tests__/__snapshots__/CircleOcticon.tsx.snap +64 -0
  631. package/src/__tests__/__snapshots__/CounterLabel.tsx.snap +22 -0
  632. package/src/__tests__/__snapshots__/Details.tsx.snap +15 -0
  633. package/src/__tests__/__snapshots__/Dialog.tsx.snap +200 -0
  634. package/src/__tests__/__snapshots__/Dropdown.tsx.snap +249 -0
  635. package/src/__tests__/__snapshots__/DropdownMenu.tsx.snap +106 -0
  636. package/src/__tests__/__snapshots__/FilterList.tsx.snap +13 -0
  637. package/src/__tests__/__snapshots__/FilterListItem.tsx.snap +80 -0
  638. package/src/__tests__/__snapshots__/FilteredSearch.tsx.snap +32 -0
  639. package/src/__tests__/__snapshots__/Flash.tsx.snap +32 -0
  640. package/src/__tests__/__snapshots__/Flex.tsx.snap +130 -0
  641. package/src/__tests__/__snapshots__/FormGroup.tsx.snap +25 -0
  642. package/src/__tests__/__snapshots__/Grid.tsx.snap +178 -0
  643. package/src/__tests__/__snapshots__/Header.tsx.snap +79 -0
  644. package/src/__tests__/__snapshots__/Heading.tsx.snap +13 -0
  645. package/src/__tests__/__snapshots__/Label.tsx.snap +74 -0
  646. package/src/__tests__/__snapshots__/LabelGroup.tsx.snap +15 -0
  647. package/src/__tests__/__snapshots__/Link.tsx.snap +213 -0
  648. package/src/__tests__/__snapshots__/Pagehead.tsx.snap +15 -0
  649. package/src/__tests__/__snapshots__/PointerBox.tsx.snap +174 -0
  650. package/src/__tests__/__snapshots__/Popover.tsx.snap +4687 -0
  651. package/src/__tests__/__snapshots__/Position.tsx.snap +44 -0
  652. package/src/__tests__/__snapshots__/ProgressBar.tsx.snap +53 -0
  653. package/src/__tests__/__snapshots__/SelectMenu.tsx.snap +469 -0
  654. package/src/__tests__/__snapshots__/SelectPanel.tsx.snap +123 -0
  655. package/src/__tests__/__snapshots__/SideNav.tsx.snap +143 -0
  656. package/src/__tests__/__snapshots__/Spinner.tsx.snap +33 -0
  657. package/src/__tests__/__snapshots__/StateLabel.tsx.snap +409 -0
  658. package/src/__tests__/__snapshots__/StyledOcticon.tsx.snap +25 -0
  659. package/src/__tests__/__snapshots__/SubNav.tsx.snap +44 -0
  660. package/src/__tests__/__snapshots__/SubNavLink.tsx.snap +199 -0
  661. package/src/__tests__/__snapshots__/TabNav.tsx.snap +58 -0
  662. package/src/__tests__/__snapshots__/Text.tsx.snap +7 -0
  663. package/src/__tests__/__snapshots__/TextInput.tsx.snap +440 -0
  664. package/src/__tests__/__snapshots__/ThemeProvider.tsx.snap +15 -0
  665. package/src/__tests__/__snapshots__/Timeline.tsx.snap +159 -0
  666. package/src/__tests__/__snapshots__/Tooltip.tsx.snap +227 -0
  667. package/src/__tests__/__snapshots__/Truncate.tsx.snap +17 -0
  668. package/src/__tests__/__snapshots__/UnderlineNav.tsx.snap +59 -0
  669. package/src/__tests__/__snapshots__/UnderlineNavLink.tsx.snap +130 -0
  670. package/src/__tests__/behaviors/anchoredPosition.ts +295 -0
  671. package/src/__tests__/behaviors/focusTrap.tsx +236 -0
  672. package/src/__tests__/behaviors/focusZone.tsx +549 -0
  673. package/src/__tests__/behaviors/iterateFocusableElements.tsx +61 -0
  674. package/src/__tests__/filterObject.ts +54 -0
  675. package/src/__tests__/hooks/useAnchoredPosition.tsx +31 -0
  676. package/src/__tests__/hooks/useOnEscapePress.tsx +16 -0
  677. package/src/__tests__/hooks/useOnOutsideClick.tsx +48 -0
  678. package/src/__tests__/hooks/useOpenAndCloseFocus.tsx +48 -0
  679. package/src/__tests__/hooks/useProvidedStateOrCreate.tsx +39 -0
  680. package/src/__tests__/theme.ts +41 -0
  681. package/src/__tests__/themeGet.ts +15 -0
  682. package/src/__tests__/useSafeTimeout.tsx +36 -0
  683. package/src/behaviors/anchoredPosition.ts +442 -0
  684. package/src/behaviors/focusTrap.ts +184 -0
  685. package/src/behaviors/focusZone.ts +713 -0
  686. package/src/constants.ts +62 -0
  687. package/src/hooks/index.ts +11 -0
  688. package/src/hooks/useAnchoredPosition.ts +53 -0
  689. package/src/hooks/useCombinedRefs.ts +40 -0
  690. package/src/hooks/useDetails.tsx +54 -0
  691. package/src/hooks/useDialog.ts +121 -0
  692. package/src/hooks/useFocusTrap.ts +80 -0
  693. package/src/hooks/useFocusZone.ts +64 -0
  694. package/src/hooks/useOnEscapePress.ts +63 -0
  695. package/src/hooks/useOnOutsideClick.tsx +82 -0
  696. package/src/hooks/useOpenAndCloseFocus.ts +27 -0
  697. package/src/hooks/useOverlay.tsx +32 -0
  698. package/src/hooks/useProvidedRefOrCreate.ts +14 -0
  699. package/src/hooks/useProvidedStateOrCreate.ts +27 -0
  700. package/src/hooks/useRenderForcingRef.ts +22 -0
  701. package/src/hooks/useResizeObserver.ts +11 -0
  702. package/src/hooks/useSafeTimeout.ts +38 -0
  703. package/src/hooks/useScrollFlash.ts +21 -0
  704. package/src/index.ts +165 -0
  705. package/src/polyfills/eventListenerSignal.ts +66 -0
  706. package/src/stories/ActionList.stories.tsx +364 -0
  707. package/src/stories/ActionMenu.stories.tsx +322 -0
  708. package/src/stories/AnchoredOverlay.stories.tsx +117 -0
  709. package/src/stories/AvatarStack.stories.tsx +37 -0
  710. package/src/stories/Button.stories.tsx +88 -0
  711. package/src/stories/ConfirmationDialog.stories.tsx +105 -0
  712. package/src/stories/Dialog.stories.tsx +240 -0
  713. package/src/stories/DropdownMenu.stories.tsx +84 -0
  714. package/src/stories/Overlay.stories.tsx +186 -0
  715. package/src/stories/Portal.stories.tsx +109 -0
  716. package/src/stories/SelectPanel.stories.tsx +300 -0
  717. package/src/stories/ThemeProvider.stories.tsx +104 -0
  718. package/src/stories/useAnchoredPosition.stories.tsx +320 -0
  719. package/src/stories/useFocusTrap.stories.tsx +400 -0
  720. package/src/stories/useFocusZone.stories.tsx +663 -0
  721. package/src/sx.ts +9 -0
  722. package/src/theme-preval.js +136 -0
  723. package/src/theme.ts +3 -0
  724. package/src/utils/deprecate.tsx +73 -0
  725. package/src/utils/isNumeric.tsx +4 -0
  726. package/src/utils/iterateFocusableElements.ts +121 -0
  727. package/src/utils/ssr.tsx +1 -0
  728. package/src/utils/test-deprecations.tsx +19 -0
  729. package/src/utils/test-helpers.tsx +7 -0
  730. package/src/utils/test-matchers.tsx +109 -0
  731. package/src/utils/testing.tsx +242 -0
  732. package/src/utils/theme.js +64 -0
  733. package/src/utils/types.ts +90 -0
  734. package/src/utils/uniqueId.ts +6 -0
  735. package/src/utils/userAgent.ts +7 -0
  736. package/stats.html +3279 -0
  737. package/tsconfig.build.json +7 -0
  738. package/tsconfig.json +20 -0
  739. package/lib/Breadcrumb.d.ts +0 -23
  740. package/lib-esm/Breadcrumb.d.ts +0 -23
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: Spinner
3
+ status: Alpha
4
+ description: Use spinners to let users know that content is being loaded.
5
+ componentId: spinner
6
+ source: https://github.com/primer/components/blob/main/src/Spinner.tsx
7
+ ---
8
+
9
+ import {Props} from '../src/props'
10
+ import {Spinner} from '@primer/components'
11
+
12
+ ```jsx live
13
+ <Spinner />
14
+ ```
15
+
16
+ ## Props
17
+
18
+ <Props of={Spinner} />
19
+
20
+ ## Examples
21
+
22
+ ### Small
23
+
24
+ ```jsx live
25
+ <Spinner size="small" />
26
+ ```
27
+
28
+ ### Large
29
+
30
+ ```jsx live
31
+ <Spinner size="large" />
32
+ ```
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: StateLabel
3
+ ---
4
+
5
+ Use StateLabel components to show the status of an issue or pull request.
6
+
7
+ ## Default example
8
+
9
+ ```jsx live
10
+ <>
11
+ <StateLabel status="issueOpened">Open</StateLabel>
12
+ <StateLabel status="issueClosed">Closed</StateLabel>
13
+ <StateLabel status="pullOpened">Open</StateLabel>
14
+ <StateLabel status="pullClosed">Closed</StateLabel>
15
+ <StateLabel status="pullMerged">Merged</StateLabel>
16
+ <StateLabel status="draft">Draft</StateLabel>
17
+ </>
18
+ ```
19
+
20
+ ## System props
21
+
22
+ <Note variant="warning">
23
+
24
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
25
+
26
+ </Note>
27
+
28
+ StateLabel components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
29
+
30
+ ## Component props
31
+
32
+ | Name | Type | Default | Description |
33
+ | :------ | :----- | :------: | :------------------------------------------------------------------------------------------------ |
34
+ | variant | String | 'normal' | a value of `small` or `normal` results in a smaller or larger version of the StateLabel. |
35
+ | status | String | | Can be one of `issueOpened`, `issueClosed`, `pullOpened`, `pullClosed`, `pullMerged`, or `draft`. |
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: StyledOcticon
3
+ tags: icon
4
+ ---
5
+
6
+ StyledOcticon renders an [Octicon](https://octicons.github.com) with common system props, including `color`, margin, and padding.
7
+
8
+ ## Default example
9
+
10
+ ```jsx live
11
+ <>
12
+ <StyledOcticon icon={CheckIcon} size={32} color="success.fg" mr={2} />
13
+ <StyledOcticon icon={XIcon} size={32} color="danger.fg" />
14
+ </>
15
+ ```
16
+
17
+ ## System props
18
+
19
+ <Note variant="warning">
20
+
21
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
22
+
23
+ </Note>
24
+
25
+ StyledOcticon components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
26
+
27
+ ## Component props
28
+
29
+ StyledOcticon passes all of its props except the common system props down to the [Octicon component](https://github.com/primer/octicons/tree/master/lib/octicons_react#usage), including:
30
+
31
+ | Name | Type | Default | Description |
32
+ | :------------ | :-------- | :-----------: | :----------------------------------------------------------------------------------------------------------- |
33
+ | ariaLabel | String | | Specifies the `aria-label` attribute, which is read verbatim by screen readers |
34
+ | icon | Component | | [Octicon component](https://github.com/primer/octicons/tree/master/lib/octicons_react) used in the component |
35
+ | size | Number | 16 | Sets the uniform `width` and `height` of the SVG element |
36
+ | verticalAlign | String | `text-bottom` | Sets the `vertical-align` CSS property |
@@ -0,0 +1,102 @@
1
+ ---
2
+ title: SubNav
3
+ ---
4
+
5
+ Use the SubNav component for navigation on a dashboard-type interface with another set of navigation components above it. This helps distinguish navigation hierarchy.
6
+
7
+ To use SubNav with [react-router](https://github.com/ReactTraining/react-router) or
8
+ [react-router-dom](https://www.npmjs.com/package/react-router-dom), pass
9
+ `as={NavLink}` and omit the `selected` prop.
10
+ This ensures that the NavLink gets `activeClassName='selected'`
11
+
12
+ **Attention:** Make sure to properly label your `SubNav` with an `aria-label` to provide context about the type of navigation contained in `SubNav`.
13
+
14
+ ## Default example
15
+
16
+ ```jsx live
17
+ <SubNav aria-label="Main">
18
+ <SubNav.Links>
19
+ <SubNav.Link href="#home" selected>
20
+ Home
21
+ </SubNav.Link>
22
+ <SubNav.Link href="#documentation">Documentation</SubNav.Link>
23
+ <SubNav.Link href="#support">Support</SubNav.Link>
24
+ </SubNav.Links>
25
+ </SubNav>
26
+ ```
27
+
28
+ ## SubNav with search example
29
+
30
+ ```jsx live
31
+ <SubNav aria-label="Main">
32
+ <SubNav.Links>
33
+ <SubNav.Link href="#home" selected>
34
+ Home
35
+ </SubNav.Link>
36
+ <SubNav.Link href="#documentation">Documentation</SubNav.Link>
37
+ <SubNav.Link href="#support">Support</SubNav.Link>
38
+ </SubNav.Links>
39
+
40
+ <TextInput type="search" icon={SearchIcon} sx={{width: 320}} />
41
+ </SubNav>
42
+ ```
43
+
44
+ ## SubNav with filtered search example
45
+
46
+ ```jsx live
47
+ <SubNav aria-label="Main">
48
+ <FilteredSearch>
49
+ <Dropdown>
50
+ <Dropdown.Button>Filter</Dropdown.Button>
51
+ <Dropdown.Menu direction="sw">
52
+ <Dropdown.Item>
53
+ <a href="#">Item 1</a>
54
+ </Dropdown.Item>
55
+ <Dropdown.Item>
56
+ <a href="#">Item 2</a>
57
+ </Dropdown.Item>
58
+ <Dropdown.Item>
59
+ <a href="#">Item 3</a>
60
+ </Dropdown.Item>
61
+ </Dropdown.Menu>
62
+ </Dropdown>
63
+ <TextInput type="search" icon={SearchIcon} width={320} />
64
+ </FilteredSearch>
65
+ <SubNav.Links>
66
+ <SubNav.Link href="#home" selected>
67
+ Home
68
+ </SubNav.Link>
69
+ <SubNav.Link href="#documentation">Documentation</SubNav.Link>
70
+ <SubNav.Link href="#support">Support</SubNav.Link>
71
+ </SubNav.Links>
72
+ </SubNav>
73
+ ```
74
+
75
+ ## System props
76
+
77
+ <Note variant="warning">
78
+
79
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
80
+
81
+ </Note>
82
+
83
+ SubNav and SubNav.Link components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
84
+
85
+ ## Component props
86
+
87
+ ### SubNav
88
+
89
+ | Prop name | Type | Description |
90
+ | :--------- | :------ | :------------------------------------------------------------------------------------- |
91
+ | actions | Node | Place another element, such as a button, to the opposite side of the navigation items. |
92
+ | align | String | Use `right` to have navigation items aligned right. |
93
+ | full | Boolean | Used to make navigation fill the width of the container. |
94
+ | aria-label | String | Used to set the `aria-label` on the top level `<nav>` element. |
95
+
96
+ ### SubNav.Link
97
+
98
+ | Prop name | Type | Description |
99
+ | :-------- | :------ | :----------------------------------------------- |
100
+ | as | String | sets the HTML tag for the component |
101
+ | href | String | URL to be used for the Link |
102
+ | selected | Boolean | Used to style the link as selected or unselected |
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: TabNav
3
+ ---
4
+
5
+ Use the TabNav component to style navigation with a tab-based selected state, typically used for navigation placed at the top of the page.
6
+
7
+ To use TabNav with [react-router](https://github.com/ReactTraining/react-router) or
8
+ [react-router-dom](https://www.npmjs.com/package/react-router-dom), pass
9
+ `as={NavLink}` and omit the `selected` prop.
10
+ This ensures that the NavLink gets `activeClassName='selected'`
11
+
12
+ **Attention:** Make sure to properly label your `TabNav` with an `aria-label` to provide context about the type of navigation contained in `TabNav`.
13
+
14
+ ## Default example
15
+
16
+ ```jsx live
17
+ <TabNav aria-label="Main">
18
+ <TabNav.Link href="#home" selected>
19
+ Home
20
+ </TabNav.Link>
21
+ <TabNav.Link href="#documentation">Documentation</TabNav.Link>
22
+ <TabNav.Link href="#support">Support</TabNav.Link>
23
+ </TabNav>
24
+ ```
25
+
26
+ ## System props
27
+
28
+ <Note variant="warning">
29
+
30
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
31
+
32
+ </Note>
33
+
34
+ TabNav and TabNav.Link components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
35
+
36
+ ## Component props
37
+
38
+ ### TabNav
39
+
40
+ | Prop name | Type | Description |
41
+ | :--------- | :----- | :------------------------------------------------------------- |
42
+ | aria-label | String | Used to set the `aria-label` on the top level `<nav>` element. |
43
+
44
+ ### TabNav.Link
45
+
46
+ | Prop name | Type | Description |
47
+ | :-------- | :------ | :----------------------------------------------- |
48
+ | as | String | sets the HTML tag for the component |
49
+ | href | String | URL to be used for the Link |
50
+ | selected | Boolean | Used to style the link as selected or unselected |
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Text
3
+ ---
4
+
5
+ The Text component is a wrapper component that will apply typography styles to the text inside.
6
+
7
+ ## Default example
8
+
9
+ ```jsx live
10
+ <>
11
+ <Text as='p' fontWeight="bold">bold</Text>
12
+ <Text as='p' color="danger.fg">danger color</Text>
13
+ <Text as='p' color="fg.onEmphasis" bg="neutral.emphasis" p={2}>inverse colors</Text>
14
+ </>
15
+ ```
16
+
17
+ ## System props
18
+
19
+ <Note variant="warning">
20
+
21
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
22
+
23
+ </Note>
24
+
25
+ Text components get `TYPOGRAPHY` and `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
26
+
27
+ ## Component props
28
+
29
+ | Name | Type | Default | Description |
30
+ | :--- | :----- | :-----: | :---------------------------------- |
31
+ | as | String | `span` | Sets the HTML tag for the component |
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: TextInput
3
+ ---
4
+
5
+ TextInput is a form component to add default styling to the native text input.
6
+
7
+ **Note:** Don't forget to set `aria-label` to make the TextInput accessible to screen reader users.
8
+
9
+ ## Default example
10
+
11
+ ```jsx live
12
+ <>
13
+ <TextInput aria-label="Zipcode" name="zipcode" placeholder="Zipcode" autoComplete="postal-code" />
14
+
15
+ <TextInput sx={{ml: 4}} aria-label="City" name="city" placeholder="City" contrast />
16
+
17
+ <TextInput sx={{ml: 4}} icon={SearchIcon} aria-label="Zipcode" name="zipcode" placeholder="Find user" autoComplete="postal-code" />
18
+ </>
19
+ ```
20
+
21
+ ## Component props
22
+
23
+ Native `<input>` attributes are forwarded to the underlying React `input` component and are not listed below.
24
+
25
+ | Name | Type | Default | Description |
26
+ | :--------- | :------------------------------------------------------------------------ | :-----: | :------------------------------------------------------------------------------------ |
27
+ | aria-label | String | | Required. Allows input to be accessible. |
28
+ | block | Boolean | | Adds `display: block` to element |
29
+ | contrast | Boolean | | Changes background color to a higher contrast color |
30
+ | variant | String | | Can be either `small` or `large`. Creates a smaller or larger input than the default. |
31
+ | width | String or Number | | Set the width of the input |
32
+ | maxWidth | String or Number or [Array](https://styled-system.com/guides/array-props) | | Set the maximum width of the input |
33
+ | minWidth | String or Number or [Array](https://styled-system.com/guides/array-props) | | Set the minimum width of the input |
34
+ | icon | Node (pass Octicon react component) | | Icon to be used inside of input. Positioned on the left edge. |
@@ -0,0 +1,138 @@
1
+ ---
2
+ title: Timeline
3
+ ---
4
+
5
+ The Timeline.Item component is used to display items on a vertical timeline, connected by Timeline.Badge elements.
6
+
7
+ ## Example with in-line links
8
+
9
+ ```jsx live
10
+ <Timeline>
11
+ <Timeline.Item>
12
+ <Timeline.Badge>
13
+ <StyledOcticon icon={FlameIcon} />
14
+ </Timeline.Badge>
15
+ <Timeline.Body>
16
+ <Link href="#" sx={{fontWeight: 'bold', color: "fg.default", mr: 1}} muted>
17
+ Monalisa
18
+ </Link>
19
+ created one <Link href="#" sx={{fontWeight: 'bold', color: "fg.default", mr: 1}} muted>
20
+ hot potato
21
+ </Link>
22
+ <Link href="#" color="fg.muted" muted>
23
+ Just now
24
+ </Link>
25
+ </Timeline.Body>
26
+ </Timeline.Item>
27
+ </Timeline>
28
+ ```
29
+
30
+ ## Default Color example
31
+
32
+ The default Timeline.Badge color is dark text on a light grey background.
33
+
34
+ ```jsx live
35
+ <Timeline>
36
+ <Timeline.Item>
37
+ <Timeline.Badge>
38
+ <StyledOcticon icon={FlameIcon} />
39
+ </Timeline.Badge>
40
+ <Timeline.Body>Default badge color</Timeline.Body>
41
+ </Timeline.Item>
42
+ </Timeline>
43
+ ```
44
+
45
+ ## Adding color to a Badge
46
+
47
+ To have color variants, use the `bg` prop on the `Timeline.Badge`. If an icon is being used, set the `color` prop
48
+ of the child `StyledOcticon` if necessary.
49
+
50
+ ```jsx live
51
+ <Timeline>
52
+ <Timeline.Item>
53
+ <Timeline.Badge sx={{bg: "danger.emphasis"}}>
54
+ <StyledOcticon icon={FlameIcon} sx={{color: "fg.onEmphasis"}} />
55
+ </Timeline.Badge>
56
+ <Timeline.Body>Background used when closed events occur</Timeline.Body>
57
+ </Timeline.Item>
58
+ <Timeline.Item>
59
+ <Timeline.Badge sx={{bg: "danger.emphasis"}}>
60
+ <StyledOcticon icon={FlameIcon} color="fg.onEmphasis" />
61
+ </Timeline.Badge>
62
+ <Timeline.Body>Background when opened or passed events occur</Timeline.Body>
63
+ </Timeline.Item>
64
+ <Timeline.Item>
65
+ <Timeline.Badge sx={{bg: "danger.emphasis"}}>
66
+ <StyledOcticon icon={FlameIcon} sx={{color: "fg.onEmphasis"}} />
67
+ </Timeline.Badge>
68
+ <Timeline.Body>Background used when pull requests are merged</Timeline.Body>
69
+ </Timeline.Item>
70
+ </Timeline>
71
+ ```
72
+
73
+ ## Condensed items
74
+
75
+ Timeline has a condensed prop that will reduce the vertical padding and remove the background from the badge item. These are most commonly used in commits. To condense a single item, remove the top or bottom padding with the `pt={0}` or `pb={0}` prop.
76
+
77
+ ```jsx live
78
+ <Timeline>
79
+ <Timeline.Item condensed>
80
+ <Timeline.Badge>
81
+ <StyledOcticon icon={GitCommitIcon} />
82
+ </Timeline.Badge>
83
+ <Timeline.Body>This is the message of a condensed TimelineItem</Timeline.Body>
84
+ </Timeline.Item>
85
+ <Timeline.Item condensed>
86
+ <Timeline.Badge>
87
+ <StyledOcticon icon={GitCommitIcon} />
88
+ </Timeline.Badge>
89
+ <Timeline.Body>This is the message of a condensed TimelineItem</Timeline.Body>
90
+ </Timeline.Item>
91
+ </Timeline>
92
+ ```
93
+
94
+ ## Timeline Break
95
+
96
+ To create a visual break in the timeline, use Timeline.Break. This adds a horizontal bar across the timeline to show that something has disrupted it. Usually this happens when a close or merged event occurs.
97
+
98
+ ```jsx live
99
+ <Timeline>
100
+ <Timeline.Item>
101
+ <Timeline.Badge sx={{bg: "danger.emphasis"}}>
102
+ <StyledOcticon icon={FlameIcon} color="fg.onEmphasis" />
103
+ </Timeline.Badge>
104
+ <Timeline.Body>Background used when closed events occur</Timeline.Body>
105
+ </Timeline.Item>
106
+ <Timeline.Break />
107
+ <Timeline.Item>
108
+ <Timeline.Badge sx={{bg: "success.emphasis"}}>
109
+ <StyledOcticon icon={FlameIcon} sx={{color: "fg.onEmphasis"}} />
110
+ </Timeline.Badge>
111
+ <Timeline.Body>Background when opened or passed events occur</Timeline.Body>
112
+ </Timeline.Item>
113
+ </Timeline>
114
+ ```
115
+
116
+ ## System props
117
+
118
+ <Note variant="warning">
119
+
120
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
121
+
122
+ </Note>
123
+
124
+ Timeline and Timeline.Item components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
125
+
126
+ ## Component props
127
+
128
+ ### Timeline
129
+
130
+ | Prop name | Type | Description |
131
+ | :---------- | :------ | :-------------------------------------------------------------------------------- |
132
+ | clipSidebar | Boolean | Hides the sidebar above the first Timeline.Item and below the last Timeline.Item. |
133
+
134
+ ### Timeline.Item
135
+
136
+ | Prop name | Type | Description |
137
+ | :-------- | :------ | :-------------------------------------------------------------------- |
138
+ | condensed | Boolean | Reduces vertical padding and removes background from an item's badge. |
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: Tooltip
3
+ ---
4
+
5
+ The Tooltip component adds a tooltip to add context to elements on the page.
6
+
7
+ **_⚠️ Usage warning! ⚠️_**
8
+
9
+ Tooltips as a UI pattern should be our last resort for conveying information because it is hidden by default and often with zero or little visual indicator of its existence.
10
+
11
+ Before adding a tooltip, please consider: Is this information essential and necessary? Can the UI be made clearer? Can the information be shown on the page by default?
12
+
13
+ **Attention:** we use aria-label for tooltip contents, because it is crucial that they are accessible to screen reader users. However, aria-label replaces the text content of an element in screen readers, so only use Tooltip on elements with no existing text content, or consider using `title` for supplemental information.
14
+
15
+ ## Default example
16
+
17
+ ```jsx live
18
+ <Box borderWidth="1px" borderStyle="solid" borderColor="border.default" borderRadius={2} p={3}>
19
+ <Tooltip aria-label="Hello, Tooltip!">Text with a tooltip</Tooltip>
20
+ </Box>
21
+ ```
22
+
23
+ ## System props
24
+
25
+ <Note variant="warning">
26
+
27
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
28
+
29
+ </Note>
30
+
31
+ Tooltip components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
32
+
33
+ ## Component props
34
+
35
+ | Name | Type | Default | Description |
36
+ | :--------- | :------ | :-----: | :------------------------------------------------------- | --------------------------------------------------------- |
37
+ | align | String | | Can be either `left` or `right`. |
38
+ | direction | String | | Can be one of `n`, `ne`, `e`, `se`, `s`, `sw`, `w`, `nw` | Sets where the tooltip renders in relation to the target. |
39
+ | noDelay | Boolean | | When set to `true`, tooltip appears without any delay |
40
+ | aria-label | String | | Text used in `aria-label` (for accessibility). |
41
+ | wrap | Boolean | | Use `true` to allow text within tooltip to wrap. |
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: Truncate
3
+ ---
4
+
5
+ The Truncate component will shorten text with an ellipsis. Always add a `title` attribute to the truncated element so the full text remains accessible.
6
+
7
+ ## Default example
8
+
9
+ Truncate will prevent text that overflows from wrapping. The default max-width is 125px.
10
+
11
+ ```jsx live
12
+ <Truncate title="Some text with a branch-name-that-is-really-long">
13
+ Some text with a branch-name-that-is-really-long
14
+ </Truncate>
15
+ ```
16
+
17
+ ## Custom max-width example
18
+
19
+ You can override the maximum width of the truncated text with the `maxWidth` prop.
20
+
21
+ ```jsx live
22
+ <Truncate maxWidth={250} title="Some text with a branch-name-that-is-really-long">
23
+ Some text with a branch-name-that-is-really-long
24
+ </Truncate>
25
+ ```
26
+
27
+ ## Inline example
28
+
29
+ You can use the `inline` boolean prop for inline (or inline-block) elements with a fixed maximum width (default: 125px).
30
+
31
+ ```jsx live
32
+ <Truncate as="strong" inline title="branch-name-that-is-really-long">
33
+ Some text with a branch-name-that-is-really-long
34
+ </Truncate>
35
+ ```
36
+
37
+ ## Expandable example
38
+
39
+ You can use the `expandable` boolean prop to display the truncated text on hover.
40
+
41
+ ```jsx live
42
+ <Truncate expandable title="Some text with a branch-name-that-is-really-long">
43
+ Some text with a branch-name-that-is-really-long
44
+ </Truncate>
45
+ ```
46
+
47
+ ## System props
48
+
49
+ <Note variant="warning">
50
+
51
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
52
+
53
+ </Note>
54
+
55
+ Truncate components get `TYPOGRAPHY` and `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
56
+
57
+ ## Component props
58
+
59
+ | Name | Type | Default | Description |
60
+ | :--------- | :------ | :-----: | :----------------------------------------------------------- |
61
+ | as | String | `div` | Sets the HTML tag for the component |
62
+ | maxWidth | Number | 125 | Sets the max-width of the text |
63
+ | inline | Boolean | false | displays text as inline block and vertical aligns to the top |
64
+ | expandable | Boolean | false | allows the truncated text to be displayed on hover |
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: UnderlineNav
3
+ ---
4
+
5
+ Use the UnderlineNav component to style navigation with a minimal underlined selected state, typically used for navigation placed at the top of the page.
6
+
7
+ To use UnderlineNav with [react-router](https://github.com/ReactTraining/react-router) or
8
+ [react-router-dom](https://www.npmjs.com/package/react-router-dom), pass
9
+ `as={NavLink}` and omit the `selected` prop.
10
+ This ensures that the NavLink gets `activeClassName='selected'`
11
+
12
+ **Attention:** Make sure to properly label your `UnderlineNav` with an `aria-label` to provide context about the type of navigation contained in `UnderlineNav`.
13
+
14
+ ## Default example
15
+
16
+ ```jsx live
17
+ <UnderlineNav aria-label="Main">
18
+ <UnderlineNav.Link href="#home" selected>
19
+ Home
20
+ </UnderlineNav.Link>
21
+ <UnderlineNav.Link href="#documentation">Documentation</UnderlineNav.Link>
22
+ <UnderlineNav.Link href="#support">Support</UnderlineNav.Link>
23
+ </UnderlineNav>
24
+ ```
25
+
26
+ ## System props
27
+
28
+ <Note variant="warning">
29
+
30
+ System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
31
+
32
+ </Note>
33
+
34
+ UnderlineNav and UnderlineNav.Link components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
35
+
36
+ ## Component props
37
+
38
+ ### UnderlineNav
39
+
40
+ | Prop name | Type | Description |
41
+ | :--------- | :------ | :------------------------------------------------------------------------------------- |
42
+ | actions | Node | Place another element, such as a button, to the opposite side of the navigation items. |
43
+ | align | String | Use `right` to have navigation items aligned right. |
44
+ | full | Boolean | Used to make navigation fill the width of the container. |
45
+ | aria-label | String | Used to set the `aria-label` on the top level `<nav>` element. |
46
+
47
+ ### UnderlineNav.Link
48
+
49
+ | Prop name | Type | Description |
50
+ | :-------- | :------ | :----------------------------------------------- |
51
+ | as | String | sets the HTML tag for the component |
52
+ | href | String | URL to be used for the Link |
53
+ | selected | Boolean | Used to style the link as selected or unselected |