@televet/kibble-ui 1.12.7 → 1.12.9

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/build/index.js CHANGED
@@ -3595,7 +3595,7 @@ function withFormControl(Component) {
3595
3595
  var shouldShowBottomContent = isInvalid || helperText;
3596
3596
  return (React__default["default"].createElement(react.FormControl, __assign({}, formControlStyle, { isInvalid: isInvalid, isRequired: isRequired, isReadOnly: isReadOnly, isDisabled: isDisabled }),
3597
3597
  label && (React__default["default"].createElement(react.FormLabel, __assign({ display: isFieldInline ? 'inline-block' : 'block', color: colors.text.light.default }, labelStyle), label)),
3598
- React__default["default"].createElement(Component, __assign({}, props, { "$isFieldInline": isFieldInline, errorBorderColor: colors.border.light.error, focusBorderColor: colors.border.light.focus })),
3598
+ React__default["default"].createElement(Component, __assign({}, props, { isFieldInline: isFieldInline, errorBorderColor: colors.border.light.error, focusBorderColor: colors.border.light.focus })),
3599
3599
  shouldShowBottomContent && (React__default["default"].createElement(react.Flex, { mt: 2, w: "100%", justifyContent: alignment, alignItems: "center" },
3600
3600
  React__default["default"].createElement(react.FormErrorMessage, { m: 0, fontSize: fontSizes.xs, color: colors.text.light.error }, errorText),
3601
3601
  helperText && (React__default["default"].createElement(react.FormHelperText, { m: 0, color: isInvalid ? colors.text.light.error : colors.text.light.subtle, fontSize: fontSizes.xs }, helperText))))));
@@ -3612,7 +3612,7 @@ var Checkbox = function (_a) {
3612
3612
 
3613
3613
  var CheckboxGroup = function (_a) {
3614
3614
  var checkboxes = _a.checkboxes, _b = _a.size, size = _b === void 0 ? 'md' : _b, _c = _a.direction, direction = _c === void 0 ? 'row' : _c, spacing = _a.spacing, variant = _a.variant, rest = __rest(_a, ["checkboxes", "size", "direction", "spacing", "variant"]);
3615
- rest.$isFieldInline; var domProps = __rest(rest, ["$isFieldInline"]);
3615
+ rest.isFieldInline; var domProps = __rest(rest, ["isFieldInline"]);
3616
3616
  return (React__default["default"].createElement(react.CheckboxGroup, __assign({}, domProps),
3617
3617
  React__default["default"].createElement(react.Stack, { direction: direction, spacing: spacing, display: "inline-flex" }, checkboxes.map(function (checkbox, index) { return (React__default["default"].createElement(Checkbox, __assign({ key: index }, checkbox, { size: size, variant: variant || checkbox.variant }))); }))));
3618
3618
  };
@@ -3765,7 +3765,8 @@ var CheckboxConfig = {
3765
3765
  };
3766
3766
 
3767
3767
  var Textarea = function (props) {
3768
- return React__default["default"].createElement(react.Textarea, __assign({ background: colors.background.light }, props));
3768
+ props.isFieldInline; var domProps = __rest(props, ["isFieldInline"]);
3769
+ return React__default["default"].createElement(react.Textarea, __assign({ background: colors.background.light }, domProps));
3769
3770
  };
3770
3771
  Textarea.displayName = 'Textarea';
3771
3772
  var WrappedTextArea = withFormControl(Textarea);
@@ -3832,7 +3833,7 @@ var TextareaConfig = __assign({}, FormControlConfig);
3832
3833
 
3833
3834
  var TextInput = withFormControl(function (props) {
3834
3835
  // the disabled styles coming from the FormControlConfig weren't getting applied to the TextInput, so they're added inline instead
3835
- var leftElement = props.leftElement, rightElement = props.rightElement, inputRef = props.inputRef, domProps = __rest(props, ["leftElement", "rightElement", "inputRef"]);
3836
+ var leftElement = props.leftElement, rightElement = props.rightElement, inputRef = props.inputRef; props.isFieldInline; var domProps = __rest(props, ["leftElement", "rightElement", "inputRef", "isFieldInline"]);
3836
3837
  return (React__default["default"].createElement(react.InputGroup, null,
3837
3838
  leftElement ? React__default["default"].createElement(react.InputLeftElement, { children: leftElement, h: "100%" }) : null,
3838
3839
  React__default["default"].createElement(react.Input, __assign({ background: colors.background.light, _disabled: {
@@ -3852,13 +3853,13 @@ WrappedTextInput.displayName = 'TextInput';
3852
3853
  var TextInputConfig = __assign({}, FormControlConfig);
3853
3854
 
3854
3855
  var Radio = function (_a) {
3855
- var children = _a.children, _b = _a.size, size = _b === void 0 ? 'md' : _b, rest = __rest(_a, ["children", "size"]);
3856
+ var children = _a.children, _b = _a.size, size = _b === void 0 ? 'md' : _b; _a.isFieldInline; var rest = __rest(_a, ["children", "size", "isFieldInline"]);
3856
3857
  return (React__default["default"].createElement(react.Radio, __assign({}, rest, { size: size, alignItems: "flex-start" }), children));
3857
3858
  };
3858
3859
 
3859
3860
  var RadioGroup = function (_a) {
3860
3861
  var radios = _a.radios, _b = _a.size, size = _b === void 0 ? 'md' : _b, _c = _a.direction, direction = _c === void 0 ? 'row' : _c, spacing = _a.spacing, rest = __rest(_a, ["radios", "size", "direction", "spacing"]);
3861
- rest.$isFieldInline; var domProps = __rest(rest, ["$isFieldInline"]);
3862
+ rest.isFieldInline; var domProps = __rest(rest, ["isFieldInline"]);
3862
3863
  return (React__default["default"].createElement(react.RadioGroup, __assign({}, domProps),
3863
3864
  React__default["default"].createElement(react.Stack, { direction: direction, spacing: spacing, maxW: rest.maxW || 'max-content' }, radios.map(function (radio, index) { return (React__default["default"].createElement(Radio, __assign({ key: index }, radio, { size: size }))); }))));
3864
3865
  };
@@ -4156,9 +4157,9 @@ var TruncatedText = function (_a) {
4156
4157
  var checkValue = onCheckTextOverFlowing(containerRef);
4157
4158
  setIsTextOverFlowing(checkValue);
4158
4159
  }, [containerRef, onCheckTextOverFlowing]);
4159
- return (React__default["default"].createElement(react.Box, { ref: containerRef },
4160
- React__default["default"].createElement(Tooltip, { label: textContent || '', isDisabled: !isTextOverFlowing, placement: placement },
4161
- React__default["default"].createElement(react.Text, __assign({ noOfLines: noOfLines, as: "p" }, rest), textContent))));
4160
+ return (React__default["default"].createElement(react.Box, { ref: containerRef, className: "TruncatedText__Wrapper" },
4161
+ React__default["default"].createElement(Tooltip, { className: "TruncatedText__Tooltip", label: textContent || '', isDisabled: !isTextOverFlowing, placement: placement },
4162
+ React__default["default"].createElement(react.Text, __assign({ className: "TruncatedText__TextContent", noOfLines: noOfLines, as: "p" }, rest), textContent))));
4162
4163
  };
4163
4164
 
4164
4165
  var RatingDots = function (_a) {
@@ -4185,9 +4186,356 @@ var RatingDots = function (_a) {
4185
4186
  React__default["default"].createElement(Text, { size: "sm" }, "".concat(roundedMax, " - Very likely")))));
4186
4187
  };
4187
4188
 
4189
+ // TODO: Figure out how to document this functionality
4190
+ var MenuContext = React.createContext({
4191
+ allMenuItems: [],
4192
+ filteredMenuItems: [],
4193
+ focusedItemIndex: -1,
4194
+ groups: [],
4195
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4196
+ handleOnClose: function () {
4197
+ throw new Error('handleOnClose(): Promise<void> not implemented');
4198
+ },
4199
+ setFilteredMenuItems: function () {
4200
+ throw new Error('setFilteredMenuItems(): Promise<void> not implemented');
4201
+ },
4202
+ setFocusedItemIndex: function () {
4203
+ throw new Error('setFocusedItemIndex(): Promise<void> not implemented');
4204
+ },
4205
+ setGroups: function () {
4206
+ throw new Error('setGroups(): Promise<void> not implemented');
4207
+ },
4208
+ });
4209
+ var useMenuContext = function () { return React.useContext(MenuContext); };
4210
+ var MenuProvider = function (_a) {
4211
+ var menuItems = _a.menuItems, onMenuClose = _a.onMenuClose, children = _a.children;
4212
+ var _b = __read(React.useState(menuItems || []), 2), filteredMenuItems = _b[0], setFilteredMenuItems = _b[1];
4213
+ var _c = __read(React.useState(null), 2), groups = _c[0], setGroups = _c[1];
4214
+ var _d = __read(React.useState(-1), 2), focusedItemIndex = _d[0], setFocusedItemIndex = _d[1];
4215
+ var searchInputRef = React.useRef(null);
4216
+ var menuItemRefs = React.useRef([]);
4217
+ var handleOnClose = React.useCallback(function () {
4218
+ var selectedItems = filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.filter(function (item) { return item.isSelected === true; }).map(function (item) { return item.value; });
4219
+ setFocusedItemIndex(-1);
4220
+ if (onMenuClose) {
4221
+ onMenuClose(selectedItems);
4222
+ }
4223
+ }, [filteredMenuItems, onMenuClose]);
4224
+ return (React__default["default"].createElement(MenuContext.Provider, { value: {
4225
+ allMenuItems: menuItems,
4226
+ filteredMenuItems: filteredMenuItems,
4227
+ focusedItemIndex: focusedItemIndex,
4228
+ groups: groups,
4229
+ menuItemRefs: menuItemRefs,
4230
+ handleOnClose: handleOnClose,
4231
+ searchInputRef: searchInputRef,
4232
+ setFilteredMenuItems: setFilteredMenuItems,
4233
+ setFocusedItemIndex: setFocusedItemIndex,
4234
+ setGroups: setGroups,
4235
+ } }, children));
4236
+ };
4237
+
4238
+ var MenuContainer = function (_a) {
4239
+ var children = _a.children; _a.onMenuClose; var rest = __rest(_a, ["children", "onMenuClose"]);
4240
+ var handleOnClose = useMenuContext().handleOnClose;
4241
+ return (React__default["default"].createElement(react.Menu, __assign({ onClose: handleOnClose }, rest), children));
4242
+ };
4243
+
4244
+ var MenuItemConfig = {
4245
+ color: adaptiveColors.text.light.subtle,
4246
+ cursor: 'pointer',
4247
+ fontSize: fontSizes.sm,
4248
+ px: '20px',
4249
+ py: '8px',
4250
+ outline: 0,
4251
+ transitionDuration: 'ultra-fast',
4252
+ transitionProperty: 'background',
4253
+ transitionTimingFunction: 'ease-in',
4254
+ _hover: {
4255
+ bg: semanticColors.background.hover,
4256
+ },
4257
+ _focus: {
4258
+ bg: semanticColors.background.hover,
4259
+ },
4260
+ _active: {
4261
+ color: adaptiveColors.text.light.link,
4262
+ },
4263
+ _expanded: {
4264
+ bg: semanticColors.background.hover,
4265
+ },
4266
+ _disabled: {
4267
+ opacity: 0.4,
4268
+ cursor: 'not-allowed',
4269
+ bg: 'transparent',
4270
+ color: adaptiveColors.text.light.subtle,
4271
+ },
4272
+ };
4273
+ var MenuConfig = {
4274
+ baseStyle: {
4275
+ item: MenuItemConfig,
4276
+ list: {
4277
+ p: '8px 0',
4278
+ boxShadow: shadows.md,
4279
+ borderColor: colors.border.light.default,
4280
+ },
4281
+ },
4282
+ };
4283
+
4284
+ var MenuItem = function (_a) {
4285
+ var isMultiSelect = _a.isMultiSelect, canSelectAll = _a.canSelectAll, children = _a.children, _b = _a.closeOnSelect, closeOnSelect = _b === void 0 ? !isMultiSelect : _b; _a.groupLabel; var _c = _a.handleKeyboardNavigation, handleKeyboardNavigation = _c === void 0 ? function () { } : _c, isDisabled = _a.isDisabled, isSelected = _a.isSelected, _d = _a.itemIndex, itemIndex = _d === void 0 ? '0' : _d, label = _a.label, leftElement = _a.leftElement, menuItemRefs = _a.menuItemRefs, onSelectItem = _a.onSelectItem, value = _a.value, rest = __rest(_a, ["isMultiSelect", "canSelectAll", "children", "closeOnSelect", "groupLabel", "handleKeyboardNavigation", "isDisabled", "isSelected", "itemIndex", "label", "leftElement", "menuItemRefs", "onSelectItem", "value"]);
4286
+ // TODO: Add truncated text functionality with tooltip on hover
4287
+ var colors = useTheme().colors;
4288
+ var onClose = react.useMenuState().onClose;
4289
+ var handleSelect = React.useCallback(function () {
4290
+ if (isDisabled)
4291
+ return;
4292
+ if (value && onSelectItem) {
4293
+ onSelectItem(value);
4294
+ }
4295
+ if (closeOnSelect) {
4296
+ onClose();
4297
+ }
4298
+ }, [value, onSelectItem, onClose, closeOnSelect, isDisabled]);
4299
+ return (React__default["default"].createElement(react.Box, __assign({}, MenuItemConfig, { className: "menu-list__item", onClick: handleSelect, onKeyDown: function (e) { return handleKeyboardNavigation(e, false); }, tabIndex: parseInt(canSelectAll ? (itemIndex += 2) : itemIndex), ref: function (el) {
4300
+ return menuItemRefs && itemIndex ? (menuItemRefs.current[parseInt(itemIndex)] = el) : null;
4301
+ },
4302
+ // @ts-ignore
4303
+ disabled: isDisabled }, rest), children ? (children) : (React__default["default"].createElement(react.HStack, { spacing: "12px", minH: "21px" },
4304
+ isMultiSelect && (React__default["default"].createElement(react.Box, { width: "12px", height: "12px", borderRadius: "12px", position: "relative", background: colors.background.grayDark, className: "menu-list__item-checkbox" },
4305
+ React__default["default"].createElement(react.Box, { position: "absolute", top: "-2px", left: "-2px" }, isSelected && React__default["default"].createElement(Icon, { name: "checkmarkCircle", color: "success", size: "sm" })))),
4306
+ React__default["default"].createElement(react.HStack, { color: isSelected && !isMultiSelect ? colors.text.light.link : colors.text.light.default },
4307
+ leftElement && React__default["default"].createElement(react.Box, { className: "menu-list__item-leftElement" }, leftElement),
4308
+ React__default["default"].createElement(react.Box, { className: "menu-list__item-label" },
4309
+ React__default["default"].createElement(TruncatedText, { textContent: label || '', noOfLines: 1 })))))));
4310
+ };
4311
+
4312
+ var MenuSearchBar = function (_a) {
4313
+ var handleKeyboardNavigation = _a.handleKeyboardNavigation, menuItems = _a.menuItems, onSearchCallback = _a.onSearchCallback, searchInputRef = _a.searchInputRef, setFilteredMenuItems = _a.setFilteredMenuItems, _b = _a.placeholder, placeholder = _b === void 0 ? 'Search...' : _b;
4314
+ var handleSearch = React.useCallback(function (e) {
4315
+ var searchInput = e.target.value;
4316
+ if (searchInput === '' || !searchInput) {
4317
+ setFilteredMenuItems(menuItems);
4318
+ }
4319
+ else {
4320
+ var filterdItems = menuItems.filter(function (item) { var _a; return (_a = item.label) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(searchInput.toLowerCase()); });
4321
+ setFilteredMenuItems(filterdItems);
4322
+ }
4323
+ if (onSearchCallback) {
4324
+ onSearchCallback(e);
4325
+ }
4326
+ }, [menuItems, onSearchCallback, setFilteredMenuItems]);
4327
+ return (React__default["default"].createElement(WrappedTextInput, { className: "menu-list__searchbar", placeholder: placeholder, onChange: handleSearch, mt: 1, onKeyDown: function (e) { return handleKeyboardNavigation(e, true); }, size: "sm", ref: searchInputRef }));
4328
+ };
4329
+
4330
+ var MenuSelectAllButtons = function (_a) {
4331
+ var groupName = _a.groupName, handleToggleAllItems = _a.handleToggleAllItems, hasSelectedItems = _a.hasSelectedItems, isGrouped = _a.isGrouped;
4332
+ if (isGrouped) {
4333
+ return (React__default["default"].createElement(react.Box, { textAlign: "right", w: "50%", className: "menu-list-item__select-all-button" }, hasSelectedItems ? (React__default["default"].createElement(Button, { variant: "ghostNeutral", iconName: "arrowCircle", size: "xs", onClick: function () { return handleToggleAllItems({ groupName: groupName, clear: true }); }, isDisabled: !hasSelectedItems }, "Clear all")) : (React__default["default"].createElement(Button, { variant: "ghost", size: "xs", onClick: function () { return handleToggleAllItems({ groupName: groupName, clear: false }); } }, "Select all"))));
4334
+ }
4335
+ return (React__default["default"].createElement(react.Box, { mt: "8px", className: "menu-list__select-all-buttons" },
4336
+ React__default["default"].createElement(react.Flex, { justifyContent: "space-between" },
4337
+ React__default["default"].createElement(Button, { variant: "ghost", size: "xs", onClick: function () { return handleToggleAllItems({ clear: false }); } }, "Select all"),
4338
+ React__default["default"].createElement(Button, { variant: "ghostNeutral", iconName: "arrowCircle", size: "xs", onClick: function () { return handleToggleAllItems({ clear: true }); }, isDisabled: !hasSelectedItems }, "Clear all"))));
4339
+ };
4340
+
4341
+ var MenuList = function (_a) {
4342
+ var _b = _a.canSelectAll, canSelectAll = _b === void 0 ? false : _b, _c = _a.canSelectGroups, canSelectGroups = _c === void 0 ? false : _c, children = _a.children, _d = _a.isGrouped, isGrouped = _d === void 0 ? false : _d, isMatchWidthSet = _a.isMatchWidthSet, _e = _a.isMultiSelect, isMultiSelect = _e === void 0 ? false : _e, _f = _a.isSearchable, isSearchable = _f === void 0 ? false : _f, menuItems = _a.menuItems, onMenuItemSelect = _a.onMenuItemSelect, onMenuItemSelectAll = _a.onMenuItemSelectAll, searchPlaceholder = _a.searchPlaceholder, _g = _a.minW, minW = _g === void 0 ? '240px' : _g, maxW = _a.maxW, _h = _a.maxH, maxH = _h === void 0 ? '480px' : _h, rest = __rest(_a, ["canSelectAll", "canSelectGroups", "children", "isGrouped", "isMatchWidthSet", "isMultiSelect", "isSearchable", "menuItems", "onMenuItemSelect", "onMenuItemSelectAll", "searchPlaceholder", "minW", "maxW", "maxH"]);
4343
+ var _j = useMenuContext(), filteredMenuItems = _j.filteredMenuItems, setFilteredMenuItems = _j.setFilteredMenuItems, groups = _j.groups, setGroups = _j.setGroups, focusedItemIndex = _j.focusedItemIndex, setFocusedItemIndex = _j.setFocusedItemIndex, searchInputRef = _j.searchInputRef, menuItemRefs = _j.menuItemRefs;
4344
+ var focusNextListItem = React.useCallback(function (direction) {
4345
+ var _a, _b;
4346
+ if (!(menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current))
4347
+ return;
4348
+ var isFirstOption = focusedItemIndex === 0;
4349
+ var isLastOption = focusedItemIndex === (menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current.length) - 1;
4350
+ var newIndex = -1;
4351
+ if (direction === 'ArrowDown') {
4352
+ if (isLastOption) {
4353
+ if (isSearchable) {
4354
+ (_a = searchInputRef === null || searchInputRef === void 0 ? void 0 : searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
4355
+ setFocusedItemIndex(-1);
4356
+ return;
4357
+ }
4358
+ newIndex = 0;
4359
+ }
4360
+ else {
4361
+ newIndex = focusedItemIndex + 1;
4362
+ }
4363
+ }
4364
+ else if (direction === 'ArrowUp') {
4365
+ if (isFirstOption) {
4366
+ if (isSearchable) {
4367
+ (_b = searchInputRef === null || searchInputRef === void 0 ? void 0 : searchInputRef.current) === null || _b === void 0 ? void 0 : _b.focus();
4368
+ setFocusedItemIndex(-1);
4369
+ return;
4370
+ }
4371
+ newIndex = menuItemRefs.current.length - 1;
4372
+ }
4373
+ else {
4374
+ newIndex = focusedItemIndex - 1;
4375
+ }
4376
+ }
4377
+ var nextListItem = menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current[newIndex];
4378
+ if (nextListItem) {
4379
+ nextListItem === null || nextListItem === void 0 ? void 0 : nextListItem.focus();
4380
+ setFocusedItemIndex(newIndex);
4381
+ }
4382
+ else {
4383
+ setFocusedItemIndex(-1);
4384
+ }
4385
+ }, [focusedItemIndex, isSearchable, menuItemRefs, searchInputRef, setFocusedItemIndex]);
4386
+ var handleKeyboardNavigation = React.useCallback(function (e, elementIsInputField) {
4387
+ e.persist();
4388
+ if (!(menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current))
4389
+ return;
4390
+ if (e.key === 'ArrowDown' || e.key === 'Tab') {
4391
+ focusNextListItem('ArrowDown');
4392
+ }
4393
+ if (e.key === 'ArrowUp') {
4394
+ focusNextListItem('ArrowUp');
4395
+ }
4396
+ if (e.key === 'Enter') {
4397
+ e.preventDefault();
4398
+ e.target.click();
4399
+ }
4400
+ }, [focusNextListItem, menuItemRefs]);
4401
+ var handleToggleSingleItem = React.useCallback(function (selectedValue) {
4402
+ if (filteredMenuItems) {
4403
+ var _filteredMenuItemsCopy = __spreadArray([], __read(filteredMenuItems), false);
4404
+ var selectedItem = _filteredMenuItemsCopy.find(function (item) { return item.value === selectedValue; });
4405
+ if (!isMultiSelect) {
4406
+ _filteredMenuItemsCopy.filter(function (item) { return item.isSelected === true; }).map(function (item) { return (item.isSelected = false); });
4407
+ }
4408
+ if (selectedItem) {
4409
+ selectedItem.isSelected = !selectedItem.isSelected;
4410
+ }
4411
+ setFilteredMenuItems(_filteredMenuItemsCopy);
4412
+ if (onMenuItemSelect && selectedItem) {
4413
+ onMenuItemSelect(selectedItem);
4414
+ }
4415
+ }
4416
+ }, [filteredMenuItems, isMultiSelect, onMenuItemSelect, setFilteredMenuItems]);
4417
+ var handleToggleAllItems = React.useCallback(function (_a) {
4418
+ var groupName = _a.groupName, _b = _a.clear, clear = _b === void 0 ? false : _b;
4419
+ if (filteredMenuItems) {
4420
+ var _filteredMenuItemsCopy = __spreadArray([], __read(filteredMenuItems), false);
4421
+ var value_1 = [];
4422
+ _filteredMenuItemsCopy.forEach(function (item) {
4423
+ if (groupName) {
4424
+ if (groupName === item.groupLabel) {
4425
+ item.isSelected = !clear;
4426
+ if (item.value && item.isSelected) {
4427
+ value_1.push(item.value);
4428
+ }
4429
+ }
4430
+ }
4431
+ else {
4432
+ item.isSelected = !clear;
4433
+ if (item.value && item.isSelected) {
4434
+ value_1.push(item.value);
4435
+ }
4436
+ }
4437
+ });
4438
+ setFilteredMenuItems(_filteredMenuItemsCopy);
4439
+ if (onMenuItemSelectAll) {
4440
+ onMenuItemSelectAll(_filteredMenuItemsCopy.filter(function (item) { return item.isSelected; }));
4441
+ }
4442
+ }
4443
+ }, [filteredMenuItems, onMenuItemSelectAll, setFilteredMenuItems]);
4444
+ React.useEffect(function () {
4445
+ if (isGrouped) {
4446
+ var groupNames = __spreadArray([], __read(new Set(filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.map(function (item) { return item.groupLabel; }))), false);
4447
+ if (groupNames.length) {
4448
+ setGroups(groupNames);
4449
+ }
4450
+ }
4451
+ }, [filteredMenuItems, isGrouped, setGroups]);
4452
+ // Return default Chakra menu if user passes in custom child elements
4453
+ if (children) {
4454
+ return React__default["default"].createElement(react.MenuList, __assign({}, rest), children);
4455
+ }
4456
+ if (!isMatchWidthSet) {
4457
+ maxW = '320px';
4458
+ }
4459
+ return (React__default["default"].createElement(react.MenuList, __assign({}, rest, { maxW: maxW, maxH: maxH, minW: minW, overflow: "hidden auto" }),
4460
+ (isSearchable || (canSelectAll && isMultiSelect)) && (React__default["default"].createElement(react.Box, { className: "menu-list__header", m: "0 12px 8px" },
4461
+ isSearchable && (React__default["default"].createElement(MenuSearchBar, { handleKeyboardNavigation: handleKeyboardNavigation, menuItems: menuItems || [], searchInputRef: searchInputRef, setFilteredMenuItems: setFilteredMenuItems, placeholder: searchPlaceholder })),
4462
+ canSelectAll && isMultiSelect && (React__default["default"].createElement(MenuSelectAllButtons, { handleToggleAllItems: handleToggleAllItems, hasSelectedItems: Boolean(filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.find(function (item) { return item.isSelected; })), isGrouped: false })))),
4463
+ React__default["default"].createElement(react.Box, { className: "menu-list__body" }, isGrouped
4464
+ ? groups === null || groups === void 0 ? void 0 : groups.map(function (groupName) {
4465
+ var menuItems = filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.filter(function (item) { return item.groupLabel === groupName; });
4466
+ return (React__default["default"].createElement(react.MenuOptionGroup, { key: groupName, className: "menu-list__group" },
4467
+ React__default["default"].createElement(react.HStack, { minH: "32px", p: "4px 12px 4px 20px", justifyContent: "space-between" },
4468
+ React__default["default"].createElement(react.Box, { textAlign: "left", className: "menu-list__group-title" },
4469
+ React__default["default"].createElement(Heading, { size: "xs" }, groupName)),
4470
+ isMultiSelect && canSelectGroups && (React__default["default"].createElement(MenuSelectAllButtons, { handleToggleAllItems: handleToggleAllItems, hasSelectedItems: Boolean(menuItems === null || menuItems === void 0 ? void 0 : menuItems.find(function (item) { return item.isSelected; })), isGrouped: true, groupName: groupName }))), menuItems === null || menuItems === void 0 ? void 0 :
4471
+ menuItems.map(function (item, index) {
4472
+ return (React__default["default"].createElement(MenuItem, { handleKeyboardNavigation: handleKeyboardNavigation, isMultiSelect: isMultiSelect, isSelected: item.isSelected, itemIndex: index.toString(), key: item.value, label: item.label, leftElement: item.leftElement, menuItemRefs: menuItemRefs, onSelectItem: handleToggleSingleItem, value: item.value, children: item.children, closeOnSelect: item.closeOnSelect }));
4473
+ })));
4474
+ })
4475
+ : filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.map(function (item, index) {
4476
+ return (React__default["default"].createElement(MenuItem, { handleKeyboardNavigation: handleKeyboardNavigation, isMultiSelect: isMultiSelect, isSelected: item.isSelected, itemIndex: index.toString(), key: item.value, label: item.label, leftElement: item.leftElement, menuItemRefs: menuItemRefs, onSelectItem: handleToggleSingleItem, value: item.value, children: item.children, closeOnSelect: item.closeOnSelect }));
4477
+ }))));
4478
+ };
4479
+
4188
4480
  var Select = function (props) {
4189
- var options = props.options, domProps = __rest(props, ["options"]);
4190
- return (React__default["default"].createElement(react.Select, __assign({}, domProps), options.map(function (option, index) { return (React__default["default"].createElement("option", { key: "options-".concat(index), value: option.value }, option.text)); })));
4481
+ var _a;
4482
+ var colors = useTheme().colors;
4483
+ var selectRef = React.useRef(null);
4484
+ var options = props.options; props.isFieldInline; var useBrowserDefaultMenu = props.useBrowserDefaultMenu, placeholder = props.placeholder, listConfig = props.listConfig, value = props.value, domProps = __rest(props, ["options", "isFieldInline", "useBrowserDefaultMenu", "placeholder", "listConfig", "value"]);
4485
+ var _b = __read(React.useState({
4486
+ label: placeholder,
4487
+ value: '',
4488
+ leftElement: null,
4489
+ }), 2), selectedOption = _b[0], setSelectedOption = _b[1];
4490
+ React.useEffect(function () {
4491
+ if (value) {
4492
+ var defaultValue = options.find(function (option) { return option.value === value; });
4493
+ if (defaultValue) {
4494
+ setSelectedOption(defaultValue);
4495
+ }
4496
+ }
4497
+ }, [value, options]);
4498
+ if (useBrowserDefaultMenu) {
4499
+ return (React__default["default"].createElement(react.Select, __assign({ value: value, placeholder: placeholder }, domProps, { _hover: {
4500
+ borderWidth: '1px',
4501
+ borderColor: colors.border.light.heavy,
4502
+ }, _focus: {
4503
+ borderWidth: '2px',
4504
+ borderColor: colors.border.light.focus,
4505
+ } }), options.map(function (option, index) { return (React__default["default"].createElement("option", { key: "options-".concat(index), value: option.value }, option.label)); })));
4506
+ }
4507
+ var handleSelectOption = function (selectedOption) {
4508
+ setSelectedOption(selectedOption);
4509
+ if (listConfig === null || listConfig === void 0 ? void 0 : listConfig.onSelectOption) {
4510
+ listConfig === null || listConfig === void 0 ? void 0 : listConfig.onSelectOption(selectedOption);
4511
+ }
4512
+ };
4513
+ var handleMenuClose = function (selectedOption) {
4514
+ if (listConfig === null || listConfig === void 0 ? void 0 : listConfig.onMenuClose) {
4515
+ listConfig === null || listConfig === void 0 ? void 0 : listConfig.onMenuClose(selectedOption);
4516
+ }
4517
+ };
4518
+ return (React__default["default"].createElement(MenuProvider, { menuItems: options, onMenuClose: handleMenuClose },
4519
+ React__default["default"].createElement(MenuContainer, { matchWidth: true, isLazy: true },
4520
+ React__default["default"].createElement(react.Select, __assign({ as: react.MenuButton }, domProps, { _hover: {
4521
+ borderWidth: '1px',
4522
+ borderColor: colors.border.light.heavy,
4523
+ }, _focus: {
4524
+ borderWidth: '2px',
4525
+ borderColor: colors.border.light.focus,
4526
+ }, ref: selectRef, onClick: function (event) { return event.stopPropagation(); } }),
4527
+ React__default["default"].createElement(react.HStack, null,
4528
+ (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.leftElement)
4529
+ ? selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.leftElement
4530
+ : (listConfig === null || listConfig === void 0 ? void 0 : listConfig.defaultLeftElement)
4531
+ ? listConfig === null || listConfig === void 0 ? void 0 : listConfig.defaultLeftElement
4532
+ : null,
4533
+ React__default["default"].createElement(TruncatedText, { textContent: selectedOption.label || '', noOfLines: 1 }))),
4534
+ React__default["default"].createElement(react.Portal, null,
4535
+ React__default["default"].createElement(MenuList, { maxW: "".concat((_a = selectRef === null || selectRef === void 0 ? void 0 : selectRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth, "px") || '0px', isGrouped: listConfig === null || listConfig === void 0 ? void 0 : listConfig.isGrouped, isSearchable: listConfig === null || listConfig === void 0 ? void 0 : listConfig.isSearchable, menuItems: options.map(function (option) {
4536
+ option.isSelected = option.value === selectedOption.value;
4537
+ return option;
4538
+ }), onMenuItemSelect: handleSelectOption, isMatchWidthSet: true })))));
4191
4539
  };
4192
4540
  Select.displayName = 'Select';
4193
4541
  var WrappedSelect = withFormControl(Select);
@@ -4195,8 +4543,8 @@ var WrappedSelect = withFormControl(Select);
4195
4543
  var SelectConfig = __assign({}, FormControlConfig);
4196
4544
 
4197
4545
  var Switch = function (props) {
4198
- var isChecked = props.isChecked, $isFieldInline = props.$isFieldInline, domProps = __rest(props, ["isChecked", "$isFieldInline"]);
4199
- return (React__default["default"].createElement(react.Switch, __assign({ colorScheme: "teal", isChecked: isChecked, display: $isFieldInline ? 'inline-block' : 'block' }, domProps)));
4546
+ var isChecked = props.isChecked, isFieldInline = props.isFieldInline, domProps = __rest(props, ["isChecked", "isFieldInline"]);
4547
+ return (React__default["default"].createElement(react.Switch, __assign({ colorScheme: "teal", isChecked: isChecked, display: isFieldInline ? 'inline-block' : 'block' }, domProps)));
4200
4548
  };
4201
4549
  Switch.displayName = 'Switch';
4202
4550
  var WrappedSwitch = withFormControl(Switch);
@@ -6403,83 +6751,28 @@ var SwitchConfig = {
6403
6751
  _b),
6404
6752
  },
6405
6753
  lg: {
6406
- container: (_c = {},
6407
- _c[$thumbWidth.variable] = '19.5px',
6408
- _c[$thumbHeight.variable] = '19.5px',
6409
- _c[$trackWidth.variable] = '33px',
6410
- _c[$trackHeight.variable] = '10.5px',
6411
- _c),
6412
- },
6413
- },
6414
- };
6415
-
6416
- var DrawerConfig = {
6417
- variants: {
6418
- alwaysOpen: {
6419
- parts: ['dialog, dialogContainer'],
6420
- dialog: {
6421
- pointerEvents: 'auto',
6422
- },
6423
- dialogContainer: {
6424
- pointerEvents: 'none',
6425
- },
6426
- },
6427
- },
6428
- };
6429
-
6430
- // TODO: Figure out how to document this functionality
6431
- var MenuContext = React.createContext({
6432
- allMenuItems: [],
6433
- filteredMenuItems: [],
6434
- focusedItemIndex: -1,
6435
- groups: [],
6436
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
6437
- handleOnClose: function () {
6438
- throw new Error('handleOnClose(): Promise<void> not implemented');
6439
- },
6440
- setFilteredMenuItems: function () {
6441
- throw new Error('setFilteredMenuItems(): Promise<void> not implemented');
6442
- },
6443
- setFocusedItemIndex: function () {
6444
- throw new Error('setFocusedItemIndex(): Promise<void> not implemented');
6445
- },
6446
- setGroups: function () {
6447
- throw new Error('setGroups(): Promise<void> not implemented');
6448
- },
6449
- });
6450
- var useMenuContext = function () { return React.useContext(MenuContext); };
6451
- var MenuProvider = function (_a) {
6452
- var menuItems = _a.menuItems, onMenuClose = _a.onMenuClose, children = _a.children;
6453
- var _b = __read(React.useState(menuItems || []), 2), filteredMenuItems = _b[0], setFilteredMenuItems = _b[1];
6454
- var _c = __read(React.useState(null), 2), groups = _c[0], setGroups = _c[1];
6455
- var _d = __read(React.useState(-1), 2), focusedItemIndex = _d[0], setFocusedItemIndex = _d[1];
6456
- var searchInputRef = React.useRef(null);
6457
- var menuItemRefs = React.useRef([]);
6458
- var handleOnClose = React.useCallback(function () {
6459
- var selectedItems = filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.filter(function (item) { return item.isSelected === true; }).map(function (item) { return item.value; });
6460
- setFocusedItemIndex(-1);
6461
- if (onMenuClose) {
6462
- onMenuClose(selectedItems);
6463
- }
6464
- }, [filteredMenuItems, onMenuClose]);
6465
- return (React__default["default"].createElement(MenuContext.Provider, { value: {
6466
- allMenuItems: menuItems,
6467
- filteredMenuItems: filteredMenuItems,
6468
- focusedItemIndex: focusedItemIndex,
6469
- groups: groups,
6470
- menuItemRefs: menuItemRefs,
6471
- handleOnClose: handleOnClose,
6472
- searchInputRef: searchInputRef,
6473
- setFilteredMenuItems: setFilteredMenuItems,
6474
- setFocusedItemIndex: setFocusedItemIndex,
6475
- setGroups: setGroups,
6476
- } }, children));
6754
+ container: (_c = {},
6755
+ _c[$thumbWidth.variable] = '19.5px',
6756
+ _c[$thumbHeight.variable] = '19.5px',
6757
+ _c[$trackWidth.variable] = '33px',
6758
+ _c[$trackHeight.variable] = '10.5px',
6759
+ _c),
6760
+ },
6761
+ },
6477
6762
  };
6478
6763
 
6479
- var MenuContainer = function (_a) {
6480
- var children = _a.children; _a.onMenuClose; var rest = __rest(_a, ["children", "onMenuClose"]);
6481
- var handleOnClose = useMenuContext().handleOnClose;
6482
- return (React__default["default"].createElement(react.Menu, __assign({ onClose: handleOnClose }, rest), children));
6764
+ var DrawerConfig = {
6765
+ variants: {
6766
+ alwaysOpen: {
6767
+ parts: ['dialog, dialogContainer'],
6768
+ dialog: {
6769
+ pointerEvents: 'auto',
6770
+ },
6771
+ dialogContainer: {
6772
+ pointerEvents: 'none',
6773
+ },
6774
+ },
6775
+ },
6483
6776
  };
6484
6777
 
6485
6778
  var MenuButton = function (_a) {
@@ -6544,240 +6837,6 @@ var MenuButton = function (_a) {
6544
6837
  React__default["default"].createElement(Icon, { name: rightIconName, size: size === 'lg' ? 'sm' : 'xs' }))))));
6545
6838
  };
