@primer/components 31.0.0 → 31.0.2-rc.c7dafefb
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.
- package/.changeset/README.md +8 -0
- package/.changeset/config.json +10 -0
- package/.devcontainer/devcontainer.json +8 -0
- package/.eslintrc.json +137 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
- package/.github/ISSUE_TEMPLATE/new_component_proposal_template.md +41 -0
- package/.github/dependabot.yml +18 -0
- package/.github/pull_request_template.md +18 -0
- package/.github/workflows/check_for_changeset.yml +25 -0
- package/.github/workflows/ci.yml +31 -0
- package/.github/workflows/deploy_preview.yml +47 -0
- package/.github/workflows/deploy_production.yml +70 -0
- package/.github/workflows/release.yml +35 -0
- package/.github/workflows/release_canary.yml +70 -0
- package/.github/workflows/release_candidate.yml +60 -0
- package/.github/workflows/size.yml +13 -0
- package/.github/workflows/stale.yml +26 -0
- package/.gitignore +10 -0
- package/.npmrc +4 -0
- package/.nvmrc +1 -0
- package/.storybook/main.js +11 -0
- package/.storybook/preview.js +113 -0
- package/.vscode/launch.json +21 -0
- package/.vscode/settings.json +13 -0
- package/@types/@styled-system/index.d.ts +0 -0
- package/@types/@styled-system/prop-types/index.d.ts +1 -0
- package/@types/@styled-system/props/index.d.ts +1 -0
- package/@types/jest-styled-components/index.d.ts +1 -0
- package/CHANGELOG.md +14 -0
- package/CODEOWNERS +2 -0
- package/babel-defines.js +13 -0
- package/babel.config.js +39 -0
- package/contributor-docs/CODE_OF_CONDUCT.md +76 -0
- package/contributor-docs/CONTRIBUTING.md +274 -0
- package/contributor-docs/adrs/adr-001-typescript.md +23 -0
- package/contributor-docs/adrs/adr-002-behavior-isolation.md +108 -0
- package/contributor-docs/adrs/adr-003-prop-norms.md +72 -0
- package/contributor-docs/behaviors.md +132 -0
- package/contributor-docs/component-contents-api-patterns.md +316 -0
- package/contributor-docs/principles.md +39 -0
- package/dist/browser.esm.js +46 -43
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +45 -42
- package/dist/browser.umd.js.map +1 -1
- package/docs/.eslintrc +0 -0
- package/docs/.gitignore +91 -0
- package/docs/components/PropsList.js +5 -0
- package/docs/components/State.js +9 -0
- package/docs/components/constants.js +34 -0
- package/docs/components/index.js +2 -0
- package/docs/content/ActionList.mdx +99 -0
- package/docs/content/ActionMenu.mdx +80 -0
- package/docs/content/AnchoredOverlay.mdx +37 -0
- package/docs/content/Autocomplete.mdx +657 -0
- package/docs/content/Avatar.mdx +33 -0
- package/docs/content/AvatarStack.mdx +37 -0
- package/docs/content/BorderBox.md +46 -0
- package/docs/content/Box.md +74 -0
- package/docs/content/BranchName.md +18 -0
- package/docs/content/Breadcrumbs.md +52 -0
- package/docs/content/Buttons.md +56 -0
- package/docs/content/CircleBadge.md +45 -0
- package/docs/content/CircleOcticon.md +18 -0
- package/docs/content/CounterLabel.md +32 -0
- package/docs/content/Details.md +105 -0
- package/docs/content/Dialog.md +108 -0
- package/docs/content/Dialog2.mdx +179 -0
- package/docs/content/Dropdown.md +72 -0
- package/docs/content/DropdownMenu.mdx +49 -0
- package/docs/content/FilterList.md +44 -0
- package/docs/content/FilteredSearch.md +39 -0
- package/docs/content/Flash.md +44 -0
- package/docs/content/Flex.md +58 -0
- package/docs/content/FormGroup.md +46 -0
- package/docs/content/Grid.md +59 -0
- package/docs/content/Header.md +79 -0
- package/docs/content/Heading.md +22 -0
- package/docs/content/Label.md +42 -0
- package/docs/content/LabelGroup.md +31 -0
- package/docs/content/Link.md +37 -0
- package/docs/content/Overlay.mdx +94 -0
- package/docs/content/Pagehead.md +27 -0
- package/docs/content/Pagination.md +187 -0
- package/docs/content/PointerBox.md +81 -0
- package/docs/content/Popover.md +137 -0
- package/docs/content/Portal.mdx +78 -0
- package/docs/content/Position.md +100 -0
- package/docs/content/ProgressBar.mdx +29 -0
- package/docs/content/SelectMenu.md +435 -0
- package/docs/content/SelectPanel.mdx +67 -0
- package/docs/content/SideNav.md +179 -0
- package/docs/content/Spinner.mdx +32 -0
- package/docs/content/StateLabel.md +35 -0
- package/docs/content/StyledOcticon.md +36 -0
- package/docs/content/SubNav.md +102 -0
- package/docs/content/TabNav.md +50 -0
- package/docs/content/Text.md +31 -0
- package/docs/content/TextInput.md +34 -0
- package/docs/content/TextInputTokens.mdx +89 -0
- package/docs/content/TextInputWithTokens.mdx +97 -0
- package/docs/content/Timeline.md +138 -0
- package/docs/content/Token.mdx +381 -0
- package/docs/content/Tooltip.md +41 -0
- package/docs/content/Truncate.md +64 -0
- package/docs/content/UnderlineNav.md +53 -0
- package/docs/content/anchoredPosition.mdx +163 -0
- package/docs/content/core-concepts.md +70 -0
- package/docs/content/focusTrap.mdx +103 -0
- package/docs/content/focusZone.mdx +145 -0
- package/docs/content/getting-started.md +138 -0
- package/docs/content/index.md +33 -0
- package/docs/content/linting.md +35 -0
- package/docs/content/overriding-styles.mdx +82 -0
- package/docs/content/philosophy.md +23 -0
- package/docs/content/primer-theme.md +89 -0
- package/docs/content/ssr.mdx +43 -0
- package/docs/content/system-props.mdx +37 -0
- package/docs/content/theme-reference.md +16 -0
- package/docs/content/theming.md +249 -0
- package/docs/content/useOnEscapePress.mdx +56 -0
- package/docs/content/useOnOutsideClick.mdx +57 -0
- package/docs/content/useOpenAndCloseFocus.mdx +49 -0
- package/docs/content/useOverlay.mdx +62 -0
- package/docs/content/useSafeTimeout.mdx +32 -0
- package/docs/gatsby-config.js +30 -0
- package/docs/gatsby-node.js +101 -0
- package/docs/package-lock.json +20756 -0
- package/docs/package.json +36 -0
- package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +23 -0
- package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +41 -0
- package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +56 -0
- package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +133 -0
- package/docs/src/@primer/gatsby-theme-doctocat/primer-components-hero.svg +1411 -0
- package/docs/src/props.js +77 -0
- package/jest.config.js +13 -0
- package/lib/ActionList/Item.d.ts +6 -0
- package/lib/ActionList/Item.js +5 -1
- package/lib/TextInputWithTokens.js +42 -22
- package/lib/Token/Token.js +13 -2
- package/lib/Token/TokenBase.js +0 -4
- package/lib/Token/_RemoveTokenButton.js +15 -2
- package/lib/__tests__/ActionList.test.d.ts +1 -0
- package/lib/__tests__/ActionList.test.js +69 -0
- package/lib/__tests__/ActionList.types.test.d.ts +6 -0
- package/lib/__tests__/ActionList.types.test.js +69 -0
- package/lib/__tests__/ActionMenu.test.d.ts +1 -0
- package/lib/__tests__/ActionMenu.test.js +151 -0
- package/lib/__tests__/AnchoredOverlay.test.d.ts +1 -0
- package/lib/__tests__/AnchoredOverlay.test.js +160 -0
- package/lib/__tests__/Autocomplete.test.d.ts +1 -0
- package/lib/__tests__/Autocomplete.test.js +528 -0
- package/lib/__tests__/Avatar.test.d.ts +1 -0
- package/lib/__tests__/Avatar.test.js +67 -0
- package/lib/__tests__/AvatarStack.test.d.ts +1 -0
- package/lib/__tests__/AvatarStack.test.js +71 -0
- package/lib/__tests__/BorderBox.test.d.ts +1 -0
- package/lib/__tests__/BorderBox.test.js +58 -0
- package/lib/__tests__/Box.test.d.ts +1 -0
- package/lib/__tests__/Box.test.js +78 -0
- package/lib/__tests__/BranchName.test.d.ts +1 -0
- package/lib/__tests__/BranchName.test.js +36 -0
- package/lib/__tests__/Breadcrumbs.test.d.ts +1 -0
- package/lib/__tests__/Breadcrumbs.test.js +37 -0
- package/lib/__tests__/BreadcrumbsItem.test.d.ts +1 -0
- package/lib/__tests__/BreadcrumbsItem.test.js +49 -0
- package/lib/__tests__/Button.test.d.ts +1 -0
- package/lib/__tests__/Button.test.js +143 -0
- package/lib/__tests__/Caret.test.d.ts +1 -0
- package/lib/__tests__/Caret.test.js +52 -0
- package/lib/__tests__/CircleBadge.test.d.ts +1 -0
- package/lib/__tests__/CircleBadge.test.js +83 -0
- package/lib/__tests__/CircleOcticon.test.d.ts +1 -0
- package/lib/__tests__/CircleOcticon.test.js +71 -0
- package/lib/__tests__/ConfirmationDialog.test.d.ts +1 -0
- package/lib/__tests__/ConfirmationDialog.test.js +134 -0
- package/lib/__tests__/CounterLabel.test.d.ts +1 -0
- package/lib/__tests__/CounterLabel.test.js +58 -0
- package/lib/__tests__/Details.test.d.ts +1 -0
- package/lib/__tests__/Details.test.js +117 -0
- package/lib/__tests__/Dialog.test.d.ts +1 -0
- package/lib/__tests__/Dialog.test.js +184 -0
- package/lib/__tests__/Dropdown.test.d.ts +1 -0
- package/lib/__tests__/Dropdown.test.js +63 -0
- package/lib/__tests__/DropdownMenu.test.d.ts +1 -0
- package/lib/__tests__/DropdownMenu.test.js +150 -0
- package/lib/__tests__/FilterList.test.d.ts +1 -0
- package/lib/__tests__/FilterList.test.js +36 -0
- package/lib/__tests__/FilterListItem.test.d.ts +1 -0
- package/lib/__tests__/FilterListItem.test.js +46 -0
- package/lib/__tests__/FilteredSearch.test.d.ts +1 -0
- package/lib/__tests__/FilteredSearch.test.js +36 -0
- package/lib/__tests__/Flash.test.d.ts +1 -0
- package/lib/__tests__/Flash.test.js +62 -0
- package/lib/__tests__/Flex.test.d.ts +1 -0
- package/lib/__tests__/Flex.test.js +74 -0
- package/lib/__tests__/FormGroup.test.d.ts +1 -0
- package/lib/__tests__/FormGroup.test.js +54 -0
- package/lib/__tests__/Grid.test.d.ts +1 -0
- package/lib/__tests__/Grid.test.js +104 -0
- package/lib/__tests__/Header.test.d.ts +1 -0
- package/lib/__tests__/Header.test.js +58 -0
- package/lib/__tests__/Heading.test.d.ts +1 -0
- package/lib/__tests__/Heading.test.js +109 -0
- package/lib/__tests__/Label.test.d.ts +1 -0
- package/lib/__tests__/Label.test.js +46 -0
- package/lib/__tests__/LabelGroup.test.d.ts +1 -0
- package/lib/__tests__/LabelGroup.test.js +38 -0
- package/lib/__tests__/Link.test.d.ts +1 -0
- package/lib/__tests__/Link.test.js +70 -0
- package/lib/__tests__/Merge.types.test.d.ts +30 -0
- package/lib/__tests__/Merge.types.test.js +27 -0
- package/lib/__tests__/Overlay.test.d.ts +1 -0
- package/lib/__tests__/Overlay.test.js +145 -0
- package/lib/__tests__/Pagehead.test.d.ts +1 -0
- package/lib/__tests__/Pagehead.test.js +37 -0
- package/lib/__tests__/Pagination/Pagination.test.d.ts +1 -0
- package/lib/__tests__/Pagination/Pagination.test.js +47 -0
- package/lib/__tests__/Pagination/PaginationModel.test.d.ts +1 -0
- package/lib/__tests__/Pagination/PaginationModel.test.js +186 -0
- package/lib/__tests__/PointerBox.test.d.ts +1 -0
- package/lib/__tests__/PointerBox.test.js +46 -0
- package/lib/__tests__/Popover.test.d.ts +1 -0
- package/lib/__tests__/Popover.test.js +66 -0
- package/lib/__tests__/Portal.test.d.ts +1 -0
- package/lib/__tests__/Portal.test.js +124 -0
- package/lib/__tests__/Position.test.d.ts +1 -0
- package/lib/__tests__/Position.test.js +143 -0
- package/lib/__tests__/ProgressBar.test.d.ts +1 -0
- package/lib/__tests__/ProgressBar.test.js +68 -0
- package/lib/__tests__/SelectMenu.test.d.ts +1 -0
- package/lib/__tests__/SelectMenu.test.js +155 -0
- package/lib/__tests__/SelectPanel.test.d.ts +1 -0
- package/lib/__tests__/SelectPanel.test.js +80 -0
- package/lib/__tests__/SideNav.test.d.ts +1 -0
- package/lib/__tests__/SideNav.test.js +71 -0
- package/lib/__tests__/Spinner.test.d.ts +1 -0
- package/lib/__tests__/Spinner.test.js +53 -0
- package/lib/__tests__/StateLabel.test.d.ts +1 -0
- package/lib/__tests__/StateLabel.test.js +71 -0
- package/lib/__tests__/StyledOcticon.test.d.ts +1 -0
- package/lib/__tests__/StyledOcticon.test.js +40 -0
- package/lib/__tests__/SubNav.test.d.ts +1 -0
- package/lib/__tests__/SubNav.test.js +62 -0
- package/lib/__tests__/SubNavLink.test.d.ts +1 -0
- package/lib/__tests__/SubNavLink.test.js +49 -0
- package/lib/__tests__/TabNav.test.d.ts +1 -0
- package/lib/__tests__/TabNav.test.js +49 -0
- package/lib/__tests__/Text.test.d.ts +1 -0
- package/lib/__tests__/Text.test.js +105 -0
- package/lib/__tests__/TextInput.test.d.ts +1 -0
- package/lib/__tests__/TextInput.test.js +78 -0
- package/lib/__tests__/TextInputWithTokens.test.d.ts +1 -0
- package/lib/__tests__/TextInputWithTokens.test.js +441 -0
- package/lib/__tests__/ThemeProvider.test.d.ts +1 -0
- package/lib/__tests__/ThemeProvider.test.js +444 -0
- package/lib/__tests__/Timeline.test.d.ts +1 -0
- package/lib/__tests__/Timeline.test.js +75 -0
- package/lib/__tests__/Token.test.d.ts +1 -0
- package/lib/__tests__/Token.test.js +180 -0
- package/lib/__tests__/Tooltip.test.d.ts +1 -0
- package/lib/__tests__/Tooltip.test.js +69 -0
- package/lib/__tests__/Truncate.test.d.ts +1 -0
- package/lib/__tests__/Truncate.test.js +63 -0
- package/lib/__tests__/UnderlineNav.test.d.ts +1 -0
- package/lib/__tests__/UnderlineNav.test.js +72 -0
- package/lib/__tests__/UnderlineNavLink.test.d.ts +1 -0
- package/lib/__tests__/UnderlineNavLink.test.js +51 -0
- package/lib/__tests__/behaviors/anchoredPosition.test.d.ts +1 -0
- package/lib/__tests__/behaviors/anchoredPosition.test.js +390 -0
- package/lib/__tests__/behaviors/focusTrap.test.d.ts +1 -0
- package/lib/__tests__/behaviors/focusTrap.test.js +234 -0
- package/lib/__tests__/behaviors/focusZone.test.d.ts +1 -0
- package/lib/__tests__/behaviors/focusZone.test.js +570 -0
- package/lib/__tests__/behaviors/iterateFocusableElements.test.d.ts +1 -0
- package/lib/__tests__/behaviors/iterateFocusableElements.test.js +55 -0
- package/lib/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +1 -0
- package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +226 -0
- package/lib/__tests__/filterObject.test.d.ts +1 -0
- package/lib/__tests__/filterObject.test.js +30 -0
- package/lib/__tests__/hooks/useAnchoredPosition.test.d.ts +1 -0
- package/lib/__tests__/hooks/useAnchoredPosition.test.js +54 -0
- package/lib/__tests__/hooks/useOnEscapePress.test.d.ts +1 -0
- package/lib/__tests__/hooks/useOnEscapePress.test.js +32 -0
- package/lib/__tests__/hooks/useOnOutsideClick.test.d.ts +1 -0
- package/lib/__tests__/hooks/useOnOutsideClick.test.js +87 -0
- package/lib/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +1 -0
- package/lib/__tests__/hooks/useOpenAndCloseFocus.test.js +60 -0
- package/lib/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +1 -0
- package/lib/__tests__/hooks/useProvidedStateOrCreate.test.js +45 -0
- package/lib/__tests__/theme.test.d.ts +1 -0
- package/lib/__tests__/theme.test.js +36 -0
- package/lib/__tests__/themeGet.test.d.ts +1 -0
- package/lib/__tests__/themeGet.test.js +25 -0
- package/lib/__tests__/useSafeTimeout.test.d.ts +1 -0
- package/lib/__tests__/useSafeTimeout.test.js +45 -0
- package/lib/stories/ActionList.stories.js +454 -0
- package/lib/stories/ActionMenu.stories.js +350 -0
- package/lib/stories/AnchoredOverlay.stories.js +127 -0
- package/lib/stories/Autocomplete.stories.js +619 -0
- package/lib/stories/AvatarStack.stories.js +49 -0
- package/lib/stories/Button.stories.js +125 -0
- package/lib/stories/ConfirmationDialog.stories.js +111 -0
- package/lib/stories/Dialog.stories.js +265 -0
- package/lib/stories/DropdownMenu.stories.js +122 -0
- package/lib/stories/IssueLabelToken.stories.js +165 -0
- package/lib/stories/Overlay.stories.js +204 -0
- package/lib/stories/Portal.stories.js +104 -0
- package/lib/stories/ProfileToken.stories.js +162 -0
- package/lib/stories/SelectPanel.stories.js +399 -0
- package/lib/stories/TextInputWithTokens.stories.js +235 -0
- package/lib/stories/ThemeProvider.stories.js +102 -0
- package/lib/stories/Token.stories.js +159 -0
- package/lib/stories/useAnchoredPosition.stories.js +351 -0
- package/lib/stories/useFocusTrap.stories.js +356 -0
- package/lib/stories/useFocusZone.stories.js +599 -0
- package/lib-esm/ActionList/Item.d.ts +6 -0
- package/lib-esm/ActionList/Item.js +5 -1
- package/lib-esm/TextInputWithTokens.js +42 -23
- package/lib-esm/Token/Token.js +13 -2
- package/lib-esm/Token/TokenBase.js +0 -4
- package/lib-esm/Token/_RemoveTokenButton.js +11 -2
- package/lib-esm/__tests__/ActionList.test.d.ts +1 -0
- package/lib-esm/__tests__/ActionList.test.js +57 -0
- package/lib-esm/__tests__/ActionList.types.test.d.ts +6 -0
- package/lib-esm/__tests__/ActionList.types.test.js +45 -0
- package/lib-esm/__tests__/ActionMenu.test.d.ts +1 -0
- package/lib-esm/__tests__/ActionMenu.test.js +139 -0
- package/lib-esm/__tests__/AnchoredOverlay.test.d.ts +1 -0
- package/lib-esm/__tests__/AnchoredOverlay.test.js +134 -0
- package/lib-esm/__tests__/Autocomplete.test.d.ts +1 -0
- package/lib-esm/__tests__/Autocomplete.test.js +494 -0
- package/lib-esm/__tests__/Avatar.test.d.ts +1 -0
- package/lib-esm/__tests__/Avatar.test.js +56 -0
- package/lib-esm/__tests__/AvatarStack.test.d.ts +1 -0
- package/lib-esm/__tests__/AvatarStack.test.js +58 -0
- package/lib-esm/__tests__/BorderBox.test.d.ts +1 -0
- package/lib-esm/__tests__/BorderBox.test.js +47 -0
- package/lib-esm/__tests__/Box.test.d.ts +1 -0
- package/lib-esm/__tests__/Box.test.js +67 -0
- package/lib-esm/__tests__/BranchName.test.d.ts +1 -0
- package/lib-esm/__tests__/BranchName.test.js +26 -0
- package/lib-esm/__tests__/Breadcrumbs.test.d.ts +1 -0
- package/lib-esm/__tests__/Breadcrumbs.test.js +27 -0
- package/lib-esm/__tests__/BreadcrumbsItem.test.d.ts +1 -0
- package/lib-esm/__tests__/BreadcrumbsItem.test.js +39 -0
- package/lib-esm/__tests__/Button.test.d.ts +1 -0
- package/lib-esm/__tests__/Button.test.js +133 -0
- package/lib-esm/__tests__/Caret.test.d.ts +1 -0
- package/lib-esm/__tests__/Caret.test.js +42 -0
- package/lib-esm/__tests__/CircleBadge.test.d.ts +1 -0
- package/lib-esm/__tests__/CircleBadge.test.js +70 -0
- package/lib-esm/__tests__/CircleOcticon.test.d.ts +1 -0
- package/lib-esm/__tests__/CircleOcticon.test.js +59 -0
- package/lib-esm/__tests__/ConfirmationDialog.test.d.ts +1 -0
- package/lib-esm/__tests__/ConfirmationDialog.test.js +113 -0
- package/lib-esm/__tests__/CounterLabel.test.d.ts +1 -0
- package/lib-esm/__tests__/CounterLabel.test.js +47 -0
- package/lib-esm/__tests__/Details.test.d.ts +1 -0
- package/lib-esm/__tests__/Details.test.js +107 -0
- package/lib-esm/__tests__/Dialog.test.d.ts +1 -0
- package/lib-esm/__tests__/Dialog.test.js +171 -0
- package/lib-esm/__tests__/Dropdown.test.d.ts +1 -0
- package/lib-esm/__tests__/Dropdown.test.js +53 -0
- package/lib-esm/__tests__/DropdownMenu.test.d.ts +1 -0
- package/lib-esm/__tests__/DropdownMenu.test.js +137 -0
- package/lib-esm/__tests__/FilterList.test.d.ts +1 -0
- package/lib-esm/__tests__/FilterList.test.js +26 -0
- package/lib-esm/__tests__/FilterListItem.test.d.ts +1 -0
- package/lib-esm/__tests__/FilterListItem.test.js +36 -0
- package/lib-esm/__tests__/FilteredSearch.test.d.ts +1 -0
- package/lib-esm/__tests__/FilteredSearch.test.js +26 -0
- package/lib-esm/__tests__/Flash.test.d.ts +1 -0
- package/lib-esm/__tests__/Flash.test.js +51 -0
- package/lib-esm/__tests__/Flex.test.d.ts +1 -0
- package/lib-esm/__tests__/Flex.test.js +64 -0
- package/lib-esm/__tests__/FormGroup.test.d.ts +1 -0
- package/lib-esm/__tests__/FormGroup.test.js +44 -0
- package/lib-esm/__tests__/Grid.test.d.ts +1 -0
- package/lib-esm/__tests__/Grid.test.js +94 -0
- package/lib-esm/__tests__/Header.test.d.ts +1 -0
- package/lib-esm/__tests__/Header.test.js +48 -0
- package/lib-esm/__tests__/Heading.test.d.ts +1 -0
- package/lib-esm/__tests__/Heading.test.js +99 -0
- package/lib-esm/__tests__/Label.test.d.ts +1 -0
- package/lib-esm/__tests__/Label.test.js +36 -0
- package/lib-esm/__tests__/LabelGroup.test.d.ts +1 -0
- package/lib-esm/__tests__/LabelGroup.test.js +26 -0
- package/lib-esm/__tests__/Link.test.d.ts +1 -0
- package/lib-esm/__tests__/Link.test.js +60 -0
- package/lib-esm/__tests__/Merge.types.test.d.ts +30 -0
- package/lib-esm/__tests__/Merge.types.test.js +14 -0
- package/lib-esm/__tests__/Overlay.test.d.ts +1 -0
- package/lib-esm/__tests__/Overlay.test.js +123 -0
- package/lib-esm/__tests__/Pagehead.test.d.ts +1 -0
- package/lib-esm/__tests__/Pagehead.test.js +26 -0
- package/lib-esm/__tests__/Pagination/Pagination.test.d.ts +1 -0
- package/lib-esm/__tests__/Pagination/Pagination.test.js +35 -0
- package/lib-esm/__tests__/Pagination/PaginationModel.test.d.ts +1 -0
- package/lib-esm/__tests__/Pagination/PaginationModel.test.js +182 -0
- package/lib-esm/__tests__/PointerBox.test.d.ts +1 -0
- package/lib-esm/__tests__/PointerBox.test.js +36 -0
- package/lib-esm/__tests__/Popover.test.d.ts +1 -0
- package/lib-esm/__tests__/Popover.test.js +53 -0
- package/lib-esm/__tests__/Portal.test.d.ts +1 -0
- package/lib-esm/__tests__/Portal.test.js +104 -0
- package/lib-esm/__tests__/Position.test.d.ts +1 -0
- package/lib-esm/__tests__/Position.test.js +133 -0
- package/lib-esm/__tests__/ProgressBar.test.d.ts +1 -0
- package/lib-esm/__tests__/ProgressBar.test.js +58 -0
- package/lib-esm/__tests__/SelectMenu.test.d.ts +1 -0
- package/lib-esm/__tests__/SelectMenu.test.js +145 -0
- package/lib-esm/__tests__/SelectPanel.test.d.ts +1 -0
- package/lib-esm/__tests__/SelectPanel.test.js +65 -0
- package/lib-esm/__tests__/SideNav.test.d.ts +1 -0
- package/lib-esm/__tests__/SideNav.test.js +60 -0
- package/lib-esm/__tests__/Spinner.test.d.ts +1 -0
- package/lib-esm/__tests__/Spinner.test.js +43 -0
- package/lib-esm/__tests__/StateLabel.test.d.ts +1 -0
- package/lib-esm/__tests__/StateLabel.test.js +61 -0
- package/lib-esm/__tests__/StyledOcticon.test.d.ts +1 -0
- package/lib-esm/__tests__/StyledOcticon.test.js +29 -0
- package/lib-esm/__tests__/SubNav.test.d.ts +1 -0
- package/lib-esm/__tests__/SubNav.test.js +50 -0
- package/lib-esm/__tests__/SubNavLink.test.d.ts +1 -0
- package/lib-esm/__tests__/SubNavLink.test.js +39 -0
- package/lib-esm/__tests__/TabNav.test.d.ts +1 -0
- package/lib-esm/__tests__/TabNav.test.js +39 -0
- package/lib-esm/__tests__/Text.test.d.ts +1 -0
- package/lib-esm/__tests__/Text.test.js +93 -0
- package/lib-esm/__tests__/TextInput.test.d.ts +1 -0
- package/lib-esm/__tests__/TextInput.test.js +68 -0
- package/lib-esm/__tests__/TextInputWithTokens.test.d.ts +1 -0
- package/lib-esm/__tests__/TextInputWithTokens.test.js +387 -0
- package/lib-esm/__tests__/ThemeProvider.test.d.ts +1 -0
- package/lib-esm/__tests__/ThemeProvider.test.js +408 -0
- package/lib-esm/__tests__/Timeline.test.d.ts +1 -0
- package/lib-esm/__tests__/Timeline.test.js +65 -0
- package/lib-esm/__tests__/Token.test.d.ts +1 -0
- package/lib-esm/__tests__/Token.test.js +166 -0
- package/lib-esm/__tests__/Tooltip.test.d.ts +1 -0
- package/lib-esm/__tests__/Tooltip.test.js +59 -0
- package/lib-esm/__tests__/Truncate.test.d.ts +1 -0
- package/lib-esm/__tests__/Truncate.test.js +53 -0
- package/lib-esm/__tests__/UnderlineNav.test.d.ts +1 -0
- package/lib-esm/__tests__/UnderlineNav.test.js +60 -0
- package/lib-esm/__tests__/UnderlineNavLink.test.d.ts +1 -0
- package/lib-esm/__tests__/UnderlineNavLink.test.js +41 -0
- package/lib-esm/__tests__/behaviors/anchoredPosition.test.d.ts +1 -0
- package/lib-esm/__tests__/behaviors/anchoredPosition.test.js +388 -0
- package/lib-esm/__tests__/behaviors/focusTrap.test.d.ts +1 -0
- package/lib-esm/__tests__/behaviors/focusTrap.test.js +227 -0
- package/lib-esm/__tests__/behaviors/focusZone.test.d.ts +1 -0
- package/lib-esm/__tests__/behaviors/focusZone.test.js +487 -0
- package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.d.ts +1 -0
- package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.js +48 -0
- package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +1 -0
- package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.js +224 -0
- package/lib-esm/__tests__/filterObject.test.d.ts +1 -0
- package/lib-esm/__tests__/filterObject.test.js +27 -0
- package/lib-esm/__tests__/hooks/useAnchoredPosition.test.d.ts +1 -0
- package/lib-esm/__tests__/hooks/useAnchoredPosition.test.js +46 -0
- package/lib-esm/__tests__/hooks/useOnEscapePress.test.d.ts +1 -0
- package/lib-esm/__tests__/hooks/useOnEscapePress.test.js +23 -0
- package/lib-esm/__tests__/hooks/useOnOutsideClick.test.d.ts +1 -0
- package/lib-esm/__tests__/hooks/useOnOutsideClick.test.js +68 -0
- package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +1 -0
- package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.js +52 -0
- package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +1 -0
- package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.js +36 -0
- package/lib-esm/__tests__/theme.test.d.ts +1 -0
- package/lib-esm/__tests__/theme.test.js +33 -0
- package/lib-esm/__tests__/themeGet.test.d.ts +1 -0
- package/lib-esm/__tests__/themeGet.test.js +22 -0
- package/lib-esm/__tests__/useSafeTimeout.test.d.ts +1 -0
- package/lib-esm/__tests__/useSafeTimeout.test.js +39 -0
- package/lib-esm/stories/ActionList.stories.js +395 -0
- package/lib-esm/stories/ActionMenu.stories.js +305 -0
- package/lib-esm/stories/AnchoredOverlay.stories.js +101 -0
- package/lib-esm/stories/Autocomplete.stories.js +560 -0
- package/lib-esm/stories/AvatarStack.stories.js +32 -0
- package/lib-esm/stories/Button.stories.js +86 -0
- package/lib-esm/stories/ConfirmationDialog.stories.js +86 -0
- package/lib-esm/stories/Dialog.stories.js +240 -0
- package/lib-esm/stories/DropdownMenu.stories.js +94 -0
- package/lib-esm/stories/IssueLabelToken.stories.js +139 -0
- package/lib-esm/stories/Overlay.stories.js +173 -0
- package/lib-esm/stories/Portal.stories.js +68 -0
- package/lib-esm/stories/ProfileToken.stories.js +136 -0
- package/lib-esm/stories/SelectPanel.stories.js +334 -0
- package/lib-esm/stories/TextInputWithTokens.stories.js +196 -0
- package/lib-esm/stories/ThemeProvider.stories.js +83 -0
- package/lib-esm/stories/Token.stories.js +133 -0
- package/lib-esm/stories/useAnchoredPosition.stories.js +313 -0
- package/lib-esm/stories/useFocusTrap.stories.js +309 -0
- package/lib-esm/stories/useFocusZone.stories.js +554 -0
- package/migrating.md +250 -0
- package/now.json +17 -0
- package/package-lock.json +28456 -0
- package/package.json +6 -6
- package/rollup.config.js +36 -0
- package/script/build +19 -0
- package/script/build-storybook +10 -0
- package/script/setup +12 -0
- package/src/ActionList/Divider.tsx +25 -0
- package/src/ActionList/Group.tsx +45 -0
- package/src/ActionList/Header.tsx +74 -0
- package/src/ActionList/Item.tsx +496 -0
- package/src/ActionList/List.tsx +258 -0
- package/src/ActionList/index.ts +21 -0
- package/src/ActionMenu.tsx +106 -0
- package/src/AnchoredOverlay/AnchoredOverlay.tsx +191 -0
- package/src/AnchoredOverlay/index.ts +2 -0
- package/src/Autocomplete/Autocomplete.tsx +103 -0
- package/src/Autocomplete/AutocompleteContext.tsx +19 -0
- package/src/Autocomplete/AutocompleteInput.tsx +179 -0
- package/src/Autocomplete/AutocompleteMenu.tsx +341 -0
- package/src/Autocomplete/AutocompleteOverlay.tsx +68 -0
- package/src/Autocomplete/index.ts +2 -0
- package/src/Avatar.tsx +46 -0
- package/src/AvatarPair.tsx +35 -0
- package/src/AvatarStack.tsx +159 -0
- package/src/BaseStyles.tsx +53 -0
- package/src/BorderBox.tsx +18 -0
- package/src/Box.tsx +54 -0
- package/src/BranchName.tsx +19 -0
- package/src/Breadcrumbs.tsx +101 -0
- package/src/Button/Button.tsx +40 -0
- package/src/Button/ButtonBase.tsx +43 -0
- package/src/Button/ButtonClose.tsx +40 -0
- package/src/Button/ButtonDanger.tsx +43 -0
- package/src/Button/ButtonGroup.tsx +55 -0
- package/src/Button/ButtonInvisible.tsx +32 -0
- package/src/Button/ButtonOutline.tsx +43 -0
- package/src/Button/ButtonPrimary.tsx +41 -0
- package/src/Button/ButtonStyles.tsx +36 -0
- package/src/Button/ButtonTableList.tsx +58 -0
- package/src/Button/index.ts +16 -0
- package/src/Caret.tsx +133 -0
- package/src/CircleBadge.tsx +55 -0
- package/src/CircleOcticon.tsx +37 -0
- package/src/CounterLabel.tsx +52 -0
- package/src/Details.tsx +23 -0
- package/src/Dialog/ConfirmationDialog.tsx +184 -0
- package/src/Dialog/Dialog.tsx +432 -0
- package/src/Dialog.tsx +149 -0
- package/src/Dropdown.tsx +158 -0
- package/src/DropdownMenu/DropdownButton.tsx +15 -0
- package/src/DropdownMenu/DropdownMenu.tsx +115 -0
- package/src/DropdownMenu/index.ts +4 -0
- package/src/DropdownStyles.ts +128 -0
- package/src/FilterList.tsx +81 -0
- package/src/FilteredActionList/FilteredActionList.tsx +142 -0
- package/src/FilteredActionList/index.ts +2 -0
- package/src/FilteredSearch.tsx +28 -0
- package/src/Flash.tsx +77 -0
- package/src/Flex.tsx +15 -0
- package/src/FormGroup.tsx +27 -0
- package/src/Grid.tsx +15 -0
- package/src/Header.tsx +84 -0
- package/src/Heading.tsx +21 -0
- package/src/Label.tsx +75 -0
- package/src/LabelGroup.tsx +18 -0
- package/src/Link.tsx +46 -0
- package/src/Overlay.tsx +197 -0
- package/src/Pagehead.tsx +17 -0
- package/src/Pagination/Pagination.tsx +214 -0
- package/src/Pagination/index.ts +4 -0
- package/src/Pagination/model.tsx +187 -0
- package/src/PointerBox.tsx +31 -0
- package/src/Popover.tsx +236 -0
- package/src/Portal/Portal.tsx +96 -0
- package/src/Portal/index.ts +5 -0
- package/src/Position.tsx +63 -0
- package/src/ProgressBar.tsx +52 -0
- package/src/SelectMenu/SelectMenu.tsx +125 -0
- package/src/SelectMenu/SelectMenuContext.tsx +9 -0
- package/src/SelectMenu/SelectMenuDivider.tsx +25 -0
- package/src/SelectMenu/SelectMenuFilter.tsx +51 -0
- package/src/SelectMenu/SelectMenuFooter.tsx +28 -0
- package/src/SelectMenu/SelectMenuHeader.tsx +50 -0
- package/src/SelectMenu/SelectMenuItem.tsx +137 -0
- package/src/SelectMenu/SelectMenuList.tsx +42 -0
- package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +24 -0
- package/src/SelectMenu/SelectMenuModal.tsx +121 -0
- package/src/SelectMenu/SelectMenuTab.tsx +88 -0
- package/src/SelectMenu/SelectMenuTabPanel.tsx +30 -0
- package/src/SelectMenu/SelectMenuTabs.tsx +44 -0
- package/src/SelectMenu/hooks/useKeyboardNav.js +90 -0
- package/src/SelectMenu/index.ts +15 -0
- package/src/SelectPanel/SelectPanel.tsx +173 -0
- package/src/SelectPanel/index.ts +2 -0
- package/src/SideNav.tsx +193 -0
- package/src/Spinner.tsx +59 -0
- package/src/StateLabel.tsx +102 -0
- package/src/StyledOcticon.tsx +24 -0
- package/src/SubNav.tsx +129 -0
- package/src/TabNav.tsx +77 -0
- package/src/Text.tsx +13 -0
- package/src/TextInput.tsx +68 -0
- package/src/TextInputWithTokens.tsx +295 -0
- package/src/ThemeProvider.tsx +176 -0
- package/src/Timeline.tsx +141 -0
- package/src/Token/AvatarToken.tsx +54 -0
- package/src/Token/IssueLabelToken.tsx +150 -0
- package/src/Token/Token.tsx +126 -0
- package/src/Token/TokenBase.tsx +129 -0
- package/src/Token/_RemoveTokenButton.tsx +111 -0
- package/src/Token/_TokenTextContainer.tsx +47 -0
- package/src/Token/index.ts +3 -0
- package/src/Tooltip.tsx +263 -0
- package/src/Truncate.tsx +36 -0
- package/src/UnderlineNav.tsx +110 -0
- package/src/_TextInputWrapper.tsx +105 -0
- package/src/_UnstyledTextInput.tsx +19 -0
- package/src/__tests__/.eslintrc.json +11 -0
- package/src/__tests__/ActionList.test.tsx +53 -0
- package/src/__tests__/ActionList.types.test.tsx +51 -0
- package/src/__tests__/ActionMenu.test.tsx +136 -0
- package/src/__tests__/AnchoredOverlay.test.tsx +150 -0
- package/src/__tests__/Autocomplete.test.tsx +444 -0
- package/src/__tests__/Avatar.test.tsx +44 -0
- package/src/__tests__/AvatarStack.test.tsx +48 -0
- package/src/__tests__/BorderBox.test.tsx +43 -0
- package/src/__tests__/Box.test.tsx +42 -0
- package/src/__tests__/BranchName.test.tsx +26 -0
- package/src/__tests__/Breadcrumbs.test.tsx +27 -0
- package/src/__tests__/BreadcrumbsItem.test.tsx +31 -0
- package/src/__tests__/Button.test.tsx +128 -0
- package/src/__tests__/Caret.test.tsx +36 -0
- package/src/__tests__/CircleBadge.test.tsx +66 -0
- package/src/__tests__/CircleOcticon.test.tsx +50 -0
- package/src/__tests__/ConfirmationDialog.test.tsx +120 -0
- package/src/__tests__/CounterLabel.test.tsx +50 -0
- package/src/__tests__/Details.test.tsx +115 -0
- package/src/__tests__/Dialog.test.tsx +155 -0
- package/src/__tests__/Dropdown.test.tsx +53 -0
- package/src/__tests__/DropdownMenu.test.tsx +136 -0
- package/src/__tests__/FilterList.test.tsx +26 -0
- package/src/__tests__/FilterListItem.test.tsx +31 -0
- package/src/__tests__/FilteredSearch.test.tsx +26 -0
- package/src/__tests__/Flash.test.tsx +45 -0
- package/src/__tests__/Flex.test.tsx +58 -0
- package/src/__tests__/FormGroup.test.tsx +38 -0
- package/src/__tests__/Grid.test.tsx +82 -0
- package/src/__tests__/Header.test.tsx +49 -0
- package/src/__tests__/Heading.test.tsx +91 -0
- package/src/__tests__/Label.test.tsx +34 -0
- package/src/__tests__/LabelGroup.test.tsx +30 -0
- package/src/__tests__/Link.test.tsx +47 -0
- package/src/__tests__/Merge.types.test.ts +39 -0
- package/src/__tests__/Overlay.test.tsx +103 -0
- package/src/__tests__/Pagehead.test.tsx +23 -0
- package/src/__tests__/Pagination/Pagination.test.tsx +30 -0
- package/src/__tests__/Pagination/PaginationModel.test.tsx +133 -0
- package/src/__tests__/Pagination/__snapshots__/Pagination.test.tsx.snap +184 -0
- package/src/__tests__/PointerBox.test.tsx +34 -0
- package/src/__tests__/Popover.test.tsx +68 -0
- package/src/__tests__/Portal.test.tsx +103 -0
- package/src/__tests__/Position.test.tsx +117 -0
- package/src/__tests__/ProgressBar.test.tsx +40 -0
- package/src/__tests__/SelectMenu.test.tsx +142 -0
- package/src/__tests__/SelectPanel.test.tsx +63 -0
- package/src/__tests__/SideNav.test.tsx +62 -0
- package/src/__tests__/Spinner.test.tsx +42 -0
- package/src/__tests__/StateLabel.test.tsx +48 -0
- package/src/__tests__/StyledOcticon.test.tsx +26 -0
- package/src/__tests__/SubNav.test.tsx +50 -0
- package/src/__tests__/SubNavLink.test.tsx +31 -0
- package/src/__tests__/TabNav.test.tsx +32 -0
- package/src/__tests__/Text.test.tsx +78 -0
- package/src/__tests__/TextInput.test.tsx +49 -0
- package/src/__tests__/TextInputWithTokens.test.tsx +300 -0
- package/src/__tests__/ThemeProvider.test.tsx +441 -0
- package/src/__tests__/Timeline.test.tsx +58 -0
- package/src/__tests__/Token.test.tsx +118 -0
- package/src/__tests__/Tooltip.test.tsx +52 -0
- package/src/__tests__/Truncate.test.tsx +43 -0
- package/src/__tests__/UnderlineNav.test.tsx +58 -0
- package/src/__tests__/UnderlineNavLink.test.tsx +31 -0
- package/src/__tests__/__snapshots__/ActionList.test.tsx.snap +223 -0
- package/src/__tests__/__snapshots__/ActionMenu.test.tsx.snap +80 -0
- package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +332 -0
- package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +3414 -0
- package/src/__tests__/__snapshots__/Avatar.test.tsx.snap +19 -0
- package/src/__tests__/__snapshots__/AvatarStack.test.tsx.snap +377 -0
- package/src/__tests__/__snapshots__/BorderBox.test.tsx.snap +14 -0
- package/src/__tests__/__snapshots__/Box.test.tsx.snap +201 -0
- package/src/__tests__/__snapshots__/BranchName.test.tsx.snap +17 -0
- package/src/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +29 -0
- package/src/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap +79 -0
- package/src/__tests__/__snapshots__/Button.test.tsx.snap +840 -0
- package/src/__tests__/__snapshots__/Caret.test.tsx.snap +373 -0
- package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +141 -0
- package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +64 -0
- package/src/__tests__/__snapshots__/ConfirmationDialog.test.tsx.snap +89 -0
- package/src/__tests__/__snapshots__/CounterLabel.test.tsx.snap +22 -0
- package/src/__tests__/__snapshots__/Details.test.tsx.snap +15 -0
- package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +200 -0
- package/src/__tests__/__snapshots__/Dropdown.test.tsx.snap +249 -0
- package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +106 -0
- package/src/__tests__/__snapshots__/FilterList.test.tsx.snap +13 -0
- package/src/__tests__/__snapshots__/FilterListItem.test.tsx.snap +80 -0
- package/src/__tests__/__snapshots__/FilteredSearch.test.tsx.snap +32 -0
- package/src/__tests__/__snapshots__/Flash.test.tsx.snap +32 -0
- package/src/__tests__/__snapshots__/Flex.test.tsx.snap +130 -0
- package/src/__tests__/__snapshots__/FormGroup.test.tsx.snap +25 -0
- package/src/__tests__/__snapshots__/Grid.test.tsx.snap +178 -0
- package/src/__tests__/__snapshots__/Header.test.tsx.snap +79 -0
- package/src/__tests__/__snapshots__/Heading.test.tsx.snap +13 -0
- package/src/__tests__/__snapshots__/Label.test.tsx.snap +74 -0
- package/src/__tests__/__snapshots__/LabelGroup.test.tsx.snap +15 -0
- package/src/__tests__/__snapshots__/Link.test.tsx.snap +213 -0
- package/src/__tests__/__snapshots__/Pagehead.test.tsx.snap +15 -0
- package/src/__tests__/__snapshots__/PointerBox.test.tsx.snap +174 -0
- package/src/__tests__/__snapshots__/Popover.test.tsx.snap +4687 -0
- package/src/__tests__/__snapshots__/Position.test.tsx.snap +44 -0
- package/src/__tests__/__snapshots__/ProgressBar.test.tsx.snap +53 -0
- package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +469 -0
- package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +123 -0
- package/src/__tests__/__snapshots__/SideNav.test.tsx.snap +143 -0
- package/src/__tests__/__snapshots__/Spinner.test.tsx.snap +33 -0
- package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +388 -0
- package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +25 -0
- package/src/__tests__/__snapshots__/SubNav.test.tsx.snap +44 -0
- package/src/__tests__/__snapshots__/SubNavLink.test.tsx.snap +199 -0
- package/src/__tests__/__snapshots__/TabNav.test.tsx.snap +58 -0
- package/src/__tests__/__snapshots__/Text.test.tsx.snap +7 -0
- package/src/__tests__/__snapshots__/TextInput.test.tsx.snap +440 -0
- package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +5516 -0
- package/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap +15 -0
- package/src/__tests__/__snapshots__/Timeline.test.tsx.snap +159 -0
- package/src/__tests__/__snapshots__/Token.test.tsx.snap +3794 -0
- package/src/__tests__/__snapshots__/Tooltip.test.tsx.snap +227 -0
- package/src/__tests__/__snapshots__/Truncate.test.tsx.snap +17 -0
- package/src/__tests__/__snapshots__/UnderlineNav.test.tsx.snap +59 -0
- package/src/__tests__/__snapshots__/UnderlineNavLink.test.tsx.snap +130 -0
- package/src/__tests__/behaviors/anchoredPosition.test.ts +295 -0
- package/src/__tests__/behaviors/focusTrap.test.tsx +236 -0
- package/src/__tests__/behaviors/focusZone.test.tsx +549 -0
- package/src/__tests__/behaviors/iterateFocusableElements.test.tsx +61 -0
- package/src/__tests__/behaviors/scrollIntoViewingArea.test.ts +195 -0
- package/src/__tests__/filterObject.test.ts +54 -0
- package/src/__tests__/hooks/useAnchoredPosition.test.tsx +31 -0
- package/src/__tests__/hooks/useOnEscapePress.test.tsx +16 -0
- package/src/__tests__/hooks/useOnOutsideClick.test.tsx +48 -0
- package/src/__tests__/hooks/useOpenAndCloseFocus.test.tsx +48 -0
- package/src/__tests__/hooks/useProvidedStateOrCreate.test.tsx +39 -0
- package/src/__tests__/theme.test.ts +41 -0
- package/src/__tests__/themeGet.test.ts +15 -0
- package/src/__tests__/useSafeTimeout.test.tsx +36 -0
- package/src/behaviors/anchoredPosition.ts +442 -0
- package/src/behaviors/focusTrap.ts +184 -0
- package/src/behaviors/focusZone.ts +713 -0
- package/src/behaviors/scrollIntoViewingArea.ts +27 -0
- package/src/constants.ts +62 -0
- package/src/hooks/index.ts +11 -0
- package/src/hooks/useAnchoredPosition.ts +53 -0
- package/src/hooks/useCombinedRefs.ts +40 -0
- package/src/hooks/useDetails.tsx +54 -0
- package/src/hooks/useDialog.ts +121 -0
- package/src/hooks/useFocusTrap.ts +80 -0
- package/src/hooks/useFocusZone.ts +64 -0
- package/src/hooks/useOnEscapePress.ts +63 -0
- package/src/hooks/useOnOutsideClick.tsx +82 -0
- package/src/hooks/useOpenAndCloseFocus.ts +32 -0
- package/src/hooks/useOverlay.tsx +34 -0
- package/src/hooks/useProvidedRefOrCreate.ts +14 -0
- package/src/hooks/useProvidedStateOrCreate.ts +27 -0
- package/src/hooks/useRenderForcingRef.ts +22 -0
- package/src/hooks/useResizeObserver.ts +11 -0
- package/src/hooks/useSafeTimeout.ts +38 -0
- package/src/hooks/useScrollFlash.ts +21 -0
- package/src/index.ts +170 -0
- package/src/polyfills/eventListenerSignal.ts +66 -0
- package/src/stories/ActionList.stories.tsx +436 -0
- package/src/stories/ActionMenu.stories.tsx +334 -0
- package/src/stories/AnchoredOverlay.stories.tsx +117 -0
- package/src/stories/Autocomplete.stories.tsx +655 -0
- package/src/stories/AvatarStack.stories.tsx +37 -0
- package/src/stories/Button.stories.tsx +92 -0
- package/src/stories/ConfirmationDialog.stories.tsx +105 -0
- package/src/stories/Dialog.stories.tsx +240 -0
- package/src/stories/DropdownMenu.stories.tsx +84 -0
- package/src/stories/IssueLabelToken.stories.tsx +138 -0
- package/src/stories/Overlay.stories.tsx +213 -0
- package/src/stories/Portal.stories.tsx +109 -0
- package/src/stories/ProfileToken.stories.tsx +129 -0
- package/src/stories/SelectPanel.stories.tsx +353 -0
- package/src/stories/TextInputWithTokens.stories.tsx +146 -0
- package/src/stories/ThemeProvider.stories.tsx +104 -0
- package/src/stories/Token.stories.tsx +126 -0
- package/src/stories/useAnchoredPosition.stories.tsx +332 -0
- package/src/stories/useFocusTrap.stories.tsx +400 -0
- package/src/stories/useFocusZone.stories.tsx +663 -0
- package/src/sx.ts +9 -0
- package/src/theme-preval.js +79 -0
- package/src/theme.ts +3 -0
- package/src/utils/deprecate.tsx +73 -0
- package/src/utils/isNumeric.tsx +4 -0
- package/src/utils/iterateFocusableElements.ts +121 -0
- package/src/utils/ssr.tsx +1 -0
- package/src/utils/test-deprecations.tsx +19 -0
- package/src/utils/test-helpers.tsx +7 -0
- package/src/utils/test-matchers.tsx +109 -0
- package/src/utils/testing.tsx +242 -0
- package/src/utils/theme.js +64 -0
- package/src/utils/types/AriaRole.ts +71 -0
- package/src/utils/types/ComponentProps.ts +13 -0
- package/src/utils/types/Flatten.ts +4 -0
- package/src/utils/types/MandateProps.ts +19 -0
- package/src/utils/types/Merge.ts +20 -0
- package/src/utils/types/index.ts +5 -0
- package/src/utils/uniqueId.ts +6 -0
- package/src/utils/userAgent.ts +7 -0
- package/stats.html +3279 -0
- package/tsconfig.build.json +7 -0
- package/tsconfig.json +20 -0
@@ -0,0 +1,435 @@
|
|
1
|
+
---
|
2
|
+
title: SelectMenu
|
3
|
+
---
|
4
|
+
|
5
|
+
The `SelectMenu` components are a suite of components which can be combined together to make several different variations of our GitHub select menu. At it's most basic form, a select menu is comprised of a `SelectMenu` wrapper, which contains a `summary` component of your choice and a `Select.Modal` which contains the select menu content. Use `SelectMenu.List` to wrap items in the select menu, and `SelectMenu.Item` to wrap each item.
|
6
|
+
|
7
|
+
Several additional components exist to provide even more functionality: `SelectMenu.Header`, `SelectMenu.Filter`, `SelectMenu.Tabs`, `SelectMenu.TabPanel` `SelectMenu.Footer` and `SelectMenu.Divider`.
|
8
|
+
|
9
|
+
## Basic Example
|
10
|
+
|
11
|
+
```jsx live
|
12
|
+
<SelectMenu>
|
13
|
+
<Button as="summary">Projects</Button>
|
14
|
+
<SelectMenu.Modal>
|
15
|
+
<SelectMenu.Header>Projects</SelectMenu.Header>
|
16
|
+
<SelectMenu.List>
|
17
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
18
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
19
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
20
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
21
|
+
</SelectMenu.List>
|
22
|
+
</SelectMenu.Modal>
|
23
|
+
</SelectMenu>
|
24
|
+
```
|
25
|
+
|
26
|
+
## SelectMenu
|
27
|
+
|
28
|
+
Main wrapper component for select menu.
|
29
|
+
|
30
|
+
```jsx
|
31
|
+
<SelectMenu>{/* all other sub components are wrapped here*/}</SelectMenu>
|
32
|
+
```
|
33
|
+
|
34
|
+
### Component Props
|
35
|
+
|
36
|
+
| Name | Type | Default | Description |
|
37
|
+
| :--------- | :-------- | :-----: | :--------------------------------------------------------------------------------------------------------------------------------------- |
|
38
|
+
| initialTab | String | | If using the `SelectMenu.Tabs` component, you can use this prop to change the tab shown on open. By default, the first tab will be used. |
|
39
|
+
| ref | React ref | | ref to pass down to SelectMenu component |
|
40
|
+
|
41
|
+
## SelectMenu.MenuContext
|
42
|
+
|
43
|
+
SelectMenu.MenuContext is a [context object](https://reactjs.org/docs/context.html#reactcreatecontext) that exposes some helpful state values to be used via [`React.useContext`](https://reactjs.org/docs/hooks-reference.html#usecontext) in consuming applications. SelectMenu.MenuContext can only be used in components that are already wrapped in a `SelectMenu` as `SelectMenu` contains the [context provider](https://reactjs.org/docs/context.html#contextprovider).
|
44
|
+
|
45
|
+
### Values available on MenuContext
|
46
|
+
|
47
|
+
| Name | Type | Description |
|
48
|
+
| :------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------- |
|
49
|
+
| selectedTab | string | The currently selected tab |
|
50
|
+
| setSelectedTab | function | Used to update the currently selected tab state |
|
51
|
+
| open | boolean | State for open/closed status of the menu modal |
|
52
|
+
| setOpen | function | Used to update the `open` state |
|
53
|
+
| initialTab | string | Mostly used internally to pass down which tab should be set to open by default. To change this value use the `initialTab` prop on `SelectMenu`. |
|
54
|
+
|
55
|
+
### Example Usage
|
56
|
+
|
57
|
+
```jsx
|
58
|
+
import {SelectMenu, Button} from `@primer/components`
|
59
|
+
import React, {useContext} from 'react'
|
60
|
+
|
61
|
+
const MyMenu = () => {
|
62
|
+
<SelectMenu>
|
63
|
+
<MyButton />
|
64
|
+
<SelectMenu.Modal>
|
65
|
+
content
|
66
|
+
</SelectMenu.Modal>
|
67
|
+
</SelectMenu>
|
68
|
+
}
|
69
|
+
|
70
|
+
// note that we can only use the context in components that are already wrapped by SelectMenu (and thus the Context.Provider)
|
71
|
+
const MyButton = () => {
|
72
|
+
const menuContext = useContext(SelectMenu.MenuContext);
|
73
|
+
|
74
|
+
return (
|
75
|
+
<Button as="summary">{menuContext.open ? 'Open' : 'Closed'}</Button>
|
76
|
+
)
|
77
|
+
}
|
78
|
+
```
|
79
|
+
|
80
|
+
## SelectMenu.Modal
|
81
|
+
|
82
|
+
Used to wrap the content in a `SelectMenu`.
|
83
|
+
|
84
|
+
```jsx
|
85
|
+
<SelectMenu.Modal>
|
86
|
+
{/* all menu content is wrapped in the modal*/}
|
87
|
+
</SelectMenu.Modal>
|
88
|
+
```
|
89
|
+
|
90
|
+
### Right-aligned modal
|
91
|
+
|
92
|
+
Use the `align='right'` prop to align the modal to the right. Note that this only modifies alignment for the modal, and not the SelectMenu itself. You will need to wrap the SelectMenu in a relatively positioned element for this to work properly.
|
93
|
+
|
94
|
+
```jsx live
|
95
|
+
<Box position="relative" display="flex" justifyContent="flex-end">
|
96
|
+
<SelectMenu>
|
97
|
+
<Button as="summary">Projects</Button>
|
98
|
+
<SelectMenu.Modal align="right">
|
99
|
+
<SelectMenu.Header>Projects</SelectMenu.Header>
|
100
|
+
<SelectMenu.List>
|
101
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
102
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
103
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
104
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
105
|
+
</SelectMenu.List>
|
106
|
+
</SelectMenu.Modal>
|
107
|
+
</SelectMenu>
|
108
|
+
</Box>
|
109
|
+
```
|
110
|
+
|
111
|
+
### Component Props
|
112
|
+
|
113
|
+
| Prop name | Type | Default | Description |
|
114
|
+
| :-------- | :--------------- | :------ | ------------------------------------------------- |
|
115
|
+
| align | String | 'left' | Use `right` to align the select menu to the right |
|
116
|
+
| width | String or Number | 300px | Sets the modal width |
|
117
|
+
|
118
|
+
## SelectMenu.List
|
119
|
+
|
120
|
+
Used to wrap the select menu list content. All menu items **must** be wrapped in a SelectMenu.List in order for the accessbility keyboard handling to function properly. If you are using the `SelectMenu.TabPanel` you do not need to provide a `SelectMenu.List` as that component renders a `SelectMenu.List` as a wrapper.
|
121
|
+
|
122
|
+
```jsx
|
123
|
+
<SelectMenu.List>{/* all menu list items are wrapped in the list*/}</SelectMenu.List>
|
124
|
+
```
|
125
|
+
|
126
|
+
### Component Props
|
127
|
+
|
128
|
+
SelectMenu.List components do not get any additional props besides system props.
|
129
|
+
|
130
|
+
## SelectMenu.Item
|
131
|
+
|
132
|
+
Individual items in a select menu. SelectMenu.Item renders an anchor tag by default, you'll need to make sure to provide the appropriate `href`.
|
133
|
+
|
134
|
+
You can use a `button` tag instead by utilizing the [`as` prop](/core-concepts#the-as-prop). Be sure to consider [which HTML element is the right choice](https://marcysutton.com/links-vs-buttons-in-modern-web-applications) for your usage of the component.
|
135
|
+
|
136
|
+
```jsx
|
137
|
+
<SelectMenu.Item href="/link/to/thing" selected={true}>
|
138
|
+
{/* wraps an individual list item*/}
|
139
|
+
</SelectMenu.Item>
|
140
|
+
```
|
141
|
+
|
142
|
+
### System props
|
143
|
+
|
144
|
+
<Note variant="warning">
|
145
|
+
|
146
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
147
|
+
|
148
|
+
</Note>
|
149
|
+
|
150
|
+
SelectMenu components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
151
|
+
|
152
|
+
### Component Props
|
153
|
+
|
154
|
+
| Name | Type | Default | Description |
|
155
|
+
| :------- | :------- | :-----: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
156
|
+
| selected | boolean | | Used to apply styles to the selected items in the list. |
|
157
|
+
| onClick | function | | Function called when item is clicked. By default we also close the menu when items are clicked. If you would like the menu to stay open, pass an `e.preventDefault()` to your onClick handler. |
|
158
|
+
|
159
|
+
## SelectMenu.Filter
|
160
|
+
|
161
|
+
Use a `SelectMenu.Filter` to add a filter UI to your select menu. Users are expected to implement their own filtering and manage the state of the `value` prop on the input. This gives users more flexibility over the type of filtering and type of content passed into each select menu item.
|
162
|
+
|
163
|
+
```jsx live
|
164
|
+
<SelectMenu>
|
165
|
+
<Button as="summary">Projects</Button>
|
166
|
+
<SelectMenu.Modal>
|
167
|
+
<SelectMenu.Header>Filter by Project</SelectMenu.Header>
|
168
|
+
<SelectMenu.Filter placeholder="Filter projects" value="" aria-label="Filter Projects" />
|
169
|
+
<SelectMenu.List>
|
170
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
171
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
172
|
+
<SelectMenu.Divider>More Options</SelectMenu.Divider>
|
173
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
174
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
175
|
+
</SelectMenu.List>
|
176
|
+
</SelectMenu.Modal>
|
177
|
+
</SelectMenu>
|
178
|
+
```
|
179
|
+
|
180
|
+
### System Props
|
181
|
+
|
182
|
+
<Note variant="warning">
|
183
|
+
|
184
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
185
|
+
|
186
|
+
</Note>
|
187
|
+
|
188
|
+
SelectMenu.Filter components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
189
|
+
|
190
|
+
### Component Props
|
191
|
+
|
192
|
+
SelectMenu.Filter components receive all the props that the [TextInput](/TextInput) component gets.
|
193
|
+
|
194
|
+
| Name | Type | Default | Description |
|
195
|
+
| :---- | :----- | :-----: | :------------------------------------------------------------------------------------------------------------- |
|
196
|
+
| value | String | | Users of this component must provide a value for the filter input that is managed in the consuming application |
|
197
|
+
|
198
|
+
## SelectMenu.Tabs
|
199
|
+
|
200
|
+
Use `SelectMenu.Tabs` to wrap the the tab navigation and `SelectMenu.Tab` for each tab in the navigation.
|
201
|
+
|
202
|
+
`SelectMenu.TabPanel` should wrap each corresponding panel for each of the tabs. The `tabName` prop for each `SelectMenu.TabPanel` must match the name provided in the `tabName` prop on `SelectMenu.Tab`.
|
203
|
+
|
204
|
+
To set one of the tabs to be open by default, use `initialTab` on the main `SelectMenu` component. Otherwise, the first tab will be shown by default.
|
205
|
+
|
206
|
+
Each `Select.Menu` tab will need to have an `index` prop. The first tab should be at index `0`, the second at index `1` and so forth. The `index` prop is used to show the first tab by default.
|
207
|
+
|
208
|
+
If you need access to the selected tab state, you can find it in the MenuContext object exported from `SelectMenu` as `MenuContext.selectedTab`.
|
209
|
+
|
210
|
+
```jsx live
|
211
|
+
<SelectMenu>
|
212
|
+
<Button as="summary">Projects</Button>
|
213
|
+
<SelectMenu.Modal>
|
214
|
+
<SelectMenu.Header>Projects</SelectMenu.Header>
|
215
|
+
<SelectMenu.Tabs>
|
216
|
+
<SelectMenu.Tab index={0} tabName="Repository" />
|
217
|
+
<SelectMenu.Tab index={1} tabName="Organization" />
|
218
|
+
</SelectMenu.Tabs>
|
219
|
+
<SelectMenu.TabPanel tabName="Repository">
|
220
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
221
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
222
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
223
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
224
|
+
</SelectMenu.TabPanel>
|
225
|
+
<SelectMenu.TabPanel tabName="Organization">
|
226
|
+
<SelectMenu.Item href="#"> Project 2</SelectMenu.Item>
|
227
|
+
</SelectMenu.TabPanel>
|
228
|
+
<SelectMenu.Footer>Showing 3 of 3</SelectMenu.Footer>
|
229
|
+
</SelectMenu.Modal>
|
230
|
+
</SelectMenu>
|
231
|
+
```
|
232
|
+
|
233
|
+
### Component Props
|
234
|
+
|
235
|
+
SelectMenu.Tabs components do not get any additional props besides system props.
|
236
|
+
|
237
|
+
## SelectMenu.Tab
|
238
|
+
|
239
|
+
Used for each individual tab inside of a `SelectMenu.Tabs`. Be sure to set the `index` prop to correspond to the order the tab is in. The `tabName` prop should correspond to the `tabName` set on the `SelectMenu.TabPanel`.
|
240
|
+
|
241
|
+
The `onClick` prop is optional and can be used for any events or data fetching you might need to trigger on tab clicks.
|
242
|
+
|
243
|
+
```jsx
|
244
|
+
<>
|
245
|
+
<SelectMenu.Tab index={0} tabName="Repository"/>
|
246
|
+
<SelectMenu.Tab index={1} tabName="Organization"/>
|
247
|
+
</>
|
248
|
+
```
|
249
|
+
|
250
|
+
### System Props
|
251
|
+
|
252
|
+
<Note variant="warning">
|
253
|
+
|
254
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
255
|
+
|
256
|
+
</Note>
|
257
|
+
|
258
|
+
SelectMenu.Tab components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
259
|
+
|
260
|
+
### Component Props
|
261
|
+
|
262
|
+
| Name | Type | Default | Description |
|
263
|
+
| :------ | :------- | :-----: | :------------------------------------------------------------------------------------------------------------------------- |
|
264
|
+
| tabName | String | | Used to identify the corresponding tab. Must match the string used in the `tabs` array in the `SelectMenu.Tabs` component. |
|
265
|
+
| index | Number | | The index at which the tab is in the list of tabs |
|
266
|
+
| onClick | Function | | Function to be called when the tab is clicked. Optional. |
|
267
|
+
|
268
|
+
## SelectMenu.TabPanel
|
269
|
+
|
270
|
+
Wraps the content for each tab. Make sure to use the `tabName` prop to identify each tab panel with the correct tab in the tab navigation.
|
271
|
+
|
272
|
+
**Note**: SelectMenu.TabPanel wraps content in a SelectMenu.List, so adding a SelectMenu.List manually is not necessary.
|
273
|
+
|
274
|
+
```jsx
|
275
|
+
<SelectMenu.TabPanel tabName="Repository">{/* Wraps content for each tab */}</SelectMenu.TabPanel>
|
276
|
+
```
|
277
|
+
|
278
|
+
### System Props
|
279
|
+
|
280
|
+
<Note variant="warning">
|
281
|
+
|
282
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
283
|
+
|
284
|
+
</Note>
|
285
|
+
|
286
|
+
SelectMenu.TabPanel components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
287
|
+
|
288
|
+
### Component Props
|
289
|
+
|
290
|
+
| Name | Type | Default | Description |
|
291
|
+
| :------ | :----- | :-----: | :------------------------------------------------------------------------------------------------------------------------- |
|
292
|
+
| tabName | String | | Used to identify the corresponding tab. Must match the string used in the `tabs` array in the `SelectMenu.Tabs` component. |
|
293
|
+
|
294
|
+
## SelectMenu.Divider
|
295
|
+
|
296
|
+
Use a `SelectMenu.Divider` to add information between items in a `SelectMenu.List`.
|
297
|
+
|
298
|
+
```jsx live
|
299
|
+
<SelectMenu>
|
300
|
+
<Button as="summary">Projects</Button>
|
301
|
+
<SelectMenu.Modal>
|
302
|
+
<SelectMenu.Header>Projects</SelectMenu.Header>
|
303
|
+
<SelectMenu.List>
|
304
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
305
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
306
|
+
<SelectMenu.Divider>More Options</SelectMenu.Divider>
|
307
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
308
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
309
|
+
</SelectMenu.List>
|
310
|
+
</SelectMenu.Modal>
|
311
|
+
</SelectMenu>
|
312
|
+
```
|
313
|
+
|
314
|
+
### System Props
|
315
|
+
|
316
|
+
<Note variant="warning">
|
317
|
+
|
318
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
319
|
+
|
320
|
+
</Note>
|
321
|
+
|
322
|
+
SelectMenu.Divder components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
323
|
+
|
324
|
+
### Component Props
|
325
|
+
|
326
|
+
SelectMenu.Divider components do not get any additional props besides system props.
|
327
|
+
|
328
|
+
## SelectMenu.Footer
|
329
|
+
|
330
|
+
Use a `SelectMenu.Footer` to add content to the bottom of the select menu.
|
331
|
+
|
332
|
+
```jsx live
|
333
|
+
<SelectMenu>
|
334
|
+
<Button as="summary">Projects</Button>
|
335
|
+
<SelectMenu.Modal>
|
336
|
+
<SelectMenu.Header>Projects</SelectMenu.Header>
|
337
|
+
<SelectMenu.List>
|
338
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
339
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
340
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
341
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
342
|
+
<SelectMenu.Footer>Use ⌥ + click/return to exclude labels.</SelectMenu.Footer>
|
343
|
+
</SelectMenu.List>
|
344
|
+
</SelectMenu.Modal>
|
345
|
+
</SelectMenu>
|
346
|
+
```
|
347
|
+
|
348
|
+
### System Props
|
349
|
+
|
350
|
+
<Note variant="warning">
|
351
|
+
|
352
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
353
|
+
|
354
|
+
</Note>
|
355
|
+
|
356
|
+
SelectMenu.Footer components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
357
|
+
|
358
|
+
### Component Props
|
359
|
+
|
360
|
+
SelectMenu.Footer components do not get any additional props besides system props.
|
361
|
+
|
362
|
+
## SelectMenu.Header
|
363
|
+
|
364
|
+
Use a `SelectMenu.Header` to add a header to the top of the select menu content.
|
365
|
+
|
366
|
+
```jsx live
|
367
|
+
<SelectMenu>
|
368
|
+
<Button as="summary">Projects</Button>
|
369
|
+
<SelectMenu.Modal>
|
370
|
+
<SelectMenu.Header>Projects</SelectMenu.Header>
|
371
|
+
<SelectMenu.List>
|
372
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
373
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
374
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
375
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
376
|
+
<SelectMenu.Footer>Use ⌥ + click/return to exclude labels.</SelectMenu.Footer>
|
377
|
+
</SelectMenu.List>
|
378
|
+
</SelectMenu.Modal>
|
379
|
+
</SelectMenu>
|
380
|
+
```
|
381
|
+
|
382
|
+
### System Props
|
383
|
+
|
384
|
+
<Note variant="warning">
|
385
|
+
|
386
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
387
|
+
|
388
|
+
</Note>
|
389
|
+
|
390
|
+
SelectMenu.Header components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
391
|
+
|
392
|
+
### Component Props
|
393
|
+
|
394
|
+
SelectMenu.Header components do not get any additional props besides system props.
|
395
|
+
|
396
|
+
## SelectMenu.LoadingAnimation
|
397
|
+
|
398
|
+
Use a `SelectMenu.LoadingAnimation` to add a loading animation inside of the SelectMenu.
|
399
|
+
|
400
|
+
**Note**: You will need to handle showing/hiding the appropriate modal content for your application during the loading state. We recommend always showing the `SelectMenu.Filter` and `SelectMenu.Header` (if used) and hiding the rest of the modal content during the loading state.
|
401
|
+
|
402
|
+
```jsx live
|
403
|
+
<SelectMenu>
|
404
|
+
<Button as="summary">Projects</Button>
|
405
|
+
<SelectMenu.Modal>
|
406
|
+
<SelectMenu.Header>Projects</SelectMenu.Header>
|
407
|
+
<SelectMenu.Filter placeholder="Filter projects" value="" aria-label="Filter Projects" />
|
408
|
+
{true ? (
|
409
|
+
<SelectMenu.LoadingAnimation />
|
410
|
+
) : (
|
411
|
+
<SelectMenu.List>
|
412
|
+
<SelectMenu.Item href="#">Primer React bugs</SelectMenu.Item>
|
413
|
+
<SelectMenu.Item href="#">Primer React roadmap</SelectMenu.Item>
|
414
|
+
<SelectMenu.Item href="#"> Project 3</SelectMenu.Item>
|
415
|
+
<SelectMenu.Item href="#">Project 4</SelectMenu.Item>
|
416
|
+
<SelectMenu.Footer>Use ⌥ + click/return to exclude labels.</SelectMenu.Footer>
|
417
|
+
</SelectMenu.List>
|
418
|
+
)}
|
419
|
+
</SelectMenu.Modal>
|
420
|
+
</SelectMenu>
|
421
|
+
```
|
422
|
+
|
423
|
+
### System Props
|
424
|
+
|
425
|
+
<Note variant="warning">
|
426
|
+
|
427
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
428
|
+
|
429
|
+
</Note>
|
430
|
+
|
431
|
+
SelectMenu.LoadingAnimation components get `COMMON` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
432
|
+
|
433
|
+
### Component Props
|
434
|
+
|
435
|
+
SelectMenu.LoadingAnimation components do not get any additional props besides system props.
|
@@ -0,0 +1,67 @@
|
|
1
|
+
---
|
2
|
+
title: SelectPanel
|
3
|
+
status: Alpha
|
4
|
+
---
|
5
|
+
|
6
|
+
A `SelectPanel` provides an anchor that will open an overlay with a list of selectable items, and a text input to filter the selectable items
|
7
|
+
|
8
|
+
## Example
|
9
|
+
|
10
|
+
```javascript live noinline
|
11
|
+
function getColorCircle(color) {
|
12
|
+
return function () {
|
13
|
+
return (
|
14
|
+
<Box
|
15
|
+
borderWidth="1px"
|
16
|
+
borderStyle="solid"
|
17
|
+
bg={color}
|
18
|
+
borderColor={color}
|
19
|
+
width={14}
|
20
|
+
height={14}
|
21
|
+
borderRadius={10}
|
22
|
+
margin="auto"
|
23
|
+
/>
|
24
|
+
)
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
const items = [
|
29
|
+
{leadingVisual: getColorCircle('#a2eeef'), text: 'enhancement', id: 1},
|
30
|
+
{leadingVisual: getColorCircle('#d73a4a'), text: 'bug', id: 2},
|
31
|
+
{leadingVisual: getColorCircle('#0cf478'), text: 'good first issue', id: 3},
|
32
|
+
{leadingVisual: getColorCircle('#ffd78e'), text: 'design', id: 4},
|
33
|
+
{leadingVisual: getColorCircle('#ff0000'), text: 'blocker', id: 5},
|
34
|
+
{leadingVisual: getColorCircle('#a4f287'), text: 'backend', id: 6},
|
35
|
+
{leadingVisual: getColorCircle('#8dc6fc'), text: 'frontend', id: 7}
|
36
|
+
]
|
37
|
+
|
38
|
+
function DemoComponent() {
|
39
|
+
const [selected, setSelected] = React.useState([items[0], items[1]])
|
40
|
+
const [filter, setFilter] = React.useState('')
|
41
|
+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
|
42
|
+
const [open, setOpen] = React.useState(false)
|
43
|
+
|
44
|
+
return (
|
45
|
+
<SelectPanel
|
46
|
+
renderAnchor={({children, 'aria-labelledby': ariaLabelledBy, ...anchorProps}) => (
|
47
|
+
<DropdownButton aria-labelledby={` ${ariaLabelledBy}`} {...anchorProps}>
|
48
|
+
{children || 'Select Labels'}
|
49
|
+
</DropdownButton>
|
50
|
+
)}
|
51
|
+
placeholderText="Filter Labels"
|
52
|
+
open={open}
|
53
|
+
onOpenChange={setOpen}
|
54
|
+
items={filteredItems}
|
55
|
+
selected={selected}
|
56
|
+
onSelectedChange={setSelected}
|
57
|
+
onFilterChange={setFilter}
|
58
|
+
showItemDividers={true}
|
59
|
+
overlayProps={{width: 'small', height: 'xsmall'}}
|
60
|
+
/>
|
61
|
+
)
|
62
|
+
}
|
63
|
+
|
64
|
+
render(<DemoComponent />)
|
65
|
+
```
|
66
|
+
|
67
|
+
## Component props
|
@@ -0,0 +1,179 @@
|
|
1
|
+
---
|
2
|
+
title: SideNav
|
3
|
+
---
|
4
|
+
|
5
|
+
The Side Nav is a vertical list of navigational links, typically used on the left side of a page. For maximum flexibility, **SideNav elements have no default width or positioning.**
|
6
|
+
|
7
|
+
## Default example
|
8
|
+
|
9
|
+
```jsx live
|
10
|
+
<SideNav bordered maxWidth={360} aria-label="Main">
|
11
|
+
<SideNav.Link href="#account">
|
12
|
+
<Text>Account</Text>
|
13
|
+
</SideNav.Link>
|
14
|
+
<SideNav.Link href="#home" selected>
|
15
|
+
<Text>Profile</Text>
|
16
|
+
</SideNav.Link>
|
17
|
+
<SideNav.Link href="#emails">
|
18
|
+
<Text>Emails</Text>
|
19
|
+
</SideNav.Link>
|
20
|
+
<SideNav.Link href="#notifications">
|
21
|
+
<Text>Notifications</Text>
|
22
|
+
</SideNav.Link>
|
23
|
+
</SideNav>
|
24
|
+
```
|
25
|
+
|
26
|
+
Different kinds of content can be added inside a SideNav item. Use system props to further style them if needed.
|
27
|
+
|
28
|
+
## Full variant
|
29
|
+
|
30
|
+
Add the `variant='full'` prop to a `SideNav.Link` to spread child elements across the link, which is useful for status icons, labels, and the like.
|
31
|
+
|
32
|
+
```jsx live
|
33
|
+
<SideNav bordered maxWidth={360} aria-label="Main">
|
34
|
+
<SideNav.Link href="#url">
|
35
|
+
<Text>Text Only</Text>
|
36
|
+
</SideNav.Link>
|
37
|
+
<SideNav.Link href="#url">
|
38
|
+
<Avatar size={16} mr={2} src="https://avatars.githubusercontent.com/hubot?s=32" />
|
39
|
+
<Text>With an avatar</Text>
|
40
|
+
</SideNav.Link>
|
41
|
+
<SideNav.Link href="#url">
|
42
|
+
<StyledOcticon sx={{mr: 2}} size={16} icon={ZapIcon} />
|
43
|
+
<Text>With an Octicon</Text>
|
44
|
+
</SideNav.Link>
|
45
|
+
<SideNav.Link href="#url" variant="full" selected>
|
46
|
+
<Text>With a status icon</Text>
|
47
|
+
<StyledOcticon sx={{mr: 2}} size={16} icon={DotIcon} color="success.fg" />
|
48
|
+
</SideNav.Link>
|
49
|
+
<SideNav.Link href="#url" variant="full">
|
50
|
+
<Text>With a label</Text>
|
51
|
+
<Label outline>label</Label>
|
52
|
+
</SideNav.Link>
|
53
|
+
<SideNav.Link href="#url" variant="full">
|
54
|
+
<Text>With a counter</Text>
|
55
|
+
<CounterLabel>16</CounterLabel>
|
56
|
+
</SideNav.Link>
|
57
|
+
<SideNav.Link href="#url">
|
58
|
+
<Heading as="h5" sx={{fontSize: 1}}>
|
59
|
+
A heading
|
60
|
+
</Heading>
|
61
|
+
<Text>and some more content</Text>
|
62
|
+
</SideNav.Link>
|
63
|
+
</SideNav>
|
64
|
+
```
|
65
|
+
|
66
|
+
## Lightweight variant
|
67
|
+
|
68
|
+
Add the `variant="lightweight"` prop to `SideNav` to render an alternative, more lightweight version that has items with no borders and are more condensed.
|
69
|
+
|
70
|
+
```jsx live
|
71
|
+
<Box
|
72
|
+
borderWidth="1px"
|
73
|
+
borderStyle="solid"
|
74
|
+
borderColor="border.default"
|
75
|
+
borderRadius={2}
|
76
|
+
p={3}
|
77
|
+
backgroundColor="canvas.subtle"
|
78
|
+
maxWidth={360}
|
79
|
+
>
|
80
|
+
<Box
|
81
|
+
borderStyle="solid"
|
82
|
+
borderColor="border.default"
|
83
|
+
borderWidth={0}
|
84
|
+
borderBottomWidth={1}
|
85
|
+
borderRadius={0}
|
86
|
+
mb={2}
|
87
|
+
pb={1}
|
88
|
+
>
|
89
|
+
<Heading as="h5" fontSize={1} color="fg.muted">
|
90
|
+
Menu
|
91
|
+
</Heading>
|
92
|
+
</Box>
|
93
|
+
<SideNav variant="lightweight">
|
94
|
+
<SideNav.Link href="#url">
|
95
|
+
<Text>Account</Text>
|
96
|
+
</SideNav.Link>
|
97
|
+
<SideNav.Link href="#url" selected>
|
98
|
+
<Text>Profile</Text>
|
99
|
+
</SideNav.Link>
|
100
|
+
<SideNav.Link href="#url">
|
101
|
+
<Text>Emails</Text>
|
102
|
+
</SideNav.Link>
|
103
|
+
<SideNav.Link href="#url">
|
104
|
+
<Text>Notifications</Text>
|
105
|
+
</SideNav.Link>
|
106
|
+
</SideNav>
|
107
|
+
</Box>
|
108
|
+
```
|
109
|
+
|
110
|
+
It can also appear nested, as a sub navigation. Use margin/padding [System Props](/system-props) to add indentation.
|
111
|
+
|
112
|
+
```jsx live
|
113
|
+
<SideNav bordered maxWidth={360}>
|
114
|
+
<SideNav.Link href="#url">
|
115
|
+
<StyledOcticon mr={2} size={16} icon={PersonIcon} />
|
116
|
+
<Text>Account</Text>
|
117
|
+
</SideNav.Link>
|
118
|
+
<SideNav.Link href="#url" selected>
|
119
|
+
<StyledOcticon mr={2} size={16} icon={OctofaceIcon} />
|
120
|
+
<Text>Profile</Text>
|
121
|
+
</SideNav.Link>
|
122
|
+
|
123
|
+
<SideNav bordered variant="lightweight" py={3} pl={6} backgroundColor="sidenav.selectedBg">
|
124
|
+
<SideNav.Link href="#url" selected>
|
125
|
+
<Text>Sub item 1</Text>
|
126
|
+
</SideNav.Link>
|
127
|
+
<SideNav.Link href="#url">
|
128
|
+
<Text>Sub item 2</Text>
|
129
|
+
</SideNav.Link>
|
130
|
+
<SideNav.Link href="#url">
|
131
|
+
<Text>Sub item 3</Text>
|
132
|
+
</SideNav.Link>
|
133
|
+
</SideNav>
|
134
|
+
|
135
|
+
<SideNav.Link href="#url">
|
136
|
+
<StyledOcticon mr={2} size={16} icon={MailIcon} />
|
137
|
+
<Text>Emails</Text>
|
138
|
+
</SideNav.Link>
|
139
|
+
</SideNav>
|
140
|
+
```
|
141
|
+
|
142
|
+
## Usage with React Router
|
143
|
+
|
144
|
+
If using React Router, you can use the `as` prop to render the element as a `NavLink`. React Router will automatically handle setting `aria-current="page"` for you.
|
145
|
+
|
146
|
+
```
|
147
|
+
<SideNav.Link as={NavLink} to="...">...</SideNav.Link>
|
148
|
+
```
|
149
|
+
|
150
|
+
## System props
|
151
|
+
|
152
|
+
<Note variant="warning">
|
153
|
+
|
154
|
+
System props are deprecated in all components except [Box](/Box). Please use the [`sx` prop](/overriding-styles) instead.
|
155
|
+
|
156
|
+
</Note>
|
157
|
+
|
158
|
+
`SideNav` components get `COMMON`, `BORDER`, `LAYOUT`, and `FLEX` system props. `SideNav.Link` components get `COMMON` and `TYPOGRAPHY` system props. Read our [System Props](/system-props) doc page for a full list of available props.
|
159
|
+
|
160
|
+
## Component props
|
161
|
+
|
162
|
+
### SideNav
|
163
|
+
|
164
|
+
| Name | Type | Default | Description |
|
165
|
+
| :------- | :------ | :------: | :----------------------------------------------------------------------------- |
|
166
|
+
| as | String | 'nav' | Sets the HTML tag for the component. |
|
167
|
+
| bordered | Boolean | false | Renders the component with a border. |
|
168
|
+
| variant | String | 'normal' | Set to `lightweight` to render [in a lightweight style](#lightweight-variant). |
|
169
|
+
|
170
|
+
### SideNav.Link
|
171
|
+
|
172
|
+
| Name | Type | Default | Description |
|
173
|
+
| :-------- | :------ | :------: | :------------------------------------------------------------------------------------------------ |
|
174
|
+
| as | String | 'a' | Sets the HTML tag for the component. |
|
175
|
+
| href | String | | URL to be used for the Link |
|
176
|
+
| muted | Boolean | false | Uses a less prominent shade for Link color, and the default link shade on hover |
|
177
|
+
| selected | Boolean | false | Sets the link as selected, giving it a different style and setting the `aria-current` attribute. |
|
178
|
+
| underline | Boolean | false | Adds underline to the Link |
|
179
|
+
| variant | String | 'normal' | Set to `full` to render [a full variant](#full-variant), suitable for including icons and labels. |
|