@gooddata/sdk-ui-kit 11.43.0-alpha.0 → 11.43.0-alpha.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.
Files changed (89) hide show
  1. package/esm/@ui/@types/icon.d.ts +1 -1
  2. package/esm/@ui/@types/icon.d.ts.map +1 -1
  3. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.d.ts +3 -1
  4. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.d.ts.map +1 -1
  5. package/esm/@ui/UiGeneralAccessRadio/UiGeneralAccessRadio.js +2 -2
  6. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts.map +1 -1
  7. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.js +7 -4
  8. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts +3 -1
  9. package/esm/@ui/UiGranteeRow/UiGranteeRow.d.ts.map +1 -1
  10. package/esm/@ui/UiGranteeRow/UiGranteeRow.js +2 -2
  11. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts +15 -15
  12. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts.map +1 -1
  13. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.js +20 -18
  14. package/esm/@ui/UiIcon/icons.d.ts.map +1 -1
  15. package/esm/@ui/UiIcon/icons.js +1 -0
  16. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts +44 -0
  17. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.d.ts.map +1 -0
  18. package/esm/@ui/UiLabelsChecklist/UiLabelsChecklist.js +58 -0
  19. package/esm/@ui/UiLabelsList/UiLabelsList.d.ts +6 -1
  20. package/esm/@ui/UiLabelsList/UiLabelsList.d.ts.map +1 -1
  21. package/esm/@ui/UiLabelsList/UiLabelsList.js +2 -3
  22. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts +23 -0
  23. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.d.ts.map +1 -0
  24. package/esm/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.js +83 -0
  25. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts +14 -1
  26. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.d.ts.map +1 -1
  27. package/esm/@ui/UiObjectShareDialog/UiObjectShareDialogCard.js +5 -3
  28. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +4 -15
  29. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts.map +1 -1
  30. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +11 -23
  31. package/esm/@ui/UiPopover/UiPopover.d.ts +29 -1
  32. package/esm/@ui/UiPopover/UiPopover.d.ts.map +1 -1
  33. package/esm/@ui/UiPopover/UiPopover.js +4 -4
  34. package/esm/@ui/UiTag/UiTag.d.ts +1 -0
  35. package/esm/@ui/UiTag/UiTag.d.ts.map +1 -1
  36. package/esm/@ui/UiTag/UiTag.js +10 -4
  37. package/esm/@ui/UiTags/UiTag.d.ts +0 -2
  38. package/esm/@ui/UiTags/UiTag.d.ts.map +1 -1
  39. package/esm/@ui/UiTags/UiTag.js +14 -9
  40. package/esm/@ui/UiTags/UiTags.d.ts.map +1 -1
  41. package/esm/@ui/UiTags/UiTags.js +38 -24
  42. package/esm/@ui/UiTags/interactions.d.ts +4 -9
  43. package/esm/@ui/UiTags/interactions.d.ts.map +1 -1
  44. package/esm/@ui/UiTags/interactions.js +58 -228
  45. package/esm/@ui/UiTooltip/UiTooltip.d.ts +1 -1
  46. package/esm/@ui/UiTooltip/UiTooltip.d.ts.map +1 -1
  47. package/esm/@ui/UiTooltip/UiTooltip.js +17 -9
  48. package/esm/@ui/UiTooltip/types.d.ts +10 -1
  49. package/esm/@ui/UiTooltip/types.d.ts.map +1 -1
  50. package/esm/Button/Button.d.ts.map +1 -1
  51. package/esm/Button/Button.js +2 -2
  52. package/esm/Datepicker/Datepicker.d.ts.map +1 -1
  53. package/esm/Datepicker/Datepicker.js +1 -1
  54. package/esm/Icon/icons/InsightIcons/Radar.d.ts.map +1 -1
  55. package/esm/Icon/icons/InsightIcons/Radar.js +3 -1
  56. package/esm/List/MenuList.d.ts +2 -1
  57. package/esm/List/MenuList.d.ts.map +1 -1
  58. package/esm/List/MenuList.js +2 -2
  59. package/esm/index.d.ts +2 -1
  60. package/esm/index.d.ts.map +1 -1
  61. package/esm/index.js +2 -1
  62. package/esm/locales.d.ts +11 -4
  63. package/esm/locales.d.ts.map +1 -1
  64. package/esm/locales.js +5 -4
  65. package/esm/sdk-ui-kit.d.ts +139 -85
  66. package/esm/tsdoc-metadata.json +1 -1
  67. package/package.json +11 -11
  68. package/src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.scss +12 -0
  69. package/src/@ui/UiGranteeRow/UiGranteeRow.scss +5 -0
  70. package/src/@ui/UiGranteeRowControls/UiGranteeRowControls.scss +7 -0
  71. package/src/@ui/UiLabelsChecklist/UiLabelsChecklist.scss +31 -0
  72. package/src/@ui/UiLabelsList/UiLabelsList.scss +3 -0
  73. package/src/@ui/UiModalDialog/UiModalDialog.scss +11 -1
  74. package/src/@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.scss +10 -0
  75. package/src/@ui/UiObjectShareDialog/UiObjectShareDialog.scss +7 -0
  76. package/src/@ui/UiPermissionMenu/UiPermissionMenu.scss +0 -7
  77. package/src/@ui/UiPopover/UiPopover.scss +7 -0
  78. package/src/@ui/UiTabs/UiTabs.scss +0 -1
  79. package/src/@ui/UiTag/UiTag.scss +4 -0
  80. package/src/@ui/UiTags/UiTags.scss +5 -1
  81. package/src/@ui/index.scss +2 -1
  82. package/styles/css/main.css +66 -21
  83. package/styles/css/main.css.map +1 -1
  84. package/styles/images/visualization-types/radar-active.svg +10 -6
  85. package/styles/images/visualization-types/radar.svg +16 -5
  86. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts +0 -64
  87. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.d.ts.map +0 -1
  88. package/esm/@ui/UiLabelsPicker/UiLabelsPicker.js +0 -89
  89. package/src/@ui/UiLabelsPicker/UiLabelsPicker.scss +0 -29