6546
6839
 
6547
- var MenuItemConfig = {
6548
- color: adaptiveColors.text.light.subtle,
6549
- cursor: 'pointer',
6550
- fontSize: fontSizes.sm,
6551
- px: '20px',
6552
- py: '8px',
6553
- outline: 0,
6554
- transitionDuration: 'ultra-fast',
6555
- transitionProperty: 'background',
6556
- transitionTimingFunction: 'ease-in',
6557
- _hover: {
6558
- bg: semanticColors.background.hover,
6559
- },
6560
- _focus: {
6561
- bg: semanticColors.background.hover,
6562
- },
6563
- _active: {
6564
- color: adaptiveColors.text.light.link,
6565
- },
6566
- _expanded: {
6567
- bg: semanticColors.background.hover,
6568
- },
6569
- _disabled: {
6570
- opacity: 0.4,
6571
- cursor: 'not-allowed',
6572
- bg: 'transparent',
6573
- color: adaptiveColors.text.light.subtle,
6574
- },
6575
- };
6576
- var MenuConfig = {
6577
- baseStyle: {
6578
- item: MenuItemConfig,
6579
- list: {
6580
- p: '8px 0',
6581
- boxShadow: shadows.md,
6582
- borderColor: colors.border.light.default,
6583
- },
6584
- },
6585
- };
6586
-
6587
- var MenuItem = function (_a) {
6588
- var isMultiSelect = _a.isMultiSelect, canSelectAll = _a.canSelectAll, children = _a.children, _b = _a.closeOnSelect, closeOnSelect = _b === void 0 ? !isMultiSelect : _b; _a.groupLabel; var _c = _a.handleKeyboardNavigation, handleKeyboardNavigation = _c === void 0 ? function () { } : _c, isDisabled = _a.isDisabled, isSelected = _a.isSelected, _d = _a.itemIndex, itemIndex = _d === void 0 ? '0' : _d, label = _a.label, leftElement = _a.leftElement, menuItemRefs = _a.menuItemRefs, onSelectItem = _a.onSelectItem, value = _a.value, rest = __rest(_a, ["isMultiSelect", "canSelectAll", "children", "closeOnSelect", "groupLabel", "handleKeyboardNavigation", "isDisabled", "isSelected", "itemIndex", "label", "leftElement", "menuItemRefs", "onSelectItem", "value"]);
6589
- // TODO: Add truncated text functionality with tooltip on hover
6590
- var colors = useTheme().colors;
6591
- var onClose = react.useMenuState().onClose;
6592
- var handleSelect = React.useCallback(function () {
6593
- if (isDisabled)
6594
- return;
6595
- if (value && onSelectItem) {
6596
- onSelectItem(value);
6597
- }
6598
- if (closeOnSelect) {
6599
- onClose();
6600
- }
6601
- }, [value, onSelectItem, onClose, closeOnSelect, isDisabled]);
6602
- return (React__default["default"].createElement(react.Box, __assign({}, MenuItemConfig, { className: "menu-list__item", onClick: handleSelect, onKeyDown: function (e) { return handleKeyboardNavigation(e, false); }, tabIndex: parseInt(canSelectAll ? (itemIndex += 2) : itemIndex), ref: function (el) {
6603
- return menuItemRefs && itemIndex ? (menuItemRefs.current[parseInt(itemIndex)] = el) : null;
6604
- },
6605
- // @ts-ignore
6606
- disabled: isDisabled }, rest), children ? (children) : (React__default["default"].createElement(react.HStack, { spacing: "12px", minH: "21px" },
6607
- isMultiSelect && (React__default["default"].createElement(react.Box, { width: "12px", height: "12px", borderRadius: "12px", position: "relative", background: colors.background.grayDark, className: "menu-list__item-checkbox" },
6608
- React__default["default"].createElement(react.Box, { position: "absolute", top: "-2px", left: "-2px" }, isSelected && React__default["default"].createElement(Icon, { name: "checkmarkCircle", color: "success", size: "sm" })))),
6609
- leftElement && React__default["default"].createElement(react.Box, { className: "menu-list__item-leftElement" }, leftElement),
6610
- React__default["default"].createElement(react.Box, { className: "menu-list__item-label" }, label)))));
6611
- };
6612
-
6613
- var MenuSearchBar = function (_a) {
6614
- var handleKeyboardNavigation = _a.handleKeyboardNavigation, menuItems = _a.menuItems, onSearchCallback = _a.onSearchCallback, searchInputRef = _a.searchInputRef, setFilteredMenuItems = _a.setFilteredMenuItems, _b = _a.placeholder, placeholder = _b === void 0 ? 'Search...' : _b;
6615
- var handleSearch = React.useCallback(function (e) {
6616
- var searchInput = e.target.value;
6617
- if (searchInput === '' || !searchInput) {
6618
- setFilteredMenuItems(menuItems);
6619
- }
6620
- else {
6621
- var filterdItems = menuItems.filter(function (item) { var _a; return (_a = item.label) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(searchInput.toLowerCase()); });
6622
- setFilteredMenuItems(filterdItems);
6623
- }
6624
- if (onSearchCallback) {
6625
- onSearchCallback(e);
6626
- }
6627
- }, [menuItems, onSearchCallback, setFilteredMenuItems]);
6628
- return (React__default["default"].createElement(WrappedTextInput, { className: "menu-list__searchbar", placeholder: placeholder, onChange: handleSearch, mt: 1, onKeyDown: function (e) { return handleKeyboardNavigation(e, true); }, size: "sm", ref: searchInputRef }));
6629
- };
6630
-
6631
- var MenuSelectAllButtons = function (_a) {
6632
- var groupName = _a.groupName, handleToggleAllItems = _a.handleToggleAllItems, hasSelectedItems = _a.hasSelectedItems, isGrouped = _a.isGrouped;
6633
- if (isGrouped) {
6634
- return (React__default["default"].createElement(react.Box, { textAlign: "right", w: "50%", className: "menu-list-item__select-all-button" }, hasSelectedItems ? (React__default["default"].createElement(Button, { variant: "ghostNeutral", iconName: "arrowCircle", size: "xs", onClick: function () { return handleToggleAllItems({ groupName: groupName, clear: true }); }, isDisabled: !hasSelectedItems }, "Clear all")) : (React__default["default"].createElement(Button, { variant: "ghost", size: "xs", onClick: function () { return handleToggleAllItems({ groupName: groupName, clear: false }); } }, "Select all"))));
6635
- }
6636
- return (React__default["default"].createElement(react.Box, { mt: "8px", className: "menu-list__select-all-buttons" },
6637
- React__default["default"].createElement(react.Flex, { justifyContent: "space-between" },
6638
- React__default["default"].createElement(Button, { variant: "ghost", size: "xs", onClick: function () { return handleToggleAllItems({ clear: false }); } }, "Select all"),
6639
- React__default["default"].createElement(Button, { variant: "ghostNeutral", iconName: "arrowCircle", size: "xs", onClick: function () { return handleToggleAllItems({ clear: true }); }, isDisabled: !hasSelectedItems }, "Clear all"))));
6640
- };
6641
-
6642
- var MenuList = function (_a) {
6643
- var _b = _a.canSelectAll, canSelectAll = _b === void 0 ? false : _b, _c = _a.canSelectGroups, canSelectGroups = _c === void 0 ? false : _c, children = _a.children, _d = _a.isGrouped, isGrouped = _d === void 0 ? false : _d, isMatchWidthSet = _a.isMatchWidthSet, _e = _a.isMultiSelect, isMultiSelect = _e === void 0 ? false : _e, _f = _a.isSearchable, isSearchable = _f === void 0 ? false : _f, menuItems = _a.menuItems, onMenuItemSelect = _a.onMenuItemSelect, onMenuItemSelectAll = _a.onMenuItemSelectAll, searchPlaceholder = _a.searchPlaceholder, _g = _a.minW, minW = _g === void 0 ? '240px' : _g, maxW = _a.maxW, _h = _a.maxH, maxH = _h === void 0 ? '480px' : _h, rest = __rest(_a, ["canSelectAll", "canSelectGroups", "children", "isGrouped", "isMatchWidthSet", "isMultiSelect", "isSearchable", "menuItems", "onMenuItemSelect", "onMenuItemSelectAll", "searchPlaceholder", "minW", "maxW", "maxH"]);
6644
- var _j = useMenuContext(), filteredMenuItems = _j.filteredMenuItems, setFilteredMenuItems = _j.setFilteredMenuItems, groups = _j.groups, setGroups = _j.setGroups, focusedItemIndex = _j.focusedItemIndex, setFocusedItemIndex = _j.setFocusedItemIndex, searchInputRef = _j.searchInputRef, menuItemRefs = _j.menuItemRefs;
6645
- var focusNextListItem = React.useCallback(function (direction) {
6646
- var _a, _b;
6647
- if (!(menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current))
6648
- return;
6649
- var isFirstOption = focusedItemIndex === 0;
6650
- var isLastOption = focusedItemIndex === (menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current.length) - 1;
6651
- var newIndex = -1;
6652
- if (direction === 'ArrowDown') {
6653
- if (isLastOption) {
6654
- if (isSearchable) {
6655
- (_a = searchInputRef === null || searchInputRef === void 0 ? void 0 : searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
6656
- setFocusedItemIndex(-1);
6657
- return;
6658
- }
6659
- newIndex = 0;
6660
- }
6661
- else {
6662
- newIndex = focusedItemIndex + 1;
6663
- }
6664
- }
6665
- else if (direction === 'ArrowUp') {
6666
- if (isFirstOption) {
6667
- if (isSearchable) {
6668
- (_b = searchInputRef === null || searchInputRef === void 0 ? void 0 : searchInputRef.current) === null || _b === void 0 ? void 0 : _b.focus();
6669
- setFocusedItemIndex(-1);
6670
- return;
6671
- }
6672
- newIndex = menuItemRefs.current.length - 1;
6673
- }
6674
- else {
6675
- newIndex = focusedItemIndex - 1;
6676
- }
6677
- }
6678
- var nextListItem = menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current[newIndex];
6679
- if (nextListItem) {
6680
- nextListItem === null || nextListItem === void 0 ? void 0 : nextListItem.focus();
6681
- setFocusedItemIndex(newIndex);
6682
- }
6683
- else {
6684
- setFocusedItemIndex(-1);
6685
- }
6686
- }, [focusedItemIndex, isSearchable, menuItemRefs, searchInputRef, setFocusedItemIndex]);
6687
- var handleKeyboardNavigation = React.useCallback(function (e, elementIsInputField) {
6688
- e.persist();
6689
- if (!(menuItemRefs === null || menuItemRefs === void 0 ? void 0 : menuItemRefs.current))
6690
- return;
6691
- if (e.key === 'ArrowDown' || e.key === 'Tab') {
6692
- focusNextListItem('ArrowDown');
6693
- }
6694
- if (e.key === 'ArrowUp') {
6695
- focusNextListItem('ArrowUp');
6696
- }
6697
- if (e.key === 'Enter') {
6698
- e.preventDefault();
6699
- e.target.click();
6700
- }
6701
- }, [focusNextListItem, menuItemRefs]);
6702
- var handleToggleSingleItem = React.useCallback(function (selectedValue) {
6703
- if (filteredMenuItems) {
6704
- var _filteredMenuItemsCopy = __spreadArray([], __read(filteredMenuItems), false);
6705
- var selectedItem = _filteredMenuItemsCopy.find(function (item) { return item.value === selectedValue; });
6706
- if (!isMultiSelect) {
6707
- _filteredMenuItemsCopy.filter(function (item) { return item.isSelected === true; }).map(function (item) { return (item.isSelected = false); });
6708
- }
6709
- if (selectedItem) {
6710
- selectedItem.isSelected = !selectedItem.isSelected;
6711
- }
6712
- setFilteredMenuItems(_filteredMenuItemsCopy);
6713
- if (onMenuItemSelect && selectedItem) {
6714
- onMenuItemSelect(selectedItem);
6715
- }
6716
- }
6717
- }, [filteredMenuItems, isMultiSelect, onMenuItemSelect, setFilteredMenuItems]);
6718
- var handleToggleAllItems = React.useCallback(function (_a) {
6719
- var groupName = _a.groupName, _b = _a.clear, clear = _b === void 0 ? false : _b;
6720
- if (filteredMenuItems) {
6721
- var _filteredMenuItemsCopy = __spreadArray([], __read(filteredMenuItems), false);
6722
- var value_1 = [];
6723
- _filteredMenuItemsCopy.forEach(function (item) {
6724
- if (groupName) {
6725
- if (groupName === item.groupLabel) {
6726
- item.isSelected = !clear;
6727
- if (item.value && item.isSelected) {
6728
- value_1.push(item.value);
6729
- }
6730
- }
6731
- }
6732
- else {
6733
- item.isSelected = !clear;
6734
- if (item.value && item.isSelected) {
6735
- value_1.push(item.value);
6736
- }
6737
- }
6738
- });
6739
- setFilteredMenuItems(_filteredMenuItemsCopy);
6740
- if (onMenuItemSelectAll) {
6741
- onMenuItemSelectAll(_filteredMenuItemsCopy.filter(function (item) { return item.isSelected; }));
6742
- }
6743
- }
6744
- }, [filteredMenuItems, onMenuItemSelectAll, setFilteredMenuItems]);
6745
- React.useEffect(function () {
6746
- if (isGrouped) {
6747
- var groupNames = __spreadArray([], __read(new Set(filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.map(function (item) { return item.groupLabel; }))), false);
6748
- if (groupNames.length) {
6749
- setGroups(groupNames);
6750
- }
6751
- }
6752
- }, [filteredMenuItems, isGrouped, setGroups]);
6753
- // Return default Chakra menu if user passes in custom child elements
6754
- if (children) {
6755
- return React__default["default"].createElement(react.MenuList, __assign({}, rest), children);
6756
- }
6757
- if (!isMatchWidthSet) {
6758
- maxW = '320px';
6759
- }
6760
- return (React__default["default"].createElement(react.MenuList, __assign({}, rest, { maxW: maxW, maxH: maxH, minW: minW, overflow: "hidden auto" }),
6761
- (isSearchable || (canSelectAll && isMultiSelect)) && (React__default["default"].createElement(react.Box, { className: "menu-list__header", m: "0 12px 8px" },
6762
- isSearchable && (React__default["default"].createElement(MenuSearchBar, { handleKeyboardNavigation: handleKeyboardNavigation, menuItems: menuItems || [], searchInputRef: searchInputRef, setFilteredMenuItems: setFilteredMenuItems, placeholder: searchPlaceholder })),
6763
- canSelectAll && isMultiSelect && (React__default["default"].createElement(MenuSelectAllButtons, { handleToggleAllItems: handleToggleAllItems, hasSelectedItems: Boolean(filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.find(function (item) { return item.isSelected; })), isGrouped: false })))),
6764
- React__default["default"].createElement(react.Box, { className: "menu-list__body" }, isGrouped
6765
- ? groups === null || groups === void 0 ? void 0 : groups.map(function (groupName) {
6766
- var menuItems = filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.filter(function (item) { return item.groupLabel === groupName; });
6767
- return (React__default["default"].createElement(react.MenuOptionGroup, { key: groupName, className: "menu-list__group" },
6768
- React__default["default"].createElement(react.HStack, { minH: "32px", p: "4px 12px 4px 20px", justifyContent: "space-between" },
6769
- React__default["default"].createElement(react.Box, { textAlign: "left", className: "menu-list__group-title" },
6770
- React__default["default"].createElement(Heading, { size: "xs" }, groupName)),
6771
- isMultiSelect && canSelectGroups && (React__default["default"].createElement(MenuSelectAllButtons, { handleToggleAllItems: handleToggleAllItems, hasSelectedItems: Boolean(menuItems === null || menuItems === void 0 ? void 0 : menuItems.find(function (item) { return item.isSelected; })), isGrouped: true, groupName: groupName }))), menuItems === null || menuItems === void 0 ? void 0 :
6772
- menuItems.map(function (item, index) {
6773
- return (React__default["default"].createElement(MenuItem, { handleKeyboardNavigation: handleKeyboardNavigation, isMultiSelect: isMultiSelect, isSelected: item.isSelected, itemIndex: index.toString(), key: item.value, label: item.label, leftElement: item.leftElement, menuItemRefs: menuItemRefs, onSelectItem: handleToggleSingleItem, value: item.value, children: item.children, closeOnSelect: item.closeOnSelect }));
6774
- })));
6775
- })
6776
- : filteredMenuItems === null || filteredMenuItems === void 0 ? void 0 : filteredMenuItems.map(function (item, index) {
6777
- return (React__default["default"].createElement(MenuItem, { handleKeyboardNavigation: handleKeyboardNavigation, isMultiSelect: isMultiSelect, isSelected: item.isSelected, itemIndex: index.toString(), key: item.value, label: item.label, leftElement: item.leftElement, menuItemRefs: menuItemRefs, onSelectItem: handleToggleSingleItem, value: item.value, children: item.children, closeOnSelect: item.closeOnSelect }));
6778
- }))));
6779
- };
6780
-
6781
6840
  var BetaMenu = function (_a) {
6782
6841
  var buttonConfig = _a.buttonConfig, CustomTriggerElement = _a.CustomTriggerElement, listConfig = _a.listConfig, menuItems = _a.menuItems, onMenuClose = _a.onMenuClose, _b = _a.isLazy, isLazy = _b === void 0 ? true : _b, props = __rest(_a, ["buttonConfig", "CustomTriggerElement", "listConfig", "menuItems", "onMenuClose", "isLazy"]);
6783
6842
  return (React__default["default"].createElement(MenuProvider, { menuItems: menuItems, onMenuClose: onMenuClose },
@@ -6835,7 +6894,7 @@ var ModalFooter = function (_a) {
6835
6894
  };
6836
6895
 
6837
6896
  var ModalFooterButtons = function (_a) {
6838
- var _b = _a.submitText, submitText = _b === void 0 ? 'Submit' : _b, isLoading = _a.isLoading, isDestructive = _a.isDestructive; _a.children; var onSubmit = _a.onSubmit, _c = _a.allowCancel, allowCancel = _c === void 0 ? true : _c, onCancel = _a.onCancel, rest = __rest(_a, ["submitText", "isLoading", "isDestructive", "children", "onSubmit", "allowCancel", "onCancel"]);
6897
+ var _b = _a.submitText, submitText = _b === void 0 ? 'Submit' : _b, isLoading = _a.isLoading, isDisabled = _a.isDisabled, isDestructive = _a.isDestructive; _a.children; var onSubmit = _a.onSubmit, _c = _a.allowCancel, allowCancel = _c === void 0 ? true : _c, onCancel = _a.onCancel, rest = __rest(_a, ["submitText", "isLoading", "isDisabled", "isDestructive", "children", "onSubmit", "allowCancel", "onCancel"]);
6839
6898
  var onClose = react.useModalContext().onClose;
6840
6899
  var handleCancel = function () {
6841
6900
  if (onCancel) {
@@ -6847,7 +6906,7 @@ var ModalFooterButtons = function (_a) {
6847
6906
  React__default["default"].createElement(react.Flex, { w: "100%" },
6848
6907
  allowCancel && (React__default["default"].createElement(Button, { variant: "tertiary", onClick: handleCancel }, "Cancel")),
6849
6908
  React__default["default"].createElement(react.Spacer, null),
6850
- React__default["default"].createElement(Button, { onClick: onSubmit, isLoading: isLoading, variant: isDestructive ? 'primaryDestructive' : 'primary' }, submitText))));
6909
+ React__default["default"].createElement(Button, { onClick: onSubmit, isLoading: isLoading, isDisabled: isDisabled, variant: isDestructive ? 'primaryDestructive' : 'primary' }, submitText))));
6851
6910
  };
6852
6911
 
6853
6912
  // @ts-ignore