@primer/components 31.2.0-rc.b718ff50 → 31.2.0-rc.decfca99
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/.github/workflows/ci.yml +5 -2
- package/.github/workflows/release.yml +1 -0
- package/.github/workflows/release_canary.yml +1 -0
- package/CHANGELOG.md +13 -1
- package/dist/browser.esm.js +620 -618
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +188 -186
- package/dist/browser.umd.js.map +1 -1
- package/docs/content/ActionList2.mdx +360 -0
- package/docs/content/StateLabel.md +5 -4
- package/docs/content/getting-started.md +1 -1
- package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +17 -0
- package/lib/ActionList/Divider.jsx +29 -0
- package/lib/ActionList/Group.jsx +23 -0
- package/lib/ActionList/Header.jsx +66 -0
- package/lib/ActionList/Item.jsx +301 -0
- package/lib/ActionList/List.jsx +138 -0
- package/lib/ActionList/index.js +12 -23
- package/lib/ActionList2/Description.d.ts +12 -0
- package/lib/ActionList2/Description.js +53 -0
- package/lib/ActionList2/Description.jsx +30 -0
- package/lib/ActionList2/Divider.d.ts +5 -0
- package/lib/ActionList2/Divider.js +35 -0
- package/lib/ActionList2/Divider.jsx +22 -0
- package/lib/ActionList2/Group.d.ts +11 -0
- package/lib/ActionList2/Group.js +57 -0
- package/lib/ActionList2/Group.jsx +25 -0
- package/lib/ActionList2/Header.d.ts +26 -0
- package/lib/ActionList2/Header.js +55 -0
- package/lib/ActionList2/Header.jsx +36 -0
- package/lib/ActionList2/Item.d.ts +63 -0
- package/lib/ActionList2/Item.js +244 -0
- package/lib/ActionList2/Item.jsx +174 -0
- package/lib/ActionList2/LinkItem.d.ts +17 -0
- package/lib/ActionList2/LinkItem.js +57 -0
- package/lib/ActionList2/LinkItem.jsx +28 -0
- package/lib/ActionList2/List.d.ts +26 -0
- package/lib/ActionList2/List.js +59 -0
- package/lib/ActionList2/List.jsx +41 -0
- package/lib/ActionList2/Selection.d.ts +5 -0
- package/lib/ActionList2/Selection.js +70 -0
- package/lib/ActionList2/Selection.jsx +36 -0
- package/lib/ActionList2/Visuals.d.ts +9 -0
- package/lib/ActionList2/Visuals.js +90 -0
- package/lib/ActionList2/Visuals.jsx +48 -0
- package/lib/ActionList2/index.d.ts +36 -0
- package/lib/ActionList2/index.js +29 -0
- package/lib/ActionMenu.jsx +73 -0
- package/lib/AnchoredOverlay/AnchoredOverlay.jsx +100 -0
- package/lib/AnchoredOverlay/index.js +4 -12
- package/lib/Autocomplete/Autocomplete.d.ts +28 -28
- package/lib/Autocomplete/Autocomplete.jsx +100 -0
- package/lib/Autocomplete/AutocompleteContext.jsx +5 -0
- package/lib/Autocomplete/AutocompleteInput.d.ts +28 -28
- package/lib/Autocomplete/AutocompleteInput.jsx +113 -0
- package/lib/Autocomplete/AutocompleteMenu.jsx +190 -0
- package/lib/Autocomplete/AutocompleteOverlay.jsx +55 -0
- package/lib/Autocomplete/index.js +7 -14
- package/lib/Avatar.jsx +34 -0
- package/lib/AvatarPair.jsx +29 -0
- package/lib/AvatarStack.jsx +151 -0
- package/lib/BaseStyles.jsx +65 -0
- package/lib/BorderBox.jsx +18 -0
- package/lib/Box.jsx +10 -0
- package/lib/BranchName.jsx +20 -0
- package/lib/Breadcrumbs.jsx +74 -0
- package/lib/Button/Button.d.ts +25 -25
- package/lib/Button/Button.jsx +60 -0
- package/lib/Button/ButtonBase.jsx +36 -0
- package/lib/Button/ButtonClose.d.ts +45 -45
- package/lib/Button/ButtonClose.jsx +55 -0
- package/lib/Button/ButtonDanger.d.ts +25 -25
- package/lib/Button/ButtonDanger.jsx +63 -0
- package/lib/Button/ButtonGroup.jsx +55 -0
- package/lib/Button/ButtonInvisible.d.ts +25 -25
- package/lib/Button/ButtonInvisible.jsx +52 -0
- package/lib/Button/ButtonOutline.d.ts +25 -25
- package/lib/Button/ButtonOutline.jsx +63 -0
- package/lib/Button/ButtonPrimary.d.ts +25 -25
- package/lib/Button/ButtonPrimary.jsx +62 -0
- package/lib/Button/ButtonStyles.jsx +37 -0
- package/lib/Button/ButtonTableList.jsx +49 -0
- package/lib/Button/index.js +21 -70
- package/lib/Caret.jsx +93 -0
- package/lib/CircleBadge.jsx +43 -0
- package/lib/CircleOcticon.d.ts +42 -42
- package/lib/CircleOcticon.jsx +21 -0
- package/lib/CounterLabel.jsx +44 -0
- package/lib/Details.jsx +21 -0
- package/lib/Dialog/ConfirmationDialog.jsx +146 -0
- package/lib/Dialog/Dialog.jsx +273 -0
- package/lib/Dialog.d.ts +45 -45
- package/lib/Dialog.jsx +131 -0
- package/lib/Dropdown.d.ts +176 -176
- package/lib/Dropdown.jsx +134 -0
- package/lib/DropdownMenu/DropdownButton.d.ts +46 -46
- package/lib/DropdownMenu/DropdownButton.jsx +14 -0
- package/lib/DropdownMenu/DropdownMenu.jsx +70 -0
- package/lib/DropdownMenu/index.js +6 -20
- package/lib/DropdownStyles.js +18 -26
- package/lib/FilterList.d.ts +42 -42
- package/lib/FilterList.jsx +63 -0
- package/lib/FilteredActionList/FilteredActionList.jsx +100 -0
- package/lib/FilteredActionList/index.js +4 -12
- package/lib/FilteredSearch.jsx +29 -0
- package/lib/Flash.jsx +70 -0
- package/lib/Flex.jsx +15 -0
- package/lib/FormGroup.jsx +25 -0
- package/lib/Grid.jsx +15 -0
- package/lib/Header.jsx +90 -0
- package/lib/Heading.jsx +21 -0
- package/lib/Label.jsx +84 -0
- package/lib/LabelGroup.jsx +19 -0
- package/lib/Link.jsx +38 -0
- package/lib/Overlay.jsx +156 -0
- package/lib/Pagehead.jsx +18 -0
- package/lib/Pagination/Pagination.jsx +163 -0
- package/lib/Pagination/index.js +6 -12
- package/lib/Pagination/model.jsx +174 -0
- package/lib/PointerBox.jsx +25 -0
- package/lib/Popover.jsx +210 -0
- package/lib/Portal/Portal.jsx +79 -0
- package/lib/Portal/index.js +5 -16
- package/lib/Position.d.ts +4 -4
- package/lib/Position.jsx +46 -0
- package/lib/ProgressBar.jsx +39 -0
- package/lib/SelectMenu/SelectMenu.d.ts +246 -246
- package/lib/SelectMenu/SelectMenu.jsx +114 -0
- package/lib/SelectMenu/SelectMenuContext.jsx +5 -0
- package/lib/SelectMenu/SelectMenuDivider.jsx +43 -0
- package/lib/SelectMenu/SelectMenuFilter.jsx +59 -0
- package/lib/SelectMenu/SelectMenuFooter.jsx +46 -0
- package/lib/SelectMenu/SelectMenuHeader.jsx +44 -0
- package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib/SelectMenu/SelectMenuItem.jsx +143 -0
- package/lib/SelectMenu/SelectMenuList.jsx +60 -0
- package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +21 -0
- package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
- package/lib/SelectMenu/SelectMenuModal.jsx +119 -0
- package/lib/SelectMenu/SelectMenuTab.jsx +93 -0
- package/lib/SelectMenu/SelectMenuTabPanel.jsx +43 -0
- package/lib/SelectMenu/SelectMenuTabs.jsx +58 -0
- package/lib/SelectMenu/hooks/useKeyboardNav.js +80 -96
- package/lib/SelectMenu/index.js +7 -14
- package/lib/SelectPanel/SelectPanel.jsx +105 -0
- package/lib/SelectPanel/index.js +4 -12
- package/lib/SideNav.jsx +177 -0
- package/lib/Spinner.jsx +35 -0
- package/lib/StateLabel.d.ts +1 -1
- package/lib/StateLabel.js +6 -1
- package/lib/StateLabel.jsx +94 -0
- package/lib/StyledOcticon.jsx +20 -0
- package/lib/SubNav.jsx +104 -0
- package/lib/TabNav.jsx +60 -0
- package/lib/Text.jsx +14 -0
- package/lib/TextInput.jsx +23 -0
- package/lib/TextInputWithTokens.d.ts +28 -28
- package/lib/TextInputWithTokens.jsx +218 -0
- package/lib/ThemeProvider.jsx +130 -0
- package/lib/Timeline.d.ts +43 -43
- package/lib/Timeline.jsx +124 -0
- package/lib/Token/AvatarToken.d.ts +1 -1
- package/lib/Token/AvatarToken.jsx +54 -0
- package/lib/Token/IssueLabelToken.d.ts +1 -1
- package/lib/Token/IssueLabelToken.jsx +125 -0
- package/lib/Token/Token.d.ts +1 -1
- package/lib/Token/Token.jsx +103 -0
- package/lib/Token/TokenBase.jsx +88 -0
- package/lib/Token/_RemoveTokenButton.jsx +108 -0
- package/lib/Token/_TokenTextContainer.jsx +49 -0
- package/lib/Token/index.js +11 -30
- package/lib/Tooltip.jsx +246 -0
- package/lib/Truncate.jsx +27 -0
- package/lib/UnderlineNav.jsx +90 -0
- package/lib/_TextInputWrapper.js +2 -2
- package/lib/_TextInputWrapper.jsx +120 -0
- package/lib/_UnstyledTextInput.jsx +22 -0
- package/lib/__tests__/ActionList.test.jsx +49 -0
- package/lib/__tests__/ActionList.types.test.jsx +45 -0
- package/lib/__tests__/ActionList2.test.d.ts +1 -0
- package/lib/__tests__/ActionList2.test.js +53 -0
- package/lib/__tests__/ActionList2.test.jsx +46 -0
- package/lib/__tests__/ActionMenu.test.jsx +124 -0
- package/lib/__tests__/AnchoredOverlay.test.jsx +121 -0
- package/lib/__tests__/Autocomplete.test.jsx +299 -0
- package/lib/__tests__/Avatar.test.jsx +42 -0
- package/lib/__tests__/AvatarStack.test.jsx +43 -0
- package/lib/__tests__/BorderBox.test.jsx +36 -0
- package/lib/__tests__/Box.test.jsx +41 -0
- package/lib/__tests__/BranchName.test.jsx +27 -0
- package/lib/__tests__/Breadcrumbs.test.jsx +28 -0
- package/lib/__tests__/BreadcrumbsItem.test.jsx +31 -0
- package/lib/__tests__/Button.test.jsx +100 -0
- package/lib/__tests__/Caret.test.jsx +37 -0
- package/lib/__tests__/CircleBadge.test.jsx +55 -0
- package/lib/__tests__/CircleOcticon.test.jsx +45 -0
- package/lib/__tests__/ConfirmationDialog.test.jsx +119 -0
- package/lib/__tests__/CounterLabel.test.jsx +36 -0
- package/lib/__tests__/Details.test.jsx +85 -0
- package/lib/__tests__/Dialog.test.jsx +139 -0
- package/lib/__tests__/Dropdown.test.jsx +49 -0
- package/lib/__tests__/DropdownMenu.test.jsx +119 -0
- package/lib/__tests__/FilterList.test.jsx +27 -0
- package/lib/__tests__/FilterListItem.test.jsx +31 -0
- package/lib/__tests__/FilteredSearch.test.jsx +27 -0
- package/lib/__tests__/Flash.test.jsx +36 -0
- package/lib/__tests__/Flex.test.jsx +51 -0
- package/lib/__tests__/FormGroup.test.jsx +36 -0
- package/lib/__tests__/Grid.test.jsx +69 -0
- package/lib/__tests__/Header.test.jsx +45 -0
- package/lib/__tests__/Heading.test.jsx +71 -0
- package/lib/__tests__/KeyPaths.types.test.js +5 -8
- package/lib/__tests__/Label.test.jsx +33 -0
- package/lib/__tests__/LabelGroup.test.jsx +29 -0
- package/lib/__tests__/Link.test.jsx +43 -0
- package/lib/__tests__/Merge.types.test.js +13 -19
- package/lib/__tests__/Overlay.test.jsx +105 -0
- package/lib/__tests__/Pagehead.test.jsx +25 -0
- package/lib/__tests__/Pagination/Pagination.test.jsx +32 -0
- package/lib/__tests__/Pagination/PaginationModel.test.jsx +118 -0
- package/lib/__tests__/PointerBox.test.jsx +33 -0
- package/lib/__tests__/Popover.test.jsx +58 -0
- package/lib/__tests__/Portal.test.jsx +102 -0
- package/lib/__tests__/Position.test.jsx +96 -0
- package/lib/__tests__/ProgressBar.test.jsx +38 -0
- package/lib/__tests__/SelectMenu.test.jsx +120 -0
- package/lib/__tests__/SelectPanel.test.jsx +48 -0
- package/lib/__tests__/SideNav.test.jsx +55 -0
- package/lib/__tests__/Spinner.test.jsx +41 -0
- package/lib/__tests__/StateLabel.test.jsx +46 -0
- package/lib/__tests__/StyledOcticon.test.jsx +28 -0
- package/lib/__tests__/SubNav.test.jsx +47 -0
- package/lib/__tests__/SubNavLink.test.jsx +31 -0
- package/lib/__tests__/TabNav.test.jsx +32 -0
- package/lib/__tests__/Text.test.jsx +71 -0
- package/lib/__tests__/TextInput.test.jsx +45 -0
- package/lib/__tests__/TextInputWithTokens.test.jsx +302 -0
- package/lib/__tests__/ThemeProvider.test.jsx +314 -0
- package/lib/__tests__/Timeline.test.jsx +51 -0
- package/lib/__tests__/Token.test.jsx +93 -0
- package/lib/__tests__/Tooltip.test.jsx +46 -0
- package/lib/__tests__/Truncate.test.jsx +41 -0
- package/lib/__tests__/UnderlineNav.test.jsx +53 -0
- package/lib/__tests__/UnderlineNavLink.test.jsx +31 -0
- package/lib/__tests__/behaviors/anchoredPosition.test.js +229 -376
- package/lib/__tests__/behaviors/focusTrap.test.jsx +184 -0
- package/lib/__tests__/behaviors/focusZone.test.jsx +406 -0
- package/lib/__tests__/behaviors/iterateFocusableElements.test.jsx +58 -0
- package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +145 -216
- package/lib/__tests__/filterObject.test.js +48 -27
- package/lib/__tests__/hooks/useAnchoredPosition.test.jsx +29 -0
- package/lib/__tests__/hooks/useOnEscapePress.test.jsx +19 -0
- package/lib/__tests__/hooks/useOnOutsideClick.test.jsx +63 -0
- package/lib/__tests__/hooks/useOpenAndCloseFocus.test.jsx +61 -0
- package/lib/__tests__/hooks/useProvidedStateOrCreate.test.jsx +56 -0
- package/lib/__tests__/theme.test.js +33 -34
- package/lib/__tests__/themeGet.test.js +12 -23
- package/lib/__tests__/useSafeTimeout.test.jsx +36 -0
- package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
- package/lib/__tests__/utils/createSlots.test.js +75 -0
- package/lib/__tests__/utils/createSlots.test.jsx +57 -0
- package/lib/behaviors/anchoredPosition.js +205 -234
- package/lib/behaviors/focusTrap.js +121 -157
- package/lib/behaviors/focusZone.js +434 -509
- package/lib/behaviors/scrollIntoViewingArea.js +18 -35
- package/lib/constants.js +39 -43
- package/lib/drafts.d.ts +7 -0
- package/lib/drafts.js +20 -0
- package/lib/hooks/index.js +16 -60
- package/lib/hooks/useAnchoredPosition.js +32 -40
- package/lib/hooks/useCombinedRefs.js +32 -36
- package/lib/hooks/useDetails.jsx +39 -0
- package/lib/hooks/useDialog.js +72 -96
- package/lib/hooks/useFocusTrap.js +43 -60
- package/lib/hooks/useFocusZone.js +54 -50
- package/lib/hooks/useOnEscapePress.js +25 -36
- package/lib/hooks/useOnOutsideClick.jsx +61 -0
- package/lib/hooks/useOpenAndCloseFocus.js +22 -34
- package/lib/hooks/useOverlay.jsx +15 -0
- package/lib/hooks/useProvidedRefOrCreate.js +10 -14
- package/lib/hooks/useProvidedStateOrCreate.js +13 -16
- package/lib/hooks/useRenderForcingRef.js +13 -17
- package/lib/hooks/useResizeObserver.js +15 -18
- package/lib/hooks/useSafeTimeout.js +22 -30
- package/lib/hooks/useScrollFlash.js +16 -23
- package/lib/index.js +161 -636
- package/lib/polyfills/eventListenerSignal.js +37 -45
- package/lib/stories/ActionList2.stories.js +908 -0
- package/lib/stories/TextInput.stories.js +144 -0
- package/lib/sx.d.ts +2 -0
- package/lib/sx.js +10 -14
- package/lib/theme-preval.js +65 -2945
- package/lib/theme.js +3 -12
- package/lib/utils/create-slots.d.ts +17 -0
- package/lib/utils/create-slots.js +105 -0
- package/lib/utils/create-slots.jsx +65 -0
- package/lib/utils/deprecate.jsx +59 -0
- package/lib/utils/isNumeric.jsx +7 -0
- package/lib/utils/iterateFocusableElements.js +63 -85
- package/lib/utils/ssr.jsx +6 -0
- package/lib/utils/test-deprecations.jsx +20 -0
- package/lib/utils/test-helpers.jsx +8 -0
- package/lib/utils/test-matchers.jsx +100 -0
- package/lib/utils/testing.d.ts +14 -1
- package/lib/utils/testing.jsx +206 -0
- package/lib/utils/theme.js +33 -47
- package/lib/utils/types/AriaRole.js +2 -1
- package/lib/utils/types/ComponentProps.js +2 -1
- package/lib/utils/types/Flatten.js +2 -1
- package/lib/utils/types/KeyPaths.js +2 -1
- package/lib/utils/types/MandateProps.js +16 -1
- package/lib/utils/types/Merge.js +2 -1
- package/lib/utils/types/index.js +16 -69
- package/lib/utils/uniqueId.js +5 -8
- package/lib/utils/use-force-update.d.ts +1 -0
- package/lib/utils/use-force-update.js +13 -0
- package/lib/utils/useIsomorphicLayoutEffect.js +8 -11
- package/lib/utils/userAgent.js +8 -12
- package/lib-esm/ActionList2/Description.d.ts +12 -0
- package/lib-esm/ActionList2/Description.js +37 -0
- package/lib-esm/ActionList2/Divider.d.ts +5 -0
- package/lib-esm/ActionList2/Divider.js +23 -0
- package/lib-esm/ActionList2/Group.d.ts +11 -0
- package/lib-esm/ActionList2/Group.js +40 -0
- package/lib-esm/ActionList2/Header.d.ts +26 -0
- package/lib-esm/ActionList2/Header.js +44 -0
- package/lib-esm/ActionList2/Item.d.ts +63 -0
- package/lib-esm/ActionList2/Item.js +210 -0
- package/lib-esm/ActionList2/LinkItem.d.ts +17 -0
- package/lib-esm/ActionList2/LinkItem.js +43 -0
- package/lib-esm/ActionList2/List.d.ts +26 -0
- package/lib-esm/ActionList2/List.js +37 -0
- package/lib-esm/ActionList2/Selection.d.ts +5 -0
- package/lib-esm/ActionList2/Selection.js +52 -0
- package/lib-esm/ActionList2/Visuals.d.ts +9 -0
- package/lib-esm/ActionList2/Visuals.js +68 -0
- package/lib-esm/ActionList2/index.d.ts +36 -0
- package/lib-esm/ActionList2/index.js +33 -0
- package/lib-esm/Autocomplete/Autocomplete.d.ts +28 -28
- package/lib-esm/Autocomplete/AutocompleteInput.d.ts +28 -28
- package/lib-esm/Button/Button.d.ts +25 -25
- package/lib-esm/Button/ButtonClose.d.ts +45 -45
- package/lib-esm/Button/ButtonDanger.d.ts +25 -25
- package/lib-esm/Button/ButtonInvisible.d.ts +25 -25
- package/lib-esm/Button/ButtonOutline.d.ts +25 -25
- package/lib-esm/Button/ButtonPrimary.d.ts +25 -25
- package/lib-esm/CircleOcticon.d.ts +42 -42
- package/lib-esm/Dialog.d.ts +45 -45
- package/lib-esm/Dropdown.d.ts +176 -176
- package/lib-esm/DropdownMenu/DropdownButton.d.ts +46 -46
- package/lib-esm/FilterList.d.ts +42 -42
- package/lib-esm/Position.d.ts +4 -4
- package/lib-esm/SelectMenu/SelectMenu.d.ts +246 -246
- package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
- package/lib-esm/StateLabel.d.ts +1 -1
- package/lib-esm/StateLabel.js +7 -2
- package/lib-esm/TextInputWithTokens.d.ts +28 -28
- package/lib-esm/Timeline.d.ts +43 -43
- package/lib-esm/Token/AvatarToken.d.ts +1 -1
- package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
- package/lib-esm/Token/Token.d.ts +1 -1
- package/lib-esm/_TextInputWrapper.js +2 -2
- package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
- package/lib-esm/__tests__/ActionList2.test.js +41 -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/drafts.d.ts +7 -0
- package/lib-esm/drafts.js +8 -0
- package/lib-esm/stories/ActionList2.stories.js +796 -0
- package/lib-esm/stories/TextInput.stories.js +117 -0
- package/lib-esm/sx.d.ts +2 -0
- package/lib-esm/sx.js +3 -1
- package/lib-esm/theme-preval.js +81 -2
- package/lib-esm/utils/create-slots.d.ts +17 -0
- package/lib-esm/utils/create-slots.js +84 -0
- package/lib-esm/utils/testing.d.ts +14 -1
- package/lib-esm/utils/use-force-update.d.ts +1 -0
- package/lib-esm/utils/use-force-update.js +6 -0
- package/package-lock.json +153 -14
- package/package.json +7 -4
- package/script/build +1 -1
- package/src/ActionList2/Description.tsx +49 -0
- package/src/ActionList2/Divider.tsx +24 -0
- package/src/ActionList2/Group.tsx +34 -0
- package/src/ActionList2/Header.tsx +58 -0
- package/src/ActionList2/Item.tsx +245 -0
- package/src/ActionList2/LinkItem.tsx +49 -0
- package/src/ActionList2/List.tsx +55 -0
- package/src/ActionList2/Selection.tsx +40 -0
- package/src/ActionList2/Visuals.tsx +76 -0
- package/src/ActionList2/index.ts +39 -0
- package/src/StateLabel.tsx +14 -2
- package/src/_TextInputWrapper.tsx +7 -0
- package/src/__tests__/ActionList2.test.tsx +47 -0
- package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
- package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +1 -0
- package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +1 -0
- package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +1 -0
- package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +1 -0
- package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +1 -0
- package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +4 -0
- package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +1 -0
- package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +13 -6
- package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +1 -0
- package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +66 -0
- package/src/__tests__/__snapshots__/Token.test.tsx.snap +17 -0
- package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
- package/src/__tests__/utils/createSlots.test.tsx +74 -0
- package/src/drafts.ts +9 -0
- package/src/stories/ActionList2.stories.tsx +1291 -0
- package/src/stories/TextInput.stories.tsx +113 -0
- package/src/sx.ts +3 -0
- package/src/theme-preval.js +1 -0
- package/src/utils/create-slots.tsx +96 -0
- package/src/utils/use-force-update.ts +7 -0
- package/stats.html +1 -1
- package/tsconfig.base.json +20 -0
- package/tsconfig.build.json +2 -2
- package/tsconfig.json +4 -17
@@ -1,27 +1,21 @@
|
|
1
1
|
"use strict";
|
2
|
-
|
3
|
-
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.canMergeTwoTypes = canMergeTwoTypes;
|
7
|
-
exports.overridesAsExpected = overridesAsExpected;
|
8
|
-
exports.optionalityIsPreservedInFirstParameter = optionalityIsPreservedInFirstParameter;
|
9
|
-
exports.optionalityIsPreservedInSecondParameter = optionalityIsPreservedInSecondParameter;
|
10
|
-
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.optionalityIsPreservedInSecondParameter = exports.optionalityIsPreservedInFirstParameter = exports.overridesAsExpected = exports.canMergeTwoTypes = void 0;
|
11
4
|
function canMergeTwoTypes(x) {
|
12
|
-
|
5
|
+
return x;
|
13
6
|
}
|
14
|
-
|
7
|
+
exports.canMergeTwoTypes = canMergeTwoTypes;
|
15
8
|
function overridesAsExpected(x) {
|
16
|
-
|
9
|
+
return x;
|
17
10
|
}
|
18
|
-
|
11
|
+
exports.overridesAsExpected = overridesAsExpected;
|
19
12
|
function optionalityIsPreservedInFirstParameter(x) {
|
20
|
-
|
21
|
-
|
13
|
+
// @ts-expect-error: d is optional
|
14
|
+
return x;
|
22
15
|
}
|
23
|
-
|
16
|
+
exports.optionalityIsPreservedInFirstParameter = optionalityIsPreservedInFirstParameter;
|
24
17
|
function optionalityIsPreservedInSecondParameter(x) {
|
25
|
-
|
26
|
-
|
27
|
-
}
|
18
|
+
// @ts-expect-error: d is optional
|
19
|
+
return x;
|
20
|
+
}
|
21
|
+
exports.optionalityIsPreservedInSecondParameter = optionalityIsPreservedInSecondParameter;
|
@@ -0,0 +1,105 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
5
|
+
}) : (function(o, m, k, k2) {
|
6
|
+
if (k2 === undefined) k2 = k;
|
7
|
+
o[k2] = m[k];
|
8
|
+
}));
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
11
|
+
}) : function(o, v) {
|
12
|
+
o["default"] = v;
|
13
|
+
});
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
15
|
+
if (mod && mod.__esModule) return mod;
|
16
|
+
var result = {};
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
18
|
+
__setModuleDefault(result, mod);
|
19
|
+
return result;
|
20
|
+
};
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
23
|
+
};
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
25
|
+
const react_1 = __importStar(require("react"));
|
26
|
+
const __1 = require("..");
|
27
|
+
const react_2 = require("@testing-library/react");
|
28
|
+
const user_event_1 = __importDefault(require("@testing-library/user-event"));
|
29
|
+
const jest_axe_1 = require("jest-axe");
|
30
|
+
const theme_1 = __importDefault(require("../theme"));
|
31
|
+
const BaseStyles_1 = __importDefault(require("../BaseStyles"));
|
32
|
+
const ThemeProvider_1 = require("../ThemeProvider");
|
33
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
34
|
+
const TestComponent = ({ initialFocus, callback }) => {
|
35
|
+
const [isOpen, setIsOpen] = react_1.useState(false);
|
36
|
+
const buttonRef = react_1.useRef(null);
|
37
|
+
const confirmButtonRef = react_1.useRef(null);
|
38
|
+
const anchorRef = react_1.useRef(null);
|
39
|
+
const closeOverlay = () => {
|
40
|
+
setIsOpen(false);
|
41
|
+
if (callback) {
|
42
|
+
callback();
|
43
|
+
}
|
44
|
+
};
|
45
|
+
return (<ThemeProvider_1.ThemeProvider theme={theme_1.default}>
|
46
|
+
<BaseStyles_1.default>
|
47
|
+
<__1.Box position="absolute" top={0} left={0} bottom={0} right={0} ref={anchorRef}>
|
48
|
+
<__1.Button ref={buttonRef} onClick={() => setIsOpen(!isOpen)}>
|
49
|
+
open overlay
|
50
|
+
</__1.Button>
|
51
|
+
<__1.Button>outside</__1.Button>
|
52
|
+
{isOpen ? (<__1.Overlay initialFocusRef={initialFocus === 'button' ? confirmButtonRef : undefined} returnFocusRef={buttonRef} ignoreClickRefs={[buttonRef]} onEscape={closeOverlay} onClickOutside={closeOverlay} width="small">
|
53
|
+
<__1.Box display="flex" flexDirection="column" p={2}>
|
54
|
+
<__1.Text>Are you sure?</__1.Text>
|
55
|
+
<__1.ButtonDanger onClick={closeOverlay}>Cancel</__1.ButtonDanger>
|
56
|
+
<__1.Button onClick={closeOverlay} ref={confirmButtonRef}>
|
57
|
+
Confirm
|
58
|
+
</__1.Button>
|
59
|
+
</__1.Box>
|
60
|
+
</__1.Overlay>) : null}
|
61
|
+
</__1.Box>
|
62
|
+
</BaseStyles_1.default>
|
63
|
+
</ThemeProvider_1.ThemeProvider>);
|
64
|
+
};
|
65
|
+
describe('Overlay', () => {
|
66
|
+
it('should have no axe violations', async () => {
|
67
|
+
const { container } = react_2.render(<TestComponent />);
|
68
|
+
const results = await jest_axe_1.axe(container);
|
69
|
+
expect(results).toHaveNoViolations();
|
70
|
+
react_2.cleanup();
|
71
|
+
});
|
72
|
+
it('should focus element passed into function', async () => {
|
73
|
+
const { getByText } = react_2.render(<TestComponent initialFocus="button"/>);
|
74
|
+
user_event_1.default.click(getByText('open overlay'));
|
75
|
+
await react_2.waitFor(() => getByText('Confirm'));
|
76
|
+
const confirmButton = getByText('Confirm');
|
77
|
+
expect(document.activeElement).toEqual(confirmButton);
|
78
|
+
});
|
79
|
+
it('should focus first element when nothing is passed', async () => {
|
80
|
+
const { getByText } = react_2.render(<TestComponent />);
|
81
|
+
user_event_1.default.click(getByText('open overlay'));
|
82
|
+
await react_2.waitFor(() => getByText('Cancel'));
|
83
|
+
const cancelButton = getByText('Cancel');
|
84
|
+
expect(document.activeElement).toEqual(cancelButton);
|
85
|
+
});
|
86
|
+
it('should call function when user clicks outside container', () => {
|
87
|
+
const mockFunction = jest.fn();
|
88
|
+
const { getByText, queryAllByText } = react_2.render(<TestComponent callback={mockFunction}/>);
|
89
|
+
react_2.act(() => user_event_1.default.click(getByText('open overlay')));
|
90
|
+
react_2.act(() => user_event_1.default.click(getByText('outside')));
|
91
|
+
expect(mockFunction).toHaveBeenCalledTimes(1);
|
92
|
+
const cancelButtons = queryAllByText('Cancel');
|
93
|
+
expect(cancelButtons).toHaveLength(0);
|
94
|
+
});
|
95
|
+
it('should call function when user presses escape', () => {
|
96
|
+
const mockFunction = jest.fn();
|
97
|
+
const { getByText, queryAllByText } = react_2.render(<TestComponent callback={mockFunction}/>);
|
98
|
+
react_2.act(() => user_event_1.default.click(getByText('open overlay')));
|
99
|
+
const domNode = getByText('Are you sure?');
|
100
|
+
react_2.fireEvent.keyDown(domNode, { key: 'Escape', code: 'Escape', keyCode: 27, charCode: 27 });
|
101
|
+
expect(mockFunction).toHaveBeenCalledTimes(1);
|
102
|
+
const cancelButtons = queryAllByText('Cancel');
|
103
|
+
expect(cancelButtons).toHaveLength(0);
|
104
|
+
});
|
105
|
+
});
|
@@ -0,0 +1,25 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const __1 = require("..");
|
8
|
+
const theme_1 = __importDefault(require("../theme"));
|
9
|
+
const testing_1 = require("../utils/testing");
|
10
|
+
const react_2 = require("@testing-library/react");
|
11
|
+
const jest_axe_1 = require("jest-axe");
|
12
|
+
require("babel-polyfill");
|
13
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
14
|
+
describe('Pagehead', () => {
|
15
|
+
testing_1.behavesAsComponent({ Component: __1.Pagehead });
|
16
|
+
testing_1.checkExports('Pagehead', {
|
17
|
+
default: __1.Pagehead
|
18
|
+
});
|
19
|
+
it('should have no axe violations', async () => {
|
20
|
+
const { container } = react_2.render(<__1.Pagehead theme={theme_1.default}>Pagehead</__1.Pagehead>);
|
21
|
+
const results = await jest_axe_1.axe(container);
|
22
|
+
expect(results).toHaveNoViolations();
|
23
|
+
react_2.cleanup();
|
24
|
+
});
|
25
|
+
});
|
@@ -0,0 +1,32 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const Pagination_1 = __importDefault(require("../../Pagination"));
|
8
|
+
const testing_1 = require("../../utils/testing");
|
9
|
+
const react_2 = require("@testing-library/react");
|
10
|
+
const jest_axe_1 = require("jest-axe");
|
11
|
+
require("babel-polyfill");
|
12
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
13
|
+
const reqProps = { pageCount: 10, currentPage: 1 };
|
14
|
+
const comp = <Pagination_1.default {...reqProps}/>;
|
15
|
+
describe('Pagination', () => {
|
16
|
+
testing_1.behavesAsComponent({ Component: Pagination_1.default, toRender: () => comp });
|
17
|
+
it('should have no axe violations', async () => {
|
18
|
+
const { container } = react_2.render(comp);
|
19
|
+
const results = await jest_axe_1.axe(container, {
|
20
|
+
rules: {
|
21
|
+
// The skip-link rule has to do with entire documents
|
22
|
+
// and is not relevant to this component.
|
23
|
+
// See https://dequeuniversity.com/rules/axe/3.3/skip-link?application=axeAPI
|
24
|
+
'skip-link': {
|
25
|
+
enabled: false
|
26
|
+
}
|
27
|
+
}
|
28
|
+
});
|
29
|
+
expect(results).toHaveNoViolations();
|
30
|
+
react_2.cleanup();
|
31
|
+
});
|
32
|
+
});
|
@@ -0,0 +1,118 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
require("babel-polyfill");
|
4
|
+
const model_1 = require("../../Pagination/model");
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
6
|
+
function first(array, count = 1) {
|
7
|
+
const slice = array.slice(0, count);
|
8
|
+
return count === 1 ? slice[0] : slice;
|
9
|
+
}
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
11
|
+
function last(array, count = 1) {
|
12
|
+
const len = array.length;
|
13
|
+
const slice = array.slice(len - count, len);
|
14
|
+
return count === 1 ? slice[0] : slice;
|
15
|
+
}
|
16
|
+
describe('Pagination model', () => {
|
17
|
+
it('sets disabled on prev links', () => {
|
18
|
+
const model1 = model_1.buildPaginationModel(10, 1, true, 1, 2);
|
19
|
+
expect(first(model1).type).toEqual('PREV');
|
20
|
+
expect(first(model1).disabled).toBe(true);
|
21
|
+
const model2 = model_1.buildPaginationModel(10, 2, true, 1, 2);
|
22
|
+
expect(first(model2).type).toEqual('PREV');
|
23
|
+
expect(first(model2).disabled).toBe(false);
|
24
|
+
});
|
25
|
+
it('sets disabled on next links', () => {
|
26
|
+
const model1 = model_1.buildPaginationModel(10, 10, true, 1, 2);
|
27
|
+
expect(last(model1).type).toEqual('NEXT');
|
28
|
+
expect(last(model1).disabled).toBe(true);
|
29
|
+
const model2 = model_1.buildPaginationModel(10, 9, true, 1, 2);
|
30
|
+
expect(last(model2).type).toEqual('NEXT');
|
31
|
+
expect(last(model2).disabled).toBe(false);
|
32
|
+
});
|
33
|
+
it('sets the page number for prev and next links', () => {
|
34
|
+
const model = model_1.buildPaginationModel(10, 5, true, 1, 2);
|
35
|
+
expect(first(model).num).toEqual(4);
|
36
|
+
expect(last(model).num).toEqual(6);
|
37
|
+
});
|
38
|
+
it('ensures margin pages on the left', () => {
|
39
|
+
const model = model_1.buildPaginationModel(10, 10, true, 2, 0);
|
40
|
+
const slice = first(model, 5);
|
41
|
+
const expected = [
|
42
|
+
{ type: 'PREV', num: 9 },
|
43
|
+
{ type: 'NUM', num: 1 },
|
44
|
+
{ type: 'NUM', num: 2 },
|
45
|
+
{ type: 'BREAK' },
|
46
|
+
{ type: 'NUM' }
|
47
|
+
];
|
48
|
+
expect(slice).toMatchObject(expected);
|
49
|
+
});
|
50
|
+
it('ensures margin pages on the right', () => {
|
51
|
+
const model = model_1.buildPaginationModel(10, 1, true, 2, 0);
|
52
|
+
const slice = last(model, 5);
|
53
|
+
const expected = [
|
54
|
+
{ type: 'NUM' },
|
55
|
+
{ type: 'BREAK' },
|
56
|
+
{ type: 'NUM', num: 9 },
|
57
|
+
{ type: 'NUM', num: 10 },
|
58
|
+
{ type: 'NEXT', num: 2 }
|
59
|
+
];
|
60
|
+
expect(slice).toMatchObject(expected);
|
61
|
+
});
|
62
|
+
it('ensures that the current page is surrounded by the right number of pages', () => {
|
63
|
+
const model = model_1.buildPaginationModel(10, 5, true, 1, 1);
|
64
|
+
const expected = [
|
65
|
+
{ type: 'PREV', num: 4 },
|
66
|
+
{ type: 'NUM', num: 1 },
|
67
|
+
{ type: 'BREAK' },
|
68
|
+
{ type: 'NUM', num: 4 },
|
69
|
+
{ type: 'NUM', num: 5, selected: true },
|
70
|
+
{ type: 'NUM', num: 6 },
|
71
|
+
{ type: 'BREAK' },
|
72
|
+
{ type: 'NUM', num: 10 },
|
73
|
+
{ type: 'NEXT', num: 6 }
|
74
|
+
];
|
75
|
+
expect(model).toMatchObject(expected);
|
76
|
+
});
|
77
|
+
it('adds items to the right if it hits bounds to the left', () => {
|
78
|
+
const model = model_1.buildPaginationModel(15, 2, true, 1, 1);
|
79
|
+
const expected = [
|
80
|
+
{ type: 'PREV', num: 1 },
|
81
|
+
{ type: 'NUM', num: 1 },
|
82
|
+
{ type: 'NUM', num: 2, selected: true },
|
83
|
+
{ type: 'NUM', num: 3 },
|
84
|
+
// normally with a surround of 1, only 1 and 3 would be shown
|
85
|
+
// however, since 1 was already shown, we extend to 4
|
86
|
+
{ type: 'NUM', num: 4 },
|
87
|
+
{ type: 'BREAK' }
|
88
|
+
];
|
89
|
+
expect(first(model, 6)).toMatchObject(expected);
|
90
|
+
});
|
91
|
+
it('adds items to the left if it hits bounds to the right', () => {
|
92
|
+
const model = model_1.buildPaginationModel(15, 14, true, 1, 1);
|
93
|
+
const expected = [
|
94
|
+
// normally with a surround of 1, only 13 and 15 would be shown
|
95
|
+
// however, since 15 was already shown, we extend to 12
|
96
|
+
{ type: 'BREAK' },
|
97
|
+
{ type: 'NUM', num: 12 },
|
98
|
+
{ type: 'NUM', num: 13 },
|
99
|
+
{ type: 'NUM', num: 14, selected: true },
|
100
|
+
{ type: 'NUM', num: 15 },
|
101
|
+
{ type: 'NEXT', num: 15 }
|
102
|
+
];
|
103
|
+
expect(last(model, 6)).toMatchObject(expected);
|
104
|
+
});
|
105
|
+
it('correctly creates breaks next to the next/prev links when margin is 0', () => {
|
106
|
+
const model = model_1.buildPaginationModel(10, 5, true, 0, 1);
|
107
|
+
const expected = [
|
108
|
+
{ type: 'PREV' },
|
109
|
+
{ type: 'BREAK', num: 1 },
|
110
|
+
{ type: 'NUM', num: 4 },
|
111
|
+
{ type: 'NUM', num: 5, selected: true },
|
112
|
+
{ type: 'NUM', num: 6 },
|
113
|
+
{ type: 'BREAK', num: 10 },
|
114
|
+
{ type: 'NEXT' }
|
115
|
+
];
|
116
|
+
expect(model).toMatchObject(expected);
|
117
|
+
});
|
118
|
+
});
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const __1 = require("..");
|
8
|
+
const testing_1 = require("../utils/testing");
|
9
|
+
const react_2 = require("@testing-library/react");
|
10
|
+
const jest_axe_1 = require("jest-axe");
|
11
|
+
require("babel-polyfill");
|
12
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
13
|
+
describe('PointerBox', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.PointerBox });
|
15
|
+
testing_1.checkExports('PointerBox', {
|
16
|
+
default: __1.PointerBox
|
17
|
+
});
|
18
|
+
it('renders a <Caret> in <BorderBox> with relative positioning', () => {
|
19
|
+
expect(testing_1.render(<__1.PointerBox />)).toMatchSnapshot();
|
20
|
+
});
|
21
|
+
it('should have no axe violations', async () => {
|
22
|
+
const { container } = react_2.render(<__1.PointerBox />);
|
23
|
+
const results = await jest_axe_1.axe(container);
|
24
|
+
expect(results).toHaveNoViolations();
|
25
|
+
react_2.cleanup();
|
26
|
+
});
|
27
|
+
it('passes the "borderColor" prop to both <BorderBox> and <Caret>', () => {
|
28
|
+
expect(testing_1.render(<__1.PointerBox borderColor="danger.emphasis"/>)).toMatchSnapshot();
|
29
|
+
});
|
30
|
+
it('passes the "bg" prop to both <BorderBox> and <Caret>', () => {
|
31
|
+
expect(testing_1.render(<__1.PointerBox bg="danger.subtle"/>)).toMatchSnapshot();
|
32
|
+
});
|
33
|
+
});
|
@@ -0,0 +1,58 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const Popover_1 = __importDefault(require("../Popover"));
|
8
|
+
const testing_1 = require("../utils/testing");
|
9
|
+
const react_2 = require("@testing-library/react");
|
10
|
+
const jest_axe_1 = require("jest-axe");
|
11
|
+
require("babel-polyfill");
|
12
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
13
|
+
const comp = (<Popover_1.default caret="top" open>
|
14
|
+
<Popover_1.default.Content>Hello!</Popover_1.default.Content>
|
15
|
+
</Popover_1.default>);
|
16
|
+
describe('Popover', () => {
|
17
|
+
testing_1.behavesAsComponent({ Component: Popover_1.default, toRender: () => comp });
|
18
|
+
testing_1.checkExports('Popover', {
|
19
|
+
default: Popover_1.default
|
20
|
+
});
|
21
|
+
describe('Popover.Content', () => {
|
22
|
+
testing_1.behavesAsComponent({ Component: Popover_1.default.Content, toRender: () => comp });
|
23
|
+
});
|
24
|
+
it('should have no axe violations', async () => {
|
25
|
+
const { container } = react_2.render(<Popover_1.default caret="top" open>
|
26
|
+
<Popover_1.default.Content>Hello!</Popover_1.default.Content>
|
27
|
+
</Popover_1.default>);
|
28
|
+
const results = await jest_axe_1.axe(container);
|
29
|
+
expect(results).toHaveNoViolations();
|
30
|
+
react_2.cleanup();
|
31
|
+
});
|
32
|
+
const CARET_POSITIONS = [
|
33
|
+
'top',
|
34
|
+
'bottom',
|
35
|
+
'left',
|
36
|
+
'right',
|
37
|
+
'bottom-left',
|
38
|
+
'bottom-right',
|
39
|
+
'top-left',
|
40
|
+
'top-right',
|
41
|
+
'left-bottom',
|
42
|
+
'left-top',
|
43
|
+
'right-bottom',
|
44
|
+
'right-top'
|
45
|
+
];
|
46
|
+
for (const pos of CARET_POSITIONS) {
|
47
|
+
it(`renders correctly for a caret position of ${pos}`, () => {
|
48
|
+
const element = (<Popover_1.default caret={pos} open>
|
49
|
+
<Popover_1.default.Content>Hello!</Popover_1.default.Content>
|
50
|
+
</Popover_1.default>);
|
51
|
+
expect(testing_1.render(element)).toMatchSnapshot();
|
52
|
+
});
|
53
|
+
}
|
54
|
+
it('renders both elements as a <div>', () => {
|
55
|
+
expect(testing_1.render(<Popover_1.default />).type).toEqual('div');
|
56
|
+
expect(testing_1.render(<Popover_1.default.Content />).type).toEqual('div');
|
57
|
+
});
|
58
|
+
});
|
@@ -0,0 +1,102 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
5
|
+
}) : (function(o, m, k, k2) {
|
6
|
+
if (k2 === undefined) k2 = k;
|
7
|
+
o[k2] = m[k];
|
8
|
+
}));
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
11
|
+
}) : function(o, v) {
|
12
|
+
o["default"] = v;
|
13
|
+
});
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
15
|
+
if (mod && mod.__esModule) return mod;
|
16
|
+
var result = {};
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
18
|
+
__setModuleDefault(result, mod);
|
19
|
+
return result;
|
20
|
+
};
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
23
|
+
};
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
25
|
+
const index_1 = __importStar(require("../Portal/index"));
|
26
|
+
const react_1 = require("@testing-library/react");
|
27
|
+
const react_2 = __importDefault(require("react"));
|
28
|
+
const BaseStyles_1 = __importDefault(require("../BaseStyles"));
|
29
|
+
describe('Portal', () => {
|
30
|
+
it('renders a default portal into document.body (no BaseStyles present)', () => {
|
31
|
+
const { baseElement } = react_1.render(<index_1.default>123test123</index_1.default>);
|
32
|
+
const generatedRoot = baseElement.querySelector('#__primerPortalRoot__');
|
33
|
+
expect(generatedRoot).toBeInstanceOf(HTMLElement);
|
34
|
+
expect(generatedRoot?.textContent?.trim()).toEqual('123test123');
|
35
|
+
baseElement.innerHTML = '';
|
36
|
+
});
|
37
|
+
it('renders a default portal into nearest BaseStyles element', () => {
|
38
|
+
const toRender = (<div id="renderedRoot">
|
39
|
+
<BaseStyles_1.default>
|
40
|
+
<div id="baseStylesRoot">
|
41
|
+
<index_1.default>123test123</index_1.default>
|
42
|
+
</div>
|
43
|
+
</BaseStyles_1.default>
|
44
|
+
</div>);
|
45
|
+
const { baseElement } = react_1.render(toRender);
|
46
|
+
const baseStylesRoot = baseElement.querySelector('#baseStylesRoot');
|
47
|
+
const baseStylesElement = baseStylesRoot?.parentElement;
|
48
|
+
const generatedRoot = baseStylesElement?.querySelector('#__primerPortalRoot__');
|
49
|
+
expect(baseStylesRoot).toBeInstanceOf(HTMLElement);
|
50
|
+
expect(baseStylesElement).toBeInstanceOf(HTMLElement);
|
51
|
+
expect(generatedRoot).toBeInstanceOf(HTMLElement);
|
52
|
+
expect(generatedRoot?.textContent?.trim()).toEqual('123test123');
|
53
|
+
baseElement.innerHTML = '';
|
54
|
+
});
|
55
|
+
it('renders into the custom portal root (default root name - declarative)', () => {
|
56
|
+
const toRender = (<div id="renderedRoot">
|
57
|
+
<div id="__primerPortalRoot__"></div>
|
58
|
+
<index_1.default>123test123</index_1.default>
|
59
|
+
</div>);
|
60
|
+
const { baseElement } = react_1.render(toRender);
|
61
|
+
const renderedRoot = baseElement.querySelector('#renderedRoot');
|
62
|
+
const portalRoot = renderedRoot?.querySelector('#__primerPortalRoot__');
|
63
|
+
expect(portalRoot).toBeInstanceOf(HTMLElement);
|
64
|
+
expect(portalRoot?.textContent?.trim()).toEqual('123test123');
|
65
|
+
baseElement.innerHTML = '';
|
66
|
+
});
|
67
|
+
it('renders into the custom portal root (default root name - imperative)', () => {
|
68
|
+
const portalRootJSX = <div id="myPortalRoot"></div>;
|
69
|
+
let { baseElement } = react_1.render(portalRootJSX);
|
70
|
+
const portalRoot = baseElement.querySelector('#myPortalRoot');
|
71
|
+
expect(portalRoot).toBeInstanceOf(HTMLElement);
|
72
|
+
index_1.registerPortalRoot(baseElement.querySelector('#myPortalRoot'));
|
73
|
+
const toRender = <index_1.default>123test123</index_1.default>;
|
74
|
+
({ baseElement } = react_1.render(toRender));
|
75
|
+
expect(portalRoot?.textContent?.trim()).toEqual('123test123');
|
76
|
+
baseElement.innerHTML = '';
|
77
|
+
});
|
78
|
+
it('renders into multiple custom portal roots (named)', () => {
|
79
|
+
const portalRootJSX = (<main>
|
80
|
+
<div id="myPortalRoot1"></div>
|
81
|
+
<div id="myPortalRoot2"></div>
|
82
|
+
</main>);
|
83
|
+
let { baseElement } = react_1.render(portalRootJSX);
|
84
|
+
const fancyPortalRoot1 = baseElement.querySelector('#myPortalRoot1');
|
85
|
+
const fancyPortalRoot2 = baseElement.querySelector('#myPortalRoot2');
|
86
|
+
expect(fancyPortalRoot1).toBeInstanceOf(HTMLElement);
|
87
|
+
expect(fancyPortalRoot2).toBeInstanceOf(HTMLElement);
|
88
|
+
index_1.registerPortalRoot(baseElement.querySelector('#myPortalRoot1'), 'fancyPortal1');
|
89
|
+
index_1.registerPortalRoot(baseElement.querySelector('#myPortalRoot2'), 'fancyPortal2');
|
90
|
+
const toRender = (<>
|
91
|
+
<index_1.default>123test123</index_1.default>
|
92
|
+
<index_1.default containerName="fancyPortal1">456test456</index_1.default>
|
93
|
+
<index_1.default containerName="fancyPortal2">789test789</index_1.default>
|
94
|
+
</>);
|
95
|
+
({ baseElement } = react_1.render(toRender));
|
96
|
+
const generatedRoot = baseElement.querySelector('#__primerPortalRoot__');
|
97
|
+
expect(generatedRoot?.textContent?.trim()).toEqual('123test123');
|
98
|
+
expect(fancyPortalRoot1?.textContent?.trim()).toEqual('456test456');
|
99
|
+
expect(fancyPortalRoot2?.textContent?.trim()).toEqual('789test789');
|
100
|
+
baseElement.innerHTML = '';
|
101
|
+
});
|
102
|
+
});
|
@@ -0,0 +1,96 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const __1 = require("..");
|
8
|
+
const testing_1 = require("../utils/testing");
|
9
|
+
const react_2 = require("@testing-library/react");
|
10
|
+
const jest_axe_1 = require("jest-axe");
|
11
|
+
require("babel-polyfill");
|
12
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
13
|
+
describe('position components', () => {
|
14
|
+
describe('Absolute', () => {
|
15
|
+
testing_1.behavesAsComponent({ Component: __1.Absolute });
|
16
|
+
testing_1.checkExports('Position', {
|
17
|
+
default: __1.Position,
|
18
|
+
Absolute: __1.Absolute,
|
19
|
+
Fixed: __1.Fixed,
|
20
|
+
Relative: __1.Relative,
|
21
|
+
Sticky: __1.Sticky
|
22
|
+
});
|
23
|
+
it('should have no axe violations', async () => {
|
24
|
+
const { container } = react_2.render(<__1.Absolute />);
|
25
|
+
const results = await jest_axe_1.axe(container);
|
26
|
+
expect(results).toHaveNoViolations();
|
27
|
+
react_2.cleanup();
|
28
|
+
});
|
29
|
+
it('sets position: absolute', () => {
|
30
|
+
expect(testing_1.render(<__1.Absolute />)).toHaveStyleRule('position', 'absolute');
|
31
|
+
});
|
32
|
+
it('can render other components with the as prop', () => {
|
33
|
+
const result = testing_1.render(<__1.Absolute as={__1.Box} borderWidth="1px" borderStyle="solid" borderColor="border.default" borderRadius={2}/>);
|
34
|
+
expect(result).toHaveStyleRule('position', 'absolute');
|
35
|
+
expect(result).toHaveStyleRule('border-width', '1px');
|
36
|
+
expect(result).toHaveStyleRule('border-style', 'solid');
|
37
|
+
});
|
38
|
+
});
|
39
|
+
describe('Fixed', () => {
|
40
|
+
testing_1.behavesAsComponent({ Component: __1.Fixed });
|
41
|
+
it('respects the "as" prop', () => {
|
42
|
+
expect(testing_1.render(<__1.Fixed as="span"/>).type).toEqual('span');
|
43
|
+
});
|
44
|
+
it('should have no axe violations', async () => {
|
45
|
+
const { container } = react_2.render(<__1.Fixed />);
|
46
|
+
const results = await jest_axe_1.axe(container);
|
47
|
+
expect(results).toHaveNoViolations();
|
48
|
+
react_2.cleanup();
|
49
|
+
});
|
50
|
+
it('sets position: fixed', () => {
|
51
|
+
expect(testing_1.render(<__1.Fixed />)).toHaveStyleRule('position', 'fixed');
|
52
|
+
});
|
53
|
+
it('can render other components with the as prop', () => {
|
54
|
+
const result = testing_1.render(<__1.Fixed as={__1.Box} borderWidth="1px" borderStyle="solid" borderColor="border.default" borderRadius={2}/>);
|
55
|
+
expect(result).toHaveStyleRule('position', 'fixed');
|
56
|
+
expect(result).toHaveStyleRule('border-width', '1px');
|
57
|
+
expect(result).toHaveStyleRule('border-style', 'solid');
|
58
|
+
});
|
59
|
+
});
|
60
|
+
describe('Relative', () => {
|
61
|
+
testing_1.behavesAsComponent({ Component: __1.Relative });
|
62
|
+
it('should have no axe violations', async () => {
|
63
|
+
const { container } = react_2.render(<__1.Relative />);
|
64
|
+
const results = await jest_axe_1.axe(container);
|
65
|
+
expect(results).toHaveNoViolations();
|
66
|
+
react_2.cleanup();
|
67
|
+
});
|
68
|
+
it('sets position: relative', () => {
|
69
|
+
expect(testing_1.render(<__1.Relative />)).toHaveStyleRule('position', 'relative');
|
70
|
+
});
|
71
|
+
it('can render other components with the as prop', () => {
|
72
|
+
const result = testing_1.render(<__1.Relative as={__1.Box} borderWidth="1px" borderStyle="solid" borderColor="border.default" borderRadius={2}/>);
|
73
|
+
expect(result).toHaveStyleRule('position', 'relative');
|
74
|
+
expect(result).toHaveStyleRule('border-width', '1px');
|
75
|
+
expect(result).toHaveStyleRule('border-style', 'solid');
|
76
|
+
});
|
77
|
+
});
|
78
|
+
describe('Sticky', () => {
|
79
|
+
testing_1.behavesAsComponent({ Component: __1.Sticky });
|
80
|
+
it('should have no axe violations', async () => {
|
81
|
+
const { container } = react_2.render(<__1.Sticky />);
|
82
|
+
const results = await jest_axe_1.axe(container);
|
83
|
+
expect(results).toHaveNoViolations();
|
84
|
+
react_2.cleanup();
|
85
|
+
});
|
86
|
+
it('sets position: sticky', () => {
|
87
|
+
expect(testing_1.render(<__1.Sticky />)).toHaveStyleRule('position', 'sticky');
|
88
|
+
});
|
89
|
+
it('can render other components with the as prop', () => {
|
90
|
+
const result = testing_1.render(<__1.Sticky as={__1.Box} borderWidth="1px" borderStyle="solid" borderColor="border.default" borderRadius={2}/>);
|
91
|
+
expect(result).toHaveStyleRule('position', 'sticky');
|
92
|
+
expect(result).toHaveStyleRule('border-width', '1px');
|
93
|
+
expect(result).toHaveStyleRule('border-style', 'solid');
|
94
|
+
});
|
95
|
+
});
|
96
|
+
});
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = __importDefault(require("react"));
|
7
|
+
const __1 = require("..");
|
8
|
+
const testing_1 = require("../utils/testing");
|
9
|
+
const react_2 = require("@testing-library/react");
|
10
|
+
const jest_axe_1 = require("jest-axe");
|
11
|
+
require("babel-polyfill");
|
12
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
13
|
+
describe('ProgressBar', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.ProgressBar });
|
15
|
+
testing_1.checkExports('ProgressBar', {
|
16
|
+
default: __1.ProgressBar
|
17
|
+
});
|
18
|
+
it('should have no axe violations', async () => {
|
19
|
+
const { container } = react_2.render(<__1.ProgressBar progress={80} barSize="small"/>);
|
20
|
+
const results = await jest_axe_1.axe(container);
|
21
|
+
expect(results).toHaveNoViolations();
|
22
|
+
react_2.cleanup();
|
23
|
+
});
|
24
|
+
it('respects the "barSize" prop', () => {
|
25
|
+
expect(testing_1.render(<__1.ProgressBar progress={80} barSize="small"/>)).toHaveStyleRule('height', '5px');
|
26
|
+
expect(testing_1.render(<__1.ProgressBar progress={80} barSize="default"/>)).toHaveStyleRule('height', '8px');
|
27
|
+
expect(testing_1.render(<__1.ProgressBar progress={80} barSize="large"/>)).toHaveStyleRule('height', '10px');
|
28
|
+
});
|
29
|
+
it('respects the "inline" prop', () => {
|
30
|
+
expect(testing_1.render(<__1.ProgressBar progress={80} inline/>)).toHaveStyleRule('display', 'inline-flex');
|
31
|
+
});
|
32
|
+
it('respects the "width" prop', () => {
|
33
|
+
expect(testing_1.render(<__1.ProgressBar progress={80} inline width="100px"/>)).toHaveStyleRule('width', '100px');
|
34
|
+
});
|
35
|
+
it('respects the "progress" prop', () => {
|
36
|
+
expect(testing_1.render(<__1.ProgressBar progress={80}/>)).toMatchSnapshot();
|
37
|
+
});
|
38
|
+
});
|