@primer/components 31.2.0-rc.6afeaa37 → 31.2.0-rc.76ed571d
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 +4 -0
- package/dist/browser.esm.js +209 -209
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +195 -195
- package/dist/browser.umd.js.map +1 -1
- package/docs/content/ActionList2.mdx +14 -8
- package/docs/content/StateLabel.md +5 -4
- package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +2 -2
- 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.jsx +30 -0
- package/lib/ActionList2/Divider.jsx +22 -0
- package/lib/ActionList2/Group.jsx +25 -0
- package/lib/ActionList2/Header.jsx +36 -0
- package/lib/ActionList2/Item.jsx +174 -0
- package/lib/ActionList2/LinkItem.jsx +28 -0
- package/lib/ActionList2/List.jsx +41 -0
- package/lib/ActionList2/Selection.jsx +36 -0
- package/lib/ActionList2/Visuals.jsx +48 -0
- package/lib/ActionList2/index.js +23 -41
- 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.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 +86 -0
- package/lib/__tests__/NewButton.test.jsx +55 -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.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/{unreleased.d.ts → drafts.d.ts} +2 -1
- 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 +3 -2
- package/lib/stories/NewButton.stories.js +230 -0
- package/lib/sx.js +10 -22
- package/lib/theme-preval.js +64 -3023
- package/lib/theme.js +3 -12
- 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.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.js +8 -14
- package/lib/utils/useIsomorphicLayoutEffect.js +8 -11
- package/lib/utils/userAgent.js +8 -12
- 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__/NewButton.test.d.ts +1 -0
- package/lib-esm/__tests__/NewButton.test.js +76 -0
- package/lib-esm/{unreleased.d.ts → drafts.d.ts} +2 -1
- package/lib-esm/{unreleased.js → drafts.js} +3 -2
- package/lib-esm/index.d.ts +2 -0
- package/lib-esm/index.js +1 -0
- package/lib-esm/stories/ActionList2.stories.js +3 -3
- package/lib-esm/stories/NewButton.stories.js +178 -0
- package/package-lock.json +7 -7
- package/package.json +4 -3
- package/script/build +1 -1
- 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__/NewButton.test.tsx +64 -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__/NewButton.test.tsx.snap +182 -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/{unreleased.ts → drafts.ts} +2 -1
- package/src/index.ts +2 -0
- package/src/stories/ActionList2.stories.tsx +12 -9
- package/src/stories/NewButton.stories.tsx +201 -0
- package/stats.html +1 -1
- package/tsconfig.base.json +20 -0
- package/tsconfig.build.json +2 -2
- package/tsconfig.json +4 -17
- package/lib/unreleased.js +0 -18
@@ -0,0 +1,22 @@
|
|
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 styled_components_1 = __importDefault(require("styled-components"));
|
7
|
+
const sx_1 = __importDefault(require("./sx"));
|
8
|
+
const UnstyledTextInput = styled_components_1.default.input `
|
9
|
+
border: 0;
|
10
|
+
font-size: inherit;
|
11
|
+
font-family: inherit;
|
12
|
+
background-color: transparent;
|
13
|
+
-webkit-appearance: none;
|
14
|
+
color: inherit;
|
15
|
+
width: 100%;
|
16
|
+
&:focus {
|
17
|
+
outline: 0;
|
18
|
+
}
|
19
|
+
|
20
|
+
${sx_1.default};
|
21
|
+
`;
|
22
|
+
exports.default = UnstyledTextInput;
|
@@ -0,0 +1,49 @@
|
|
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 ActionList_1 = require("../ActionList");
|
12
|
+
const testing_1 = require("../utils/testing");
|
13
|
+
const __1 = require("..");
|
14
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
15
|
+
function SimpleActionList() {
|
16
|
+
return (<__1.ThemeProvider theme={theme_1.default}>
|
17
|
+
<__1.BaseStyles>
|
18
|
+
<ActionList_1.ActionList items={[
|
19
|
+
{ text: 'New file' },
|
20
|
+
ActionList_1.ActionList.Divider,
|
21
|
+
{ text: 'Copy link' },
|
22
|
+
{ text: 'Edit file' },
|
23
|
+
{ text: 'Delete file', variant: 'danger' }
|
24
|
+
]}/>
|
25
|
+
</__1.BaseStyles>
|
26
|
+
</__1.ThemeProvider>);
|
27
|
+
}
|
28
|
+
describe('ActionList', () => {
|
29
|
+
testing_1.behavesAsComponent({
|
30
|
+
Component: ActionList_1.ActionList,
|
31
|
+
options: { skipAs: true, skipSx: true },
|
32
|
+
toRender: () => <ActionList_1.ActionList items={[]}/>
|
33
|
+
});
|
34
|
+
testing_1.checkExports('ActionList', {
|
35
|
+
default: undefined,
|
36
|
+
ActionList: ActionList_1.ActionList
|
37
|
+
});
|
38
|
+
it('should have no axe violations', async () => {
|
39
|
+
const { container } = react_1.render(<SimpleActionList />);
|
40
|
+
const results = await jest_axe_1.axe(container);
|
41
|
+
expect(results).toHaveNoViolations();
|
42
|
+
react_1.cleanup();
|
43
|
+
});
|
44
|
+
});
|
45
|
+
describe('ActionList.Item', () => {
|
46
|
+
testing_1.behavesAsComponent({
|
47
|
+
Component: ActionList_1.ActionList.Item
|
48
|
+
});
|
49
|
+
});
|
@@ -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
|
+
exports.cannotUseAsWithoutRenderProp = exports.cannotUseAnchorDOMProps = exports.canUseDivDOMProps = exports.listWithSingleItem = exports.emptyList = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const __1 = require("..");
|
9
|
+
function emptyList() {
|
10
|
+
return <__1.ActionList items={[]}/>;
|
11
|
+
}
|
12
|
+
exports.emptyList = emptyList;
|
13
|
+
function listWithSingleItem() {
|
14
|
+
return <__1.ActionList items={[{ text: 'One' }]}/>;
|
15
|
+
}
|
16
|
+
exports.listWithSingleItem = listWithSingleItem;
|
17
|
+
function canUseDivDOMProps() {
|
18
|
+
return (<__1.ActionList items={[
|
19
|
+
{
|
20
|
+
text: 'One',
|
21
|
+
onMouseDown: () => undefined
|
22
|
+
}
|
23
|
+
]}/>);
|
24
|
+
}
|
25
|
+
exports.canUseDivDOMProps = canUseDivDOMProps;
|
26
|
+
function cannotUseAnchorDOMProps() {
|
27
|
+
return (<__1.ActionList items={[
|
28
|
+
{
|
29
|
+
text: 'One',
|
30
|
+
// @ts-expect-error href is not a div DOM prop
|
31
|
+
href: '#'
|
32
|
+
}
|
33
|
+
]}/>);
|
34
|
+
}
|
35
|
+
exports.cannotUseAnchorDOMProps = cannotUseAnchorDOMProps;
|
36
|
+
function cannotUseAsWithoutRenderProp() {
|
37
|
+
return (<__1.ActionList items={[
|
38
|
+
{
|
39
|
+
text: 'One',
|
40
|
+
// @ts-expect-error as is only available via manual rendering of items
|
41
|
+
as: 'a'
|
42
|
+
}
|
43
|
+
]}/>);
|
44
|
+
}
|
45
|
+
exports.cannotUseAsWithoutRenderProp = cannotUseAsWithoutRenderProp;
|
@@ -0,0 +1,46 @@
|
|
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 ActionList2_1 = require("../ActionList2");
|
12
|
+
const testing_1 = require("../utils/testing");
|
13
|
+
const __1 = require("..");
|
14
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
15
|
+
function SimpleActionList() {
|
16
|
+
return (<__1.ThemeProvider theme={theme_1.default}>
|
17
|
+
<__1.SSRProvider>
|
18
|
+
<__1.BaseStyles>
|
19
|
+
<ActionList2_1.ActionList>
|
20
|
+
<ActionList2_1.ActionList.Item>New file</ActionList2_1.ActionList.Item>
|
21
|
+
<ActionList2_1.ActionList.Divider />
|
22
|
+
<ActionList2_1.ActionList.Item>Copy link</ActionList2_1.ActionList.Item>
|
23
|
+
<ActionList2_1.ActionList.Item>Edit file</ActionList2_1.ActionList.Item>
|
24
|
+
<ActionList2_1.ActionList.Item variant="danger">Delete file</ActionList2_1.ActionList.Item>
|
25
|
+
</ActionList2_1.ActionList>
|
26
|
+
</__1.BaseStyles>
|
27
|
+
</__1.SSRProvider>
|
28
|
+
</__1.ThemeProvider>);
|
29
|
+
}
|
30
|
+
describe('ActionList', () => {
|
31
|
+
testing_1.behavesAsComponent({
|
32
|
+
Component: ActionList2_1.ActionList,
|
33
|
+
options: { skipAs: true, skipSx: true },
|
34
|
+
toRender: () => <ActionList2_1.ActionList />
|
35
|
+
});
|
36
|
+
testing_1.checkExports('ActionList2', {
|
37
|
+
default: undefined,
|
38
|
+
ActionList: ActionList2_1.ActionList
|
39
|
+
});
|
40
|
+
it('should have no axe violations', async () => {
|
41
|
+
const { container } = react_1.render(<SimpleActionList />);
|
42
|
+
const results = await jest_axe_1.axe(container);
|
43
|
+
expect(results).toHaveNoViolations();
|
44
|
+
react_1.cleanup();
|
45
|
+
});
|
46
|
+
});
|
@@ -0,0 +1,124 @@
|
|
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 ActionMenu_1 = require("../ActionMenu");
|
12
|
+
const testing_1 = require("../utils/testing");
|
13
|
+
const __1 = require("..");
|
14
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
15
|
+
const items = [
|
16
|
+
{ text: 'New file' },
|
17
|
+
{ text: 'Copy link' },
|
18
|
+
{ text: 'Edit file' },
|
19
|
+
{ text: 'Delete file', variant: 'danger' }
|
20
|
+
];
|
21
|
+
const mockOnActivate = jest.fn();
|
22
|
+
function SimpleActionMenu() {
|
23
|
+
return (<__1.ThemeProvider theme={theme_1.default}>
|
24
|
+
<__1.SSRProvider>
|
25
|
+
<__1.BaseStyles>
|
26
|
+
<div id="something-else">X</div>
|
27
|
+
<ActionMenu_1.ActionMenu onAction={mockOnActivate} anchorContent="Menu" items={items}/>
|
28
|
+
<div id="portal-root"></div>
|
29
|
+
</__1.BaseStyles>
|
30
|
+
</__1.SSRProvider>
|
31
|
+
</__1.ThemeProvider>);
|
32
|
+
}
|
33
|
+
describe('ActionMenu', () => {
|
34
|
+
afterEach(() => {
|
35
|
+
jest.clearAllMocks();
|
36
|
+
});
|
37
|
+
testing_1.behavesAsComponent({
|
38
|
+
Component: ActionMenu_1.ActionMenu,
|
39
|
+
options: { skipAs: true, skipSx: true },
|
40
|
+
toRender: () => (<__1.SSRProvider>
|
41
|
+
<ActionMenu_1.ActionMenu items={[]}/>
|
42
|
+
</__1.SSRProvider>)
|
43
|
+
});
|
44
|
+
testing_1.checkExports('ActionMenu', {
|
45
|
+
default: undefined,
|
46
|
+
ActionMenu: ActionMenu_1.ActionMenu
|
47
|
+
});
|
48
|
+
it('should have no axe violations', async () => {
|
49
|
+
const { container } = react_1.render(<SimpleActionMenu />);
|
50
|
+
const results = await jest_axe_1.axe(container);
|
51
|
+
expect(results).toHaveNoViolations();
|
52
|
+
react_1.cleanup();
|
53
|
+
});
|
54
|
+
it('should trigger the overlay on trigger click', async () => {
|
55
|
+
const menu = react_1.render(<SimpleActionMenu />);
|
56
|
+
let portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
57
|
+
expect(portalRoot).toBeNull();
|
58
|
+
const anchor = await menu.findByText('Menu');
|
59
|
+
react_1.act(() => {
|
60
|
+
react_1.fireEvent.click(anchor);
|
61
|
+
});
|
62
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
63
|
+
expect(portalRoot).toBeTruthy();
|
64
|
+
const itemText = items
|
65
|
+
.map((i) => {
|
66
|
+
if (i.hasOwnProperty('text')) {
|
67
|
+
return i.text;
|
68
|
+
}
|
69
|
+
})
|
70
|
+
.join('');
|
71
|
+
expect(portalRoot?.textContent?.trim()).toEqual(itemText);
|
72
|
+
});
|
73
|
+
it('should dismiss the overlay on menuitem click', async () => {
|
74
|
+
const menu = react_1.render(<SimpleActionMenu />);
|
75
|
+
let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
|
76
|
+
expect(portalRoot).toBeNull();
|
77
|
+
const anchor = await menu.findByText('Menu');
|
78
|
+
react_1.act(() => {
|
79
|
+
react_1.fireEvent.click(anchor);
|
80
|
+
});
|
81
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
82
|
+
expect(portalRoot).toBeTruthy();
|
83
|
+
const menuItem = await menu.queryByText(items[0].text);
|
84
|
+
react_1.act(() => {
|
85
|
+
react_1.fireEvent.click(menuItem);
|
86
|
+
});
|
87
|
+
expect(portalRoot?.textContent).toEqual(''); // menu items are hidden
|
88
|
+
});
|
89
|
+
it('should dismiss the overlay on clicking outside overlay', async () => {
|
90
|
+
const menu = react_1.render(<SimpleActionMenu />);
|
91
|
+
let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
|
92
|
+
expect(portalRoot).toBeNull();
|
93
|
+
const anchor = await menu.findByText('Menu');
|
94
|
+
react_1.act(() => {
|
95
|
+
react_1.fireEvent.click(anchor);
|
96
|
+
});
|
97
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
98
|
+
expect(portalRoot).toBeTruthy();
|
99
|
+
const somethingElse = (await menu.baseElement.querySelector('#something-else'));
|
100
|
+
react_1.act(() => {
|
101
|
+
react_1.fireEvent.mouseDown(somethingElse);
|
102
|
+
});
|
103
|
+
expect(portalRoot?.textContent).toEqual(''); // menu items are hidden
|
104
|
+
});
|
105
|
+
it('should pass correct values to onAction on menu click', async () => {
|
106
|
+
const menu = react_1.render(<SimpleActionMenu />);
|
107
|
+
let portalRoot = await menu.baseElement.querySelector('#__primerPortalRoot__');
|
108
|
+
expect(portalRoot).toBeNull();
|
109
|
+
const anchor = await menu.findByText('Menu');
|
110
|
+
react_1.act(() => {
|
111
|
+
react_1.fireEvent.click(anchor);
|
112
|
+
});
|
113
|
+
portalRoot = menu.baseElement.querySelector('#__primerPortalRoot__');
|
114
|
+
expect(portalRoot).toBeTruthy();
|
115
|
+
const menuItem = (await portalRoot?.querySelector("[role='menuitem']"));
|
116
|
+
react_1.act(() => {
|
117
|
+
react_1.fireEvent.click(menuItem);
|
118
|
+
});
|
119
|
+
// onAction has been called with correct argument
|
120
|
+
expect(mockOnActivate).toHaveBeenCalledTimes(1);
|
121
|
+
const arg = mockOnActivate.mock.calls[0][0];
|
122
|
+
expect(arg.text).toEqual(items[0].text);
|
123
|
+
});
|
124
|
+
});
|
@@ -0,0 +1,121 @@
|
|
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 AnchoredOverlay_1 = require("../AnchoredOverlay");
|
27
|
+
const testing_1 = require("../utils/testing");
|
28
|
+
const react_2 = require("@testing-library/react");
|
29
|
+
const jest_axe_1 = require("jest-axe");
|
30
|
+
require("babel-polyfill");
|
31
|
+
const index_1 = require("../index");
|
32
|
+
const theme_1 = __importDefault(require("../theme"));
|
33
|
+
const BaseStyles_1 = __importDefault(require("../BaseStyles"));
|
34
|
+
const ThemeProvider_1 = require("../ThemeProvider");
|
35
|
+
expect.extend(jest_axe_1.toHaveNoViolations);
|
36
|
+
const AnchoredOverlayTestComponent = ({ initiallyOpen = false, onOpenCallback, onCloseCallback } = {}) => {
|
37
|
+
const [open, setOpen] = react_1.useState(initiallyOpen);
|
38
|
+
const onOpen = react_1.useCallback((gesture) => {
|
39
|
+
setOpen(true);
|
40
|
+
onOpenCallback?.(gesture);
|
41
|
+
}, [onOpenCallback]);
|
42
|
+
const onClose = react_1.useCallback((gesture) => {
|
43
|
+
setOpen(true);
|
44
|
+
onCloseCallback?.(gesture);
|
45
|
+
}, [onCloseCallback]);
|
46
|
+
return (<ThemeProvider_1.ThemeProvider theme={theme_1.default}>
|
47
|
+
<index_1.SSRProvider>
|
48
|
+
<BaseStyles_1.default>
|
49
|
+
<AnchoredOverlay_1.AnchoredOverlay open={open} onOpen={onOpen} onClose={onClose} renderAnchor={props => <index_1.Button {...props}>Anchor Button</index_1.Button>}>
|
50
|
+
<button type="button">Focusable Child</button>
|
51
|
+
</AnchoredOverlay_1.AnchoredOverlay>
|
52
|
+
</BaseStyles_1.default>
|
53
|
+
</index_1.SSRProvider>
|
54
|
+
</ThemeProvider_1.ThemeProvider>);
|
55
|
+
};
|
56
|
+
describe('AnchoredOverlay', () => {
|
57
|
+
testing_1.behavesAsComponent({
|
58
|
+
Component: AnchoredOverlay_1.AnchoredOverlay,
|
59
|
+
options: { skipAs: true, skipSx: true },
|
60
|
+
toRender: () => <AnchoredOverlayTestComponent />
|
61
|
+
});
|
62
|
+
testing_1.checkExports('AnchoredOverlay', {
|
63
|
+
default: undefined,
|
64
|
+
AnchoredOverlay: AnchoredOverlay_1.AnchoredOverlay
|
65
|
+
});
|
66
|
+
it('should have no axe violations when open', async () => {
|
67
|
+
const { container } = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true}></AnchoredOverlayTestComponent>);
|
68
|
+
const results = await jest_axe_1.axe(container);
|
69
|
+
expect(results).toHaveNoViolations();
|
70
|
+
react_2.cleanup();
|
71
|
+
});
|
72
|
+
it('should have no axe violations when closed', async () => {
|
73
|
+
const { container } = react_2.render(<AnchoredOverlayTestComponent></AnchoredOverlayTestComponent>);
|
74
|
+
const results = await jest_axe_1.axe(container);
|
75
|
+
expect(results).toHaveNoViolations();
|
76
|
+
react_2.cleanup();
|
77
|
+
});
|
78
|
+
it('should call onOpen when the anchor is clicked', () => {
|
79
|
+
const mockOpenCallback = jest.fn();
|
80
|
+
const mockCloseCallback = jest.fn();
|
81
|
+
const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
|
82
|
+
const anchor = anchoredOverlay.baseElement.querySelector('[aria-haspopup="true"]');
|
83
|
+
react_2.fireEvent.click(anchor);
|
84
|
+
expect(mockOpenCallback).toHaveBeenCalledTimes(1);
|
85
|
+
expect(mockOpenCallback).toHaveBeenCalledWith('anchor-click');
|
86
|
+
expect(mockCloseCallback).toHaveBeenCalledTimes(0);
|
87
|
+
});
|
88
|
+
it('should call onOpen when the anchor activated by a key press', () => {
|
89
|
+
const mockOpenCallback = jest.fn();
|
90
|
+
const mockCloseCallback = jest.fn();
|
91
|
+
const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
|
92
|
+
const anchor = anchoredOverlay.baseElement.querySelector('[aria-haspopup="true"]');
|
93
|
+
react_2.fireEvent.keyDown(anchor, { key: ' ' });
|
94
|
+
expect(mockOpenCallback).toHaveBeenCalledTimes(1);
|
95
|
+
expect(mockOpenCallback).toHaveBeenCalledWith('anchor-key-press');
|
96
|
+
expect(mockCloseCallback).toHaveBeenCalledTimes(0);
|
97
|
+
});
|
98
|
+
it('should call onClose when the user clicks off of the overlay', () => {
|
99
|
+
const mockOpenCallback = jest.fn();
|
100
|
+
const mockCloseCallback = jest.fn();
|
101
|
+
const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true} onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
|
102
|
+
react_2.fireEvent.mouseDown(anchoredOverlay.baseElement);
|
103
|
+
expect(mockOpenCallback).toHaveBeenCalledTimes(0);
|
104
|
+
expect(mockCloseCallback).toHaveBeenCalledTimes(1);
|
105
|
+
expect(mockCloseCallback).toHaveBeenCalledWith('click-outside');
|
106
|
+
});
|
107
|
+
it('should call onClose when the escape key is pressed', async () => {
|
108
|
+
const mockOpenCallback = jest.fn();
|
109
|
+
const mockCloseCallback = jest.fn();
|
110
|
+
const anchoredOverlay = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true} onOpenCallback={mockOpenCallback} onCloseCallback={mockCloseCallback}/>);
|
111
|
+
const overlay = await anchoredOverlay.findByRole('none');
|
112
|
+
react_2.fireEvent.keyDown(overlay, { key: 'Escape' });
|
113
|
+
expect(mockOpenCallback).toHaveBeenCalledTimes(0);
|
114
|
+
expect(mockCloseCallback).toHaveBeenCalledTimes(1);
|
115
|
+
expect(mockCloseCallback).toHaveBeenCalledWith('escape');
|
116
|
+
});
|
117
|
+
it('should render consistently when open', () => {
|
118
|
+
const { container } = react_2.render(<AnchoredOverlayTestComponent initiallyOpen={true}/>);
|
119
|
+
expect(container).toMatchSnapshot();
|
120
|
+
});
|
121
|
+
});
|