@sprinklrjs/spaceweb 14.13.1 → 14.13.2

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.
@@ -22,6 +22,6 @@ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponen
22
22
  } | undefined;
23
23
  selected?: boolean | undefined;
24
24
  startEnhancer?: Enhancer<ListItemSharedProps>;
25
- tooltipContent?: React.ReactNode | import("../baseui/popover").StatefulContentRenderProp;
25
+ tooltipContent?: React.ReactNode | import("../baseui/popover").ContentRenderProp;
26
26
  } & React.RefAttributes<HTMLElement>>>;
27
27
  export default _default;
@@ -7,7 +7,8 @@ import useCombinedRefs from '../hooks/useCombinedRef';
7
7
  import { useOverrides } from '../overrides';
8
8
  import { StyledChildContainer, StyledEndEnhancer, StyledListItem, StyledStartEnhancer } from './styled-component';
9
9
  import { useFocusVisible } from '../hooks/useFocusVisible';
10
- import { StatefulTooltip as DefaultStatefulTooltip } from '../tooltip';
10
+ import { Tooltip as DefaultTooltip } from '../tooltip';
11
+ import useListItemTooltip, { getListItemTooltipHandlers } from './useListItemTooltip';
11
12
  var ListItem = React.forwardRef(function (_a, ref) {
12
13
  var startEnhancer = _a.startEnhancer, children = _a.children, className = _a.className, style = _a.style, _b = _a.alignItems, alignItems = _b === void 0 ? 'center' : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, endEnhancer = _a.endEnhancer, _d = _a.selected, selected = _d === void 0 ? false : _d, _e = _a.highlighted, highlighted = _e === void 0 ? false : _e, _f = _a.autoFocus, autoFocus = _f === void 0 ? false : _f, _g = _a.button, button = _g === void 0 ? false : _g, _h = _a.overrides, overrides = _h === void 0 ? {} : _h, _j = _a.tabIndex, tabIndex = _j === void 0 ? button ? 0 : undefined : _j, _k = _a.$as, $as = _k === void 0 ? 'li' : _k, onClick = _a.onClick, onKeyDown = _a.onKeyDown, onFocus = _a.onFocus, onBlur = _a.onBlur, _l = _a.tooltipContent, tooltipContent = _l === void 0 ? '' : _l, restProps = __rest(_a, ["startEnhancer", "children", "className", "style", "alignItems", "disabled", "endEnhancer", "selected", "highlighted", "autoFocus", "button", "overrides", "tabIndex", "$as", "onClick", "onKeyDown", "onFocus", "onBlur", "tooltipContent"]);
13
14
  var ownRef = useRef(null);
@@ -46,9 +47,15 @@ var ListItem = React.forwardRef(function (_a, ref) {
46
47
  var renderEnhancer = function (enhancer) {
47
48
  return typeof enhancer === 'function' ? enhancer(sharedProps) : enhancer;
48
49
  };
49
- var _r = __read(useOverrides(overrides === null || overrides === void 0 ? void 0 : overrides.StatefulTooltip, DefaultStatefulTooltip), 2), StatefulTooltip = _r[0], statefulTooltipProps = _r[1];
50
- var listEl = (_jsxs(Root, __assign({ "data-spaceweb": "list-item", role: "listitem", ref: combinedRef, tabIndex: tabIndex, "aria-disabled": disabled, "$as": $as, onClick: disabled ? _noop : onClick, onKeyDown: handleKeyDown, "data-highlighted": highlighted }, sharedProps, restProps, rootProps, useFocusVisibleProps, { style: [style, rootProps === null || rootProps === void 0 ? void 0 : rootProps.style], className: [className, rootProps === null || rootProps === void 0 ? void 0 : rootProps.className] }, { children: [startEnhancer && (_jsx(StartEnhancer, __assign({}, sharedProps, startEnhancerProps, { children: renderEnhancer(startEnhancer) }))), _jsx(ChildContainer, __assign({}, sharedProps, childContainerProps, { children: children })), endEnhancer && (_jsx(EndEnhancer, __assign({}, sharedProps, endEnhancerProps, { children: renderEnhancer(endEnhancer) })))] })));
51
- return tooltipContent ? (_jsx(StatefulTooltip, __assign({ placement: "bottom", content: tooltipContent, viewportAsBoundary: true }, statefulTooltipProps, { children: listEl }))) : (listEl);
50
+ var _r = __read(useOverrides(overrides === null || overrides === void 0 ? void 0 : overrides.StatefulTooltip, DefaultTooltip), 2), Tooltip = _r[0], tooltipProps = _r[1];
51
+ var tooltipControlProps = useListItemTooltip({
52
+ highlighted: highlighted,
53
+ tooltipHandlers: getListItemTooltipHandlers(tooltipProps),
54
+ });
55
+ var listEl = (
56
+ // eslint-disable-next-line jsx-a11y/role-supports-aria-props -- aria-disabled required for disabled button list items
57
+ _jsxs(Root, __assign({ "data-spaceweb": "list-item", role: "listitem", ref: combinedRef, tabIndex: tabIndex, "$as": $as, "aria-disabled": disabled, onClick: disabled ? _noop : onClick, onKeyDown: handleKeyDown, "data-highlighted": highlighted }, sharedProps, restProps, rootProps, useFocusVisibleProps, { style: [style, rootProps === null || rootProps === void 0 ? void 0 : rootProps.style], className: [className, rootProps === null || rootProps === void 0 ? void 0 : rootProps.className] }, { children: [startEnhancer && (_jsx(StartEnhancer, __assign({}, sharedProps, startEnhancerProps, { children: renderEnhancer(startEnhancer) }))), _jsx(ChildContainer, __assign({}, sharedProps, childContainerProps, { children: children })), endEnhancer && (_jsx(EndEnhancer, __assign({}, sharedProps, endEnhancerProps, { children: renderEnhancer(endEnhancer) })))] })));
58
+ return tooltipContent ? (_jsx(Tooltip, __assign({ placement: "bottom", showArrow: true, content: tooltipContent, viewportAsBoundary: true }, tooltipProps, tooltipControlProps, { children: listEl }))) : (listEl);
52
59
  });
53
60
  ListItem.displayName = 'ListItem';
54
61
  ListItem.__standard = 'Component';
@@ -1,7 +1,7 @@
1
1
  import type { KeyboardEvent, MouseEvent, ReactNode } from 'react';
2
2
  import type { Override } from '../overrides/types';
3
3
  import type { SpacewebComponentProps } from '../types';
4
- import type { StatefulTooltipProps } from '../tooltip';
4
+ import type { TooltipProps } from '../tooltip/types';
5
5
  export type AlignItems = 'start' | 'center';
6
6
  export type Enhancer<SharedProps> = ReactNode | ((props: SharedProps) => ReactNode);
7
7
  export type ListItemSharedProps = {
@@ -31,7 +31,7 @@ export type ListItemProps = SpacewebComponentProps & {
31
31
  };
32
32
  selected?: boolean;
33
33
  startEnhancer?: Enhancer<ListItemSharedProps>;
34
- tooltipContent?: StatefulTooltipProps['content'];
34
+ tooltipContent?: TooltipProps['content'];
35
35
  };
36
36
  export type ListProps = SpacewebComponentProps & {
37
37
  children?: ReactNode;
@@ -0,0 +1,10 @@
1
+ import type { TooltipProps } from '../tooltip/types';
2
+ export type ListItemTooltipHandlerProps = Pick<TooltipProps, 'onMouseEnter' | 'onMouseLeave' | 'onFocus' | 'onBlur'>;
3
+ export declare const getListItemTooltipHandlers: (tooltipProps: Record<string, unknown>) => Partial<ListItemTooltipHandlerProps>;
4
+ type ListItemTooltipControlProps = Required<Pick<TooltipProps, 'isOpen'>> & ListItemTooltipHandlerProps;
5
+ type Params = {
6
+ highlighted: boolean;
7
+ tooltipHandlers?: Partial<ListItemTooltipHandlerProps>;
8
+ };
9
+ declare const useListItemTooltip: ({ highlighted, tooltipHandlers }: Params) => ListItemTooltipControlProps;
10
+ export default useListItemTooltip;
@@ -0,0 +1,38 @@
1
+ import { __read } from "tslib";
2
+ import { useCallback, useState } from 'react';
3
+ import useCombinedHandler from '../hooks/useCombinedHandler';
4
+ import { isFocusVisible } from '../baseui/utils/focusVisible';
5
+ import { useMenuContext } from '../menu/MenuContext';
6
+ export var getListItemTooltipHandlers = function (tooltipProps) {
7
+ return ({
8
+ onMouseEnter: tooltipProps.onMouseEnter,
9
+ onMouseLeave: tooltipProps.onMouseLeave,
10
+ onFocus: tooltipProps.onFocus,
11
+ onBlur: tooltipProps.onBlur,
12
+ });
13
+ };
14
+ var useListItemTooltip = function (_a) {
15
+ var highlighted = _a.highlighted, _b = _a.tooltipHandlers, tooltipHandlers = _b === void 0 ? {} : _b;
16
+ var listItemFocusVisible = useMenuContext().listItemFocusVisible;
17
+ var _c = __read(useState(false), 2), hoverOpen = _c[0], setHoverOpen = _c[1];
18
+ var onMouseEnter = tooltipHandlers.onMouseEnter, onMouseLeave = tooltipHandlers.onMouseLeave, onFocus = tooltipHandlers.onFocus, onBlur = tooltipHandlers.onBlur;
19
+ var openHoverTooltip = useCallback(function () { return setHoverOpen(true); }, []);
20
+ var closeHoverTooltip = useCallback(function () { return setHoverOpen(false); }, []);
21
+ var openOnFocusVisible = useCallback(function (event) {
22
+ if (isFocusVisible(event)) {
23
+ setHoverOpen(true);
24
+ }
25
+ }, []);
26
+ var onMouseEnterHandler = useCombinedHandler(openHoverTooltip, onMouseEnter);
27
+ var onMouseLeaveHandler = useCombinedHandler(closeHoverTooltip, onMouseLeave);
28
+ var onBlurHandler = useCombinedHandler(closeHoverTooltip, onBlur);
29
+ var onFocusHandler = useCombinedHandler(onFocus, openOnFocusVisible);
30
+ return {
31
+ isOpen: hoverOpen || (highlighted && listItemFocusVisible),
32
+ onMouseEnter: onMouseEnterHandler,
33
+ onMouseLeave: onMouseLeaveHandler,
34
+ onFocus: onFocusHandler,
35
+ onBlur: onBlurHandler,
36
+ };
37
+ };
38
+ export default useListItemTooltip;
@@ -23,6 +23,7 @@ export var DEFAULT_LOCALE = {
23
23
  selectPlaceholder: 'Select...',
24
24
  clearOptionLabel: 'Unassign',
25
25
  selectedValuesPrefix: 'Selected ${values}',
26
+ selectedMultiValuesPrefix: 'Selected ${count} ${countLabel} ${values}',
26
27
  item: 'item',
27
28
  items: 'items',
28
29
  multiValueNavigationDescription: 'Use Left and Right arrow keys to navigate between selected values. Enter BackSpace to remove currently focused value',
@@ -81,7 +81,7 @@ declare const StatefulSubMenu: import("react").ForwardRefExoticComponent<Omit<Me
81
81
  } | undefined;
82
82
  selected?: boolean | undefined;
83
83
  startEnhancer?: import("../list/types").Enhancer<import("../list").ListItemSharedProps>;
84
- tooltipContent?: ReactNode | import("../baseui/popover").StatefulContentRenderProp;
84
+ tooltipContent?: ReactNode | import("../baseui/popover").ContentRenderProp;
85
85
  } & Record<string, any>> | undefined;
86
86
  Popover?: Override<Omit<import("../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
87
87
  overrides?: ({
@@ -82,7 +82,7 @@ declare const SubMenu: import("react").ForwardRefExoticComponent<Omit<MenuProps,
82
82
  } | undefined;
83
83
  selected?: boolean | undefined;
84
84
  startEnhancer?: import("../list/types").Enhancer<import("../list").ListItemSharedProps>;
85
- tooltipContent?: ReactNode | import("../baseui/popover").StatefulContentRenderProp;
85
+ tooltipContent?: ReactNode | import("../baseui/popover").ContentRenderProp;
86
86
  } & Record<string, any>> | undefined;
87
87
  Popover?: Override<Omit<import("../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
88
88
  overrides?: ({
@@ -30,7 +30,7 @@ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponen
30
30
  } | undefined;
31
31
  selected?: boolean | undefined;
32
32
  startEnhancer?: import("../list/types").Enhancer<ListItemSharedProps>;
33
- tooltipContent?: React.ReactNode | import("../baseui/popover").StatefulContentRenderProp;
33
+ tooltipContent?: React.ReactNode | import("../baseui/popover").ContentRenderProp;
34
34
  } & Record<string, any>> | undefined;
35
35
  Popover?: import("../overrides").Override<Omit<import("../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
36
36
  overrides?: ({
@@ -5,6 +5,7 @@ export type SelectLocale = {
5
5
  selectPlaceholder: string;
6
6
  clearOptionLabel: string;
7
7
  selectedValuesPrefix: string;
8
+ selectedMultiValuesPrefix: string;
8
9
  item: string;
9
10
  items: string;
10
11
  collapsibleMenuDescription: string;
@@ -67,7 +67,7 @@ export declare const CollapsibleSelectMenu: ({ overrides, value, items: groupedI
67
67
  } | undefined;
68
68
  selected?: boolean | undefined;
69
69
  startEnhancer?: import("../../list/types").Enhancer<import("../../list").ListItemSharedProps>;
70
- tooltipContent?: ReactNode | import("../../baseui/popover").StatefulContentRenderProp;
70
+ tooltipContent?: ReactNode | import("../../baseui/popover").ContentRenderProp;
71
71
  } & Record<string, any>> | undefined;
72
72
  Popover?: import("../../overrides").Override<Omit<import("../../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
73
73
  overrides?: ({
@@ -38,7 +38,7 @@ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponen
38
38
  } | undefined;
39
39
  selected?: boolean | undefined;
40
40
  startEnhancer?: import("../../list/types").Enhancer<import("../../list").ListItemSharedProps>;
41
- tooltipContent?: React.ReactNode | import("../../baseui/popover").StatefulContentRenderProp;
41
+ tooltipContent?: React.ReactNode | import("../../baseui/popover").ContentRenderProp;
42
42
  } & Record<string, any>> | undefined;
43
43
  Popover?: Override<Omit<import("../../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
44
44
  overrides?: ({
@@ -40,7 +40,7 @@ export var StyledInput = styled('input', 'bg-transparent border-none inline-bloc
40
40
  return ($disabled ? 'webkit-text-transparent' : '');
41
41
  });
42
42
  var StyledOverlayContentContainer = styled('div', 'overflow-auto rounded-inherit w-[--sw-width]');
43
- var getCommaSeparatedValues = function (value, limitTags, labelKey, locale) {
43
+ var getCommaSeparatedValues = function (value, limitTags, labelKey, locale, multi) {
44
44
  if (limitTags === void 0) { limitTags = Number(Infinity); }
45
45
  var _limitTags = limitTags < 0 ? Number(Infinity) : limitTags;
46
46
  var commaSeparatedValues = value === null || value === void 0 ? void 0 : value.slice(0, _limitTags).map(function (val) { return val[labelKey]; });
@@ -49,16 +49,26 @@ var getCommaSeparatedValues = function (value, limitTags, labelKey, locale) {
49
49
  commaSeparatedValues.push("".concat("+".concat(extraTagNumber, " ").concat(extraTagNumber === 1 ? locale.select.item : locale.select.items)));
50
50
  }
51
51
  var _commaSeparatedValues = commaSeparatedValues === null || commaSeparatedValues === void 0 ? void 0 : commaSeparatedValues.join(',');
52
- return value && value.length > 0
53
- ? "".concat(getInterpolatedString(locale.select.selectedValuesPrefix, { values: _commaSeparatedValues }), ".")
54
- : '';
52
+ if (!(value === null || value === void 0 ? void 0 : value.length)) {
53
+ return '';
54
+ }
55
+ if (multi) {
56
+ var count = value.length;
57
+ var countLabel = count === 1 ? locale.select.item : locale.select.items;
58
+ return "".concat(getInterpolatedString(locale.select.selectedMultiValuesPrefix, {
59
+ count: String(count),
60
+ countLabel: countLabel,
61
+ values: _commaSeparatedValues,
62
+ }), ".");
63
+ }
64
+ return "".concat(getInterpolatedString(locale.select.selectedValuesPrefix, { values: _commaSeparatedValues }), ".");
55
65
  };
56
66
  var InputContainer = function (_a) {
57
67
  var _b;
58
68
  var size = _a.size, $value = _a.$value, $labelKey = _a.$labelKey, placeholder = _a.placeholder, $limitTags = _a.$limitTags, props = __rest(_a, ["size", "$value", "$labelKey", "placeholder", "$limitTags"]);
59
69
  var locale = useLocale();
60
70
  var listboxId = useSelectIds().listboxId;
61
- var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale);
71
+ var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale, props.$multi);
62
72
  var baseAriaDescribedBy = (_b = props['aria-describedby']) !== null && _b !== void 0 ? _b : '';
63
73
  var selectedValuesId = useUniqueId();
64
74
  var ariaDescribedBy = commaSeparatedValues ? "".concat(selectedValuesId, " ").concat(baseAriaDescribedBy) : baseAriaDescribedBy;
@@ -77,7 +87,7 @@ var Input = forwardRef(function (_a, ref) {
77
87
  var placeholder = _a.placeholder, $value = _a.$value, $labelKey = _a.$labelKey, _c = _a.$limitTags, $limitTags = _c === void 0 ? Number(Infinity) : _c, props = __rest(_a, ["placeholder", "$value", "$labelKey", "$limitTags"]);
78
88
  var locale = useLocale();
79
89
  var _d = useSelectIds(), listboxId = _d.listboxId, inputId = _d.inputId;
80
- var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale);
90
+ var commaSeparatedValues = getCommaSeparatedValues($value, $limitTags, $labelKey, locale, props.$multi);
81
91
  var baseAriaDescribedBy = (_b = props['aria-describedby']) !== null && _b !== void 0 ? _b : '';
82
92
  var selectedValuesId = useUniqueId();
83
93
  var ariaDescribedBy = commaSeparatedValues ? "".concat(selectedValuesId, " ").concat(baseAriaDescribedBy) : baseAriaDescribedBy;
@@ -22,6 +22,6 @@ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponen
22
22
  } | undefined;
23
23
  selected?: boolean | undefined;
24
24
  startEnhancer?: Enhancer<ListItemSharedProps>;
25
- tooltipContent?: React.ReactNode | import("../baseui/popover").StatefulContentRenderProp;
25
+ tooltipContent?: React.ReactNode | import("../baseui/popover").ContentRenderProp;
26
26
  } & React.RefAttributes<HTMLElement>>>;
27
27
  export default _default;
package/list/list-item.js CHANGED
@@ -10,6 +10,7 @@ var overrides_1 = require("../overrides");
10
10
  var styled_component_1 = require("./styled-component");
11
11
  var useFocusVisible_1 = require("../hooks/useFocusVisible");
12
12
  var tooltip_1 = require("../tooltip");
13
+ var useListItemTooltip_1 = tslib_1.__importStar(require("./useListItemTooltip"));
13
14
  var ListItem = React.forwardRef(function (_a, ref) {
14
15
  var startEnhancer = _a.startEnhancer, children = _a.children, className = _a.className, style = _a.style, _b = _a.alignItems, alignItems = _b === void 0 ? 'center' : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, endEnhancer = _a.endEnhancer, _d = _a.selected, selected = _d === void 0 ? false : _d, _e = _a.highlighted, highlighted = _e === void 0 ? false : _e, _f = _a.autoFocus, autoFocus = _f === void 0 ? false : _f, _g = _a.button, button = _g === void 0 ? false : _g, _h = _a.overrides, overrides = _h === void 0 ? {} : _h, _j = _a.tabIndex, tabIndex = _j === void 0 ? button ? 0 : undefined : _j, _k = _a.$as, $as = _k === void 0 ? 'li' : _k, onClick = _a.onClick, onKeyDown = _a.onKeyDown, onFocus = _a.onFocus, onBlur = _a.onBlur, _l = _a.tooltipContent, tooltipContent = _l === void 0 ? '' : _l, restProps = tslib_1.__rest(_a, ["startEnhancer", "children", "className", "style", "alignItems", "disabled", "endEnhancer", "selected", "highlighted", "autoFocus", "button", "overrides", "tabIndex", "$as", "onClick", "onKeyDown", "onFocus", "onBlur", "tooltipContent"]);
15
16
  var ownRef = (0, react_1.useRef)(null);
@@ -48,9 +49,15 @@ var ListItem = React.forwardRef(function (_a, ref) {
48
49
  var renderEnhancer = function (enhancer) {
49
50
  return typeof enhancer === 'function' ? enhancer(sharedProps) : enhancer;
50
51
  };
51
- var _r = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.StatefulTooltip, tooltip_1.StatefulTooltip), 2), StatefulTooltip = _r[0], statefulTooltipProps = _r[1];
52
- var listEl = ((0, jsx_runtime_1.jsxs)(Root, tslib_1.__assign({ "data-spaceweb": "list-item", role: "listitem", ref: combinedRef, tabIndex: tabIndex, "aria-disabled": disabled, "$as": $as, onClick: disabled ? noop_1.default : onClick, onKeyDown: handleKeyDown, "data-highlighted": highlighted }, sharedProps, restProps, rootProps, useFocusVisibleProps, { style: [style, rootProps === null || rootProps === void 0 ? void 0 : rootProps.style], className: [className, rootProps === null || rootProps === void 0 ? void 0 : rootProps.className] }, { children: [startEnhancer && ((0, jsx_runtime_1.jsx)(StartEnhancer, tslib_1.__assign({}, sharedProps, startEnhancerProps, { children: renderEnhancer(startEnhancer) }))), (0, jsx_runtime_1.jsx)(ChildContainer, tslib_1.__assign({}, sharedProps, childContainerProps, { children: children })), endEnhancer && ((0, jsx_runtime_1.jsx)(EndEnhancer, tslib_1.__assign({}, sharedProps, endEnhancerProps, { children: renderEnhancer(endEnhancer) })))] })));
53
- return tooltipContent ? ((0, jsx_runtime_1.jsx)(StatefulTooltip, tslib_1.__assign({ placement: "bottom", content: tooltipContent, viewportAsBoundary: true }, statefulTooltipProps, { children: listEl }))) : (listEl);
52
+ var _r = tslib_1.__read((0, overrides_1.useOverrides)(overrides === null || overrides === void 0 ? void 0 : overrides.StatefulTooltip, tooltip_1.Tooltip), 2), Tooltip = _r[0], tooltipProps = _r[1];
53
+ var tooltipControlProps = (0, useListItemTooltip_1.default)({
54
+ highlighted: highlighted,
55
+ tooltipHandlers: (0, useListItemTooltip_1.getListItemTooltipHandlers)(tooltipProps),
56
+ });
57
+ var listEl = (
58
+ // eslint-disable-next-line jsx-a11y/role-supports-aria-props -- aria-disabled required for disabled button list items
59
+ (0, jsx_runtime_1.jsxs)(Root, tslib_1.__assign({ "data-spaceweb": "list-item", role: "listitem", ref: combinedRef, tabIndex: tabIndex, "$as": $as, "aria-disabled": disabled, onClick: disabled ? noop_1.default : onClick, onKeyDown: handleKeyDown, "data-highlighted": highlighted }, sharedProps, restProps, rootProps, useFocusVisibleProps, { style: [style, rootProps === null || rootProps === void 0 ? void 0 : rootProps.style], className: [className, rootProps === null || rootProps === void 0 ? void 0 : rootProps.className] }, { children: [startEnhancer && ((0, jsx_runtime_1.jsx)(StartEnhancer, tslib_1.__assign({}, sharedProps, startEnhancerProps, { children: renderEnhancer(startEnhancer) }))), (0, jsx_runtime_1.jsx)(ChildContainer, tslib_1.__assign({}, sharedProps, childContainerProps, { children: children })), endEnhancer && ((0, jsx_runtime_1.jsx)(EndEnhancer, tslib_1.__assign({}, sharedProps, endEnhancerProps, { children: renderEnhancer(endEnhancer) })))] })));
60
+ return tooltipContent ? ((0, jsx_runtime_1.jsx)(Tooltip, tslib_1.__assign({ placement: "bottom", showArrow: true, content: tooltipContent, viewportAsBoundary: true }, tooltipProps, tooltipControlProps, { children: listEl }))) : (listEl);
54
61
  });
55
62
  ListItem.displayName = 'ListItem';
56
63
  ListItem.__standard = 'Component';
package/list/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { KeyboardEvent, MouseEvent, ReactNode } from 'react';
2
2
  import type { Override } from '../overrides/types';
3
3
  import type { SpacewebComponentProps } from '../types';
4
- import type { StatefulTooltipProps } from '../tooltip';
4
+ import type { TooltipProps } from '../tooltip/types';
5
5
  export type AlignItems = 'start' | 'center';
6
6
  export type Enhancer<SharedProps> = ReactNode | ((props: SharedProps) => ReactNode);
7
7
  export type ListItemSharedProps = {
@@ -31,7 +31,7 @@ export type ListItemProps = SpacewebComponentProps & {
31
31
  };
32
32
  selected?: boolean;
33
33
  startEnhancer?: Enhancer<ListItemSharedProps>;
34
- tooltipContent?: StatefulTooltipProps['content'];
34
+ tooltipContent?: TooltipProps['content'];
35
35
  };
36
36
  export type ListProps = SpacewebComponentProps & {
37
37
  children?: ReactNode;
@@ -0,0 +1,10 @@
1
+ import type { TooltipProps } from '../tooltip/types';
2
+ export type ListItemTooltipHandlerProps = Pick<TooltipProps, 'onMouseEnter' | 'onMouseLeave' | 'onFocus' | 'onBlur'>;
3
+ export declare const getListItemTooltipHandlers: (tooltipProps: Record<string, unknown>) => Partial<ListItemTooltipHandlerProps>;
4
+ type ListItemTooltipControlProps = Required<Pick<TooltipProps, 'isOpen'>> & ListItemTooltipHandlerProps;
5
+ type Params = {
6
+ highlighted: boolean;
7
+ tooltipHandlers?: Partial<ListItemTooltipHandlerProps>;
8
+ };
9
+ declare const useListItemTooltip: ({ highlighted, tooltipHandlers }: Params) => ListItemTooltipControlProps;
10
+ export default useListItemTooltip;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getListItemTooltipHandlers = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var react_1 = require("react");
6
+ var useCombinedHandler_1 = tslib_1.__importDefault(require("../hooks/useCombinedHandler"));
7
+ var focusVisible_1 = require("../baseui/utils/focusVisible");
8
+ var MenuContext_1 = require("../menu/MenuContext");
9
+ var getListItemTooltipHandlers = function (tooltipProps) {
10
+ return ({
11
+ onMouseEnter: tooltipProps.onMouseEnter,
12
+ onMouseLeave: tooltipProps.onMouseLeave,
13
+ onFocus: tooltipProps.onFocus,
14
+ onBlur: tooltipProps.onBlur,
15
+ });
16
+ };
17
+ exports.getListItemTooltipHandlers = getListItemTooltipHandlers;
18
+ var useListItemTooltip = function (_a) {
19
+ var highlighted = _a.highlighted, _b = _a.tooltipHandlers, tooltipHandlers = _b === void 0 ? {} : _b;
20
+ var listItemFocusVisible = (0, MenuContext_1.useMenuContext)().listItemFocusVisible;
21
+ var _c = tslib_1.__read((0, react_1.useState)(false), 2), hoverOpen = _c[0], setHoverOpen = _c[1];
22
+ var onMouseEnter = tooltipHandlers.onMouseEnter, onMouseLeave = tooltipHandlers.onMouseLeave, onFocus = tooltipHandlers.onFocus, onBlur = tooltipHandlers.onBlur;
23
+ var openHoverTooltip = (0, react_1.useCallback)(function () { return setHoverOpen(true); }, []);
24
+ var closeHoverTooltip = (0, react_1.useCallback)(function () { return setHoverOpen(false); }, []);
25
+ var openOnFocusVisible = (0, react_1.useCallback)(function (event) {
26
+ if ((0, focusVisible_1.isFocusVisible)(event)) {
27
+ setHoverOpen(true);
28
+ }
29
+ }, []);
30
+ var onMouseEnterHandler = (0, useCombinedHandler_1.default)(openHoverTooltip, onMouseEnter);
31
+ var onMouseLeaveHandler = (0, useCombinedHandler_1.default)(closeHoverTooltip, onMouseLeave);
32
+ var onBlurHandler = (0, useCombinedHandler_1.default)(closeHoverTooltip, onBlur);
33
+ var onFocusHandler = (0, useCombinedHandler_1.default)(onFocus, openOnFocusVisible);
34
+ return {
35
+ isOpen: hoverOpen || (highlighted && listItemFocusVisible),
36
+ onMouseEnter: onMouseEnterHandler,
37
+ onMouseLeave: onMouseLeaveHandler,
38
+ onFocus: onFocusHandler,
39
+ onBlur: onBlurHandler,
40
+ };
41
+ };
42
+ exports.default = useListItemTooltip;
package/locale/en_US.js CHANGED
@@ -26,6 +26,7 @@ exports.DEFAULT_LOCALE = {
26
26
  selectPlaceholder: 'Select...',
27
27
  clearOptionLabel: 'Unassign',
28
28
  selectedValuesPrefix: 'Selected ${values}',
29
+ selectedMultiValuesPrefix: 'Selected ${count} ${countLabel} ${values}',
29
30
  item: 'item',
30
31
  items: 'items',
31
32
  multiValueNavigationDescription: 'Use Left and Right arrow keys to navigate between selected values. Enter BackSpace to remove currently focused value',
@@ -81,7 +81,7 @@ declare const StatefulSubMenu: import("react").ForwardRefExoticComponent<Omit<Me
81
81
  } | undefined;
82
82
  selected?: boolean | undefined;
83
83
  startEnhancer?: import("../list/types").Enhancer<import("../list").ListItemSharedProps>;
84
- tooltipContent?: ReactNode | import("../baseui/popover").StatefulContentRenderProp;
84
+ tooltipContent?: ReactNode | import("../baseui/popover").ContentRenderProp;
85
85
  } & Record<string, any>> | undefined;
86
86
  Popover?: Override<Omit<import("../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
87
87
  overrides?: ({
package/menu/SubMenu.d.ts CHANGED
@@ -82,7 +82,7 @@ declare const SubMenu: import("react").ForwardRefExoticComponent<Omit<MenuProps,
82
82
  } | undefined;
83
83
  selected?: boolean | undefined;
84
84
  startEnhancer?: import("../list/types").Enhancer<import("../list").ListItemSharedProps>;
85
- tooltipContent?: ReactNode | import("../baseui/popover").StatefulContentRenderProp;
85
+ tooltipContent?: ReactNode | import("../baseui/popover").ContentRenderProp;
86
86
  } & Record<string, any>> | undefined;
87
87
  Popover?: Override<Omit<import("../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
88
88
  overrides?: ({
@@ -30,7 +30,7 @@ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponen
30
30
  } | undefined;
31
31
  selected?: boolean | undefined;
32
32
  startEnhancer?: import("../list/types").Enhancer<ListItemSharedProps>;
33
- tooltipContent?: React.ReactNode | import("../baseui/popover").StatefulContentRenderProp;
33
+ tooltipContent?: React.ReactNode | import("../baseui/popover").ContentRenderProp;
34
34
  } & Record<string, any>> | undefined;
35
35
  Popover?: import("../overrides").Override<Omit<import("../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
36
36
  overrides?: ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sprinklrjs/spaceweb",
3
- "version": "14.13.1",
3
+ "version": "14.13.2",
4
4
  "description": "Components for SpaceWeb",
5
5
  "main": "index.js",
6
6
  "module": "./esm/index.js",
@@ -100,7 +100,7 @@
100
100
  "ts-node": "^10.4.0"
101
101
  },
102
102
  "peerDependencies": {
103
- "@sprinklrjs/spaceweb-themes": "14.13.1",
103
+ "@sprinklrjs/spaceweb-themes": "14.13.2",
104
104
  "react": ">=17.0.2 <19.0.0",
105
105
  "react-dom": ">=17.0.2 <19.0.0"
106
106
  }
@@ -5,6 +5,7 @@ export type SelectLocale = {
5
5
  selectPlaceholder: string;
6
6
  clearOptionLabel: string;
7
7
  selectedValuesPrefix: string;
8
+ selectedMultiValuesPrefix: string;
8
9
  item: string;
9
10
  items: string;
10
11
  collapsibleMenuDescription: string;
@@ -67,7 +67,7 @@ export declare const CollapsibleSelectMenu: ({ overrides, value, items: groupedI
67
67
  } | undefined;
68
68
  selected?: boolean | undefined;
69
69
  startEnhancer?: import("../../list/types").Enhancer<import("../../list").ListItemSharedProps>;
70
- tooltipContent?: ReactNode | import("../../baseui/popover").StatefulContentRenderProp;
70
+ tooltipContent?: ReactNode | import("../../baseui/popover").ContentRenderProp;
71
71
  } & Record<string, any>> | undefined;
72
72
  Popover?: import("../../overrides").Override<Omit<import("../../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
73
73
  overrides?: ({
@@ -38,7 +38,7 @@ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponen
38
38
  } | undefined;
39
39
  selected?: boolean | undefined;
40
40
  startEnhancer?: import("../../list/types").Enhancer<import("../../list").ListItemSharedProps>;
41
- tooltipContent?: React.ReactNode | import("../../baseui/popover").StatefulContentRenderProp;
41
+ tooltipContent?: React.ReactNode | import("../../baseui/popover").ContentRenderProp;
42
42
  } & Record<string, any>> | undefined;
43
43
  Popover?: Override<Omit<import("../../baseui/popover").PopoverProps, "children" | "overrides" | "placement" | "triggerType"> & {
44
44
  overrides?: ({
@@ -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;