@primer/components 31.0.0-rc.ee65b7f1 → 31.0.0
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/CHANGELOG.md +4 -0
- package/dist/browser.esm.js +12 -7
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +12 -7
- package/dist/browser.umd.js.map +1 -1
- package/lib/ActionList/Item.js +3 -3
- package/lib/Button/Button.js +1 -1
- package/lib/Button/ButtonInvisible.js +1 -1
- package/lib/Button/ButtonTableList.js +1 -1
- package/lib/Pagination/Pagination.js +1 -1
- package/lib/_TextInputWrapper.js +1 -1
- package/lib-esm/ActionList/Item.js +3 -3
- package/lib-esm/Button/Button.js +1 -1
- package/lib-esm/Button/ButtonInvisible.js +1 -1
- package/lib-esm/Button/ButtonTableList.js +1 -1
- package/lib-esm/Pagination/Pagination.js +1 -1
- package/lib-esm/_TextInputWrapper.js +1 -1
- package/package.json +1 -1
- package/.changeset/README.md +0 -8
- package/.changeset/config.json +0 -10
- package/.devcontainer/devcontainer.json +0 -8
- package/.eslintrc.json +0 -137
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
- package/.github/ISSUE_TEMPLATE/new_component_proposal_template.md +0 -41
- package/.github/dependabot.yml +0 -18
- package/.github/pull_request_template.md +0 -18
- package/.github/workflows/ci.yml +0 -31
- package/.github/workflows/deploy_preview.yml +0 -47
- package/.github/workflows/deploy_production.yml +0 -70
- package/.github/workflows/release.yml +0 -35
- package/.github/workflows/release_canary.yml +0 -70
- package/.github/workflows/release_candidate.yml +0 -60
- package/.github/workflows/size.yml +0 -13
- package/.github/workflows/stale.yml +0 -26
- package/.gitignore +0 -10
- package/.npmrc +0 -4
- package/.nvmrc +0 -1
- package/.storybook/main.js +0 -11
- package/.storybook/preview.js +0 -113
- package/.vscode/launch.json +0 -21
- package/.vscode/settings.json +0 -13
- package/@types/@styled-system/index.d.ts +0 -0
- package/@types/@styled-system/prop-types/index.d.ts +0 -1
- package/@types/@styled-system/props/index.d.ts +0 -1
- package/@types/jest-styled-components/index.d.ts +0 -1
- package/CODEOWNERS +0 -2
- package/babel-defines.js +0 -13
- package/babel.config.js +0 -39
- package/contributor-docs/CODE_OF_CONDUCT.md +0 -76
- package/contributor-docs/CONTRIBUTING.md +0 -274
- package/contributor-docs/adrs/adr-001-typescript.md +0 -23
- package/contributor-docs/adrs/adr-002-behavior-isolation.md +0 -108
- package/contributor-docs/behaviors.md +0 -132
- package/contributor-docs/component-contents-api-patterns.md +0 -316
- package/contributor-docs/principles.md +0 -39
- package/docs/.eslintrc +0 -0
- package/docs/.gitignore +0 -91
- package/docs/components/PropsList.js +0 -5
- package/docs/components/State.js +0 -9
- package/docs/components/constants.js +0 -34
- package/docs/components/index.js +0 -2
- package/docs/content/ActionList.mdx +0 -99
- package/docs/content/ActionMenu.mdx +0 -80
- package/docs/content/AnchoredOverlay.mdx +0 -37
- package/docs/content/Autocomplete.mdx +0 -627
- package/docs/content/Avatar.mdx +0 -33
- package/docs/content/AvatarStack.mdx +0 -37
- package/docs/content/BorderBox.md +0 -46
- package/docs/content/Box.md +0 -74
- package/docs/content/BranchName.md +0 -18
- package/docs/content/Breadcrumbs.md +0 -52
- package/docs/content/Buttons.md +0 -56
- package/docs/content/CircleBadge.md +0 -45
- package/docs/content/CircleOcticon.md +0 -18
- package/docs/content/CounterLabel.md +0 -32
- package/docs/content/Details.md +0 -105
- package/docs/content/Dialog.md +0 -108
- package/docs/content/Dialog2.mdx +0 -179
- package/docs/content/Dropdown.md +0 -72
- package/docs/content/DropdownMenu.mdx +0 -49
- package/docs/content/FilterList.md +0 -44
- package/docs/content/FilteredSearch.md +0 -39
- package/docs/content/Flash.md +0 -44
- package/docs/content/Flex.md +0 -58
- package/docs/content/FormGroup.md +0 -46
- package/docs/content/Grid.md +0 -59
- package/docs/content/Header.md +0 -79
- package/docs/content/Heading.md +0 -22
- package/docs/content/Label.md +0 -42
- package/docs/content/LabelGroup.md +0 -31
- package/docs/content/Link.md +0 -37
- package/docs/content/Overlay.mdx +0 -94
- package/docs/content/Pagehead.md +0 -27
- package/docs/content/Pagination.md +0 -187
- package/docs/content/PointerBox.md +0 -81
- package/docs/content/Popover.md +0 -137
- package/docs/content/Portal.mdx +0 -78
- package/docs/content/Position.md +0 -100
- package/docs/content/ProgressBar.mdx +0 -29
- package/docs/content/SelectMenu.md +0 -435
- package/docs/content/SelectPanel.mdx +0 -67
- package/docs/content/SideNav.md +0 -179
- package/docs/content/Spinner.mdx +0 -32
- package/docs/content/StateLabel.md +0 -35
- package/docs/content/StyledOcticon.md +0 -36
- package/docs/content/SubNav.md +0 -102
- package/docs/content/TabNav.md +0 -50
- package/docs/content/Text.md +0 -31
- package/docs/content/TextInput.md +0 -34
- package/docs/content/TextInputTokens.mdx +0 -89
- package/docs/content/TextInputWithTokens.mdx +0 -97
- package/docs/content/Timeline.md +0 -138
- package/docs/content/Token.mdx +0 -381
- package/docs/content/Tooltip.md +0 -41
- package/docs/content/Truncate.md +0 -64
- package/docs/content/UnderlineNav.md +0 -53
- package/docs/content/anchoredPosition.mdx +0 -163
- package/docs/content/core-concepts.md +0 -70
- package/docs/content/focusTrap.mdx +0 -103
- package/docs/content/focusZone.mdx +0 -145
- package/docs/content/getting-started.md +0 -138
- package/docs/content/index.md +0 -33
- package/docs/content/linting.md +0 -35
- package/docs/content/overriding-styles.mdx +0 -82
- package/docs/content/philosophy.md +0 -23
- package/docs/content/primer-theme.md +0 -89
- package/docs/content/ssr.mdx +0 -43
- package/docs/content/system-props.mdx +0 -37
- package/docs/content/theme-reference.md +0 -16
- package/docs/content/theming.md +0 -249
- package/docs/content/useOnEscapePress.mdx +0 -56
- package/docs/content/useOnOutsideClick.mdx +0 -57
- package/docs/content/useOpenAndCloseFocus.mdx +0 -49
- package/docs/content/useOverlay.mdx +0 -62
- package/docs/content/useSafeTimeout.mdx +0 -32
- package/docs/gatsby-config.js +0 -30
- package/docs/gatsby-node.js +0 -101
- package/docs/package-lock.json +0 -20756
- package/docs/package.json +0 -36
- package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +0 -23
- package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +0 -41
- package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +0 -54
- package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +0 -133
- package/docs/src/@primer/gatsby-theme-doctocat/primer-components-hero.svg +0 -1411
- package/docs/src/props.js +0 -77
- package/jest.config.js +0 -13
- package/lib/__tests__/ActionList.test.d.ts +0 -1
- package/lib/__tests__/ActionList.test.js +0 -69
- package/lib/__tests__/ActionList.types.test.d.ts +0 -6
- package/lib/__tests__/ActionList.types.test.js +0 -69
- package/lib/__tests__/ActionMenu.test.d.ts +0 -1
- package/lib/__tests__/ActionMenu.test.js +0 -151
- package/lib/__tests__/AnchoredOverlay.test.d.ts +0 -1
- package/lib/__tests__/AnchoredOverlay.test.js +0 -160
- package/lib/__tests__/Autocomplete.test.d.ts +0 -1
- package/lib/__tests__/Autocomplete.test.js +0 -528
- package/lib/__tests__/Avatar.test.d.ts +0 -1
- package/lib/__tests__/Avatar.test.js +0 -67
- package/lib/__tests__/AvatarStack.test.d.ts +0 -1
- package/lib/__tests__/AvatarStack.test.js +0 -71
- package/lib/__tests__/BorderBox.test.d.ts +0 -1
- package/lib/__tests__/BorderBox.test.js +0 -58
- package/lib/__tests__/Box.test.d.ts +0 -1
- package/lib/__tests__/Box.test.js +0 -78
- package/lib/__tests__/BranchName.test.d.ts +0 -1
- package/lib/__tests__/BranchName.test.js +0 -36
- package/lib/__tests__/Breadcrumbs.test.d.ts +0 -1
- package/lib/__tests__/Breadcrumbs.test.js +0 -37
- package/lib/__tests__/BreadcrumbsItem.test.d.ts +0 -1
- package/lib/__tests__/BreadcrumbsItem.test.js +0 -49
- package/lib/__tests__/Button.test.d.ts +0 -1
- package/lib/__tests__/Button.test.js +0 -143
- package/lib/__tests__/Caret.test.d.ts +0 -1
- package/lib/__tests__/Caret.test.js +0 -52
- package/lib/__tests__/CircleBadge.test.d.ts +0 -1
- package/lib/__tests__/CircleBadge.test.js +0 -83
- package/lib/__tests__/CircleOcticon.test.d.ts +0 -1
- package/lib/__tests__/CircleOcticon.test.js +0 -71
- package/lib/__tests__/ConfirmationDialog.test.d.ts +0 -1
- package/lib/__tests__/ConfirmationDialog.test.js +0 -134
- package/lib/__tests__/CounterLabel.test.d.ts +0 -1
- package/lib/__tests__/CounterLabel.test.js +0 -58
- package/lib/__tests__/Details.test.d.ts +0 -1
- package/lib/__tests__/Details.test.js +0 -117
- package/lib/__tests__/Dialog.test.d.ts +0 -1
- package/lib/__tests__/Dialog.test.js +0 -184
- package/lib/__tests__/Dropdown.test.d.ts +0 -1
- package/lib/__tests__/Dropdown.test.js +0 -63
- package/lib/__tests__/DropdownMenu.test.d.ts +0 -1
- package/lib/__tests__/DropdownMenu.test.js +0 -150
- package/lib/__tests__/FilterList.test.d.ts +0 -1
- package/lib/__tests__/FilterList.test.js +0 -36
- package/lib/__tests__/FilterListItem.test.d.ts +0 -1
- package/lib/__tests__/FilterListItem.test.js +0 -46
- package/lib/__tests__/FilteredSearch.test.d.ts +0 -1
- package/lib/__tests__/FilteredSearch.test.js +0 -36
- package/lib/__tests__/Flash.test.d.ts +0 -1
- package/lib/__tests__/Flash.test.js +0 -62
- package/lib/__tests__/Flex.test.d.ts +0 -1
- package/lib/__tests__/Flex.test.js +0 -74
- package/lib/__tests__/FormGroup.test.d.ts +0 -1
- package/lib/__tests__/FormGroup.test.js +0 -54
- package/lib/__tests__/Grid.test.d.ts +0 -1
- package/lib/__tests__/Grid.test.js +0 -104
- package/lib/__tests__/Header.test.d.ts +0 -1
- package/lib/__tests__/Header.test.js +0 -58
- package/lib/__tests__/Heading.test.d.ts +0 -1
- package/lib/__tests__/Heading.test.js +0 -109
- package/lib/__tests__/Label.test.d.ts +0 -1
- package/lib/__tests__/Label.test.js +0 -46
- package/lib/__tests__/LabelGroup.test.d.ts +0 -1
- package/lib/__tests__/LabelGroup.test.js +0 -38
- package/lib/__tests__/Link.test.d.ts +0 -1
- package/lib/__tests__/Link.test.js +0 -70
- package/lib/__tests__/Merge.types.test.d.ts +0 -30
- package/lib/__tests__/Merge.types.test.js +0 -27
- package/lib/__tests__/Overlay.test.d.ts +0 -1
- package/lib/__tests__/Overlay.test.js +0 -145
- package/lib/__tests__/Pagehead.test.d.ts +0 -1
- package/lib/__tests__/Pagehead.test.js +0 -37
- package/lib/__tests__/Pagination/Pagination.test.d.ts +0 -1
- package/lib/__tests__/Pagination/Pagination.test.js +0 -47
- package/lib/__tests__/Pagination/PaginationModel.test.d.ts +0 -1
- package/lib/__tests__/Pagination/PaginationModel.test.js +0 -186
- package/lib/__tests__/PointerBox.test.d.ts +0 -1
- package/lib/__tests__/PointerBox.test.js +0 -46
- package/lib/__tests__/Popover.test.d.ts +0 -1
- package/lib/__tests__/Popover.test.js +0 -66
- package/lib/__tests__/Portal.test.d.ts +0 -1
- package/lib/__tests__/Portal.test.js +0 -124
- package/lib/__tests__/Position.test.d.ts +0 -1
- package/lib/__tests__/Position.test.js +0 -143
- package/lib/__tests__/ProgressBar.test.d.ts +0 -1
- package/lib/__tests__/ProgressBar.test.js +0 -68
- package/lib/__tests__/SelectMenu.test.d.ts +0 -1
- package/lib/__tests__/SelectMenu.test.js +0 -155
- package/lib/__tests__/SelectPanel.test.d.ts +0 -1
- package/lib/__tests__/SelectPanel.test.js +0 -80
- package/lib/__tests__/SideNav.test.d.ts +0 -1
- package/lib/__tests__/SideNav.test.js +0 -71
- package/lib/__tests__/Spinner.test.d.ts +0 -1
- package/lib/__tests__/Spinner.test.js +0 -53
- package/lib/__tests__/StateLabel.test.d.ts +0 -1
- package/lib/__tests__/StateLabel.test.js +0 -71
- package/lib/__tests__/StyledOcticon.test.d.ts +0 -1
- package/lib/__tests__/StyledOcticon.test.js +0 -40
- package/lib/__tests__/SubNav.test.d.ts +0 -1
- package/lib/__tests__/SubNav.test.js +0 -62
- package/lib/__tests__/SubNavLink.test.d.ts +0 -1
- package/lib/__tests__/SubNavLink.test.js +0 -49
- package/lib/__tests__/TabNav.test.d.ts +0 -1
- package/lib/__tests__/TabNav.test.js +0 -49
- package/lib/__tests__/Text.test.d.ts +0 -1
- package/lib/__tests__/Text.test.js +0 -105
- package/lib/__tests__/TextInput.test.d.ts +0 -1
- package/lib/__tests__/TextInput.test.js +0 -78
- package/lib/__tests__/TextInputWithTokens.test.d.ts +0 -1
- package/lib/__tests__/TextInputWithTokens.test.js +0 -389
- package/lib/__tests__/ThemeProvider.test.d.ts +0 -1
- package/lib/__tests__/ThemeProvider.test.js +0 -444
- package/lib/__tests__/Timeline.test.d.ts +0 -1
- package/lib/__tests__/Timeline.test.js +0 -75
- package/lib/__tests__/Token.test.d.ts +0 -1
- package/lib/__tests__/Token.test.js +0 -180
- package/lib/__tests__/Tooltip.test.d.ts +0 -1
- package/lib/__tests__/Tooltip.test.js +0 -69
- package/lib/__tests__/Truncate.test.d.ts +0 -1
- package/lib/__tests__/Truncate.test.js +0 -63
- package/lib/__tests__/UnderlineNav.test.d.ts +0 -1
- package/lib/__tests__/UnderlineNav.test.js +0 -72
- package/lib/__tests__/UnderlineNavLink.test.d.ts +0 -1
- package/lib/__tests__/UnderlineNavLink.test.js +0 -51
- package/lib/__tests__/behaviors/anchoredPosition.test.d.ts +0 -1
- package/lib/__tests__/behaviors/anchoredPosition.test.js +0 -390
- package/lib/__tests__/behaviors/focusTrap.test.d.ts +0 -1
- package/lib/__tests__/behaviors/focusTrap.test.js +0 -234
- package/lib/__tests__/behaviors/focusZone.test.d.ts +0 -1
- package/lib/__tests__/behaviors/focusZone.test.js +0 -570
- package/lib/__tests__/behaviors/iterateFocusableElements.test.d.ts +0 -1
- package/lib/__tests__/behaviors/iterateFocusableElements.test.js +0 -55
- package/lib/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +0 -1
- package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +0 -226
- package/lib/__tests__/filterObject.test.d.ts +0 -1
- package/lib/__tests__/filterObject.test.js +0 -30
- package/lib/__tests__/hooks/useAnchoredPosition.test.d.ts +0 -1
- package/lib/__tests__/hooks/useAnchoredPosition.test.js +0 -54
- package/lib/__tests__/hooks/useOnEscapePress.test.d.ts +0 -1
- package/lib/__tests__/hooks/useOnEscapePress.test.js +0 -32
- package/lib/__tests__/hooks/useOnOutsideClick.test.d.ts +0 -1
- package/lib/__tests__/hooks/useOnOutsideClick.test.js +0 -87
- package/lib/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +0 -1
- package/lib/__tests__/hooks/useOpenAndCloseFocus.test.js +0 -60
- package/lib/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +0 -1
- package/lib/__tests__/hooks/useProvidedStateOrCreate.test.js +0 -45
- package/lib/__tests__/theme.test.d.ts +0 -1
- package/lib/__tests__/theme.test.js +0 -36
- package/lib/__tests__/themeGet.test.d.ts +0 -1
- package/lib/__tests__/themeGet.test.js +0 -25
- package/lib/__tests__/useSafeTimeout.test.d.ts +0 -1
- package/lib/__tests__/useSafeTimeout.test.js +0 -45
- package/lib/stories/ActionList.stories.js +0 -453
- package/lib/stories/ActionMenu.stories.js +0 -338
- package/lib/stories/AnchoredOverlay.stories.js +0 -127
- package/lib/stories/Autocomplete.stories.js +0 -608
- package/lib/stories/AvatarStack.stories.js +0 -49
- package/lib/stories/Button.stories.js +0 -114
- package/lib/stories/ConfirmationDialog.stories.js +0 -111
- package/lib/stories/Dialog.stories.js +0 -265
- package/lib/stories/DropdownMenu.stories.js +0 -122
- package/lib/stories/IssueLabelToken.stories.js +0 -165
- package/lib/stories/Overlay.stories.js +0 -204
- package/lib/stories/Portal.stories.js +0 -104
- package/lib/stories/ProfileToken.stories.js +0 -162
- package/lib/stories/SelectPanel.stories.js +0 -399
- package/lib/stories/TextInputWithTokens.stories.js +0 -235
- package/lib/stories/ThemeProvider.stories.js +0 -102
- package/lib/stories/Token.stories.js +0 -159
- package/lib/stories/useAnchoredPosition.stories.js +0 -351
- package/lib/stories/useFocusTrap.stories.js +0 -356
- package/lib/stories/useFocusZone.stories.js +0 -599
- package/lib-esm/__tests__/ActionList.test.d.ts +0 -1
- package/lib-esm/__tests__/ActionList.test.js +0 -57
- package/lib-esm/__tests__/ActionList.types.test.d.ts +0 -6
- package/lib-esm/__tests__/ActionList.types.test.js +0 -45
- package/lib-esm/__tests__/ActionMenu.test.d.ts +0 -1
- package/lib-esm/__tests__/ActionMenu.test.js +0 -139
- package/lib-esm/__tests__/AnchoredOverlay.test.d.ts +0 -1
- package/lib-esm/__tests__/AnchoredOverlay.test.js +0 -134
- package/lib-esm/__tests__/Autocomplete.test.d.ts +0 -1
- package/lib-esm/__tests__/Autocomplete.test.js +0 -494
- package/lib-esm/__tests__/Avatar.test.d.ts +0 -1
- package/lib-esm/__tests__/Avatar.test.js +0 -56
- package/lib-esm/__tests__/AvatarStack.test.d.ts +0 -1
- package/lib-esm/__tests__/AvatarStack.test.js +0 -58
- package/lib-esm/__tests__/BorderBox.test.d.ts +0 -1
- package/lib-esm/__tests__/BorderBox.test.js +0 -47
- package/lib-esm/__tests__/Box.test.d.ts +0 -1
- package/lib-esm/__tests__/Box.test.js +0 -67
- package/lib-esm/__tests__/BranchName.test.d.ts +0 -1
- package/lib-esm/__tests__/BranchName.test.js +0 -26
- package/lib-esm/__tests__/Breadcrumbs.test.d.ts +0 -1
- package/lib-esm/__tests__/Breadcrumbs.test.js +0 -27
- package/lib-esm/__tests__/BreadcrumbsItem.test.d.ts +0 -1
- package/lib-esm/__tests__/BreadcrumbsItem.test.js +0 -39
- package/lib-esm/__tests__/Button.test.d.ts +0 -1
- package/lib-esm/__tests__/Button.test.js +0 -133
- package/lib-esm/__tests__/Caret.test.d.ts +0 -1
- package/lib-esm/__tests__/Caret.test.js +0 -42
- package/lib-esm/__tests__/CircleBadge.test.d.ts +0 -1
- package/lib-esm/__tests__/CircleBadge.test.js +0 -70
- package/lib-esm/__tests__/CircleOcticon.test.d.ts +0 -1
- package/lib-esm/__tests__/CircleOcticon.test.js +0 -59
- package/lib-esm/__tests__/ConfirmationDialog.test.d.ts +0 -1
- package/lib-esm/__tests__/ConfirmationDialog.test.js +0 -113
- package/lib-esm/__tests__/CounterLabel.test.d.ts +0 -1
- package/lib-esm/__tests__/CounterLabel.test.js +0 -47
- package/lib-esm/__tests__/Details.test.d.ts +0 -1
- package/lib-esm/__tests__/Details.test.js +0 -107
- package/lib-esm/__tests__/Dialog.test.d.ts +0 -1
- package/lib-esm/__tests__/Dialog.test.js +0 -171
- package/lib-esm/__tests__/Dropdown.test.d.ts +0 -1
- package/lib-esm/__tests__/Dropdown.test.js +0 -53
- package/lib-esm/__tests__/DropdownMenu.test.d.ts +0 -1
- package/lib-esm/__tests__/DropdownMenu.test.js +0 -137
- package/lib-esm/__tests__/FilterList.test.d.ts +0 -1
- package/lib-esm/__tests__/FilterList.test.js +0 -26
- package/lib-esm/__tests__/FilterListItem.test.d.ts +0 -1
- package/lib-esm/__tests__/FilterListItem.test.js +0 -36
- package/lib-esm/__tests__/FilteredSearch.test.d.ts +0 -1
- package/lib-esm/__tests__/FilteredSearch.test.js +0 -26
- package/lib-esm/__tests__/Flash.test.d.ts +0 -1
- package/lib-esm/__tests__/Flash.test.js +0 -51
- package/lib-esm/__tests__/Flex.test.d.ts +0 -1
- package/lib-esm/__tests__/Flex.test.js +0 -64
- package/lib-esm/__tests__/FormGroup.test.d.ts +0 -1
- package/lib-esm/__tests__/FormGroup.test.js +0 -44
- package/lib-esm/__tests__/Grid.test.d.ts +0 -1
- package/lib-esm/__tests__/Grid.test.js +0 -94
- package/lib-esm/__tests__/Header.test.d.ts +0 -1
- package/lib-esm/__tests__/Header.test.js +0 -48
- package/lib-esm/__tests__/Heading.test.d.ts +0 -1
- package/lib-esm/__tests__/Heading.test.js +0 -99
- package/lib-esm/__tests__/Label.test.d.ts +0 -1
- package/lib-esm/__tests__/Label.test.js +0 -36
- package/lib-esm/__tests__/LabelGroup.test.d.ts +0 -1
- package/lib-esm/__tests__/LabelGroup.test.js +0 -26
- package/lib-esm/__tests__/Link.test.d.ts +0 -1
- package/lib-esm/__tests__/Link.test.js +0 -60
- package/lib-esm/__tests__/Merge.types.test.d.ts +0 -30
- package/lib-esm/__tests__/Merge.types.test.js +0 -14
- package/lib-esm/__tests__/Overlay.test.d.ts +0 -1
- package/lib-esm/__tests__/Overlay.test.js +0 -123
- package/lib-esm/__tests__/Pagehead.test.d.ts +0 -1
- package/lib-esm/__tests__/Pagehead.test.js +0 -26
- package/lib-esm/__tests__/Pagination/Pagination.test.d.ts +0 -1
- package/lib-esm/__tests__/Pagination/Pagination.test.js +0 -35
- package/lib-esm/__tests__/Pagination/PaginationModel.test.d.ts +0 -1
- package/lib-esm/__tests__/Pagination/PaginationModel.test.js +0 -182
- package/lib-esm/__tests__/PointerBox.test.d.ts +0 -1
- package/lib-esm/__tests__/PointerBox.test.js +0 -36
- package/lib-esm/__tests__/Popover.test.d.ts +0 -1
- package/lib-esm/__tests__/Popover.test.js +0 -53
- package/lib-esm/__tests__/Portal.test.d.ts +0 -1
- package/lib-esm/__tests__/Portal.test.js +0 -104
- package/lib-esm/__tests__/Position.test.d.ts +0 -1
- package/lib-esm/__tests__/Position.test.js +0 -133
- package/lib-esm/__tests__/ProgressBar.test.d.ts +0 -1
- package/lib-esm/__tests__/ProgressBar.test.js +0 -58
- package/lib-esm/__tests__/SelectMenu.test.d.ts +0 -1
- package/lib-esm/__tests__/SelectMenu.test.js +0 -145
- package/lib-esm/__tests__/SelectPanel.test.d.ts +0 -1
- package/lib-esm/__tests__/SelectPanel.test.js +0 -65
- package/lib-esm/__tests__/SideNav.test.d.ts +0 -1
- package/lib-esm/__tests__/SideNav.test.js +0 -60
- package/lib-esm/__tests__/Spinner.test.d.ts +0 -1
- package/lib-esm/__tests__/Spinner.test.js +0 -43
- package/lib-esm/__tests__/StateLabel.test.d.ts +0 -1
- package/lib-esm/__tests__/StateLabel.test.js +0 -61
- package/lib-esm/__tests__/StyledOcticon.test.d.ts +0 -1
- package/lib-esm/__tests__/StyledOcticon.test.js +0 -29
- package/lib-esm/__tests__/SubNav.test.d.ts +0 -1
- package/lib-esm/__tests__/SubNav.test.js +0 -50
- package/lib-esm/__tests__/SubNavLink.test.d.ts +0 -1
- package/lib-esm/__tests__/SubNavLink.test.js +0 -39
- package/lib-esm/__tests__/TabNav.test.d.ts +0 -1
- package/lib-esm/__tests__/TabNav.test.js +0 -39
- package/lib-esm/__tests__/Text.test.d.ts +0 -1
- package/lib-esm/__tests__/Text.test.js +0 -93
- package/lib-esm/__tests__/TextInput.test.d.ts +0 -1
- package/lib-esm/__tests__/TextInput.test.js +0 -68
- package/lib-esm/__tests__/TextInputWithTokens.test.d.ts +0 -1
- package/lib-esm/__tests__/TextInputWithTokens.test.js +0 -341
- package/lib-esm/__tests__/ThemeProvider.test.d.ts +0 -1
- package/lib-esm/__tests__/ThemeProvider.test.js +0 -408
- package/lib-esm/__tests__/Timeline.test.d.ts +0 -1
- package/lib-esm/__tests__/Timeline.test.js +0 -65
- package/lib-esm/__tests__/Token.test.d.ts +0 -1
- package/lib-esm/__tests__/Token.test.js +0 -166
- package/lib-esm/__tests__/Tooltip.test.d.ts +0 -1
- package/lib-esm/__tests__/Tooltip.test.js +0 -59
- package/lib-esm/__tests__/Truncate.test.d.ts +0 -1
- package/lib-esm/__tests__/Truncate.test.js +0 -53
- package/lib-esm/__tests__/UnderlineNav.test.d.ts +0 -1
- package/lib-esm/__tests__/UnderlineNav.test.js +0 -60
- package/lib-esm/__tests__/UnderlineNavLink.test.d.ts +0 -1
- package/lib-esm/__tests__/UnderlineNavLink.test.js +0 -41
- package/lib-esm/__tests__/behaviors/anchoredPosition.test.d.ts +0 -1
- package/lib-esm/__tests__/behaviors/anchoredPosition.test.js +0 -388
- package/lib-esm/__tests__/behaviors/focusTrap.test.d.ts +0 -1
- package/lib-esm/__tests__/behaviors/focusTrap.test.js +0 -227
- package/lib-esm/__tests__/behaviors/focusZone.test.d.ts +0 -1
- package/lib-esm/__tests__/behaviors/focusZone.test.js +0 -487
- package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.d.ts +0 -1
- package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.js +0 -48
- package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +0 -1
- package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.js +0 -224
- package/lib-esm/__tests__/filterObject.test.d.ts +0 -1
- package/lib-esm/__tests__/filterObject.test.js +0 -27
- package/lib-esm/__tests__/hooks/useAnchoredPosition.test.d.ts +0 -1
- package/lib-esm/__tests__/hooks/useAnchoredPosition.test.js +0 -46
- package/lib-esm/__tests__/hooks/useOnEscapePress.test.d.ts +0 -1
- package/lib-esm/__tests__/hooks/useOnEscapePress.test.js +0 -23
- package/lib-esm/__tests__/hooks/useOnOutsideClick.test.d.ts +0 -1
- package/lib-esm/__tests__/hooks/useOnOutsideClick.test.js +0 -68
- package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +0 -1
- package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.js +0 -52
- package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +0 -1
- package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.js +0 -36
- package/lib-esm/__tests__/theme.test.d.ts +0 -1
- package/lib-esm/__tests__/theme.test.js +0 -33
- package/lib-esm/__tests__/themeGet.test.d.ts +0 -1
- package/lib-esm/__tests__/themeGet.test.js +0 -22
- package/lib-esm/__tests__/useSafeTimeout.test.d.ts +0 -1
- package/lib-esm/__tests__/useSafeTimeout.test.js +0 -39
- package/lib-esm/stories/ActionList.stories.js +0 -394
- package/lib-esm/stories/ActionMenu.stories.js +0 -293
- package/lib-esm/stories/AnchoredOverlay.stories.js +0 -101
- package/lib-esm/stories/Autocomplete.stories.js +0 -549
- package/lib-esm/stories/AvatarStack.stories.js +0 -32
- package/lib-esm/stories/Button.stories.js +0 -78
- package/lib-esm/stories/ConfirmationDialog.stories.js +0 -86
- package/lib-esm/stories/Dialog.stories.js +0 -240
- package/lib-esm/stories/DropdownMenu.stories.js +0 -94
- package/lib-esm/stories/IssueLabelToken.stories.js +0 -139
- package/lib-esm/stories/Overlay.stories.js +0 -173
- package/lib-esm/stories/Portal.stories.js +0 -68
- package/lib-esm/stories/ProfileToken.stories.js +0 -136
- package/lib-esm/stories/SelectPanel.stories.js +0 -334
- package/lib-esm/stories/TextInputWithTokens.stories.js +0 -196
- package/lib-esm/stories/ThemeProvider.stories.js +0 -83
- package/lib-esm/stories/Token.stories.js +0 -133
- package/lib-esm/stories/useAnchoredPosition.stories.js +0 -313
- package/lib-esm/stories/useFocusTrap.stories.js +0 -309
- package/lib-esm/stories/useFocusZone.stories.js +0 -554
- package/migrating.md +0 -250
- package/now.json +0 -17
- package/package-lock.json +0 -29369
- package/rollup.config.js +0 -36
- package/script/build +0 -19
- package/script/build-storybook +0 -10
- package/script/setup +0 -12
- package/src/ActionList/Divider.tsx +0 -25
- package/src/ActionList/Group.tsx +0 -45
- package/src/ActionList/Header.tsx +0 -74
- package/src/ActionList/Item.tsx +0 -483
- package/src/ActionList/List.tsx +0 -258
- package/src/ActionList/index.ts +0 -21
- package/src/ActionMenu.tsx +0 -106
- package/src/AnchoredOverlay/AnchoredOverlay.tsx +0 -191
- package/src/AnchoredOverlay/index.ts +0 -2
- package/src/Autocomplete/Autocomplete.tsx +0 -103
- package/src/Autocomplete/AutocompleteContext.tsx +0 -19
- package/src/Autocomplete/AutocompleteInput.tsx +0 -179
- package/src/Autocomplete/AutocompleteMenu.tsx +0 -341
- package/src/Autocomplete/AutocompleteOverlay.tsx +0 -68
- package/src/Autocomplete/index.ts +0 -2
- package/src/Avatar.tsx +0 -46
- package/src/AvatarPair.tsx +0 -35
- package/src/AvatarStack.tsx +0 -159
- package/src/BaseStyles.tsx +0 -53
- package/src/BorderBox.tsx +0 -18
- package/src/Box.tsx +0 -54
- package/src/BranchName.tsx +0 -19
- package/src/Breadcrumbs.tsx +0 -101
- package/src/Button/Button.tsx +0 -40
- package/src/Button/ButtonBase.tsx +0 -43
- package/src/Button/ButtonClose.tsx +0 -40
- package/src/Button/ButtonDanger.tsx +0 -43
- package/src/Button/ButtonGroup.tsx +0 -55
- package/src/Button/ButtonInvisible.tsx +0 -27
- package/src/Button/ButtonOutline.tsx +0 -43
- package/src/Button/ButtonPrimary.tsx +0 -41
- package/src/Button/ButtonStyles.tsx +0 -36
- package/src/Button/ButtonTableList.tsx +0 -58
- package/src/Button/index.ts +0 -16
- package/src/Caret.tsx +0 -133
- package/src/CircleBadge.tsx +0 -55
- package/src/CircleOcticon.tsx +0 -37
- package/src/CounterLabel.tsx +0 -52
- package/src/Details.tsx +0 -23
- package/src/Dialog/ConfirmationDialog.tsx +0 -184
- package/src/Dialog/Dialog.tsx +0 -432
- package/src/Dialog.tsx +0 -149
- package/src/Dropdown.tsx +0 -158
- package/src/DropdownMenu/DropdownButton.tsx +0 -15
- package/src/DropdownMenu/DropdownMenu.tsx +0 -115
- package/src/DropdownMenu/index.ts +0 -4
- package/src/DropdownStyles.ts +0 -128
- package/src/FilterList.tsx +0 -81
- package/src/FilteredActionList/FilteredActionList.tsx +0 -142
- package/src/FilteredActionList/index.ts +0 -2
- package/src/FilteredSearch.tsx +0 -28
- package/src/Flash.tsx +0 -77
- package/src/Flex.tsx +0 -15
- package/src/FormGroup.tsx +0 -27
- package/src/Grid.tsx +0 -15
- package/src/Header.tsx +0 -84
- package/src/Heading.tsx +0 -21
- package/src/Label.tsx +0 -75
- package/src/LabelGroup.tsx +0 -18
- package/src/Link.tsx +0 -46
- package/src/Overlay.tsx +0 -197
- package/src/Pagehead.tsx +0 -17
- package/src/Pagination/Pagination.tsx +0 -214
- package/src/Pagination/index.ts +0 -4
- package/src/Pagination/model.tsx +0 -187
- package/src/PointerBox.tsx +0 -31
- package/src/Popover.tsx +0 -236
- package/src/Portal/Portal.tsx +0 -96
- package/src/Portal/index.ts +0 -5
- package/src/Position.tsx +0 -63
- package/src/ProgressBar.tsx +0 -52
- package/src/SelectMenu/SelectMenu.tsx +0 -125
- package/src/SelectMenu/SelectMenuContext.tsx +0 -9
- package/src/SelectMenu/SelectMenuDivider.tsx +0 -25
- package/src/SelectMenu/SelectMenuFilter.tsx +0 -51
- package/src/SelectMenu/SelectMenuFooter.tsx +0 -28
- package/src/SelectMenu/SelectMenuHeader.tsx +0 -50
- package/src/SelectMenu/SelectMenuItem.tsx +0 -137
- package/src/SelectMenu/SelectMenuList.tsx +0 -42
- package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +0 -24
- package/src/SelectMenu/SelectMenuModal.tsx +0 -121
- package/src/SelectMenu/SelectMenuTab.tsx +0 -88
- package/src/SelectMenu/SelectMenuTabPanel.tsx +0 -30
- package/src/SelectMenu/SelectMenuTabs.tsx +0 -44
- package/src/SelectMenu/hooks/useKeyboardNav.js +0 -90
- package/src/SelectMenu/index.ts +0 -15
- package/src/SelectPanel/SelectPanel.tsx +0 -173
- package/src/SelectPanel/index.ts +0 -2
- package/src/SideNav.tsx +0 -193
- package/src/Spinner.tsx +0 -59
- package/src/StateLabel.tsx +0 -102
- package/src/StyledOcticon.tsx +0 -24
- package/src/SubNav.tsx +0 -129
- package/src/TabNav.tsx +0 -77
- package/src/Text.tsx +0 -13
- package/src/TextInput.tsx +0 -68
- package/src/TextInputWithTokens.tsx +0 -271
- package/src/ThemeProvider.tsx +0 -176
- package/src/Timeline.tsx +0 -141
- package/src/Token/AvatarToken.tsx +0 -54
- package/src/Token/IssueLabelToken.tsx +0 -150
- package/src/Token/Token.tsx +0 -112
- package/src/Token/TokenBase.tsx +0 -134
- package/src/Token/_RemoveTokenButton.tsx +0 -98
- package/src/Token/_TokenTextContainer.tsx +0 -47
- package/src/Token/index.ts +0 -3
- package/src/Tooltip.tsx +0 -263
- package/src/Truncate.tsx +0 -36
- package/src/UnderlineNav.tsx +0 -110
- package/src/_TextInputWrapper.tsx +0 -105
- package/src/_UnstyledTextInput.tsx +0 -19
- package/src/__tests__/.eslintrc.json +0 -11
- package/src/__tests__/ActionList.test.tsx +0 -53
- package/src/__tests__/ActionList.types.test.tsx +0 -51
- package/src/__tests__/ActionMenu.test.tsx +0 -136
- package/src/__tests__/AnchoredOverlay.test.tsx +0 -150
- package/src/__tests__/Autocomplete.test.tsx +0 -444
- package/src/__tests__/Avatar.test.tsx +0 -44
- package/src/__tests__/AvatarStack.test.tsx +0 -48
- package/src/__tests__/BorderBox.test.tsx +0 -43
- package/src/__tests__/Box.test.tsx +0 -42
- package/src/__tests__/BranchName.test.tsx +0 -26
- package/src/__tests__/Breadcrumbs.test.tsx +0 -27
- package/src/__tests__/BreadcrumbsItem.test.tsx +0 -31
- package/src/__tests__/Button.test.tsx +0 -128
- package/src/__tests__/Caret.test.tsx +0 -36
- package/src/__tests__/CircleBadge.test.tsx +0 -66
- package/src/__tests__/CircleOcticon.test.tsx +0 -50
- package/src/__tests__/ConfirmationDialog.test.tsx +0 -120
- package/src/__tests__/CounterLabel.test.tsx +0 -50
- package/src/__tests__/Details.test.tsx +0 -115
- package/src/__tests__/Dialog.test.tsx +0 -155
- package/src/__tests__/Dropdown.test.tsx +0 -53
- package/src/__tests__/DropdownMenu.test.tsx +0 -136
- package/src/__tests__/FilterList.test.tsx +0 -26
- package/src/__tests__/FilterListItem.test.tsx +0 -31
- package/src/__tests__/FilteredSearch.test.tsx +0 -26
- package/src/__tests__/Flash.test.tsx +0 -45
- package/src/__tests__/Flex.test.tsx +0 -58
- package/src/__tests__/FormGroup.test.tsx +0 -38
- package/src/__tests__/Grid.test.tsx +0 -82
- package/src/__tests__/Header.test.tsx +0 -49
- package/src/__tests__/Heading.test.tsx +0 -91
- package/src/__tests__/Label.test.tsx +0 -34
- package/src/__tests__/LabelGroup.test.tsx +0 -30
- package/src/__tests__/Link.test.tsx +0 -47
- package/src/__tests__/Merge.types.test.ts +0 -39
- package/src/__tests__/Overlay.test.tsx +0 -103
- package/src/__tests__/Pagehead.test.tsx +0 -23
- package/src/__tests__/Pagination/Pagination.test.tsx +0 -30
- package/src/__tests__/Pagination/PaginationModel.test.tsx +0 -133
- package/src/__tests__/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -184
- package/src/__tests__/PointerBox.test.tsx +0 -34
- package/src/__tests__/Popover.test.tsx +0 -68
- package/src/__tests__/Portal.test.tsx +0 -103
- package/src/__tests__/Position.test.tsx +0 -117
- package/src/__tests__/ProgressBar.test.tsx +0 -40
- package/src/__tests__/SelectMenu.test.tsx +0 -142
- package/src/__tests__/SelectPanel.test.tsx +0 -63
- package/src/__tests__/SideNav.test.tsx +0 -62
- package/src/__tests__/Spinner.test.tsx +0 -42
- package/src/__tests__/StateLabel.test.tsx +0 -48
- package/src/__tests__/StyledOcticon.test.tsx +0 -26
- package/src/__tests__/SubNav.test.tsx +0 -50
- package/src/__tests__/SubNavLink.test.tsx +0 -31
- package/src/__tests__/TabNav.test.tsx +0 -32
- package/src/__tests__/Text.test.tsx +0 -78
- package/src/__tests__/TextInput.test.tsx +0 -49
- package/src/__tests__/TextInputWithTokens.test.tsx +0 -262
- package/src/__tests__/ThemeProvider.test.tsx +0 -441
- package/src/__tests__/Timeline.test.tsx +0 -58
- package/src/__tests__/Token.test.tsx +0 -118
- package/src/__tests__/Tooltip.test.tsx +0 -52
- package/src/__tests__/Truncate.test.tsx +0 -43
- package/src/__tests__/UnderlineNav.test.tsx +0 -58
- package/src/__tests__/UnderlineNavLink.test.tsx +0 -31
- package/src/__tests__/__snapshots__/ActionList.test.tsx.snap +0 -223
- package/src/__tests__/__snapshots__/ActionMenu.test.tsx.snap +0 -80
- package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +0 -332
- package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +0 -3414
- package/src/__tests__/__snapshots__/Avatar.test.tsx.snap +0 -19
- package/src/__tests__/__snapshots__/AvatarStack.test.tsx.snap +0 -377
- package/src/__tests__/__snapshots__/BorderBox.test.tsx.snap +0 -14
- package/src/__tests__/__snapshots__/Box.test.tsx.snap +0 -201
- package/src/__tests__/__snapshots__/BranchName.test.tsx.snap +0 -17
- package/src/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +0 -29
- package/src/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap +0 -79
- package/src/__tests__/__snapshots__/Button.test.tsx.snap +0 -832
- package/src/__tests__/__snapshots__/Caret.test.tsx.snap +0 -373
- package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +0 -141
- package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +0 -64
- package/src/__tests__/__snapshots__/ConfirmationDialog.test.tsx.snap +0 -89
- package/src/__tests__/__snapshots__/CounterLabel.test.tsx.snap +0 -22
- package/src/__tests__/__snapshots__/Details.test.tsx.snap +0 -15
- package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +0 -200
- package/src/__tests__/__snapshots__/Dropdown.test.tsx.snap +0 -249
- package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +0 -106
- package/src/__tests__/__snapshots__/FilterList.test.tsx.snap +0 -13
- package/src/__tests__/__snapshots__/FilterListItem.test.tsx.snap +0 -80
- package/src/__tests__/__snapshots__/FilteredSearch.test.tsx.snap +0 -32
- package/src/__tests__/__snapshots__/Flash.test.tsx.snap +0 -32
- package/src/__tests__/__snapshots__/Flex.test.tsx.snap +0 -130
- package/src/__tests__/__snapshots__/FormGroup.test.tsx.snap +0 -25
- package/src/__tests__/__snapshots__/Grid.test.tsx.snap +0 -178
- package/src/__tests__/__snapshots__/Header.test.tsx.snap +0 -79
- package/src/__tests__/__snapshots__/Heading.test.tsx.snap +0 -13
- package/src/__tests__/__snapshots__/Label.test.tsx.snap +0 -74
- package/src/__tests__/__snapshots__/LabelGroup.test.tsx.snap +0 -15
- package/src/__tests__/__snapshots__/Link.test.tsx.snap +0 -213
- package/src/__tests__/__snapshots__/Pagehead.test.tsx.snap +0 -15
- package/src/__tests__/__snapshots__/PointerBox.test.tsx.snap +0 -174
- package/src/__tests__/__snapshots__/Popover.test.tsx.snap +0 -4687
- package/src/__tests__/__snapshots__/Position.test.tsx.snap +0 -44
- package/src/__tests__/__snapshots__/ProgressBar.test.tsx.snap +0 -53
- package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +0 -469
- package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +0 -123
- package/src/__tests__/__snapshots__/SideNav.test.tsx.snap +0 -143
- package/src/__tests__/__snapshots__/Spinner.test.tsx.snap +0 -33
- package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +0 -388
- package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +0 -25
- package/src/__tests__/__snapshots__/SubNav.test.tsx.snap +0 -44
- package/src/__tests__/__snapshots__/SubNavLink.test.tsx.snap +0 -199
- package/src/__tests__/__snapshots__/TabNav.test.tsx.snap +0 -58
- package/src/__tests__/__snapshots__/Text.test.tsx.snap +0 -7
- package/src/__tests__/__snapshots__/TextInput.test.tsx.snap +0 -440
- package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +0 -5308
- package/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap +0 -15
- package/src/__tests__/__snapshots__/Timeline.test.tsx.snap +0 -159
- package/src/__tests__/__snapshots__/Token.test.tsx.snap +0 -3787
- package/src/__tests__/__snapshots__/Tooltip.test.tsx.snap +0 -227
- package/src/__tests__/__snapshots__/Truncate.test.tsx.snap +0 -17
- package/src/__tests__/__snapshots__/UnderlineNav.test.tsx.snap +0 -59
- package/src/__tests__/__snapshots__/UnderlineNavLink.test.tsx.snap +0 -130
- package/src/__tests__/behaviors/anchoredPosition.test.ts +0 -295
- package/src/__tests__/behaviors/focusTrap.test.tsx +0 -236
- package/src/__tests__/behaviors/focusZone.test.tsx +0 -549
- package/src/__tests__/behaviors/iterateFocusableElements.test.tsx +0 -61
- package/src/__tests__/behaviors/scrollIntoViewingArea.test.ts +0 -195
- package/src/__tests__/filterObject.test.ts +0 -54
- package/src/__tests__/hooks/useAnchoredPosition.test.tsx +0 -31
- package/src/__tests__/hooks/useOnEscapePress.test.tsx +0 -16
- package/src/__tests__/hooks/useOnOutsideClick.test.tsx +0 -48
- package/src/__tests__/hooks/useOpenAndCloseFocus.test.tsx +0 -48
- package/src/__tests__/hooks/useProvidedStateOrCreate.test.tsx +0 -39
- package/src/__tests__/theme.test.ts +0 -41
- package/src/__tests__/themeGet.test.ts +0 -15
- package/src/__tests__/useSafeTimeout.test.tsx +0 -36
- package/src/behaviors/anchoredPosition.ts +0 -442
- package/src/behaviors/focusTrap.ts +0 -184
- package/src/behaviors/focusZone.ts +0 -713
- package/src/behaviors/scrollIntoViewingArea.ts +0 -27
- package/src/constants.ts +0 -62
- package/src/hooks/index.ts +0 -11
- package/src/hooks/useAnchoredPosition.ts +0 -53
- package/src/hooks/useCombinedRefs.ts +0 -40
- package/src/hooks/useDetails.tsx +0 -54
- package/src/hooks/useDialog.ts +0 -121
- package/src/hooks/useFocusTrap.ts +0 -80
- package/src/hooks/useFocusZone.ts +0 -64
- package/src/hooks/useOnEscapePress.ts +0 -63
- package/src/hooks/useOnOutsideClick.tsx +0 -82
- package/src/hooks/useOpenAndCloseFocus.ts +0 -32
- package/src/hooks/useOverlay.tsx +0 -34
- package/src/hooks/useProvidedRefOrCreate.ts +0 -14
- package/src/hooks/useProvidedStateOrCreate.ts +0 -27
- package/src/hooks/useRenderForcingRef.ts +0 -22
- package/src/hooks/useResizeObserver.ts +0 -11
- package/src/hooks/useSafeTimeout.ts +0 -38
- package/src/hooks/useScrollFlash.ts +0 -21
- package/src/index.ts +0 -170
- package/src/polyfills/eventListenerSignal.ts +0 -66
- package/src/stories/ActionList.stories.tsx +0 -437
- package/src/stories/ActionMenu.stories.tsx +0 -322
- package/src/stories/AnchoredOverlay.stories.tsx +0 -117
- package/src/stories/Autocomplete.stories.tsx +0 -572
- package/src/stories/AvatarStack.stories.tsx +0 -37
- package/src/stories/Button.stories.tsx +0 -88
- package/src/stories/ConfirmationDialog.stories.tsx +0 -105
- package/src/stories/Dialog.stories.tsx +0 -240
- package/src/stories/DropdownMenu.stories.tsx +0 -84
- package/src/stories/IssueLabelToken.stories.tsx +0 -138
- package/src/stories/Overlay.stories.tsx +0 -213
- package/src/stories/Portal.stories.tsx +0 -109
- package/src/stories/ProfileToken.stories.tsx +0 -129
- package/src/stories/SelectPanel.stories.tsx +0 -353
- package/src/stories/TextInputWithTokens.stories.tsx +0 -146
- package/src/stories/ThemeProvider.stories.tsx +0 -104
- package/src/stories/Token.stories.tsx +0 -126
- package/src/stories/useAnchoredPosition.stories.tsx +0 -320
- package/src/stories/useFocusTrap.stories.tsx +0 -400
- package/src/stories/useFocusZone.stories.tsx +0 -663
- package/src/sx.ts +0 -9
- package/src/theme-preval.js +0 -79
- package/src/theme.ts +0 -3
- package/src/utils/deprecate.tsx +0 -73
- package/src/utils/isNumeric.tsx +0 -4
- package/src/utils/iterateFocusableElements.ts +0 -121
- package/src/utils/ssr.tsx +0 -1
- package/src/utils/test-deprecations.tsx +0 -19
- package/src/utils/test-helpers.tsx +0 -7
- package/src/utils/test-matchers.tsx +0 -109
- package/src/utils/testing.tsx +0 -242
- package/src/utils/theme.js +0 -64
- package/src/utils/types/AriaRole.ts +0 -71
- package/src/utils/types/ComponentProps.ts +0 -13
- package/src/utils/types/Flatten.ts +0 -4
- package/src/utils/types/MandateProps.ts +0 -19
- package/src/utils/types/Merge.ts +0 -20
- package/src/utils/types/index.ts +0 -5
- package/src/utils/uniqueId.ts +0 -6
- package/src/utils/userAgent.ts +0 -7
- package/stats.html +0 -3279
- package/tsconfig.build.json +0 -7
- package/tsconfig.json +0 -20
@@ -1,274 +0,0 @@
|
|
1
|
-
# Contribution guidelines
|
2
|
-
|
3
|
-
1. [Roadmap](#roadmap)
|
4
|
-
2. [Before Getting Started](#before-getting-started)
|
5
|
-
3. [Discussing non-public features or products](#discussing-non-public-features-or-products)
|
6
|
-
4. [Developing Components](#developing-components)
|
7
|
-
- [Tools we use](#tools-we-use)
|
8
|
-
- [Component patterns](#component-patterns)
|
9
|
-
- [Adding system props](#adding-system-props)
|
10
|
-
- [Adding the sx prop](#adding-the-sx-prop)
|
11
|
-
- [Linting](#linting)
|
12
|
-
- [Testing](#testing)
|
13
|
-
- [TypeScript support](#typescript-support)
|
14
|
-
- [Additional resources](#additional-resources)
|
15
|
-
5. [Writing documentation](#writing-documentation)
|
16
|
-
6. [Creating a pull request](#creating-a-pull-request)
|
17
|
-
- [What to expect after opening a pull request](#what-to-expect-after-opening-a-pull-request)
|
18
|
-
- [What we look for in reviews](#what-we-look-for-in-reviews)
|
19
|
-
7. [Deploying & publishing](#deploying-and-publishing)
|
20
|
-
- [Deploying](#deploying)
|
21
|
-
- [Path aliasing](#path-aliasing)
|
22
|
-
- [Publishing](#publishing)
|
23
|
-
8. [Troubleshooting](#troubleshooting)
|
24
|
-
9. [Glossary](#glossary)
|
25
|
-
- [System Props](#system-props)
|
26
|
-
|
27
|
-
## Roadmap
|
28
|
-
|
29
|
-
If you're looking for something to work on, a great place to start is our issues labeled [up for grabs](https://github.com/primer/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22up+for+grabs%22)! If you've got a feature that you'd like to implement, be sure to check out our [Primer Components Roadmap](https://github.com/primer/react/projects/3) to make sure it hasn't already been started on.
|
30
|
-
|
31
|
-
## Before Getting Started
|
32
|
-
|
33
|
-
A common question asked about Primer Components is how to know what should be added to Primer Components and what is best left as a local component in a consuming application. Though there are no hard & fast rules about what can and cannot be added to Primer Components, here are a few things we take into consideration:
|
34
|
-
|
35
|
-
- Is the new feature an existing pattern in Primer CSS or related to UI built at GitHub? Primer Components is first and foremost a library for building UI at GitHub - patterns that aren't currently being used in GitHub UI (either on github.com or in a GitHub owned project outside of github.com) probably shouldn't be added to Primer Components. Exceptions to this could be helper components that don't necessarily render UI but help with the development process (like `Flex`, `Grid`, or `Box`).
|
36
|
-
|
37
|
-
- Does the proposed component get used in more than one or two places across GitHub UI? A component that's only meant to be used in one place and doesn't have potential to be reused in many places probably should exist as a local component. An example of something like this might be a component that renders content specific to a single GitHub product.
|
38
|
-
|
39
|
-
**In general, we tend to be pretty excited about 99% of feature proposals and contributions!** If you would like to get started with a component proposal, open an issue using the [component proposal template](https://github.com/primer/react/issues/new?template=new-component-proposal.md).
|
40
|
-
|
41
|
-
## Discussing non-public features or products
|
42
|
-
|
43
|
-
As this is a public repo, please be careful not to include details or screenshots from unreleased GitHub products or features. In most cases, a good bug report, feature request, or pull request should be able to describe the work without including business logic or feature details, but if you must discuss context relating to an unreleased feature, please open an issue in the private [Design Systems repo](https://github.com/github/design-systems/issues/new/choose) and link to it in your issue or pull request.
|
44
|
-
|
45
|
-
## Developing components
|
46
|
-
|
47
|
-
We primarily use our documentation site as a workspace to develop new components or make changes to existing components (stay tuned for a better development environment coming soon!).
|
48
|
-
|
49
|
-
Before running the documentation site locally, you'll need to install packages in the root and `docs` directories:
|
50
|
-
|
51
|
-
```sh
|
52
|
-
npm install && cd docs && npm install
|
53
|
-
```
|
54
|
-
|
55
|
-
Then navigate back to the root folder and run the following to start up the site:
|
56
|
-
|
57
|
-
```sh
|
58
|
-
npm start
|
59
|
-
```
|
60
|
-
|
61
|
-
Navigate to http://localhost:8000/ to see the site in your browser ✨
|
62
|
-
|
63
|
-
### Tools we use
|
64
|
-
|
65
|
-
1. We use [styled-components](https://www.styled-components.com/) to style our components.
|
66
|
-
2. We use style functions from [styled-system](https://styled-system.com/) whenever possible, and styled-systems' `style()` function to create new ones.
|
67
|
-
|
68
|
-
### Component patterns
|
69
|
-
|
70
|
-
With a couple of exceptions, all components should be created with the `styled` function from [styled-components] and should have the appropriate groups of system props attached.
|
71
|
-
|
72
|
-
Default values for system props can be set in `Component.defaultProps`.
|
73
|
-
|
74
|
-
⚠️ **Do not set the default `theme` prop! This can sometimes override the theme provided by the ThemeProvider and cause unexpected theming issues.**
|
75
|
-
|
76
|
-
Additionally, every component should support [the `sx` prop](https://primer.style/components/overriding-styles); remember to add `${sx}` to the style literal.
|
77
|
-
|
78
|
-
Here's an example of a basic component written in the style of Primer Components:
|
79
|
-
|
80
|
-
```jsx
|
81
|
-
import {TYPOGRAPHY, COMMON} from './constants'
|
82
|
-
import sx from './sx'
|
83
|
-
|
84
|
-
const Component = styled.div`
|
85
|
-
// additional styles here
|
86
|
-
|
87
|
-
${COMMON};
|
88
|
-
${TYPOGRAPHY};
|
89
|
-
${sx};
|
90
|
-
`
|
91
|
-
|
92
|
-
Component.defaultProps = {
|
93
|
-
m: 0,
|
94
|
-
fontSize: 5,
|
95
|
-
}
|
96
|
-
|
97
|
-
export default Component
|
98
|
-
```
|
99
|
-
|
100
|
-
### Adding system props
|
101
|
-
|
102
|
-
Each component should have access to the appropriate system props. Every component has access to `COMMON`. For **most** components added, you'll only need to give the component to `COMMON`. If you are unsure, ping a DS team member on your PR.
|
103
|
-
|
104
|
-
Categories of system props are exported from `src/constants.js`:
|
105
|
-
|
106
|
-
- `COMMON` includes color and spacing (margin and padding) props
|
107
|
-
- `TYPOGRAPHY` includes font family, font weight, and line-height props
|
108
|
-
- `POSITION` includes positioning props
|
109
|
-
- `FLEX` includes flexbox props
|
110
|
-
- `BORDER` includes border and box-shadow props
|
111
|
-
- `GRID` includes grid props
|
112
|
-
|
113
|
-
To give the component access to a group of system props, import the system prop function from `./constants` and include the system prop function in your styled-component like so:
|
114
|
-
|
115
|
-
```jsx
|
116
|
-
import {COMMON} from './constants'
|
117
|
-
|
118
|
-
const Component = styled.div`
|
119
|
-
// additional styles here
|
120
|
-
${COMMON};
|
121
|
-
`
|
122
|
-
```
|
123
|
-
|
124
|
-
Remember that the system prop function inside your style declaration needs to go _after_ any built-in styles you want to be overridable.
|
125
|
-
|
126
|
-
### Adding the `sx` prop
|
127
|
-
|
128
|
-
Each component should provide access to a prop called `sx` that allows for setting theme-aware ad-hoc styles. See the [overriding styles](https://primer.style/components/overriding-styles) doc for more information on using the prop.
|
129
|
-
|
130
|
-
Adding the `sx` prop is similar to adding system props; import the default export from the `sx` module, add it to your style definition, and add the appropriate prop types. **The `sx` prop should go at the _very end_ of your style definition.**
|
131
|
-
|
132
|
-
```jsx
|
133
|
-
import {COMMON} from './constants'
|
134
|
-
import sx from './sx'
|
135
|
-
|
136
|
-
const Component = styled.div`
|
137
|
-
// additional styles here
|
138
|
-
${COMMON};
|
139
|
-
${sx};
|
140
|
-
`
|
141
|
-
```
|
142
|
-
|
143
|
-
### Linting
|
144
|
-
|
145
|
-
We use the [React configuration](https://github.com/github/eslint-plugin-github/blob/master/lib/configs/react.js) from [GitHub's eslint plugin](https://github.com/github/eslint-plugin-github) to lint our JavaScript. To check your work before pushing, run:
|
146
|
-
|
147
|
-
```sh
|
148
|
-
npm run lint
|
149
|
-
```
|
150
|
-
|
151
|
-
Or, you can use [npx] to run eslint on one or more specific files:
|
152
|
-
|
153
|
-
```sh
|
154
|
-
# lint the component and the tests in src/__tests__
|
155
|
-
npx eslint src/**/MyComponent.js
|
156
|
-
```
|
157
|
-
|
158
|
-
**Protip:** The [eslint `--fix` flag](https://eslint.org/docs/user-guide/command-line-interface#--fix) can automatically fix most linting errors, such as those involving whitespace or incorrect ordering of object keys and imports. You can fix those issues across the entire project with:
|
159
|
-
|
160
|
-
```sh
|
161
|
-
npm run lint -- --fix
|
162
|
-
```
|
163
|
-
|
164
|
-
**Protip:** `npm run lint -- --quiet` (or `npx eslint --quiet ...`) will suppress warnings so that you can focus on fixing errors.
|
165
|
-
|
166
|
-
### Testing
|
167
|
-
|
168
|
-
We test our components with [Jest](https://facebook.github.io/jest/) and [react-test-renderer](https://reactjs.org/docs/test-renderer.html). You can run the tests locally with `npm test`. To run the tests as you work, run Jest in watch mode with:
|
169
|
-
|
170
|
-
```sh
|
171
|
-
npm test -- --watch
|
172
|
-
```
|
173
|
-
|
174
|
-
See [`src/__tests__/example.js`](src/__tests__/example.js) for examples of ways that we test our components.
|
175
|
-
|
176
|
-
### TypeScript support
|
177
|
-
|
178
|
-
Several of the projects that consume Primer Components are written in TypeScript. Though Primer Components is not currently written in TS, we do export type definitions in order to make Primer Components compatible with other TS projects.
|
179
|
-
|
180
|
-
Whenever adding new components or modifying the props of an existing component, **please make sure to update the type definition** in `index.d.ts`! This is super important to make sure we don't break compatibility :)
|
181
|
-
|
182
|
-
### Additional resources
|
183
|
-
|
184
|
-
- [Primer Components Philosophy](https://primer.style/components/philosophy)
|
185
|
-
- [Primer Components Core Concepts](https://primer.style/components/core-concepts)
|
186
|
-
- [Primer Components System Props](https://primer.style/components/system-props)
|
187
|
-
- [Styled Components docs](https://styled-components.com/)
|
188
|
-
- [Styled System docs](https://styled-system.com/)
|
189
|
-
|
190
|
-
## Writing documentation
|
191
|
-
|
192
|
-
We use [Doctocat](https://github.com/primer/doctocat) to power our documentation site at [https://primer.style/components](https://primer.style/components/).
|
193
|
-
|
194
|
-
To add a new component to our documentation site, create a new file with the `.md` extension for your component in `docs/content` (e.g. `docs/content/Button.md`).
|
195
|
-
|
196
|
-
## Creating a pull request
|
197
|
-
|
198
|
-
When creating a new pull request, please follow the guidelines in the auto-populated pull request template. Be sure to add screenshots of any relevant work and a thoughtful description.
|
199
|
-
|
200
|
-
### What to expect after opening a pull request
|
201
|
-
|
202
|
-
After opening a pull request, a member of the design systems team will add the appropriate labels (major, minor, patch release labels) and update the base branch to the correct release branch. Usually, you'll receive a response from the design systems team within a day or two. The design systems team member will review the pull request keeping the following items in mind:
|
203
|
-
|
204
|
-
### What we look for in reviews
|
205
|
-
|
206
|
-
- If it's a new component, does the component make sense to add to Primer Components? (Ideally this is discussed before the pull request stage, please reach out to a DS member if you aren't sure if a component should be added to Primer Components!)
|
207
|
-
- Does the component follow our [Primer Components code style](#component-patterns)?
|
208
|
-
- Does the component use theme values for most CSS values?
|
209
|
-
- Does the component have the [correct system props implemented](#adding-system-props)?
|
210
|
-
- Is the component API intuitive?
|
211
|
-
- Does the component have the appropriate [type definitions in `index.d.ts`](#typescript-support)?
|
212
|
-
- Is the component documented accurately?
|
213
|
-
- Does the component have appropriate tests?
|
214
|
-
- Does the pull request increase the bundle size significantly?
|
215
|
-
|
216
|
-
If everything looks great, the design systems team member will approve the pull request and merge when appropriate. Minor and patch changes are released frequently, and we try to bundle up breaking changes and avoid shipping major versions too often. If your pull request is time-sensitive, please let a design systems team member know. You do not need to worry about merging pull requests on your own, we'll take care of that for you :)
|
217
|
-
|
218
|
-
## Deploying and publishing
|
219
|
-
|
220
|
-
### Deploying
|
221
|
-
|
222
|
-
All of our documentation sites use the [Now integration](https://github.com/organizations/primer/settings/installations/1007619) to deploy documentation changes whenever code is merged into main. The integration also creates a preview site every time you commit code to a branch. To view the preview site, navigate to the PR and find the comment from the `now` bot. This will include a link to the preview site for your branch.
|
223
|
-
|
224
|
-
Once you merge your branch into main, any changes to the docs will automatically deploy. No further action is necessary.
|
225
|
-
|
226
|
-
### Path aliasing
|
227
|
-
|
228
|
-
This site is served as a subdirectory of [primer.style] using a [path alias](https://zeit.co/docs/features/path-aliases) configured in that repo's [`rules.json`](https://github.com/primer/primer.style/tree/master/rules.json). If you change the production deployment URL for this app, you will also need to change it there and re-deploy that app; otherwise, Now will automatically route requests from [primer.style/components](https://primer.style/components/) to the new deployment whenever you alias this one to `primer-components.now.sh`.
|
229
|
-
|
230
|
-
### Publishing
|
231
|
-
|
232
|
-
We use [changesets](https://github.com/atlassian/changesets) to managing versioning, publishing, and release notes. Here's how it works:
|
233
|
-
|
234
|
-
#### Using changesets to prepare and publish a release
|
235
|
-
|
236
|
-
1. When creating a new PR, changeset-bot will remind you to add a changeset if your change should trigger a new version number for the package.
|
237
|
-
2. To create a new changeset on your local machine, run `npx changeset` and answer the prompts. If you are introducing multiple features in the PR, add a separate changeset for each.
|
238
|
-
3. Push your new changes along with the changeset file to your PR; changeset-bot will show that there are valid changesets in the PR.
|
239
|
-
4. When the PR is ready, merge it to the main branch.
|
240
|
-
5. The changeset action will automatically create a new PR that bumps the version number appropriately, creates or updates `CHANGELOG.md`, and shows the release notes that will be used in the GitHub Release notes.
|
241
|
-
6. If you want to release more features, merge them into the main branch and changesets will update the release PR. Note that it does this via force-pushing, so you should not edit the release PR yourself.
|
242
|
-
7. When you're ready to release, merge the release PR into the main branch and changesets will publish the new version to npm and create a GitHub Release.
|
243
|
-
|
244
|
-
## Troubleshooting
|
245
|
-
|
246
|
-
**`npm start` fails with an error like `gatsby: command not found`**
|
247
|
-
|
248
|
-
Make sure to run `npm install` from inside the `docs/` subfolder _as well as_ the root folder.
|
249
|
-
|
250
|
-
**`npm start` fails with a different error**
|
251
|
-
|
252
|
-
Ensure you are using the latest minor of Node.js for the major version specified in the `.nvmrc` file. For example, if `.nvmrc` contains `8`, make sure you're using the latest version of Node.js with the major version of 8.
|
253
|
-
|
254
|
-
## Glossary
|
255
|
-
|
256
|
-
### System props
|
257
|
-
|
258
|
-
System props are style functions that provide one or more props, and can be passed directly the return value of [styled-components]'s `styled()` function:
|
259
|
-
|
260
|
-
```jsx
|
261
|
-
import styled from 'styled-components'
|
262
|
-
import {space} from 'styled-system'
|
263
|
-
const SpaceDiv = styled.div`
|
264
|
-
${space}
|
265
|
-
`
|
266
|
-
```
|
267
|
-
|
268
|
-
[classnames]: https://www.npmjs.com/package/classnames
|
269
|
-
[spread syntax]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
|
270
|
-
[styled-system]: https://styled-system.com
|
271
|
-
[table]: https://jxnblk.com/styled-system/table
|
272
|
-
[npx]: https://www.npmjs.com/package/npx
|
273
|
-
[now]: https://zeit.co/now
|
274
|
-
[primer.style]: https://primer.style
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# ADR 1: TypeScript
|
2
|
-
|
3
|
-
## Status
|
4
|
-
|
5
|
-
Approved 2021-01-15
|
6
|
-
|
7
|
-
## Context
|
8
|
-
|
9
|
-
Primer React components was originally released without TypeScript type definitions, making it difficult for engineers to consume the library in TypeScript applications. In [July 2019](https://github.com/primer/react/commit/2983c935ea9ad600c04078adb25e40c3624c11fa#diff-7aa4473ede4abd9ec099e87fec67fd57afafaf39e05d493ab4533acc38547eb8), we created an [ambient declaration](https://www.geeksforgeeks.org/typescript-ambients-declaration/) file (`index.d.ts`) file to provide type definitions for TypeScript applications without having to rewrite Primer React components in TypeScript.
|
10
|
-
|
11
|
-
`index.d.ts` has been an effective stopgap, enabling teams to build complex applications with Primer React components and TypeScript. However, because `index.d.ts` is disconnected from the implementation code, we've struggled to keep the type definitions up-to-date and accurate, as evidenced by [many](https://github.com/primer/react/issues/906) [TypeScript](https://github.com/primer/react/issues/540) [bug](https://github.com/primer/react/issues/520) [reports](https://github.com/primer/react/issues/534). As the library continues to grow in size and complexity, manually maintaining type definitions will become unsustainable.
|
12
|
-
|
13
|
-
## Decision
|
14
|
-
|
15
|
-
We will rewrite Primer React components in TypeScript.
|
16
|
-
|
17
|
-
## Consequences
|
18
|
-
|
19
|
-
- Type definitions can be generated by the TypeScript compiler, eliminating bugs caused by hand-written type definitions.
|
20
|
-
- Engineers can upstream components from other TypeScript projects at GitHub without having to remove type annotations, improving the contributor experience.
|
21
|
-
- We can refactor components with increased confidence.
|
22
|
-
- Component prop documentation can be generated by [react-docgen-typescript](https://github.com/styleguidist/react-docgen-typescript), eliminating inaccurate and out-of-date hand-written prop documentation.
|
23
|
-
- New contributors will need some familiarity with TypeScript in order to make code contributions.
|
@@ -1,108 +0,0 @@
|
|
1
|
-
# ADR 2: Isolating behaviors through custom clements and vanilla JavaScript
|
2
|
-
|
3
|
-
## Status
|
4
|
-
|
5
|
-
Approved 2021-02-04
|
6
|
-
|
7
|
-
## Related documents
|
8
|
-
|
9
|
-
- April 18th, 2018: [Custom Elements Example](https://github.com/primer/react/pull/13)
|
10
|
-
- May 8th, 2018: [Custom Elements Experiment](https://github.com/primer/react/pull/14)
|
11
|
-
- May 18th 2018: [React & Custom Elements](https://docs.google.com/document/d/1b6D2jW3ztQJiKEtQINbb4JoHJ3F3szU6lBX-fGce6aY/edit?usp=sharing)
|
12
|
-
- October 16th 2019: [Issue exploring pros & cons of reusing .com JS in React](https://github.com/github/issues-index-experiment/issues/90)
|
13
|
-
- November 15th 2019: [Experiment porting PRC to web components](https://github.com/github/ui-engineering/issues/12#issuecomment-558257842)
|
14
|
-
- November 27th 2019: [Usage of custom elements in IIE project](https://github.com/github/issues-index-experiment/pull/133)
|
15
|
-
- November 27th 2019: [Styling custom elements with styled components](https://github.slack.com/archives/CMZ4DC9BL/p1574883198055600)
|
16
|
-
- June 9th 2020: [Discussion in Slack about using skatejs for SSR](https://github.slack.com/archives/C0ER2LCG2/p1591707104461300)
|
17
|
-
- November 10th 2020: [Replace dialog with details-dialog](https://github.com/primer/react/issues/907)
|
18
|
-
- January 27th 2021: [Guidelines for authoring behaviors](https://github.com/primer/react/pull/992)
|
19
|
-
- February 1st 2021: [Example of a vanilla JS behavior & accompanying hook](https://github.com/T-Hugs/components/commit/105c3a191681381377f5aa193cb241a2189db8a6)
|
20
|
-
|
21
|
-
## Providing behaviors via custom elements
|
22
|
-
|
23
|
-
### Context
|
24
|
-
|
25
|
-
Throughout the last few years folks from the Design Infrastructure, Web Systems, and UI Platform teams have discussed the idea of using custom elements for behaviors in Primer React. The main goal of using custom elements in Primer React is to be able to author behaviors once and reuse them in any framework. Several experiments have been conducted which are listed above.
|
26
|
-
|
27
|
-
### Assumptions
|
28
|
-
|
29
|
-
De-duplication is not our highest or only priority. Attempts at de-duplication must be weighed against changes to the maintainer, developer, and customer experience.
|
30
|
-
|
31
|
-
### Findings
|
32
|
-
|
33
|
-
#### Developer experience regressions
|
34
|
-
|
35
|
-
- Custom elements rendering their own subtrees (ShadowDOM) requires polyfills for as-yet implemented specifications. This means Primer React will accumulate added complexity if we were to implement Custom Elements with ShadowDOM.
|
36
|
-
|
37
|
-
- Implementing Custom Elements in Primer React will require a division of client side and server side code, as custom elements should only be executed in a browser environment. Currently Primer React is "isomorphic" - in that the code can be executed anywhere that React can be, which includes NodeJS server runtimes, as well as the client side. While not insurmountable this does mean Primer React will accumulate added complexity, which likely will be surfaced to the user.
|
38
|
-
|
39
|
-
- While it's possible to add server side libraries to enable Custom Elements to be rendered on the Server, this adds more complexity and is antithetical to the usage patterns of custom elements.
|
40
|
-
|
41
|
-
- As of this writing, you cannot style custom elements with styled-components[^1]. This means that if a component wants to use a custom element to get behaviors and you also want to style that component, you must use another wrapper div to apply styles. This is a bug in styled-components and should be fixed in the next release.
|
42
|
-
|
43
|
-
#### Incompatibility with some React tools
|
44
|
-
|
45
|
-
Some of our GitHub custom elements such as `details-dialog` and `details-menu` make assumptions about the DOM tree. For example, `details-dialog` expects a `details` element to wrap the custom element and uses this assumption[^2] to determine whether or not clicks are happening inside or outside of the dialog and closes the dialog if the click happened outside of the dialog. This makes sense in most cases and is a nice way of enforcing proper usage of the details element, but breaks down when used with [React Portals](https://reactjs.org/docs/portals.html) which are often used to ensure menus are displayed correctly in cases where a parent has an overflow: hidden applied to it, or incompatible z-index.
|
46
|
-
|
47
|
-
#### Extensibility
|
48
|
-
|
49
|
-
Building behaviors in React Hooks gives us the ability to provide things like state and state change hooks to the consumer of the component. This allows the user to build on additional behaviors to the component based on the state or other variables provided to the component consumer. Doing the same with custom elements would require listening to events on the document[^3] and reacting to them. This is certainly do-able, but goes against some of the foundational principles of React (reacting to changes in the DOM vs changes in React state).
|
50
|
-
|
51
|
-
#### Organizational overhead
|
52
|
-
|
53
|
-
- GitHub’s custom elements are all managed in different repos which introduces more maintenance overhead.
|
54
|
-
- You'd need to npm link while developing if you want to test changes out with the presentational components themselves instead of making changes and seeing updates instantly. npm link usually doesn't work well with hot module reloading either.
|
55
|
-
- You'd need to draft & publish releases to both libraries every time you want to update the behavior
|
56
|
-
- If the behaviors are shared between github.com and Primer React, you'd need to do careful testing in both environments to make sure that changes don't create any regressions. That greatly widens the context that engineers need to keep in mind every time a change is made.
|
57
|
-
- Reacting to changes will take a bit more time as we’ll need to orchestrate releases between custom elements and Primer React - as opposed to having behaviors already present in Primer React which can be versioned in lockstep.
|
58
|
-
- Engineers who want to contribute to Primer React Components to build new components and behaviors would need to be familiar with both custom elements and React, two very different paradigms, and context switch between the two.
|
59
|
-
|
60
|
-
#### Other
|
61
|
-
|
62
|
-
- The custom element and web component API progress slower than React due to changes needing to go through the whatwq standards process.
|
63
|
-
|
64
|
-
#### Risks of not switching to custom elements for behaviors
|
65
|
-
|
66
|
-
- We spend extra time building behaviors in React that have already been built in our [custom elements library](https://github.github.io/web-systems-documentation/#custom-elements).
|
67
|
-
- There are currently 19 behaviors/components listed on the custom elements documentation site. Several of these we have already implemented in React in either Priemr React, Doctocat, or other React applications at GitHub which can be upstreamed (details-dialog, details-menu, clipboard-copy, text-expander, autocomplete, task-list via drag and drop hooks, tab-container, text-expander).
|
68
|
-
- We decide not to invest further in React at GitHub and have wasted time we could have spent building more custom elements.
|
69
|
-
- This seems unlikely as there seems to be clear consensus that we will continue to build more and more highly interactive products.
|
70
|
-
- The React library is abandoned and becomes obsolete.
|
71
|
-
- This is a risk with any technology that we may use, seems highly unlikely in the near term.
|
72
|
-
- While also a possibility for custom elements, the track record demonstrates deprecations of Web APIs is extremely rare and has a long deprecation path.
|
73
|
-
- Behaviors in github.com using custom elements and behaviors in Primer REact diverge, leading to an inconsistent experience.
|
74
|
-
- This is probably the biggest risk we face, but moving to custom elements isn’t necessarily the only or best solution. We should explore other ways of detecting divergence such as integration tests.
|
75
|
-
|
76
|
-
## Providing behaviors through vanilla JavaScript
|
77
|
-
|
78
|
-
A simpler method of isolating component behaviors is to implement them in vanilla JavaScript (or TypeScript). This way, they can be shared between React components and web components. Both types of consumers would need to hook up the vanilla behavior to the component(s) that use(s) them.
|
79
|
-
|
80
|
-
In some cases, this strategy is very straightforward. When a behavior can be made to have no dependencies other than the DOM, it is easy to isolate and consume in various frameworks. Behaviors that have effects on interactions/events, shared state, and component styles will be more difficult to isolate in this manner.
|
81
|
-
|
82
|
-
### Interactions and events
|
83
|
-
|
84
|
-
Many user interactions rely on DOM events, such as `click`, `keypress`, and `focus`. React's event system is _not_ the same as the native DOM event system. React implements a [SyntheticEvent](https://reactjs.org/docs/events.html) that wraps native events. Working with both `SyntheticEvent`s and native events simultaneously is significant additional complexity for maintainers and consumers. However, vanilla JavaScript must operate only using native events. This makes isolating behaviors that automatically hook up event listeners to DOM elements difficult to achieve, and the resulting simultaneous usage of native events and `SyntheticEvent` has the potential to degrade both the maintainer's and the consumer's developer experience using Primer React.
|
85
|
-
|
86
|
-
### Shared state
|
87
|
-
|
88
|
-
There are countless ways to manage state in a web application. React has its own ecosystem of state management strategies and libraries (in addition to its own primitive constructs for state management). Since there is no standard state management pattern in vanilla JavaScript, introducing such a pattern would add a new layer of complexity to the component behavior API.
|
89
|
-
|
90
|
-
### Component styles
|
91
|
-
|
92
|
-
Since Primer React uses styled-components to manage CSS styles, any behaviors that affect styles should be doing so with styled-components. Any vanilla JavaScript behaviors that affect styles will add complexity by introducing a second mechanism for applying styles, since they will not be able to use styled-components.
|
93
|
-
|
94
|
-
## Decision
|
95
|
-
|
96
|
-
### Custom elements
|
97
|
-
|
98
|
-
Due to the challenges listed above and our priorities listed in the [Assumptions](#assumptions) section, we are not investing time in building out behaviors with custom elements in our Primer React library. Instead, we should spend time expanding coverage using React Hooks and focus on finding other approaches for making sure implementation of behaviors in our different stacks are consistent (such as integration tests).
|
99
|
-
|
100
|
-
### Vanilla JavaScript behaviors
|
101
|
-
|
102
|
-
Some behaviors can be implemented as vanilla JavaScript without introducing additional complexity to Primer React or its consumers. In cases where this is possible, behaviors will be implemented with no dependencies except the DOM and consumed within React Hooks to provide their functionality to Primer React.
|
103
|
-
|
104
|
-
In general, _portions of behaviors_ that affect or rely on **user interactions and events**, **shared state**, or **CSS styles** should be kept in React Hooks. Parts of the behavior that can be implemented in isolation of these concepts should be built with no dependency on React or other libraries.
|
105
|
-
|
106
|
-
[^1]: https://codesandbox.io/s/demo-styling-custom-element-g973d?file=/src/index.tsx
|
107
|
-
[^2]: https://github.com/github/details-dialog-element/blob/main/src/index.ts#L195
|
108
|
-
[^3]: https://github.com/github/details-dialog-element#details-dialog-close
|
@@ -1,132 +0,0 @@
|
|
1
|
-
_Note: This documentation is a draft and is expected to undergo several revisions before being adopted._
|
2
|
-
|
3
|
-
# Implementing Behaviors in Primer Components
|
4
|
-
|
5
|
-
Behaviors in Primer Components are implemented via React Hooks. Primer Components provides two types of behaviors: generic behaviors and component behaviors.
|
6
|
-
|
7
|
-
## Dependencies
|
8
|
-
|
9
|
-
**External dependencies:** Third-party/external dependencies are not allowed, except under very strict circumstances. If you need to use an external dependency, open an issue and discuss with the team.
|
10
|
-
|
11
|
-
**Internal dependencies:** Internal dependencies are fine and encouraged to reduce code duplication and maintain consistency. When taking an internal dependency, observe the following:
|
12
|
-
|
13
|
-
- No circular dependencies
|
14
|
-
- Components may depend on other components and component behaviors, but should avoid depending directly on generic behaviors.
|
15
|
-
- Component behaviors may depend on other component behaviors and generic behaviors.
|
16
|
-
- Generic behaviors may only depend on other generic behaviors.
|
17
|
-
|
18
|
-
See below for a visualization of allowed dependencies.
|
19
|
-
|
20
|
-
```
|
21
|
-
____________
|
22
|
-
| \*
|
23
|
-
+-------------V--------+ /
|
24
|
-
| Generic behaviors |---
|
25
|
-
+----------------------+
|
26
|
-
^
|
27
|
-
*| ___________
|
28
|
-
| | \*
|
29
|
-
+----------|----V-------+ /
|
30
|
-
| Component behaviors |---
|
31
|
-
+-----------------------+
|
32
|
-
^
|
33
|
-
1| _____
|
34
|
-
| | \*
|
35
|
-
+--------|---V-+ /
|
36
|
-
| Components |---
|
37
|
-
+--------------+
|
38
|
-
|
39
|
-
```
|
40
|
-
|
41
|
-
## Generic behaviors
|
42
|
-
|
43
|
-
Generic behaviors provide functionality that is not specific to any single component or class of components. If you can't tell which component it should operate on, it's probably a generic behavior. Generic behaviors are _low-level_. Generic behaviors may only have dependencies on other generic behaviors.
|
44
|
-
|
45
|
-
### Examples
|
46
|
-
|
47
|
-
- `useProvidedRefOrCreate`
|
48
|
-
- `usePosition`
|
49
|
-
- `useClickAway`
|
50
|
-
- `useTypeAhead`
|
51
|
-
|
52
|
-
## Component behaviors
|
53
|
-
|
54
|
-
Component behaviors specifically implement behaviors for components. Therefore, hooks that implement component behaviors should always return an object containing props objects to be spread across the elements that make up the component's JSX. While component behaviors do not necessarily have to be one-to-one, **a component may only use one component behavior**. Sometimes it makes sense to use the same component behavior on several components. For example: the Dialog, Popover, and PointerBox components may all use the `usePopover` component behavior.
|
55
|
-
|
56
|
-
### Examples
|
57
|
-
|
58
|
-
- `usePopover`
|
59
|
-
- `useComboBox`
|
60
|
-
- `useFilteredSearch`
|
61
|
-
- `useDetails`
|
62
|
-
|
63
|
-
## Implementation guidelines
|
64
|
-
|
65
|
-
All behaviors should be implemented as [React Hooks](https://reactjs.org/docs/hooks-intro.html).
|
66
|
-
|
67
|
-
Component behaviors should be relatively brief. A component behavior should build a component's experience through the combination of several configured generic behaviors.
|
68
|
-
|
69
|
-
Example: The Dialog component uses a `usePopover` behavior. The `usePopover` behavior in turn may call generic behaviors such as `usePosition` (to position the popover on the screen), `useClickAway` (to set up an event handler for clicking outside of the dialog), and `useFocusTrap` (to prevent focus from leaving the dialog while it is being shown).
|
70
|
-
|
71
|
-
### Component implementation
|
72
|
-
|
73
|
-
Component implementation is [discussed elsewhere](https://github.com/primer/react/blob/main/contributor-docs/CONTRIBUTING.md#developing-components), but with respect to behaviors, follow these guidelines.
|
74
|
-
|
75
|
-
- If a component has behaviors, it should make a call to exactly one component behavior hook.
|
76
|
-
- The hook will return an object containing multiple props objects. Each of the returned objects are props that should be spread onto the appropriate JSX element.
|
77
|
-
- Component implementations should be as clean as possible, mostly consisting of the JSX tree definition that the component renders.
|
78
|
-
- Component props and, in some circumstances, context values, should serve as arguments to component behavior hooks.
|
79
|
-
|
80
|
-
### Balancing API surface with supported scenarios
|
81
|
-
|
82
|
-
The [YAGNI Principle](https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it) cautions developers against building out functionality that isn't presently needed, but as a library, Primer Components should carefully balance the API surface area with building a library that functions for a wide range of use cases. Since it is difficult to define a quantitative test to determine whether or not a component or a behavior should support a certain scenario, there will be some subjectivity when it comes to choosing to build certain features. When adding a feature that seems too specific, try to _generalize_ it. Can multiple use cases be accounted for by implementing a single generalized feature? Can a known needed use case be extrapolated into a feature that supports that use case along with other use cases that are not yet known to be needed? If so, use these considerations when designing your APIs.
|
83
|
-
|
84
|
-
### Sensible defaults, powerful configuration, and last-resort "escape hatches"
|
85
|
-
|
86
|
-
- Defaults should take users down the “happy path” and place them into the “pit of success.”
|
87
|
-
- Configuration allows the component to reach more use cases. Components that use configurations to deviate from defaults should be viewed as first-class supported scenarios, just as important as the defaults.
|
88
|
-
- Escape hatches may be necessary to support consumers with requirements that we haven’t considered. It should be cleared that using escape hatches “voids your warranty,” yet, they should be fully documented.
|
89
|
-
|
90
|
-
### Arguments to behaviors
|
91
|
-
|
92
|
-
- As mentioned above, behaviors should have sensible defaults but powerful configuration. Behaviors are configured via arguments passed to the hook.
|
93
|
-
- When possible, a hook should be able to be called with zero arguments to get all the defaults.
|
94
|
-
- Each argument that is required should have an individual parameter on the hook function.
|
95
|
-
- Optional arguments (i.e. “settings”) should be provided via a strongly typed settings object as the last argument to a hook function.
|
96
|
-
|
97
|
-
### Return value of behavior hooks
|
98
|
-
|
99
|
-
#### Component behavior hook return value
|
100
|
-
|
101
|
-
Component behavior hooks produce _props_. Therefore, the return value of a component behavior should be a collection of props objects, intended to be spread onto JSX elements that render a component.
|
102
|
-
|
103
|
-
- Each element of the object returned from a component behavior hook is a props object that can be spread onto a JSX element
|
104
|
-
- The names of the keys should accurately indicate the JSX element onto which those props should be spread
|
105
|
-
|
106
|
-
Example: The Dialog component uses a `usePopover` component behavior, which may return an object like:
|
107
|
-
|
108
|
-
```
|
109
|
-
{
|
110
|
-
popoverProps: PropsObject,
|
111
|
-
openClickTargetProps: PropsObject,
|
112
|
-
closeClickTargetProps: PropsObject
|
113
|
-
}
|
114
|
-
```
|
115
|
-
|
116
|
-
Each of these props objects would then get spread onto their respective JSX elements.
|
117
|
-
|
118
|
-
#### Generic behavior hook return value
|
119
|
-
|
120
|
-
There are no restrictions on return values of generic behavior hooks. In fact, some behavioral hooks might not need to return anything. For example, a `useEscape` hook might simply set up a callback for an `Escape` keypress.
|
121
|
-
|
122
|
-
### Refs
|
123
|
-
|
124
|
-
- Often, a behavior will need to act on a real DOM element.
|
125
|
-
- In this case, the hook should return a ref as part of the returned props for that element. The ref will get spread onto the element, giving the ref access to it.
|
126
|
-
- Whenever you need a ref, it must be accepted as an optional setting to the hook. The hook then uses the `useProvidedRefOrCreate` hook to resolve a usable ref. Remember to return the resulting ref from the hook.
|
127
|
-
|
128
|
-
## Testing behaviors
|
129
|
-
|
130
|
-
- Whenever possible, test your changes in another application that makes heavy use of Primer Components.
|
131
|
-
- You may even want to build and “marinate” your component in another application before merging a change to Primer Components.
|
132
|
-
- Build the component, start using it in the application, and see how the component API feels. This approach works best for engineers at GitHub already working on a product written in React.
|