@primer/components 31.2.0-rc.c7f73427 → 31.2.1-rc.0e01900c
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 +18 -0
- package/dist/browser.esm.js +656 -645
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +211 -200
- package/dist/browser.umd.js.map +1 -1
- package/docs/content/ActionList2.mdx +358 -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.js +28 -19
- package/lib/ActionList/Item.jsx +311 -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 +57 -0
- package/lib/ActionList2/Description.jsx +29 -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 +242 -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 +84 -0
- package/lib/ActionList2/Selection.jsx +50 -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.js +1 -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/NewButton/button-counter.d.ts +6 -0
- package/lib/NewButton/button-counter.js +31 -0
- package/lib/NewButton/button-counter.jsx +14 -0
- package/lib/NewButton/button.d.ts +13 -0
- package/lib/NewButton/button.js +316 -0
- package/lib/NewButton/button.jsx +278 -0
- package/lib/NewButton/index.d.ts +14 -0
- package/lib/NewButton/index.js +8 -0
- package/lib/NewButton/types.d.ts +32 -0
- package/lib/NewButton/types.js +2 -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.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__/NewButton.test.d.ts +1 -0
- package/lib/__tests__/NewButton.test.js +95 -0
- package/lib/__tests__/NewButton.test.jsx +61 -0
- 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 +8 -0
- package/lib/drafts.js +21 -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.d.ts +2 -0
- package/lib/index.js +163 -636
- package/lib/polyfills/eventListenerSignal.js +37 -45
- package/lib/stories/ActionList2.stories.js +908 -0
- package/lib/stories/NewButton.stories.js +230 -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/ActionList/Item.js +28 -19
- package/lib-esm/ActionList2/Description.d.ts +12 -0
- package/lib-esm/ActionList2/Description.js +41 -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 +208 -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 +66 -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/Dialog.js +1 -0
- 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/NewButton/button-counter.d.ts +6 -0
- package/lib-esm/NewButton/button-counter.js +18 -0
- package/lib-esm/NewButton/button.d.ts +13 -0
- package/lib-esm/NewButton/button.js +298 -0
- package/lib-esm/NewButton/index.d.ts +14 -0
- package/lib-esm/NewButton/index.js +5 -0
- package/lib-esm/NewButton/types.d.ts +32 -0
- package/lib-esm/NewButton/types.js +1 -0
- 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/__tests__/ActionList2.test.d.ts +1 -0
- package/lib-esm/__tests__/ActionList2.test.js +41 -0
- package/lib-esm/__tests__/NewButton.test.d.ts +1 -0
- package/lib-esm/__tests__/NewButton.test.js +84 -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 +8 -0
- package/lib-esm/drafts.js +9 -0
- package/lib-esm/index.d.ts +2 -0
- package/lib-esm/index.js +1 -0
- package/lib-esm/stories/ActionList2.stories.js +796 -0
- package/lib-esm/stories/NewButton.stories.js +178 -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/ActionList/Item.tsx +32 -19
- package/src/ActionList2/Description.tsx +52 -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 +246 -0
- package/src/ActionList2/LinkItem.tsx +49 -0
- package/src/ActionList2/List.tsx +55 -0
- package/src/ActionList2/Selection.tsx +60 -0
- package/src/ActionList2/Visuals.tsx +76 -0
- package/src/ActionList2/index.ts +39 -0
- package/src/Dialog/Dialog.tsx +1 -0
- package/src/NewButton/button-counter.tsx +15 -0
- package/src/NewButton/button.tsx +279 -0
- package/src/NewButton/index.ts +10 -0
- package/src/NewButton/types.ts +36 -0
- package/src/StateLabel.tsx +14 -2
- package/src/__tests__/ActionList2.test.tsx +47 -0
- package/src/__tests__/NewButton.test.tsx +70 -0
- package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
- package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +722 -255
- 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__/NewButton.test.tsx.snap +300 -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 +10 -0
- package/src/index.ts +2 -0
- package/src/stories/ActionList2.stories.tsx +1291 -0
- package/src/stories/NewButton.stories.tsx +201 -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
@@ -0,0 +1,119 @@
|
|
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 = require("@testing-library/react");
|
7
|
+
require("babel-polyfill");
|
8
|
+
const jest_axe_1 = require("jest-axe");
|
9
|
+
const react_2 = __importDefault(require("react"));
|
10
|
+
const theme_1 = __importDefault(require("../theme"));
|
11
|
+
const DropdownMenu_1 = require("../DropdownMenu");
|
12
|
+
const testing_1 = require("../utils/testing");
|
13
|
+
const __1 = require("..");
|
14
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
15
|
+
const items = [{ text: 'Foo' }, { text: 'Bar' }, { text: 'Baz' }, { text: 'Bon' }];
|
16
|
+
function SimpleDropdownMenu() {
|
17
|
+
const [selectedItem, setSelectedItem] = react_2.default.useState();
|
18
|
+
return (<__1.ThemeProvider theme={theme_1.default}>
|
19
|
+
<__1.SSRProvider>
|
20
|
+
<__1.BaseStyles>
|
21
|
+
<div id="something-else">X</div>
|
22
|
+
<DropdownMenu_1.DropdownMenu items={items} placeholder="Select an Option" selectedItem={selectedItem} onChange={setSelectedItem}/>
|
23
|
+
<div id="portal-root"></div>
|
24
|
+
</__1.BaseStyles>
|
25
|
+
</__1.SSRProvider>
|
26
|
+
</__1.ThemeProvider>);
|
27
|
+
}
|
28
|
+
describe('DropdownMenu', () => {
|
29
|
+
afterEach(() => {
|
30
|
+
jest.clearAllMocks();
|
31
|
+
});
|
32
|
+
testing_1.behavesAsComponent({
|
33
|
+
Component: DropdownMenu_1.DropdownMenu,
|
34
|
+
options: { skipAs: true, skipSx: true },
|
35
|
+
toRender: () => (<__1.SSRProvider>
|
36
|
+
<DropdownMenu_1.DropdownMenu items={[]}/>
|
37
|
+
</__1.SSRProvider>)
|
38
|
+
});
|
39
|
+
testing_1.checkExports('DropdownMenu', {
|
40
|
+
default: undefined,
|
41
|
+
DropdownMenu: DropdownMenu_1.DropdownMenu,
|
42
|
+
DropdownButton: DropdownMenu_1.DropdownButton
|
43
|
+
});
|
44
|
+
it('should have no axe violations', async () => {
|
45
|
+
const { container } = react_1.render(<SimpleDropdownMenu />);
|
46
|
+
const results = await jest_axe_1.axe(container);
|
47
|
+
expect(results).toHaveNoViolations();
|
48
|
+
react_1.cleanup();
|
49
|
+
});
|
50
|
+
it('should trigger the overlay on trigger click', async () => {
|
51
|
+
const menu = react_1.render(<SimpleDropdownMenu />);
|
52
|
+
let portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
53
|
+
expect(portalRoot).toBeNull();
|
54
|
+
const anchor = await menu.findByText('Select an Option');
|
55
|
+
react_1.act(() => {
|
56
|
+
react_1.fireEvent.click(anchor);
|
57
|
+
});
|
58
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
59
|
+
expect(portalRoot).toBeTruthy();
|
60
|
+
const itemText = items
|
61
|
+
.map((i) => {
|
62
|
+
if (i.hasOwnProperty('text')) {
|
63
|
+
return i.text;
|
64
|
+
}
|
65
|
+
})
|
66
|
+
.join('');
|
67
|
+
expect(portalRoot?.textContent?.trim()).toEqual(itemText);
|
68
|
+
});
|
69
|
+
it('should dismiss the overlay on dropdown item click', async () => {
|
70
|
+
const menu = react_1.render(<SimpleDropdownMenu />);
|
71
|
+
let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
|
72
|
+
expect(portalRoot).toBeNull();
|
73
|
+
const anchor = await menu.findByText('Select an Option');
|
74
|
+
react_1.act(() => {
|
75
|
+
react_1.fireEvent.click(anchor);
|
76
|
+
});
|
77
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
78
|
+
expect(portalRoot).toBeTruthy();
|
79
|
+
const menuItem = await menu.queryByText('Baz');
|
80
|
+
react_1.act(() => {
|
81
|
+
react_1.fireEvent.click(menuItem);
|
82
|
+
});
|
83
|
+
// portal is closed after click
|
84
|
+
expect(portalRoot?.textContent).toEqual(''); // menu items are hidden
|
85
|
+
});
|
86
|
+
it('option should be selected when chosen from the dropdown menu', async () => {
|
87
|
+
const menu = react_1.render(<SimpleDropdownMenu />);
|
88
|
+
let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
|
89
|
+
expect(portalRoot).toBeNull();
|
90
|
+
const anchor = await menu.findByText('Select an Option');
|
91
|
+
react_1.act(() => {
|
92
|
+
react_1.fireEvent.click(anchor);
|
93
|
+
});
|
94
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
95
|
+
expect(portalRoot).toBeTruthy();
|
96
|
+
const menuItem = await menu.queryByText('Baz');
|
97
|
+
react_1.act(() => {
|
98
|
+
react_1.fireEvent.click(menuItem);
|
99
|
+
});
|
100
|
+
expect(anchor.textContent).toEqual('Baz');
|
101
|
+
});
|
102
|
+
it('should dismiss the overlay on clicking outside overlay', async () => {
|
103
|
+
const menu = react_1.render(<SimpleDropdownMenu />);
|
104
|
+
let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
|
105
|
+
expect(portalRoot).toBeNull();
|
106
|
+
const anchor = await menu.findByText('Select an Option');
|
107
|
+
react_1.act(() => {
|
108
|
+
react_1.fireEvent.click(anchor);
|
109
|
+
});
|
110
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
111
|
+
expect(portalRoot).toBeTruthy();
|
112
|
+
const somethingElse = (await menu.baseElement.querySelector('#something-else'));
|
113
|
+
react_1.act(() => {
|
114
|
+
react_1.fireEvent.mouseDown(somethingElse);
|
115
|
+
});
|
116
|
+
// portal is closed after click
|
117
|
+
expect(portalRoot?.textContent).toEqual(''); // menu items are hidden
|
118
|
+
});
|
119
|
+
});
|
@@ -0,0 +1,27 @@
|
|
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('FilterList', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.FilterList });
|
15
|
+
testing_1.checkExports('FilterList', {
|
16
|
+
default: __1.FilterList
|
17
|
+
});
|
18
|
+
it('should have no axe violations', async () => {
|
19
|
+
const { container } = react_2.render(<__1.FilterList>Hello</__1.FilterList>);
|
20
|
+
const results = await jest_axe_1.axe(container);
|
21
|
+
expect(results).toHaveNoViolations();
|
22
|
+
react_2.cleanup();
|
23
|
+
});
|
24
|
+
it('renders a <ul>', () => {
|
25
|
+
expect(testing_1.render(<__1.FilterList />).type).toEqual('ul');
|
26
|
+
});
|
27
|
+
});
|
@@ -0,0 +1,31 @@
|
|
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('FilterList.Item', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.FilterList.Item });
|
15
|
+
it('should have no axe violations', async () => {
|
16
|
+
const { container } = react_2.render(<__1.FilterList.Item>stuff</__1.FilterList.Item>);
|
17
|
+
const results = await jest_axe_1.axe(container);
|
18
|
+
expect(results).toHaveNoViolations();
|
19
|
+
react_2.cleanup();
|
20
|
+
});
|
21
|
+
it('renders an <a> by default', () => {
|
22
|
+
expect(testing_1.render(<__1.FilterList.Item />).type).toEqual('a');
|
23
|
+
});
|
24
|
+
it('respects the "selected" prop', () => {
|
25
|
+
expect(testing_1.render(<__1.FilterList.Item selected/>)).toMatchSnapshot();
|
26
|
+
});
|
27
|
+
it('respects "count" prop', () => {
|
28
|
+
const { getByText } = react_2.render(<__1.FilterList.Item count={400}/>);
|
29
|
+
expect(getByText('400')).toBeTruthy();
|
30
|
+
});
|
31
|
+
});
|
@@ -0,0 +1,27 @@
|
|
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('FilteredSearch', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.FilteredSearch });
|
15
|
+
testing_1.checkExports('FilteredSearch', {
|
16
|
+
default: __1.FilteredSearch
|
17
|
+
});
|
18
|
+
it('should have no axe violations', async () => {
|
19
|
+
const { container } = react_2.render(<__1.FilteredSearch>Hello</__1.FilteredSearch>);
|
20
|
+
const results = await jest_axe_1.axe(container);
|
21
|
+
expect(results).toHaveNoViolations();
|
22
|
+
react_2.cleanup();
|
23
|
+
});
|
24
|
+
it('renders a <div>', () => {
|
25
|
+
expect(testing_1.render(<__1.FilteredSearch />).type).toEqual('div');
|
26
|
+
});
|
27
|
+
});
|
@@ -0,0 +1,36 @@
|
|
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('Flash', () => {
|
15
|
+
testing_1.behavesAsComponent({ Component: __1.Flash });
|
16
|
+
testing_1.checkExports('Flash', {
|
17
|
+
default: __1.Flash
|
18
|
+
});
|
19
|
+
it('should have no axe violations', async () => {
|
20
|
+
const { container } = react_2.render(<__1.Flash variant="warning"/>);
|
21
|
+
const results = await jest_axe_1.axe(container);
|
22
|
+
expect(results).toHaveNoViolations();
|
23
|
+
react_2.cleanup();
|
24
|
+
});
|
25
|
+
it('respects the "full" prop', () => {
|
26
|
+
expect(testing_1.render(<__1.Flash full/>)).toHaveStyleRule('margin-top', '-1px');
|
27
|
+
expect(testing_1.render(<__1.Flash full/>)).toHaveStyleRule('border-radius', '0');
|
28
|
+
expect(testing_1.render(<__1.Flash full/>)).toHaveStyleRule('border-width', '1px 0px');
|
29
|
+
});
|
30
|
+
it('respects the "variant" prop', () => {
|
31
|
+
expect(testing_1.render(<__1.Flash variant="warning"/>)).toHaveStyleRule('background-color', theme_1.default.colorSchemes.light.colors.attention?.subtle);
|
32
|
+
expect(testing_1.render(<__1.Flash variant="danger"/>)).toHaveStyleRule('background-color', theme_1.default.colorSchemes.light.colors.danger?.subtle);
|
33
|
+
expect(testing_1.render(<__1.Flash variant="success"/>)).toHaveStyleRule('background-color', theme_1.default.colorSchemes.light.colors.success?.subtle);
|
34
|
+
expect(testing_1.render(<__1.Flash />)).toHaveStyleRule('background-color', theme_1.default.colorSchemes.light.colors.accent?.subtle);
|
35
|
+
});
|
36
|
+
});
|
@@ -0,0 +1,51 @@
|
|
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('Flex', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.Flex });
|
15
|
+
testing_1.checkExports('Flex', {
|
16
|
+
default: __1.Flex
|
17
|
+
});
|
18
|
+
it('should have no axe violations', async () => {
|
19
|
+
const { container } = react_2.render(<__1.Flex />);
|
20
|
+
const results = await jest_axe_1.axe(container);
|
21
|
+
expect(results).toHaveNoViolations();
|
22
|
+
react_2.cleanup();
|
23
|
+
});
|
24
|
+
it('gets display: flex by default', () => {
|
25
|
+
expect(testing_1.render(<__1.Flex />)).toHaveStyleRule('display', 'flex');
|
26
|
+
});
|
27
|
+
it('respects flexWrap', () => {
|
28
|
+
expect(testing_1.render(<__1.Flex flexWrap="nowrap"/>)).toMatchSnapshot();
|
29
|
+
});
|
30
|
+
it('respects flexDirection', () => {
|
31
|
+
expect(testing_1.render(<__1.Flex flexDirection="row"/>)).toMatchSnapshot();
|
32
|
+
});
|
33
|
+
it('respects justifyContent', () => {
|
34
|
+
expect(testing_1.render(<__1.Flex justifyContent="start"/>)).toMatchSnapshot();
|
35
|
+
});
|
36
|
+
it('respects alignItems', () => {
|
37
|
+
expect(testing_1.render(<__1.Flex alignItems="start"/>)).toMatchSnapshot();
|
38
|
+
});
|
39
|
+
it('respects alignContent', () => {
|
40
|
+
expect(testing_1.render(<__1.Flex alignContent="start"/>)).toMatchSnapshot();
|
41
|
+
});
|
42
|
+
it('respects display', () => {
|
43
|
+
expect(testing_1.render(<__1.Flex display="inline-flex"/>)).toHaveStyleRule('display', 'inline-flex');
|
44
|
+
});
|
45
|
+
it('respects responsive display', () => {
|
46
|
+
expect(testing_1.render(<__1.Flex display={['flex', 'inline-flex']}/>)).toMatchSnapshot();
|
47
|
+
});
|
48
|
+
it('renders a div by default', () => {
|
49
|
+
expect(testing_1.render(<__1.Flex />).type).toEqual('div');
|
50
|
+
});
|
51
|
+
});
|
@@ -0,0 +1,36 @@
|
|
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('FormGroup', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.FormGroup });
|
15
|
+
testing_1.checkExports('FormGroup', {
|
16
|
+
default: __1.FormGroup
|
17
|
+
});
|
18
|
+
it('should have no axe violations', async () => {
|
19
|
+
const { container } = react_2.render(<__1.FormGroup>
|
20
|
+
<__1.FormGroup.Label htmlFor="example-text">Example text</__1.FormGroup.Label>
|
21
|
+
<input id="example-text" value="Example Value" readOnly/>
|
22
|
+
</__1.FormGroup>);
|
23
|
+
const results = await jest_axe_1.axe(container);
|
24
|
+
expect(results).toHaveNoViolations();
|
25
|
+
react_2.cleanup();
|
26
|
+
});
|
27
|
+
});
|
28
|
+
describe('FormGroup.Label', () => {
|
29
|
+
testing_1.behavesAsComponent({ Component: __1.FormGroup.Label });
|
30
|
+
it('should have no axe violations', async () => {
|
31
|
+
const { container } = react_2.render(<__1.FormGroup.Label htmlFor="example-text">Example text</__1.FormGroup.Label>);
|
32
|
+
const results = await jest_axe_1.axe(container);
|
33
|
+
expect(results).toHaveNoViolations();
|
34
|
+
react_2.cleanup();
|
35
|
+
});
|
36
|
+
});
|
@@ -0,0 +1,69 @@
|
|
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('Grid', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.Grid });
|
15
|
+
testing_1.checkExports('Grid', {
|
16
|
+
default: __1.Grid
|
17
|
+
});
|
18
|
+
it('should have no axe violations', async () => {
|
19
|
+
const { container } = react_2.render(<__1.Grid />);
|
20
|
+
const results = await jest_axe_1.axe(container);
|
21
|
+
expect(results).toHaveNoViolations();
|
22
|
+
react_2.cleanup();
|
23
|
+
});
|
24
|
+
it('gets display: grid by default', () => {
|
25
|
+
expect(testing_1.render(<__1.Grid />)).toHaveStyleRule('display', 'grid');
|
26
|
+
});
|
27
|
+
it('respects gridGap', () => {
|
28
|
+
expect(testing_1.render(<__1.Grid gridGap={1}/>)).toMatchSnapshot();
|
29
|
+
});
|
30
|
+
it('respects gridColumnGap', () => {
|
31
|
+
expect(testing_1.render(<__1.Grid gridColumnGap={2}/>)).toMatchSnapshot();
|
32
|
+
});
|
33
|
+
it('respects gridRowGap', () => {
|
34
|
+
expect(testing_1.render(<__1.Grid gridRowGap={2}/>)).toMatchSnapshot();
|
35
|
+
});
|
36
|
+
it('respects gridColumn', () => {
|
37
|
+
expect(testing_1.render(<__1.Grid gridColumn="1 / 2"/>)).toMatchSnapshot();
|
38
|
+
});
|
39
|
+
it('respects gridRow', () => {
|
40
|
+
expect(testing_1.render(<__1.Grid gridRow="1 / 2"/>)).toMatchSnapshot();
|
41
|
+
});
|
42
|
+
it('respects gridArea', () => {
|
43
|
+
expect(testing_1.render(<__1.Grid gridArea="sidebar"/>)).toMatchSnapshot();
|
44
|
+
});
|
45
|
+
it('respects gridAutoFlow', () => {
|
46
|
+
expect(testing_1.render(<__1.Grid gridAutoFlow="row"/>)).toMatchSnapshot();
|
47
|
+
});
|
48
|
+
it('respects gridAutoRows', () => {
|
49
|
+
expect(testing_1.render(<__1.Grid gridAutoRows="1fr"/>)).toMatchSnapshot();
|
50
|
+
});
|
51
|
+
it('respects gridAutoColumns', () => {
|
52
|
+
expect(testing_1.render(<__1.Grid gridAutoColumns="1fr"/>)).toMatchSnapshot();
|
53
|
+
});
|
54
|
+
it('respects gridTemplateColumns', () => {
|
55
|
+
expect(testing_1.render(<__1.Grid gridTemplateColumns="200px 1fr"/>)).toMatchSnapshot();
|
56
|
+
});
|
57
|
+
it('respects gridTemplateRows', () => {
|
58
|
+
expect(testing_1.render(<__1.Grid gridTemplateRows=" 200px 1fr"/>)).toMatchSnapshot();
|
59
|
+
});
|
60
|
+
it('respects gridTemplateAreas', () => {
|
61
|
+
expect(testing_1.render(<__1.Grid gridTemplateAreas="sidebar main"/>)).toMatchSnapshot();
|
62
|
+
});
|
63
|
+
it('respects responsive display', () => {
|
64
|
+
expect(testing_1.render(<__1.Grid display={['grid', 'inline-grid']}/>)).toMatchSnapshot();
|
65
|
+
});
|
66
|
+
it('renders a div by default', () => {
|
67
|
+
expect(testing_1.render(<__1.Grid />).type).toEqual('div');
|
68
|
+
});
|
69
|
+
});
|
@@ -0,0 +1,45 @@
|
|
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('Header', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.Header });
|
15
|
+
testing_1.checkExports('Header', {
|
16
|
+
default: __1.Header
|
17
|
+
});
|
18
|
+
describe('Header.Item', () => {
|
19
|
+
testing_1.behavesAsComponent({ Component: __1.Header.Item });
|
20
|
+
});
|
21
|
+
describe('Header.Link', () => {
|
22
|
+
testing_1.behavesAsComponent({ Component: __1.Header.Link });
|
23
|
+
});
|
24
|
+
it('should have no axe violations', async () => {
|
25
|
+
const { container } = react_2.render(<__1.Header>
|
26
|
+
<__1.Header.Item full>
|
27
|
+
<__1.Header.Link href="#">One</__1.Header.Link>
|
28
|
+
</__1.Header.Item>
|
29
|
+
<__1.Header.Item>
|
30
|
+
<__1.Header.Link href="#">Two</__1.Header.Link>
|
31
|
+
</__1.Header.Item>
|
32
|
+
<__1.Header.Item>Three</__1.Header.Item>
|
33
|
+
</__1.Header>);
|
34
|
+
const results = await jest_axe_1.axe(container);
|
35
|
+
expect(results).toHaveNoViolations();
|
36
|
+
react_2.cleanup();
|
37
|
+
});
|
38
|
+
it('renders a <div> and <a>', () => {
|
39
|
+
expect(testing_1.render(<__1.Header />).type).toEqual('div');
|
40
|
+
expect(testing_1.render(<__1.Header.Link />).type).toEqual('a');
|
41
|
+
});
|
42
|
+
it('sets aria-label appropriately', () => {
|
43
|
+
expect(testing_1.render(<__1.Header aria-label="foo"/>).props['aria-label']).toEqual('foo');
|
44
|
+
});
|
45
|
+
});
|
@@ -0,0 +1,71 @@
|
|
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
|
+
const theme = {
|
14
|
+
breakpoints: ['400px', '640px', '960px', '1280px'],
|
15
|
+
colors: {
|
16
|
+
green: ['#010', '#020', '#030', '#040', '#050', '#060']
|
17
|
+
},
|
18
|
+
fontSizes: ['12px', '14px', '16px', '20px', '24px', '32px', '40px', '48px'],
|
19
|
+
fonts: {
|
20
|
+
normal: 'Helvetica,sans-serif',
|
21
|
+
mono: 'Consolas,monospace'
|
22
|
+
},
|
23
|
+
lineHeights: {
|
24
|
+
normal: 1.5,
|
25
|
+
condensed: 1.25,
|
26
|
+
condensedUltra: 1
|
27
|
+
},
|
28
|
+
fontWeights: {
|
29
|
+
light: '300',
|
30
|
+
normal: '400',
|
31
|
+
semibold: '500',
|
32
|
+
bold: '600'
|
33
|
+
}
|
34
|
+
};
|
35
|
+
describe('Heading', () => {
|
36
|
+
testing_1.behavesAsComponent({ Component: __1.Heading });
|
37
|
+
testing_1.checkExports('Heading', {
|
38
|
+
default: __1.Heading
|
39
|
+
});
|
40
|
+
it('renders <h2> by default', () => {
|
41
|
+
expect(testing_1.render(<__1.Heading />).type).toEqual('h2');
|
42
|
+
});
|
43
|
+
it('should have no axe violations', async () => {
|
44
|
+
const { container } = react_2.render(<__1.Heading>Hello</__1.Heading>);
|
45
|
+
const results = await jest_axe_1.axe(container);
|
46
|
+
expect(results).toHaveNoViolations();
|
47
|
+
react_2.cleanup();
|
48
|
+
});
|
49
|
+
it('respects fontWeight', () => {
|
50
|
+
expect(testing_1.render(<__1.Heading fontWeight="bold" theme={theme}/>)).toHaveStyleRule('font-weight', theme.fontWeights.bold);
|
51
|
+
expect(testing_1.render(<__1.Heading fontWeight="normal" theme={theme}/>)).toHaveStyleRule('font-weight', theme.fontWeights.normal);
|
52
|
+
expect(testing_1.render(<__1.Heading fontWeight="semibold" theme={theme}/>)).toHaveStyleRule('font-weight', theme.fontWeights.semibold);
|
53
|
+
expect(testing_1.render(<__1.Heading fontWeight="light" theme={theme}/>)).toHaveStyleRule('font-weight', theme.fontWeights.light);
|
54
|
+
});
|
55
|
+
it('respects lineHeight', () => {
|
56
|
+
expect(testing_1.render(<__1.Heading lineHeight="normal" theme={theme}/>)).toHaveStyleRule('line-height', String(theme.lineHeights.normal));
|
57
|
+
expect(testing_1.render(<__1.Heading lineHeight="condensed" theme={theme}/>)).toHaveStyleRule('line-height', String(theme.lineHeights.condensed));
|
58
|
+
expect(testing_1.render(<__1.Heading lineHeight="condensedUltra" theme={theme}/>)).toHaveStyleRule('line-height', String(theme.lineHeights.condensedUltra));
|
59
|
+
});
|
60
|
+
it('respects fontFamily="mono"', () => {
|
61
|
+
expect(testing_1.render(<__1.Heading fontFamily="mono" theme={theme}/>)).toHaveStyleRule('font-family', theme.fonts.mono);
|
62
|
+
});
|
63
|
+
it('renders fontSize', () => {
|
64
|
+
for (const fontSize of theme.fontSizes) {
|
65
|
+
expect(testing_1.render(<__1.Heading fontSize={fontSize} theme={theme}/>)).toHaveStyleRule('font-size', `${fontSize}`);
|
66
|
+
}
|
67
|
+
});
|
68
|
+
it('respects the "fontStyle" prop', () => {
|
69
|
+
expect(testing_1.render(<__1.Heading fontStyle="italic"/>)).toHaveStyleRule('font-style', 'italic');
|
70
|
+
});
|
71
|
+
});
|
@@ -1,10 +1,7 @@
|
|
1
1
|
"use strict";
|
2
|
-
|
3
|
-
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.generatesKeyPathsFromObject = generatesKeyPathsFromObject;
|
7
|
-
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.generatesKeyPathsFromObject = void 0;
|
8
4
|
function generatesKeyPathsFromObject(x) {
|
9
|
-
|
10
|
-
}
|
5
|
+
return x;
|
6
|
+
}
|
7
|
+
exports.generatesKeyPathsFromObject = generatesKeyPathsFromObject;
|
@@ -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('Label', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.Label });
|
15
|
+
testing_1.checkExports('Label', {
|
16
|
+
default: __1.Label
|
17
|
+
});
|
18
|
+
it('renders a <span>', () => {
|
19
|
+
expect(testing_1.render(<__1.Label />).type).toEqual('span');
|
20
|
+
});
|
21
|
+
it('should have no axe violations', async () => {
|
22
|
+
const { container } = react_2.render(<__1.Label>hello</__1.Label>);
|
23
|
+
const results = await jest_axe_1.axe(container);
|
24
|
+
expect(results).toHaveNoViolations();
|
25
|
+
react_2.cleanup();
|
26
|
+
});
|
27
|
+
it('respects the "outline" prop', () => {
|
28
|
+
expect(testing_1.render(<__1.Label outline/>)).toMatchSnapshot();
|
29
|
+
});
|
30
|
+
it('respects the "variant" prop', () => {
|
31
|
+
expect(testing_1.render(<__1.Label variant="xl"/>)).toMatchSnapshot();
|
32
|
+
});
|
33
|
+
});
|
@@ -0,0 +1,29 @@
|
|
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
|
+
const comp = (<__1.LabelGroup>
|
14
|
+
<__1.Label>Default label</__1.Label>
|
15
|
+
<__1.Label>Darker gray label</__1.Label>
|
16
|
+
<__1.Label outline>Default outline label</__1.Label>
|
17
|
+
</__1.LabelGroup>);
|
18
|
+
describe('LabelGroup', () => {
|
19
|
+
testing_1.behavesAsComponent({ Component: __1.LabelGroup });
|
20
|
+
testing_1.checkExports('LabelGroup', {
|
21
|
+
default: __1.LabelGroup
|
22
|
+
});
|
23
|
+
it('should have no axe violations', async () => {
|
24
|
+
const { container } = react_2.render(comp);
|
25
|
+
const results = await jest_axe_1.axe(container);
|
26
|
+
expect(results).toHaveNoViolations();
|
27
|
+
react_2.cleanup();
|
28
|
+
});
|
29
|
+
});
|
@@ -0,0 +1,43 @@
|
|
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('Link', () => {
|
14
|
+
testing_1.behavesAsComponent({ Component: __1.Link });
|
15
|
+
testing_1.checkExports('Link', {
|
16
|
+
default: __1.Link
|
17
|
+
});
|
18
|
+
it('should have no axe violations', async () => {
|
19
|
+
const { container } = react_2.render(<__1.Link href="www.github.com">GitHub</__1.Link>);
|
20
|
+
const results = await jest_axe_1.axe(container);
|
21
|
+
expect(results).toHaveNoViolations();
|
22
|
+
react_2.cleanup();
|
23
|
+
});
|
24
|
+
it('passes href down to link element', () => {
|
25
|
+
expect(testing_1.render(<__1.Link href="https://github.com"/>)).toMatchSnapshot();
|
26
|
+
});
|
27
|
+
it('respects hoverColor prop', () => {
|
28
|
+
expect(testing_1.render(<__1.Link hoverColor="accent.fg"/>)).toMatchSnapshot();
|
29
|
+
});
|
30
|
+
it('respects the "fontStyle" prop', () => {
|
31
|
+
expect(testing_1.render(<__1.Link fontStyle="italic"/>)).toHaveStyleRule('font-style', 'italic');
|
32
|
+
expect(testing_1.render(<__1.Link as="i" fontStyle="normal"/>)).toHaveStyleRule('font-style', 'normal');
|
33
|
+
});
|
34
|
+
it('applies button styles when rendering a button element', () => {
|
35
|
+
expect(testing_1.render(<__1.Link as="button"/>)).toMatchSnapshot();
|
36
|
+
});
|
37
|
+
it('respectes the "muted" prop', () => {
|
38
|
+
expect(testing_1.render(<__1.Link muted/>)).toMatchSnapshot();
|
39
|
+
});
|
40
|
+
it('respectes the "color" prop when "muted" prop is also passed', () => {
|
41
|
+
expect(testing_1.render(<__1.Link muted color="fg.onEmphasis"/>)).toMatchSnapshot();
|
42
|
+
});
|
43
|
+
});
|