@sprinklrjs/spaceweb 14.13.2 → 14.14.1

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 (85) 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/banner/banner.js +4 -4
  6. package/baseui/modal/modal.d.ts +4 -0
  7. package/baseui/modal/modal.js +24 -2
  8. package/baseui/select/default-props.d.ts +1 -0
  9. package/baseui/select/default-props.js +2 -0
  10. package/baseui/select/select-component.d.ts +4 -0
  11. package/baseui/select/select-component.js +14 -3
  12. package/baseui/select/stateful-select.d.ts +1 -0
  13. package/baseui/select/types.d.ts +5 -0
  14. package/esm/a11y/accessibilityIsolation.d.ts +5 -0
  15. package/esm/a11y/accessibilityIsolation.js +8 -0
  16. package/esm/asyncSelect/hooks/useAsyncSelect.d.ts +54 -0
  17. package/esm/asyncSelect/hooks/useGroupedAsyncSelect.d.ts +54 -0
  18. package/esm/banner/banner.js +3 -3
  19. package/esm/baseui/modal/modal.d.ts +4 -0
  20. package/esm/baseui/modal/modal.js +24 -2
  21. package/esm/baseui/select/default-props.d.ts +1 -0
  22. package/esm/baseui/select/default-props.js +2 -0
  23. package/esm/baseui/select/select-component.d.ts +4 -0
  24. package/esm/baseui/select/select-component.js +12 -2
  25. package/esm/baseui/select/stateful-select.d.ts +1 -0
  26. package/esm/baseui/select/types.d.ts +5 -0
  27. package/esm/form-control/form-control.js +3 -3
  28. package/esm/icon/components/{alert-solid.d.ts → error-solid.d.ts} +1 -1
  29. package/esm/icon/components/error-solid.js +8 -0
  30. package/{icon/components/alert-solid.d.ts → esm/icon/components/warning-clr.d.ts} +1 -1
  31. package/esm/icon/components/warning-clr.js +8 -0
  32. package/esm/menu/menu-item.js +2 -2
  33. package/esm/modal/modal.d.ts +3 -3
  34. package/esm/modal/modal.js +3 -3
  35. package/esm/progressSteps/step.js +2 -2
  36. package/esm/select/index.d.ts +1 -1
  37. package/esm/select/index.js +1 -1
  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.js +28 -7
  41. package/esm/select/selectMenuAdapter/SelectMenuItem.d.ts +1 -1
  42. package/esm/select/selectMenuAdapter/SelectMenuItem.js +13 -6
  43. package/esm/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.d.ts +22 -0
  44. package/esm/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.js +113 -0
  45. package/esm/select/types.d.ts +1 -0
  46. package/esm/snackbar/constants.js +3 -3
  47. package/esm/time-range-picker/RangeSelectorContainer.js +2 -4
  48. package/form-control/form-control.js +4 -4
  49. package/{esm/icon/components/alert.d.ts → icon/components/error-solid.d.ts} +1 -1
  50. package/icon/components/{alert-solid.js → error-solid.js} +3 -3
  51. package/{esm/icon/components/error.d.ts → icon/components/warning-clr.d.ts} +1 -1
  52. package/icon/components/warning-clr.js +11 -0
  53. package/menu/menu-item.js +2 -2
  54. package/modal/modal.d.ts +3 -3
  55. package/modal/modal.js +4 -4
  56. package/package.json +3 -2
  57. package/progressSteps/step.js +2 -2
  58. package/select/index.d.ts +1 -1
  59. package/select/index.js +2 -1
  60. package/select/multi-value.d.ts +1 -0
  61. package/select/multi-value.js +4 -3
  62. package/select/selectMenuAdapter/CollapsibleSelectMenu.js +27 -6
  63. package/select/selectMenuAdapter/SelectMenuItem.d.ts +1 -1
  64. package/select/selectMenuAdapter/SelectMenuItem.js +13 -6
  65. package/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.d.ts +22 -0
  66. package/select/selectMenuAdapter/hooks/useRootSelectAllKeyboardNav.js +117 -0
  67. package/select/types.d.ts +1 -0
  68. package/snackbar/constants.js +4 -4
  69. package/time-range-picker/RangeSelectorContainer.js +3 -5
  70. package/tsconfig.build.tsbuildinfo +1 -1
  71. package/esm/icon/components/alert-solid.js +0 -8
  72. package/esm/icon/components/alert.js +0 -8
  73. package/esm/icon/components/error-clr.d.ts +0 -3
  74. package/esm/icon/components/error-clr.js +0 -8
  75. package/esm/icon/components/error.js +0 -8
  76. package/esm/icon/components/warning-solid.d.ts +0 -3
  77. package/esm/icon/components/warning-solid.js +0 -8
  78. package/icon/components/alert.d.ts +0 -3
  79. package/icon/components/alert.js +0 -11
  80. package/icon/components/error-clr.d.ts +0 -3
  81. package/icon/components/error-clr.js +0 -11
  82. package/icon/components/error.d.ts +0 -3
  83. package/icon/components/error.js +0 -11
  84. package/icon/components/warning-solid.d.ts +0 -3
  85. package/icon/components/warning-solid.js +0 -11