@@ -1,33 +1,47 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
- import { useCallback, useMemo, useRef, useState } from "react";
3
- import { makeTabsKeyboardNavigation } from "../@utils/keyboardNavigation.js";
4
- export function useTagsInteractions(rootRef, hiddenTagsRef, showedTags, hiddenTags, onTagClick, onTagAdd, onTagRemove) {
2
+ import { useCallback, useLayoutEffect, useRef, useState } from "react";
3
+ import { programaticFocusManagement } from "../UiFocusManager/utils.js";
4
+ const TAG_SELECTOR = ".gd-ui-kit-tags__tag";
5
+ function getTagElements(container) {
6
+ if (!container) {
7
+ return [];
8
+ }
9
+ return Array.from(container.querySelectorAll(TAG_SELECTOR));
10
+ }
11
+ function findTagIndex(container, tagId) {
12
+ return getTagElements(container).findIndex((element) => element.dataset["tagId"] === tagId);
13
+ }
14
+ export function useTagsInteractions(tagsContainerRef, tooltipTagsContainerRef, showedTags, hiddenTags, onTagAdd, onTagRemove, onTagClick) {
5
15
  const [tag, setTag] = useState("");
6
- const [showedFocusedIndex, setShowedFocusedIndex] = useState(0);
7
- const [hiddenFocusedIndex, setHiddenFocusedIndex] = useState(0);
8
- const rootItems = useMemo(() => {
9
- return [...showedTags, ...(hiddenTags.length > 0 ? [hiddenTags] : [])];
10
- }, [showedTags, hiddenTags]);
16
+ const pendingTagFocus = useRef(null);
11
17
  const interactionState = useRef({
12
18
  moreOpen: false,
13
19
  addOpen: false,
14
- tags: {},
15
- more: null,
16
20
  add: null,
17
21
  close: null,
18
22
  save: null,
19
23
  input: null,
20
24
  });
25
+ const focusTagByIndex = (tagElements, index) => {
26
+ if (tagElements.length === 0) {
27
+ interactionState.current.add?.focus();
28
+ return false;
29
+ }
30
+ const focusIndex = Math.min(Math.max(index, 0), tagElements.length - 1);
31
+ const tagWrapper = tagElements[focusIndex];
32
+ if (!tagWrapper) {
33
+ return false;
34
+ }
35
+ const innerTag = tagWrapper.querySelector(".gd-ui-kit-tag");
36
+ programaticFocusManagement(innerTag ?? tagWrapper);
37
+ return true;
38
+ };
21
39
  const onMoreOpen = useCallback(() => {
22
40
  interactionState.current.moreOpen = true;
23
- setShowedFocusedIndex(rootItems.length - 1);
24
- setHiddenFocusedIndex(0);
25
- }, [rootItems]);
41
+ }, []);
26
42
  const onMoreClose = useCallback(() => {
27
43
  interactionState.current.moreOpen = false;
28
- setShowedFocusedIndex(rootItems.length - 1);
29
- setHiddenFocusedIndex(0);
30
- }, [rootItems]);
44
+ }, []);
31
45
  const onAddOpen = useCallback(() => {
32
46
  interactionState.current.addOpen = true;
33
47
  }, []);
@@ -41,182 +55,37 @@ export function useTagsInteractions(rootRef, hiddenTagsRef, showedTags, hiddenTa
41
55
  onTagAdd?.({ id: tag, label: tag });
42
56
  setTag("");
43
57
  }, [tag, onTagAdd]);
