@jobber/components 4.46.0 → 4.46.1-JOB-79340.32
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/Chip.d.ts +1 -0
- package/Chip.js +17 -0
- package/Flex.d.ts +1 -0
- package/Flex.js +17 -0
- package/dist/Autocomplete/index.js +7 -7
- package/dist/Avatar/Avatar.d.ts +1 -1
- package/dist/Avatar/index.d.ts +1 -1
- package/dist/Banner/index.js +3 -3
- package/dist/Button/index.js +2 -2
- package/dist/{Button-d89f2271.js → Button-db6114a6.js} +1 -1
- package/dist/ButtonDismiss/index.js +3 -3
- package/dist/{ButtonDismiss-250840a4.js → ButtonDismiss-1ccb84ec.js} +1 -1
- package/dist/Card/index.js +5 -5
- package/dist/{Card-69304e99.js → Card-116af709.js} +3 -3
- package/dist/Checkbox/index.js +3 -3
- package/dist/{Checkbox-eac63b7f.js → Checkbox-bc4bc968.js} +1 -1
- package/dist/Chip/Chip.d.ts +8 -0
- package/dist/Chip/Chip.types.d.d.ts +68 -0
- package/dist/Chip/components/ChipDismissible/ChipDismissible.d.ts +3 -0
- package/dist/Chip/components/ChipPrefix/Chip.Prefix.d.ts +6 -0
- package/dist/Chip/components/ChipSelectable/ChipSelectable.d.ts +3 -0
- package/dist/Chip/components/ChipSuffix/Chip.Suffix.d.ts +10 -0
- package/dist/Chip/hooks/index.d.ts +1 -0
- package/dist/Chip/hooks/useChildComponent.d.ts +8 -0
- package/dist/Chip/index.d.ts +4 -0
- package/dist/Chip/index.js +35 -0
- package/dist/Chip-00e281e9.js +73 -0
- package/dist/Chips/ChipsTypes.d.ts +10 -6
- package/dist/Chips/InternalChipDismissible/InternalChipDismissibleTypes.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/hooks/useInternalChipDismissible.d.ts +1 -1
- package/dist/Chips/InternalChipSingleSelect.d.ts +1 -1
- package/dist/Chips/index.d.ts +5 -1
- package/dist/Chips/index.js +122 -18
- package/dist/{Chip-4d8e6370.js → Chips-5ff2b9d2.js} +62 -169
- package/dist/Combobox/Combobox.d.ts +1 -12
- package/dist/Combobox/Combobox.types.d.ts +142 -0
- package/dist/Combobox/components/ComboboxAction/ComboboxAction.d.ts +2 -11
- package/dist/Combobox/components/ComboboxAction/index.d.ts +1 -1
- package/dist/Combobox/components/ComboboxContent/ComboboxContent.d.ts +2 -32
- package/dist/Combobox/components/ComboboxContent/ComboboxContentHeader/ComboboxContentHeader.d.ts +3 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentHeader/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentList/ComboboxContentList.d.ts +3 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentList/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentSearch/ComboboxContentSearch.d.ts +3 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContentSearch/index.d.ts +1 -0
- package/dist/Combobox/components/ComboboxTrigger/ComboboxTriggerButton/ComboboxTriggerButton.d.ts +1 -1
- package/dist/Combobox/components/ComboboxTrigger/ComboboxTriggerChip/ComboboxTriggerChip.d.ts +1 -1
- package/dist/Combobox/hooks/useComboboxAccessibility.d.ts +1 -1
- package/dist/Combobox/hooks/useComboboxContent.d.ts +8 -4
- package/dist/Combobox/hooks/useComboboxValidation.d.ts +7 -0
- package/dist/Combobox/index.d.ts +2 -2
- package/dist/Combobox/index.js +112 -53
- package/dist/ConfirmationModal/index.js +9 -9
- package/dist/{ConfirmationModal-92f07027.js → ConfirmationModal-285c3cbe.js} +2 -2
- package/dist/Content/Content.d.ts +1 -1
- package/dist/DataDump/index.js +6 -6
- package/dist/DataList/DataList.types.d.ts +9 -1
- package/dist/DataList/components/DataListSearch/DataListSearch.d.ts +1 -1
- package/dist/DataList/index.js +47 -24
- package/dist/DataTable/index.js +6 -6
- package/dist/DatePicker/index.js +3 -3
- package/dist/{DatePicker-39d2dc8b.js → DatePicker-49213434.js} +2 -2
- package/dist/DescriptionList/index.js +1 -1
- package/dist/Disclosure/index.js +1 -1
- package/dist/Drawer/index.js +4 -4
- package/dist/Emphasis/index.js +2 -2
- package/dist/{Emphasis-cc3456ac.js → Emphasis-e10dde65.js} +1 -1
- package/dist/FeatureSwitch/index.js +7 -7
- package/dist/Flex/Flex.d.ts +32 -0
- package/dist/Flex/Flex.types.d.ts +6 -0
- package/dist/Flex/index.d.ts +1 -0
- package/dist/Flex/index.js +40 -0
- package/dist/FormField/index.js +5 -5
- package/dist/{FormField-bef41ec9.js → FormField-fa9254dc.js} +3 -3
- package/dist/FormatFile/index.js +10 -10
- package/dist/{FormatFile-a470c0f2.js → FormatFile-6423c3b5.js} +4 -4
- package/dist/Gallery/index.js +11 -11
- package/dist/Heading/index.js +2 -2
- package/dist/{Heading-4562900a.js → Heading-4cde9989.js} +1 -1
- package/dist/InlineLabel/index.js +2 -2
- package/dist/{InlineLabel-3d461632.js → InlineLabel-a24706c4.js} +1 -1
- package/dist/InputAvatar/index.js +3 -3
- package/dist/InputDate/index.js +6 -6
- package/dist/InputEmail/index.js +5 -5
- package/dist/InputFile/index.js +3 -3
- package/dist/{InputFile-d327dee3.js → InputFile-25c3369b.js} +2 -2
- package/dist/InputNumber/index.js +6 -6
- package/dist/{InputNumber-5640fb55.js → InputNumber-ea9fcee1.js} +1 -1
- package/dist/InputPassword/index.js +5 -5
- package/dist/InputPhoneNumber/index.js +5 -5
- package/dist/InputText/index.js +6 -6
- package/dist/{InputText-5ac5cfe0.js → InputText-ab237501.js} +1 -1
- package/dist/InputTime/index.js +5 -5
- package/dist/InputValidation/index.js +3 -3
- package/dist/{InputValidation-4e809bdd.js → InputValidation-377d6c62.js} +1 -1
- package/dist/LightBox/index.js +4 -4
- package/dist/{LightBox-02ca409e.js → LightBox-93ef99b9.js} +2 -2
- package/dist/List/index.js +5 -5
- package/dist/Markdown/index.js +5 -5
- package/dist/{Markdown-b37cf9ec.js → Markdown-d53b01bf.js} +3 -3
- package/dist/Menu/index.js +3 -3
- package/dist/{Menu-cec53b50.js → Menu-2e64307a.js} +2 -2
- package/dist/Modal/index.js +5 -5
- package/dist/{Modal-dcdc0032.js → Modal-c17cc105.js} +3 -3
- package/dist/MultiSelect/index.js +3 -3
- package/dist/{Option-9f4a65da.js → Option-07a24acd.js} +1 -1
- package/dist/Page/index.js +7 -7
- package/dist/Popover/index.js +4 -4
- package/dist/{Popover-d401fb54.js → Popover-7c966790.js} +1 -1
- package/dist/RadioGroup/index.js +3 -3
- package/dist/{RadioGroup-46833fac.js → RadioGroup-9bdd8a59.js} +1 -1
- package/dist/RecurringSelect/index.js +8 -8
- package/dist/Select/index.js +6 -6
- package/dist/StatusLabel/index.js +2 -2
- package/dist/Switch/index.js +2 -2
- package/dist/{Switch-165f01e3.js → Switch-cc9b645c.js} +1 -1
- package/dist/Tabs/index.js +1 -1
- package/dist/Text/index.js +2 -2
- package/dist/{Text-59bde58c.js → Text-54334431.js} +1 -1
- package/dist/Toast/index.js +2 -2
- package/dist/Tooltip/index.js +1 -3
- package/dist/{Tooltip-59dbab5b.js → Tooltip-ae33a335.js} +5 -7
- package/dist/Typography/index.js +1 -1
- package/dist/{Typography-9bff9c91.js → Typography-83915c54.js} +2 -2
- package/package.json +6 -6
- package/rollup.config.js +1 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxList.d.ts +0 -14
- package/dist/Combobox/components/ComboboxContent/ComboboxSearch.d.ts +0 -7
package/dist/Chips/index.js
CHANGED
|
@@ -2,37 +2,141 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var Chips = require('../Chips-5ff2b9d2.js');
|
|
5
6
|
var React = require('react');
|
|
6
|
-
var
|
|
7
|
-
require('
|
|
7
|
+
var useAssert = require('@jobber/hooks/useAssert');
|
|
8
|
+
var classnames = require('classnames');
|
|
9
|
+
var Icon = require('../Icon-405a216c.js');
|
|
10
|
+
var Avatar = require('../Avatar-1aa30ee1.js');
|
|
11
|
+
var Typography = require('../Typography-83915c54.js');
|
|
12
|
+
var Tooltip = require('../Tooltip-ae33a335.js');
|
|
8
13
|
require('../style-inject.es-9d2f5f4e.js');
|
|
9
|
-
require('
|
|
10
|
-
require('@jobber/hooks/useAssert');
|
|
11
|
-
require('../Icon-405a216c.js');
|
|
12
|
-
require('@jobber/design');
|
|
13
|
-
require('../Avatar-1aa30ee1.js');
|
|
14
|
-
require('color');
|
|
15
|
-
require('../Typography-9bff9c91.js');
|
|
16
|
-
require('../Tooltip-59dbab5b.js');
|
|
17
|
-
require('react-dom');
|
|
18
|
-
require('framer-motion');
|
|
19
|
-
require('react-popper');
|
|
20
|
-
require('../Text-59bde58c.js');
|
|
14
|
+
require('../Chip-00e281e9.js');
|
|
21
15
|
require('lodash/sortBy');
|
|
22
16
|
require('@jobber/hooks/useLiveAnnounce');
|
|
17
|
+
require('uuid');
|
|
23
18
|
require('lodash/debounce');
|
|
24
|
-
require('
|
|
19
|
+
require('react-popper');
|
|
20
|
+
require('../Text-54334431.js');
|
|
21
|
+
require('../Button-db6114a6.js');
|
|
25
22
|
require('react-router-dom');
|
|
26
23
|
require('../Spinner-9d8fc7ff.js');
|
|
24
|
+
require('@jobber/design');
|
|
25
|
+
require('color');
|
|
26
|
+
require('react-dom');
|
|
27
|
+
require('framer-motion');
|
|
27
28
|
|
|
28
29
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
29
30
|
|
|
30
31
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
32
|
+
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
33
|
+
|
|
34
|
+
// Only need the component to pass in the data as a react children
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
36
|
+
function Chip(props) {
|
|
37
|
+
// Throw error when <Chip /> gets used outside of the <Chips />
|
|
38
|
+
useAssert.useAssert(true, "`<Chip>` component can only be used inside `<Chips>`");
|
|
39
|
+
// eslint-disable-next-line react/jsx-no-useless-fragment
|
|
40
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function InternalChipButton({ icon, invalid, disabled, label, onClick, }) {
|
|
44
|
+
const buttonRef = React.useRef();
|
|
45
|
+
return (React__default["default"].createElement("div", { ref: buttonRef, className: Chips.styles.button, tabIndex: 0, onKeyUp: handleKeyUp, onKeyDown: handleKeyDown, onClick: handleClick, role: "button", "aria-label": `Remove ${label}`, "aria-hidden": true, "aria-disabled": disabled, "data-testid": "remove-chip-button" },
|
|
46
|
+
React__default["default"].createElement(Icon.Icon, { name: icon, color: getColor() })));
|
|
47
|
+
function handleKeyUp(event) {
|
|
48
|
+
if (document.activeElement === buttonRef.current &&
|
|
49
|
+
(event.key === " " || event.key === "Enter")) {
|
|
50
|
+
event.stopPropagation();
|
|
51
|
+
buttonRef.current.click();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function handleKeyDown(event) {
|
|
55
|
+
if (document.activeElement === buttonRef.current && event.key === " ") {
|
|
56
|
+
// Don't scroll down
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function getColor() {
|
|
61
|
+
if (disabled)
|
|
62
|
+
return "disabled";
|
|
63
|
+
if (invalid)
|
|
64
|
+
return "critical";
|
|
65
|
+
return "greyBlue";
|
|
66
|
+
}
|
|
67
|
+
function handleClick(event) {
|
|
68
|
+
event.stopPropagation();
|
|
69
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function InternalChipAffix({ affix, active, invalid, disabled, }) {
|
|
74
|
+
assertProps();
|
|
75
|
+
if ((affix === null || affix === void 0 ? void 0 : affix.type) === Avatar.Avatar) {
|
|
76
|
+
return React__default["default"].createElement(Avatar.Avatar, Object.assign({}, affix.props, { size: "small" }));
|
|
77
|
+
}
|
|
78
|
+
if ((affix === null || affix === void 0 ? void 0 : affix.type) === Icon.Icon) {
|
|
79
|
+
return renderChipIcon(affix);
|
|
80
|
+
}
|
|
81
|
+
if ((affix === null || affix === void 0 ? void 0 : affix.type) === InternalChipButton) {
|
|
82
|
+
return React__default["default"].createElement(InternalChipButton, Object.assign({}, affix.props));
|
|
83
|
+
}
|
|
84
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
85
|
+
function renderChipIcon(icon) {
|
|
86
|
+
const color = getIconColor();
|
|
87
|
+
return (React__default["default"].createElement("div", { className: Chips.styles.icon }, React__default["default"].cloneElement(icon, Object.assign({ size: "base" }, (color && { color: color })))));
|
|
88
|
+
}
|
|
89
|
+
function getIconColor() {
|
|
90
|
+
if (disabled && !active)
|
|
91
|
+
return "disabled";
|
|
92
|
+
if (invalid && !disabled)
|
|
93
|
+
return "critical";
|
|
94
|
+
if (active)
|
|
95
|
+
return "white";
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
function assertProps() {
|
|
99
|
+
const isAvatar = (affix === null || affix === void 0 ? void 0 : affix.type) === Avatar.Avatar || false;
|
|
100
|
+
const isIcon = (affix === null || affix === void 0 ? void 0 : affix.type) === Icon.Icon || false;
|
|
101
|
+
const isChipButton = (affix === null || affix === void 0 ? void 0 : affix.type) === InternalChipButton || false;
|
|
102
|
+
useAssert.useAssert(!!affix && !(isAvatar || isIcon || isChipButton), `Prefix prop only accepts "<Avatar />" or "<Icon />" component. You have "${affix === null || affix === void 0 ? void 0 : affix.type}".`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function InternalChip({ label, active = false, disabled = false, invalid = false, prefix, suffix, tabIndex, ariaLabel, onClick, onKeyDown, }) {
|
|
107
|
+
const [truncateRef, setTruncateRef] = React.useState();
|
|
108
|
+
const isClickable = onClick && !disabled;
|
|
109
|
+
const classNames = classnames__default["default"](Chips.styles.chip, {
|
|
110
|
+
[Chips.styles.clickable]: isClickable,
|
|
111
|
+
[Chips.styles.active]: active,
|
|
112
|
+
[Chips.styles.disabled]: disabled,
|
|
113
|
+
[Chips.styles.invalid]: invalid,
|
|
114
|
+
[Chips.styles.hasPrefix]: prefix,
|
|
115
|
+
[Chips.styles.hasSuffix]: suffix,
|
|
116
|
+
});
|
|
117
|
+
const affixProps = { active, invalid, disabled };
|
|
118
|
+
const Tag = onClick ? "button" : "div";
|
|
119
|
+
const chip = (React__default["default"].createElement(Tag, Object.assign({ className: classNames }, (isClickable && { onClick, disabled }), { onKeyDown: onKeyDown, "data-testid": "chip-wrapper", "aria-label": ariaLabel, tabIndex: tabIndex, role: tabIndex !== undefined ? "option" : undefined }),
|
|
120
|
+
React__default["default"].createElement(InternalChipAffix, Object.assign({ affix: prefix }, affixProps)),
|
|
121
|
+
React__default["default"].createElement(Typography.Typography, { element: "span", numberOfLines: 1, size: "base" },
|
|
122
|
+
React__default["default"].createElement("span", { ref: setTruncateRef }, label)),
|
|
123
|
+
React__default["default"].createElement(InternalChipAffix, Object.assign({ affix: suffix }, affixProps))));
|
|
124
|
+
return isTruncated() ? React__default["default"].createElement(Tooltip.Tooltip, { message: label }, chip) : chip;
|
|
125
|
+
function isTruncated() {
|
|
126
|
+
var _a;
|
|
127
|
+
const truncateParentHeight = ((_a = truncateRef === null || truncateRef === void 0 ? void 0 : truncateRef.parentElement) === null || _a === void 0 ? void 0 : _a.offsetHeight) || 0;
|
|
128
|
+
const truncateChildHeight = (truncateRef === null || truncateRef === void 0 ? void 0 : truncateRef.offsetHeight) || 0;
|
|
129
|
+
return truncateChildHeight >= truncateParentHeight * 2;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
31
132
|
|
|
32
133
|
function ChipDismissible({ label, disabled, invalid, prefix, onClick, onRequestRemove, }) {
|
|
33
|
-
return (React__default["default"].createElement(
|
|
134
|
+
return (React__default["default"].createElement(InternalChip, { label: label, disabled: disabled, invalid: invalid, prefix: prefix, onClick: onClick, suffix: React__default["default"].createElement(InternalChipButton, { icon: "remove", label: label, invalid: invalid, disabled: disabled, onClick: onRequestRemove }) }));
|
|
34
135
|
}
|
|
35
136
|
|
|
36
|
-
exports.
|
|
37
|
-
exports.
|
|
137
|
+
exports.Chips = Chips.Chips;
|
|
138
|
+
exports.InternalChipDismissible = Chips.InternalChipDismissible;
|
|
139
|
+
exports.InternalChipMultiSelect = Chips.InternalChipMultiSelect;
|
|
140
|
+
exports.InternalChipSingleSelect = Chips.InternalChipSingleSelect;
|
|
141
|
+
exports.Chip = Chip;
|
|
38
142
|
exports.ChipDismissible = ChipDismissible;
|
|
@@ -1,131 +1,39 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
|
-
var uuid = require('uuid');
|
|
5
4
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
6
|
-
var
|
|
7
|
-
var useAssert = require('@jobber/hooks/useAssert');
|
|
5
|
+
var Chip = require('./Chip-00e281e9.js');
|
|
8
6
|
var Icon = require('./Icon-405a216c.js');
|
|
9
|
-
var Avatar = require('./Avatar-1aa30ee1.js');
|
|
10
|
-
var Typography = require('./Typography-9bff9c91.js');
|
|
11
|
-
var Tooltip = require('./Tooltip-59dbab5b.js');
|
|
12
7
|
var sortBy = require('lodash/sortBy');
|
|
13
8
|
var useLiveAnnounce = require('@jobber/hooks/useLiveAnnounce');
|
|
9
|
+
var uuid = require('uuid');
|
|
14
10
|
var debounce = require('lodash/debounce');
|
|
15
11
|
var reactPopper = require('react-popper');
|
|
16
|
-
var
|
|
17
|
-
var
|
|
12
|
+
var classnames = require('classnames');
|
|
13
|
+
var Text = require('./Text-54334431.js');
|
|
14
|
+
var Button = require('./Button-db6114a6.js');
|
|
18
15
|
var Spinner = require('./Spinner-9d8fc7ff.js');
|
|
19
16
|
|
|
20
17
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
21
18
|
|
|
22
19
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
23
|
-
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
24
20
|
var sortBy__default = /*#__PURE__*/_interopDefaultLegacy(sortBy);
|
|
25
21
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
22
|
+
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
26
23
|
|
|
27
24
|
var css_248z$1 = "/**\n * Used in the wrapping chips component:\n * - InternalChipSingleSelect\n * - InternalChipMultiSelect\n */\n\n.zn6onyiQVmA- {\n display: -ms-flexbox;\n display: flex;\n gap: calc(16px / 2);\n gap: var(--space-small);\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.PEnZzMEgbhU- {\n display: inline-grid;\n position: relative;\n max-width: 100%;\n box-sizing: border-box;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border: calc(16px / 16) solid rgb(225, 225, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n color: rgba(101, 120, 132, 1);\n color: var(--color-text--secondary);\n text-align: left;\n vertical-align: middle;\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n transition: 200ms ease-in-out;\n transition: var(--timing-base) ease-in-out;\n transition-property: background-color, box-shadow, color;\n grid-template-columns: -webkit-max-content;\n grid-template-columns: max-content;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n.dtysUhwYdG4-,\n.xGaMCAYsdwA- {\n padding: calc((16px / 4) + (16px / 8)) calc(16px / 2);\n padding: calc(calc(16px / 4) + calc(16px / 8)) calc(16px / 2);\n padding: calc(var(--space-smaller) + var(--space-smallest)) var(--space-small);\n}\n\n.dtysUhwYdG4- {\n grid-template-columns: -webkit-min-content 1fr;\n grid-template-columns: min-content 1fr;\n}\n\n.xGaMCAYsdwA- {\n grid-template-columns: 1fr -webkit-min-content;\n grid-template-columns: 1fr min-content;\n}\n\n.dtysUhwYdG4-.xGaMCAYsdwA- {\n grid-template-columns: -webkit-min-content 1fr -webkit-min-content;\n grid-template-columns: min-content 1fr min-content;\n}\n\n.SNT7gGV-h-o-,\n.W4D98cvEth4- ~ .PEnZzMEgbhU- {\n box-shadow: 0px calc(16px / 16) calc(16px / 4) 0px\n rgba(0, 0, 0, 0.1),\n 0px calc(16px / 4) 12px 0px rgba(0, 0, 0, 0.05);\n box-shadow: var(--shadow-base);\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n}\n\n/**\n * Interaction\n */\n\n.PEnZzMEgbhU-:focus,\n.W4D98cvEth4-:focus ~ .PEnZzMEgbhU- {\n box-shadow: 0px 0px calc(16px / 4) calc(16px / 8)\n rgb(231, 213, 87);\n box-shadow: var(--shadow-focus);\n outline: none;\n}\n\n.SNT7gGV-h-o-:hover,\n.W4D98cvEth4- ~ .PEnZzMEgbhU-:not(._0hEzaTXK9M0-):hover,\n.W4D98cvEth4-:focus ~ .PEnZzMEgbhU-:not(._0hEzaTXK9M0-) {\n background-color: rgb(250, 246, 219);\n background-color: var(--color-surface--hover);\n}\n\n/**\n * States\n */\n\n.PEnZzMEgbhU-._0hEzaTXK9M0- {\n border-color: rgb(1, 41, 57);\n border-color: var(--color-surface--reverse);\n color: rgba(255, 255, 255, 1);\n color: var(--color-text--reverse);\n background-color: rgb(1, 41, 57);\n background-color: var(--color-surface--reverse);\n}\n\n.PEnZzMEgbhU-.JApS2787BU8- {\n border-color: rgb(128, 25, 0);\n border-color: var(--color-critical--onSurface);\n color: rgb(128, 25, 0);\n color: var(--color-critical--onSurface);\n background-color: rgb(255, 226, 219);\n background-color: var(--color-critical--surface);\n}\n\n.PEnZzMEgbhU-.Kg0c8WVgMpg- {\n border-color: rgb(225, 225, 225);\n border-color: var(--color-disabled--secondary);\n color: rgb(181, 181, 181);\n color: var(--color-disabled);\n background-color: rgb(225, 225, 225);\n background-color: var(--color-disabled--secondary);\n}\n\n._0hEzaTXK9M0-.Kg0c8WVgMpg- {\n border-color: rgb(181, 181, 181);\n border-color: var(--color-disabled);\n color: rgba(255, 255, 255, 1);\n color: var(--color-white);\n background-color: rgb(181, 181, 181);\n background-color: var(--color-disabled);\n}\n\n.JApS2787BU8-.Kg0c8WVgMpg- {\n border-color: rgb(201, 66, 33);\n border-color: var(--color-critical);\n}\n\n/**\n * Input checkbox/radio\n *\n * Hide checkbox on UI but not screen readers and still allow focus state\n */\n\n.W4D98cvEth4- {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(100%);\n clip-path: inset(100%);\n white-space: nowrap;\n}\n\n/**\n * Button\n */\n\n._0-ZWexS4Gfg- {\n display: -ms-flexbox;\n display: flex;\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n cursor: pointer;\n transition: background-color 200ms ease;\n}\n\n._0-ZWexS4Gfg-:hover,\n._0-ZWexS4Gfg-:focus {\n background-color: rgb(250, 246, 219);\n background-color: var(--color-surface--hover);\n}\n\n._0-ZWexS4Gfg-:focus,\n.SNT7gGV-h-o- ._0-ZWexS4Gfg-:hover {\n box-shadow: 0px 0px calc(16px / 4) calc(16px / 8)\n rgb(231, 213, 87);\n box-shadow: var(--shadow-focus);\n outline: none;\n}\n\n/**\n * Override icon default colors.\n *\n * NOTE: This is a workaround since some icons have default colors that we don't\n * want to override until the component color prop overrides it.\n * DO NOT COPY!\n */\n\n.DQPnZP4UZpw- > svg {\n fill: rgba(101, 120, 132, 1);\n fill: var(--color-interactive--subtle);\n}\n\n.DQPnZP4UZpw- {\n display: -ms-flexbox;\n display: flex;\n}\n";
|
|
28
25
|
var styles$1 = {"wrapper":"zn6onyiQVmA-","chip":"PEnZzMEgbhU-","hasPrefix":"dtysUhwYdG4-","hasSuffix":"xGaMCAYsdwA-","clickable":"SNT7gGV-h-o-","input":"W4D98cvEth4-","active":"_0hEzaTXK9M0-","invalid":"JApS2787BU8-","disabled":"Kg0c8WVgMpg-","button":"_0-ZWexS4Gfg-","icon":"DQPnZP4UZpw-"};
|
|
29
26
|
styleInject_es.styleInject(css_248z$1);
|
|
30
27
|
|
|
31
|
-
function
|
|
32
|
-
const buttonRef = React.useRef();
|
|
33
|
-
return (React__default["default"].createElement("div", { ref: buttonRef, className: styles$1.button, tabIndex: 0, onKeyUp: handleKeyUp, onKeyDown: handleKeyDown, onClick: handleClick, role: "button", "aria-label": `Remove ${label}`, "aria-hidden": true, "aria-disabled": disabled, "data-testid": "remove-chip-button" },
|
|
34
|
-
React__default["default"].createElement(Icon.Icon, { name: icon, color: getColor() })));
|
|
35
|
-
function handleKeyUp(event) {
|
|
36
|
-
if (document.activeElement === buttonRef.current &&
|
|
37
|
-
(event.key === " " || event.key === "Enter")) {
|
|
38
|
-
event.stopPropagation();
|
|
39
|
-
buttonRef.current.click();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function handleKeyDown(event) {
|
|
43
|
-
if (document.activeElement === buttonRef.current && event.key === " ") {
|
|
44
|
-
// Don't scroll down
|
|
45
|
-
event.preventDefault();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
function getColor() {
|
|
49
|
-
if (disabled)
|
|
50
|
-
return "disabled";
|
|
51
|
-
if (invalid)
|
|
52
|
-
return "critical";
|
|
53
|
-
return "greyBlue";
|
|
54
|
-
}
|
|
55
|
-
function handleClick(event) {
|
|
56
|
-
event.stopPropagation();
|
|
57
|
-
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function InternalChipAffix({ affix, active, invalid, disabled, }) {
|
|
62
|
-
assertProps();
|
|
63
|
-
if ((affix === null || affix === void 0 ? void 0 : affix.type) === Avatar.Avatar) {
|
|
64
|
-
return React__default["default"].createElement(Avatar.Avatar, Object.assign({}, affix.props, { size: "small" }));
|
|
65
|
-
}
|
|
66
|
-
if ((affix === null || affix === void 0 ? void 0 : affix.type) === Icon.Icon) {
|
|
67
|
-
return renderChipIcon(affix);
|
|
68
|
-
}
|
|
69
|
-
if ((affix === null || affix === void 0 ? void 0 : affix.type) === InternalChipButton) {
|
|
70
|
-
return React__default["default"].createElement(InternalChipButton, Object.assign({}, affix.props));
|
|
71
|
-
}
|
|
72
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
73
|
-
function renderChipIcon(icon) {
|
|
74
|
-
const color = getIconColor();
|
|
75
|
-
return (React__default["default"].createElement("div", { className: styles$1.icon }, React__default["default"].cloneElement(icon, Object.assign({ size: "base" }, (color && { color: color })))));
|
|
76
|
-
}
|
|
77
|
-
function getIconColor() {
|
|
78
|
-
if (disabled && !active)
|
|
79
|
-
return "disabled";
|
|
80
|
-
if (invalid && !disabled)
|
|
81
|
-
return "critical";
|
|
82
|
-
if (active)
|
|
83
|
-
return "white";
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
function assertProps() {
|
|
87
|
-
const isAvatar = (affix === null || affix === void 0 ? void 0 : affix.type) === Avatar.Avatar || false;
|
|
88
|
-
const isIcon = (affix === null || affix === void 0 ? void 0 : affix.type) === Icon.Icon || false;
|
|
89
|
-
const isChipButton = (affix === null || affix === void 0 ? void 0 : affix.type) === InternalChipButton || false;
|
|
90
|
-
useAssert.useAssert(!!affix && !(isAvatar || isIcon || isChipButton), `Prefix prop only accepts "<Avatar />" or "<Icon />" component. You have "${affix === null || affix === void 0 ? void 0 : affix.type}".`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function InternalChip({ label, active = false, disabled = false, invalid = false, prefix, suffix, tabIndex, ariaLabel, onClick, onKeyDown, }) {
|
|
95
|
-
const [truncateRef, setTruncateRef] = React.useState();
|
|
96
|
-
const isClickable = onClick && !disabled;
|
|
97
|
-
const classNames = classnames__default["default"](styles$1.chip, {
|
|
98
|
-
[styles$1.clickable]: isClickable,
|
|
99
|
-
[styles$1.active]: active,
|
|
100
|
-
[styles$1.disabled]: disabled,
|
|
101
|
-
[styles$1.invalid]: invalid,
|
|
102
|
-
[styles$1.hasPrefix]: prefix,
|
|
103
|
-
[styles$1.hasSuffix]: suffix,
|
|
104
|
-
});
|
|
105
|
-
const affixProps = { active, invalid, disabled };
|
|
106
|
-
const Tag = onClick ? "button" : "div";
|
|
107
|
-
const chip = (React__default["default"].createElement(Tag, Object.assign({ className: classNames }, (isClickable && { onClick, disabled }), { onKeyDown: onKeyDown, "data-testid": "chip-wrapper", "aria-label": ariaLabel, tabIndex: tabIndex, role: tabIndex !== undefined ? "option" : undefined }),
|
|
108
|
-
React__default["default"].createElement(InternalChipAffix, Object.assign({ affix: prefix }, affixProps)),
|
|
109
|
-
React__default["default"].createElement(Typography.Typography, { element: "span", numberOfLines: 1, size: "base" },
|
|
110
|
-
React__default["default"].createElement("span", { ref: setTruncateRef }, label)),
|
|
111
|
-
React__default["default"].createElement(InternalChipAffix, Object.assign({ affix: suffix }, affixProps))));
|
|
112
|
-
return isTruncated() ? React__default["default"].createElement(Tooltip.Tooltip, { message: label }, chip) : chip;
|
|
113
|
-
function isTruncated() {
|
|
114
|
-
var _a;
|
|
115
|
-
const truncateParentHeight = ((_a = truncateRef === null || truncateRef === void 0 ? void 0 : truncateRef.parentElement) === null || _a === void 0 ? void 0 : _a.offsetHeight) || 0;
|
|
116
|
-
const truncateChildHeight = (truncateRef === null || truncateRef === void 0 ? void 0 : truncateRef.offsetHeight) || 0;
|
|
117
|
-
return truncateChildHeight >= truncateParentHeight * 2;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function InternalChipSingleSelect({ children, selected, name = uuid.v1(), onChange, onClick, }) {
|
|
28
|
+
function InternalChipSingleSelect({ children, selected, onChange, onClick, }) {
|
|
122
29
|
return (React__default["default"].createElement("div", { className: styles$1.wrapper, "data-testid": "singleselect-chips" }, React__default["default"].Children.map(children, child => {
|
|
123
|
-
const isSelected = child.props.value === selected;
|
|
30
|
+
const isSelected = (child === null || child === void 0 ? void 0 : child.props.value) === selected || (child === null || child === void 0 ? void 0 : child.props.label) === selected;
|
|
124
31
|
return (React__default["default"].createElement("label", null,
|
|
125
|
-
React__default["default"].createElement("input", { type: "radio", checked: isSelected, className: styles$1.input,
|
|
32
|
+
React__default["default"].createElement("input", { type: "radio", checked: isSelected, className: styles$1.input, onClick: handleClick((child === null || child === void 0 ? void 0 : child.props.value) || ""), onKeyUp: handleKeyUp(isSelected, (child === null || child === void 0 ? void 0 : child.props.value) || ""), onChange: () => {
|
|
126
33
|
/* No op. onClick handles the change to allow deselecting. */
|
|
127
|
-
}, disabled: child.props.disabled }),
|
|
128
|
-
React__default["default"].createElement(
|
|
34
|
+
}, disabled: child === null || child === void 0 ? void 0 : child.props.disabled }),
|
|
35
|
+
React__default["default"].createElement(Chip.Chip, { label: (child === null || child === void 0 ? void 0 : child.props.label) || "", role: "option", actAsFormElement: true },
|
|
36
|
+
React__default["default"].createElement(Chip.Chip.Suffix, null, isSelected && (React__default["default"].createElement(Icon.Icon, { name: "checkmark", size: "small", color: "heading" }))))));
|
|
129
37
|
})));
|
|
130
38
|
function handleKeyUp(active, value) {
|
|
131
39
|
if (!active)
|
|
@@ -151,46 +59,37 @@ function InternalChipSingleSelect({ children, selected, name = uuid.v1(), onChan
|
|
|
151
59
|
|
|
152
60
|
function InternalChipMultiSelect({ children, selected, onChange, onClick, }) {
|
|
153
61
|
return (React__default["default"].createElement("div", { className: styles$1.wrapper, "data-testid": "multiselect-chips" }, React__default["default"].Children.map(children, chip => {
|
|
154
|
-
const isChipActive =
|
|
62
|
+
const isChipActive = selected === null || selected === void 0 ? void 0 : selected.includes((chip === null || chip === void 0 ? void 0 : chip.props.value) || (chip === null || chip === void 0 ? void 0 : chip.props.label));
|
|
155
63
|
return (React__default["default"].createElement("label", null,
|
|
156
|
-
React__default["default"].createElement("input", { type: "checkbox", checked: isChipActive, className: styles$1.input, onClick: handleClick(chip.props.value), onChange: handleChange(chip.props.value), disabled: chip.props.disabled }),
|
|
157
|
-
React__default["default"].createElement(
|
|
64
|
+
React__default["default"].createElement("input", { type: "checkbox", checked: isChipActive, className: styles$1.input, onClick: chip && handleClick(chip.props.value), onChange: chip && handleChange(chip.props.value), disabled: chip === null || chip === void 0 ? void 0 : chip.props.disabled }),
|
|
65
|
+
chip && (React__default["default"].createElement(Chip.Chip, Object.assign({}, chip.props, { actAsFormElement: true }),
|
|
66
|
+
React__default["default"].createElement(Chip.Chip.Suffix, null, isChipActive && (React__default["default"].createElement(Icon.Icon, { name: "checkmark", size: "small", color: "heading" })))))));
|
|
67
|
+
function isChipSelected(value) {
|
|
68
|
+
return selected === null || selected === void 0 ? void 0 : selected.includes(value);
|
|
69
|
+
}
|
|
70
|
+
function handleClick(value) {
|
|
71
|
+
return (event) => onClick === null || onClick === void 0 ? void 0 : onClick(event, value);
|
|
72
|
+
}
|
|
73
|
+
function handleChange(value) {
|
|
74
|
+
return () => {
|
|
75
|
+
if (isChipSelected(value)) {
|
|
76
|
+
handleDeselect(value);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
handleSelect(value);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function handleSelect(value) {
|
|
84
|
+
const newVal = [...(selected || []), value];
|
|
85
|
+
onChange(newVal);
|
|
86
|
+
}
|
|
87
|
+
function handleDeselect(value) {
|
|
88
|
+
const values = selected;
|
|
89
|
+
const newVal = values === null || values === void 0 ? void 0 : values.filter(val => val !== value);
|
|
90
|
+
onChange(newVal || []);
|
|
91
|
+
}
|
|
158
92
|
})));
|
|
159
|
-
function isChipSelected(value) {
|
|
160
|
-
return selected.includes(value);
|
|
161
|
-
}
|
|
162
|
-
function handleClick(value) {
|
|
163
|
-
return (event) => onClick === null || onClick === void 0 ? void 0 : onClick(event, value);
|
|
164
|
-
}
|
|
165
|
-
function handleChange(value) {
|
|
166
|
-
return () => {
|
|
167
|
-
if (isChipSelected(value)) {
|
|
168
|
-
handleDeselect(value);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
handleSelect(value);
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
function handleSelect(value) {
|
|
176
|
-
const newVal = [...selected, value];
|
|
177
|
-
onChange(newVal);
|
|
178
|
-
}
|
|
179
|
-
function handleDeselect(value) {
|
|
180
|
-
const values = selected;
|
|
181
|
-
const newVal = values.filter(val => val !== value);
|
|
182
|
-
onChange(newVal);
|
|
183
|
-
}
|
|
184
|
-
function checkmarkIcon(show) {
|
|
185
|
-
// Ideally, we should be returning a fragment `<></>` when a function
|
|
186
|
-
// returns a component / element. However, this one needs to return nothing
|
|
187
|
-
// to prevent it from randomly rendering a suffix.
|
|
188
|
-
//
|
|
189
|
-
// DO NOT COPY!
|
|
190
|
-
if (!show)
|
|
191
|
-
return;
|
|
192
|
-
return React__default["default"].createElement(Icon.Icon, { name: "checkmark" });
|
|
193
|
-
}
|
|
194
93
|
}
|
|
195
94
|
|
|
196
95
|
var css_248z = ".sCNIjluCskc- {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n box-sizing: border-box;\n border: calc(16px / 16) solid transparent;\n border: var(--border-base) solid transparent;\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n transition: all 200ms;\n transition: all var(--timing-base);\n gap: calc(16px / 2);\n gap: var(--space-small);\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.MFUlz1WQLdk- {\n -ms-flex: 1;\n flex: 1;\n min-width: 120px;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n border: none;\n border-radius: 0;\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-size: calc(calc(16px * 1) * 0.875);\n font-size: var(--typography--fontSize-base);\n line-height: 1.25;\n line-height: var(--typography--lineHeight-base);\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.MFUlz1WQLdk-:focus {\n outline: none;\n}\n\n.V9eYJdjPAeY- {\n position: relative;\n z-index: 6;\n z-index: var(--elevation-menu);\n width: 100%;\n}\n\n.LdytkOeCU9c- {\n max-height: 320px;\n box-shadow: 0px calc(16px / 16) calc(16px / 4) 0px\n rgba(0, 0, 0, 0.1),\n 0px calc(16px / 4) 12px 0px rgba(0, 0, 0, 0.05);\n box-shadow: var(--shadow-base);\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n overflow-y: scroll;\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.y7Cz2u8BuNE-,\n._-7bmao8Q9As- {\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border: none;\n background-color: transparent;\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n.y7Cz2u8BuNE-:focus {\n box-shadow: 0px 0px calc(16px / 4) calc(16px / 8)\n rgb(231, 213, 87);\n box-shadow: var(--shadow-focus);\n}\n\n.y7Cz2u8BuNE-:focus,\n.iCwWdcmtInc- {\n outline: none;\n background-color: rgb(250, 246, 219);\n background-color: var(--color-surface--hover);\n}\n\n._-7bmao8Q9As- {\n -ms-flex-pack: center;\n justify-content: center;\n}\n";
|
|
@@ -199,19 +98,20 @@ styleInject_es.styleInject(css_248z);
|
|
|
199
98
|
|
|
200
99
|
function useInternalChipDismissible({ children, selected, onChange, onClick, onCustomAdd, }) {
|
|
201
100
|
const ref = React.useRef(null);
|
|
202
|
-
const chipOptions = children.map(chip => chip.props);
|
|
203
|
-
const visibleChipOptions = chipOptions.filter(chip => selected.includes(chip.value));
|
|
204
|
-
const sortedVisibleChipOptions = sortBy__default["default"](visibleChipOptions, chip => selected.indexOf(chip.value));
|
|
205
|
-
const availableChipOptions = chipOptions.filter(chip => !selected.includes(chip.value));
|
|
101
|
+
const chipOptions = children === null || children === void 0 ? void 0 : children.map(chip => chip.props);
|
|
102
|
+
const visibleChipOptions = chipOptions === null || chipOptions === void 0 ? void 0 : chipOptions.filter(chip => selected === null || selected === void 0 ? void 0 : selected.includes(chip.value));
|
|
103
|
+
const sortedVisibleChipOptions = sortBy__default["default"](visibleChipOptions, chip => selected === null || selected === void 0 ? void 0 : selected.indexOf(chip.value));
|
|
104
|
+
const availableChipOptions = chipOptions === null || chipOptions === void 0 ? void 0 : chipOptions.filter(chip => !(selected === null || selected === void 0 ? void 0 : selected.includes(chip.value)));
|
|
206
105
|
const { liveAnnounce } = useLiveAnnounce.useLiveAnnounce();
|
|
207
106
|
const actions = {
|
|
208
107
|
handleChipRemove: (value) => {
|
|
209
108
|
return () => {
|
|
210
109
|
liveAnnounce(`${value} Removed`);
|
|
211
|
-
onChange(selected.filter(val => val !== value));
|
|
110
|
+
onChange((selected === null || selected === void 0 ? void 0 : selected.filter(val => val !== value)) || []);
|
|
111
|
+
onClick && onClick({}, value);
|
|
212
112
|
};
|
|
213
113
|
},
|
|
214
|
-
handleChipAdd: (value) => onChange([...selected, value]),
|
|
114
|
+
handleChipAdd: (value) => onChange([...(selected || []), value]),
|
|
215
115
|
handleCustomAdd: onCustomAdd,
|
|
216
116
|
handleChipClick: (value) => {
|
|
217
117
|
if (onClick === undefined)
|
|
@@ -268,7 +168,7 @@ function useInternalChipDismissibleInput({ options, isLoadingMore = false, onCus
|
|
|
268
168
|
const [shouldCancelBlur, setShouldCancelBlur] = React.useState(false);
|
|
269
169
|
const [shouldCancelEnter, setShouldCancelEnter] = React.useState(false);
|
|
270
170
|
const canAddCustomOption = onCustomOptionSelect !== undefined && !isLoadingMore;
|
|
271
|
-
const maxOptionIndex = allOptions.length - 1;
|
|
171
|
+
const maxOptionIndex = (allOptions === null || allOptions === void 0 ? void 0 : allOptions.length) - 1;
|
|
272
172
|
const { liveAnnounce } = useLiveAnnounce.useLiveAnnounce();
|
|
273
173
|
React.useEffect(() => {
|
|
274
174
|
setAllOptions(generateOptions(options, searchValue, canAddCustomOption));
|
|
@@ -276,8 +176,8 @@ function useInternalChipDismissibleInput({ options, isLoadingMore = false, onCus
|
|
|
276
176
|
const computed = {
|
|
277
177
|
menuId,
|
|
278
178
|
inputRef: React.useRef(null),
|
|
279
|
-
activeOption: allOptions[activeIndex],
|
|
280
|
-
hasAvailableOptions: allOptions.length > 0,
|
|
179
|
+
activeOption: allOptions === null || allOptions === void 0 ? void 0 : allOptions[activeIndex],
|
|
180
|
+
hasAvailableOptions: (allOptions === null || allOptions === void 0 ? void 0 : allOptions.length) > 0,
|
|
281
181
|
nextOptionIndex: activeIndex < maxOptionIndex ? activeIndex + 1 : 0,
|
|
282
182
|
previousOptionIndex: activeIndex > 0 ? activeIndex - 1 : maxOptionIndex,
|
|
283
183
|
};
|
|
@@ -365,16 +265,14 @@ function useInternalChipDismissibleInput({ options, isLoadingMore = false, onCus
|
|
|
365
265
|
shouldCancelBlur });
|
|
366
266
|
}
|
|
367
267
|
function generateOptions(options, searchValue, canAddCustomOption) {
|
|
368
|
-
const allOptions = options
|
|
369
|
-
.filter(option => option.label.toLowerCase().match(searchValue.trim().toLowerCase()))
|
|
370
|
-
.map(opt => (Object.assign(Object.assign({}, opt), { custom: false })));
|
|
268
|
+
const allOptions = options === null || options === void 0 ? void 0 : options.filter(option => option.label.toLowerCase().match(searchValue.trim().toLowerCase())).map(opt => (Object.assign(Object.assign({}, opt), { custom: false })));
|
|
371
269
|
const { shouldAddCustomOption, customOption } = generateCustomOption(allOptions, searchValue, canAddCustomOption);
|
|
372
270
|
shouldAddCustomOption && allOptions.push(customOption);
|
|
373
271
|
return allOptions;
|
|
374
272
|
}
|
|
375
273
|
function generateCustomOption(options, searchValue, canAddCustomOption) {
|
|
376
274
|
function shouldAddCustomOption() {
|
|
377
|
-
const isMatchingOption = options.some(option => option.label.toLowerCase() === searchValue.trim().toLowerCase());
|
|
275
|
+
const isMatchingOption = options === null || options === void 0 ? void 0 : options.some(option => option.label.toLowerCase() === searchValue.trim().toLowerCase());
|
|
378
276
|
return !!searchValue && !isMatchingOption;
|
|
379
277
|
}
|
|
380
278
|
return {
|
|
@@ -472,7 +370,7 @@ function InternalChipDismissibleInput(props) {
|
|
|
472
370
|
React__default["default"].createElement("input", { ref: inputRef, className: styles.input, type: "text", role: "combobox", "aria-label": "Press up and down arrow to cycle through the options or type to narrow down the results", "aria-autocomplete": "list", "aria-owns": menuId, "aria-expanded": hasAvailableOptions, "aria-activedescendant": generateDescendantId(activeIndex), value: searchValue, onChange: handleSearchChange, onKeyDown: handleKeyDown, onBlur: debounce__default["default"](handleBlur, 200), onFocus: handleOpenMenu, autoFocus: true }),
|
|
473
371
|
(hasAvailableOptions || isLoadingMore) && (React__default["default"].createElement("div", Object.assign({ ref: setPositionedElementRef, className: styles.menu, style: popperStyles.popper }, attributes.popper),
|
|
474
372
|
React__default["default"].createElement("div", { ref: menuRef, role: "listbox", id: menuId, className: styles.menuList, "data-testid": "chip-menu" },
|
|
475
|
-
allOptions.map((option, i) => (React__default["default"].createElement("button", { key: option.value, role: "option", id: generateDescendantId(i), className: classnames__default["default"](styles.menuListOption, {
|
|
373
|
+
allOptions.map((option, i) => (React__default["default"].createElement("button", { key: option.value, role: "option", type: "button", id: generateDescendantId(i), className: classnames__default["default"](styles.menuListOption, {
|
|
476
374
|
[styles.activeOption]: activeIndex === i,
|
|
477
375
|
}), onClick: () => handleSelectOption(option), onMouseEnter: handleSetActiveOnMouseOver(i), onMouseDown: handleCancelBlur, onMouseUp: handleEnableBlur },
|
|
478
376
|
React__default["default"].createElement("span", { "aria-hidden": true }, option.prefix),
|
|
@@ -485,8 +383,10 @@ function InternalChipDismissibleInput(props) {
|
|
|
485
383
|
function InternalChipDismissible(props) {
|
|
486
384
|
const { availableChipOptions, ref: wrapperRef, sortedVisibleChipOptions, handleChipAdd, handleChipClick, handleChipKeyDown, handleChipRemove, handleCustomAdd, handleWrapperKeyDown, } = useInternalChipDismissible(props);
|
|
487
385
|
return (React__default["default"].createElement("div", { ref: wrapperRef, className: styles.wrapper, "data-testid": "dismissible-chips", onKeyDown: handleWrapperKeyDown, role: "listbox" },
|
|
488
|
-
sortedVisibleChipOptions.map(chip => (React__default["default"].createElement(
|
|
489
|
-
|
|
386
|
+
sortedVisibleChipOptions.map(chip => (React__default["default"].createElement(Chip.Chip, Object.assign({ key: chip.value }, chip, { onClick: (inVal, ev) => { var _a; return (_a = handleChipClick(inVal)) === null || _a === void 0 ? void 0 : _a(ev); }, value: chip.label, role: "radio", "data-testid": props.dataTestId || "remove-chip-button", ariaLabel: `${chip.label}. Press delete or backspace to remove ${chip.label}`, tabIndex: 0 }),
|
|
387
|
+
React__default["default"].createElement(Chip.Chip.Suffix, { onKeyDown: (ev) => handleChipKeyDown(chip.value)(ev), onClick: handleChipRemove(chip.value) },
|
|
388
|
+
React__default["default"].createElement(Icon.Icon, { name: "cross", size: "small" }))))),
|
|
389
|
+
React__default["default"].createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo: wrapperRef, isLoadingMore: props.isLoadingMore, options: availableChipOptions || [], onOptionSelect: handleChipAdd, onCustomOptionSelect: handleCustomAdd, onSearch: props.onSearch, onLoadMore: props.onLoadMore })));
|
|
490
390
|
}
|
|
491
391
|
|
|
492
392
|
function Chips(props) {
|
|
@@ -500,15 +400,8 @@ function Chips(props) {
|
|
|
500
400
|
}
|
|
501
401
|
}
|
|
502
402
|
|
|
503
|
-
// Only need the component to pass in the data as a react children
|
|
504
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
505
|
-
function Chip(props) {
|
|
506
|
-
// Throw error when <Chip /> gets used outside of the <Chips />
|
|
507
|
-
useAssert.useAssert(true, "`<Chip>` component can only be used inside `<Chips>`");
|
|
508
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
exports.Chip = Chip;
|
|
512
403
|
exports.Chips = Chips;
|
|
513
|
-
exports.
|
|
514
|
-
exports.
|
|
404
|
+
exports.InternalChipDismissible = InternalChipDismissible;
|
|
405
|
+
exports.InternalChipMultiSelect = InternalChipMultiSelect;
|
|
406
|
+
exports.InternalChipSingleSelect = InternalChipSingleSelect;
|
|
407
|
+
exports.styles = styles$1;
|
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ComboboxProps } from "@jobber/components/Combobox/Combobox.types";
|
|
2
2
|
import { ComboboxContent } from "./components/ComboboxContent";
|
|
3
3
|
import { ComboboxAction } from "./components/ComboboxAction";
|
|
4
4
|
import { ComboboxTriggerButton, ComboboxTriggerChip } from "./components/ComboboxTrigger";
|
|
5
|
-
export interface ComboboxProps {
|
|
6
|
-
readonly children: ReactElement | ReactElement[];
|
|
7
|
-
/**
|
|
8
|
-
* When `true`, `Combobox` will allow for multiple selections
|
|
9
|
-
*
|
|
10
|
-
* @default false
|
|
11
|
-
*/
|
|
12
|
-
readonly multiSelect?: boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare const COMBOBOX_TRIGGER_COUNT_ERROR_MESSAGE = "Combobox can only have one Trigger element";
|
|
15
|
-
export declare const COMBOBOX_REQUIRED_CHILDREN_ERROR_MESSAGE = "Combobox must have a Trigger and Combobox.Content element";
|
|
16
5
|
export declare const Combobox: {
|
|
17
6
|
(props: ComboboxProps): JSX.Element;
|
|
18
7
|
TriggerButton: typeof ComboboxTriggerButton;
|