@sprinklrjs/spaceweb 14.13.1 → 14.14.0

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 (72) hide show
  1. package/a11y/accessibilityIsolation.d.ts +5 -0
  2. package/a11y/accessibilityIsolation.js +12 -0
  3. package/asyncSelect/hooks/useAsyncSelect.d.ts +54 -0
  4. package/asyncSelect/hooks/useGroupedAsyncSelect.d.ts +54 -0
  5. package/baseui/modal/modal.d.ts +4 -0
  6. package/baseui/modal/modal.js +24 -2
  7. package/baseui/select/default-props.d.ts +1 -0
  8. package/baseui/select/default-props.js +2 -0
  9. package/baseui/select/select-component.d.ts +4 -0
  10. package/baseui/select/select-component.js +14 -3
  11. package/baseui/select/stateful-select.d.ts +1 -0
  12. package/baseui/select/types.d.ts +5 -0
  13. package/esm/a11y/accessibilityIsolation.d.ts +5 -0
  14. package/esm/a11y/accessibilityIsolation.js +8 -0
  15. package/esm/asyncSelect/hooks/useAsyncSelect.d.ts +54 -0
  16. package/esm/asyncSelect/hooks/useGroupedAsyncSelect.d.ts +54 -0
  17. package/esm/baseui/modal/modal.d.ts +4 -0
  18. package/esm/baseui/modal/modal.js +24 -2
  19. package/esm/baseui/select/default-props.d.ts +1 -0
  20. package/esm/baseui/select/default-props.js +2 -0
  21. package/esm/baseui/select/select-component.d.ts +4 -0
  22. package/esm/baseui/select/select-component.js +12 -2
  23. package/esm/baseui/select/stateful-select.d.ts +1 -0
  24. package/esm/baseui/select/types.d.ts +5 -0
  25. package/esm/list/list-item.d.ts +1 -1
  26. package/esm/list/list-item.js +11 -4
  27. package/esm/list/types.d.ts +2 -2
  28. package/esm/list/useListItemTooltip.d.ts +10 -0
  29. package/esm/list/useListItemTooltip.js +38 -0
  30. package/esm/locale/en_US.js +1 -0
  31. package/esm/menu/StatefulSubMenu.d.ts +1 -1
  32. package/esm/menu/SubMenu.d.ts +1 -1
  33. package/esm/menu/menu-item.d.ts +1 -1
  34. package/esm/menu/menu-item.js +2 -2
  35. package/esm/select/index.d.ts +1 -1
  36. package/esm/select/index.js +1 -1
  37. package/esm/select/locale.d.ts +1 -0
  38. package/esm/select/multi-value.d.ts +1 -0
  39. package/esm/select/multi-value.js +4 -3
  40. package/esm/select/selectMenuAdapter/CollapsibleSelectMenu.d.ts +1 -1
  41. package/esm/select/selectMenuAdapter/CollapsibleSelectMenu.js +28 -7
  42. package/esm/select/selectMenuAdapter/SelectMenuItem.d.ts +2 -2
  43. package/esm/select/selectMenuAdapter/SelectMenuItem.js +13 -6
  44. package/esm/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.d.ts +22 -0
  45. package/esm/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.js +113 -0
  46. package/esm/select/styled-component.js +16 -6
  47. package/esm/select/types.d.ts +1 -0
  48. package/list/list-item.d.ts +1 -1
  49. package/list/list-item.js +10 -3
  50. package/list/types.d.ts +2 -2
  51. package/list/useListItemTooltip.d.ts +10 -0
  52. package/list/useListItemTooltip.js +42 -0
  53. package/locale/en_US.js +1 -0
  54. package/menu/StatefulSubMenu.d.ts +1 -1
  55. package/menu/SubMenu.d.ts +1 -1
  56. package/menu/menu-item.d.ts +1 -1
  57. package/menu/menu-item.js +2 -2
  58. package/package.json +3 -2
  59. package/select/index.d.ts +1 -1
  60. package/select/index.js +2 -1
  61. package/select/locale.d.ts +1 -0
  62. package/select/multi-value.d.ts +1 -0
  63. package/select/multi-value.js +4 -3
  64. package/select/selectMenuAdapter/CollapsibleSelectMenu.d.ts +1 -1
  65. package/select/selectMenuAdapter/CollapsibleSelectMenu.js +27 -6
  66. package/select/selectMenuAdapter/SelectMenuItem.d.ts +2 -2
  67. package/select/selectMenuAdapter/SelectMenuItem.js +13 -6
  68. package/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.d.ts +22 -0
  69. package/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.js +117 -0
  70. package/select/styled-component.js +16 -6
  71. package/select/types.d.ts +1 -0
  72. package/tsconfig.build.tsbuildinfo +1 -1