@@ -0,0 +1,113 @@
1
+ import { __read } from "tslib";
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { canHighlightItem, getFirstHighlightableElement, getNextItemIndexToHighlight, prevItem, } from '../../../menu/helpers';
4
+ var stopKeyboardEvent = function (event) {
5
+ event.preventDefault();
6
+ event.stopPropagation();
7
+ };
8
+ var isFirstHighlightableInMenu = function (menu, highlightedItem) {
9
+ return getNextItemIndexToHighlight(highlightedItem, menu, prevItem) === highlightedItem;
10
+ };
11
+ var isFirstMenuItemHighlighted = function (menu, isFirstItemHighlighted) {
12
+ var highlightedMenuItem = menu === null || menu === void 0 ? void 0 : menu.querySelector('[data-highlighted="true"]');
13
+ if (menu && highlightedMenuItem && canHighlightItem(highlightedMenuItem)) {
14
+ return isFirstHighlightableInMenu(menu, highlightedMenuItem);
15
+ }
16
+ return isFirstItemHighlighted.current;
17
+ };
18
+ export var useRootSelectAllKeyboardNav = function (_a) {
19
+ 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;
20
+ var selectAllItemRef = useRef(null);
21
+ var _b = __read(useState(!!selectAllItem), 2), isRootSelectAllHighlighted = _b[0], setIsRootSelectAllHighlighted = _b[1];
22
+ var clearMenuHighlight = useCallback(function () {
23
+ var _a, _b;
24
+ var menu = menuRef.current;
25
+ if (!menu)
26
+ return;
27
+ (_a = menu.turnOffKeyboardNavigation) === null || _a === void 0 ? void 0 : _a.call(menu);
28
+ (_b = menu.setHighlightedItem) === null || _b === void 0 ? void 0 : _b.call(menu, null);
29
+ }, [menuRef]);
30
+ var highlightFirstMenuItem = useCallback(function () {
31
+ var _a, _b;
32
+ var menu = menuRef.current;
33
+ if (!menu)
34
+ return;
35
+ (_a = menu.turnOnKeyboardNavigation) === null || _a === void 0 ? void 0 : _a.call(menu);
36
+ var firstHighlightableItem = getFirstHighlightableElement(menu).firstHighlightableItem;
37
+ var itemToHighlight = firstHighlightableItem;
38
+ (_b = menu.setHighlightedItem) === null || _b === void 0 ? void 0 : _b.call(menu, itemToHighlight);
39
+ }, [menuRef]);
40
+ var highlightRootSelectAll = useCallback(function () {
41
+ clearMenuHighlight();
42
+ setIsRootSelectAllHighlighted(true);
43
+ }, [clearMenuHighlight]);
44
+ var leaveRootSelectAllHighlight = useCallback(function () {
45
+ var _a, _b;
46
+ setIsRootSelectAllHighlighted(false);
47
+ (_b = (_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.turnOnKeyboardNavigation) === null || _b === void 0 ? void 0 : _b.call(_a);
48
+ }, [menuRef]);
49
+ useEffect(function () {
50
+ if (!selectAllItem || !ownerDocument)
51
+ return undefined;
52
+ var captureKeydownHandler = function (event) {
53
+ var _a;
54
+ if (isRootSelectAllHighlighted && event.key === 'ArrowDown' && !event.shiftKey) {
55
+ stopKeyboardEvent(event);
56
+ leaveRootSelectAllHighlight();
57
+ var firstGroupId = (_a = groupConfig[0]) === null || _a === void 0 ? void 0 : _a.id;
58
+ if (firstGroupId && expandedGroupId !== firstGroupId) {
59
+ setExpandedGroupId(firstGroupId);
60
+ }
61
+ highlightFirstMenuItem();
62
+ return;
63
+ }
64
+ var expandedGroupIndex = groupConfig.findIndex(function (group) { return group.id === expandedGroupId; });
65
+ if (event.key === 'ArrowUp' &&
66
+ !event.shiftKey &&
67
+ expandedGroupIndex === 0 &&
68
+ isFirstMenuItemHighlighted(menuRef.current, isFirstItemHighlighted)) {
69
+ stopKeyboardEvent(event);
70
+ highlightRootSelectAll();
71
+ return;
72
+ }
73
+ if (isRootSelectAllHighlighted && event.key === 'Enter' && event.keyCode !== 229) {
74
+ stopKeyboardEvent(event);
75
+ onItemSelect === null || onItemSelect === void 0 ? void 0 : onItemSelect({ item: selectAllItem, event: event });
76
+ }
77
+ };
78
+ ownerDocument.body.addEventListener('keydown', captureKeydownHandler, { capture: true });
79
+ return function () {
80
+ ownerDocument.body.removeEventListener('keydown', captureKeydownHandler, { capture: true });
81
+ };
82
+ }, [
83
+ menuRef,
84
+ ownerDocument,
85
+ selectAllItem,
86
+ expandedGroupId,
87
+ groupConfig,
88
+ isRootSelectAllHighlighted,
89
+ setExpandedGroupId,
90
+ onItemSelect,
91
+ highlightRootSelectAll,
92
+ highlightFirstMenuItem,
93
+ leaveRootSelectAllHighlight,
94
+ isFirstItemHighlighted,
95
+ ]);
96
+ useEffect(function () {
97
+ var _a;
98
+ var selectAllItemId = (_a = selectAllItemRef.current) === null || _a === void 0 ? void 0 : _a.id;
99
+ if (!isRootSelectAllHighlighted || !inputElement || !selectAllItemId)
100
+ return undefined;
101
+ inputElement.setAttribute('aria-activedescendant', selectAllItemId);
102
+ return function () {
103
+ if (inputElement.getAttribute('aria-activedescendant') === selectAllItemId) {
104
+ inputElement.removeAttribute('aria-activedescendant');
105
+ }
106
+ };
107
+ }, [isRootSelectAllHighlighted, inputElement]);
108
+ return {
109
+ selectAllItemRef: selectAllItemRef,
110
+ isRootSelectAllHighlighted: isRootSelectAllHighlighted,
111
+ leaveRootSelectAllHighlight: leaveRootSelectAllHighlight,
112
+ };
113
+ };
@@ -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;
@@ -1,11 +1,11 @@
1
- import Alert from '../icon/components/alert-solid';
2
- import Warning from '../icon/components/warning-solid';
1
+ import Error from '../icon/components/error-solid';
2
+ import Warning from '../icon/components/warning-clr';
3
3
  import Tick from '../icon/components/tickCircle-solid';
4
4
  import Delete from '../icon/components/delete-solid';
5
5
  export var TRANSITION_DURATION = 1000;
6
6
  export var INTENT_TO_ICON = {
7
7
  success: Tick,
8
- error: Alert,
8
+ error: Error,
9
9
  warning: Warning,
10
10
  delete: Delete,
11
11
  };
@@ -10,7 +10,7 @@ import { Button } from '../button';
10
10
  import { StyledHeader } from './styled-component';
11
11
  import { Stack, StackItem } from '../stack';
12
12
  import DefaultTimezonePicker from './TimezonePicker';
13
- import ErrorIcon from '../icon/components/error';
13
+ import ErrorIcon from '../icon/components/error-solid';
14
14
  import { StyledFooter, StyledFooterBeforeEnhancer } from '../date-picker/styled-components';
15
15
  import { useLocale } from '../locale';
16
16
  import { getRangeError, getSelectedTimeRange, getValidRange, getMinMaxDateInTimezone, convertDateFromSystemTzToTargetTz, } from './utils';
@@ -114,9 +114,7 @@ var RangeSelectorContainer = function (_a) {
114
114
  fill: theme.spr.clrRed,
115
115
  });
116
116
  } }), _jsx(Typography, __assign({ className: "my-0", variant: "bs3" }, { children: errMsg }))] }))) : null;
