@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.
Files changed (128) hide show
  1. package/Chip.d.ts +1 -0
  2. package/Chip.js +17 -0
  3. package/Flex.d.ts +1 -0
  4. package/Flex.js +17 -0
  5. package/dist/Autocomplete/index.js +7 -7
  6. package/dist/Avatar/Avatar.d.ts +1 -1
  7. package/dist/Avatar/index.d.ts +1 -1
  8. package/dist/Banner/index.js +3 -3
  9. package/dist/Button/index.js +2 -2
  10. package/dist/{Button-d89f2271.js → Button-db6114a6.js} +1 -1
  11. package/dist/ButtonDismiss/index.js +3 -3
  12. package/dist/{ButtonDismiss-250840a4.js → ButtonDismiss-1ccb84ec.js} +1 -1
  13. package/dist/Card/index.js +5 -5
  14. package/dist/{Card-69304e99.js → Card-116af709.js} +3 -3
  15. package/dist/Checkbox/index.js +3 -3
  16. package/dist/{Checkbox-eac63b7f.js → Checkbox-bc4bc968.js} +1 -1
  17. package/dist/Chip/Chip.d.ts +8 -0
  18. package/dist/Chip/Chip.types.d.d.ts +68 -0
  19. package/dist/Chip/components/ChipDismissible/ChipDismissible.d.ts +3 -0
  20. package/dist/Chip/components/ChipPrefix/Chip.Prefix.d.ts +6 -0
  21. package/dist/Chip/components/ChipSelectable/ChipSelectable.d.ts +3 -0
  22. package/dist/Chip/components/ChipSuffix/Chip.Suffix.d.ts +10 -0
  23. package/dist/Chip/hooks/index.d.ts +1 -0
  24. package/dist/Chip/hooks/useChildComponent.d.ts +8 -0
  25. package/dist/Chip/index.d.ts +4 -0
  26. package/dist/Chip/index.js +35 -0
  27. package/dist/Chip-00e281e9.js +73 -0
  28. package/dist/Chips/ChipsTypes.d.ts +10 -6
  29. package/dist/Chips/InternalChipDismissible/InternalChipDismissibleTypes.d.ts +1 -1
  30. package/dist/Chips/InternalChipDismissible/hooks/useInternalChipDismissible.d.ts +1 -1
  31. package/dist/Chips/InternalChipSingleSelect.d.ts +1 -1
  32. package/dist/Chips/index.d.ts +5 -1
  33. package/dist/Chips/index.js +122 -18
  34. package/dist/{Chip-4d8e6370.js → Chips-5ff2b9d2.js} +62 -169
  35. package/dist/Combobox/Combobox.d.ts +1 -12
  36. package/dist/Combobox/Combobox.types.d.ts +142 -0
  37. package/dist/Combobox/components/ComboboxAction/ComboboxAction.d.ts +2 -11
  38. package/dist/Combobox/components/ComboboxAction/index.d.ts +1 -1
  39. package/dist/Combobox/components/ComboboxContent/ComboboxContent.d.ts +2 -32
  40. package/dist/Combobox/components/ComboboxContent/ComboboxContentHeader/ComboboxContentHeader.d.ts +3 -0
  41. package/dist/Combobox/components/ComboboxContent/ComboboxContentHeader/index.d.ts +1 -0
  42. package/dist/Combobox/components/ComboboxContent/ComboboxContentList/ComboboxContentList.d.ts +3 -0
  43. package/dist/Combobox/components/ComboboxContent/ComboboxContentList/index.d.ts +1 -0
  44. package/dist/Combobox/components/ComboboxContent/ComboboxContentSearch/ComboboxContentSearch.d.ts +3 -0
  45. package/dist/Combobox/components/ComboboxContent/ComboboxContentSearch/index.d.ts +1 -0
  46. package/dist/Combobox/components/ComboboxTrigger/ComboboxTriggerButton/ComboboxTriggerButton.d.ts +1 -1
  47. package/dist/Combobox/components/ComboboxTrigger/ComboboxTriggerChip/ComboboxTriggerChip.d.ts +1 -1
  48. package/dist/Combobox/hooks/useComboboxAccessibility.d.ts +1 -1
  49. package/dist/Combobox/hooks/useComboboxContent.d.ts +8 -4
  50. package/dist/Combobox/hooks/useComboboxValidation.d.ts +7 -0
  51. package/dist/Combobox/index.d.ts +2 -2
  52. package/dist/Combobox/index.js +112 -53
  53. package/dist/ConfirmationModal/index.js +9 -9
  54. package/dist/{ConfirmationModal-92f07027.js → ConfirmationModal-285c3cbe.js} +2 -2
  55. package/dist/Content/Content.d.ts +1 -1
  56. package/dist/DataDump/index.js +6 -6
  57. package/dist/DataList/DataList.types.d.ts +9 -1
  58. package/dist/DataList/components/DataListSearch/DataListSearch.d.ts +1 -1
  59. package/dist/DataList/index.js +47 -24
  60. package/dist/DataTable/index.js +6 -6
  61. package/dist/DatePicker/index.js +3 -3
  62. package/dist/{DatePicker-39d2dc8b.js → DatePicker-49213434.js} +2 -2
  63. package/dist/DescriptionList/index.js +1 -1
  64. package/dist/Disclosure/index.js +1 -1
  65. package/dist/Drawer/index.js +4 -4
  66. package/dist/Emphasis/index.js +2 -2
  67. package/dist/{Emphasis-cc3456ac.js → Emphasis-e10dde65.js} +1 -1
  68. package/dist/FeatureSwitch/index.js +7 -7
  69. package/dist/Flex/Flex.d.ts +32 -0
  70. package/dist/Flex/Flex.types.d.ts +6 -0
  71. package/dist/Flex/index.d.ts +1 -0
  72. package/dist/Flex/index.js +40 -0
  73. package/dist/FormField/index.js +5 -5
  74. package/dist/{FormField-bef41ec9.js → FormField-fa9254dc.js} +3 -3
  75. package/dist/FormatFile/index.js +10 -10
  76. package/dist/{FormatFile-a470c0f2.js → FormatFile-6423c3b5.js} +4 -4
  77. package/dist/Gallery/index.js +11 -11
  78. package/dist/Heading/index.js +2 -2
  79. package/dist/{Heading-4562900a.js → Heading-4cde9989.js} +1 -1
  80. package/dist/InlineLabel/index.js +2 -2
  81. package/dist/{InlineLabel-3d461632.js → InlineLabel-a24706c4.js} +1 -1
  82. package/dist/InputAvatar/index.js +3 -3
  83. package/dist/InputDate/index.js +6 -6
  84. package/dist/InputEmail/index.js +5 -5
  85. package/dist/InputFile/index.js +3 -3
  86. package/dist/{InputFile-d327dee3.js → InputFile-25c3369b.js} +2 -2
  87. package/dist/InputNumber/index.js +6 -6
  88. package/dist/{InputNumber-5640fb55.js → InputNumber-ea9fcee1.js} +1 -1
  89. package/dist/InputPassword/index.js +5 -5
  90. package/dist/InputPhoneNumber/index.js +5 -5
  91. package/dist/InputText/index.js +6 -6
  92. package/dist/{InputText-5ac5cfe0.js → InputText-ab237501.js} +1 -1
  93. package/dist/InputTime/index.js +5 -5
  94. package/dist/InputValidation/index.js +3 -3
  95. package/dist/{InputValidation-4e809bdd.js → InputValidation-377d6c62.js} +1 -1
  96. package/dist/LightBox/index.js +4 -4
  97. package/dist/{LightBox-02ca409e.js → LightBox-93ef99b9.js} +2 -2
  98. package/dist/List/index.js +5 -5
  99. package/dist/Markdown/index.js +5 -5
  100. package/dist/{Markdown-b37cf9ec.js → Markdown-d53b01bf.js} +3 -3
  101. package/dist/Menu/index.js +3 -3
  102. package/dist/{Menu-cec53b50.js → Menu-2e64307a.js} +2 -2
  103. package/dist/Modal/index.js +5 -5
  104. package/dist/{Modal-dcdc0032.js → Modal-c17cc105.js} +3 -3
  105. package/dist/MultiSelect/index.js +3 -3
  106. package/dist/{Option-9f4a65da.js → Option-07a24acd.js} +1 -1
  107. package/dist/Page/index.js +7 -7
  108. package/dist/Popover/index.js +4 -4
  109. package/dist/{Popover-d401fb54.js → Popover-7c966790.js} +1 -1
  110. package/dist/RadioGroup/index.js +3 -3
  111. package/dist/{RadioGroup-46833fac.js → RadioGroup-9bdd8a59.js} +1 -1
  112. package/dist/RecurringSelect/index.js +8 -8
  113. package/dist/Select/index.js +6 -6
  114. package/dist/StatusLabel/index.js +2 -2
  115. package/dist/Switch/index.js +2 -2
  116. package/dist/{Switch-165f01e3.js → Switch-cc9b645c.js} +1 -1
  117. package/dist/Tabs/index.js +1 -1
  118. package/dist/Text/index.js +2 -2
  119. package/dist/{Text-59bde58c.js → Text-54334431.js} +1 -1
  120. package/dist/Toast/index.js +2 -2
  121. package/dist/Tooltip/index.js +1 -3
  122. package/dist/{Tooltip-59dbab5b.js → Tooltip-ae33a335.js} +5 -7
  123. package/dist/Typography/index.js +1 -1
  124. package/dist/{Typography-9bff9c91.js → Typography-83915c54.js} +2 -2
  125. package/package.json +6 -6
  126. package/rollup.config.js +1 -0
  127. package/dist/Combobox/components/ComboboxContent/ComboboxList.d.ts +0 -14
  128. package/dist/Combobox/components/ComboboxContent/ComboboxSearch.d.ts +0 -7