44
- const onTagRemoveHandler = useCallback((tag) => {
45
- const deletedShowedTag = showedTags.findIndex((t) => t === tag);
46
- const deletedHiddenTag = hiddenTags.findIndex((t) => t === tag);
47
- if (deletedShowedTag !== -1) {
48
- setShowedFocusedIndex(Math.min(deletedShowedTag, showedTags.length - 1));
58
+ const onTagRemoveHandler = useCallback((removedTag) => {
59
+ let area = "root";
60
+ let deletedIndex = findTagIndex(tooltipTagsContainerRef.current, removedTag.id);
61
+ if (deletedIndex === -1) {
62
+ deletedIndex = findTagIndex(tagsContainerRef.current, removedTag.id);
49
63
  }
50
- if (deletedHiddenTag !== -1) {
51
- setHiddenFocusedIndex(Math.min(deletedHiddenTag, hiddenTags.length - 1));
64
+ else {
65
+ area = "dialog";
52
66
  }
53
- onTagRemove?.(tag);
54
- }, [hiddenTags, onTagRemove, showedTags]);
55
- const onTagClickHandler = useCallback((tag) => {
56
- const showedTag = showedTags.findIndex((t) => t === tag);
57
- if (showedTag !== -1) {
58
- setShowedFocusedIndex(showedTag);
67
+ if (deletedIndex !== -1) {
68
+ pendingTagFocus.current = { area, deletedIndex };
59
69
  }
60
- const hiddenTag = hiddenTags.findIndex((t) => t === tag);
61
- if (hiddenTag !== -1) {
62
- setHiddenFocusedIndex(hiddenTag);
70
+ onTagRemove?.(removedTag);
71
+ }, [onTagRemove, tagsContainerRef, tooltipTagsContainerRef]);
72
+ const onTagClickHandler = useCallback((clickedTag) => {
73
+ onTagClick?.(clickedTag);
74
+ }, [onTagClick]);
75
+ useLayoutEffect(() => {
76
+ if (!pendingTagFocus.current) {
77
+ return;
63
78
  }
64
- onTagClick?.(tag);
65
- }, [hiddenTags, onTagClick, showedTags]);
66
- const handleKeyDown = useMemo(() => makeTabsKeyboardNavigation({
67
- onFocusPrevious: (event) => {
68
- if (interactionState.current.addOpen) {
69
- return;
70
- }
71
- if (event.target === interactionState.current.add) {
72
- return;
73
- }
74
- if (interactionState.current.moreOpen) {
75
- hiddenTagsRef.current?.focus();
76
- if (hiddenFocusedIndex === 0) {
77
- setHiddenFocusedIndex(hiddenTags.length - 1);
78
- }
79
- else {
80
- setHiddenFocusedIndex(Math.min(hiddenFocusedIndex - 1, hiddenTags.length - 1));
81
- }
82
- }
83
- else {
84
- rootRef.current?.focus();
85
- if (showedFocusedIndex === 0) {
86
- setShowedFocusedIndex(rootItems.length - 1);
87
- }
88
- else {
89
- setShowedFocusedIndex(Math.min(showedFocusedIndex - 1, showedTags.length - 1));
90
- }
91
- }
92
- },
93
- onFocusNext: (event) => {
94
- if (interactionState.current.addOpen) {
95
- return;
96
- }
97
- if (event.target === interactionState.current.add) {
98
- return;
99
- }
100
- if (interactionState.current.moreOpen) {
101
- hiddenTagsRef.current?.focus();
102
- if (hiddenTags.length - 1 <= hiddenFocusedIndex) {
103
- setHiddenFocusedIndex(0);
104
- }
105
- else {
106
- setHiddenFocusedIndex(hiddenFocusedIndex + 1);
107
- }
108
- }
109
- else {
110
- rootRef.current?.focus();
111
- if (rootItems.length - 1 <= showedFocusedIndex) {
112
- setShowedFocusedIndex(0);
113
- }
114
- else {
115
- setShowedFocusedIndex(showedFocusedIndex + 1);
116
- }
117
- }
118
- },
119
- onFocusFirst: (event) => {
120
- if (interactionState.current.addOpen) {
121
- return;
122
- }
123
- if (event.target === interactionState.current.add) {
124
- return;
125
- }
126
- if (interactionState.current.moreOpen) {
127
- hiddenTagsRef.current?.focus();
128
- setHiddenFocusedIndex(0);
129
- }
130
- else {
131
- rootRef.current?.focus();
132
- setShowedFocusedIndex(0);
133
- }
134
- },
135
- onFocusLast: (event) => {
136
- if (interactionState.current.addOpen) {
137
- return;
138
- }
139
- if (event.target === interactionState.current.add) {
140
- return;
141
- }
142
- if (interactionState.current.moreOpen) {
143
- hiddenTagsRef.current?.focus();
144
- setHiddenFocusedIndex(hiddenTags.length - 1);
145
- }
146
- else {
147
- rootRef.current?.focus();
148
- setShowedFocusedIndex(rootItems.length - 1);
149
- }
150
- },
151
- onSelect: (event) => {
152
- const { button, input } = loadActiveElement(interactionState, event.target);
153
- if (button) {
154
- button.click();
155
- event.preventDefault();
156
- event.stopPropagation();
157
- return;
158
- }
159
- // Do not handle any select if add is open
160
- if (input) {
161
- event.stopPropagation();
162
- return;
163
- }
164
- // Tags
165
- if (interactionState.current.moreOpen) {
166
- const item = loadActiveTag(interactionState, hiddenTags, hiddenFocusedIndex, false);
167
- if (item) {
168
- item.click();
169
- event.preventDefault();
170
- event.stopPropagation();
171
- }
172
- }
173
- else {
174
- const item = loadActiveTag(interactionState, showedTags, showedFocusedIndex, true);
175
- if (item) {
176
- item.click();
177
- event.preventDefault();
178
- event.stopPropagation();
179
- }
180
- }
181
- },
182
- onUnhandledKeyDown: (event) => {
183
- //Delete
184
- if (event.key === "Backspace" || event.key === "Delete") {
185
- const { button, input } = loadActiveElement(interactionState, event.target);
186
- if (button || input) {
187
- return;
188
- }
189
- if (interactionState.current.moreOpen) {
190
- const item = loadActiveTag(interactionState, hiddenTags, hiddenFocusedIndex, false);
191
- if (item) {
192
- onTagRemoveHandler(hiddenTags[hiddenFocusedIndex]);
193
- event.preventDefault();
194
- event.stopPropagation();
195
- }
196
- }
197
- else {
198
- const item = loadActiveTag(interactionState, showedTags, showedFocusedIndex, false);
199
- if (item) {
200
- onTagRemoveHandler(showedTags[showedFocusedIndex]);
201
- event.preventDefault();
202
- event.stopPropagation();
203
- }
204
- }
205
- }
206
- },
207
- }, {
208
- shouldPreventDefault: false,
209
- shouldStopPropagation: false,
210
- }), [
211
- hiddenTagsRef,
212
- hiddenFocusedIndex,
213
- hiddenTags,
214
- rootRef,
215
- showedFocusedIndex,
216
- rootItems.length,
217
- showedTags,
218
- onTagRemoveHandler,
219
- ]);
79
+ const { area, deletedIndex } = pendingTagFocus.current;
80
+ pendingTagFocus.current = null;
81
+ const primaryContainer = area === "dialog" ? tooltipTagsContainerRef.current : tagsContainerRef.current;
82
+ const primaryTagElements = getTagElements(primaryContainer);
83
+ if (focusTagByIndex(primaryTagElements, deletedIndex)) {
84
+ return;
85
+ }
86
+ const showedTagElements = getTagElements(tagsContainerRef.current);
87
+ focusTagByIndex(showedTagElements, showedTagElements.length - 1);
88
+ }, [showedTags, hiddenTags, tagsContainerRef, tooltipTagsContainerRef]);
220
89
  return {
221
90
  tag,
222
91
  setTag,
@@ -224,48 +93,9 @@ export function useTagsInteractions(rootRef, hiddenTagsRef, showedTags, hiddenTa
224
93
  onAddClose,
225
94
  onMoreOpen,
226
95
  onMoreClose,
227
- handleKeyDown,
228
- interactionState,
229
- showedFocusedIndex,
230
- hiddenFocusedIndex,
231
96
  onTagAddHandler,
232
97
  onTagRemoveHandler,
233
98
  onTagClickHandler,
99
+ interactionState,
234
100
  };
235
101
  }
236
- function loadActiveTag(interactionState, tags, index, allowMore) {
237
- // More
238
- if (index === tags.length) {
239
- if (!allowMore) {
240
- return null;
241
- }
242
- const more = interactionState.current.more;
243
- if (more) {
244
- return more;
245
- }
246
- return null;
247
- }
248
- // Tag
249
- const tag = tags[index];
250
- const item = interactionState.current.tags[tag?.id];
251
- if (item) {
252
- return item;
253
- }
254
- return null;
255
- }
256
- function loadActiveElement(interactionState, target) {
257
- const buttons = [
258
- interactionState.current.add,
259
- interactionState.current.close,
260
- interactionState.current.save,
261
- ];
262
- const button = buttons.find((b) => b === target);
263
- if (button) {
264
- return { button };
265
- }
266
- // Do not handle any select if add is open
267
- if (target === interactionState.current.input) {
268
- return { input: interactionState.current.input };
269
- }
270
- return {};
271
- }
@@ -2,5 +2,5 @@ import { type IUiTooltipProps } from "./types.js";
2
2
  /**
3
3
  * @internal
4
4
  */
5
- export declare function UiTooltip({ id, anchor, content, behaviour, arrowPlacement, triggerBy, hoverOpenDelay, hoverCloseDelay, showArrow, width, offset: offsetProp, optimalPlacement, accessibilityConfig, variant, disabled, isOpen: isOpenProp, onOpen, onClose, anchorWrapperStyles }: IUiTooltipProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function UiTooltip({ id, anchor, content, behaviour, arrowPlacement, triggerBy, hoverOpenDelay, hoverCloseDelay, showArrow, width, offset: offsetProp, optimalPlacement, accessibilityConfig, variant, disabled, isOpen: isOpenProp, onOpen, onClose, onOpenChange, anchorWrapperStyles }: IUiTooltipProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=UiTooltip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiTooltip.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTooltip/UiTooltip.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAWnE;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACtB,EAAE,EACF,MAAM,EACN,OAAO,EACP,SAAqB,EACrB,cAAsB,EACtB,SAAc,EACd,cAA2B,EAC3B,eAA4B,EAC5B,SAAgB,EAChB,KAAK,EACL,MAAM,EAAE,UAAU,EAClB,gBAAwB,EACxB,mBAAmB,EACnB,OAAmB,EACnB,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,MAAM,EACN,OAAO,EACP,mBAAmB,EACtB,EAAE,eAAe,2CAmLjB"}
1
+ {"version":3,"file":"UiTooltip.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTooltip/UiTooltip.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAWnE;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACtB,EAAE,EACF,MAAM,EACN,OAAO,EACP,SAAqB,EACrB,cAAsB,EACtB,SAAc,EACd,cAA2B,EAC3B,eAA4B,EAC5B,SAAgB,EAChB,KAAK,EACL,MAAM,EAAE,UAAU,EAClB,gBAAwB,EACxB,mBAAmB,EACnB,OAAmB,EACnB,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,MAAM,EACN,OAAO,EACP,YAAY,EACZ,mBAAmB,EACtB,EAAE,eAAe,2CA0LjB"}
@@ -12,26 +12,29 @@ const { b, e } = bem("gd-ui-kit-tooltip");
12
12
  /**
13
13
  * @internal
14
14
  */
15
- export function UiTooltip({ id, anchor, content, behaviour = "tooltip", arrowPlacement = "top", triggerBy = [], hoverOpenDelay = SHOW_DELAY, hoverCloseDelay = HIDE_DELAY, showArrow = true, width, offset: offsetProp, optimalPlacement = false, accessibilityConfig, variant = "default", disabled, isOpen: isOpenProp, onOpen, onClose, anchorWrapperStyles, }) {
15
+ export function UiTooltip({ id, anchor, content, behaviour = "tooltip", arrowPlacement = "top", triggerBy = [], hoverOpenDelay = SHOW_DELAY, hoverCloseDelay = HIDE_DELAY, showArrow = true, width, offset: offsetProp, optimalPlacement = false, accessibilityConfig, variant = "default", disabled, isOpen: isOpenProp, onOpen, onClose, onOpenChange, anchorWrapperStyles, }) {
16
16
  const [isOpenInternal, setIsOpen] = useState(false);
17
- const isOpen = !disabled && (isOpenProp === undefined ? isOpenInternal || triggerBy.length === 0 : isOpenProp);
17
+ const isControlled = isOpenProp !== undefined;
18
+ const isOpen = !disabled && (isControlled ? isOpenProp : isOpenInternal || triggerBy.length === 0);
18
19
  const arrowRef = useRef(null);
19
20
  const themeFromContext = useTheme();
20
21
  const isScopeThemed = useIsScopeThemed();
21
22
  const theme = isScopeThemed ? themeFromContext : undefined;
22
23
  const handleOpenChange = useCallback((open) => {
23
24
  setIsOpen(open);
25
+ onOpenChange?.(open);
24
26
  if (open) {
25
27
  onOpen?.();
26
28
  }
27
29
  else {
28
30
  onClose?.();
29
31
  }
30
- }, [onClose, onOpen]);
32
+ }, [onClose, onOpen, onOpenChange]);
31
33
  const handleClose = useCallback(() => {
32
34
  setIsOpen(false);
35
+ onOpenChange?.(false);
33
36
  onClose?.();
34
- }, [onClose]);
37
+ }, [onClose, onOpenChange]);
35
38
  // Custom shift middleware for tooltip arrow positioning
36
39
  const customShiftMiddleware = useMemo(() => ({
37
40
  name: "customShift",
@@ -77,9 +80,13 @@ export function UiTooltip({ id, anchor, content, behaviour = "tooltip", arrowPla
77
80
  setFloatingDimensions({ width: 0, height: 0 });
78
81
  }
79
82
  }, [isOpen, refs.floating]);
80
- // Trigger events using floating-ui interactions (handles hover, focus, click)
83
+ // Trigger events using floating-ui interactions (handles hover, focus, click).
84
+ // When controlled the open state is owned by the parent, so the anchor's own
85
+ // triggers are suppressed — otherwise an anchor that is shared with another
86
+ // popover (e.g. the labels picker reusing the permission-menu button) would
87
+ // toggle both.
81
88
  const hover = useHover(context, {
82
- enabled: triggerBy.includes("hover"),
89
+ enabled: !isControlled && triggerBy.includes("hover"),
83
90
  move: false,
84
91
  handleClose: safePolygon({ requireIntent: true }),
85
92
  delay: {
@@ -88,17 +95,18 @@ export function UiTooltip({ id, anchor, content, behaviour = "tooltip", arrowPla
88
95
  },
89
96
  });
90
97
  const focus = useFocus(context, {
91
- enabled: triggerBy.includes("focus"),
98
+ enabled: !isControlled && triggerBy.includes("focus"),
92
99
  });
93
100
  const click = useClick(context, {
94
- enabled: triggerBy.includes("click"),
101
+ enabled: !isControlled && triggerBy.includes("click"),
95
102
  });
96
103
  // Read the anchor lazily — floating-ui's `refs.reference` is a mutable
97
104
  // ref that only has a current value once the reference element mounts,
98
105
  // which is independent of our render cycle.
99
106
  const setFloatingWithAnchorRegistry = useRegisterFloatingAnchor(refs.setFloating, () => refs.reference.current instanceof Element ? refs.reference.current : null);
107
+ // Dismiss stays enabled even when controlled so outside-click / Escape can
108
+ // request a close; the request is surfaced through handleOpenChange → onOpenChange.
100
109
  const dismiss = useDismiss(context, {
101
- enabled: isOpenProp === undefined,
102
110
  outsidePress: (event) => !isClickInsideOwnSubtree(event.target, refs.floating.current),
103
111
  });
104
112
  const { getReferenceProps, getFloatingProps } = useInteractions([dismiss, hover, focus, click]);
@@ -55,9 +55,18 @@ export interface IUiTooltipProps {
55
55
  */
56
56
  onClose?: () => void;
57
57
  /**
58
- * Controls the open state of the tooltip, overrides the triggerBy prop if set
58
+ * Controls the open state of the tooltip, overrides the triggerBy prop if set.
59
+ * In controlled mode the anchor's own hover/focus/click triggers are
60
+ * suppressed — open state is driven solely by this prop — but outside-click
61
+ * and Escape still request a close via `onOpenChange`.
59
62
  */
60
63
  isOpen?: boolean;
64
+ /**
65
+ * Fires whenever an interaction requests an open-state change (anchor
66
+ * triggers when uncontrolled, outside-click / Escape always). Pair with
67
+ * `isOpen` to drive the tooltip from the parent.
68
+ */
69
+ onOpenChange?: (open: boolean) => void;
61
70
  /**
62
71
  * Custom styles for the anchor wrapper element
63
72
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTooltip/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC3B,KAAK,GACL,WAAW,GACX,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,WAAW,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uGAAuG;IACvG,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAEvC,6DAA6D;IAC7D,MAAM,EAAE,SAAS,CAAC;IAElB,gDAAgD;IAChD,OAAO,EAAE,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IAEpG,2DAA2D;IAC3D,SAAS,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAE/C,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,kIAAkI;IAClI,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAElC,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAElC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,mBAAmB,CAAC,EAAE,aAAa,CAAC;CACvC;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTooltip/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC3B,KAAK,GACL,WAAW,GACX,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,WAAW,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uGAAuG;IACvG,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAEvC,6DAA6D;IAC7D,MAAM,EAAE,SAAS,CAAC;IAElB,gDAAgD;IAChD,OAAO,EAAE,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;IAEpG,2DAA2D;IAC3D,SAAS,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAE/C,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,kIAAkI;IAClI,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAElC,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAElC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC;;OAEG;IACH,mBAAmB,CAAC,EAAE,aAAa,CAAC;CACvC;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAiBjD;;GAEG;AACH,eAAO,MAAM,MAAM,sGAsHjB,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAiBjD;;GAEG;AACH,eAAO,MAAM,MAAM,sGAwHjB,CAAC"}
@@ -20,7 +20,7 @@ function Icon({ icon }) {
20
20
  * @internal
21
21
  */
22
22
  export const Button = forwardRef(function Button({ className, describedByFromValidation: isDescribedByFromValidation = false, disabled = false, onClick = () => { }, tabIndex = 0, tagName = "button", type = "button", id, title, iconLeft, iconRight, accessibilityConfig, dataId, dataTestId, intent, size, variant, value, children, }, ref) {
23
- const { isExpanded, popupId, ariaLabel, ariaLabelledBy, ariaDescribedBy: ariaDescribedByFromConfig, popupType, ariaHaspopup, role = "button", ariaControls, ariaExpanded, } = accessibilityConfig ?? {};
23
+ const { isExpanded, popupId, ariaLabel, ariaLabelledBy, ariaDescribedBy: ariaDescribedByFromConfig, popupType, ariaHaspopup, role = "button", ariaControls, ariaExpanded, ariaPressed, } = accessibilityConfig ?? {};
24
24
  const ariaDropdownProps = {
25
25
  ...(popupId && isExpanded ? { "aria-controls": popupId } : {}),
26
26
  ...(ariaHaspopup ? { "aria-haspopup": ariaHaspopup } : {}),
@@ -63,7 +63,7 @@ export const Button = forwardRef(function Button({ className, describedByFromVal
63
63
  ]);
64
64
  }, [className, disabled, effectiveValue, intent, size, variant]);
65
65
  const TagName = tagName;
66
- return (_jsxs(TagName, { id: id, "data-id": dataId, "data-testid": testId, ref: ref, title: title, className: classNames, type: type, onClick: handleClick, "aria-disabled": disabled, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...ariaDropdownAttributesFromConfig, ...(tagName === "button" ? {} : { tabIndex }), ...(tagName !== "button" || role !== "button" ? { role } : {}), children: [
66
+ return (_jsxs(TagName, { id: id, "data-id": dataId, "data-testid": testId, ref: ref, title: title, className: classNames, type: type, onClick: handleClick, "aria-disabled": disabled, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-pressed": ariaPressed, ...ariaDropdownAttributesFromConfig, ...(tagName === "button" ? {} : { tabIndex }), ...(tagName !== "button" || role !== "button" ? { role } : {}), children: [
67
67
  _jsx(Icon, { icon: iconLeft }), effectiveValue ? _jsx("span", { className: "gd-button-text", children: effectiveValue }) : null, _jsx(Icon, { icon: iconRight })
68
68
  ] }));
69
69
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Datepicker.d.ts","sourceRoot":"","sources":["../../src/Datepicker/Datepicker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Datepicker.d.ts","sourceRoot":"","sources":["../../src/Datepicker/Datepicker.tsx"],"names":[],"mappings":"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"}
@@ -282,7 +282,7 @@ export class WrappedDatePicker extends PureComponent {
282
282
  root: this.getOverlayWrapperClasses(),
283
283
  };
284
284
  return (_jsxs("div", { "data-testid": "datepicker", className: this.getComponentClasses(), ref: this.setComponentRef, onClick: this.handleWrapperClick, children: [
285
- _jsx("input", { role: "combobox", autoComplete: "off", "aria-haspopup": "dialog", "aria-expanded": isOpen ? "true" : "false", "aria-controls": isOpen ? `datepicker-popup-${this.datePickerId}` : undefined, "aria-labelledby": accessibilityConfig?.ariaLabelledBy, "aria-label": accessibilityConfig?.ariaLabel ||
285
+ _jsx("input", { autoComplete: "off", "aria-labelledby": accessibilityConfig?.ariaLabelledBy, "aria-label": accessibilityConfig?.ariaLabel ||
286
286
  intl.formatMessage({ id: "datePicker.accessibility.label" }), "aria-describedby": accessibilityConfig?.ariaDescribedBy, onKeyDown: this.onKeyDown, tabIndex: tabIndex, onClick: () => this.setState({ isOpen: true }), ref: this.inputRef, value: inputValue, className: this.getInputClasses(), placeholder: placeholder, onChange: this.handleInputChanged, onBlur: this.handleInputBlur }), isOpen ? (_jsx("div", { id: `datepicker-popup-${this.datePickerId}`, role: "dialog", ref: this.datePickerContainerRef, children: _jsx(DayPicker, { classNames: classNamesProps, locale: convertLocale(intl.locale), showOutsideDays: true, mode: "single", selected: selectedDate, month: monthDate, onMonthChange: this.handleMonthChanged, weekStartsOn: convertWeekStart(this.props.weekStart ?? "Sunday"), onDayClick: this.handleCustomDayClick }) })) : null, _jsx("span", { className: "gd-datepicker-icon gd-icon-calendar" })
287
287
  ] }));
288
288
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Radar.d.ts","sourceRoot":"","sources":["../../../../src/Icon/icons/InsightIcons/Radar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,UAAU,2CAoChF"}
1
+ {"version":3,"file":"Radar.d.ts","sourceRoot":"","sources":["../../../../src/Icon/icons/InsightIcons/Radar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,UAAU,2CA8DhF"}
@@ -5,6 +5,8 @@ import { combineIconClasses } from "../../utils.js";
5
5
  */
6
6
  export function Radar({ className, width, height, color, ariaHidden }) {
7
7
  return (_jsxs("svg", { width: width ?? 32, height: height ?? 30, className: combineIconClasses(className), viewBox: "0 0 32 30", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": ariaHidden, children: [
8
- _jsx("path", { d: "M14.4122 15.4619L9.40442 22.4717C7.31888 20.639 6.0011 17.9536 6.0011 14.959C6.0011 14.1517 6.0988 13.3672 6.27942 12.6152L14.4122 15.4619Z", fill: color ?? "#B0BECA", fillOpacity: "0.6" }), _jsx("path", { d: "M17.0011 4.00488C21.0165 4.36689 24.4069 6.887 26.0089 10.3965L17.0011 13.5488V4.00488Z", fill: color ?? "#B0BECA", fillOpacity: "0.6" }), _jsx("path", { d: "M15.0011 13.5488L5.04504 10.0645C6.78918 6.16628 10.5491 3.36728 15.0011 3V13.5488Z", fill: color ?? "#B0BECA" }), _jsx("path", { d: "M24.7734 12.9201C24.9196 13.5616 25 14.2285 25 14.9142C25 17.5737 23.8441 19.9605 22.0098 21.6076L17.5889 15.4191L24.7734 12.9201Z", fill: color ?? "#B0BECA" }), _jsx("path", { d: "M22.1359 25.2676C20.3405 26.3395 18.2441 26.959 16.0011 26.959C13.7577 26.959 11.66 26.3406 9.86438 25.2686L16.0011 16.6787L22.1359 25.2676Z", fill: color ?? "#B0BECA", fillOpacity: "0.4" })
8
+ _jsxs("g", { clipPath: "url(#clip0_8094_5335)", children: [
9
+ _jsx("path", { d: "M24.4203 13.5509L18.8012 20.1236L10.9219 23.2587L9.32422 14.1222L16.0015 9.3075L24.4203 13.5509Z", fill: color ?? "#B0BECA", fillOpacity: "0.3" }), _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M27.4131 12.5663L23.0537 25.9823H8.94629L4.58691 12.5663L16 4.27429L27.4131 12.5663ZM13.0889 21.1288L10.2861 24.9823H21.7139L18.9111 21.1288H13.0889ZM21.5137 15.0106L19.7178 20.537L22.5195 24.3895L26.043 13.5419L21.5137 15.0106ZM9.47949 24.3885L12.2803 20.536L10.4893 15.0214L5.96094 13.5604L9.47949 24.3885ZM13.8154 20.1288H18.1846L16 17.1249L13.8154 20.1288ZM16.8096 16.538L18.9912 19.538L20.3379 15.3925L16.8096 16.538ZM13.0078 19.537L15.1895 16.538L11.6631 15.4003L13.0078 19.537ZM16.5 15.5878L20.0342 14.4403L16.5 11.8729V15.5878ZM11.959 14.4442L15.5 15.5868V11.8719L11.959 14.4442ZM6.23926 12.5995L10.7822 14.0643L15.5 10.6366V5.87195L6.23926 12.5995ZM16.5 10.6366L21.21 14.0594L25.7441 12.5887L16.5 5.87195V10.6366Z", fill: color ?? "#B0BECA", fillOpacity: "0.3" }), _jsx("path", { d: "M9.32617 24.4735C9.87846 24.4735 10.3262 24.9212 10.3262 25.4735C10.3262 26.0258 9.87846 26.4735 9.32617 26.4735C8.77389 26.4735 8.32617 26.0258 8.32617 25.4735C8.32617 24.9212 8.77389 24.4735 9.32617 24.4735Z", fill: color ?? "#B0BECA" }), _jsx("path", { d: "M22.6904 24.4735C23.2427 24.4735 23.6904 24.9212 23.6904 25.4735C23.6904 26.0258 23.2427 26.4735 22.6904 26.4735C22.1381 26.4735 21.6904 26.0258 21.6904 25.4735C21.6904 24.9212 22.1381 24.4735 22.6904 24.4735Z", fill: color ?? "#B0BECA" }), _jsx("path", { d: "M16 15.2743C16.5523 15.2743 17 15.722 17 16.2743C17 16.8266 16.5523 17.2743 16 17.2743C15.4477 17.2743 15 16.8266 15 16.2743C15 15.722 15.4477 15.2743 16 15.2743Z", fill: color ?? "#B0BECA" }), _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M25.2148 13.3905L19.1006 20.5419L18.9863 20.5868L10.5352 23.9501L8.83203 14.2069L8.77734 13.8983L9.03223 13.7157L15.9551 8.72351L25.2148 13.3905ZM9.87012 14.3436L11.3076 22.5653L18.501 19.703L23.626 13.7089L16.0469 9.88855L9.87012 14.3436Z", fill: color ?? "#B0BECA" }), _jsx("path", { d: "M5.17969 11.7743C5.73197 11.7743 6.17969 12.222 6.17969 12.7743C6.17969 13.3266 5.73197 13.7743 5.17969 13.7743C4.6274 13.7743 4.17969 13.3266 4.17969 12.7743C4.17969 12.222 4.6274 11.7743 5.17969 11.7743Z", fill: color ?? "#B0BECA" }), _jsx("path", { d: "M26.8203 11.7743C27.3726 11.7743 27.8203 12.222 27.8203 12.7743C27.8203 13.3266 27.3726 13.7743 26.8203 13.7743C26.268 13.7743 25.8203 13.3266 25.8203 12.7743C25.8203 12.222 26.268 11.7743 26.8203 11.7743Z", fill: color ?? "#B0BECA" }), _jsx("path", { d: "M16 3.91492C16.5523 3.91492 17 4.36263 17 4.91492C17 5.4672 16.5523 5.91492 16 5.91492C15.4477 5.91492 15 5.4672 15 4.91492C15 4.36263 15.4477 3.91492 16 3.91492Z", fill: color ?? "#B0BECA" })
10
+ ] }), _jsx("defs", { children: _jsx("clipPath", { id: "clip0_8094_5335", children: _jsx("rect", { width: "24", height: "24", fill: "white", transform: "translate(4 3)" }) }) })
9
11
  ] }));
10
12
  }
@@ -39,10 +39,11 @@ export interface IItemProps {
39
39
  children: ReactNode;
40
40
  className?: string;
41
41
  style?: CSSProperties;
42
+ testId?: string;
42
43
  onClick?: (e: MouseEvent<HTMLDivElement>) => void;
43
44
  }
44
45
  /**
45
46
  * @internal
46
47
  */
47
- export declare function Item({ checked, subMenu, disabled, className, children, style, onClick }: IItemProps): import("react/jsx-runtime").JSX.Element;
48
+ export declare function Item({ checked, subMenu, disabled, className, children, style, testId, onClick }: IItemProps): import("react/jsx-runtime").JSX.Element;
48
49
  //# sourceMappingURL=MenuList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../src/List/MenuList.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,mBAAmB,CAAC,EAAE,iCAAiC,CAAC;IACxD,UAAU,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EACzB,iBAAyB,EACzB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,UAAU,EACb,EAAE,kBAAkB,2CAgBpB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAE9D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,SAAS,CAAC;CACvB;AACD;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE,YAAY,2CAM9D;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,EACjB,OAAe,EACf,OAAe,EACf,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAO,EACV,EAAE,UAAU,2CAmBZ"}
1
+ {"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../src/List/MenuList.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,mBAAmB,CAAC,EAAE,iCAAiC,CAAC;IACxD,UAAU,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EACzB,iBAAyB,EACzB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,UAAU,EACb,EAAE,kBAAkB,2CAgBpB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,2CAE9D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,SAAS,CAAC;CACvB;AACD;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,EAAE,YAAY,2CAM9D;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,EACjB,OAAe,EACf,OAAe,EACf,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,EACV,EAAE,UAAU,2CAoBZ"}
@@ -24,12 +24,12 @@ export function Header({ children, ...restProps }) {
24
24
  /**
25
25
  * @internal
26
26
  */
27
- export function Item({ checked = false, subMenu = false, disabled = false, className, children, style, onClick, }) {
27
+ export function Item({ checked = false, subMenu = false, disabled = false, className, children, style, testId, onClick, }) {
28
28
  return (_jsx("div", { className: classnames({
29
29
  "gd-list-item": true,
30
30
  "gd-menu-item": true,
31
31
  "is-checked": checked,
32
32
  "is-submenu": subMenu,
33
33
  "is-disabled": disabled,
34
- }, className), style: style, onClick: onClick, children: children }));
34
+ }, className), "data-testid": testId, style: style, onClick: onClick, children: children }));
35
35
  }
package/esm/index.d.ts CHANGED
@@ -474,8 +474,9 @@ export { UiGeneralAccessRadio, type IUiGeneralAccessRadioProps, type GeneralAcce
474
474
  export { UiLabelRow, type IUiLabelRowProps, type LabelRowKind } from "./@ui/UiLabelRow/UiLabelRow.js";
475
475
  export { UiLabelChecklistRow, type IUiLabelChecklistRowProps, } from "./@ui/UiLabelChecklistRow/UiLabelChecklistRow.js";
476
476
  export { UiLabelsList, type IUiLabelsListProps, type IUiLabelsListItem, } from "./@ui/UiLabelsList/UiLabelsList.js";
477
- export { UiLabelsPicker, isLabelsPickerItemChecked, type IUiLabelsPickerProps, type IUiLabelsPickerItem, } from "./@ui/UiLabelsPicker/UiLabelsPicker.js";
477
+ export { UiLabelsChecklist, isLabelsChecklistItemChecked, type IUiLabelsChecklistProps, type IUiLabelsChecklistItem, } from "./@ui/UiLabelsChecklist/UiLabelsChecklist.js";
478
478
  export { UiPermissionMenu, type IUiPermissionMenuProps, type PermissionMenuLevel, } from "./@ui/UiPermissionMenu/UiPermissionMenu.js";
479
+ export { UiMoreOptionsMenu, type IUiMoreOptionsMenuProps, } from "./@ui/UiMoreOptionsMenu/UiMoreOptionsMenu.js";
479
480
  export { UiGranteeRowControls, type IUiGranteeRowControlsProps, } from "./@ui/UiGranteeRowControls/UiGranteeRowControls.js";
480
481
  export { UiToastProvider, useUiToast } from "./@ui/UiToast/UiToastProvider.js";
481
482
  export { UiToastItem, UiToastsContainer, type IUiToastItemProps, type IUiToastsContainerProps, } from "./@ui/UiToast/UiToastsContainer.js";