@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,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;
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;
@@ -2,15 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TYPE_TO_HIDE_DURATION = exports.INTENT_TO_ROLE = exports.INTENT_TO_ICON = exports.TRANSITION_DURATION = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var alert_solid_1 = tslib_1.__importDefault(require("../icon/components/alert-solid"));
6
- var warning_solid_1 = tslib_1.__importDefault(require("../icon/components/warning-solid"));
5
+ var error_solid_1 = tslib_1.__importDefault(require("../icon/components/error-solid"));
6
+ var warning_clr_1 = tslib_1.__importDefault(require("../icon/components/warning-clr"));
7
7
  var tickCircle_solid_1 = tslib_1.__importDefault(require("../icon/components/tickCircle-solid"));
8
8
  var delete_solid_1 = tslib_1.__importDefault(require("../icon/components/delete-solid"));
9
9
  exports.TRANSITION_DURATION = 1000;
10
10
  exports.INTENT_TO_ICON = {
11
11
  success: tickCircle_solid_1.default,
12
- error: alert_solid_1.default,
13
- warning: warning_solid_1.default,
12
+ error: error_solid_1.default,
13
+ warning: warning_clr_1.default,
14
14
  delete: delete_solid_1.default,
15
15
  };
16
16
  exports.INTENT_TO_ROLE = {
@@ -12,7 +12,7 @@ var button_1 = require("../button");
12
12
  var styled_component_1 = require("./styled-component");
13
13
  var stack_1 = require("../stack");
14
14
  var TimezonePicker_1 = tslib_1.__importDefault(require("./TimezonePicker"));
15
- var error_1 = tslib_1.__importDefault(require("../icon/components/error"));
15
+ var error_solid_1 = tslib_1.__importDefault(require("../icon/components/error-solid"));
16
16
  var styled_components_1 = require("../date-picker/styled-components");
17
17
  var locale_1 = require("../locale");
18
18
  var utils_1 = require("./utils");
@@ -110,15 +110,13 @@ var RangeSelectorContainer = function (_a) {
110
110
  }, [timeRange, preset, timezone, onSubmit, disableTimezone]);
111
111
  // show error message only when it is present, hasError can be true when user has not selected any date,
112
112
  // but we are showing any error message for that scenario.