@@ -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 Chip = require('../Chip-4d8e6370.js');
7
- require('uuid');
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('classnames');
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('../Button-d89f2271.js');
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(Chip.InternalChip, { label: label, disabled: disabled, invalid: invalid, prefix: prefix, onClick: onClick, suffix: React__default["default"].createElement(Chip.InternalChipButton, { icon: "remove", label: label, invalid: invalid, disabled: disabled, onClick: onRequestRemove }) }));
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.Chip = Chip.Chip;
37
- exports.Chips = Chip.Chips;
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 classnames = require('classnames');
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 Text = require('./Text-59bde58c.js');
17
- var Button = require('./Button-d89f2271.js');
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 InternalChipButton({ icon, invalid, disabled, label, onClick, }) {
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, name: name, onClick: handleClick(child.props.value), onKeyUp: handleKeyUp(isSelected, child.props.value), onChange: () => {
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(InternalChip, Object.assign({}, child.props, { active: isSelected }))));
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 = isChipSelected(chip.props.value);
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(InternalChip, Object.assign({}, chip.props, { active: isChipActive, suffix: checkmarkIcon(isChipActive) }))));
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(InternalChip, Object.assign({ key: chip.value }, chip, { onKeyDown: handleChipKeyDown(chip.value), onClick: handleChipClick(chip.value), ariaLabel: `${chip.label}. Press delete or backspace to remove ${chip.label}`, tabIndex: 0, suffix: React__default["default"].createElement(InternalChipButton, { icon: "remove", invalid: chip.invalid, disabled: chip.disabled, label: chip.label, onClick: handleChipRemove(chip.value) }) })))),
489
- 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 })));
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.InternalChip = InternalChip;
514
- exports.InternalChipButton = InternalChipButton;
404
+ exports.InternalChipDismissible = InternalChipDismissible;
405
+ exports.InternalChipMultiSelect = InternalChipMultiSelect;
406
+ exports.InternalChipSingleSelect = InternalChipSingleSelect;
407
+ exports.styles = styles$1;
@@ -1,18 +1,7 @@
1
- import { ReactElement } from "react";
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;