@primer/components 32.0.1 → 32.0.2-rc.859381a1
Sign up to get free protection for your applications and to get access to all the features.
- 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 +9 -0
- package/.storybook/preview.js +117 -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 +6 -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.map +1 -1
- 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/ActionList2.mdx +359 -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.mdx +96 -0
- package/docs/content/BranchName.md +18 -0
- package/docs/content/Breadcrumbs.md +47 -0
- package/docs/content/Buttons.md +46 -0
- package/docs/content/CircleBadge.md +35 -0
- package/docs/content/CircleOcticon.md +18 -0
- package/docs/content/CounterLabel.md +22 -0
- package/docs/content/Details.md +105 -0
- package/docs/content/Dialog.md +105 -0
- package/docs/content/Dialog2.mdx +180 -0
- package/docs/content/Dropdown.md +65 -0
- package/docs/content/DropdownMenu.mdx +49 -0
- package/docs/content/FilterList.md +37 -0
- package/docs/content/FilteredSearch.md +32 -0
- package/docs/content/Flash.md +35 -0
- package/docs/content/Flex.md +58 -0
- package/docs/content/FormGroup.md +38 -0
- package/docs/content/Grid.md +59 -0
- package/docs/content/Header.md +77 -0
- package/docs/content/Heading.md +22 -0
- package/docs/content/Label.md +49 -0
- package/docs/content/LabelGroup.md +21 -0
- package/docs/content/Link.md +28 -0
- package/docs/content/Overlay.mdx +85 -0
- package/docs/content/Pagehead.md +18 -0
- package/docs/content/Pagination.md +178 -0
- package/docs/content/PointerBox.md +81 -0
- package/docs/content/Popover.md +129 -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 +371 -0
- package/docs/content/SelectPanel.mdx +67 -0
- package/docs/content/SideNav.md +171 -0
- package/docs/content/Spinner.mdx +32 -0
- package/docs/content/StateLabel.md +27 -0
- package/docs/content/StyledOcticon.md +27 -0
- package/docs/content/SubNav.md +100 -0
- package/docs/content/TabNav.md +42 -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 +211 -0
- package/docs/content/Timeline.md +148 -0
- package/docs/content/Token.mdx +381 -0
- package/docs/content/Tooltip.md +32 -0
- package/docs/content/Truncate.md +55 -0
- package/docs/content/UnderlineNav.md +45 -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 +272 -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 +20867 -0
- package/docs/package.json +36 -0
- package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +21 -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 +73 -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/component-checklist.js +81 -0
- package/docs/src/props.js +77 -0
- package/jest.config.js +13 -0
- package/lib/Overlay.d.ts +5 -3
- 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__/ActionList2.test.d.ts +1 -0
- package/lib/__tests__/ActionList2.test.js +53 -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 +162 -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 +40 -0
- package/lib/__tests__/Breadcrumbs.types.test.d.ts +3 -0
- package/lib/__tests__/Breadcrumbs.types.test.js +25 -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 +147 -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__/CircleBadge.types.test.d.ts +3 -0
- package/lib/__tests__/CircleBadge.types.test.js +28 -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__/CounterLabel.types.test.d.ts +3 -0
- package/lib/__tests__/CounterLabel.types.test.js +28 -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__/Dialog.types.test.d.ts +3 -0
- package/lib/__tests__/Dialog.types.test.js +28 -0
- package/lib/__tests__/Dialog2.types.test.d.ts +3 -0
- package/lib/__tests__/Dialog2.types.test.js +31 -0
- package/lib/__tests__/Dropdown.test.d.ts +1 -0
- package/lib/__tests__/Dropdown.test.js +63 -0
- package/lib/__tests__/Dropdown.types.test.d.ts +3 -0
- package/lib/__tests__/Dropdown.types.test.js +31 -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__/FilterList.types.test.d.ts +3 -0
- package/lib/__tests__/FilterList.types.test.js +27 -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__/FilteredSearch.types.test.d.ts +3 -0
- package/lib/__tests__/FilteredSearch.types.test.js +28 -0
- package/lib/__tests__/Flash.test.d.ts +1 -0
- package/lib/__tests__/Flash.test.js +62 -0
- package/lib/__tests__/Flash.types.test.d.ts +3 -0
- package/lib/__tests__/Flash.types.test.js +28 -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__/FormGroup.types.test.d.ts +3 -0
- package/lib/__tests__/FormGroup.types.test.js +28 -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__/Header.types.test.d.ts +3 -0
- package/lib/__tests__/Header.types.test.js +29 -0
- package/lib/__tests__/Heading.test.d.ts +1 -0
- package/lib/__tests__/Heading.test.js +109 -0
- package/lib/__tests__/KeyPaths.types.test.d.ts +11 -0
- package/lib/__tests__/KeyPaths.types.test.js +10 -0
- package/lib/__tests__/Label.test.d.ts +1 -0
- package/lib/__tests__/Label.test.js +46 -0
- package/lib/__tests__/Label.types.test.d.ts +3 -0
- package/lib/__tests__/Label.types.test.js +28 -0
- package/lib/__tests__/LabelGroup.test.d.ts +1 -0
- package/lib/__tests__/LabelGroup.test.js +38 -0
- package/lib/__tests__/LabelGroup.types.test.d.ts +3 -0
- package/lib/__tests__/LabelGroup.types.test.js +28 -0
- package/lib/__tests__/Link.test.d.ts +1 -0
- package/lib/__tests__/Link.test.js +76 -0
- package/lib/__tests__/Link.types.test.d.ts +3 -0
- package/lib/__tests__/Link.types.test.js +28 -0
- package/lib/__tests__/Merge.types.test.d.ts +30 -0
- package/lib/__tests__/Merge.types.test.js +27 -0
- package/lib/__tests__/NewButton.test.d.ts +1 -0
- package/lib/__tests__/NewButton.test.js +95 -0
- package/lib/__tests__/Overlay.test.d.ts +1 -0
- package/lib/__tests__/Overlay.test.js +145 -0
- package/lib/__tests__/Overlay.types.test.d.ts +6 -0
- package/lib/__tests__/Overlay.types.test.js +73 -0
- package/lib/__tests__/Pagehead.test.d.ts +1 -0
- package/lib/__tests__/Pagehead.test.js +37 -0
- package/lib/__tests__/Pagehead.types.test.d.ts +3 -0
- package/lib/__tests__/Pagehead.types.test.js +28 -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__/Pagination.types.test.d.ts +3 -0
- package/lib/__tests__/Pagination.types.test.js +33 -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__/Popover.types.test.d.ts +3 -0
- package/lib/__tests__/Popover.types.test.js +27 -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__/SelectMenu.types.test.d.ts +3 -0
- package/lib/__tests__/SelectMenu.types.test.js +47 -0
- package/lib/__tests__/SelectPanel.test.d.ts +1 -0
- package/lib/__tests__/SelectPanel.test.js +80 -0
- package/lib/__tests__/SelectPanel.types.test.d.ts +3 -0
- package/lib/__tests__/SelectPanel.types.test.js +44 -0
- package/lib/__tests__/SideNav.test.d.ts +1 -0
- package/lib/__tests__/SideNav.test.js +71 -0
- package/lib/__tests__/SideNav.types.test.d.ts +3 -0
- package/lib/__tests__/SideNav.types.test.js +28 -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__/StateLabel.types.test.d.ts +3 -0
- package/lib/__tests__/StateLabel.types.test.js +28 -0
- package/lib/__tests__/StyledOcticon.test.d.ts +1 -0
- package/lib/__tests__/StyledOcticon.test.js +40 -0
- package/lib/__tests__/StyledOcticon.types.test.d.ts +3 -0
- package/lib/__tests__/StyledOcticon.types.test.js +32 -0
- package/lib/__tests__/SubNav.test.d.ts +1 -0
- package/lib/__tests__/SubNav.test.js +62 -0
- package/lib/__tests__/SubNav.types.test.d.ts +3 -0
- package/lib/__tests__/SubNav.types.test.js +27 -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__/TabNav.types.test.d.ts +3 -0
- package/lib/__tests__/TabNav.types.test.js +25 -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 +572 -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__/Timeline.types.test.d.ts +3 -0
- package/lib/__tests__/Timeline.types.test.js +31 -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__/Tooltip.types.test.d.ts +3 -0
- package/lib/__tests__/Tooltip.types.test.js +28 -0
- package/lib/__tests__/Truncate.test.d.ts +1 -0
- package/lib/__tests__/Truncate.test.js +63 -0
- package/lib/__tests__/Truncate.types.test.d.ts +3 -0
- package/lib/__tests__/Truncate.types.test.js +31 -0
- package/lib/__tests__/UnderlineNav.test.d.ts +1 -0
- package/lib/__tests__/UnderlineNav.test.js +72 -0
- package/lib/__tests__/UnderlineNav.types.test.d.ts +3 -0
- package/lib/__tests__/UnderlineNav.types.test.js +25 -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/__tests__/utils/createSlots.test.d.ts +1 -0
- package/lib/__tests__/utils/createSlots.test.js +75 -0
- package/lib/stories/ActionList.stories.js +454 -0
- package/lib/stories/ActionList2.stories.js +909 -0
- package/lib/stories/ActionMenu.stories.js +348 -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 +119 -0
- package/lib/stories/Dialog.stories.js +269 -0
- package/lib/stories/DropdownMenu.stories.js +122 -0
- package/lib/stories/IssueLabelToken.stories.js +165 -0
- package/lib/stories/NewButton.stories.js +230 -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/TextInput.stories.js +144 -0
- package/lib/stories/TextInputWithTokens.stories.js +252 -0
- package/lib/stories/ThemeProvider.stories.js +102 -0
- package/lib/stories/Token.stories.js +176 -0
- package/lib/stories/useAnchoredPosition.stories.js +351 -0
- package/lib/stories/useFocusTrap.stories.js +360 -0
- package/lib/stories/useFocusZone.stories.js +607 -0
- package/lib-esm/Overlay.d.ts +5 -3
- 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__/ActionList2.test.d.ts +1 -0
- package/lib-esm/__tests__/ActionList2.test.js +41 -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 +136 -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 +30 -0
- package/lib-esm/__tests__/Breadcrumbs.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Breadcrumbs.types.test.js +12 -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 +137 -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__/CircleBadge.types.test.d.ts +3 -0
- package/lib-esm/__tests__/CircleBadge.types.test.js +13 -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__/CounterLabel.types.test.d.ts +3 -0
- package/lib-esm/__tests__/CounterLabel.types.test.js +13 -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__/Dialog.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Dialog.types.test.js +13 -0
- package/lib-esm/__tests__/Dialog2.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Dialog2.types.test.js +16 -0
- package/lib-esm/__tests__/Dropdown.test.d.ts +1 -0
- package/lib-esm/__tests__/Dropdown.test.js +53 -0
- package/lib-esm/__tests__/Dropdown.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Dropdown.types.test.js +17 -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__/FilterList.types.test.d.ts +3 -0
- package/lib-esm/__tests__/FilterList.types.test.js +13 -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__/FilteredSearch.types.test.d.ts +3 -0
- package/lib-esm/__tests__/FilteredSearch.types.test.js +13 -0
- package/lib-esm/__tests__/Flash.test.d.ts +1 -0
- package/lib-esm/__tests__/Flash.test.js +51 -0
- package/lib-esm/__tests__/Flash.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Flash.types.test.js +13 -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__/FormGroup.types.test.d.ts +3 -0
- package/lib-esm/__tests__/FormGroup.types.test.js +13 -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__/Header.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Header.types.test.js +15 -0
- package/lib-esm/__tests__/Heading.test.d.ts +1 -0
- package/lib-esm/__tests__/Heading.test.js +99 -0
- package/lib-esm/__tests__/KeyPaths.types.test.d.ts +11 -0
- package/lib-esm/__tests__/KeyPaths.types.test.js +3 -0
- package/lib-esm/__tests__/Label.test.d.ts +1 -0
- package/lib-esm/__tests__/Label.test.js +36 -0
- package/lib-esm/__tests__/Label.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Label.types.test.js +13 -0
- package/lib-esm/__tests__/LabelGroup.test.d.ts +1 -0
- package/lib-esm/__tests__/LabelGroup.test.js +26 -0
- package/lib-esm/__tests__/LabelGroup.types.test.d.ts +3 -0
- package/lib-esm/__tests__/LabelGroup.types.test.js +13 -0
- package/lib-esm/__tests__/Link.test.d.ts +1 -0
- package/lib-esm/__tests__/Link.test.js +66 -0
- package/lib-esm/__tests__/Link.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Link.types.test.js +13 -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__/NewButton.test.d.ts +1 -0
- package/lib-esm/__tests__/NewButton.test.js +84 -0
- package/lib-esm/__tests__/Overlay.test.d.ts +1 -0
- package/lib-esm/__tests__/Overlay.test.js +123 -0
- package/lib-esm/__tests__/Overlay.types.test.d.ts +6 -0
- package/lib-esm/__tests__/Overlay.types.test.js +49 -0
- package/lib-esm/__tests__/Pagehead.test.d.ts +1 -0
- package/lib-esm/__tests__/Pagehead.test.js +26 -0
- package/lib-esm/__tests__/Pagehead.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Pagehead.types.test.js +13 -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__/Pagination.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Pagination.types.test.js +18 -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__/Popover.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Popover.types.test.js +13 -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__/SelectMenu.types.test.d.ts +3 -0
- package/lib-esm/__tests__/SelectMenu.types.test.js +33 -0
- package/lib-esm/__tests__/SelectPanel.test.d.ts +1 -0
- package/lib-esm/__tests__/SelectPanel.test.js +65 -0
- package/lib-esm/__tests__/SelectPanel.types.test.d.ts +3 -0
- package/lib-esm/__tests__/SelectPanel.types.test.js +29 -0
- package/lib-esm/__tests__/SideNav.test.d.ts +1 -0
- package/lib-esm/__tests__/SideNav.test.js +60 -0
- package/lib-esm/__tests__/SideNav.types.test.d.ts +3 -0
- package/lib-esm/__tests__/SideNav.types.test.js +13 -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__/StateLabel.types.test.d.ts +3 -0
- package/lib-esm/__tests__/StateLabel.types.test.js +13 -0
- package/lib-esm/__tests__/StyledOcticon.test.d.ts +1 -0
- package/lib-esm/__tests__/StyledOcticon.test.js +29 -0
- package/lib-esm/__tests__/StyledOcticon.types.test.d.ts +3 -0
- package/lib-esm/__tests__/StyledOcticon.types.test.js +16 -0
- package/lib-esm/__tests__/SubNav.test.d.ts +1 -0
- package/lib-esm/__tests__/SubNav.test.js +50 -0
- package/lib-esm/__tests__/SubNav.types.test.d.ts +3 -0
- package/lib-esm/__tests__/SubNav.types.test.js +14 -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__/TabNav.types.test.d.ts +3 -0
- package/lib-esm/__tests__/TabNav.types.test.js +12 -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 +511 -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__/Timeline.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Timeline.types.test.js +18 -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__/Tooltip.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Tooltip.types.test.js +13 -0
- package/lib-esm/__tests__/Truncate.test.d.ts +1 -0
- package/lib-esm/__tests__/Truncate.test.js +53 -0
- package/lib-esm/__tests__/Truncate.types.test.d.ts +3 -0
- package/lib-esm/__tests__/Truncate.types.test.js +16 -0
- package/lib-esm/__tests__/UnderlineNav.test.d.ts +1 -0
- package/lib-esm/__tests__/UnderlineNav.test.js +60 -0
- package/lib-esm/__tests__/UnderlineNav.types.test.d.ts +3 -0
- package/lib-esm/__tests__/UnderlineNav.types.test.js +12 -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/__tests__/utils/createSlots.test.d.ts +1 -0
- package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
- package/lib-esm/stories/ActionList.stories.js +395 -0
- package/lib-esm/stories/ActionList2.stories.js +797 -0
- package/lib-esm/stories/ActionMenu.stories.js +303 -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 +94 -0
- package/lib-esm/stories/Dialog.stories.js +244 -0
- package/lib-esm/stories/DropdownMenu.stories.js +94 -0
- package/lib-esm/stories/IssueLabelToken.stories.js +139 -0
- package/lib-esm/stories/NewButton.stories.js +178 -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/TextInput.stories.js +117 -0
- package/lib-esm/stories/TextInputWithTokens.stories.js +210 -0
- package/lib-esm/stories/ThemeProvider.stories.js +83 -0
- package/lib-esm/stories/Token.stories.js +146 -0
- package/lib-esm/stories/useAnchoredPosition.stories.js +313 -0
- package/lib-esm/stories/useFocusTrap.stories.js +313 -0
- package/lib-esm/stories/useFocusZone.stories.js +562 -0
- package/migrating.md +250 -0
- package/now.json +17 -0
- package/package-lock.json +66509 -0
- package/package.json +1 -1
- package/rollup.config.js +36 -0
- package/script/build +21 -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 +480 -0
- package/src/ActionList/List.tsx +258 -0
- package/src/ActionList/index.ts +21 -0
- package/src/ActionList2/Description.tsx +52 -0
- package/src/ActionList2/Divider.tsx +24 -0
- package/src/ActionList2/Group.tsx +103 -0
- package/src/ActionList2/Header.tsx +58 -0
- package/src/ActionList2/Item.tsx +246 -0
- package/src/ActionList2/LinkItem.tsx +49 -0
- package/src/ActionList2/List.tsx +55 -0
- package/src/ActionList2/Selection.tsx +60 -0
- package/src/ActionList2/Visuals.tsx +76 -0
- package/src/ActionList2/index.ts +39 -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 +39 -0
- package/src/Button/ButtonBase.tsx +39 -0
- package/src/Button/ButtonClose.tsx +36 -0
- package/src/Button/ButtonDanger.tsx +42 -0
- package/src/Button/ButtonGroup.tsx +55 -0
- package/src/Button/ButtonInvisible.tsx +31 -0
- package/src/Button/ButtonOutline.tsx +42 -0
- package/src/Button/ButtonPrimary.tsx +40 -0
- package/src/Button/ButtonStyles.tsx +36 -0
- package/src/Button/ButtonTableList.tsx +45 -0
- package/src/Button/index.ts +16 -0
- package/src/Caret.tsx +133 -0
- package/src/CircleBadge.tsx +53 -0
- package/src/CircleOcticon.tsx +37 -0
- package/src/CounterLabel.tsx +50 -0
- package/src/Details.tsx +23 -0
- package/src/Dialog/ConfirmationDialog.tsx +184 -0
- package/src/Dialog/Dialog.tsx +444 -0
- package/src/Dialog.tsx +145 -0
- package/src/Dropdown.tsx +154 -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 +75 -0
- package/src/FilteredActionList/FilteredActionList.tsx +142 -0
- package/src/FilteredActionList/index.ts +2 -0
- package/src/FilteredSearch.tsx +27 -0
- package/src/Flash.tsx +75 -0
- package/src/Flex.tsx +15 -0
- package/src/FormGroup.tsx +24 -0
- package/src/Grid.tsx +15 -0
- package/src/Header.tsx +74 -0
- package/src/Heading.tsx +21 -0
- package/src/Label.tsx +72 -0
- package/src/LabelGroup.tsx +17 -0
- package/src/Link.tsx +42 -0
- package/src/NewButton/button-counter.tsx +15 -0
- package/src/NewButton/button.tsx +283 -0
- package/src/NewButton/index.ts +10 -0
- package/src/NewButton/types.ts +36 -0
- package/src/Overlay.tsx +203 -0
- package/src/Pagehead.tsx +16 -0
- package/src/Pagination/Pagination.tsx +212 -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 +225 -0
- package/src/Portal/Portal.tsx +97 -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 +123 -0
- package/src/SelectMenu/SelectMenuContext.tsx +9 -0
- package/src/SelectMenu/SelectMenuDivider.tsx +24 -0
- package/src/SelectMenu/SelectMenuFilter.tsx +50 -0
- package/src/SelectMenu/SelectMenuFooter.tsx +27 -0
- package/src/SelectMenu/SelectMenuHeader.tsx +48 -0
- package/src/SelectMenu/SelectMenuItem.tsx +136 -0
- package/src/SelectMenu/SelectMenuList.tsx +41 -0
- package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +25 -0
- package/src/SelectMenu/SelectMenuModal.tsx +119 -0
- package/src/SelectMenu/SelectMenuTab.tsx +87 -0
- package/src/SelectMenu/SelectMenuTabPanel.tsx +29 -0
- package/src/SelectMenu/SelectMenuTabs.tsx +43 -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 +191 -0
- package/src/Spinner.tsx +59 -0
- package/src/StateLabel.tsx +112 -0
- package/src/StyledOcticon.tsx +22 -0
- package/src/SubNav.tsx +124 -0
- package/src/TabNav.tsx +73 -0
- package/src/Text.tsx +13 -0
- package/src/TextInput.tsx +68 -0
- package/src/TextInputWithTokens.tsx +351 -0
- package/src/ThemeProvider.tsx +176 -0
- package/src/Timeline.tsx +140 -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 +31 -0
- package/src/UnderlineNav.tsx +107 -0
- package/src/_TextInputWrapper.tsx +113 -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__/ActionList2.test.tsx +47 -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__/Breadcrumbs.types.test.tsx +22 -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__/CircleBadge.types.test.tsx +11 -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__/CounterLabel.types.test.tsx +11 -0
- package/src/__tests__/Details.test.tsx +115 -0
- package/src/__tests__/Dialog.test.tsx +155 -0
- package/src/__tests__/Dialog.types.test.tsx +11 -0
- package/src/__tests__/Dialog2.types.test.tsx +11 -0
- package/src/__tests__/Dropdown.test.tsx +53 -0
- package/src/__tests__/Dropdown.types.test.tsx +21 -0
- package/src/__tests__/DropdownMenu.test.tsx +136 -0
- package/src/__tests__/FilterList.test.tsx +26 -0
- package/src/__tests__/FilterList.types.test.tsx +17 -0
- package/src/__tests__/FilterListItem.test.tsx +31 -0
- package/src/__tests__/FilteredSearch.test.tsx +26 -0
- package/src/__tests__/FilteredSearch.types.test.tsx +11 -0
- package/src/__tests__/Flash.test.tsx +45 -0
- package/src/__tests__/Flash.types.test.tsx +11 -0
- package/src/__tests__/Flex.test.tsx +58 -0
- package/src/__tests__/FormGroup.test.tsx +38 -0
- package/src/__tests__/FormGroup.types.test.tsx +11 -0
- package/src/__tests__/Grid.test.tsx +82 -0
- package/src/__tests__/Header.test.tsx +49 -0
- package/src/__tests__/Header.types.test.tsx +19 -0
- package/src/__tests__/Heading.test.tsx +91 -0
- package/src/__tests__/KeyPaths.types.test.ts +14 -0
- package/src/__tests__/Label.test.tsx +34 -0
- package/src/__tests__/Label.types.test.tsx +11 -0
- package/src/__tests__/LabelGroup.test.tsx +30 -0
- package/src/__tests__/LabelGroup.types.test.tsx +11 -0
- package/src/__tests__/Link.test.tsx +47 -0
- package/src/__tests__/Link.types.test.tsx +11 -0
- package/src/__tests__/Merge.types.test.ts +39 -0
- package/src/__tests__/NewButton.test.tsx +70 -0
- package/src/__tests__/Overlay.test.tsx +103 -0
- package/src/__tests__/Overlay.types.test.tsx +33 -0
- package/src/__tests__/Pagehead.test.tsx +23 -0
- package/src/__tests__/Pagehead.types.test.tsx +11 -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__/Pagination.types.test.tsx +11 -0
- package/src/__tests__/PointerBox.test.tsx +34 -0
- package/src/__tests__/Popover.test.tsx +68 -0
- package/src/__tests__/Popover.types.test.tsx +17 -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__/SelectMenu.types.test.tsx +37 -0
- package/src/__tests__/SelectPanel.test.tsx +63 -0
- package/src/__tests__/SelectPanel.types.test.tsx +31 -0
- package/src/__tests__/SideNav.test.tsx +62 -0
- package/src/__tests__/SideNav.types.test.tsx +11 -0
- package/src/__tests__/Spinner.test.tsx +42 -0
- package/src/__tests__/StateLabel.test.tsx +48 -0
- package/src/__tests__/StateLabel.types.test.tsx +11 -0
- package/src/__tests__/StyledOcticon.test.tsx +26 -0
- package/src/__tests__/StyledOcticon.types.test.tsx +12 -0
- package/src/__tests__/SubNav.test.tsx +50 -0
- package/src/__tests__/SubNav.types.test.tsx +25 -0
- package/src/__tests__/SubNavLink.test.tsx +31 -0
- package/src/__tests__/TabNav.test.tsx +32 -0
- package/src/__tests__/TabNav.types.test.tsx +22 -0
- package/src/__tests__/Text.test.tsx +78 -0
- package/src/__tests__/TextInput.test.tsx +49 -0
- package/src/__tests__/TextInputWithTokens.test.tsx +422 -0
- package/src/__tests__/ThemeProvider.test.tsx +441 -0
- package/src/__tests__/Timeline.test.tsx +58 -0
- package/src/__tests__/Timeline.types.test.tsx +31 -0
- package/src/__tests__/Token.test.tsx +118 -0
- package/src/__tests__/Tooltip.test.tsx +52 -0
- package/src/__tests__/Tooltip.types.test.tsx +11 -0
- package/src/__tests__/Truncate.test.tsx +43 -0
- package/src/__tests__/Truncate.types.test.tsx +11 -0
- package/src/__tests__/UnderlineNav.test.tsx +58 -0
- package/src/__tests__/UnderlineNav.types.test.tsx +22 -0
- package/src/__tests__/UnderlineNavLink.test.tsx +31 -0
- package/src/__tests__/__snapshots__/ActionList.test.tsx.snap +223 -0
- package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
- package/src/__tests__/__snapshots__/ActionMenu.test.tsx.snap +80 -0
- package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +232 -0
- package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +3888 -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 +142 -0
- package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +65 -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 +201 -0
- package/src/__tests__/__snapshots__/Dropdown.test.tsx.snap +249 -0
- package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +107 -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 +73 -0
- package/src/__tests__/__snapshots__/LabelGroup.test.tsx.snap +15 -0
- package/src/__tests__/__snapshots__/Link.test.tsx.snap +212 -0
- package/src/__tests__/__snapshots__/NewButton.test.tsx.snap +305 -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 +473 -0
- package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +124 -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 +395 -0
- package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +26 -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 +446 -0
- package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +6045 -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 +3811 -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/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
- package/src/__tests__/utils/createSlots.test.tsx +74 -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/drafts.ts +10 -0
- package/src/hooks/index.ts +11 -0
- package/src/hooks/useAnchoredPosition.ts +54 -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 +172 -0
- package/src/polyfills/eventListenerSignal.ts +66 -0
- package/src/stories/ActionList.stories.tsx +436 -0
- package/src/stories/ActionList2.stories.tsx +1291 -0
- package/src/stories/ActionMenu.stories.tsx +331 -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/NewButton.stories.tsx +201 -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/TextInput.stories.tsx +113 -0
- package/src/stories/TextInputWithTokens.stories.tsx +155 -0
- package/src/stories/ThemeProvider.stories.tsx +104 -0
- package/src/stories/Token.stories.tsx +137 -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 +24 -0
- package/src/theme-preval.js +80 -0
- package/src/theme.ts +89 -0
- package/src/utils/create-slots.tsx +96 -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/KeyPaths.ts +10 -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/use-force-update.ts +7 -0
- package/src/utils/useIsomorphicLayoutEffect.ts +10 -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,272 @@
|
|
1
|
+
---
|
2
|
+
title: Theming
|
3
|
+
description: Theming in Primer React is made possible by a theme object that defines your application's colors, spacing, fonts, and more.
|
4
|
+
---
|
5
|
+
|
6
|
+
import Code from '@primer/gatsby-theme-doctocat/src/components/code'
|
7
|
+
|
8
|
+
## ThemeProvider
|
9
|
+
|
10
|
+
To give components access to the theme object, you must add `ThemeProvider` to the root of your application:
|
11
|
+
|
12
|
+
```jsx
|
13
|
+
import {ThemeProvider} from '@primer/components'
|
14
|
+
|
15
|
+
function App() {
|
16
|
+
return (
|
17
|
+
<ThemeProvider>
|
18
|
+
<div>...</div>
|
19
|
+
</ThemeProvider>
|
20
|
+
)
|
21
|
+
}
|
22
|
+
```
|
23
|
+
|
24
|
+
`ThemeProvider` comes with a [default theme object](/theme-reference) that includes colors, spacing, fonts, etc. for building applications at GitHub.
|
25
|
+
|
26
|
+
## Customizing the theme
|
27
|
+
|
28
|
+
To customize the [default theme](/theme-reference), you can pass your custom theme to `ThemeProvider` using the `theme` prop:
|
29
|
+
|
30
|
+
```jsx
|
31
|
+
import {ThemeProvider, theme} from '@primer/components'
|
32
|
+
import deepmerge from 'deepmerge'
|
33
|
+
|
34
|
+
const customTheme = deepmerge(theme, {
|
35
|
+
fonts: {
|
36
|
+
mono: 'Monolisa, monospace'
|
37
|
+
}
|
38
|
+
})
|
39
|
+
|
40
|
+
function App() {
|
41
|
+
return (
|
42
|
+
<ThemeProvider theme={customTheme}>
|
43
|
+
<div>...</div>
|
44
|
+
</ThemeProvider>
|
45
|
+
)
|
46
|
+
}
|
47
|
+
```
|
48
|
+
|
49
|
+
Some components may break if your custom theme does not include all the same keys as the [default theme](/theme-reference). For that reason, we recommend extending the default theme using [deepmerge](https://www.npmjs.com/package/deepmerge).
|
50
|
+
|
51
|
+
## Referencing theme values
|
52
|
+
|
53
|
+
You can reference theme values in your application using [system props](/system-props), the [`sx` prop](/overriding-styles), the `themeGet` function, or the `useTheme` hook.
|
54
|
+
|
55
|
+
<Note variant="warning">
|
56
|
+
|
57
|
+
Only use `theme` objects accessed via Primer's theme context to ensure your application’s styling draws from the same theme as Primer components’ internal styling. The `sx` prop, styled system props, `themeGet`, and `useTheme` all use the theme from context.
|
58
|
+
|
59
|
+
<DoDontContainer>
|
60
|
+
<Do>
|
61
|
+
<Code className="language-jsx">
|
62
|
+
{`<Box textShadow="shadow.medium">`}
|
63
|
+
</Code>
|
64
|
+
<Caption>Use the theme from the same context as Primer.</Caption>
|
65
|
+
</Do>
|
66
|
+
<Dont>
|
67
|
+
<Code className="language-jsx">
|
68
|
+
{`import {theme} from '@primer/components'\n\n<Box textShadow={theme.shadows.shadow.medium}>`}
|
69
|
+
</Code>
|
70
|
+
<Caption>Don't style components with any other instance of theme</Caption>
|
71
|
+
</Dont>
|
72
|
+
</DoDontContainer>
|
73
|
+
|
74
|
+
</Note>
|
75
|
+
|
76
|
+
### System props and the `sx` prop
|
77
|
+
|
78
|
+
Some [system props](/system-props) and [`sx` prop](/overriding-styles) keys are theme-aware. For example, the `bg` prop maps to the `colors` theme key which means you can use the `bg` prop to reference values in the `colors` object:
|
79
|
+
|
80
|
+
```jsx
|
81
|
+
const theme = {
|
82
|
+
colors: {
|
83
|
+
canvas: {
|
84
|
+
default: '#fff'
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
function App() {
|
90
|
+
return (
|
91
|
+
<ThemeProvider theme={theme}>
|
92
|
+
<Box bg="canvas.default"></Box>
|
93
|
+
<Box sx={{bg: 'canvas.default'}}></Box>
|
94
|
+
</ThemeProvider>
|
95
|
+
)
|
96
|
+
}
|
97
|
+
```
|
98
|
+
|
99
|
+
See the [Styled System Reference Table](https://styled-system.com/table) for a complete list of mappings.
|
100
|
+
|
101
|
+
### themeGet
|
102
|
+
|
103
|
+
The `themeGet` function is a convienient way to reference theme values in styled-components template literals:
|
104
|
+
|
105
|
+
```js
|
106
|
+
import {themeGet} from '@primer/components'
|
107
|
+
import styled from 'styled-components'
|
108
|
+
|
109
|
+
const Example = styled.div`
|
110
|
+
background-color: ${themeGet('colors.canvas.default')};
|
111
|
+
`
|
112
|
+
```
|
113
|
+
|
114
|
+
### useTheme
|
115
|
+
|
116
|
+
You can use the `useTheme` hook to reference theme values from inside any function component nested under the `ThemeProvider`:
|
117
|
+
|
118
|
+
```js
|
119
|
+
import {ThemeProvider, useTheme} from '@primer/components'
|
120
|
+
|
121
|
+
function Example() {
|
122
|
+
const {theme} = useTheme()
|
123
|
+
// theme.colors.canvas.default
|
124
|
+
}
|
125
|
+
|
126
|
+
function App() {
|
127
|
+
return (
|
128
|
+
<ThemeProvider>
|
129
|
+
<Example />
|
130
|
+
</ThemeProvider>
|
131
|
+
)
|
132
|
+
}
|
133
|
+
```
|
134
|
+
|
135
|
+
<Note variant="warning">
|
136
|
+
|
137
|
+
Only use `useTheme` to reference theme values in places where it's not possible to use system props, the `sx` prop, or `themeGet`.
|
138
|
+
|
139
|
+
</Note>
|
140
|
+
|
141
|
+
## Color modes and color schemes
|
142
|
+
|
143
|
+
The terms "color mode" and "color scheme" are often used interchangeably. However, in Primer React, they are two separate (but related) concepts.
|
144
|
+
|
145
|
+
The "color mode" of an application can be either `day`, `night`, or `auto` (i.e. synced with the operating system).
|
146
|
+
|
147
|
+
A "color scheme", on the other hand, is a collection of colors that can be associated with a color mode. The [default theme](/theme-reference) includes three color schemes: `light`, `dark`, and `dark_dimmed`. By default, the `light` scheme is displayed when the application is in `day` mode and the `dark` scheme is displayed in `night` mode.
|
148
|
+
|
149
|
+
### Setting the color mode
|
150
|
+
|
151
|
+
By default, Primer React is in `day` mode. To change the color mode, use the `colorMode` prop on `ThemeProvider` or the `setColorMode` function from the `useTheme` hook:
|
152
|
+
|
153
|
+
#### `colorMode` prop
|
154
|
+
|
155
|
+
```jsx
|
156
|
+
import {ThemeProvider} from '@primer/components'
|
157
|
+
|
158
|
+
function App() {
|
159
|
+
return (
|
160
|
+
// colorMode can be "day" (default), "night", or "auto"
|
161
|
+
<ThemeProvider colorMode="auto">
|
162
|
+
<div>...</div>
|
163
|
+
</ThemeProvider>
|
164
|
+
)
|
165
|
+
}
|
166
|
+
```
|
167
|
+
|
168
|
+
#### `setColorMode` function
|
169
|
+
|
170
|
+
```jsx
|
171
|
+
import {useTheme} from '@primer/components'
|
172
|
+
|
173
|
+
function Example() {
|
174
|
+
const {setColorMode} = useTheme()
|
175
|
+
return <button onClick={() => setColorMode('auto')}>Activate auto mode</button>
|
176
|
+
}
|
177
|
+
```
|
178
|
+
|
179
|
+
### Setting color schemes
|
180
|
+
|
181
|
+
To choose which color schemes will be displayed in `day` and `night` mode, use the `dayScheme` and `nightScheme` props on `ThemeProvider` or the `setDayScheme` and `setNightScheme` functions from the `useTheme` hook:
|
182
|
+
|
183
|
+
#### `dayScheme` and `nightScheme` props
|
184
|
+
|
185
|
+
```jsx
|
186
|
+
import {ThemeProvider} from '@primer/components'
|
187
|
+
|
188
|
+
function App() {
|
189
|
+
return (
|
190
|
+
// The default theme includes `light`, `dark`, and `dark_dimmed` schemes
|
191
|
+
<ThemeProvider dayScheme="light" nightScheme="dark_dimmed">
|
192
|
+
<div>...</div>
|
193
|
+
</ThemeProvider>
|
194
|
+
)
|
195
|
+
}
|
196
|
+
```
|
197
|
+
|
198
|
+
#### `setDayScheme` and `setNightScheme` functions
|
199
|
+
|
200
|
+
```jsx
|
201
|
+
import {useTheme} from '@primer/components'
|
202
|
+
|
203
|
+
function Example() {
|
204
|
+
const {setDayScheme, setNightScheme} = useTheme()
|
205
|
+
return <button onClick={() => setNightScheme('auto')}>Activate auto mode</button>
|
206
|
+
}
|
207
|
+
```
|
208
|
+
|
209
|
+
### Customizing or adding color schemes
|
210
|
+
|
211
|
+
To customize or add color schemes, update the `colorSchemes` object in the theme:
|
212
|
+
|
213
|
+
```jsx
|
214
|
+
import {ThemeProvider, theme} from '@primer/components'
|
215
|
+
import deepmerge from 'deepmerge'
|
216
|
+
|
217
|
+
const customTheme = deepmerge(theme, {
|
218
|
+
colorSchemes: {
|
219
|
+
// Customize an existing scheme
|
220
|
+
light: {
|
221
|
+
colors: {
|
222
|
+
text: {
|
223
|
+
primary: '#f00'
|
224
|
+
}
|
225
|
+
}
|
226
|
+
},
|
227
|
+
// Add a new scheme
|
228
|
+
my_scheme_name: {
|
229
|
+
colors: {},
|
230
|
+
shadows: {}
|
231
|
+
}
|
232
|
+
}
|
233
|
+
})
|
234
|
+
|
235
|
+
function App() {
|
236
|
+
return (
|
237
|
+
<ThemeProvider theme={customTheme}>
|
238
|
+
<div>...</div>
|
239
|
+
</ThemeProvider>
|
240
|
+
)
|
241
|
+
}
|
242
|
+
```
|
243
|
+
|
244
|
+
### Creating local color scheme variables
|
245
|
+
|
246
|
+
If you need to use a color that is not defined in the theme, avoid hard coding the color value like this:
|
247
|
+
|
248
|
+
```jsx
|
249
|
+
function Example() {
|
250
|
+
return (
|
251
|
+
// BAD: #aaa may not look good in all color schemes
|
252
|
+
<Box bg="#aaa">Hello world</Box>
|
253
|
+
)
|
254
|
+
}
|
255
|
+
```
|
256
|
+
|
257
|
+
Instead, use the `useColorSchemeVar` hook to create a local variable that will update based on the active color scheme:
|
258
|
+
|
259
|
+
```jsx
|
260
|
+
import {useColorSchemeVar} from '@primer/components'
|
261
|
+
import {colors} from '@primer/primitives'
|
262
|
+
|
263
|
+
function Example() {
|
264
|
+
// GOOD: The value of `customBg` changes based on the active color scheme
|
265
|
+
const customBg = useColorSchemeVar({
|
266
|
+
light: colors.light.scale.gray[1],
|
267
|
+
dark: colors.dark.scale.gray[9],
|
268
|
+
dark_dimmed: colors.dark_dimmed.scale.gray[2]
|
269
|
+
})
|
270
|
+
return <Box bg={customBg}>Hello world</Box>
|
271
|
+
}
|
272
|
+
```
|
@@ -0,0 +1,56 @@
|
|
1
|
+
---
|
2
|
+
title: useOnEscapePress
|
3
|
+
---
|
4
|
+
|
5
|
+
`useOnEscapePress` is a simple utility Hook that calls a user-provided function when the `Escape` key is pressed. The hook sets up `keydown` event listener on `window.document` and executes the user-provided function if these conditions are met:
|
6
|
+
|
7
|
+
1. The Escape key was pressed
|
8
|
+
2. The `preventDefault` method has not yet been called on the event object.
|
9
|
+
|
10
|
+
Furthermore, unlike the normal behavior for multiple event listeners existing on the same DOM Node, if multiple `useOnEscapePress` hooks are active simultaneously, the callbacks will occur in reverse order. In other words, if a parent component and a child component both call `useOnEscapePress`, when the user presses Escape, the child component's callback will execute, followed by the parent's callback. Each callback has the chance to call `.preventDefault()` on the event to prevent further callbacks.
|
11
|
+
|
12
|
+
### Dependencies
|
13
|
+
|
14
|
+
Similar to `useCallback`, `useOnEscapePress` takes a `React.DependencyList` as its second argument. These are the dependencies used to memoize the callback. Failing to provide the correct dependency list can result in degraded performance. If this argument is omitted, we will assume that the callback is already memoized. In the example below, that memoization occurs in `DemoComponent` with a call to `React.useCallback`, so `OverlayDemo` does not need to pass a dependency list.
|
15
|
+
|
16
|
+
### Usage
|
17
|
+
|
18
|
+
```javascript live noinline
|
19
|
+
const OverlayDemo = ({onEscape, children}) => {
|
20
|
+
useOnEscapePress(onEscape)
|
21
|
+
return (
|
22
|
+
<Box height="200px">
|
23
|
+
{children}
|
24
|
+
</Box>
|
25
|
+
)
|
26
|
+
}
|
27
|
+
|
28
|
+
function DemoComponent() {
|
29
|
+
const [isOpen, setIsOpen] = React.useState(false)
|
30
|
+
const toggleOverlay = React.useCallback(() => {
|
31
|
+
setIsOpen(isOpen => !isOpen)
|
32
|
+
}, [])
|
33
|
+
const closeOverlay = React.useCallback(() => {
|
34
|
+
setIsOpen(false)
|
35
|
+
}, [])
|
36
|
+
return (
|
37
|
+
<>
|
38
|
+
<Button onClick={toggleOverlay}>toggle</Button>
|
39
|
+
{isOpen &&
|
40
|
+
<OverlayDemo onEscape={closeOverlay}>
|
41
|
+
<Button>Button One</Button>
|
42
|
+
<Button>Button Two</Button>
|
43
|
+
</OverlayDemo>}
|
44
|
+
</>
|
45
|
+
)
|
46
|
+
}
|
47
|
+
|
48
|
+
render(<DemoComponent/>)
|
49
|
+
```
|
50
|
+
|
51
|
+
#### useOnEscapePress
|
52
|
+
|
53
|
+
| Name | Type | Default | Description |
|
54
|
+
| :- | :- | :-: | :- |
|
55
|
+
| onEscape | `(event: KeyboardEvent) => void` | | Function to call when user presses the Escape key |
|
56
|
+
| callbackDependencies | `React.DependencyList` | | Array of dependencies for memoizing the given callback |
|
@@ -0,0 +1,57 @@
|
|
1
|
+
---
|
2
|
+
title: useOnOutsideClick
|
3
|
+
---
|
4
|
+
|
5
|
+
`useOnOutsideClick` is a utility Hook that calls a user provided callback function when the user clicks outside of the provided container.
|
6
|
+
|
7
|
+
You can also pass an array of `ignoredRefs` to prevent calling the callback function on additional elements on the page. This can be handy for ignoring clicks on trigger buttons that already manage the open/closed state of content.
|
8
|
+
|
9
|
+
### Usage
|
10
|
+
|
11
|
+
```jsx live
|
12
|
+
<State>
|
13
|
+
{([isOpen, setIsOpen]) => {
|
14
|
+
const containerRef = React.useRef(null)
|
15
|
+
const triggerRef = React.useRef(null)
|
16
|
+
|
17
|
+
const closeOverlay = React.useCallback(() => {
|
18
|
+
setIsOpen(false)
|
19
|
+
}, [setIsOpen])
|
20
|
+
|
21
|
+
const toggleOverlay = React.useCallback(() => {
|
22
|
+
setIsOpen(!isOpen)
|
23
|
+
}, [setIsOpen, isOpen])
|
24
|
+
|
25
|
+
useOnOutsideClick({onClickOutside: closeOverlay, containerRef, ignoreClickRefs: [triggerRef]})
|
26
|
+
|
27
|
+
return (
|
28
|
+
<>
|
29
|
+
<Button ref={triggerRef} onClick={toggleOverlay}>
|
30
|
+
toggle
|
31
|
+
</Button>
|
32
|
+
{isOpen && (
|
33
|
+
<Box
|
34
|
+
borderWidth="1px"
|
35
|
+
borderStyle="solid"
|
36
|
+
borderColor="border.default"
|
37
|
+
borderRadius={2}
|
38
|
+
height="200px"
|
39
|
+
bg="green.4"
|
40
|
+
ref={containerRef}
|
41
|
+
>
|
42
|
+
content
|
43
|
+
</Box>
|
44
|
+
)}
|
45
|
+
</>
|
46
|
+
)
|
47
|
+
}}
|
48
|
+
</State>
|
49
|
+
```
|
50
|
+
|
51
|
+
#### useOnOutsideClick settings
|
52
|
+
|
53
|
+
| Name | Type | Default | Description |
|
54
|
+
| :------------- | :-------------------------------- | :-----: | :------------------------------------------------------------------------------------------------------------------------------ |
|
55
|
+
| onOutsideClick | `function` | | Function to call when user clicks outside of the container. Usually this manages the state of the visibilitiy of the container. |
|
56
|
+
| ignoredRefs | `React.RefObject<HTMLElement> []` | | Elements outside of the container to ignore clicks on. |
|
57
|
+
| containerRef | `React.RefObject<HTMLElement>` | | Required. A ref for the containing element. |
|
@@ -0,0 +1,49 @@
|
|
1
|
+
---
|
2
|
+
title: useOpenAndCloseFocus
|
3
|
+
---
|
4
|
+
|
5
|
+
`useOpenAndCloseFocus` is a utility Hook that manages focusing an element when a component is first mounted, and returns focus to an element on the page when that component unmounts.
|
6
|
+
|
7
|
+
If no ref is passed to `inititalFocusRef` , the hook focuses the first focusable element inside of the container.
|
8
|
+
|
9
|
+
|
10
|
+
### Usage
|
11
|
+
|
12
|
+
```javascript live noinline
|
13
|
+
const Overlay = ({returnFocusRef, initialFocusRef, children}) => {
|
14
|
+
const containerRef = React.useRef(null)
|
15
|
+
useOpenAndCloseFocus({containerRef, returnFocusRef, initialFocusRef})
|
16
|
+
return (
|
17
|
+
<Box height="200px" ref={containerRef}>
|
18
|
+
{children}
|
19
|
+
</Box>
|
20
|
+
)
|
21
|
+
}
|
22
|
+
|
23
|
+
function Component() {
|
24
|
+
const returnFocusRef = React.useRef(null)
|
25
|
+
const initialFocusRef = React.useRef(null)
|
26
|
+
const [isOpen, setIsOpen] = React.useState(false)
|
27
|
+
return (
|
28
|
+
<Box sx={{'*': { ':focus' : { backgroundColor: 'red.5'}}}}>
|
29
|
+
<Button ref={returnFocusRef} onClick={() => setIsOpen(!isOpen)}>toggle</Button>
|
30
|
+
{isOpen &&
|
31
|
+
<Overlay returnFocusRef={returnFocusRef} initialFocusRef={initialFocusRef}>
|
32
|
+
<Button>Button One</Button>
|
33
|
+
<Button ref={initialFocusRef}>Button Two</Button>
|
34
|
+
</Overlay>}
|
35
|
+
</Box>
|
36
|
+
)
|
37
|
+
}
|
38
|
+
|
39
|
+
render(<Component/>)
|
40
|
+
```
|
41
|
+
|
42
|
+
|
43
|
+
#### useOpenAndCloseFocus settings
|
44
|
+
|
45
|
+
| Name | Type | Default | Description |
|
46
|
+
| :- | :- | :-: | :- |
|
47
|
+
| initialFocusRef | `React.RefObject<HTMLElement>` | | Optional. The element to focus when the container is mounted on the page. |
|
48
|
+
| returnFocusRef | `React.RefObject<HTMLElement>` | | Required. The element to focus when the container is unmounted. |
|
49
|
+
| containerRef | `React.RefObject<HTMLElement>` | | Required. A ref for the containing element. |
|
@@ -0,0 +1,62 @@
|
|
1
|
+
---
|
2
|
+
title: useOverlay
|
3
|
+
---
|
4
|
+
|
5
|
+
`useOverlay` calls all of the relevant behavior Hooks that all `Overlay` components & composite components should have and returns a ref to be passed down to the overlay's container.
|
6
|
+
|
7
|
+
These behaviors include:
|
8
|
+
|
9
|
+
- Correctly positioning the component based on the values provided to `positionSettings` and `positionDeps`.
|
10
|
+
- Trapping focus
|
11
|
+
- Calling a user provided function when the user presses `Escape`
|
12
|
+
- Calling a user provided function when the user clicks outside of the container
|
13
|
+
- Focusing the either a user provided element, or the first focusable element in the container when it is opened.
|
14
|
+
- Returning focus to an element when container is closed
|
15
|
+
|
16
|
+
**Note:** `useOverlay` and `Overlay` do not manage the open state of the overlay. We leave control of the open state up to the user. All behaviors are built with the assumption that the overlay will not be rendered on the page & fully unmounted when it is not visible. See the examples for details on how to conditionally render a component in JSX.
|
17
|
+
|
18
|
+
### Usage
|
19
|
+
|
20
|
+
```javascript live noinline
|
21
|
+
|
22
|
+
const DemoOverlay = ({onClickOutside, initialFocusRef, returnFocusRef, ignoreClickRefs, onEscape, ...rest}) => {
|
23
|
+
const overlayProps = useOverlay({returnFocusRef, onEscape, ignoreClickRefs, onClickOutside, initialFocusRef})
|
24
|
+
return <Box height="200px" bg="green.4" {...overlayProps} {...rest}/>
|
25
|
+
}
|
26
|
+
|
27
|
+
const DemoComponent = () => {
|
28
|
+
const returnFocusRef = React.useRef(null)
|
29
|
+
const initialFocusRef = React.useRef(null)
|
30
|
+
const [isOpen, setIsOpen] = React.useState(false)
|
31
|
+
const closeOverlay = () => setIsOpen(false)
|
32
|
+
return (
|
33
|
+
<>
|
34
|
+
<Button ref={returnFocusRef} onClick={() => setIsOpen(!isOpen)}>toggle</Button>
|
35
|
+
{isOpen &&
|
36
|
+
<DemoOverlay
|
37
|
+
returnFocusRef={returnFocusRef}
|
38
|
+
ignoreClickRefs={[returnFocusRef]}
|
39
|
+
initialFocusRef={initialFocusRef}
|
40
|
+
onEscape={closeOverlay}
|
41
|
+
onClickOutside={closeOverlay}
|
42
|
+
>
|
43
|
+
<Button>Button One</Button>
|
44
|
+
<Button ref={initialFocusRef}>Button Two</Button>
|
45
|
+
</DemoOverlay>}
|
46
|
+
</>
|
47
|
+
)
|
48
|
+
}
|
49
|
+
|
50
|
+
render(<DemoComponent/>)
|
51
|
+
```
|
52
|
+
|
53
|
+
|
54
|
+
#### UseOverlaySettings
|
55
|
+
|
56
|
+
| Name | Type | Required | Description |
|
57
|
+
| :- | :- | :-: | :- |
|
58
|
+
| onEscapePress | `function` | required | Function to call when user presses the Escape key |
|
59
|
+
| onOutsideClick | `function` | required | Function to call when user clicks outside of the overlay |
|
60
|
+
| ignoreClickRefs | `React.RefObject<HTMLElement> []` | optional | Refs to click clicks on in the `onOutsideClick` function, useful for ignoring clicks on elements that trigger the overlay visibility. |
|
61
|
+
| initialFocusRef | `React.RefObject<HTMLElement>` | optional | Ref to focus when overlay is mounted. |
|
62
|
+
| returnFocusRef | `React.RefObject<HTMLElement>` | required | Ref to focus when overlay is unmounted. Important for accessibility. |
|
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
title: useSafeTimeout
|
3
|
+
---
|
4
|
+
|
5
|
+
`useSafeTimeout` is a utility Hook that allows you to safely call `setTimeout` and `clearTimeout` within a component, ensuring that all timeouts are cleared when the component unmounts.
|
6
|
+
|
7
|
+
|
8
|
+
### Usage
|
9
|
+
|
10
|
+
```jsx live
|
11
|
+
<State>
|
12
|
+
{([]) => {
|
13
|
+
const {safeSetTimeout, safeClearTimeout} = useSafeTimeout()
|
14
|
+
let timeoutId = null
|
15
|
+
|
16
|
+
const handleOnClick = () => {
|
17
|
+
timeoutId = safeSetTimeout(() => window.alert('hello!'), 5000)
|
18
|
+
}
|
19
|
+
|
20
|
+
const cancelTimeout = () => {
|
21
|
+
safeClearTimeout(timeoutId)
|
22
|
+
}
|
23
|
+
|
24
|
+
return (
|
25
|
+
<>
|
26
|
+
<Button onClick={handleOnClick}>Click me</Button>
|
27
|
+
<Button onClick={cancelTimeout}>Cancel timeout</Button>
|
28
|
+
</>
|
29
|
+
)
|
30
|
+
}}
|
31
|
+
</State>
|
32
|
+
```
|
@@ -0,0 +1,30 @@
|
|
1
|
+
const path = require('path')
|
2
|
+
|
3
|
+
module.exports = {
|
4
|
+
siteMetadata: {
|
5
|
+
title: 'Primer React',
|
6
|
+
shortName: 'React',
|
7
|
+
description: 'React components for the Primer design system'
|
8
|
+
},
|
9
|
+
plugins: [
|
10
|
+
'gatsby-plugin-typescript',
|
11
|
+
{
|
12
|
+
resolve: '@primer/gatsby-theme-doctocat',
|
13
|
+
options: {
|
14
|
+
repoRootPath: '..',
|
15
|
+
defaultBranch: 'main'
|
16
|
+
}
|
17
|
+
},
|
18
|
+
{
|
19
|
+
resolve: `gatsby-plugin-alias-imports`,
|
20
|
+
options: {
|
21
|
+
alias: {
|
22
|
+
'@primer/components': path.resolve(__dirname, '../src'),
|
23
|
+
'styled-components': path.resolve(__dirname, '..', 'node_modules', 'styled-components'),
|
24
|
+
react: path.resolve(__dirname, 'node_modules', 'react')
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
],
|
29
|
+
pathPrefix: '/react'
|
30
|
+
}
|
@@ -0,0 +1,101 @@
|
|
1
|
+
const defines = require('../babel-defines')
|
2
|
+
const docgen = require('react-docgen-typescript')
|
3
|
+
const globby = require('globby')
|
4
|
+
|
5
|
+
exports.onCreateWebpackConfig = ({actions, plugins, loaders, getConfig}) => {
|
6
|
+
const config = getConfig()
|
7
|
+
// Add our `__DEV__` and `process.env.NODE_ENV` defines
|
8
|
+
config.plugins.push(plugins.define(defines[process.env.NODE_ENV || 'development']))
|
9
|
+
|
10
|
+
config.module.rules = [
|
11
|
+
...config.module.rules,
|
12
|
+
// Create a custom configuration.
|
13
|
+
{
|
14
|
+
// The new configuration is based off the original...
|
15
|
+
...loaders.js(),
|
16
|
+
test: /\.jsx?$/,
|
17
|
+
exclude: modulePath => /node_modules/.test(modulePath),
|
18
|
+
// ...except that we want to run Primer React through webpack as well.
|
19
|
+
// By default, Gatsby won't use the define plugin we added above on Primer React.
|
20
|
+
include: modulePath => /@primer\/components/.test(modulePath)
|
21
|
+
}
|
22
|
+
]
|
23
|
+
|
24
|
+
// Polyfill `path` and stub `fs` for use in the browser
|
25
|
+
// https://www.gatsbyjs.com/docs/reference/release-notes/migrating-from-v2-to-v3/#webpack-5-node-configuration-changed-nodefs-nodepath-
|
26
|
+
config.resolve = {
|
27
|
+
...config.resolve,
|
28
|
+
alias: {
|
29
|
+
...config.resolve.alias,
|
30
|
+
path: require.resolve('path-browserify')
|
31
|
+
},
|
32
|
+
fallback: {
|
33
|
+
...config.resolve.fallback,
|
34
|
+
fs: false
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
actions.replaceWebpackConfig(config)
|
39
|
+
}
|
40
|
+
|
41
|
+
exports.sourceNodes = ({actions, createNodeId, createContentDigest}) => {
|
42
|
+
const {createNode} = actions
|
43
|
+
|
44
|
+
// Extract compontent metadata from source files
|
45
|
+
const files = globby.sync(['../src/**/*.tsx'], {absolute: true})
|
46
|
+
const data = docgen.parse(files, {
|
47
|
+
savePropValueAsString: true,
|
48
|
+
propFilter: prop => {
|
49
|
+
if (prop.declarations !== undefined && prop.declarations.length > 0) {
|
50
|
+
const hasPropAdditionalDescription = prop.declarations.find(declaration => {
|
51
|
+
return !declaration.fileName.includes('node_modules')
|
52
|
+
})
|
53
|
+
|
54
|
+
return Boolean(hasPropAdditionalDescription)
|
55
|
+
}
|
56
|
+
|
57
|
+
return true
|
58
|
+
}
|
59
|
+
})
|
60
|
+
|
61
|
+
const components = data.map(component => {
|
62
|
+
return {
|
63
|
+
name: component.displayName,
|
64
|
+
description: component.description,
|
65
|
+
props: Object.values(component.props)
|
66
|
+
.map(prop => {
|
67
|
+
return {
|
68
|
+
name: prop.name,
|
69
|
+
description: prop.description,
|
70
|
+
defaultValue: prop.defaultValue ? prop.defaultValue.value : '',
|
71
|
+
required: prop.required,
|
72
|
+
type: prop.type.name
|
73
|
+
}
|
74
|
+
})
|
75
|
+
// Move required props to beginning of the list
|
76
|
+
.sort((a, b) => {
|
77
|
+
if (a.required && !b.required) return -1
|
78
|
+
if (!a.required && b.required) return 1
|
79
|
+
return 0
|
80
|
+
})
|
81
|
+
}
|
82
|
+
})
|
83
|
+
|
84
|
+
// Add component metadata to GraphQL API
|
85
|
+
for (const component of components) {
|
86
|
+
const nodeContent = JSON.stringify(component)
|
87
|
+
const nodeMeta = {
|
88
|
+
id: createNodeId(component.name),
|
89
|
+
parent: null,
|
90
|
+
children: [],
|
91
|
+
internal: {
|
92
|
+
type: `ComponentMetadata`,
|
93
|
+
mediaType: `text/html`,
|
94
|
+
content: nodeContent,
|
95
|
+
contentDigest: createContentDigest(component)
|
96
|
+
}
|
97
|
+
}
|
98
|
+
const node = Object.assign({}, component, nodeMeta)
|
99
|
+
createNode(node)
|
100
|
+
}
|
101
|
+
}
|