113
- var errorEl = errMsg ? ((0, jsx_runtime_1.jsxs)(stack_1.Stack, tslib_1.__assign({ direction: "horizontal", gap: 1, className: (0, classNames_1.default)('mr-1', { 'items-center': monthsShown !== 1 }), shrink: true }, { children: [(0, jsx_runtime_1.jsx)(error_1.default, { size: 14, className: "block", style: function (_a) {
113
+ var errorEl = errMsg ? ((0, jsx_runtime_1.jsxs)(stack_1.Stack, tslib_1.__assign({ direction: "horizontal", gap: 1, className: (0, classNames_1.default)('mr-1', { 'items-center': monthsShown !== 1 }), shrink: true }, { children: [(0, jsx_runtime_1.jsx)(error_solid_1.default, { size: 14, className: "block", style: function (_a) {
114
114
  var theme = _a.theme;
115
115
  return ({
116
116
  fill: theme.spr.clrRed,
117
117
  });
118
118
  } }), (0, jsx_runtime_1.jsx)(typography_1.Typography, tslib_1.__assign({ className: "my-0", variant: "bs3" }, { children: errMsg }))] }))) : null;
119
- return ((0, jsx_runtime_1.jsxs)(box_1.Box, tslib_1.__assign({ className: "spr-ui-01 rounded-8" }, { children: [(0, jsx_runtime_1.jsxs)(Header, tslib_1.__assign({ "$setTimezone": setTimezone, "$onClose": props.onClose }, headerProps, { children: [(0, jsx_runtime_1.jsx)(HeaderBeforeEnhancer, tslib_1.__assign({ variant: "heading-7", "$as": "span", className: "flex items-center" }, headerBeforeEnhancerProps, { children: locale.timeRangePicker.headerLabel })), disableTimezone ? null : ((0, jsx_runtime_1.jsx)(TimezonePicker, tslib_1.__assign({ setTimezone: setTimezone, timezone: timezone, timezoneOptions: timezoneOptions }, timezonePickerProps, { className: ['w-0 grow max-w-md', timezonePickerProps === null || timezonePickerProps === void 0 ? void 0 : timezonePickerProps.className] })))] })), (0, jsx_runtime_1.jsx)(RangeSelector, tslib_1.__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: (0, jsx_runtime_1.jsx)(Footer, tslib_1.__assign({ "$hasError": hasError, "$onSubmit": handleSubmit, "$onClose": props.onClose }, footerProps, { className: ['px-6 py-3 mt-2', footerProps.className] }, { children: (0, jsx_runtime_1.jsxs)(box_1.Box, tslib_1.__assign({ className: "justify-between w-0 grow flex" }, { children: [(0, jsx_runtime_1.jsx)(FooterBeforeEnhancer, tslib_1.__assign({}, footerBeforeEnhancerProps)), (0, jsx_runtime_1.jsxs)(stack_1.Stack, tslib_1.__assign({ direction: monthsShown === 1 ? 'vertical' : 'horizontal', gap: 3,
120
- // @ts-ignore -- CSS-in-JS
121
- className: [(0, classNames_1.default)({ 'items-center': monthsShown !== 1 }), { maxWidth: 'fit-content' }] }, { children: [monthsShown === 1 ? null : errorEl, (0, jsx_runtime_1.jsxs)(stack_1.StackItem, tslib_1.__assign({ className: "flex self-end" }, { children: [(footerProps === null || footerProps === void 0 ? void 0 : footerProps.showClearButton) ? ((0, jsx_runtime_1.jsx)(button_1.Button, tslib_1.__assign({ size: "xs", onClick: footerProps.handleClearBtnClick, variant: "secondary", "data-testid": "clear", disabled: timeRange.length === 0 }, { children: locale.timeRangePicker.clearBtnLabel }))) : ((0, jsx_runtime_1.jsx)(button_1.Button, tslib_1.__assign({ size: "xs", onClick: props.onClose, variant: "secondary", "data-testid": "cancel" }, { children: locale.timeRangePicker.cancelBtnLabel }))), (0, jsx_runtime_1.jsx)(button_1.Button, tslib_1.__assign({ size: "xs", className: "ml-3", onClick: handleSubmit, disabled: hasError, "data-testid": "save" }, { children: locale.timeRangePicker.saveBtnLabel }))] })), monthsShown === 1 ? errorEl : null] }))] })) })) }, rangeSelectorProps))] })));
119
+ return ((0, jsx_runtime_1.jsxs)(box_1.Box, tslib_1.__assign({ className: "spr-ui-01 rounded-8" }, { children: [(0, jsx_runtime_1.jsxs)(Header, tslib_1.__assign({ "$setTimezone": setTimezone, "$onClose": props.onClose }, headerProps, { children: [(0, jsx_runtime_1.jsx)(HeaderBeforeEnhancer, tslib_1.__assign({ variant: "heading-7", "$as": "span", className: "flex items-center" }, headerBeforeEnhancerProps, { children: locale.timeRangePicker.headerLabel })), disableTimezone ? null : ((0, jsx_runtime_1.jsx)(TimezonePicker, tslib_1.__assign({ setTimezone: setTimezone, timezone: timezone, timezoneOptions: timezoneOptions }, timezonePickerProps, { className: ['w-0 grow max-w-md', timezonePickerProps === null || timezonePickerProps === void 0 ? void 0 : timezonePickerProps.className] })))] })), (0, jsx_runtime_1.jsx)(RangeSelector, tslib_1.__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: (0, jsx_runtime_1.jsx)(Footer, tslib_1.__assign({ "$hasError": hasError, "$onSubmit": handleSubmit, "$onClose": props.onClose }, footerProps, { className: ['px-6 py-3 mt-2', footerProps.className] }, { children: (0, jsx_runtime_1.jsxs)(box_1.Box, tslib_1.__assign({ className: "justify-between w-0 grow flex" }, { children: [(0, jsx_runtime_1.jsx)(FooterBeforeEnhancer, tslib_1.__assign({}, footerBeforeEnhancerProps)), (0, jsx_runtime_1.jsxs)(stack_1.Stack, tslib_1.__assign({ direction: monthsShown === 1 ? 'vertical' : 'horizontal', gap: 3, className: monthsShown !== 1 ? 'items-center' : undefined, style: { maxWidth: 'fit-content' } }, { children: [monthsShown === 1 ? null : errorEl, (0, jsx_runtime_1.jsxs)(stack_1.StackItem, tslib_1.__assign({ className: "flex self-end" }, { children: [(footerProps === null || footerProps === void 0 ? void 0 : footerProps.showClearButton) ? ((0, jsx_runtime_1.jsx)(button_1.Button, tslib_1.__assign({ size: "xs", onClick: footerProps.handleClearBtnClick, variant: "secondary", "data-testid": "clear", disabled: timeRange.length === 0 }, { children: locale.timeRangePicker.clearBtnLabel }))) : ((0, jsx_runtime_1.jsx)(button_1.Button, tslib_1.__assign({ size: "xs", onClick: props.onClose, variant: "secondary", "data-testid": "cancel" }, { children: locale.timeRangePicker.cancelBtnLabel }))), (0, jsx_runtime_1.jsx)(button_1.Button, tslib_1.__assign({ size: "xs", className: "ml-3", onClick: handleSubmit, disabled: hasError, "data-testid": "save" }, { children: locale.timeRangePicker.saveBtnLabel }))] })), monthsShown === 1 ? errorEl : null] }))] })) })) }, rangeSelectorProps))] })));
122
120
  };
123
121
  RangeSelectorContainer.displayName = 'RangeSelectorContainer';
124
122
  exports.default = RangeSelectorContainer;