117
- return (_jsxs(Box, __assign({ className: "spr-ui-01 rounded-8" }, { children: [_jsxs(Header, __assign({ "$setTimezone": setTimezone, "$onClose": props.onClose }, headerProps, { children: [_jsx(HeaderBeforeEnhancer, __assign({ variant: "heading-7", "$as": "span", className: "flex items-center" }, headerBeforeEnhancerProps, { children: locale.timeRangePicker.headerLabel })), disableTimezone ? null : (_jsx(TimezonePicker, __assign({ setTimezone: setTimezone, timezone: timezone, timezoneOptions: timezoneOptions }, timezonePickerProps, { className: ['w-0 grow max-w-md', timezonePickerProps === null || timezonePickerProps === void 0 ? void 0 : timezonePickerProps.className] })))] })), _jsx(RangeSelector, __assign({ overrides: props.overrides, timeSelect: props.timeSelect, timeRangePresets: timeRangePresets, timezone: timezone, timeRange: timeRange, preset: preset, onChange: onDateChange, adapter: adapter, peekNextMonth: props.peekNextMonth, excludeDates: props.excludeDates, filterDate: props.filterDate, minDate: minDate, maxDate: maxDate, formatString: props.formatString, locale: props.locale, fixedHeight: props.fixedHeight, monthsShown: monthsShown, hidePresetSearch: hidePresetSearch, footerContent: _jsx(Footer, __assign({ "$hasError": hasError, "$onSubmit": handleSubmit, "$onClose": props.onClose }, footerProps, { className: ['px-6 py-3 mt-2', footerProps.className] }, { children: _jsxs(Box, __assign({ className: "justify-between w-0 grow flex" }, { children: [_jsx(FooterBeforeEnhancer, __assign({}, footerBeforeEnhancerProps)), _jsxs(Stack, __assign({ direction: monthsShown === 1 ? 'vertical' : 'horizontal', gap: 3,
118
- // @ts-ignore -- CSS-in-JS
119
- className: [cx({ 'items-center': monthsShown !== 1 }), { maxWidth: 'fit-content' }] }, { children: [monthsShown === 1 ? null : errorEl, _jsxs(StackItem, __assign({ className: "flex self-end" }, { children: [(footerProps === null || footerProps === void 0 ? void 0 : footerProps.showClearButton) ? (_jsx(Button, __assign({ size: "xs", onClick: footerProps.handleClearBtnClick, variant: "secondary", "data-testid": "clear", disabled: timeRange.length === 0 }, { children: locale.timeRangePicker.clearBtnLabel }))) : (_jsx(Button, __assign({ size: "xs", onClick: props.onClose, variant: "secondary", "data-testid": "cancel" }, { children: locale.timeRangePicker.cancelBtnLabel }))), _jsx(Button, __assign({ size: "xs", className: "ml-3", onClick: handleSubmit, disabled: hasError, "data-testid": "save" }, { children: locale.timeRangePicker.saveBtnLabel }))] })), monthsShown === 1 ? errorEl : null] }))] })) })) }, rangeSelectorProps))] })));
117
+ return (_jsxs(Box, __assign({ className: "spr-ui-01 rounded-8" }, { children: [_jsxs(Header, __assign({ "$setTimezone": setTimezone, "$onClose": props.onClose }, headerProps, { children: [_jsx(HeaderBeforeEnhancer, __assign({ variant: "heading-7", "$as": "span", className: "flex items-center" }, headerBeforeEnhancerProps, { children: locale.timeRangePicker.headerLabel })), disableTimezone ? null : (_jsx(TimezonePicker, __assign({ setTimezone: setTimezone, timezone: timezone, timezoneOptions: timezoneOptions }, timezonePickerProps, { className: ['w-0 grow max-w-md', timezonePickerProps === null || timezonePickerProps === void 0 ? void 0 : timezonePickerProps.className] })))] })), _jsx(RangeSelector, __assign({ overrides: props.overrides, timeSelect: props.timeSelect, timeRangePresets: timeRangePresets, timezone: timezone, timeRange: timeRange, preset: preset, onChange: onDateChange, adapter: adapter, peekNextMonth: props.peekNextMonth, excludeDates: props.excludeDates, filterDate: props.filterDate, minDate: minDate, maxDate: maxDate, formatString: props.formatString, locale: props.locale, fixedHeight: props.fixedHeight, monthsShown: monthsShown, hidePresetSearch: hidePresetSearch, footerContent: _jsx(Footer, __assign({ "$hasError": hasError, "$onSubmit": handleSubmit, "$onClose": props.onClose }, footerProps, { className: ['px-6 py-3 mt-2', footerProps.className] }, { children: _jsxs(Box, __assign({ className: "justify-between w-0 grow flex" }, { children: [_jsx(FooterBeforeEnhancer, __assign({}, footerBeforeEnhancerProps)), _jsxs(Stack, __assign({ direction: monthsShown === 1 ? 'vertical' : 'horizontal', gap: 3, className: monthsShown !== 1 ? 'items-center' : undefined, style: { maxWidth: 'fit-content' } }, { children: [monthsShown === 1 ? null : errorEl, _jsxs(StackItem, __assign({ className: "flex self-end" }, { children: [(footerProps === null || footerProps === void 0 ? void 0 : footerProps.showClearButton) ? (_jsx(Button, __assign({ size: "xs", onClick: footerProps.handleClearBtnClick, variant: "secondary", "data-testid": "clear", disabled: timeRange.length === 0 }, { children: locale.timeRangePicker.clearBtnLabel }))) : (_jsx(Button, __assign({ size: "xs", onClick: props.onClose, variant: "secondary", "data-testid": "cancel" }, { children: locale.timeRangePicker.cancelBtnLabel }))), _jsx(Button, __assign({ size: "xs", className: "ml-3", onClick: handleSubmit, disabled: hasError, "data-testid": "save" }, { children: locale.timeRangePicker.saveBtnLabel }))] })), monthsShown === 1 ? errorEl : null] }))] })) })) }, rangeSelectorProps))] })));
120
118
  };
121
119
  RangeSelectorContainer.displayName = 'RangeSelectorContainer';
122
120
  export default RangeSelectorContainer;
@@ -10,8 +10,8 @@ var helpers_1 = require("../helpers");
10
10
  var stack_1 = require("../stack");
11
11
  var box_1 = require("../box");
12
12
  var info_icon_1 = tslib_1.__importDefault(require("./info-icon"));
13
- var warning_solid_1 = tslib_1.__importDefault(require("../icon/components/warning-solid"));
14
- var alert_solid_1 = tslib_1.__importDefault(require("../icon/components/alert-solid"));
13
+ var warning_clr_1 = tslib_1.__importDefault(require("../icon/components/warning-clr"));
14
+ var error_solid_1 = tslib_1.__importDefault(require("../icon/components/error-solid"));
15
15
  var tickCircle_solid_1 = tslib_1.__importDefault(require("../icon/components/tickCircle-solid"));
16
16
  var overrides_1 = require("../overrides");
17
17
  var tooltip_1 = require("../tooltip");
@@ -22,8 +22,8 @@ var classNames_1 = tslib_1.__importDefault(require("../classNames"));
22
22
  var generalUtils_1 = require("../utils/generalUtils");
23
23
  var addConditionalIds = classNames_1.default;
24
24
  var intentToIconMap = {
25
- error: alert_solid_1.default,
26
- warning: warning_solid_1.default,
25
+ error: error_solid_1.default,
26
+ warning: warning_clr_1.default,
27
27
  success: tickCircle_solid_1.default,
28
28
  };