@@ -18,10 +18,11 @@ var shouldHideSelectItemActions = function (item) {
18
18
  return Boolean(item[types_1.SELECT_ALL_ID] || item[constants_1.GROUP_SELECT_ALL_ID] || item[types_1.CLEAR_OPTION_ID] || item.isCreatable);
19
19
  };
20
20
  var SelectMenuItem = React.forwardRef(function (_a, ref) {
21
- var item = _a.item, valueKey = _a.valueKey, overrides = _a.overrides, labelKey = _a.labelKey, multi = _a.multi, selected = _a.selected, getItemLabel = _a.getItemLabel, onItemSelect = _a.onItemSelect, restProps = tslib_1.__rest(_a, ["item", "valueKey", "overrides", "labelKey", "multi", "selected", "getItemLabel", "onItemSelect"]);
22
- var _b = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.MenuItem, menu_item_1.default), 2), MenuItemOverriden = _b[0], menuItemProps = _b[1];
23
- var _c = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.Checkbox, checkbox_1.Checkbox), 2), CheckboxOverriden = _c[0], checkboxProps = _c[1];
24
- var _d = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.ListItemText, list_1.ListItemText), 2), ListItemTextOverriden = _d[0], listItemTextProps = _d[1];
21
+ var item = _a.item, valueKey = _a.valueKey, overrides = _a.overrides, labelKey = _a.labelKey, multi = _a.multi, selected = _a.selected, getItemLabel = _a.getItemLabel, onItemSelect = _a.onItemSelect, _b = _a.role, role = _b === void 0 ? 'option' : _b, restProps = tslib_1.__rest(_a, ["item", "valueKey", "overrides", "labelKey", "multi", "selected", "getItemLabel", "onItemSelect", "role"]);
22
+ var isCheckboxRole = role === 'checkbox';
23
+ var _c = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.MenuItem, menu_item_1.default), 2), MenuItemOverriden = _c[0], menuItemProps = _c[1];
24
+ var _d = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.Checkbox, checkbox_1.Checkbox), 2), CheckboxOverriden = _d[0], checkboxProps = _d[1];
25
+ var _e = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.ListItemText, list_1.ListItemText), 2), ListItemTextOverriden = _e[0], listItemTextProps = _e[1];
25
26
  var handleItemSelect = (0, react_1.useCallback)(function (event) { return onItemSelect({ item: item, event: event }); }, [item, onItemSelect]);
26
27
  var textOverrides = listItemTextProps === null || listItemTextProps === void 0 ? void 0 : listItemTextProps.overrides;
