@hitachivantara/uikit-react-pentaho 0.4.3 → 0.4.4

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.
@@ -95,7 +95,6 @@ const HvCanvasBottomPanel = react.forwardRef((props, ref) => {
95
95
  id: `${id}-${tab.id}`,
96
96
  value: tab.id,
97
97
  className: classes.tab,
98
- tabIndex: 0,
99
98
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.tabTitle, children: typeof tab.title === "function" ? tab.title(overflowing) : tab.title })
100
99
  },
101
100
  tab.id
@@ -65,7 +65,6 @@ const HvCanvasSidePanel = react.forwardRef((props, ref) => {
65
65
  {
66
66
  id: `${id}-${tab.id}`,
67
67
  value: tab.id,
68
- tabIndex: 0,
69
68
  children: tab.content
70
69
  },
71
70
  tab.id
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const uikitReactCore = require("@hitachivantara/uikit-react-core");
4
+ const boxShadow = `4px 0px 8px -4px ${uikitReactCore.theme.alpha("base_dark", "12%")}`;
4
5
  const { staticClasses, useClasses } = uikitReactCore.createClasses(
5
6
  "HvCanvasSidePanel",
6
7
  {
@@ -9,7 +10,7 @@ const { staticClasses, useClasses } = uikitReactCore.createClasses(
9
10
  position: "absolute",
10
11
  top: 0,
11
12
  left: 0,
12
- boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
13
+ boxShadow,
13
14
  backgroundColor: "transparent",
14
15
  transition: "visibility 0.3s ease, width 0.3s ease",
15
16
  overflow: "hidden",
@@ -31,7 +32,7 @@ const { staticClasses, useClasses } = uikitReactCore.createClasses(
31
32
  width: "35px",
32
33
  display: "flex",
33
34
  justifyContent: "center",
34
- boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
35
+ boxShadow,
35
36
  backgroundColor: uikitReactCore.theme.colors.atmo1,
36
37
  borderRadius: "0px 16px 16px 0px",
37
38
  position: "absolute",
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
6
+ const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
7
+ const { staticClasses, useClasses } = uikitReactCore.createClasses(
8
+ "HvCanvasToolbarTabs-editor",
9
+ {
10
+ root: {
11
+ position: "relative",
12
+ display: "flex",
13
+ width: "100%",
14
+ overflow: "hidden",
15
+ "&:has($label:hover:not($edit))": {
16
+ color: uikitReactCore.theme.colors.secondary_80,
17
+ "& $editIcon": { visibility: "visible" }
18
+ }
19
+ },
20
+ edit: {
21
+ color: uikitReactCore.theme.colors.secondary_80,
22
+ borderColor: "currentColor",
23
+ backgroundColor: uikitReactCore.theme.colors.atmo1,
24
+ cursor: "text"
25
+ },
26
+ label: {
27
+ width: "100%",
28
+ boxSizing: "border-box",
29
+ border: "1px solid transparent",
30
+ borderRadius: uikitReactCore.theme.radii.base,
31
+ padding: uikitReactCore.theme.spacing(0, "sm", 0, "xs"),
32
+ textAlign: "start",
33
+ whiteSpace: "nowrap",
34
+ overflow: "hidden",
35
+ outline: "none",
36
+ "&:not($edit)": {
37
+ textOverflow: "ellipsis"
38
+ },
39
+ "&:hover:not($edit)": {
40
+ color: uikitReactCore.theme.colors.secondary_80,
41
+ borderColor: uikitReactCore.theme.colors.containerBackgroundHover,
42
+ backgroundColor: uikitReactCore.theme.colors.containerBackgroundHover
43
+ }
44
+ },
45
+ editIcon: {
46
+ position: "absolute",
47
+ right: uikitReactCore.theme.spacing(0.5),
48
+ top: 4,
49
+ width: 16,
50
+ height: 16,
51
+ visibility: "hidden",
52
+ pointerEvents: "none"
53
+ }
54
+ }
55
+ );
56
+ const ToolbarTabEditor = ({
57
+ id,
58
+ className,
59
+ edit: editProp,
60
+ value: valueProp,
61
+ defaultValue: defaultValueProp = "",
62
+ classes: classesProp,
63
+ onInput: onInputProp,
64
+ onClick: onClickProp,
65
+ onBlur: onBlurProp,
66
+ onKeyDown: onKeyDownProp,
67
+ onChange: onChangeProp,
68
+ onEditChange: onEditChangeProp,
69
+ ...others
70
+ }) => {
71
+ const { cx, classes } = useClasses(classesProp);
72
+ const contentEditableRef = react.useRef(null);
73
+ const [value, setValue] = uikitReactCore.useControlled(valueProp, defaultValueProp);
74
+ const [cachedValue, setCachedValue] = react.useState(value);
75
+ const [isEditing, setIsEditing] = uikitReactCore.useControlled(editProp, false);
76
+ const moveCursorToEnd = () => {
77
+ if (!contentEditableRef.current) return;
78
+ const element = contentEditableRef.current;
79
+ const range = document.createRange();
80
+ const selection = window.getSelection();
81
+ range.selectNodeContents(element);
82
+ range.collapse(false);
83
+ selection?.removeAllRanges();
84
+ selection?.addRange(range);
85
+ element.scrollLeft = element.scrollWidth;
86
+ };
87
+ const scrollContentToStart = () => {
88
+ if (!contentEditableRef.current) return;
89
+ const element = contentEditableRef.current;
90
+ element.scrollLeft = 0;
91
+ };
92
+ const changeEdit = (edit) => {
93
+ setIsEditing(edit);
94
+ onEditChangeProp?.(edit);
95
+ };
96
+ react.useLayoutEffect(() => {
97
+ if (isEditing) moveCursorToEnd();
98
+ }, [isEditing, value]);
99
+ const handleInput = (event) => {
100
+ const newValue = event.target.innerText || "";
101
+ setValue(newValue);
102
+ onInputProp?.(event);
103
+ onChangeProp?.(event, newValue);
104
+ };
105
+ const handleClick = (event) => {
106
+ setCachedValue(value);
107
+ changeEdit(true);
108
+ onClickProp?.(event);
109
+ };
110
+ const handleBlur = (event) => {
111
+ changeEdit(false);
112
+ scrollContentToStart();
113
+ const newValue = value.trim() || cachedValue;
114
+ setValue(newValue);
115
+ onBlurProp?.(event, newValue);
116
+ };
117
+ const handleKeyDown = (event) => {
118
+ if (uikitReactCore.isKey(event, "Enter")) {
119
+ handleBlur(event);
120
+ } else if (uikitReactCore.isKey(event, "Esc")) {
121
+ changeEdit(false);
122
+ setValue(cachedValue);
123
+ onChangeProp?.(event, cachedValue);
124
+ }
125
+ onKeyDownProp?.(event);
126
+ };
127
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { id, className: cx(classes.root, className), children: [
128
+ /* @__PURE__ */ jsxRuntime.jsx(
129
+ uikitReactCore.HvTypography,
130
+ {
131
+ ref: contentEditableRef,
132
+ contentEditable: isEditing,
133
+ className: cx(classes.label, { [classes.edit]: isEditing }),
134
+ variant: "label",
135
+ component: "span",
136
+ onInput: handleInput,
137
+ onClick: handleClick,
138
+ onBlur: handleBlur,
139
+ onKeyDown: handleKeyDown,
140
+ dangerouslySetInnerHTML: {
141
+ __html: value
142
+ },
143
+ ...others
144
+ }
145
+ ),
146
+ /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Edit, { className: classes.editIcon, iconSize: "XS" })
147
+ ] });
148
+ };
149
+ exports.ToolbarTabEditor = ToolbarTabEditor;
150
+ exports.toolbarTabEditorClasses = staticClasses;
@@ -5,23 +5,23 @@ const react = require("react");
5
5
  const reactResizeDetector = require("react-resize-detector");
6
6
  const uikitReactCore = require("@hitachivantara/uikit-react-core");
7
7
  const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
8
+ const uikitReactUtils = require("@hitachivantara/uikit-react-utils");
9
+ const ToolbarTabEditor = require("./ToolbarTabEditor.cjs");
8
10
  const ToolbarTabs_styles = require("./ToolbarTabs.styles.cjs");
9
11
  const PanelTabs = require("../PanelTabs/PanelTabs.cjs");
10
12
  const PanelTab = require("../PanelTab/PanelTab.cjs");
11
13
  const DEFAULT_LABELS = {
12
14
  create: "Create new",
13
15
  undefined: "Undefined",
14
- close: "Close",
15
16
  dropdownMenu: "Dropdown menu"
16
17
  };
17
- const DROPDOWN_MENU_WIDTH = 64;
18
- const BORDER_WIDTH = 2;
19
18
  const HvCanvasToolbarTabs = react.forwardRef((props, ref) => {
20
19
  const {
21
20
  children,
22
21
  className,
23
22
  selectedTabId: selectedTabIdProp,
24
23
  icon: iconProp,
24
+ allowTabEdit = true,
25
25
  tabs: tabsProp,
26
26
  defaultTabs: defaultTabsProp = [],
27
27
  labels: labelsProp,
@@ -32,13 +32,6 @@ const HvCanvasToolbarTabs = react.forwardRef((props, ref) => {
32
32
  } = uikitReactCore.useDefaultProps("HvCanvasToolbarTabs", props);
33
33
  const { classes, cx } = ToolbarTabs_styles.useClasses(classesProp);
34
34
  const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
35
- const { width: tabWidth = 0, ref: tabRef } = reactResizeDetector.useResizeDetector({
36
- handleHeight: false,
37
- refreshMode: "debounce",
38
- refreshOptions: {
39
- leading: true
40
- }
41
- });
42
35
  const { width: actionsWidth = 0, ref: actionsRef } = reactResizeDetector.useResizeDetector({
43
36
  handleHeight: false
44
37
  });
@@ -50,56 +43,7 @@ const HvCanvasToolbarTabs = react.forwardRef((props, ref) => {
50
43
  selectedTabIdProp,
51
44
  tabs?.[0]?.id ?? "none"
52
45
  );
53
- const rootWidthLimitReached = react.useRef(false);
54
- const groupTabs = react.useCallback(
55
- (allTabs) => {
56
- let fullTabWidth = ToolbarTabs_styles.MIN_TAB_WIDTH;
57
- const rootScrollWidth = rootRef.current?.scrollWidth ?? 0;
58
- if (rootScrollWidth - rootWidth >= 1 || rootWidthLimitReached.current) {
59
- fullTabWidth = tabWidth + BORDER_WIDTH;
60
- rootWidthLimitReached.current = true;
61
- }
62
- const totalWidth = allTabs.length * fullTabWidth + DROPDOWN_MENU_WIDTH;
63
- if (tabWidth > 0 && totalWidth > rootWidth - actionsWidth) {
64
- const visibleCount = Math.floor(
65
- (rootWidth - actionsWidth - DROPDOWN_MENU_WIDTH) / fullTabWidth
66
- );
67
- const temporaryHiddenTabs = allTabs.slice(visibleCount);
68
- const selectedTabHiddenIndex = temporaryHiddenTabs.findIndex(
69
- (tab) => tab.id === selectedTab
70
- );
71
- const excludedTabIndex = visibleCount - 1;
72
- const shouldShuffle = selectedTabHiddenIndex !== -1 && visibleCount > 0;
73
- if (shouldShuffle) {
74
- return {
75
- visibleTabs: [
76
- ...tabs.slice(0, excludedTabIndex),
77
- temporaryHiddenTabs[selectedTabHiddenIndex]
78
- ].filter((tab) => tab),
79
- hiddenTabs: [
80
- tabs[excludedTabIndex],
81
- ...temporaryHiddenTabs.filter(
82
- (tab, i) => i !== selectedTabHiddenIndex
83
- )
84
- ].filter((tab) => tab)
85
- };
86
- }
87
- return {
88
- visibleTabs: tabs.slice(0, visibleCount),
89
- hiddenTabs: temporaryHiddenTabs
90
- };
91
- }
92
- return {
93
- visibleTabs: allTabs,
94
- hiddenTabs: []
95
- };
96
- },
97
- [actionsWidth, rootRef, rootWidth, selectedTab, tabWidth, tabs]
98
- );
99
- const { hiddenTabs, visibleTabs } = react.useMemo(
100
- () => groupTabs(tabs),
101
- [groupTabs, tabs]
102
- );
46
+ const [isEditing, setIsEditing] = react.useState(false);
103
47
  const rootForkedRef = uikitReactCore.useForkRef(ref, rootRef);
104
48
  const handleChangeTabs = (event, newTabs) => {
105
49
  setTabs(newTabs);
@@ -120,20 +64,69 @@ const HvCanvasToolbarTabs = react.forwardRef((props, ref) => {
120
64
  handleChangeSelectedTab(event, newTab.id);
121
65
  handleChangeTabs?.(event, newTabs);
122
66
  };
123
- const handleClose = (event, tabId) => {
67
+ const handleEdit = (event, value, tabId) => handleChangeTabs(
68
+ event,
69
+ tabs.map((tab) => tab.id === tabId ? { ...tab, label: value } : tab)
70
+ );
71
+ const handleDeleteTab = (event, tabId) => {
124
72
  const newTabs = tabs.filter((tab) => tab.id !== tabId);
125
73
  if (tabId === selectedTab) {
126
74
  const currentIndex = tabs.findIndex((tab) => tab.id === tabId);
127
75
  const newIndex = currentIndex - 1 < 0 ? 0 : currentIndex - 1;
128
76
  handleChangeSelectedTab(event, newTabs[newIndex]?.id ?? "none");
129
77
  }
130
- if (hiddenTabs.length === 1) rootWidthLimitReached.current = false;
131
78
  handleChangeTabs(event, newTabs);
132
79
  };
133
- const handleEdit = (event, value, tabId) => handleChangeTabs(
134
- event,
135
- tabs.map((tab) => tab.id === tabId ? { ...tab, label: value } : tab)
136
- );
80
+ const handleKeyDownTab = (event, tabId) => {
81
+ if (uikitReactCore.isKey(event, "Delete") || uikitReactCore.isKey(event, "Backspace")) {
82
+ handleDeleteTab(event, tabId);
83
+ event.stopPropagation();
84
+ } else if (uikitReactCore.isKey(event, "Enter")) {
85
+ setIsEditing(true);
86
+ }
87
+ };
88
+ const { tabWidth, hiddenTabs, visibleTabs } = react.useMemo(() => {
89
+ let availableWidth = rootWidth - actionsWidth;
90
+ let calculatedTabWidth = availableWidth / tabs.length;
91
+ let clamped = uikitReactUtils.clamp(calculatedTabWidth, ToolbarTabs_styles.MAX_TAB_WIDTH, ToolbarTabs_styles.MIN_TAB_WIDTH);
92
+ if (calculatedTabWidth < ToolbarTabs_styles.MIN_TAB_WIDTH) {
93
+ availableWidth -= ToolbarTabs_styles.DROPDOWN_MENU_WIDTH;
94
+ const visibleCount = Math.floor(availableWidth / ToolbarTabs_styles.MIN_TAB_WIDTH);
95
+ calculatedTabWidth = availableWidth / visibleCount;
96
+ clamped = uikitReactUtils.clamp(calculatedTabWidth, ToolbarTabs_styles.MAX_TAB_WIDTH, ToolbarTabs_styles.MIN_TAB_WIDTH);
97
+ const temporaryHiddenTabs = tabs.slice(visibleCount);
98
+ const selectedTabHiddenIndex = temporaryHiddenTabs.findIndex(
99
+ (tab) => tab.id === selectedTab
100
+ );
101
+ const excludedTabIndex = visibleCount - 1;
102
+ const shouldShuffle = selectedTabHiddenIndex !== -1 && visibleCount > 0;
103
+ if (shouldShuffle) {
104
+ return {
105
+ tabWidth: clamped,
106
+ visibleTabs: [
107
+ ...tabs.slice(0, excludedTabIndex),
108
+ temporaryHiddenTabs[selectedTabHiddenIndex]
109
+ ].filter((tab) => tab),
110
+ hiddenTabs: [
111
+ tabs[excludedTabIndex],
112
+ ...temporaryHiddenTabs.filter(
113
+ (tab, i) => i !== selectedTabHiddenIndex
114
+ )
115
+ ].filter((tab) => tab)
116
+ };
117
+ }
118
+ return {
119
+ tabWidth: clamped,
120
+ visibleTabs: tabs.slice(0, visibleCount),
121
+ hiddenTabs: temporaryHiddenTabs
122
+ };
123
+ }
124
+ return {
125
+ tabWidth: clamped,
126
+ visibleTabs: tabs,
127
+ hiddenTabs: []
128
+ };
129
+ }, [actionsWidth, rootWidth, selectedTab, tabs]);
137
130
  return /* @__PURE__ */ jsxRuntime.jsxs(
138
131
  "div",
139
132
  {
@@ -142,99 +135,74 @@ const HvCanvasToolbarTabs = react.forwardRef((props, ref) => {
142
135
  ...others,
143
136
  children: [
144
137
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.tabsContainer, children: [
145
- visibleTabs.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
146
- /* @__PURE__ */ jsxRuntime.jsx(
147
- PanelTabs.HvCanvasPanelTabs,
148
- {
149
- classes: { list: classes.tabsList },
150
- value: selectedTab,
151
- onChange: handleChangeSelectedTab,
152
- children: visibleTabs.map((tab, index) => /* @__PURE__ */ jsxRuntime.jsx(
138
+ visibleTabs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
139
+ PanelTabs.HvCanvasPanelTabs,
140
+ {
141
+ classes: { list: classes.tabsList },
142
+ value: selectedTab,
143
+ onChange: handleChangeSelectedTab,
144
+ children: visibleTabs.map((tab, index) => {
145
+ const btnSelected = selectedTab === tab.id;
146
+ return /* @__PURE__ */ jsxRuntime.jsx(
153
147
  PanelTab.HvCanvasPanelTab,
154
148
  {
155
- ref: index === 0 ? tabRef : void 0,
149
+ style: {
150
+ width: tabWidth
151
+ },
156
152
  id: String(tab.id),
157
153
  className: classes.tab,
158
154
  value: tab.id,
159
- tabIndex: 0,
160
- "aria-label": tab.label,
155
+ onKeyDown: (event) => handleKeyDownTab(event, tab.id),
161
156
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.tabContent, children: [
162
- /* @__PURE__ */ jsxRuntime.jsx(
163
- "div",
157
+ tab.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.tabIconContainer, children: tab.icon }),
158
+ !btnSelected || !allowTabEdit ? /* @__PURE__ */ jsxRuntime.jsx(
159
+ uikitReactCore.HvOverflowTooltip,
160
+ {
161
+ classes: {
162
+ tooltipAnchor: classes.tabLabel
163
+ },
164
+ data: tab.label
165
+ }
166
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
167
+ ToolbarTabEditor.ToolbarTabEditor,
164
168
  {
165
- className: cx({
166
- [classes.tabIcon]: !!tab.icon
167
- }),
168
- children: tab.icon
169
+ classes: {
170
+ label: cx(classes.tabLabel, classes.tabLabelEditor)
171
+ },
172
+ value: tab.label,
173
+ edit: isEditing,
174
+ onEditChange: setIsEditing,
175
+ onChange: (event, value) => handleEdit(event, value, tab.id),
176
+ onBlur: (event, value) => handleEdit(event, value, tab.id),
177
+ onKeyDown: (e) => e.stopPropagation()
169
178
  }
170
179
  ),
171
- /* @__PURE__ */ jsxRuntime.jsx("div", { role: "none", children: tab.label }),
172
- /* @__PURE__ */ jsxRuntime.jsx("div", { role: "none", children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Close, {}) }),
180
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.closeIconContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
181
+ uikitReactIcons.CloseXS,
182
+ {
183
+ "aria-hidden": true,
184
+ iconSize: "XS",
185
+ onClick: (event) => {
186
+ handleDeleteTab(event, tab.id);
187
+ event.stopPropagation();
188
+ }
189
+ }
190
+ ) }),
173
191
  selectedTab !== tab.id && visibleTabs[index + 1]?.id !== selectedTab && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.tabDivider })
174
192
  ] })
175
193
  },
176
194
  tab.id
177
- ))
178
- }
179
- ),
180
- visibleTabs.map((tab, index) => {
181
- const btnDisabled = selectedTab !== tab.id;
182
- const num = index + 1;
183
- return /* @__PURE__ */ jsxRuntime.jsxs(
184
- "div",
185
- {
186
- style: {
187
- // @ts-ignore
188
- "--full-tab-width": `calc(${tabWidth}px + ${BORDER_WIDTH}px)`,
189
- "--right": `calc(${num} * var(--full-tab-width))`,
190
- "--editor-width": `calc(var(--full-tab-width) - ${tab.icon ? 2 : 1} * ${ToolbarTabs_styles.ICON_WIDTH}px - ${uikitReactCore.theme.space.xs})`
191
- },
192
- children: [
193
- btnDisabled ? /* @__PURE__ */ jsxRuntime.jsx(
194
- "button",
195
- {
196
- type: "button",
197
- className: classes.tabLabel,
198
- onClick: (event) => handleChangeSelectedTab(event, tab.id),
199
- "aria-label": tab.label,
200
- tabIndex: -1,
201
- children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvOverflowTooltip, { data: tab.label })
202
- }
203
- ) : /* @__PURE__ */ jsxRuntime.jsx(
204
- uikitReactCore.HvInlineEditor,
205
- {
206
- className: cx(classes.tabLabel, classes.activeTabLabel),
207
- "aria-label": tab.label,
208
- value: tab.label,
209
- buttonProps: { size: "sm" },
210
- onChange: (event, value) => handleEdit(event, value, tab.id)
211
- }
212
- ),
213
- /* @__PURE__ */ jsxRuntime.jsx(
214
- uikitReactCore.HvIconButton,
215
- {
216
- style: {
217
- // @ts-ignore
218
- "--close-color": btnDisabled ? uikitReactCore.theme.colors.secondary_60 : uikitReactCore.theme.colors.primary
219
- },
220
- className: classes.closeButton,
221
- title: labels.close,
222
- variant: "primaryGhost",
223
- onClick: (event) => handleClose(event, tab.id),
224
- children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.CloseXS, {})
225
- },
226
- tab.id
227
- )
228
- ]
229
- },
230
- tab.id
231
- );
232
- })
233
- ] }),
195
+ );
196
+ })
197
+ }
198
+ ),
234
199
  hiddenTabs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
235
200
  uikitReactCore.HvDropDownMenu,
236
201
  {
237
- className: classes.dropdownMenu,
202
+ classes: {
203
+ container: classes.dropdownMenuContainer,
204
+ menuListRoot: classes.dropdownMenuListRoot
205
+ },
238
206
  dataList: hiddenTabs,
239
207
  icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.MoreOptionsHorizontal, {}),
240
208
  labels: { dropdownMenu: labels.dropdownMenu },