29
29
  var renderWithIcon = function (intent, message) {
@@ -1,3 +1,3 @@
1
1
  import * as React from 'react';
2
2
  import type { IconProps } from '../types';
3
- export default function Alert(props: IconProps): React.ReactElement;
3
+ export default function ErrorSolid(props: IconProps): React.ReactElement;
@@ -4,8 +4,8 @@ var tslib_1 = require("tslib");
4
4
  var jsx_runtime_1 = require("react/jsx-runtime");
5
5
  var style_1 = require("../../style");
6
6
  var icon_1 = tslib_1.__importDefault(require("../icon"));
7
- function AlertSolid(props) {
7
+ function ErrorSolid(props) {
8
8
  var _a = (0, style_1.useStyle)(), theme = _a.theme, isRTL = _a.isRTL;
9
- return ((0, jsx_runtime_1.jsx)(icon_1.default, tslib_1.__assign({ viewBox: "0 0 14 14", "data-icon-name": "AlertSolid" }, props, { children: (0, jsx_runtime_1.jsx)("path", { d: "M7.063.012a6.994 6.994 0 1 0 6.994 6.994A6.996 6.996 0 0 0 7.063.012zm0 7.693a.701.701 0 0 1-.7-.699V4.21a.701.701 0 0 1 .7-.7.701.701 0 0 1 .7.7v2.797a.701.701 0 0 1-.7.7zm0 2.798a.701.701 0 0 1-.7-.7.701.701 0 0 1 .7-.699.701.701 0 0 1 .7.7.701.701 0 0 1-.7.699z" }) })));
9
+ return ((0, jsx_runtime_1.jsx)(icon_1.default, tslib_1.__assign({ viewBox: "0 0 14 14", "data-icon-name": "ErrorSolid" }, props, { children: (0, jsx_runtime_1.jsx)("path", { d: "M7.063.012a6.994 6.994 0 106.994 6.994A6.996 6.996 0 007.063.012zm0 7.693a.701.701 0 01-.7-.699V4.21a.701.701 0 01.7-.7.701.701 0 01.7.7v2.797a.701.701 0 01-.7.7zm0 2.798a.701.701 0 01-.7-.7.701.701 0 01.7-.699.701.701 0 01.7.7.701.701 0 01-.7.699z" }) })));
10
10
  }
11
- exports.default = AlertSolid;
11
+ exports.default = ErrorSolid;
@@ -1,3 +1,3 @@
1
1
  import * as React from 'react';
2
2
  import type { IconProps } from '../types';
3
- export default function Error(props: IconProps): React.ReactElement;
3
+ export default function WarningClr(props: IconProps): React.ReactElement;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var jsx_runtime_1 = require("react/jsx-runtime");
5
+ var style_1 = require("../../style");
6
+ var icon_1 = tslib_1.__importDefault(require("../icon"));
7
+ function WarningClr(props) {
8
+ var _a = (0, style_1.useStyle)(), theme = _a.theme, isRTL = _a.isRTL;
9
+ return ((0, jsx_runtime_1.jsxs)(icon_1.default, tslib_1.__assign({ viewBox: "0 0 16 16", "data-icon-name": "WarningClr" }, props, { children: [(0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M16 13.518c0 .96-.778 1.738-1.738 1.738H1.738a1.738 1.738 0 0 1-1.515-2.59L6.405 1.677l.064-.105a1.83 1.83 0 0 1 3.126.105l6.182 10.99.052.098c.112.235.171.492.171.753", clipRule: "evenodd" }), (0, jsx_runtime_1.jsx)("path", { fill: "currentColor", d: "M8 .744c.661 0 1.271.357 1.596.934l6.181 10.988.051.1a1.738 1.738 0 0 1-1.565 2.49H1.737a1.738 1.738 0 0 1-1.514-2.59L6.405 1.678l.064-.106A1.83 1.83 0 0 1 8 .744m0 1a.83.83 0 0 0-.694.376l-.03.048-6.181 10.988a.738.738 0 0 0 .643 1.1h12.525a.738.738 0 0 0 .664-1.058l-.022-.042L8.724 2.168A.83.83 0 0 0 8 1.744" }), (0, jsx_runtime_1.jsx)("path", { fill: "currentColor", fillRule: "evenodd", d: "M8 9.99a.75.75 0 0 1-.75-.75V5.868a.75.75 0 0 1 1.5 0V9.24a.75.75 0 0 1-.75.75m-.75 1.88a.75.75 0 1 0 1.5-.007.75.75 0 1 0-1.5.007", clipRule: "evenodd" })] })));
10
+ }
11
+ exports.default = WarningClr;
package/menu/menu-item.js CHANGED
@@ -89,7 +89,7 @@ function MenuActionContainer(_a) {
89
89
  }
90
90
  function buildListItemAriaProps(itemRole, selected, ChildMenu) {
91
91
  var props = {};
92
- if (selected !== undefined) {
92
+ if (selected !== undefined && itemRole !== 'checkbox') {
93
93
  props['aria-selected'] = Boolean(selected);
94
94
  }
95
95
  if (ChildMenu) {
@@ -142,7 +142,7 @@ var MenuItem = React.forwardRef(function MenuItem(_a, ref) {
142
142
  var _a, _b;
143
143
  setMenuContainerRef((_b = (_a = ownRef.current) === null || _a === void 0 ? void 0 : _a.parentElement) !== null && _b !== void 0 ? _b : null);
144
144
  }, [setMenuContainerRef]);
145
- var isItemHighlighted = highlighted || (highlightedItem !== null && highlightedItem === ownRef.current);
145
+ var isItemHighlighted = highlighted !== null && highlighted !== void 0 ? highlighted : (highlightedItem !== null && highlightedItem === ownRef.current);
146
146
  var resolvedItemActions = (0, react_1.useMemo)(function () { return resolveMenuActions(getActionsElement, $item); }, [getActionsElement, $item]);
147
147
  var shouldRenderActions = ((_b = resolvedItemActions === null || resolvedItemActions === void 0 ? void 0 : resolvedItemActions.length) !== null && _b !== void 0 ? _b : 0) > 0 && !ChildMenu && !hideInlineActions;
148
148
  var resolvedEndEnhancer = useResolvedMenuEndEnhancer(resolvedItemActions, shouldRenderActions, endEnhancer, ChildMenu);
package/modal/modal.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { type ReactElement } from 'react';
2
2
  import type { ModalProps } from './types';
3
- import Alert from '../icon/components/alert-solid';
3
+ import Error from '../icon/components/error-solid';
4
4
  import Tick from '../icon/components/tickCircle-solid';
5
- import Warning from '../icon/components/warning-solid';
5
+ import Warning from '../icon/components/warning-clr';
6
6
  export declare const INTENT_TO_ICON: {
7
7
  success: typeof Tick;
8
- error: typeof Alert;
8
+ error: typeof Error;
9
9
  warning: typeof Warning;
10
10
  };
11
11
  declare const _default: import("react").MemoExoticComponent<{
package/modal/modal.js CHANGED
@@ -15,15 +15,15 @@ var locale_1 = require("../locale");
15
15
  var overrides_2 = require("../overrides");
16
16
  var ModalContext_1 = require("./ModalContext");
17
17
  var useUniqueId_1 = tslib_1.__importDefault(require("../hooks/useUniqueId"));
18
- var alert_solid_1 = tslib_1.__importDefault(require("../icon/components/alert-solid"));
18
+ var error_solid_1 = tslib_1.__importDefault(require("../icon/components/error-solid"));
19
19
  var tickCircle_solid_1 = tslib_1.__importDefault(require("../icon/components/tickCircle-solid"));
20
- var warning_solid_1 = tslib_1.__importDefault(require("../icon/components/warning-solid"));
20
+ var warning_clr_1 = tslib_1.__importDefault(require("../icon/components/warning-clr"));
21
21
  var themeHelpers_1 = require("../helpers/themeHelpers");
22
22
  var CloseButton = function (closeProps) { return ((0, jsx_runtime_1.jsx)(button_1.IconButton, tslib_1.__assign({}, closeProps, { children: (0, jsx_runtime_1.jsx)(close_1.default, {}) }))); };
23
23
  exports.INTENT_TO_ICON = {
24
24
  success: tickCircle_solid_1.default,
25
- error: alert_solid_1.default,
26
- warning: warning_solid_1.default,
25
+ error: error_solid_1.default,
26
+ warning: warning_clr_1.default,
27
27
  };
28
28
  var getWarningIconClassName = function (_a) {
29
29
  var theme = _a.theme;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sprinklrjs/spaceweb",
3
- "version": "14.13.2",
3
+ "version": "14.14.1",
4
4
  "description": "Components for SpaceWeb",
5
5
  "main": "index.js",
6
6
  "module": "./esm/index.js",
@@ -35,6 +35,7 @@
35
35
  "@types/styletron-engine-atomic": "^1.1.0",
36
36
  "@types/styletron-react": "^5.0.2",
37
37
  "any-date-parser": "2.2.3",
38
+ "aria-hidden": "^1.2.6",
38
39
  "body-scroll-lock": "3.1.5",
39
40
  "card-validator": "^6.2.0",
40
41
  "class-variance-authority": "^0.7.0",
@@ -100,7 +101,7 @@
100
101
  "ts-node": "^10.4.0"
101
102
  },
102
103
  "peerDependencies": {
103
- "@sprinklrjs/spaceweb-themes": "14.13.2",
104
+ "@sprinklrjs/spaceweb-themes": "14.14.1",
104
105
  "react": ">=17.0.2 <19.0.0",
105
106
  "react-dom": ">=17.0.2 <19.0.0"
106
107
  }
@@ -6,10 +6,10 @@ var react_1 = require("react");
6
6
  var overrides_1 = require("../overrides");
7
7
  var styled_components_1 = require("./styled-components");
8
8
  var tickCircle_solid_1 = tslib_1.__importDefault(require("../icon/components/tickCircle-solid"));
9
- var alert_solid_1 = tslib_1.__importDefault(require("../icon/components/alert-solid"));
9
+ var error_solid_1 = tslib_1.__importDefault(require("../icon/components/error-solid"));
10
10
  var constants_1 = require("./constants");
11
11
  var INTENT_TO_ICON_MAP = {
12
- error: (0, jsx_runtime_1.jsx)(alert_solid_1.default, { size: 16, className: "spr-support-error-text" }),
12
+ error: (0, jsx_runtime_1.jsx)(error_solid_1.default, { size: 16, className: "spr-support-error-text" }),
13
13
  };
14
14
  var Step = function (_a) {
15
15
  var _b = _a.overrides, overrides = _b === void 0 ? {} : _b, isCompleted = _a.isCompleted, isCurrent = _a.isCurrent, isActive = _a.isActive, _c = _a.intent, intent = _c === void 0 ? 'default' : _c, isRightBeforeActive = _a.isRightBeforeActive, _d = _a.isLast, isLast = _d === void 0 ? false : _d, childrenCount = _a.childrenCount, _e = _a.orientation, orientation = _e === void 0 ? constants_1.ORIENTATION.vertical : _e, title = _a.title, subTitle = _a.subTitle, alwaysShowDescription = _a.alwaysShowDescription, children = _a.children, className = _a.className, onClick = _a.onClick, variant = _a.variant, role = _a.role, style = _a.style, step = _a.step, showStepNumber = _a.showStepNumber, restProps = tslib_1.__rest(_a, ["overrides", "isCompleted", "isCurrent", "isActive", "intent", "isRightBeforeActive", "isLast", "childrenCount", "orientation", "title", "subTitle", "alwaysShowDescription", "children", "className", "onClick", "variant", "role", "style", "step", "showStepNumber"]);
package/select/index.d.ts CHANGED
@@ -19,4 +19,4 @@ export { CollapsibleSelectMenu } from './selectMenuAdapter/CollapsibleSelectMenu
19
19
  export { NestedSelect } from './nested-select';
20
20
  export { OverridenPopover } from './mobileSelect/overrides';
21
21
  export { filterOptions as defaultFilterOptions } from './utils/default-filter-options';
22
- export { getOptionLabel, getValueLabel } from '../baseui/select/select-component';
22
+ export { getOptionLabel, getValueLabel, getValueAriaLabel } from '../baseui/select/select-component';
package/select/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getValueLabel = exports.getOptionLabel = exports.defaultFilterOptions = exports.OverridenPopover = exports.NestedSelect = exports.CollapsibleSelectMenu = exports.GroupedSelect = exports.GROUP_SELECT_ALL_ID = exports.SingleValue = exports.MobileSheet = exports.SelectMenuAdapter = exports.MultiValue = exports.SingleSelect = exports.MultiSelect = exports.StatefulSelect = exports.Select = exports.StyledOverlayContentContainer = exports.NoResults = exports.StyledValueContainer = exports.StyledSingleValue = exports.StyledSelectArrow = exports.StyledSearchIconContainer = exports.StyledPlaceholder = exports.StyledInputSizer = exports.StyledInputContainer = exports.StyledInput = exports.StyledIconsContainer = exports.StyledDropdownContainer = exports.StyledControlContainer = exports.StyledClearIcon = exports.StyledRoot = exports.UNGROUPED_ID = exports.CLEARABLE_KEY = exports.LOADING_KEY = exports.STATE_CHANGE_TYPE = exports.CLEAR_OPTION_ID = exports.SELECT_ALL_ID = exports.useSelectIds = exports.SelectIdsProvider = exports.SelectIdsContext = void 0;
6
+ exports.getValueAriaLabel = exports.getValueLabel = exports.getOptionLabel = exports.defaultFilterOptions = exports.OverridenPopover = exports.NestedSelect = exports.CollapsibleSelectMenu = exports.GroupedSelect = exports.GROUP_SELECT_ALL_ID = exports.SingleValue = exports.MobileSheet = exports.SelectMenuAdapter = exports.MultiValue = exports.SingleSelect = exports.MultiSelect = exports.StatefulSelect = exports.Select = exports.StyledOverlayContentContainer = exports.NoResults = exports.StyledValueContainer = exports.StyledSingleValue = exports.StyledSelectArrow = exports.StyledSearchIconContainer = exports.StyledPlaceholder = exports.StyledInputSizer = exports.StyledInputContainer = exports.StyledInput = exports.StyledIconsContainer = exports.StyledDropdownContainer = exports.StyledControlContainer = exports.StyledClearIcon = exports.StyledRoot = exports.UNGROUPED_ID = exports.CLEARABLE_KEY = exports.LOADING_KEY = exports.STATE_CHANGE_TYPE = exports.CLEAR_OPTION_ID = exports.SELECT_ALL_ID = exports.useSelectIds = exports.SelectIdsProvider = exports.SelectIdsContext = void 0;
7
7
  var SelectIdsContext_1 = require("./SelectIdsContext");
8
8
  Object.defineProperty(exports, "SelectIdsContext", { enumerable: true, get: function () { return SelectIdsContext_1.SelectIdsContext; } });
9
9
  Object.defineProperty(exports, "SelectIdsProvider", { enumerable: true, get: function () { return SelectIdsContext_1.SelectIdsProvider; } });
@@ -64,3 +64,4 @@ Object.defineProperty(exports, "defaultFilterOptions", { enumerable: true, get:
64
64
  var select_component_1 = require("../baseui/select/select-component");
65
65
  Object.defineProperty(exports, "getOptionLabel", { enumerable: true, get: function () { return select_component_1.getOptionLabel; } });
66
66
  Object.defineProperty(exports, "getValueLabel", { enumerable: true, get: function () { return select_component_1.getValueLabel; } });
67
+ Object.defineProperty(exports, "getValueAriaLabel", { enumerable: true, get: function () { return select_component_1.getValueAriaLabel; } });
@@ -18,6 +18,7 @@ declare const MultiValue: React.ForwardRefExoticComponent<Omit<TagProps, "overri
18
18
  __groupSelectAll?: boolean | undefined;
19
19
  }>>;
20
20
  $valueKey: string;
21
+ ariaLabel?: string | undefined;
21
22
  value: Readonly<{
22
23
  [x: string]: any;
23
24
  id?: import("./types").Id | undefined;
@@ -13,7 +13,7 @@ var constants_1 = require("./constants");
13
13
  var useCombinedRef_1 = tslib_1.__importDefault(require("../hooks/useCombinedRef"));
14
14
  var MultiValue = React.forwardRef(function (props, ref) {
15
15
  var _a, _b, _c;
16
- var _d = props.overrides, overrides = _d === void 0 ? {} : _d, onActionClick = props.onActionClick, value = props.value, selectSize = props.selectSize, $disabled = props.$disabled, $valueByIdMap = props.$valueByIdMap, $valueKey = props.$valueKey, _$size = props.$size, _$isContainerFocused = props.$isContainerFocused, restProps = tslib_1.__rest(props, ["overrides", "onActionClick", "value", "selectSize", "$disabled", "$valueByIdMap", "$valueKey", "$size", "$isContainerFocused"]);
16
+ var _d = props.overrides, overrides = _d === void 0 ? {} : _d, onActionClick = props.onActionClick, value = props.value, selectSize = props.selectSize, $disabled = props.$disabled, $valueByIdMap = props.$valueByIdMap, $valueKey = props.$valueKey, _$size = props.$size, _$isContainerFocused = props.$isContainerFocused, ariaLabel = props.ariaLabel, children = props.children, restProps = tslib_1.__rest(props, ["overrides", "onActionClick", "value", "selectSize", "$disabled", "$valueByIdMap", "$valueKey", "$size", "$isContainerFocused", "ariaLabel", "children"]);
17
17
  var _e = tslib_1.__read((0, overrides_1.useOverrides)(overrides.Tag, tag_1.Tag), 2), TagComponent = _e[0], tagProps = _e[1];
18
18
  var theme = (0, style_1.useStyle)().theme;
19
19
  var tagRef = (0, react_1.useRef)();
@@ -51,6 +51,7 @@ var MultiValue = React.forwardRef(function (props, ref) {
51
51
  break;
52
52
  }
53
53
  var closeable = (_b = tagProps.closeable) !== null && _b !== void 0 ? _b : !disabled;
54
+ var resolvedAriaLabel = ariaLabel || (typeof children === 'string' ? children : undefined);
54
55
  var tagSpacingClasses;
55
56
  switch (selectSize) {
56
57
  case 'xxxs':
@@ -66,7 +67,7 @@ var MultiValue = React.forwardRef(function (props, ref) {
66
67
  tagSpacingClasses = 'mr-1 my-0.5';
67
68
  break;
68
69
  }
69
- return ((0, jsx_runtime_1.jsx)(TagComponent, tslib_1.__assign({ ref: combinedRef, variant: "light", intent: "default", "aria-label": typeof restProps.children === 'string' ? restProps.children : '', tabIndex: -1, onActionClick: onActionClickHandler, "$item": value, "$disabled": disabled, size: tagSize }, restProps, tagProps, { closeable: closeable, overrides: (0, overrides_1.mergeOverrides)({
70
+ return ((0, jsx_runtime_1.jsx)(TagComponent, tslib_1.__assign({ ref: combinedRef, variant: "light", intent: "default" }, (resolvedAriaLabel ? { 'aria-label': resolvedAriaLabel } : {}), { tabIndex: -1, onActionClick: onActionClickHandler, "$item": value, "$disabled": disabled, size: tagSize }, restProps, tagProps, { closeable: closeable, overrides: (0, overrides_1.mergeOverrides)({
70
71
  Root: {
71
72
  className: [
72
73
  'box-border max-w-[--sw-max-width]',
@@ -87,6 +88,6 @@ var MultiValue = React.forwardRef(function (props, ref) {
87
88
  },
88
89
  },
89
90
  Action: { props: { tabIndex: -1 } },
90
- }, tagProps.overrides) }, { children: isLoading ? ((0, jsx_runtime_1.jsx)(StyledTombstone_1.StyledTombstone, { "data-testid": "multi-value-tombstone", className: "w-20 h-4 rounded-8" })) : (props.children) })));
91
+ }, tagProps.overrides) }, { children: isLoading ? (0, jsx_runtime_1.jsx)(StyledTombstone_1.StyledTombstone, { "data-testid": "multi-value-tombstone", className: "w-20 h-4 rounded-8" }) : children })));
91
92
  });
92
93
  exports.default = MultiValue;
@@ -6,6 +6,7 @@ var jsx_runtime_1 = require("react/jsx-runtime");
6
6
  var isNumber_1 = tslib_1.__importDefault(require("lodash/isNumber"));
7
7
  var react_1 = require("react");
8
8
  var useGetExpandedGroup_1 = require("./hooks/useGetExpandedGroup");
9
+ var useRootSelectAllKeyboardNav_1 = require("./hooks/useRootSelectAllKeyboardNav");
9
10
  var box_1 = require("../../box");
10
11
  var menu_1 = require("../../menu");
11
12
  var typography_1 = require("../../typography");
@@ -49,6 +50,7 @@ var CollapsibleSelectMenu = function (_a) {
49
50
  var isFirstItemHighlighted = (0, react_1.useRef)(false);
50
51
  var isLastItemHighlighted = (0, react_1.useRef)(false);
51
52
  var menuRef = (0, react_1.useRef)(null);
53
+ var selectAllItem = shouldDisplaySelectAll ? groupedItems[constants_1.UNGROUPED_ID][0] : null;
52
54
  var ownerDocument = (0, DocumentProvider_1.useDocument)();
53
55
  var _l = (0, SelectIdsContext_1.useSelectIds)(), listboxId = _l.listboxId, menuDescriptionId = _l.menuDescriptionId;
54
56
  var selectedValuesSet = (0, react_1.useMemo)(function () {
@@ -75,6 +77,17 @@ var CollapsibleSelectMenu = function (_a) {
75
77
  var mergedOverrides = (0, react_1.useMemo)(function () { return (0, overrides_1.mergeOverrides)(overrides_2.selectMenuOverrides, overrides); }, [overrides]);
76
78
  var _m = tslib_1.__read((0, overrides_1.useOverrides)(mergedOverrides.Menu, menu_1.Menu), 2), MenuComponent = _m[0], menuProps = _m[1];
77
79
  var _o = tslib_1.__read((0, overrides_1.useOverrides)(mergedOverrides.NoResults, styled_component_1.NoResults), 2), NoResultsOverriden = _o[0], noResultsProps = _o[1];
80
+ var _p = (0, useRootSelectAllKeyboardNav_1.useRootSelectAllKeyboardNav)({
81
+ menuRef: menuRef,
82
+ selectAllItem: selectAllItem,
83
+ ownerDocument: ownerDocument,
84
+ expandedGroupId: expandedGroupId,
85
+ setExpandedGroupId: setExpandedGroupId,
86
+ groupConfig: groupConfig,
87
+ onItemSelect: onItemSelect,
88
+ inputElement: inputElement,
89
+ isFirstItemHighlighted: isFirstItemHighlighted,
90
+ }), selectAllItemRef = _p.selectAllItemRef, isRootSelectAllHighlighted = _p.isRootSelectAllHighlighted, leaveRootSelectAllHighlight = _p.leaveRootSelectAllHighlight;
78
91
  var menuItemOverrides = (0, react_1.useMemo)(function () { return ({
79
92
  MenuItem: mergedOverrides.MenuItem,
80
93
  ListItemText: mergedOverrides.ListItemText,
@@ -107,6 +120,9 @@ var CollapsibleSelectMenu = function (_a) {
107
120
  }, [expandedGroupId, groupedItems]);
108
121
  var handleOnHighlightedItemChange = function (item) {
109
122
  var _a;
123
+ if (item) {
124
+ leaveRootSelectAllHighlight();
125
+ }
110
126
  var nextHighlightableElement = (0, helpers_1.getNextItemIndexToHighlight)(item !== null && item !== void 0 ? item : null, menuRef.current, helpers_1.nextItem);
111
127
  var prevHighlightableElement = (0, helpers_1.getNextItemIndexToHighlight)(item !== null && item !== void 0 ? item : null, menuRef.current, helpers_1.prevItem);
112
128
  isFirstItemHighlighted.current = !!(item && (!item.previousSibling || item === prevHighlightableElement));
@@ -114,13 +130,18 @@ var CollapsibleSelectMenu = function (_a) {
114
130
  (_a = menuProps === null || menuProps === void 0 ? void 0 : menuProps.onHighlightedItemChange) === null || _a === void 0 ? void 0 : _a.call(menuProps, item);
115
131
  };
116
132
  var handleOnClick = (0, react_1.useCallback)(function (newGroupId) {
133
+ leaveRootSelectAllHighlight();
117
134
  setExpandedGroupId(function (prev) { return (prev === newGroupId ? undefined : newGroupId); });
118
135
  inputElement === null || inputElement === void 0 ? void 0 : inputElement.focus();
119
- }, [inputElement, setExpandedGroupId]);
120
- var selectAllItem = shouldDisplaySelectAll ? groupedItems[constants_1.UNGROUPED_ID][0] : null;
136
+ }, [inputElement, setExpandedGroupId, leaveRootSelectAllHighlight]);
121
137
  var clearAsOptionItem = !multi && clearAsOption ? groupedItems[constants_1.UNGROUPED_ID][0] : null;
122
138
  var locale = (0, locale_1.useLocale)().select;
123
- return ((0, jsx_runtime_1.jsxs)(box_1.Box, tslib_1.__assign({ className: "rounded-inherit" }, { children: [selectAllItem ? ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ overrides: menuItemOverrides, item: selectAllItem, selected: globalSelectAllSelected, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": selectAllItem, button: true, "data-testid": "universal-select-all" }, baseuiMenuItemProps, { className: ['m-2', baseuiMenuItemProps === null || baseuiMenuItemProps === void 0 ? void 0 : baseuiMenuItemProps.className] }), "select-all-option")) : null, groupConfig.map(function (_group, index) {
139
+ var isMenuItemHighlighted = isRootSelectAllHighlighted ? false : undefined;
140
+ return ((0, jsx_runtime_1.jsxs)(box_1.Box, tslib_1.__assign({ className: "rounded-inherit" }, { children: [selectAllItem ? ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ ref: selectAllItemRef, overrides: menuItemOverrides, item: selectAllItem, selected: globalSelectAllSelected, highlighted: isRootSelectAllHighlighted, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": selectAllItem, "$as": "div", button: true, "data-testid": "universal-select-all" }, baseuiMenuItemProps, {
141
+ // Root Select All sits outside the options listbox, so it must be role="checkbox" (not role="option" )
142
+ // See SAP UI5 MultiComboBox Select All:
143
+ // https://ui5.sap.com/#/entity/sap.m.MultiComboBox/sample/sap.m.sample.MultiComboBoxSelectAll
144
+ role: "checkbox", className: ['m-2', baseuiMenuItemProps === null || baseuiMenuItemProps === void 0 ? void 0 : baseuiMenuItemProps.className] }), "select-all-option")) : null, groupConfig.map(function (_group, index) {
124
145
  var _a;
125
146
  var _b, _c;
126
147
  var groupId = _group.id, groupLabel = _group.label;
@@ -140,11 +161,11 @@ var CollapsibleSelectMenu = function (_a) {
140
161
  _a[constants_2.GROUP_SELECT_ALL_ID] = true,
141
162
  _a.selected = groupSelectAllSelected,
142
163
  _a);
143
- return ((0, jsx_runtime_1.jsxs)(Collapsible, tslib_1.__assign({ className: index === 0 && selectAllItem ? 'border-t-1 border-solid spr-border-primary' : '', group: group, expanded: disableWhenSelectAllChecked && globalSelectAllSelected ? false : groupId === expandedGroupId, disabled: disableWhenSelectAllChecked && globalSelectAllSelected, onClick: handleOnClick }, { children: [(0, jsx_runtime_1.jsx)(hidden_element_1.HiddenElement, tslib_1.__assign({ id: menuDescriptionId !== null && menuDescriptionId !== void 0 ? menuDescriptionId : '' }, { children: "".concat(groupLabel, " ").concat(locale.groupExpandedSuffix) })), (0, isEmpty_1.default)(itemsInGroup) ? ((0, jsx_runtime_1.jsx)(NoResultsOverriden, tslib_1.__assign({ "aria-live": "polite", "aria-atomic": true, msg: noResultsMsg, noResultsConfig: noResultsConfig, "aria-disabled": true, "$groupId": groupId }, noResultsProps))) : ((0, jsx_runtime_1.jsxs)(MenuComponent, tslib_1.__assign({ resetMenuHighlightOnMouseLeave: true, focusWhenNavigationEnabled: false, keyboardFocusRestoreTarget: inputElement, tabIndex: -1, selectOnTab: selectOnTab, getActionsElement: getActionsElement }, menuProps, { role: "listbox", id: listboxId, virtual: virtual, className: ['overflow-auto max-h-50 pt-0', menuProps === null || menuProps === void 0 ? void 0 : menuProps.className], onScroll: function (e) {
164
+ return ((0, jsx_runtime_1.jsxs)(Collapsible, tslib_1.__assign({ className: index === 0 && selectAllItem ? 'border-t-1 border-solid spr-border-primary' : '', group: group, expanded: disableWhenSelectAllChecked && globalSelectAllSelected ? false : groupId === expandedGroupId, disabled: disableWhenSelectAllChecked && globalSelectAllSelected, onClick: handleOnClick }, { children: [(0, jsx_runtime_1.jsx)(hidden_element_1.HiddenElement, tslib_1.__assign({ id: menuDescriptionId !== null && menuDescriptionId !== void 0 ? menuDescriptionId : '' }, { children: "".concat(groupLabel, " ").concat(locale.groupExpandedSuffix) })), (0, isEmpty_1.default)(itemsInGroup) ? ((0, jsx_runtime_1.jsx)(NoResultsOverriden, tslib_1.__assign({ "aria-live": "polite", "aria-atomic": true, msg: noResultsMsg, noResultsConfig: noResultsConfig, "aria-disabled": true, "$groupId": groupId }, noResultsProps))) : ((0, jsx_runtime_1.jsxs)(MenuComponent, tslib_1.__assign({ resetMenuHighlightOnMouseLeave: true, focusWhenNavigationEnabled: false, disableAutoHighlight: isRootSelectAllHighlighted, keyboardFocusRestoreTarget: inputElement, tabIndex: -1, selectOnTab: selectOnTab, getActionsElement: getActionsElement }, menuProps, { role: "listbox", id: listboxId, virtual: virtual, className: ['overflow-auto max-h-50 pt-0', menuProps === null || menuProps === void 0 ? void 0 : menuProps.className], onScroll: function (e) {
144
165
  $onPaginate === null || $onPaginate === void 0 ? void 0 : $onPaginate(e, groupId);
145
- }, onHighlightedItemChange: handleOnHighlightedItemChange, ref: menuRef }, { children: [shouldDisplayGroupSelectAll ? ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ overrides: menuItemOverrides, item: groupSelectAllItem, "data-testid": "".concat(group.label, "-group-select-all"), selected: groupSelectAllSelected, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": groupSelectAllItem, button: true, disabled: group.count <= countDisabledOptions }, baseuiMenuItemProps), "select-all-option")) : null, clearAsOptionItem ? ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ overrides: menuItemOverrides, item: clearAsOptionItem, selected: false, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": clearAsOptionItem, button: true }, baseuiMenuItemProps), "clear-option")) : null, itemsInGroup.map(function (item) {
166
+ }, onHighlightedItemChange: handleOnHighlightedItemChange, ref: menuRef }, { children: [shouldDisplayGroupSelectAll ? ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ overrides: menuItemOverrides, item: groupSelectAllItem, "data-testid": "".concat(group.label, "-group-select-all"), selected: groupSelectAllSelected, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": groupSelectAllItem, button: true, disabled: group.count <= countDisabledOptions, highlighted: isMenuItemHighlighted }, baseuiMenuItemProps), "select-all-option")) : null, clearAsOptionItem ? ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ overrides: menuItemOverrides, item: clearAsOptionItem, selected: false, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": clearAsOptionItem, button: true, highlighted: isMenuItemHighlighted }, baseuiMenuItemProps), "clear-option")) : null, itemsInGroup.map(function (item) {
146
167
  var selected = selectedValuesSet.has(item[valueKey]);
147
- return ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ overrides: menuItemOverrides, item: item, selected: selected, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": item, button: true }, baseuiMenuItemProps), item.isCreatable ? 'creatable-option' : item[valueKey]));
168
+ return ((0, jsx_runtime_1.jsx)(SelectMenuItem_1.default, tslib_1.__assign({ overrides: menuItemOverrides, item: item, selected: selected, multi: multi, getItemLabel: getItemLabel, labelKey: labelKey, valueKey: valueKey, onItemSelect: onItemSelect, "$item": item, button: true, highlighted: isMenuItemHighlighted }, baseuiMenuItemProps), item.isCreatable ? 'creatable-option' : item[valueKey]));
148
169
  })] })))] }), groupId));
149
170
  })] })));
150
171
  };
@@ -3,7 +3,7 @@ import { type ListItemTextProps } from '../../list';
3
3
  import { type Override } from '../../overrides';
4
4
  import type { MenuItemProps } from '../../menu';
5
5
  import type { SelectProps } from '../types';
6
- declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<Pick<MenuItemProps, "selected"> & Pick<SelectProps, "labelKey" | "multi" | "valueKey"> & {
6
+ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<Pick<MenuItemProps, "selected" | "role"> & Pick<SelectProps, "labelKey" | "multi" | "valueKey"> & {
7
7
  item: Record<string, any>;
8
8
  getItemLabel: (item: Record<string, any>) => React.ReactNode;
9
9
  onItemSelect: (item: Record<string, any>) => void;
@@ -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 {};