27
28
  var listItemTextOverrides = (0, react_1.useMemo)(function () {
@@ -34,14 +35,20 @@ var SelectMenuItem = React.forwardRef(function (_a, ref) {
34
35
  var id = (0, useUniqueId_1.default)();
35
36
  var checkboxPropsOverrides = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.overrides;
36
37
  var checkboxOverrides = (0, react_1.useMemo)(function () {
37
- return (0, overrides_1.mergeOverrides)({ Input: { props: { 'aria-labelledby': id, tabIndex: -1 } }, Label: { className: 'hidden' } }, checkboxPropsOverrides);
38
+ return (0, overrides_1.mergeOverrides)({
39
+ Input: {
40
+ props: { 'aria-labelledby': id, tabIndex: -1 },
41
+ className: 'invisible',
42
+ },
43
+ Label: { className: 'hidden' },
44
+ }, checkboxPropsOverrides);
38
45
  }, [id, checkboxPropsOverrides]);
39
46
  // Passes intent to override intent from useContextualFormProps,
40
47
  // see: https://prod-gitlab.sprinklr.com/sprinklr/frontend/spaceweb/-/issues/282
41
48
  var startEnhancer = (0, react_1.useMemo)(function () {
42
49
  return multi && ((0, jsx_runtime_1.jsx)(CheckboxOverriden, tslib_1.__assign({ checked: selected, size: "medium", disabled: item.disabled, intent: "default" }, checkboxProps, { overrides: checkboxOverrides })));
43
50
  }, [multi, CheckboxOverriden, selected, item.disabled, checkboxProps, checkboxOverrides]);
44
- var menuItemEl = ((0, jsx_runtime_1.jsx)(MenuItemOverriden, tslib_1.__assign({ role: "option", "aria-selected": selected,
51
+ var menuItemEl = ((0, jsx_runtime_1.jsx)(MenuItemOverriden, tslib_1.__assign({ role: role }, (isCheckboxRole ? { 'aria-checked': selected } : { 'aria-selected': selected }), {
45
52
  // for Multi Select variant do not show selected styles
46
53
  selected: multi ? false : selected, onClick: handleItemSelect, startEnhancer: startEnhancer, disabled: item.disabled, "$multi": multi, tabIndex: -1, "$item": item, "$valueKey": valueKey, "$labelKey": labelKey, ref: ref, id: id, tooltipContent: item.tooltipContent, hideInlineActions: shouldHideSelectItemActions(item) }, restProps, menuItemProps, { children: (0, jsx_runtime_1.jsx)(ListItemTextOverriden, tslib_1.__assign({ "$multi": multi, "$item": item, "$labelKey": labelKey }, listItemTextProps, { overrides: listItemTextOverrides }, { children: getItemLabel(item) })) })));
47
54
  return item.disabled && item.disabledTooltipConfig ? ((0, jsx_runtime_1.jsx)(tooltip_1.ActionableTooltip, tslib_1.__assign({}, item.disabledTooltipConfig, { children: menuItemEl }))) : (menuItemEl);
@@ -0,0 +1,22 @@
1
+ import type { Dispatch, MutableRefObject, RefObject, SetStateAction } from 'react';
2
+ import type { Item, OnItemSelectFn } from '../../../baseui/menu/types';
3
+ import type { MenuRef } from '../../../menu/types';
4
+ import type { GroupConfig } from '../types';
5
+ type UseRootSelectAllKeyboardNavParams = {
6
+ menuRef: RefObject<MenuRef>;
7
+ selectAllItem: Item | null;
8
+ ownerDocument: Document | undefined;
9
+ expandedGroupId: string | undefined;
10
+ setExpandedGroupId: Dispatch<SetStateAction<string | undefined>>;
11
+ groupConfig: GroupConfig;
12
+ onItemSelect?: OnItemSelectFn;
13
+ inputElement?: HTMLInputElement | null;
14
+ isFirstItemHighlighted: MutableRefObject<boolean>;
15
+ };
16
+ type UseRootSelectAllKeyboardNavReturn = {
17
+ selectAllItemRef: RefObject<HTMLElement | null>;
18
+ isRootSelectAllHighlighted: boolean;
19
+ leaveRootSelectAllHighlight: () => void;
20
+ };
21
+ export declare const useRootSelectAllKeyboardNav: ({ menuRef, selectAllItem, ownerDocument, expandedGroupId, setExpandedGroupId, groupConfig, onItemSelect, inputElement, isFirstItemHighlighted, }: UseRootSelectAllKeyboardNavParams) => UseRootSelectAllKeyboardNavReturn;
22
+ export {};
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRootSelectAllKeyboardNav = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var react_1 = require("react");
6
+ var helpers_1 = require("../../../menu/helpers");
7
+ var stopKeyboardEvent = function (event) {
8
+ event.preventDefault();
9
+ event.stopPropagation();
10
+ };
11
+ var isFirstHighlightableInMenu = function (menu, highlightedItem) {
12
+ return (0, helpers_1.getNextItemIndexToHighlight)(highlightedItem, menu, helpers_1.prevItem) === highlightedItem;
13
+ };
14
+ var isFirstMenuItemHighlighted = function (menu, isFirstItemHighlighted) {
15
+ var highlightedMenuItem = menu === null || menu === void 0 ? void 0 : menu.querySelector('[data-highlighted="true"]');
16
+ if (menu && highlightedMenuItem && (0, helpers_1.canHighlightItem)(highlightedMenuItem)) {
17
+ return isFirstHighlightableInMenu(menu, highlightedMenuItem);
18
+ }
19
+ return isFirstItemHighlighted.current;
20
+ };
21
+ var useRootSelectAllKeyboardNav = function (_a) {
22
+ var menuRef = _a.menuRef, selectAllItem = _a.selectAllItem, ownerDocument = _a.ownerDocument, expandedGroupId = _a.expandedGroupId, setExpandedGroupId = _a.setExpandedGroupId, groupConfig = _a.groupConfig, onItemSelect = _a.onItemSelect, inputElement = _a.inputElement, isFirstItemHighlighted = _a.isFirstItemHighlighted;
23
+ var selectAllItemRef = (0, react_1.useRef)(null);
24
+ var _b = tslib_1.__read((0, react_1.useState)(!!selectAllItem), 2), isRootSelectAllHighlighted = _b[0], setIsRootSelectAllHighlighted = _b[1];
25
+ var clearMenuHighlight = (0, react_1.useCallback)(function () {
26
+ var _a, _b;
27
+ var menu = menuRef.current;
28
+ if (!menu)
29
+ return;
30
+ (_a = menu.turnOffKeyboardNavigation) === null || _a === void 0 ? void 0 : _a.call(menu);
31
+ (_b = menu.setHighlightedItem) === null || _b === void 0 ? void 0 : _b.call(menu, null);
32
+ }, [menuRef]);
33
+ var highlightFirstMenuItem = (0, react_1.useCallback)(function () {
34
+ var _a, _b;
35
+ var menu = menuRef.current;
36
+ if (!menu)
37
+ return;
38
+ (_a = menu.turnOnKeyboardNavigation) === null || _a === void 0 ? void 0 : _a.call(menu);
39
+ var firstHighlightableItem = (0, helpers_1.getFirstHighlightableElement)(menu).firstHighlightableItem;
40
+ var itemToHighlight = firstHighlightableItem;
41
+ (_b = menu.setHighlightedItem) === null || _b === void 0 ? void 0 : _b.call(menu, itemToHighlight);
42
+ }, [menuRef]);
43
+ var highlightRootSelectAll = (0, react_1.useCallback)(function () {
44
+ clearMenuHighlight();
45
+ setIsRootSelectAllHighlighted(true);
46
+ }, [clearMenuHighlight]);
47
+ var leaveRootSelectAllHighlight = (0, react_1.useCallback)(function () {
48
+ var _a, _b;
49
+ setIsRootSelectAllHighlighted(false);
50
+ (_b = (_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.turnOnKeyboardNavigation) === null || _b === void 0 ? void 0 : _b.call(_a);
51
+ }, [menuRef]);
52
+ (0, react_1.useEffect)(function () {
53
+ if (!selectAllItem || !ownerDocument)
54
+ return undefined;
55
+ var captureKeydownHandler = function (event) {
56
+ var _a;
57
+ if (isRootSelectAllHighlighted && event.key === 'ArrowDown' && !event.shiftKey) {
58
+ stopKeyboardEvent(event);
59
+ leaveRootSelectAllHighlight();
60
+ var firstGroupId = (_a = groupConfig[0]) === null || _a === void 0 ? void 0 : _a.id;
61
+ if (firstGroupId && expandedGroupId !== firstGroupId) {
62
+ setExpandedGroupId(firstGroupId);
63
+ }
64
+ highlightFirstMenuItem();
65
+ return;
66
+ }
67
+ var expandedGroupIndex = groupConfig.findIndex(function (group) { return group.id === expandedGroupId; });
68
+ if (event.key === 'ArrowUp' &&
69
+ !event.shiftKey &&
70
+ expandedGroupIndex === 0 &&
71
+ isFirstMenuItemHighlighted(menuRef.current, isFirstItemHighlighted)) {
72
+ stopKeyboardEvent(event);
73
+ highlightRootSelectAll();
74
+ return;
75
+ }
76
+ if (isRootSelectAllHighlighted && event.key === 'Enter' && event.keyCode !== 229) {
77
+ stopKeyboardEvent(event);
78
+ onItemSelect === null || onItemSelect === void 0 ? void 0 : onItemSelect({ item: selectAllItem, event: event });
79
+ }
80
+ };
81
+ ownerDocument.body.addEventListener('keydown', captureKeydownHandler, { capture: true });
82
+ return function () {
83
+ ownerDocument.body.removeEventListener('keydown', captureKeydownHandler, { capture: true });
84
+ };
85
+ }, [
86
+ menuRef,
87
+ ownerDocument,
88
+ selectAllItem,
89
+ expandedGroupId,
90
+ groupConfig,
91
+ isRootSelectAllHighlighted,
92
+ setExpandedGroupId,
93
+ onItemSelect,
94
+ highlightRootSelectAll,
95
+ highlightFirstMenuItem,
96
+ leaveRootSelectAllHighlight,
97
+ isFirstItemHighlighted,
98
+ ]);
99
+ (0, react_1.useEffect)(function () {
100
+ var _a;
101
+ var selectAllItemId = (_a = selectAllItemRef.current) === null || _a === void 0 ? void 0 : _a.id;
102
+ if (!isRootSelectAllHighlighted || !inputElement || !selectAllItemId)
103
+ return undefined;
104
+ inputElement.setAttribute('aria-activedescendant', selectAllItemId);
105
+ return function () {
106
+ if (inputElement.getAttribute('aria-activedescendant') === selectAllItemId) {
107
+ inputElement.removeAttribute('aria-activedescendant');
108
+ }
109
+ };
110
+ }, [isRootSelectAllHighlighted, inputElement]);
111
+ return {
112
+ selectAllItemRef: selectAllItemRef,
113
+ isRootSelectAllHighlighted: isRootSelectAllHighlighted,
114
+ leaveRootSelectAllHighlight: leaveRootSelectAllHighlight,
115
+ };
116
+ };
117
+ exports.useRootSelectAllKeyboardNav = useRootSelectAllKeyboardNav;
@@ -45,7 +45,7 @@ exports.StyledInput = (0, style_1.styled)('input', 'bg-transparent border-none i
45
45
  });
46
46
  var StyledOverlayContentContainer = (0, style_1.styled)('div', 'overflow-auto rounded-inherit w-[--sw-width]');
47
47
  exports.StyledOverlayContentContainer = StyledOverlayContentContainer;
48
- var getCommaSeparatedValues = function (value, limitTags, labelKey, locale) {
48
+ var getCommaSeparatedValues = function (value, limitTags, labelKey, locale, multi) {
49
49
  if (limitTags === void 0) { limitTags = Number(Infinity); }
50
50
  var _limitTags = limitTags < 0 ? Number(Infinity) : limitTags;
51
51
  var commaSeparatedValues = value === null || value === void 0 ? void 0 : value.slice(0, _limitTags).map(function (val) { return val[labelKey]; });
@@ -54,16 +54,26 @@ var getCommaSeparatedValues = function (value, limitTags, labelKey, locale) {
54
54
  commaSeparatedValues.push("".concat("+".concat(extraTagNumber, " ").concat(extraTagNumber === 1 ? locale.select.item : locale.select.items)));
55
55
  }
56
56
  var _commaSeparatedValues = commaSeparatedValues === null || commaSeparatedValues === void 0 ? void 0 : commaSeparatedValues.join(',');
57
- return value && value.length > 0
58
- ? "".concat((0, i18n_interpolation_1.default)(locale.select.selectedValuesPrefix, { values: _commaSeparatedValues }), ".")
59
- : '';
57
+ if (!(value === null || value === void 0 ? void 0 : value.length)) {
58
+ return '';
59
+ }
60
+ if (multi) {
61
+ var count = value.length;
62
+ var countLabel = count === 1 ? locale.select.item : locale.select.items;
63
+ return "".concat((0, i18n_interpolation_1.default)(locale.select.selectedMultiValuesPrefix, {
64
+ count: String(count),
65
+ countLabel: countLabel,
66
+ values: _commaSeparatedValues,
67
+ }), ".");
68
+ }
69
+ return "".concat((0, i18n_interpolation_1.default)(locale.select.selectedValuesPrefix, { values: _commaSeparatedValues }), ".");
60
70
  };
61
71
  var InputContainer = function (_a) {
62
72
  var _b;
63
73
  var size = _a.size, $value = _a.$value, $labelKey = _a.$labelKey, placeholder = _a.placeholder, $limitTags = _a.$limitTags, props = tslib_1.__rest(_a, ["size", "$value", "$labelKey", "placeholder", "$limitTags"]);
64
74
  var locale = (0, locale_1.useLocale)();
65
75
  var listboxId = (0, SelectIdsContext_1.useSelectIds)().listboxId;
66
- var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale);
76
+ var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale, props.$multi);
67
77
  var baseAriaDescribedBy = (_b = props['aria-describedby']) !== null && _b !== void 0 ? _b : '';
68
78
  var selectedValuesId = (0, useUniqueId_1.default)();
69
79
  var ariaDescribedBy = commaSeparatedValues ? "".concat(selectedValuesId, " ").concat(baseAriaDescribedBy) : baseAriaDescribedBy;
@@ -83,7 +93,7 @@ var Input = (0, react_1.forwardRef)(function (_a, ref) {
83
93
  var placeholder = _a.placeholder, $value = _a.$value, $labelKey = _a.$labelKey, _c = _a.$limitTags, $limitTags = _c === void 0 ? Number(Infinity) : _c, props = tslib_1.__rest(_a, ["placeholder", "$value", "$labelKey", "$limitTags"]);
84
94
  var locale = (0, locale_1.useLocale)();
85
95
  var _d = (0, SelectIdsContext_1.useSelectIds)(), listboxId = _d.listboxId, inputId = _d.inputId;
86
- var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale);
96
+ var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale, props.$multi);
87
97
  var baseAriaDescribedBy = (_b = props['aria-describedby']) !== null && _b !== void 0 ? _b : '';
88
98
  var selectedValuesId = (0, useUniqueId_1.default)();
89
99
  var ariaDescribedBy = commaSeparatedValues ? "".concat(selectedValuesId, " ").concat(baseAriaDescribedBy) : baseAriaDescribedBy;
package/select/types.d.ts CHANGED
@@ -130,6 +130,7 @@ export type MultiValueProps = Omit<TagProps, 'overrides'> & SharedProps & {
130
130
  $isContainerFocused?: boolean;
131
131
  $valueByIdMap: Record<string, Option>;
132
132
  $valueKey: string;
133
+ ariaLabel?: string;
133
134
  value: Option;
134
135
  removeValue: RemoveValue;
135
136
  selectSize: Size;