@primer/components 0.0.0-20211030163410 → 0.0.0-20211030175556
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -28
- package/dist/browser.esm.js +591 -602
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +200 -211
- package/dist/browser.umd.js.map +1 -1
- 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 +3 -3
- package/lib/ActionList/Item.jsx +288 -0
- package/lib/ActionList/List.jsx +138 -0
- package/lib/ActionList/index.js +12 -23
- package/lib/ActionList2/Description.jsx +29 -0
- package/lib/ActionList2/Divider.jsx +22 -0
- package/lib/ActionList2/Group.jsx +54 -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.js +1 -3
- package/lib/ActionList2/Item.jsx +174 -0
- package/lib/ActionList2/LinkItem.jsx +28 -0
- package/lib/ActionList2/List.js +2 -1
- package/lib/ActionList2/List.jsx +41 -0
- package/lib/ActionList2/Selection.js +1 -3
- package/lib/ActionList2/Selection.jsx +50 -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 +0 -1
- package/lib/Autocomplete/Autocomplete.jsx +100 -0
- package/lib/Autocomplete/AutocompleteContext.jsx +5 -0
- package/lib/Autocomplete/AutocompleteInput.d.ts +0 -1
- package/lib/Autocomplete/AutocompleteInput.jsx +113 -0
- package/lib/Autocomplete/AutocompleteMenu.js +13 -6
- 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 +71 -0
- package/lib/Button/Button.d.ts +0 -1
- package/lib/Button/Button.jsx +40 -0
- package/lib/Button/ButtonBase.jsx +33 -0
- package/lib/Button/ButtonClose.d.ts +1 -2
- package/lib/Button/ButtonClose.jsx +53 -0
- package/lib/Button/ButtonDanger.d.ts +0 -1
- package/lib/Button/ButtonDanger.jsx +43 -0
- package/lib/Button/ButtonGroup.jsx +55 -0
- package/lib/Button/ButtonInvisible.d.ts +0 -1
- package/lib/Button/ButtonInvisible.jsx +32 -0
- package/lib/Button/ButtonOutline.d.ts +0 -1
- package/lib/Button/ButtonOutline.jsx +43 -0
- package/lib/Button/ButtonPrimary.d.ts +0 -1
- package/lib/Button/ButtonPrimary.jsx +42 -0
- package/lib/Button/ButtonStyles.jsx +37 -0
- package/lib/Button/ButtonTableList.jsx +46 -0
- package/lib/Button/index.js +21 -70
- package/lib/Caret.jsx +93 -0
- package/lib/CircleBadge.jsx +42 -0
- package/lib/CircleOcticon.d.ts +0 -1
- package/lib/CircleOcticon.jsx +21 -0
- package/lib/CounterLabel.jsx +43 -0
- package/lib/Details.jsx +21 -0
- package/lib/Dialog/ConfirmationDialog.jsx +146 -0
- package/lib/Dialog/Dialog.jsx +279 -0
- package/lib/Dialog.d.ts +2 -3
- package/lib/Dialog.jsx +129 -0
- package/lib/Dropdown.d.ts +0 -4
- package/lib/Dropdown.jsx +131 -0
- package/lib/DropdownMenu/DropdownButton.d.ts +1 -2
- 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 +0 -1
- package/lib/FilterList.jsx +59 -0
- package/lib/FilteredActionList/FilteredActionList.jsx +100 -0
- package/lib/FilteredActionList/index.js +4 -12
- package/lib/FilteredSearch.jsx +28 -0
- package/lib/Flash.jsx +69 -0
- package/lib/Flex.jsx +15 -0
- package/lib/FormGroup.jsx +22 -0
- package/lib/Grid.jsx +15 -0
- package/lib/Header.jsx +83 -0
- package/lib/Heading.jsx +21 -0
- package/lib/Label.jsx +82 -0
- package/lib/LabelGroup.jsx +18 -0
- package/lib/Link.jsx +36 -0
- package/lib/NewButton/button-counter.jsx +14 -0
- package/lib/NewButton/button.jsx +279 -0
- package/lib/NewButton/index.js +5 -12
- package/lib/NewButton/types.js +2 -1
- package/lib/Overlay.d.ts +3 -5
- package/lib/Overlay.jsx +154 -0
- package/lib/Pagehead.jsx +17 -0
- package/lib/Pagination/Pagination.jsx +161 -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 +202 -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 +4 -10
- package/lib/SelectMenu/SelectMenu.jsx +112 -0
- package/lib/SelectMenu/SelectMenuContext.jsx +5 -0
- package/lib/SelectMenu/SelectMenuDivider.jsx +42 -0
- package/lib/SelectMenu/SelectMenuFilter.jsx +58 -0
- package/lib/SelectMenu/SelectMenuFooter.jsx +45 -0
- package/lib/SelectMenu/SelectMenuHeader.jsx +42 -0
- package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib/SelectMenu/SelectMenuItem.jsx +142 -0
- package/lib/SelectMenu/SelectMenuList.jsx +59 -0
- package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +22 -0
- package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
- package/lib/SelectMenu/SelectMenuModal.jsx +118 -0
- package/lib/SelectMenu/SelectMenuTab.jsx +92 -0
- package/lib/SelectMenu/SelectMenuTabPanel.jsx +42 -0
- package/lib/SelectMenu/SelectMenuTabs.jsx +57 -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 +173 -0
- package/lib/Spinner.jsx +35 -0
- package/lib/StateLabel.jsx +93 -0
- package/lib/StyledOcticon.jsx +18 -0
- package/lib/SubNav.jsx +101 -0
- package/lib/TabNav.jsx +58 -0
- package/lib/Text.jsx +14 -0
- package/lib/TextInput.jsx +23 -0
- package/lib/TextInputWithTokens.d.ts +0 -1
- package/lib/TextInputWithTokens.jsx +218 -0
- package/lib/ThemeProvider.jsx +130 -0
- package/lib/Timeline.jsx +123 -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 +24 -0
- package/lib/UnderlineNav.jsx +88 -0
- package/lib/_TextInputWrapper.jsx +120 -0
- package/lib/_UnstyledTextInput.jsx +22 -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.js +20 -30
- 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 +0 -5
- package/lib/index.js +163 -676
- package/lib/polyfills/eventListenerSignal.js +37 -45
- package/lib/sx.js +10 -22
- package/lib/theme-preval.js +64 -3169
- 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.d.ts +1 -2
- package/lib/utils/testing.js +0 -29
- 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/ActionList/Item.js +3 -3
- package/lib-esm/ActionList2/Header.d.ts +26 -0
- package/lib-esm/ActionList2/Header.js +44 -0
- package/lib-esm/ActionList2/Item.js +1 -3
- package/lib-esm/ActionList2/List.js +2 -1
- package/lib-esm/ActionList2/Selection.js +1 -3
- package/lib-esm/Autocomplete/Autocomplete.d.ts +0 -1
- package/lib-esm/Autocomplete/AutocompleteInput.d.ts +0 -1
- package/lib-esm/Autocomplete/AutocompleteMenu.js +13 -3
- package/lib-esm/Button/Button.d.ts +0 -1
- package/lib-esm/Button/ButtonClose.d.ts +1 -2
- package/lib-esm/Button/ButtonDanger.d.ts +0 -1
- package/lib-esm/Button/ButtonInvisible.d.ts +0 -1
- package/lib-esm/Button/ButtonOutline.d.ts +0 -1
- package/lib-esm/Button/ButtonPrimary.d.ts +0 -1
- package/lib-esm/CircleOcticon.d.ts +0 -1
- package/lib-esm/Dialog.d.ts +2 -3
- package/lib-esm/Dropdown.d.ts +0 -4
- package/lib-esm/DropdownMenu/DropdownButton.d.ts +1 -2
- package/lib-esm/FilterList.d.ts +0 -1
- package/lib-esm/Overlay.d.ts +3 -5
- package/lib-esm/Position.d.ts +4 -4
- package/lib-esm/SelectMenu/SelectMenu.d.ts +4 -10
- package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
- package/lib-esm/TextInputWithTokens.d.ts +0 -1
- 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/index.d.ts +0 -5
- package/lib-esm/index.js +0 -4
- package/lib-esm/theme-preval.js +0 -446
- package/lib-esm/utils/testing.d.ts +1 -2
- package/lib-esm/utils/testing.js +0 -24
- package/package.json +6 -5
- package/lib/Checkbox.d.ts +0 -29
- package/lib/Checkbox.js +0 -64
- package/lib/CheckboxInputField.d.ts +0 -11
- package/lib/CheckboxInputField.js +0 -74
- package/lib/RadioInputField.d.ts +0 -9
- package/lib/RadioInputField.js +0 -83
- package/lib/TextInputField.d.ts +0 -581
- package/lib/TextInputField.js +0 -66
- package/lib/_InputCaption.d.ts +0 -6
- package/lib/_InputCaption.js +0 -23
- package/lib/_InputField/InputField.d.ts +0 -39
- package/lib/_InputField/InputField.js +0 -90
- package/lib/_InputField/InputFieldCaption.d.ts +0 -3
- package/lib/_InputField/InputFieldCaption.js +0 -28
- package/lib/_InputField/InputFieldLabel.d.ts +0 -9
- package/lib/_InputField/InputFieldLabel.js +0 -34
- package/lib/_InputField/InputFieldValidation.d.ts +0 -6
- package/lib/_InputField/InputFieldValidation.js +0 -17
- package/lib/_InputField/ToggleInputField.d.ts +0 -13
- package/lib/_InputField/ToggleInputField.js +0 -71
- package/lib/_InputField/ToggleInputLeadingVisual.d.ts +0 -3
- package/lib/_InputField/ToggleInputLeadingVisual.js +0 -22
- package/lib/_InputField/ValidationAnimationContainer.d.ts +0 -6
- package/lib/_InputField/ValidationAnimationContainer.js +0 -48
- package/lib/_InputField/index.d.ts +0 -1
- package/lib/_InputField/index.js +0 -15
- package/lib/_InputField/slots.d.ts +0 -13
- package/lib/_InputField/slots.js +0 -17
- package/lib/_InputLabel.d.ts +0 -8
- package/lib/_InputLabel.js +0 -44
- package/lib/_InputValidation.d.ts +0 -8
- package/lib/_InputValidation.js +0 -56
- package/lib/_VisuallyHidden.d.ts +0 -6
- package/lib/_VisuallyHidden.js +0 -39
- package/lib/utils/types/FormValidationStatus.d.ts +0 -1
- package/lib/utils/types/FormValidationStatus.js +0 -1
- package/lib-esm/Checkbox.d.ts +0 -29
- package/lib-esm/Checkbox.js +0 -44
- package/lib-esm/CheckboxInputField.d.ts +0 -11
- package/lib-esm/CheckboxInputField.js +0 -57
- package/lib-esm/RadioInputField.d.ts +0 -9
- package/lib-esm/RadioInputField.js +0 -66
- package/lib-esm/TextInputField.d.ts +0 -581
- package/lib-esm/TextInputField.js +0 -50
- package/lib-esm/_InputCaption.d.ts +0 -6
- package/lib-esm/_InputCaption.js +0 -12
- package/lib-esm/_InputField/InputField.d.ts +0 -39
- package/lib-esm/_InputField/InputField.js +0 -70
- package/lib-esm/_InputField/InputFieldCaption.d.ts +0 -3
- package/lib-esm/_InputField/InputFieldCaption.js +0 -16
- package/lib-esm/_InputField/InputFieldLabel.d.ts +0 -9
- package/lib-esm/_InputField/InputFieldLabel.js +0 -22
- package/lib-esm/_InputField/InputFieldValidation.d.ts +0 -6
- package/lib-esm/_InputField/InputFieldValidation.js +0 -7
- package/lib-esm/_InputField/ToggleInputField.d.ts +0 -13
- package/lib-esm/_InputField/ToggleInputField.js +0 -54
- package/lib-esm/_InputField/ToggleInputLeadingVisual.d.ts +0 -3
- package/lib-esm/_InputField/ToggleInputLeadingVisual.js +0 -11
- package/lib-esm/_InputField/ValidationAnimationContainer.d.ts +0 -6
- package/lib-esm/_InputField/ValidationAnimationContainer.js +0 -33
- package/lib-esm/_InputField/index.d.ts +0 -1
- package/lib-esm/_InputField/index.js +0 -1
- package/lib-esm/_InputField/slots.d.ts +0 -13
- package/lib-esm/_InputField/slots.js +0 -5
- package/lib-esm/_InputLabel.d.ts +0 -8
- package/lib-esm/_InputLabel.js +0 -32
- package/lib-esm/_InputValidation.d.ts +0 -8
- package/lib-esm/_InputValidation.js +0 -43
- package/lib-esm/_VisuallyHidden.d.ts +0 -6
- package/lib-esm/_VisuallyHidden.js +0 -26
- package/lib-esm/utils/types/FormValidationStatus.d.ts +0 -1
- package/lib-esm/utils/types/FormValidationStatus.js +0 -1
package/lib/SubNav.jsx
ADDED
@@ -0,0 +1,101 @@
|
|
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 classnames_1 = __importDefault(require("classnames"));
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const styled_components_1 = __importDefault(require("styled-components"));
|
9
|
+
const constants_1 = require("./constants");
|
10
|
+
const sx_1 = __importDefault(require("./sx"));
|
11
|
+
const ITEM_CLASS = 'SubNav-item';
|
12
|
+
const SELECTED_CLASS = 'selected';
|
13
|
+
const SubNavBase = styled_components_1.default.nav `
|
14
|
+
display: flex;
|
15
|
+
justify-content: space-between;
|
16
|
+
|
17
|
+
.SubNav-body {
|
18
|
+
display: flex;
|
19
|
+
margin-bottom: -1px;
|
20
|
+
|
21
|
+
> * {
|
22
|
+
margin-left: ${constants_1.get('space.2')};
|
23
|
+
}
|
24
|
+
|
25
|
+
> *:first-child {
|
26
|
+
margin-left: 0;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
.SubNav-actions {
|
31
|
+
align-self: center;
|
32
|
+
}
|
33
|
+
|
34
|
+
${sx_1.default};
|
35
|
+
`;
|
36
|
+
function SubNav({ actions, className, children, label, ...rest }) {
|
37
|
+
const classes = classnames_1.default(className, 'SubNav');
|
38
|
+
return (<SubNavBase className={classes} aria-label={label} {...rest}>
|
39
|
+
<div className="SubNav-body">{children}</div>
|
40
|
+
{actions && <div className="SubNav-actions">{actions}</div>}
|
41
|
+
</SubNavBase>);
|
42
|
+
}
|
43
|
+
const SubNavLinks = styled_components_1.default.div `
|
44
|
+
display: flex;
|
45
|
+
${sx_1.default};
|
46
|
+
`;
|
47
|
+
const SubNavLink = styled_components_1.default.a.attrs(props => ({
|
48
|
+
activeClassName: typeof props.to === 'string' ? 'selected' : '',
|
49
|
+
className: classnames_1.default(ITEM_CLASS, props.selected && SELECTED_CLASS, props.className)
|
50
|
+
})) `
|
51
|
+
padding-left: ${constants_1.get('space.3')};
|
52
|
+
padding-right: ${constants_1.get('space.3')};
|
53
|
+
font-weight: ${constants_1.get('fontWeights.semibold')};
|
54
|
+
font-size: ${constants_1.get('fontSizes.1')};
|
55
|
+
line-height: 20px; //custom value for SubNav
|
56
|
+
min-height: 34px; //custom value for SubNav
|
57
|
+
color: ${constants_1.get('colors.fg.default')};
|
58
|
+
text-align: center;
|
59
|
+
text-decoration: none;
|
60
|
+
border-top: 1px solid ${constants_1.get('colors.border.default')};
|
61
|
+
border-bottom: 1px solid ${constants_1.get('colors.border.default')};
|
62
|
+
border-right: 1px solid ${constants_1.get('colors.border.default')};
|
63
|
+
display: flex;
|
64
|
+
align-items: center;
|
65
|
+
|
66
|
+
&:first-of-type {
|
67
|
+
border-top-left-radius: ${constants_1.get('radii.2')};
|
68
|
+
border-bottom-left-radius: ${constants_1.get('radii.2')};
|
69
|
+
border-left: 1px solid ${constants_1.get('colors.border.default')};
|
70
|
+
}
|
71
|
+
|
72
|
+
&:last-of-type {
|
73
|
+
border-top-right-radius: ${constants_1.get('radii.2')};
|
74
|
+
border-bottom-right-radius: ${constants_1.get('radii.2')};
|
75
|
+
}
|
76
|
+
|
77
|
+
&:hover,
|
78
|
+
&:focus {
|
79
|
+
text-decoration: none;
|
80
|
+
background-color: ${constants_1.get('colors.canvas.subtle')};
|
81
|
+
transition: 0.2s ease;
|
82
|
+
|
83
|
+
.SubNav-octicon {
|
84
|
+
color: ${constants_1.get('colors.fg.muted')};
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
&.selected {
|
89
|
+
color: ${constants_1.get('colors.fg.onEmphasis')};
|
90
|
+
background-color: ${constants_1.get('colors.accent.emphasis')};
|
91
|
+
border-color: ${constants_1.get('colors.accent.emphasis')};
|
92
|
+
.SubNav-octicon {
|
93
|
+
color: ${constants_1.get('colors.fg.onEmphasis')};
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
${sx_1.default};
|
98
|
+
`;
|
99
|
+
SubNavLink.displayName = 'SubNav.Link';
|
100
|
+
SubNavLinks.displayName = 'SubNav.Links';
|
101
|
+
exports.default = Object.assign(SubNav, { Link: SubNavLink, Links: SubNavLinks });
|
package/lib/TabNav.jsx
ADDED
@@ -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 classnames_1 = __importDefault(require("classnames"));
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const styled_components_1 = __importDefault(require("styled-components"));
|
9
|
+
const constants_1 = require("./constants");
|
10
|
+
const sx_1 = __importDefault(require("./sx"));
|
11
|
+
const ITEM_CLASS = 'TabNav-item';
|
12
|
+
const SELECTED_CLASS = 'selected';
|
13
|
+
const TabNavBase = styled_components_1.default.div `
|
14
|
+
margin-top: 0;
|
15
|
+
border-bottom: 1px solid ${constants_1.get('colors.border.default')};
|
16
|
+
${sx_1.default}
|
17
|
+
`;
|
18
|
+
const TabNavBody = styled_components_1.default.nav `
|
19
|
+
display: flex;
|
20
|
+
margin-bottom: -1px;
|
21
|
+
overflow: auto;
|
22
|
+
`;
|
23
|
+
function TabNav({ children, 'aria-label': ariaLabel, ...rest }) {
|
24
|
+
return (<TabNavBase {...rest}>
|
25
|
+
<TabNavBody aria-label={ariaLabel}>{children}</TabNavBody>
|
26
|
+
</TabNavBase>);
|
27
|
+
}
|
28
|
+
const TabNavLink = styled_components_1.default.a.attrs(props => ({
|
29
|
+
activeClassName: typeof props.to === 'string' ? 'selected' : '',
|
30
|
+
className: classnames_1.default(ITEM_CLASS, props.selected && SELECTED_CLASS, props.className)
|
31
|
+
})) `
|
32
|
+
padding: 8px 12px;
|
33
|
+
font-size: ${constants_1.get('fontSizes.1')};
|
34
|
+
line-height: 20px;
|
35
|
+
color: ${constants_1.get('colors.fg.default')};
|
36
|
+
text-decoration: none;
|
37
|
+
background-color: transparent;
|
38
|
+
border: 1px solid transparent;
|
39
|
+
border-bottom: 0;
|
40
|
+
|
41
|
+
&:hover,
|
42
|
+
&:focus {
|
43
|
+
color: ${constants_1.get('colors.fg.default')};
|
44
|
+
text-decoration: none;
|
45
|
+
}
|
46
|
+
|
47
|
+
&.selected {
|
48
|
+
color: ${constants_1.get('colors.fg.default')};
|
49
|
+
border-color: ${constants_1.get('colors.border.default')};
|
50
|
+
border-top-right-radius: ${constants_1.get('radii.2')};
|
51
|
+
border-top-left-radius: ${constants_1.get('radii.2')};
|
52
|
+
background-color: ${constants_1.get('colors.canvas.default')};
|
53
|
+
}
|
54
|
+
|
55
|
+
${sx_1.default};
|
56
|
+
`;
|
57
|
+
TabNavLink.displayName = 'TabNav.Link';
|
58
|
+
exports.default = Object.assign(TabNav, { Link: TabNavLink });
|
package/lib/Text.jsx
ADDED
@@ -0,0 +1,14 @@
|
|
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 constants_1 = require("./constants");
|
8
|
+
const sx_1 = __importDefault(require("./sx"));
|
9
|
+
const Text = styled_components_1.default.span `
|
10
|
+
${constants_1.TYPOGRAPHY};
|
11
|
+
${constants_1.COMMON};
|
12
|
+
${sx_1.default};
|
13
|
+
`;
|
14
|
+
exports.default = Text;
|
@@ -0,0 +1,23 @@
|
|
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 classnames_1 = __importDefault(require("classnames"));
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const _UnstyledTextInput_1 = __importDefault(require("./_UnstyledTextInput"));
|
9
|
+
const _TextInputWrapper_1 = __importDefault(require("./_TextInputWrapper"));
|
10
|
+
// using forwardRef is important so that other components (ex. SelectMenu) can autofocus the input
|
11
|
+
const TextInput = react_1.default.forwardRef(({ icon: IconComponent, block, className, contrast, disabled, sx: sxProp, theme, width: widthProp, minWidth: minWidthProp, maxWidth: maxWidthProp, variant: variantProp, ...inputProps }, ref) => {
|
12
|
+
// this class is necessary to style FilterSearch, plz no touchy!
|
13
|
+
const wrapperClasses = classnames_1.default(className, 'TextInput-wrapper');
|
14
|
+
return (<_TextInputWrapper_1.default block={block} className={wrapperClasses} contrast={contrast} disabled={disabled} hasIcon={!!IconComponent} sx={sxProp} theme={theme} width={widthProp} minWidth={minWidthProp} maxWidth={maxWidthProp} variant={variantProp}>
|
15
|
+
{IconComponent && <IconComponent className="TextInput-icon"/>}
|
16
|
+
<_UnstyledTextInput_1.default ref={ref} disabled={disabled} {...inputProps}/>
|
17
|
+
</_TextInputWrapper_1.default>);
|
18
|
+
});
|
19
|
+
TextInput.defaultProps = {
|
20
|
+
type: 'text'
|
21
|
+
};
|
22
|
+
TextInput.displayName = 'TextInput';
|
23
|
+
exports.default = TextInput;
|
@@ -314,7 +314,6 @@ declare const TextInputWithTokens: React.ForwardRefExoticComponent<Pick<{
|
|
314
314
|
onAnimationIterationCapture?: React.AnimationEventHandler<HTMLSpanElement> | undefined;
|
315
315
|
onTransitionEnd?: React.TransitionEventHandler<HTMLSpanElement> | undefined;
|
316
316
|
onTransitionEndCapture?: React.TransitionEventHandler<HTMLSpanElement> | undefined;
|
317
|
-
css?: import("@emotion/core").InterpolationWithTheme<any>;
|
318
317
|
disabled?: boolean | undefined;
|
319
318
|
hasIcon?: boolean | undefined;
|
320
319
|
contrast?: boolean | undefined;
|
@@ -0,0 +1,218 @@
|
|
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 props_1 = require("@styled-system/props");
|
27
|
+
const focusZone_1 = require("./behaviors/focusZone");
|
28
|
+
const useCombinedRefs_1 = require("./hooks/useCombinedRefs");
|
29
|
+
const useFocusZone_1 = require("./hooks/useFocusZone");
|
30
|
+
const Token_1 = __importDefault(require("./Token/Token"));
|
31
|
+
const hooks_1 = require("./hooks");
|
32
|
+
const _UnstyledTextInput_1 = __importDefault(require("./_UnstyledTextInput"));
|
33
|
+
const _TextInputWrapper_1 = __importDefault(require("./_TextInputWrapper"));
|
34
|
+
const Box_1 = __importDefault(require("./Box"));
|
35
|
+
const Text_1 = __importDefault(require("./Text"));
|
36
|
+
const iterateFocusableElements_1 = require("./utils/iterateFocusableElements");
|
37
|
+
const overflowCountFontSizeMap = {
|
38
|
+
small: 0,
|
39
|
+
medium: 1,
|
40
|
+
large: 1,
|
41
|
+
extralarge: 2
|
42
|
+
};
|
43
|
+
// using forwardRef is important so that other components (ex. Autocomplete) can use the ref
|
44
|
+
function TextInputWithTokensInnerComponent({ icon: IconComponent, contrast, className, block, disabled, theme, sx: sxProp, tokens, onTokenRemove, tokenComponent: TokenComponent, preventTokenWrapping, size, hideTokenRemoveButtons, maxHeight, width: widthProp, minWidth: minWidthProp, maxWidth: maxWidthProp, variant: variantProp, visibleTokenCount, ...rest }, externalRef) {
|
45
|
+
const { onBlur, onFocus, onKeyDown, ...inputPropsRest } = props_1.omit(rest);
|
46
|
+
const ref = hooks_1.useProvidedRefOrCreate(externalRef);
|
47
|
+
const localInputRef = react_1.useRef(null);
|
48
|
+
const combinedInputRef = useCombinedRefs_1.useCombinedRefs(localInputRef, ref);
|
49
|
+
const [selectedTokenIndex, setSelectedTokenIndex] = react_1.useState();
|
50
|
+
const [tokensAreTruncated, setTokensAreTruncated] = react_1.useState(Boolean(visibleTokenCount));
|
51
|
+
const { containerRef } = useFocusZone_1.useFocusZone({
|
52
|
+
focusOutBehavior: 'wrap',
|
53
|
+
bindKeys: focusZone_1.FocusKeys.ArrowHorizontal | focusZone_1.FocusKeys.HomeAndEnd,
|
54
|
+
focusableElementFilter: element => {
|
55
|
+
return !element.getAttributeNames().includes('aria-hidden');
|
56
|
+
},
|
57
|
+
getNextFocusable: direction => {
|
58
|
+
if (!selectedTokenIndex && selectedTokenIndex !== 0) {
|
59
|
+
return undefined;
|
60
|
+
}
|
61
|
+
let nextIndex = selectedTokenIndex + 1; // "+ 1" accounts for the first element: the text input
|
62
|
+
if (direction === 'next') {
|
63
|
+
nextIndex += 1;
|
64
|
+
}
|
65
|
+
if (direction === 'previous') {
|
66
|
+
nextIndex -= 1;
|
67
|
+
}
|
68
|
+
if (nextIndex > tokens.length || nextIndex < 1) {
|
69
|
+
return combinedInputRef.current || undefined;
|
70
|
+
}
|
71
|
+
return containerRef.current?.children[nextIndex];
|
72
|
+
}
|
73
|
+
}, [selectedTokenIndex]);
|
74
|
+
const handleTokenRemove = (tokenId) => {
|
75
|
+
onTokenRemove(tokenId);
|
76
|
+
// HACK: wait a tick for the the token node to be removed from the DOM
|
77
|
+
setTimeout(() => {
|
78
|
+
const nextElementToFocus = containerRef.current?.children[selectedTokenIndex || 0];
|
79
|
+
// when removing the first token by keying "Backspace" or "Delete",
|
80
|
+
// `nextFocusableElement` is the div that wraps the input
|
81
|
+
const firstFocusable = nextElementToFocus && iterateFocusableElements_1.isFocusable(nextElementToFocus)
|
82
|
+
? nextElementToFocus
|
83
|
+
: Array.from(containerRef.current?.children || []).find(el => iterateFocusableElements_1.isFocusable(el));
|
84
|
+
if (firstFocusable) {
|
85
|
+
firstFocusable.focus();
|
86
|
+
}
|
87
|
+
else {
|
88
|
+
// if there are no tokens left, focus the input
|
89
|
+
ref.current?.focus();
|
90
|
+
}
|
91
|
+
}, 0);
|
92
|
+
};
|
93
|
+
const handleTokenFocus = tokenIndex => () => {
|
94
|
+
setSelectedTokenIndex(tokenIndex);
|
95
|
+
};
|
96
|
+
const handleTokenBlur = () => {
|
97
|
+
setSelectedTokenIndex(undefined);
|
98
|
+
// HACK: wait a tick and check the focused element before hiding truncated tokens
|
99
|
+
// this prevents the tokens from hiding when the user is moving focus between tokens,
|
100
|
+
// but still hides the tokens when the user blurs the token by tabbing out or clicking somewhere else on the page
|
101
|
+
setTimeout(() => {
|
102
|
+
if (!containerRef.current?.contains(document.activeElement) && visibleTokenCount) {
|
103
|
+
setTokensAreTruncated(true);
|
104
|
+
}
|
105
|
+
}, 0);
|
106
|
+
};
|
107
|
+
const handleTokenKeyUp = event => {
|
108
|
+
if (event.key === 'Escape') {
|
109
|
+
ref.current?.focus();
|
110
|
+
}
|
111
|
+
};
|
112
|
+
const handleInputFocus = event => {
|
113
|
+
onFocus && onFocus(event);
|
114
|
+
setSelectedTokenIndex(undefined);
|
115
|
+
visibleTokenCount && setTokensAreTruncated(false);
|
116
|
+
};
|
117
|
+
const handleInputBlur = event => {
|
118
|
+
onBlur && onBlur(event);
|
119
|
+
// HACK: wait a tick and check the focused element before hiding truncated tokens
|
120
|
+
// this prevents the tokens from hiding when the user is moving focus from the input to a token,
|
121
|
+
// but still hides the tokens when the user blurs the input by tabbing out or clicking somewhere else on the page
|
122
|
+
setTimeout(() => {
|
123
|
+
if (!containerRef.current?.contains(document.activeElement) && visibleTokenCount) {
|
124
|
+
setTokensAreTruncated(true);
|
125
|
+
}
|
126
|
+
}, 0);
|
127
|
+
};
|
128
|
+
const handleInputKeyDown = e => {
|
129
|
+
if (onKeyDown) {
|
130
|
+
onKeyDown(e);
|
131
|
+
}
|
132
|
+
if (ref.current?.value) {
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
const lastToken = tokens[tokens.length - 1];
|
136
|
+
if (e.key === 'Backspace' && lastToken) {
|
137
|
+
handleTokenRemove(lastToken.id);
|
138
|
+
if (ref.current) {
|
139
|
+
// TODO: eliminate the first hack by making changes to the Autocomplete component
|
140
|
+
//
|
141
|
+
// HACKS:
|
142
|
+
// 1. Directly setting `ref.current.value` instead of updating state because the autocomplete
|
143
|
+
// highlight behavior doesn't work correctly if we update the value with a setState action in onChange
|
144
|
+
// 2. Adding an extra space so that when I backspace, it doesn't delete the last letter
|
145
|
+
ref.current.value = `${lastToken.text} `;
|
146
|
+
}
|
147
|
+
// HACK: for some reason we need to wait a tick for `.select()` to work
|
148
|
+
setTimeout(() => {
|
149
|
+
ref.current?.select();
|
150
|
+
}, 0);
|
151
|
+
}
|
152
|
+
};
|
153
|
+
const focusInput = () => {
|
154
|
+
combinedInputRef.current?.focus();
|
155
|
+
};
|
156
|
+
const preventTokenClickPropagation = event => {
|
157
|
+
event.stopPropagation();
|
158
|
+
};
|
159
|
+
const visibleTokens = tokensAreTruncated ? tokens.slice(0, visibleTokenCount) : tokens;
|
160
|
+
return (<_TextInputWrapper_1.default block={block} className={className} contrast={contrast} disabled={disabled} hasIcon={!!IconComponent} theme={theme} width={widthProp} minWidth={minWidthProp} maxWidth={maxWidthProp} variant={variantProp} onClick={focusInput} sx={{
|
161
|
+
...(block
|
162
|
+
? {
|
163
|
+
display: 'flex',
|
164
|
+
width: '100%'
|
165
|
+
}
|
166
|
+
: {}),
|
167
|
+
...(maxHeight
|
168
|
+
? {
|
169
|
+
maxHeight,
|
170
|
+
overflow: 'auto'
|
171
|
+
}
|
172
|
+
: {}),
|
173
|
+
...(preventTokenWrapping
|
174
|
+
? {
|
175
|
+
overflow: 'auto'
|
176
|
+
}
|
177
|
+
: {}),
|
178
|
+
...sxProp
|
179
|
+
}}>
|
180
|
+
<Box_1.default ref={containerRef} display="flex" sx={{
|
181
|
+
alignItems: 'center',
|
182
|
+
flexWrap: preventTokenWrapping ? 'nowrap' : 'wrap',
|
183
|
+
marginLeft: '-0.25rem',
|
184
|
+
marginBottom: '-0.25rem',
|
185
|
+
flexGrow: 1,
|
186
|
+
'> *': {
|
187
|
+
flexShrink: 0,
|
188
|
+
marginLeft: '0.25rem',
|
189
|
+
marginBottom: '0.25rem'
|
190
|
+
}
|
191
|
+
}}>
|
192
|
+
<Box_1.default sx={{
|
193
|
+
order: 1,
|
194
|
+
flexGrow: 1
|
195
|
+
}}>
|
196
|
+
{IconComponent && <IconComponent className="TextInput-icon"/>}
|
197
|
+
<_UnstyledTextInput_1.default ref={combinedInputRef} disabled={disabled} onFocus={handleInputFocus} onBlur={handleInputBlur} onKeyDown={handleInputKeyDown} type="text" sx={{ height: '100%' }} {...inputPropsRest}/>
|
198
|
+
</Box_1.default>
|
199
|
+
{TokenComponent
|
200
|
+
? visibleTokens.map(({ id, ...tokenRest }, i) => (<TokenComponent key={id} onFocus={handleTokenFocus(i)} onBlur={handleTokenBlur} onKeyUp={handleTokenKeyUp} onClick={preventTokenClickPropagation} isSelected={selectedTokenIndex === i} onRemove={() => {
|
201
|
+
handleTokenRemove(id);
|
202
|
+
}} hideRemoveButton={hideTokenRemoveButtons} size={size} tabIndex={0} {...tokenRest}/>))
|
203
|
+
: null}
|
204
|
+
{tokensAreTruncated ? (<Text_1.default color="fg.muted" fontSize={size && overflowCountFontSizeMap[size]}>
|
205
|
+
+{tokens.length - visibleTokens.length}
|
206
|
+
</Text_1.default>) : null}
|
207
|
+
</Box_1.default>
|
208
|
+
</_TextInputWrapper_1.default>);
|
209
|
+
}
|
210
|
+
const TextInputWithTokens = react_1.default.forwardRef(TextInputWithTokensInnerComponent);
|
211
|
+
TextInputWithTokens.defaultProps = {
|
212
|
+
tokenComponent: Token_1.default,
|
213
|
+
size: 'extralarge',
|
214
|
+
hideTokenRemoveButtons: false,
|
215
|
+
preventTokenWrapping: false
|
216
|
+
};
|
217
|
+
TextInputWithTokens.displayName = 'TextInputWithTokens';
|
218
|
+
exports.default = TextInputWithTokens;
|
@@ -0,0 +1,130 @@
|
|
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.useColorSchemeVar = exports.useTheme = exports.ThemeProvider = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const styled_components_1 = require("styled-components");
|
9
|
+
const theme_1 = __importDefault(require("./theme"));
|
10
|
+
const deepmerge_1 = __importDefault(require("deepmerge"));
|
11
|
+
const defaultColorMode = 'day';
|
12
|
+
const defaultDayScheme = 'light';
|
13
|
+
const defaultNightScheme = 'dark';
|
14
|
+
const ThemeContext = react_1.default.createContext({
|
15
|
+
setColorMode: () => null,
|
16
|
+
setDayScheme: () => null,
|
17
|
+
setNightScheme: () => null
|
18
|
+
});
|
19
|
+
const ThemeProvider = ({ children, ...props }) => {
|
20
|
+
// Get fallback values from parent ThemeProvider (if exists)
|
21
|
+
const { theme: fallbackTheme, colorMode: fallbackColorMode, dayScheme: fallbackDayScheme, nightScheme: fallbackNightScheme } = useTheme();
|
22
|
+
// Initialize state
|
23
|
+
const theme = props.theme ?? fallbackTheme ?? theme_1.default;
|
24
|
+
const [colorMode, setColorMode] = react_1.default.useState(props.colorMode ?? fallbackColorMode ?? defaultColorMode);
|
25
|
+
const [dayScheme, setDayScheme] = react_1.default.useState(props.dayScheme ?? fallbackDayScheme ?? defaultDayScheme);
|
26
|
+
const [nightScheme, setNightScheme] = react_1.default.useState(props.nightScheme ?? fallbackNightScheme ?? defaultNightScheme);
|
27
|
+
const systemColorMode = useSystemColorMode();
|
28
|
+
const resolvedColorMode = resolveColorMode(colorMode, systemColorMode);
|
29
|
+
const colorScheme = chooseColorScheme(resolvedColorMode, dayScheme, nightScheme);
|
30
|
+
const resolvedTheme = react_1.default.useMemo(() => applyColorScheme(theme, colorScheme), [theme, colorScheme]);
|
31
|
+
// Update state if props change
|
32
|
+
react_1.default.useEffect(() => {
|
33
|
+
setColorMode(props.colorMode ?? fallbackColorMode ?? defaultColorMode);
|
34
|
+
}, [props.colorMode, fallbackColorMode]);
|
35
|
+
react_1.default.useEffect(() => {
|
36
|
+
setDayScheme(props.dayScheme ?? fallbackDayScheme ?? defaultDayScheme);
|
37
|
+
}, [props.dayScheme, fallbackDayScheme]);
|
38
|
+
react_1.default.useEffect(() => {
|
39
|
+
setNightScheme(props.nightScheme ?? fallbackNightScheme ?? defaultNightScheme);
|
40
|
+
}, [props.nightScheme, fallbackNightScheme]);
|
41
|
+
return (<ThemeContext.Provider value={{
|
42
|
+
theme: resolvedTheme,
|
43
|
+
colorScheme,
|
44
|
+
colorMode,
|
45
|
+
resolvedColorMode,
|
46
|
+
dayScheme,
|
47
|
+
nightScheme,
|
48
|
+
setColorMode,
|
49
|
+
setDayScheme,
|
50
|
+
setNightScheme
|
51
|
+
}}>
|
52
|
+
<styled_components_1.ThemeProvider theme={resolvedTheme}>{children}</styled_components_1.ThemeProvider>
|
53
|
+
</ThemeContext.Provider>);
|
54
|
+
};
|
55
|
+
exports.ThemeProvider = ThemeProvider;
|
56
|
+
function useTheme() {
|
57
|
+
return react_1.default.useContext(ThemeContext);
|
58
|
+
}
|
59
|
+
exports.useTheme = useTheme;
|
60
|
+
function useColorSchemeVar(values, fallback) {
|
61
|
+
const { colorScheme = '' } = useTheme();
|
62
|
+
return values[colorScheme] ?? fallback;
|
63
|
+
}
|
64
|
+
exports.useColorSchemeVar = useColorSchemeVar;
|
65
|
+
function useSystemColorMode() {
|
66
|
+
const [systemColorMode, setSystemColorMode] = react_1.default.useState(getSystemColorMode);
|
67
|
+
react_1.default.useEffect(() => {
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
69
|
+
const media = window?.matchMedia?.('(prefers-color-scheme: dark)');
|
70
|
+
function handleChange(event) {
|
71
|
+
const isNight = event.matches;
|
72
|
+
setSystemColorMode(isNight ? 'night' : 'day');
|
73
|
+
}
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
75
|
+
if (media) {
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
77
|
+
if (media.addEventListener !== undefined) {
|
78
|
+
media.addEventListener('change', handleChange);
|
79
|
+
return function cleanup() {
|
80
|
+
media.removeEventListener('change', handleChange);
|
81
|
+
};
|
82
|
+
}
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
84
|
+
else if (media.addListener !== undefined) {
|
85
|
+
media.addListener(handleChange);
|
86
|
+
return function cleanup() {
|
87
|
+
media.removeListener(handleChange);
|
88
|
+
};
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}, []);
|
92
|
+
return systemColorMode;
|
93
|
+
}
|
94
|
+
function getSystemColorMode() {
|
95
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
96
|
+
if (typeof window !== 'undefined' && window.matchMedia?.('(prefers-color-scheme: dark)')?.matches) {
|
97
|
+
return 'night';
|
98
|
+
}
|
99
|
+
return 'day';
|
100
|
+
}
|
101
|
+
function resolveColorMode(colorMode, systemColorMode) {
|
102
|
+
switch (colorMode) {
|
103
|
+
case 'auto':
|
104
|
+
return systemColorMode;
|
105
|
+
default:
|
106
|
+
return colorMode;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
function chooseColorScheme(colorMode, dayScheme, nightScheme) {
|
110
|
+
switch (colorMode) {
|
111
|
+
case 'day':
|
112
|
+
return dayScheme;
|
113
|
+
case 'night':
|
114
|
+
return nightScheme;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
function applyColorScheme(theme, colorScheme) {
|
118
|
+
if (!theme.colorSchemes) {
|
119
|
+
return theme;
|
120
|
+
}
|
121
|
+
if (!theme.colorSchemes[colorScheme]) {
|
122
|
+
// eslint-disable-next-line no-console
|
123
|
+
console.error(`\`${colorScheme}\` scheme not defined in \`theme.colorSchemes\``);
|
124
|
+
// Apply the first defined color scheme
|
125
|
+
const defaultColorScheme = Object.keys(theme.colorSchemes)[0];
|
126
|
+
return deepmerge_1.default(theme, theme.colorSchemes[defaultColorScheme]);
|
127
|
+
}
|
128
|
+
return deepmerge_1.default(theme, theme.colorSchemes[colorScheme]);
|
129
|
+
}
|
130
|
+
exports.default = exports.ThemeProvider;
|
package/lib/Timeline.jsx
ADDED
@@ -0,0 +1,123 @@
|
|
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 classnames_1 = __importDefault(require("classnames"));
|
26
|
+
const react_1 = __importDefault(require("react"));
|
27
|
+
const styled_components_1 = __importStar(require("styled-components"));
|
28
|
+
const _1 = require(".");
|
29
|
+
const constants_1 = require("./constants");
|
30
|
+
const sx_1 = __importDefault(require("./sx"));
|
31
|
+
const Timeline = styled_components_1.default.div `
|
32
|
+
display: flex;
|
33
|
+
flex-direction: column;
|
34
|
+
${props => props.clipSidebar &&
|
35
|
+
styled_components_1.css `
|
36
|
+
.Timeline-Item:first-child {
|
37
|
+
padding-top: 0;
|
38
|
+
}
|
39
|
+
|
40
|
+
.Timeline-Item:last-child {
|
41
|
+
padding-bottom: 0;
|
42
|
+
}
|
43
|
+
`}
|
44
|
+
|
45
|
+
${sx_1.default};
|
46
|
+
`;
|
47
|
+
const TimelineItem = styled_components_1.default.div.attrs(props => ({
|
48
|
+
className: classnames_1.default('Timeline-Item', props.className)
|
49
|
+
})) `
|
50
|
+
display: flex;
|
51
|
+
position: relative;
|
52
|
+
padding: ${constants_1.get('space.3')} 0;
|
53
|
+
margin-left: ${constants_1.get('space.3')};
|
54
|
+
|
55
|
+
&::before {
|
56
|
+
position: absolute;
|
57
|
+
top: 0;
|
58
|
+
bottom: 0;
|
59
|
+
left: 0;
|
60
|
+
display: block;
|
61
|
+
width: 2px;
|
62
|
+
content: '';
|
63
|
+
background-color: ${constants_1.get('colors.border.muted')};
|
64
|
+
}
|
65
|
+
|
66
|
+
${props => props.condensed &&
|
67
|
+
styled_components_1.css `
|
68
|
+
padding-top: ${constants_1.get('space.1')};
|
69
|
+
padding-bottom: 0;
|
70
|
+
&:last-child {
|
71
|
+
padding-bottom: ${constants_1.get('space.3')};
|
72
|
+
}
|
73
|
+
|
74
|
+
.TimelineItem-Badge {
|
75
|
+
height: 16px;
|
76
|
+
margin-top: ${constants_1.get('space.2')};
|
77
|
+
margin-bottom: ${constants_1.get('space.2')};
|
78
|
+
color: ${constants_1.get('colors.fg.muted')};
|
79
|
+
background-color: ${constants_1.get('colors.canvas.default')};
|
80
|
+
border: 0;
|
81
|
+
}
|
82
|
+
`}
|
83
|
+
|
84
|
+
${sx_1.default};
|
85
|
+
`;
|
86
|
+
const TimelineBadge = (props) => {
|
87
|
+
return (<_1.Box position="relative" zIndex={1}>
|
88
|
+
<_1.Box display="flex" className="TimelineItem-Badge" flexShrink={0} borderRadius="50%" borderWidth="2px" borderStyle="solid" borderColor="canvas.default" overflow="hidden" color="fg.muted" bg="timeline.badgeBg" width="32px" height="32px" mr={2} ml="-15px" alignItems="center" justifyContent="center" sx={props.sx}>
|
89
|
+
{props.children}
|
90
|
+
</_1.Box>
|
91
|
+
</_1.Box>);
|
92
|
+
};
|
93
|
+
const TimelineBody = styled_components_1.default.div `
|
94
|
+
min-width: 0;
|
95
|
+
max-width: 100%;
|
96
|
+
margin-top: ${constants_1.get('space.1')};
|
97
|
+
color: ${constants_1.get('colors.fg.muted')};
|
98
|
+
flex: auto;
|
99
|
+
font-size: ${constants_1.get('fontSizes.1')};
|
100
|
+
${sx_1.default};
|
101
|
+
`;
|
102
|
+
const TimelineBreak = styled_components_1.default.div `
|
103
|
+
position: relative
|
104
|
+
z-index: 1;
|
105
|
+
height: 24px;
|
106
|
+
margin: 0;
|
107
|
+
margin-bottom: -${constants_1.get('space.3')};
|
108
|
+
margin-left: 0;
|
109
|
+
background-color: ${constants_1.get('colors.canvas.default')};
|
110
|
+
border: 0;
|
111
|
+
border-top: ${constants_1.get('space.1')} solid ${constants_1.get('colors.border.default')};
|
112
|
+
${sx_1.default};
|
113
|
+
`;
|
114
|
+
TimelineItem.displayName = 'Timeline.Item';
|
115
|
+
TimelineBadge.displayName = 'Timeline.Badge';
|
116
|
+
TimelineBody.displayName = 'Timeline.Body';
|
117
|
+
TimelineBreak.displayName = 'Timeline.Break';
|
118
|
+
exports.default = Object.assign(Timeline, {
|
119
|
+
Item: TimelineItem,
|
120
|
+
Badge: TimelineBadge,
|
121
|
+
Body: TimelineBody,
|
122
|
+
Break: TimelineBreak
|
123
|
+
});
|