@primer/components 0.0.0-202181722217 → 0.0.0-202181723821
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 +23 -1
- package/dist/browser.esm.js +665 -619
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +432 -386
- package/dist/browser.umd.js.map +1 -1
- package/lib/ActionList/Divider.js +1 -1
- package/lib/ActionList/Header.js +2 -2
- package/lib/ActionList/Item.js +13 -13
- package/lib/ActionList/List.js +1 -1
- package/lib/AnchoredOverlay/AnchoredOverlay.js +2 -2
- package/lib/Avatar.d.ts +4 -0
- package/lib/AvatarPair.js +1 -1
- package/lib/AvatarStack.js +1 -1
- package/lib/BranchName.js +1 -1
- package/lib/Breadcrumb.js +2 -2
- package/lib/Button/Button.js +1 -1
- package/lib/Button/ButtonClose.js +1 -1
- package/lib/Button/ButtonInvisible.js +1 -1
- package/lib/Button/ButtonTableList.js +1 -1
- package/lib/CircleBadge.js +1 -1
- package/lib/CircleOcticon.js +1 -1
- package/lib/CounterLabel.js +2 -2
- package/lib/Dialog/ConfirmationDialog.js +1 -1
- package/lib/Dialog/Dialog.js +9 -9
- package/lib/Dialog.js +4 -4
- package/lib/Dropdown.js +2 -2
- package/lib/DropdownStyles.js +6 -6
- package/lib/FilterList.js +1 -1
- package/lib/FilteredActionList/FilteredActionList.js +5 -5
- package/lib/Flash.js +1 -1
- package/lib/Label.js +2 -2
- package/lib/Link.js +1 -1
- package/lib/Overlay.d.ts +1 -2
- package/lib/Overlay.js +6 -11
- package/lib/Pagehead.js +1 -1
- package/lib/Pagination/Pagination.js +1 -1
- package/lib/Popover.js +1 -1
- package/lib/ProgressBar.js +1 -1
- package/lib/SelectMenu/SelectMenu.d.ts +11 -327
- package/lib/SelectMenu/SelectMenuDivider.js +1 -1
- package/lib/SelectMenu/SelectMenuFilter.d.ts +1 -1
- package/lib/SelectMenu/SelectMenuFilter.js +1 -1
- package/lib/SelectMenu/SelectMenuFooter.js +1 -1
- package/lib/SelectMenu/SelectMenuHeader.js +2 -2
- package/lib/SelectMenu/SelectMenuItem.js +1 -1
- package/lib/SelectMenu/SelectMenuList.js +1 -1
- package/lib/SelectMenu/SelectMenuLoadingAnimation.js +1 -1
- package/lib/SelectMenu/SelectMenuModal.js +2 -2
- package/lib/SelectMenu/SelectMenuTab.js +1 -1
- package/lib/SelectMenu/SelectMenuTabPanel.js +1 -1
- package/lib/SideNav.js +5 -5
- package/lib/StateLabel.js +1 -1
- package/lib/SubNav.js +1 -1
- package/lib/TabNav.js +2 -2
- package/lib/TextInput.d.ts +6 -6
- package/lib/TextInput.js +21 -16
- package/lib/Timeline.js +16 -19
- package/lib/Tooltip.js +1 -1
- package/lib/UnderlineNav.js +2 -2
- package/lib/hooks/useOverlay.d.ts +1 -2
- package/lib/hooks/useOverlay.js +6 -11
- package/lib/index.d.ts +1 -0
- package/lib/index.js +14 -0
- package/lib/theme-preval.d.ts +12 -6
- package/lib/theme-preval.js +940 -0
- package/lib/utils/ssr.d.ts +1 -0
- package/lib/utils/ssr.js +19 -0
- package/lib/utils/testing.d.ts +1854 -0
- package/lib/utils/uniqueId.js +1 -0
- package/lib-esm/ActionList/Divider.js +1 -1
- package/lib-esm/ActionList/Header.js +2 -2
- package/lib-esm/ActionList/Item.js +14 -14
- package/lib-esm/ActionList/List.js +1 -1
- package/lib-esm/AnchoredOverlay/AnchoredOverlay.js +3 -3
- package/lib-esm/Avatar.d.ts +4 -0
- package/lib-esm/AvatarPair.js +1 -1
- package/lib-esm/AvatarStack.js +1 -1
- package/lib-esm/BranchName.js +1 -1
- package/lib-esm/Breadcrumb.js +2 -2
- package/lib-esm/Button/Button.js +1 -1
- package/lib-esm/Button/ButtonClose.js +1 -1
- package/lib-esm/Button/ButtonInvisible.js +1 -1
- package/lib-esm/Button/ButtonTableList.js +1 -1
- package/lib-esm/CircleBadge.js +1 -1
- package/lib-esm/CircleOcticon.js +1 -1
- package/lib-esm/CounterLabel.js +2 -2
- package/lib-esm/Dialog/ConfirmationDialog.js +1 -1
- package/lib-esm/Dialog/Dialog.js +8 -8
- package/lib-esm/Dialog.js +4 -4
- package/lib-esm/Dropdown.js +2 -2
- package/lib-esm/DropdownStyles.js +6 -6
- package/lib-esm/FilterList.js +1 -1
- package/lib-esm/FilteredActionList/FilteredActionList.js +5 -5
- package/lib-esm/Flash.js +1 -1
- package/lib-esm/Label.js +2 -2
- package/lib-esm/Link.js +1 -1
- package/lib-esm/Overlay.d.ts +1 -2
- package/lib-esm/Overlay.js +6 -9
- package/lib-esm/Pagehead.js +1 -1
- package/lib-esm/Pagination/Pagination.js +1 -1
- package/lib-esm/Popover.js +1 -1
- package/lib-esm/ProgressBar.js +1 -1
- package/lib-esm/SelectMenu/SelectMenu.d.ts +11 -327
- package/lib-esm/SelectMenu/SelectMenuDivider.js +1 -1
- package/lib-esm/SelectMenu/SelectMenuFilter.d.ts +1 -1
- package/lib-esm/SelectMenu/SelectMenuFilter.js +1 -1
- package/lib-esm/SelectMenu/SelectMenuFooter.js +1 -1
- package/lib-esm/SelectMenu/SelectMenuHeader.js +2 -2
- package/lib-esm/SelectMenu/SelectMenuItem.js +1 -1
- package/lib-esm/SelectMenu/SelectMenuList.js +1 -1
- package/lib-esm/SelectMenu/SelectMenuLoadingAnimation.js +1 -1
- package/lib-esm/SelectMenu/SelectMenuModal.js +2 -2
- package/lib-esm/SelectMenu/SelectMenuTab.js +1 -1
- package/lib-esm/SelectMenu/SelectMenuTabPanel.js +1 -1
- package/lib-esm/SideNav.js +5 -5
- package/lib-esm/StateLabel.js +1 -1
- package/lib-esm/SubNav.js +1 -1
- package/lib-esm/TabNav.js +2 -2
- package/lib-esm/TextInput.d.ts +6 -6
- package/lib-esm/TextInput.js +22 -16
- package/lib-esm/Timeline.js +12 -17
- package/lib-esm/Tooltip.js +1 -1
- package/lib-esm/UnderlineNav.js +2 -2
- package/lib-esm/hooks/useOverlay.d.ts +1 -2
- package/lib-esm/hooks/useOverlay.js +6 -11
- package/lib-esm/index.d.ts +1 -0
- package/lib-esm/index.js +2 -1
- package/lib-esm/theme-preval.d.ts +12 -6
- package/lib-esm/theme-preval.js +940 -0
- package/lib-esm/utils/ssr.d.ts +1 -0
- package/lib-esm/utils/ssr.js +1 -0
- package/lib-esm/utils/testing.d.ts +1854 -0
- package/lib-esm/utils/uniqueId.js +1 -0
- package/package.json +5 -6
- package/lib/Autocomplete/Autocomplete.d.ts +0 -36
- package/lib/Autocomplete/Autocomplete.js +0 -55
- package/lib/Autocomplete/AutocompleteContext.d.ts +0 -13
- package/lib/Autocomplete/AutocompleteContext.js +0 -14
- package/lib/Autocomplete/AutocompleteInput.d.ts +0 -9
- package/lib/Autocomplete/AutocompleteInput.js +0 -123
- package/lib/Autocomplete/AutocompleteMenu.d.ts +0 -20
- package/lib/Autocomplete/AutocompleteMenu.js +0 -268
- package/lib/Autocomplete/index.d.ts +0 -2
- package/lib/Autocomplete/index.js +0 -15
- package/lib/Badge/Badge.d.ts +0 -8
- package/lib/Badge/Badge.js +0 -59
- package/lib/Badge/BadgeState.d.ts +0 -13
- package/lib/Badge/BadgeState.js +0 -51
- package/lib/Badge/_badgeStyleUtils.d.ts +0 -3
- package/lib/Badge/_badgeStyleUtils.js +0 -39
- package/lib/TextInputTokens.d.ts +0 -32
- package/lib/TextInputTokens.js +0 -241
- package/lib/TextInputWithTokens.d.ts +0 -41
- package/lib/TextInputWithTokens.js +0 -396
- package/lib/Token/Token.d.ts +0 -7
- package/lib/Token/Token.js +0 -66
- package/lib/Token/TokenBase.d.ts +0 -16
- package/lib/Token/TokenBase.js +0 -76
- package/lib/Token/TokenLabel.d.ts +0 -8
- package/lib/Token/TokenLabel.js +0 -116
- package/lib/Token/TokenProfile.d.ts +0 -7
- package/lib/Token/TokenProfile.js +0 -45
- package/lib/Token/_AddTokenButton.d.ts +0 -3
- package/lib/Token/_AddTokenButton.js +0 -42
- package/lib/Token/_RemoveTokenButton.d.ts +0 -3
- package/lib/Token/_RemoveTokenButton.js +0 -42
- package/lib/Token/_tokenButtonUtils.d.ts +0 -8
- package/lib/Token/_tokenButtonUtils.js +0 -42
- package/lib-esm/Autocomplete/Autocomplete.d.ts +0 -36
- package/lib-esm/Autocomplete/Autocomplete.js +0 -36
- package/lib-esm/Autocomplete/AutocompleteContext.d.ts +0 -13
- package/lib-esm/Autocomplete/AutocompleteContext.js +0 -5
- package/lib-esm/Autocomplete/AutocompleteInput.d.ts +0 -9
- package/lib-esm/Autocomplete/AutocompleteInput.js +0 -104
- package/lib-esm/Autocomplete/AutocompleteMenu.d.ts +0 -20
- package/lib-esm/Autocomplete/AutocompleteMenu.js +0 -244
- package/lib-esm/Autocomplete/index.d.ts +0 -2
- package/lib-esm/Autocomplete/index.js +0 -1
- package/lib-esm/Badge/Badge.d.ts +0 -8
- package/lib-esm/Badge/Badge.js +0 -44
- package/lib-esm/Badge/BadgeState.d.ts +0 -13
- package/lib-esm/Badge/BadgeState.js +0 -40
- package/lib-esm/Badge/_badgeStyleUtils.d.ts +0 -3
- package/lib-esm/Badge/_badgeStyleUtils.js +0 -29
- package/lib-esm/TextInputTokens.d.ts +0 -32
- package/lib-esm/TextInputTokens.js +0 -211
- package/lib-esm/TextInputWithTokens.d.ts +0 -41
- package/lib-esm/TextInputWithTokens.js +0 -361
- package/lib-esm/Token/Token.d.ts +0 -7
- package/lib-esm/Token/Token.js +0 -46
- package/lib-esm/Token/TokenBase.d.ts +0 -16
- package/lib-esm/Token/TokenBase.js +0 -56
- package/lib-esm/Token/TokenLabel.d.ts +0 -8
- package/lib-esm/Token/TokenLabel.js +0 -100
- package/lib-esm/Token/TokenProfile.d.ts +0 -7
- package/lib-esm/Token/TokenProfile.js +0 -28
- package/lib-esm/Token/_AddTokenButton.d.ts +0 -3
- package/lib-esm/Token/_AddTokenButton.js +0 -27
- package/lib-esm/Token/_RemoveTokenButton.d.ts +0 -3
- package/lib-esm/Token/_RemoveTokenButton.js +0 -27
- package/lib-esm/Token/_tokenButtonUtils.d.ts +0 -8
- package/lib-esm/Token/_tokenButtonUtils.js +0 -26
@@ -1,396 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.default = void 0;
|
7
|
-
|
8
|
-
var _react = _interopRequireWildcard(require("react"));
|
9
|
-
|
10
|
-
var _props = require("@styled-system/props");
|
11
|
-
|
12
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
13
|
-
|
14
|
-
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
15
|
-
|
16
|
-
var _styledSystem = require("styled-system");
|
17
|
-
|
18
|
-
var _ActionList = require("./ActionList");
|
19
|
-
|
20
|
-
var _focusZone = require("./behaviors/focusZone");
|
21
|
-
|
22
|
-
var _constants = require("./constants");
|
23
|
-
|
24
|
-
var _hooks = require("./hooks");
|
25
|
-
|
26
|
-
var _useCombinedRefs = require("./hooks/useCombinedRefs");
|
27
|
-
|
28
|
-
var _useFocusZone = require("./hooks/useFocusZone");
|
29
|
-
|
30
|
-
var _Overlay = _interopRequireDefault(require("./Overlay"));
|
31
|
-
|
32
|
-
var _sx = _interopRequireDefault(require("./sx"));
|
33
|
-
|
34
|
-
var _Token = _interopRequireDefault(require("./Token/Token"));
|
35
|
-
|
36
|
-
var _ = require(".");
|
37
|
-
|
38
|
-
var _Portal = require("./Portal");
|
39
|
-
|
40
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
41
|
-
|
42
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
43
|
-
|
44
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
45
|
-
|
46
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
47
|
-
|
48
|
-
const DROPDOWN_PORTAL_CONTAINER_NAME = '__listcontainerportal__';
|
49
|
-
|
50
|
-
function scrollIntoViewingArea(child, container, margin = 8, behavior = 'smooth') {
|
51
|
-
const {
|
52
|
-
top: childTop,
|
53
|
-
bottom: childBottom
|
54
|
-
} = child.getBoundingClientRect();
|
55
|
-
const {
|
56
|
-
top: containerTop,
|
57
|
-
bottom: containerBottom
|
58
|
-
} = container.getBoundingClientRect();
|
59
|
-
const isChildTopAboveViewingArea = childTop < containerTop + margin;
|
60
|
-
const isChildBottomBelowViewingArea = childBottom > containerBottom - margin;
|
61
|
-
|
62
|
-
if (isChildTopAboveViewingArea) {
|
63
|
-
const scrollHeightToChildTop = childTop - containerTop + container.scrollTop;
|
64
|
-
container.scrollTo({
|
65
|
-
behavior,
|
66
|
-
top: scrollHeightToChildTop - margin
|
67
|
-
});
|
68
|
-
} else if (isChildBottomBelowViewingArea) {
|
69
|
-
const scrollHeightToChildBottom = childBottom - containerBottom + container.scrollTop;
|
70
|
-
container.scrollTo({
|
71
|
-
behavior,
|
72
|
-
top: scrollHeightToChildBottom + margin
|
73
|
-
});
|
74
|
-
} // either completely in view or outside viewing area on both ends, don't scroll
|
75
|
-
|
76
|
-
}
|
77
|
-
|
78
|
-
const sizeVariants = (0, _styledSystem.variant)({
|
79
|
-
variants: {
|
80
|
-
small: {
|
81
|
-
minHeight: '28px',
|
82
|
-
px: 2,
|
83
|
-
py: '3px',
|
84
|
-
fontSize: 0,
|
85
|
-
lineHeight: '20px'
|
86
|
-
},
|
87
|
-
large: {
|
88
|
-
px: 2,
|
89
|
-
py: '10px',
|
90
|
-
fontSize: 3
|
91
|
-
}
|
92
|
-
}
|
93
|
-
});
|
94
|
-
|
95
|
-
const Input = _styledComponents.default.input.withConfig({
|
96
|
-
displayName: "TextInputWithTokens__Input",
|
97
|
-
componentId: "sc-8z94t5-0"
|
98
|
-
})(["border:0;font-size:inherit;font-family:inherit;background-color:transparent;-webkit-appearance:none;color:inherit;height:100%;width:100%;padding:0;&:focus{outline:0;}"]);
|
99
|
-
|
100
|
-
const InputWrapper = _styledComponents.default.div.withConfig({
|
101
|
-
displayName: "TextInputWithTokens__InputWrapper",
|
102
|
-
componentId: "sc-8z94t5-1"
|
103
|
-
})(["position:relative;order:1;flex-grow:1;&:after{content:attr(data-autocompleteSuggestion);pointer-events:none;display:flex;align-items:center;position:absolute;left:0;top:1px;width:100%;height:100%;display:flex;align-items:center;color:rgba(0,0,0,0.5);}"]);
|
104
|
-
|
105
|
-
const Wrapper = _styledComponents.default.span.withConfig({
|
106
|
-
displayName: "TextInputWithTokens__Wrapper",
|
107
|
-
componentId: "sc-8z94t5-2"
|
108
|
-
})(["display:inline-flex;align-items:stretch;min-height:34px;font-size:", ";line-height:20px;color:", ";vertical-align:middle;background-repeat:no-repeat;background-position:right 8px center;border:1px solid ", ";border-radius:", ";outline:none;box-shadow:", ";flex-wrap:wrap;gap:0.25rem;", " ", " .TextInput-icon{align-self:center;color:", ";margin:0 ", ";flex-shrink:0;}&:focus-within{border-color:", ";box-shadow:", ";}", " ", " ", " @media (min-width:", "){font-size:", ";}", " ", " ", " ", " ", " ", ";"], (0, _constants.get)('fontSizes.1'), (0, _constants.get)('colors.text.primary'), (0, _constants.get)('colors.border.primary'), (0, _constants.get)('radii.2'), (0, _constants.get)('shadows.shadow.inset'), props => {
|
109
|
-
if (props.hasIcon) {
|
110
|
-
return (0, _styledComponents.css)(["padding:0;"]);
|
111
|
-
} else {
|
112
|
-
return (0, _styledComponents.css)(["padding:6px 12px;"]);
|
113
|
-
}
|
114
|
-
}, props => {
|
115
|
-
if (props.maxHeight) {
|
116
|
-
return (0, _styledComponents.css)(["max-height:", ";overflow:auto;"], props.maxHeight);
|
117
|
-
}
|
118
|
-
}, (0, _constants.get)('colors.icon.tertiary'), (0, _constants.get)('space.2'), (0, _constants.get)('colors.state.focus.border'), (0, _constants.get)('shadows.state.focus.shadow'), props => props.contrast && (0, _styledComponents.css)(["background-color:", ";"], (0, _constants.get)('colors.input.contrastBg')), props => props.disabled && (0, _styledComponents.css)(["color:", ";background-color:", ";border-color:", ";"], (0, _constants.get)('colors.text.secondary'), (0, _constants.get)('colors.input.disabledBg'), (0, _constants.get)('colors.input.disabledBorder')), props => props.block && (0, _styledComponents.css)(["display:block;width:100%;"]), (0, _constants.get)('breakpoints.1'), (0, _constants.get)('fontSizes.1'), _constants.COMMON, _styledSystem.width, _styledSystem.minWidth, _styledSystem.maxWidth, sizeVariants, _sx.default);
|
119
|
-
|
120
|
-
// using forwardRef is important so that other components (ex. SelectMenu) can autofocus the input
|
121
|
-
const TextInputWithTokens = /*#__PURE__*/_react.default.forwardRef(({
|
122
|
-
icon: IconComponent,
|
123
|
-
contrast,
|
124
|
-
className,
|
125
|
-
block,
|
126
|
-
disabled,
|
127
|
-
theme,
|
128
|
-
sx: sxProp,
|
129
|
-
tokens,
|
130
|
-
selectableItems,
|
131
|
-
onFilterChange,
|
132
|
-
onItemSelect,
|
133
|
-
onTokenRemove,
|
134
|
-
tokenComponent: TokenComponent,
|
135
|
-
emptyStateText,
|
136
|
-
addNewTokenItem,
|
137
|
-
onCloseOptionsList,
|
138
|
-
loading,
|
139
|
-
...rest
|
140
|
-
}, ref) => {
|
141
|
-
const listContainerRef = (0, _react.useRef)(null);
|
142
|
-
const localInputRef = (0, _react.useRef)(null);
|
143
|
-
const scrollContainerRef = (0, _react.useRef)(null);
|
144
|
-
const activeDescendantRef = (0, _react.useRef)();
|
145
|
-
const combinedInputRef = (0, _useCombinedRefs.useCombinedRefs)(localInputRef, ref); // this class is necessary to style FilterSearch, plz no touchy!
|
146
|
-
|
147
|
-
const wrapperClasses = (0, _classnames.default)(className, 'TextInput-wrapper');
|
148
|
-
const wrapperProps = (0, _props.pick)(rest);
|
149
|
-
const inputProps = (0, _props.omit)(rest);
|
150
|
-
const [selectedTokenIdx, setSelectedTokenIdx] = (0, _react.useState)();
|
151
|
-
const [inputVal, setInputVal] = (0, _react.useState)('');
|
152
|
-
const [showMenu, setShowMenu] = (0, _react.useState)(false);
|
153
|
-
const [selectedItems, setSelectedItems] = (0, _react.useState)(tokens.map(({
|
154
|
-
id,
|
155
|
-
text
|
156
|
-
}) => ({
|
157
|
-
id,
|
158
|
-
text
|
159
|
-
})));
|
160
|
-
const [autocompleteSuggestion, setAutocompleteSuggestion] = (0, _react.useState)('');
|
161
|
-
const [highlightedItem, setHighlightedItem] = (0, _react.useState)();
|
162
|
-
const {
|
163
|
-
containerRef
|
164
|
-
} = (0, _useFocusZone.useFocusZone)({
|
165
|
-
focusOutBehavior: 'wrap',
|
166
|
-
bindKeys: _focusZone.FocusKeys.ArrowHorizontal | _focusZone.FocusKeys.HomeAndEnd,
|
167
|
-
focusableElementFilter: element => {
|
168
|
-
return !(element instanceof HTMLButtonElement);
|
169
|
-
}
|
170
|
-
});
|
171
|
-
const {
|
172
|
-
floatingElementRef,
|
173
|
-
position
|
174
|
-
} = (0, _hooks.useAnchoredPosition)({
|
175
|
-
side: 'outside-bottom',
|
176
|
-
align: 'start',
|
177
|
-
anchorElementRef: combinedInputRef
|
178
|
-
}, [showMenu, tokens]);
|
179
|
-
|
180
|
-
const closeOptionList = () => {
|
181
|
-
setShowMenu(false);
|
182
|
-
|
183
|
-
if (onCloseOptionsList) {
|
184
|
-
onCloseOptionsList();
|
185
|
-
}
|
186
|
-
};
|
187
|
-
|
188
|
-
const showOptionList = () => {
|
189
|
-
setShowMenu(true);
|
190
|
-
};
|
191
|
-
|
192
|
-
const handleTokenRemove = tokenId => {
|
193
|
-
onTokenRemove(tokenId);
|
194
|
-
setSelectedItems(selectedItems.filter(selectedItem => selectedItem.id !== tokenId));
|
195
|
-
};
|
196
|
-
|
197
|
-
const handleTokenFocus = tokenIdx => () => {
|
198
|
-
setSelectedTokenIdx(tokenIdx);
|
199
|
-
closeOptionList();
|
200
|
-
};
|
201
|
-
|
202
|
-
const handleTokenBlur = () => {
|
203
|
-
setSelectedTokenIdx(undefined);
|
204
|
-
};
|
205
|
-
|
206
|
-
const handleTokenKeyUp = tokenId => e => {
|
207
|
-
if (e.key === 'Backspace') {
|
208
|
-
handleTokenRemove(tokenId);
|
209
|
-
}
|
210
|
-
|
211
|
-
if (e.key === 'Escape') {
|
212
|
-
var _combinedInputRef$cur;
|
213
|
-
|
214
|
-
combinedInputRef === null || combinedInputRef === void 0 ? void 0 : (_combinedInputRef$cur = combinedInputRef.current) === null || _combinedInputRef$cur === void 0 ? void 0 : _combinedInputRef$cur.focus();
|
215
|
-
}
|
216
|
-
};
|
217
|
-
|
218
|
-
const handleInputFocus = () => {
|
219
|
-
setSelectedTokenIdx(undefined);
|
220
|
-
showOptionList();
|
221
|
-
};
|
222
|
-
|
223
|
-
const handleInputChange = e => {
|
224
|
-
onFilterChange(e.currentTarget.value, e);
|
225
|
-
setInputVal(e.currentTarget.value);
|
226
|
-
};
|
227
|
-
|
228
|
-
const handleInputKeyDown = e => {
|
229
|
-
if (e.key === 'ArrowRight' && autocompleteSuggestion) {
|
230
|
-
setInputVal(autocompleteSuggestion); // TODO: use hooks or something to always trigger `onFilterChange` when `inputVal` is changed
|
231
|
-
|
232
|
-
onFilterChange(autocompleteSuggestion, e);
|
233
|
-
}
|
234
|
-
|
235
|
-
if (inputVal) {
|
236
|
-
return;
|
237
|
-
}
|
238
|
-
|
239
|
-
const lastToken = tokens[tokens.length - 1];
|
240
|
-
|
241
|
-
if (e.key === 'Backspace') {
|
242
|
-
handleTokenRemove(lastToken.id);
|
243
|
-
setInputVal(`${lastToken.text}` || ''); // TODO: use hooks or something to always trigger `onFilterChange` when `inputVal` is changed
|
244
|
-
|
245
|
-
onFilterChange(lastToken.text || '', e); // HACK: for some reason we need to wait a tick for `.select()` to work
|
246
|
-
|
247
|
-
setTimeout(() => {
|
248
|
-
var _combinedInputRef$cur2;
|
249
|
-
|
250
|
-
combinedInputRef === null || combinedInputRef === void 0 ? void 0 : (_combinedInputRef$cur2 = combinedInputRef.current) === null || _combinedInputRef$cur2 === void 0 ? void 0 : _combinedInputRef$cur2.select();
|
251
|
-
}, 1);
|
252
|
-
}
|
253
|
-
};
|
254
|
-
|
255
|
-
const onInputKeyPress = (0, _react.useCallback)(event => {
|
256
|
-
if (event.key === 'Enter' && activeDescendantRef.current) {
|
257
|
-
event.preventDefault();
|
258
|
-
event.nativeEvent.stopImmediatePropagation(); // Forward Enter key press to active descendant so that item gets activated
|
259
|
-
|
260
|
-
const activeDescendantEvent = new KeyboardEvent(event.type, event.nativeEvent);
|
261
|
-
activeDescendantRef.current.dispatchEvent(activeDescendantEvent);
|
262
|
-
}
|
263
|
-
}, [activeDescendantRef]);
|
264
|
-
|
265
|
-
const getSelectedItems = (itemId, checked) => {
|
266
|
-
const newlySelectedItem = selectableItems.find(item => item.id === itemId);
|
267
|
-
|
268
|
-
if (checked) {
|
269
|
-
return [...selectedItems, ...(newlySelectedItem ? [newlySelectedItem] : [])];
|
270
|
-
}
|
271
|
-
|
272
|
-
return selectedItems.filter(selectedChoice => selectedChoice.id !== itemId);
|
273
|
-
};
|
274
|
-
|
275
|
-
const itemsToRender = [// selectable tokens
|
276
|
-
...selectableItems.map(selectableItem => ({ ...selectableItem,
|
277
|
-
selected: selectableItem.selected || selectedItems.map(item => item.id).includes(selectableItem.id),
|
278
|
-
onAction: (item, e) => {
|
279
|
-
setSelectedItems(getSelectedItems(item.id, !item.selected) || []);
|
280
|
-
|
281
|
-
if (!item.selected) {
|
282
|
-
onItemSelect(item, e);
|
283
|
-
setInputVal('');
|
284
|
-
setAutocompleteSuggestion('');
|
285
|
-
} else {
|
286
|
-
handleTokenRemove(item.id !== null && item.id !== undefined ? item.id : '');
|
287
|
-
}
|
288
|
-
}
|
289
|
-
})), // menu item used for creating a token from whatever is in the text input
|
290
|
-
...(addNewTokenItem ? [{ ...addNewTokenItem,
|
291
|
-
onAction: (_item, e) => {
|
292
|
-
onItemSelect({
|
293
|
-
text: inputVal,
|
294
|
-
id: `randomlyGeneratedId-${inputVal}`
|
295
|
-
}, e);
|
296
|
-
}
|
297
|
-
}] : [])];
|
298
|
-
(0, _useFocusZone.useFocusZone)({
|
299
|
-
containerRef: listContainerRef,
|
300
|
-
focusOutBehavior: 'wrap',
|
301
|
-
focusableElementFilter: element => {
|
302
|
-
return !(element instanceof HTMLInputElement);
|
303
|
-
},
|
304
|
-
activeDescendantFocus: combinedInputRef,
|
305
|
-
onActiveDescendantChanged: (current, _previous, directlyActivated) => {
|
306
|
-
activeDescendantRef.current = current;
|
307
|
-
const selectedItem = itemsToRender.find(item => {
|
308
|
-
var _item$id;
|
309
|
-
|
310
|
-
return ((_item$id = item.id) === null || _item$id === void 0 ? void 0 : _item$id.toString()) === (current === null || current === void 0 ? void 0 : current.dataset.id);
|
311
|
-
});
|
312
|
-
setHighlightedItem(selectedItem);
|
313
|
-
|
314
|
-
if (current && scrollContainerRef.current && directlyActivated) {
|
315
|
-
scrollIntoViewingArea(current, scrollContainerRef.current);
|
316
|
-
}
|
317
|
-
}
|
318
|
-
});
|
319
|
-
(0, _react.useEffect)(() => {
|
320
|
-
var _highlightedItem$text;
|
321
|
-
|
322
|
-
if (highlightedItem !== null && highlightedItem !== void 0 && (_highlightedItem$text = highlightedItem.text) !== null && _highlightedItem$text !== void 0 && _highlightedItem$text.startsWith(inputVal)) {
|
323
|
-
setAutocompleteSuggestion(highlightedItem.text);
|
324
|
-
} else {
|
325
|
-
setAutocompleteSuggestion('');
|
326
|
-
}
|
327
|
-
}, [highlightedItem, inputVal]);
|
328
|
-
|
329
|
-
if (listContainerRef.current) {
|
330
|
-
(0, _Portal.registerPortalRoot)(listContainerRef.current, DROPDOWN_PORTAL_CONTAINER_NAME);
|
331
|
-
}
|
332
|
-
|
333
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Wrapper, _extends({
|
334
|
-
className: wrapperClasses,
|
335
|
-
hasIcon: !!IconComponent,
|
336
|
-
block: block,
|
337
|
-
theme: theme,
|
338
|
-
disabled: disabled,
|
339
|
-
contrast: contrast,
|
340
|
-
sx: sxProp,
|
341
|
-
ref: containerRef
|
342
|
-
}, wrapperProps), /*#__PURE__*/_react.default.createElement(InputWrapper, {
|
343
|
-
"data-autocompleteSuggestion": autocompleteSuggestion
|
344
|
-
}, /*#__PURE__*/_react.default.createElement(Input, _extends({
|
345
|
-
ref: combinedInputRef,
|
346
|
-
disabled: disabled,
|
347
|
-
onFocus: handleInputFocus,
|
348
|
-
onKeyPress: onInputKeyPress,
|
349
|
-
onKeyDown: handleInputKeyDown,
|
350
|
-
onChange: handleInputChange,
|
351
|
-
type: "text",
|
352
|
-
value: inputVal
|
353
|
-
}, inputProps))), tokens !== null && tokens !== void 0 && tokens.length && TokenComponent ? tokens.map((token, i) => /*#__PURE__*/_react.default.createElement(TokenComponent, {
|
354
|
-
onFocus: handleTokenFocus(i),
|
355
|
-
onBlur: handleTokenBlur,
|
356
|
-
onKeyUp: handleTokenKeyUp(token.id),
|
357
|
-
text: token.text || '' // TODO: just make token.text required
|
358
|
-
,
|
359
|
-
isSelected: selectedTokenIdx === i,
|
360
|
-
handleRemove: () => {
|
361
|
-
handleTokenRemove(token.id);
|
362
|
-
},
|
363
|
-
variant: "xl",
|
364
|
-
fillColor: token.labelColor ? token.labelColor : undefined,
|
365
|
-
tabIndex: 0
|
366
|
-
})) : null), /*#__PURE__*/_react.default.createElement("div", {
|
367
|
-
ref: listContainerRef
|
368
|
-
}, showMenu && emptyStateText ? /*#__PURE__*/_react.default.createElement(_Overlay.default, {
|
369
|
-
returnFocusRef: combinedInputRef,
|
370
|
-
portalContainerName: DROPDOWN_PORTAL_CONTAINER_NAME,
|
371
|
-
preventFocusOnOpen: true,
|
372
|
-
onClickOutside: closeOptionList,
|
373
|
-
onEscape: closeOptionList,
|
374
|
-
ref: floatingElementRef,
|
375
|
-
top: position === null || position === void 0 ? void 0 : position.top,
|
376
|
-
left: position === null || position === void 0 ? void 0 : position.left
|
377
|
-
}, loading ? /*#__PURE__*/_react.default.createElement(_.Box, {
|
378
|
-
p: 3,
|
379
|
-
display: "flex",
|
380
|
-
justifyContent: "center"
|
381
|
-
}, /*#__PURE__*/_react.default.createElement(_.Spinner, null)) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, itemsToRender.length ? /*#__PURE__*/_react.default.createElement(_ActionList.ActionList, {
|
382
|
-
selectionVariant: "multiple",
|
383
|
-
items: itemsToRender,
|
384
|
-
role: "listbox"
|
385
|
-
}) : /*#__PURE__*/_react.default.createElement(_.Box, {
|
386
|
-
p: 3
|
387
|
-
}, emptyStateText))) : null));
|
388
|
-
});
|
389
|
-
|
390
|
-
TextInputWithTokens.defaultProps = {
|
391
|
-
tokenComponent: _Token.default,
|
392
|
-
emptyStateText: 'No selectable options'
|
393
|
-
};
|
394
|
-
TextInputWithTokens.displayName = 'TextInputWithTokens';
|
395
|
-
var _default = TextInputWithTokens;
|
396
|
-
exports.default = _default;
|
package/lib/Token/Token.d.ts
DELETED
package/lib/Token/Token.js
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.default = void 0;
|
7
|
-
|
8
|
-
var _react = _interopRequireDefault(require("react"));
|
9
|
-
|
10
|
-
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
11
|
-
|
12
|
-
var _constants = require("../constants");
|
13
|
-
|
14
|
-
var _TokenBase = _interopRequireWildcard(require("./TokenBase"));
|
15
|
-
|
16
|
-
var _AddTokenButton = _interopRequireDefault(require("./_AddTokenButton"));
|
17
|
-
|
18
|
-
var _RemoveTokenButton = _interopRequireDefault(require("./_RemoveTokenButton"));
|
19
|
-
|
20
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
21
|
-
|
22
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
23
|
-
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
25
|
-
|
26
|
-
const DefaultToken = (0, _styledComponents.default)(_TokenBase.default).withConfig({
|
27
|
-
displayName: "Token__DefaultToken",
|
28
|
-
componentId: "sc-1dg52pw-0"
|
29
|
-
})(["background-color:", ";border-color:", ";border-style:solid;border-width:", ";color:", ";padding-right:", ";&:hover{background-color:", ";}> ._TokenButton{color:", ";}"], (0, _constants.get)('colors.accent.subtle'), props => props.isSelected ? (0, _constants.get)('colors.accent.fg') : (0, _constants.get)('colors.accent.subtle'), props => props.isSelected ? '1px' : 0, (0, _constants.get)('colors.accent.fg'), props => props.handleRemove || props.handleAdd ? 0 : undefined, props => (0, _TokenBase.isTokenHoverable)(props) ? (0, _constants.get)('colors.accent.muted') : undefined, (0, _constants.get)('colors.accent.fg')); // TODO: make this text truncate
|
30
|
-
|
31
|
-
const TokenTextContainer = (0, _styledComponents.default)('span').withConfig({
|
32
|
-
displayName: "Token__TokenTextContainer",
|
33
|
-
componentId: "sc-1dg52pw-1"
|
34
|
-
})(["flex-grow:1;white-space:nowrap;"]);
|
35
|
-
const LeadingVisualContainer = (0, _styledComponents.default)('span').withConfig({
|
36
|
-
displayName: "Token__LeadingVisualContainer",
|
37
|
-
componentId: "sc-1dg52pw-2"
|
38
|
-
})(["flex-shrink:0;line-height:0;"]);
|
39
|
-
|
40
|
-
const Token = ({
|
41
|
-
leadingVisual: LeadingVisual,
|
42
|
-
...tokenBaseProps
|
43
|
-
}) => {
|
44
|
-
const {
|
45
|
-
handleRemove,
|
46
|
-
handleAdd,
|
47
|
-
text,
|
48
|
-
as,
|
49
|
-
variant
|
50
|
-
} = tokenBaseProps;
|
51
|
-
return /*#__PURE__*/_react.default.createElement(DefaultToken, tokenBaseProps, LeadingVisual ? /*#__PURE__*/_react.default.createElement(LeadingVisualContainer, null, /*#__PURE__*/_react.default.createElement(LeadingVisual, null)) : null, /*#__PURE__*/_react.default.createElement(TokenTextContainer, null, text), handleRemove ? /*#__PURE__*/_react.default.createElement(_RemoveTokenButton.default, {
|
52
|
-
parentTokenTag: as || 'span',
|
53
|
-
tabIndex: -1,
|
54
|
-
onClick: handleRemove,
|
55
|
-
variant: variant
|
56
|
-
}) : null, handleAdd ? /*#__PURE__*/_react.default.createElement(_AddTokenButton.default, {
|
57
|
-
parentTokenTag: as || 'span',
|
58
|
-
tabIndex: -1,
|
59
|
-
onClick: handleAdd,
|
60
|
-
variant: variant
|
61
|
-
}) : null);
|
62
|
-
};
|
63
|
-
|
64
|
-
Token.displayName = "Token";
|
65
|
-
var _default = Token;
|
66
|
-
exports.default = _default;
|
package/lib/Token/TokenBase.d.ts
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
/// <reference types="react" />
|
2
|
-
export declare type TokenSizeKeys = 'sm' | 'md' | 'lg' | 'xl';
|
3
|
-
export declare const tokenSizes: Record<TokenSizeKeys, number>;
|
4
|
-
export declare const defaultTokenSize = "md";
|
5
|
-
export interface TokenBaseProps extends Omit<React.HTMLProps<HTMLSpanElement | HTMLButtonElement | HTMLAnchorElement>, 'size'> {
|
6
|
-
as?: 'button' | 'a' | 'span';
|
7
|
-
handleAdd?: () => void;
|
8
|
-
handleRemove?: () => void;
|
9
|
-
isSelected?: boolean;
|
10
|
-
tabIndex?: number;
|
11
|
-
text: string;
|
12
|
-
variant?: TokenSizeKeys;
|
13
|
-
}
|
14
|
-
export declare const isTokenHoverable: ({ as, onClick, onFocus }: TokenBaseProps) => boolean;
|
15
|
-
declare const TokenBase: import("styled-components").StyledComponent<"span", any, TokenBaseProps, never>;
|
16
|
-
export default TokenBase;
|
package/lib/Token/TokenBase.js
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.default = exports.isTokenHoverable = exports.defaultTokenSize = exports.tokenSizes = void 0;
|
7
|
-
|
8
|
-
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
9
|
-
|
10
|
-
var _styledSystem = require("styled-system");
|
11
|
-
|
12
|
-
var _constants = require("../constants");
|
13
|
-
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
15
|
-
|
16
|
-
const tokenSizes = {
|
17
|
-
sm: 16,
|
18
|
-
md: 20,
|
19
|
-
lg: 24,
|
20
|
-
xl: 32
|
21
|
-
};
|
22
|
-
exports.tokenSizes = tokenSizes;
|
23
|
-
const defaultTokenSize = 'md';
|
24
|
-
exports.defaultTokenSize = defaultTokenSize;
|
25
|
-
|
26
|
-
const isTokenHoverable = ({
|
27
|
-
as = 'span',
|
28
|
-
onClick,
|
29
|
-
onFocus
|
30
|
-
}) => Boolean(onFocus || onClick || ['a', 'button'].includes(as));
|
31
|
-
|
32
|
-
exports.isTokenHoverable = isTokenHoverable;
|
33
|
-
const variants = (0, _styledSystem.variant)({
|
34
|
-
variants: {
|
35
|
-
sm: {
|
36
|
-
fontSize: 0,
|
37
|
-
gap: 1,
|
38
|
-
height: `${tokenSizes.sm}px`,
|
39
|
-
paddingLeft: 1,
|
40
|
-
paddingRight: 1
|
41
|
-
},
|
42
|
-
md: {
|
43
|
-
fontSize: 0,
|
44
|
-
gap: 1,
|
45
|
-
height: `${tokenSizes.md}px`,
|
46
|
-
paddingLeft: 2,
|
47
|
-
paddingRight: 2
|
48
|
-
},
|
49
|
-
lg: {
|
50
|
-
fontSize: 0,
|
51
|
-
gap: 2,
|
52
|
-
height: `${tokenSizes.lg}px`,
|
53
|
-
paddingLeft: 2,
|
54
|
-
paddingRight: 2
|
55
|
-
},
|
56
|
-
xl: {
|
57
|
-
fontSize: 1,
|
58
|
-
gap: 2,
|
59
|
-
height: `${tokenSizes.xl}px`,
|
60
|
-
paddingLeft: 3,
|
61
|
-
paddingRight: 3
|
62
|
-
}
|
63
|
-
}
|
64
|
-
});
|
65
|
-
|
66
|
-
const TokenBase = _styledComponents.default.span.withConfig({
|
67
|
-
displayName: "TokenBase",
|
68
|
-
componentId: "opajvp-0"
|
69
|
-
})(["align-items:center;border-radius:999px;cursor:", ";display:inline-flex;font-weight:", ";text-decoration:none;white-space:nowrap;", ""], props => isTokenHoverable(props) ? 'pointer' : 'auto', (0, _constants.get)('fontWeights.bold'), variants);
|
70
|
-
|
71
|
-
TokenBase.defaultProps = {
|
72
|
-
as: 'span',
|
73
|
-
variant: defaultTokenSize
|
74
|
-
};
|
75
|
-
var _default = TokenBase;
|
76
|
-
exports.default = _default;
|