@expcat/tigercat-react 1.2.16 → 1.2.23

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.
@@ -66,6 +66,10 @@ var Drawer = ({
66
66
  className,
67
67
  bodyClassName,
68
68
  destroyOnClose = false,
69
+ destroyOnCloseAfterLeave = false,
70
+ fullscreenOnMobile = true,
71
+ panelClassName,
72
+ panelStyle,
69
73
  onClose,
70
74
  onOpenChange,
71
75
  onAfterEnter,
@@ -78,10 +82,18 @@ var Drawer = ({
78
82
  ...rest
79
83
  }) => {
80
84
  const [hasBeenOpened, setHasBeenOpened] = React.useState(open);
85
+ const [deferredRendered, setDeferredRendered] = React.useState(open);
81
86
  useEffect(() => {
82
- if (open) setHasBeenOpened(true);
83
- }, [open]);
84
- const shouldRender = destroyOnClose ? open : hasBeenOpened;
87
+ if (open) {
88
+ setHasBeenOpened(true);
89
+ setDeferredRendered(true);
90
+ return;
91
+ }
92
+ if (destroyOnClose && !destroyOnCloseAfterLeave) {
93
+ setDeferredRendered(false);
94
+ }
95
+ }, [destroyOnClose, destroyOnCloseAfterLeave, open]);
96
+ const shouldRender = destroyOnClose ? destroyOnCloseAfterLeave ? deferredRendered : open : hasBeenOpened;
85
97
  const handleClose = useCallback(() => {
86
98
  onOpenChange?.(false);
87
99
  onClose?.();
@@ -105,10 +117,13 @@ var Drawer = ({
105
117
  onAfterEnter?.();
106
118
  } else {
107
119
  onAfterLeave?.();
120
+ if (destroyOnClose && destroyOnCloseAfterLeave) {
121
+ setDeferredRendered(false);
122
+ }
108
123
  }
109
124
  }, ANIMATION_DURATION_MS);
110
125
  return () => window.clearTimeout(timer);
111
- }, [open, onAfterEnter, onAfterLeave]);
126
+ }, [destroyOnClose, destroyOnCloseAfterLeave, open, onAfterEnter, onAfterLeave]);
112
127
  const reactId = useId();
113
128
  const drawerId = useMemo(() => `tiger-drawer-${reactId}`, [reactId]);
114
129
  const titleId = `${drawerId}-title`;
@@ -191,9 +206,10 @@ var Drawer = ({
191
206
  const containerClasses = classNames(getDrawerContainerClasses(), !open && "pointer-events-none");
192
207
  const maskClasses = getDrawerMaskClasses(open);
193
208
  const panelClasses = classNames(
194
- getDrawerPanelClasses(placement, open, size),
209
+ getDrawerPanelClasses(placement, open, size, fullscreenOnMobile),
195
210
  "flex flex-col",
196
- className
211
+ className,
212
+ panelClassName
197
213
  );
198
214
  const headerClasses = getDrawerHeaderClasses();
199
215
  const bodyClasses = getDrawerBodyClasses(bodyClassName);
@@ -203,12 +219,13 @@ var Drawer = ({
203
219
  if (!shouldRender) {
204
220
  return null;
205
221
  }
222
+ const isLeavingBeforeDestroy = destroyOnClose && destroyOnCloseAfterLeave && !open;
206
223
  const drawerContent = /* @__PURE__ */ jsxs(
207
224
  "div",
208
225
  {
209
226
  className: containerClasses,
210
227
  style: { zIndex },
211
- hidden: !open,
228
+ hidden: !open && !isLeavingBeforeDestroy,
212
229
  "aria-hidden": !open ? "true" : void 0,
213
230
  "data-tiger-drawer-root": "",
214
231
  children: [
@@ -226,6 +243,7 @@ var Drawer = ({
226
243
  {
227
244
  className: panelClasses,
228
245
  style: {
246
+ ...panelStyle,
229
247
  ...style,
230
248
  ...width ? {
231
249
  [placement === "left" || placement === "right" ? "width" : "height"]: typeof width === "number" ? `${width}px` : width
@@ -66,6 +66,10 @@ var Drawer = ({
66
66
  className,
67
67
  bodyClassName,
68
68
  destroyOnClose = false,
69
+ destroyOnCloseAfterLeave = false,
70
+ fullscreenOnMobile = true,
71
+ panelClassName,
72
+ panelStyle,
69
73
  onClose,
70
74
  onOpenChange,
71
75
  onAfterEnter,
@@ -78,10 +82,18 @@ var Drawer = ({
78
82
  ...rest
79
83
  }) => {
80
84
  const [hasBeenOpened, setHasBeenOpened] = _react2.default.useState(open);
85
+ const [deferredRendered, setDeferredRendered] = _react2.default.useState(open);
81
86
  _react.useEffect.call(void 0, () => {
82
- if (open) setHasBeenOpened(true);
83
- }, [open]);
84
- const shouldRender = destroyOnClose ? open : hasBeenOpened;
87
+ if (open) {
88
+ setHasBeenOpened(true);
89
+ setDeferredRendered(true);
90
+ return;
91
+ }
92
+ if (destroyOnClose && !destroyOnCloseAfterLeave) {
93
+ setDeferredRendered(false);
94
+ }
95
+ }, [destroyOnClose, destroyOnCloseAfterLeave, open]);
96
+ const shouldRender = destroyOnClose ? destroyOnCloseAfterLeave ? deferredRendered : open : hasBeenOpened;
85
97
  const handleClose = _react.useCallback.call(void 0, () => {
86
98
  _optionalChain([onOpenChange, 'optionalCall', _ => _(false)]);
87
99
  _optionalChain([onClose, 'optionalCall', _2 => _2()]);
@@ -105,10 +117,13 @@ var Drawer = ({
105
117
  _optionalChain([onAfterEnter, 'optionalCall', _3 => _3()]);
106
118
  } else {
107
119
  _optionalChain([onAfterLeave, 'optionalCall', _4 => _4()]);
120
+ if (destroyOnClose && destroyOnCloseAfterLeave) {
121
+ setDeferredRendered(false);
122
+ }
108
123
  }
109
124
  }, _tigercatcore.ANIMATION_DURATION_MS);
110
125
  return () => window.clearTimeout(timer);
111
- }, [open, onAfterEnter, onAfterLeave]);
126
+ }, [destroyOnClose, destroyOnCloseAfterLeave, open, onAfterEnter, onAfterLeave]);
112
127
  const reactId = _react.useId.call(void 0, );
113
128
  const drawerId = _react.useMemo.call(void 0, () => `tiger-drawer-${reactId}`, [reactId]);
114
129
  const titleId = `${drawerId}-title`;
@@ -191,9 +206,10 @@ var Drawer = ({
191
206
  const containerClasses = _tigercatcore.classNames.call(void 0, _tigercatcore.getDrawerContainerClasses.call(void 0, ), !open && "pointer-events-none");
192
207
  const maskClasses = _tigercatcore.getDrawerMaskClasses.call(void 0, open);
193
208
  const panelClasses = _tigercatcore.classNames.call(void 0,
194
- _tigercatcore.getDrawerPanelClasses.call(void 0, placement, open, size),
209
+ _tigercatcore.getDrawerPanelClasses.call(void 0, placement, open, size, fullscreenOnMobile),
195
210
  "flex flex-col",
196
- className
211
+ className,
212
+ panelClassName
197
213
  );
198
214
  const headerClasses = _tigercatcore.getDrawerHeaderClasses.call(void 0, );
199
215
  const bodyClasses = _tigercatcore.getDrawerBodyClasses.call(void 0, bodyClassName);
@@ -203,12 +219,13 @@ var Drawer = ({
203
219
  if (!shouldRender) {
204
220
  return null;
205
221
  }
222
+ const isLeavingBeforeDestroy = destroyOnClose && destroyOnCloseAfterLeave && !open;
206
223
  const drawerContent = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
207
224
  "div",
208
225
  {
209
226
  className: containerClasses,
210
227
  style: { zIndex },
211
- hidden: !open,
228
+ hidden: !open && !isLeavingBeforeDestroy,
212
229
  "aria-hidden": !open ? "true" : void 0,
213
230
  "data-tiger-drawer-root": "",
214
231
  children: [
@@ -226,6 +243,7 @@ var Drawer = ({
226
243
  {
227
244
  className: panelClasses,
228
245
  style: {
246
+ ...panelStyle,
229
247
  ...style,
230
248
  ...width ? {
231
249
  [placement === "left" || placement === "right" ? "width" : "height"]: typeof width === "number" ? `${width}px` : width
@@ -1,3 +1,8 @@
1
+ import {
2
+ renderBodyPortal,
3
+ useFloating
4
+ } from "./chunk-SEWNVIHH.mjs";
5
+
1
6
  // src/components/Menu.tsx
2
7
  import React, {
3
8
  createContext,
@@ -17,6 +22,7 @@ import {
17
22
  getSubMenuTitleClasses,
18
23
  getSubMenuExpandIconClasses,
19
24
  getSubmenuPopupZIndex,
25
+ getTransformOrigin,
20
26
  filterMenuItems,
21
27
  isKeySelected,
22
28
  isKeyOpen,
@@ -56,6 +62,7 @@ var Menu = ({
56
62
  collapsed = false,
57
63
  multiple = true,
58
64
  inlineIndent = 24,
65
+ popupPortal = false,
59
66
  className,
60
67
  style,
61
68
  onSelect,
@@ -69,6 +76,7 @@ var Menu = ({
69
76
  children
70
77
  }) => {
71
78
  const menuRef = useRef(null);
79
+ const resolvedMode = collapsed && mode === "inline" ? "vertical" : mode;
72
80
  const [internalSelectedKeys, setInternalSelectedKeys] = useState(defaultSelectedKeys);
73
81
  const [internalOpenKeys, setInternalOpenKeys] = useState(defaultOpenKeys);
74
82
  const [internalSearchValue, setInternalSearchValue] = useState(defaultSearchValue);
@@ -107,20 +115,31 @@ var Menu = ({
107
115
  [controlledSearchValue, onSearch]
108
116
  );
109
117
  const menuClasses = useMemo(() => {
110
- return classNames(getMenuClasses(mode, theme, collapsed), className);
111
- }, [mode, theme, collapsed, className]);
118
+ return classNames(getMenuClasses(resolvedMode, theme, collapsed), className);
119
+ }, [resolvedMode, theme, collapsed, className]);
112
120
  const contextValue = useMemo(
113
121
  () => ({
114
- mode,
122
+ mode: resolvedMode,
115
123
  theme,
116
124
  collapsed,
117
125
  inlineIndent,
126
+ popupPortal,
118
127
  selectedKeys,
119
128
  openKeys,
120
129
  handleSelect,
121
130
  handleOpenChange
122
131
  }),
123
- [mode, theme, collapsed, inlineIndent, selectedKeys, openKeys, handleSelect, handleOpenChange]
132
+ [
133
+ resolvedMode,
134
+ theme,
135
+ collapsed,
136
+ inlineIndent,
137
+ popupPortal,
138
+ selectedKeys,
139
+ openKeys,
140
+ handleSelect,
141
+ handleOpenChange
142
+ ]
124
143
  );
125
144
  const filteredItems = useMemo(
126
145
  () => filterMenuItems(items ?? [], searchValue),
@@ -147,7 +166,7 @@ var Menu = ({
147
166
  const emptyChild = items && items.length > 0 && dataChildren.length === 0 && !hasSlotChildren ? /* @__PURE__ */ jsx("li", { role: "none", children: /* @__PURE__ */ jsx("div", { className: menuSearchEmptyClasses, children: emptyText }) }) : null;
148
167
  useEffect(() => {
149
168
  if (menuRef.current) initRovingTabIndex(menuRef.current);
150
- }, [mode, collapsed, selectedKeys, openKeys, filteredItems]);
169
+ }, [resolvedMode, collapsed, selectedKeys, openKeys, filteredItems]);
151
170
  return /* @__PURE__ */ jsx(MenuContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs(
152
171
  "ul",
153
172
  {
@@ -156,7 +175,8 @@ var Menu = ({
156
175
  style,
157
176
  role: "menu",
158
177
  "data-tiger-menu-root": "true",
159
- "data-tiger-menu-mode": mode,
178
+ "data-tiger-menu-mode": resolvedMode,
179
+ "data-tiger-menu-requested-mode": mode,
160
180
  children: [
161
181
  searchable && /* @__PURE__ */ jsx("li", { role: "none", className: menuSearchFieldClasses, children: /* @__PURE__ */ jsx(
162
182
  "input",
@@ -283,14 +303,19 @@ var MenuItemGroup = ({
283
303
  title,
284
304
  className,
285
305
  children,
286
- level = 0
306
+ level = 0,
307
+ collapsed
287
308
  }) => {
288
309
  const enhancedChildren = React.Children.map(children, (child) => {
289
310
  if (!React.isValidElement(child)) return child;
290
311
  if (child.type === MenuItem || isComponentNamed(child.type, "SubMenu")) {
291
- return React.cloneElement(child, {
292
- level
293
- });
312
+ return React.cloneElement(
313
+ child,
314
+ {
315
+ level,
316
+ collapsed
317
+ }
318
+ );
294
319
  }
295
320
  return child;
296
321
  });
@@ -326,12 +351,28 @@ var SubMenu = ({
326
351
  }
327
352
  const [isHovered, setIsHovered] = useState(false);
328
353
  const [isOpenByKeyboard, setIsOpenByKeyboard] = useState(false);
354
+ const popupCloseTimerRef = useRef(null);
355
+ const titleRef = useRef(null);
356
+ const popupRef = useRef(null);
329
357
  const submenuContentRef = useRef(null);
330
358
  const heightTransitionRef = useRef(null);
331
359
  const effectiveCollapsed = collapsedOverride ?? (menuContext ? menuContext.collapsed : false);
332
360
  const isPopup = !!menuContext && (menuContext.mode === "horizontal" || menuContext.mode === "vertical" && effectiveCollapsed);
333
361
  const isOpen = !!menuContext && isKeyOpen(itemKey, menuContext.openKeys);
334
362
  const isExpanded = isPopup ? isHovered || isOpenByKeyboard : isOpen;
363
+ const popupPortal = Boolean(isPopup && menuContext?.popupPortal);
364
+ const popupPlacement = menuContext?.mode === "horizontal" && level === 0 ? "bottom-start" : "right-start";
365
+ const {
366
+ x: popupX,
367
+ y: popupY,
368
+ placement: currentPopupPlacement
369
+ } = useFloating({
370
+ referenceRef: titleRef,
371
+ floatingRef: popupRef,
372
+ enabled: popupPortal && isExpanded,
373
+ placement: popupPlacement,
374
+ offset: 4
375
+ });
335
376
  const isInlineOrVertical = menuContext?.mode !== "horizontal" && !isPopup;
336
377
  const [hasRenderedInline, setHasRenderedInline] = useState(
337
378
  () => isInlineOrVertical ? isExpanded : false
@@ -344,7 +385,14 @@ var SubMenu = ({
344
385
  heightTransitionRef.current?.dispose();
345
386
  heightTransitionRef.current = null;
346
387
  }, []);
347
- useEffect(() => disposeHeightTransition, [disposeHeightTransition]);
388
+ useEffect(() => {
389
+ return () => {
390
+ disposeHeightTransition();
391
+ if (popupCloseTimerRef.current) {
392
+ clearTimeout(popupCloseTimerRef.current);
393
+ }
394
+ };
395
+ }, [disposeHeightTransition]);
348
396
  useLayoutEffect(() => {
349
397
  if (!isInlineOrVertical || !hasRenderedInline || !submenuContentRef.current) {
350
398
  disposeHeightTransition();
@@ -384,14 +432,25 @@ var SubMenu = ({
384
432
  menuContext.handleOpenChange(itemKey);
385
433
  }, [disabled, menuContext, itemKey, isPopup]);
386
434
  const handleMouseEnter = useCallback(() => {
435
+ if (popupCloseTimerRef.current) {
436
+ clearTimeout(popupCloseTimerRef.current);
437
+ popupCloseTimerRef.current = null;
438
+ }
387
439
  if (menuContext?.mode === "horizontal" || isPopup) setIsHovered(true);
388
440
  }, [menuContext, isPopup]);
389
441
  const handleMouseLeave = useCallback(() => {
390
442
  if (menuContext?.mode === "horizontal" || isPopup) {
391
- setIsHovered(false);
392
- setIsOpenByKeyboard(false);
443
+ const close = () => {
444
+ setIsHovered(false);
445
+ setIsOpenByKeyboard(false);
446
+ };
447
+ if (popupPortal) {
448
+ popupCloseTimerRef.current = setTimeout(close, 120);
449
+ return;
450
+ }
451
+ close();
393
452
  }
394
- }, [menuContext, isPopup]);
453
+ }, [menuContext, isPopup, popupPortal]);
395
454
  const openInline = useCallback(
396
455
  (titleEl) => {
397
456
  if (!menuContext) return;
@@ -496,7 +555,8 @@ var SubMenu = ({
496
555
  return React.cloneElement(
497
556
  child,
498
557
  {
499
- level: nextLevel
558
+ level: nextLevel,
559
+ collapsed: isPopup ? false : void 0
500
560
  }
501
561
  );
502
562
  }
@@ -504,6 +564,31 @@ var SubMenu = ({
504
564
  });
505
565
  const popupZIndex = isPopup ? getSubmenuPopupZIndex(level) : {};
506
566
  if (isPopup) {
567
+ const popupStyle = popupPortal ? {
568
+ display: isExpanded ? "block" : "none",
569
+ position: "absolute",
570
+ left: popupX,
571
+ top: popupY,
572
+ transformOrigin: getTransformOrigin(currentPopupPlacement),
573
+ ...popupZIndex
574
+ } : { display: isExpanded ? "block" : "none", ...popupZIndex };
575
+ const popup = /* @__PURE__ */ jsx(
576
+ "ul",
577
+ {
578
+ ref: popupPortal ? popupRef : void 0,
579
+ className: contentClasses,
580
+ style: popupStyle,
581
+ role: "menu",
582
+ "aria-hidden": isExpanded ? void 0 : "true",
583
+ onMouseEnter: popupPortal ? handleMouseEnter : void 0,
584
+ onMouseLeave: popupPortal ? handleMouseLeave : void 0,
585
+ "data-tiger-submenu-popup": "",
586
+ children: enhancedChildren
587
+ }
588
+ );
589
+ if (popupPortal) {
590
+ return renderBodyPortal(popup);
591
+ }
507
592
  return /* @__PURE__ */ jsx(
508
593
  "ul",
509
594
  {
@@ -511,6 +596,7 @@ var SubMenu = ({
511
596
  style: { display: isExpanded ? "block" : "none", ...popupZIndex },
512
597
  role: "menu",
513
598
  "aria-hidden": isExpanded ? void 0 : "true",
599
+ "data-tiger-submenu-popup": "",
514
600
  children: enhancedChildren
515
601
  }
516
602
  );
@@ -533,7 +619,7 @@ var SubMenu = ({
533
619
  return /* @__PURE__ */ jsxs(
534
620
  "li",
535
621
  {
536
- className: isPopup ? "relative" : "",
622
+ className: isPopup && !popupPortal ? "relative" : "",
537
623
  onMouseEnter: handleMouseEnter,
538
624
  onMouseLeave: handleMouseLeave,
539
625
  role: "none",
@@ -541,6 +627,7 @@ var SubMenu = ({
541
627
  /* @__PURE__ */ jsx(
542
628
  "button",
543
629
  {
630
+ ref: titleRef,
544
631
  type: "button",
545
632
  className: titleClasses,
546
633
  style: indentStyle,
@@ -1,4 +1,9 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/components/Menu.tsx
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+ var _chunkSTTQ5LXXjs = require('./chunk-STTQ5LXX.js');
5
+
6
+ // src/components/Menu.tsx
2
7
 
3
8
 
4
9
 
@@ -37,6 +42,7 @@ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
37
42
 
38
43
 
39
44
 
45
+
40
46
 
41
47
 
42
48
  var _tigercatcore = require('@expcat/tigercat-core');
@@ -56,6 +62,7 @@ var Menu = ({
56
62
  collapsed = false,
57
63
  multiple = true,
58
64
  inlineIndent = 24,
65
+ popupPortal = false,
59
66
  className,
60
67
  style,
61
68
  onSelect,
@@ -69,6 +76,7 @@ var Menu = ({
69
76
  children
70
77
  }) => {
71
78
  const menuRef = _react.useRef.call(void 0, null);
79
+ const resolvedMode = collapsed && mode === "inline" ? "vertical" : mode;
72
80
  const [internalSelectedKeys, setInternalSelectedKeys] = _react.useState.call(void 0, defaultSelectedKeys);
73
81
  const [internalOpenKeys, setInternalOpenKeys] = _react.useState.call(void 0, defaultOpenKeys);
74
82
  const [internalSearchValue, setInternalSearchValue] = _react.useState.call(void 0, defaultSearchValue);
@@ -107,20 +115,31 @@ var Menu = ({
107
115
  [controlledSearchValue, onSearch]
108
116
  );
109
117
  const menuClasses = _react.useMemo.call(void 0, () => {
110
- return _tigercatcore.classNames.call(void 0, _tigercatcore.getMenuClasses.call(void 0, mode, theme, collapsed), className);
111
- }, [mode, theme, collapsed, className]);
118
+ return _tigercatcore.classNames.call(void 0, _tigercatcore.getMenuClasses.call(void 0, resolvedMode, theme, collapsed), className);
119
+ }, [resolvedMode, theme, collapsed, className]);
112
120
  const contextValue = _react.useMemo.call(void 0,
113
121
  () => ({
114
- mode,
122
+ mode: resolvedMode,
115
123
  theme,
116
124
  collapsed,
117
125
  inlineIndent,
126
+ popupPortal,
118
127
  selectedKeys,
119
128
  openKeys,
120
129
  handleSelect,
121
130
  handleOpenChange
122
131
  }),
123
- [mode, theme, collapsed, inlineIndent, selectedKeys, openKeys, handleSelect, handleOpenChange]
132
+ [
133
+ resolvedMode,
134
+ theme,
135
+ collapsed,
136
+ inlineIndent,
137
+ popupPortal,
138
+ selectedKeys,
139
+ openKeys,
140
+ handleSelect,
141
+ handleOpenChange
142
+ ]
124
143
  );
125
144
  const filteredItems = _react.useMemo.call(void 0,
126
145
  () => _tigercatcore.filterMenuItems.call(void 0, _nullishCoalesce(items, () => ( [])), searchValue),
@@ -147,7 +166,7 @@ var Menu = ({
147
166
  const emptyChild = items && items.length > 0 && dataChildren.length === 0 && !hasSlotChildren ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { role: "none", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _tigercatcore.menuSearchEmptyClasses, children: emptyText }) }) : null;
148
167
  _react.useEffect.call(void 0, () => {
149
168
  if (menuRef.current) _tigercatcore.initRovingTabIndex.call(void 0, menuRef.current);
150
- }, [mode, collapsed, selectedKeys, openKeys, filteredItems]);
169
+ }, [resolvedMode, collapsed, selectedKeys, openKeys, filteredItems]);
151
170
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MenuContext.Provider, { value: contextValue, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
152
171
  "ul",
153
172
  {
@@ -156,7 +175,8 @@ var Menu = ({
156
175
  style,
157
176
  role: "menu",
158
177
  "data-tiger-menu-root": "true",
159
- "data-tiger-menu-mode": mode,
178
+ "data-tiger-menu-mode": resolvedMode,
179
+ "data-tiger-menu-requested-mode": mode,
160
180
  children: [
161
181
  searchable && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { role: "none", className: _tigercatcore.menuSearchFieldClasses, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
162
182
  "input",
@@ -283,14 +303,19 @@ var MenuItemGroup = ({
283
303
  title,
284
304
  className,
285
305
  children,
286
- level = 0
306
+ level = 0,
307
+ collapsed
287
308
  }) => {
288
309
  const enhancedChildren = _react2.default.Children.map(children, (child) => {
289
310
  if (!_react2.default.isValidElement(child)) return child;
290
311
  if (child.type === MenuItem || isComponentNamed(child.type, "SubMenu")) {
291
- return _react2.default.cloneElement(child, {
292
- level
293
- });
312
+ return _react2.default.cloneElement(
313
+ child,
314
+ {
315
+ level,
316
+ collapsed
317
+ }
318
+ );
294
319
  }
295
320
  return child;
296
321
  });
@@ -326,13 +351,29 @@ var SubMenu = ({
326
351
  }
327
352
  const [isHovered, setIsHovered] = _react.useState.call(void 0, false);
328
353
  const [isOpenByKeyboard, setIsOpenByKeyboard] = _react.useState.call(void 0, false);
354
+ const popupCloseTimerRef = _react.useRef.call(void 0, null);
355
+ const titleRef = _react.useRef.call(void 0, null);
356
+ const popupRef = _react.useRef.call(void 0, null);
329
357
  const submenuContentRef = _react.useRef.call(void 0, null);
330
358
  const heightTransitionRef = _react.useRef.call(void 0, null);
331
359
  const effectiveCollapsed = _nullishCoalesce(collapsedOverride, () => ( (menuContext ? menuContext.collapsed : false)));
332
360
  const isPopup = !!menuContext && (menuContext.mode === "horizontal" || menuContext.mode === "vertical" && effectiveCollapsed);
333
361
  const isOpen = !!menuContext && _tigercatcore.isKeyOpen.call(void 0, itemKey, menuContext.openKeys);
334
362
  const isExpanded = isPopup ? isHovered || isOpenByKeyboard : isOpen;
335
- const isInlineOrVertical = _optionalChain([menuContext, 'optionalAccess', _6 => _6.mode]) !== "horizontal" && !isPopup;
363
+ const popupPortal = Boolean(isPopup && _optionalChain([menuContext, 'optionalAccess', _6 => _6.popupPortal]));
364
+ const popupPlacement = _optionalChain([menuContext, 'optionalAccess', _7 => _7.mode]) === "horizontal" && level === 0 ? "bottom-start" : "right-start";
365
+ const {
366
+ x: popupX,
367
+ y: popupY,
368
+ placement: currentPopupPlacement
369
+ } = _chunkSTTQ5LXXjs.useFloating.call(void 0, {
370
+ referenceRef: titleRef,
371
+ floatingRef: popupRef,
372
+ enabled: popupPortal && isExpanded,
373
+ placement: popupPlacement,
374
+ offset: 4
375
+ });
376
+ const isInlineOrVertical = _optionalChain([menuContext, 'optionalAccess', _8 => _8.mode]) !== "horizontal" && !isPopup;
336
377
  const [hasRenderedInline, setHasRenderedInline] = _react.useState.call(void 0,
337
378
  () => isInlineOrVertical ? isExpanded : false
338
379
  );
@@ -341,10 +382,17 @@ var SubMenu = ({
341
382
  setHasRenderedInline(true);
342
383
  }, [hasRenderedInline, isExpanded, isInlineOrVertical]);
343
384
  const disposeHeightTransition = _react.useCallback.call(void 0, () => {
344
- _optionalChain([heightTransitionRef, 'access', _7 => _7.current, 'optionalAccess', _8 => _8.dispose, 'call', _9 => _9()]);
385
+ _optionalChain([heightTransitionRef, 'access', _9 => _9.current, 'optionalAccess', _10 => _10.dispose, 'call', _11 => _11()]);
345
386
  heightTransitionRef.current = null;
346
387
  }, []);
347
- _react.useEffect.call(void 0, () => disposeHeightTransition, [disposeHeightTransition]);
388
+ _react.useEffect.call(void 0, () => {
389
+ return () => {
390
+ disposeHeightTransition();
391
+ if (popupCloseTimerRef.current) {
392
+ clearTimeout(popupCloseTimerRef.current);
393
+ }
394
+ };
395
+ }, [disposeHeightTransition]);
348
396
  _react.useLayoutEffect.call(void 0, () => {
349
397
  if (!isInlineOrVertical || !hasRenderedInline || !submenuContentRef.current) {
350
398
  disposeHeightTransition();
@@ -384,14 +432,25 @@ var SubMenu = ({
384
432
  menuContext.handleOpenChange(itemKey);
385
433
  }, [disabled, menuContext, itemKey, isPopup]);
386
434
  const handleMouseEnter = _react.useCallback.call(void 0, () => {
387
- if (_optionalChain([menuContext, 'optionalAccess', _10 => _10.mode]) === "horizontal" || isPopup) setIsHovered(true);
435
+ if (popupCloseTimerRef.current) {
436
+ clearTimeout(popupCloseTimerRef.current);
437
+ popupCloseTimerRef.current = null;
438
+ }
439
+ if (_optionalChain([menuContext, 'optionalAccess', _12 => _12.mode]) === "horizontal" || isPopup) setIsHovered(true);
388
440
  }, [menuContext, isPopup]);
389
441
  const handleMouseLeave = _react.useCallback.call(void 0, () => {
390
- if (_optionalChain([menuContext, 'optionalAccess', _11 => _11.mode]) === "horizontal" || isPopup) {
391
- setIsHovered(false);
392
- setIsOpenByKeyboard(false);
442
+ if (_optionalChain([menuContext, 'optionalAccess', _13 => _13.mode]) === "horizontal" || isPopup) {
443
+ const close = () => {
444
+ setIsHovered(false);
445
+ setIsOpenByKeyboard(false);
446
+ };
447
+ if (popupPortal) {
448
+ popupCloseTimerRef.current = setTimeout(close, 120);
449
+ return;
450
+ }
451
+ close();
393
452
  }
394
- }, [menuContext, isPopup]);
453
+ }, [menuContext, isPopup, popupPortal]);
395
454
  const openInline = _react.useCallback.call(void 0,
396
455
  (titleEl) => {
397
456
  if (!menuContext) return;
@@ -406,7 +465,7 @@ var SubMenu = ({
406
465
  if (!menuContext || disabled) return;
407
466
  const current = event.currentTarget;
408
467
  const rootMenu = current.closest('ul[role="menu"]');
409
- const isRoot = _optionalChain([rootMenu, 'optionalAccess', _12 => _12.dataset, 'access', _13 => _13.tigerMenuRoot]) === "true";
468
+ const isRoot = _optionalChain([rootMenu, 'optionalAccess', _14 => _14.dataset, 'access', _15 => _15.tigerMenuRoot]) === "true";
410
469
  const isHorizontalRoot = isRoot && menuContext.mode === "horizontal";
411
470
  const nextKey = isHorizontalRoot ? "ArrowRight" : "ArrowDown";
412
471
  const prevKey = isHorizontalRoot ? "ArrowLeft" : "ArrowUp";
@@ -496,7 +555,8 @@ var SubMenu = ({
496
555
  return _react2.default.cloneElement(
497
556
  child,
498
557
  {
499
- level: nextLevel
558
+ level: nextLevel,
559
+ collapsed: isPopup ? false : void 0
500
560
  }
501
561
  );
502
562
  }
@@ -504,6 +564,31 @@ var SubMenu = ({
504
564
  });
505
565
  const popupZIndex = isPopup ? _tigercatcore.getSubmenuPopupZIndex.call(void 0, level) : {};
506
566
  if (isPopup) {
567
+ const popupStyle = popupPortal ? {
568
+ display: isExpanded ? "block" : "none",
569
+ position: "absolute",
570
+ left: popupX,
571
+ top: popupY,
572
+ transformOrigin: _tigercatcore.getTransformOrigin.call(void 0, currentPopupPlacement),
573
+ ...popupZIndex
574
+ } : { display: isExpanded ? "block" : "none", ...popupZIndex };
575
+ const popup = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
576
+ "ul",
577
+ {
578
+ ref: popupPortal ? popupRef : void 0,
579
+ className: contentClasses,
580
+ style: popupStyle,
581
+ role: "menu",
582
+ "aria-hidden": isExpanded ? void 0 : "true",
583
+ onMouseEnter: popupPortal ? handleMouseEnter : void 0,
584
+ onMouseLeave: popupPortal ? handleMouseLeave : void 0,
585
+ "data-tiger-submenu-popup": "",
586
+ children: enhancedChildren
587
+ }
588
+ );
589
+ if (popupPortal) {
590
+ return _chunkSTTQ5LXXjs.renderBodyPortal.call(void 0, popup);
591
+ }
507
592
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
508
593
  "ul",
509
594
  {
@@ -511,6 +596,7 @@ var SubMenu = ({
511
596
  style: { display: isExpanded ? "block" : "none", ...popupZIndex },
512
597
  role: "menu",
513
598
  "aria-hidden": isExpanded ? void 0 : "true",
599
+ "data-tiger-submenu-popup": "",
514
600
  children: enhancedChildren
515
601
  }
516
602
  );
@@ -533,7 +619,7 @@ var SubMenu = ({
533
619
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
534
620
  "li",
535
621
  {
536
- className: isPopup ? "relative" : "",
622
+ className: isPopup && !popupPortal ? "relative" : "",
537
623
  onMouseEnter: handleMouseEnter,
538
624
  onMouseLeave: handleMouseLeave,
539
625
  role: "none",
@@ -541,6 +627,7 @@ var SubMenu = ({
541
627
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
542
628
  "button",
543
629
  {
630
+ ref: titleRef,
544
631
  type: "button",
545
632
  className: titleClasses,
546
633
  style: indentStyle,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { DrawerProps as DrawerProps$1 } from '@expcat/tigercat-core';
3
3
 
4
- interface DrawerProps extends DrawerProps$1, Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {
4
+ interface DrawerProps extends Omit<DrawerProps$1, 'panelStyle'>, Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {
5
5
  onOpenChange?: (open: boolean) => void;
6
6
  onClose?: () => void;
7
7
  onAfterEnter?: () => void;
@@ -9,6 +9,7 @@ interface DrawerProps extends DrawerProps$1, Omit<React.HTMLAttributes<HTMLDivEl
9
9
  header?: React.ReactNode;
10
10
  children?: React.ReactNode;
11
11
  footer?: React.ReactNode;
12
+ panelStyle?: React.CSSProperties;
12
13
  /**
13
14
  * Close button aria-label
14
15
  * @default 'Close drawer'
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { DrawerProps as DrawerProps$1 } from '@expcat/tigercat-core';
3
3
 
4
- interface DrawerProps extends DrawerProps$1, Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {
4
+ interface DrawerProps extends Omit<DrawerProps$1, 'panelStyle'>, Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {
5
5
  onOpenChange?: (open: boolean) => void;
6
6
  onClose?: () => void;
7
7
  onAfterEnter?: () => void;
@@ -9,6 +9,7 @@ interface DrawerProps extends DrawerProps$1, Omit<React.HTMLAttributes<HTMLDivEl
9
9
  header?: React.ReactNode;
10
10
  children?: React.ReactNode;
11
11
  footer?: React.ReactNode;
12
+ panelStyle?: React.CSSProperties;
12
13
  /**
13
14
  * Close button aria-label
14
15
  * @default 'Close drawer'
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkCFZJOGGHjs = require('../chunk-CFZJOGGH.js');
3
+ var _chunkOHSJ4KTUjs = require('../chunk-OHSJ4KTU.js');
4
4
  require('../chunk-STTQ5LXX.js');
5
5
 
6
6
 
7
- exports.Drawer = _chunkCFZJOGGHjs.Drawer;
7
+ exports.Drawer = _chunkOHSJ4KTUjs.Drawer;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Drawer
3
- } from "../chunk-G6MD6ZVN.mjs";
3
+ } from "../chunk-D62GWQBX.mjs";
4
4
  import "../chunk-SEWNVIHH.mjs";
5
5
  export {
6
6
  Drawer
@@ -6,6 +6,7 @@ interface MenuContextValue {
6
6
  theme: MenuTheme;
7
7
  collapsed: boolean;
8
8
  inlineIndent: number;
9
+ popupPortal: boolean;
9
10
  selectedKeys: (string | number)[];
10
11
  openKeys: (string | number)[];
11
12
  handleSelect: (key: string | number) => void;
@@ -59,6 +60,10 @@ interface MenuItemGroupProps extends MenuItemGroupProps$1 {
59
60
  * Nesting level (internal use for indentation)
60
61
  */
61
62
  level?: number;
63
+ /**
64
+ * Internal override for collapsed rendering (used by SubMenu popup)
65
+ */
66
+ collapsed?: boolean;
62
67
  }
63
68
  declare const MenuItemGroup: React.FC<MenuItemGroupProps>;
64
69
  interface SubMenuProps extends SubMenuProps$1 {
@@ -6,6 +6,7 @@ interface MenuContextValue {
6
6
  theme: MenuTheme;
7
7
  collapsed: boolean;
8
8
  inlineIndent: number;
9
+ popupPortal: boolean;
9
10
  selectedKeys: (string | number)[];
10
11
  openKeys: (string | number)[];
11
12
  handleSelect: (key: string | number) => void;
@@ -59,6 +60,10 @@ interface MenuItemGroupProps extends MenuItemGroupProps$1 {
59
60
  * Nesting level (internal use for indentation)
60
61
  */
61
62
  level?: number;
63
+ /**
64
+ * Internal override for collapsed rendering (used by SubMenu popup)
65
+ */
66
+ collapsed?: boolean;
62
67
  }
63
68
  declare const MenuItemGroup: React.FC<MenuItemGroupProps>;
64
69
  interface SubMenuProps extends SubMenuProps$1 {
@@ -4,11 +4,12 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkSY4P2AXWjs = require('../chunk-SY4P2AXW.js');
7
+ var _chunkZDGBH4NAjs = require('../chunk-ZDGBH4NA.js');
8
+ require('../chunk-STTQ5LXX.js');
8
9
 
9
10
 
10
11
 
11
12
 
12
13
 
13
14
 
14
- exports.Menu = _chunkSY4P2AXWjs.Menu; exports.MenuItem = _chunkSY4P2AXWjs.MenuItem; exports.MenuItemGroup = _chunkSY4P2AXWjs.MenuItemGroup; exports.SubMenu = _chunkSY4P2AXWjs.SubMenu; exports.useMenuContext = _chunkSY4P2AXWjs.useMenuContext;
15
+ exports.Menu = _chunkZDGBH4NAjs.Menu; exports.MenuItem = _chunkZDGBH4NAjs.MenuItem; exports.MenuItemGroup = _chunkZDGBH4NAjs.MenuItemGroup; exports.SubMenu = _chunkZDGBH4NAjs.SubMenu; exports.useMenuContext = _chunkZDGBH4NAjs.useMenuContext;
@@ -4,7 +4,8 @@ import {
4
4
  MenuItemGroup,
5
5
  SubMenu,
6
6
  useMenuContext
7
- } from "../chunk-L2NMDYYQ.mjs";
7
+ } from "../chunk-XJXEAXWY.mjs";
8
+ import "../chunk-SEWNVIHH.mjs";
8
9
  export {
9
10
  Menu,
10
11
  MenuItem,
@@ -1,7 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkSY4P2AXWjs = require('../chunk-SY4P2AXW.js');
3
+ var _chunkZDGBH4NAjs = require('../chunk-ZDGBH4NA.js');
4
+ require('../chunk-STTQ5LXX.js');
4
5
 
5
6
 
6
7
 
7
- exports.MenuItem = _chunkSY4P2AXWjs.MenuItem; exports.default = _chunkSY4P2AXWjs.MenuItem;
8
+ exports.MenuItem = _chunkZDGBH4NAjs.MenuItem; exports.default = _chunkZDGBH4NAjs.MenuItem;
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  MenuItem
3
- } from "../chunk-L2NMDYYQ.mjs";
3
+ } from "../chunk-XJXEAXWY.mjs";
4
+ import "../chunk-SEWNVIHH.mjs";
4
5
  export {
5
6
  MenuItem,
6
7
  MenuItem as default
@@ -1,7 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkSY4P2AXWjs = require('../chunk-SY4P2AXW.js');
3
+ var _chunkZDGBH4NAjs = require('../chunk-ZDGBH4NA.js');
4
+ require('../chunk-STTQ5LXX.js');
4
5
 
5
6
 
6
7
 
7
- exports.MenuItemGroup = _chunkSY4P2AXWjs.MenuItemGroup; exports.default = _chunkSY4P2AXWjs.MenuItemGroup;
8
+ exports.MenuItemGroup = _chunkZDGBH4NAjs.MenuItemGroup; exports.default = _chunkZDGBH4NAjs.MenuItemGroup;
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  MenuItemGroup
3
- } from "../chunk-L2NMDYYQ.mjs";
3
+ } from "../chunk-XJXEAXWY.mjs";
4
+ import "../chunk-SEWNVIHH.mjs";
4
5
  export {
5
6
  MenuItemGroup,
6
7
  MenuItemGroup as default
@@ -1,7 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkSY4P2AXWjs = require('../chunk-SY4P2AXW.js');
3
+ var _chunkZDGBH4NAjs = require('../chunk-ZDGBH4NA.js');
4
+ require('../chunk-STTQ5LXX.js');
4
5
 
5
6
 
6
7
 
7
- exports.SubMenu = _chunkSY4P2AXWjs.SubMenu; exports.default = _chunkSY4P2AXWjs.SubMenu;
8
+ exports.SubMenu = _chunkZDGBH4NAjs.SubMenu; exports.default = _chunkZDGBH4NAjs.SubMenu;
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  SubMenu
3
- } from "../chunk-L2NMDYYQ.mjs";
3
+ } from "../chunk-XJXEAXWY.mjs";
4
+ import "../chunk-SEWNVIHH.mjs";
4
5
  export {
5
6
  SubMenu,
6
7
  SubMenu as default
package/dist/index.js CHANGED
@@ -144,7 +144,7 @@ var _chunkXRNKHQTLjs = require('./chunk-XRNKHQTL.js');
144
144
 
145
145
 
146
146
 
147
- var _chunkSY4P2AXWjs = require('./chunk-SY4P2AXW.js');
147
+ var _chunkZDGBH4NAjs = require('./chunk-ZDGBH4NA.js');
148
148
 
149
149
 
150
150
 
@@ -231,7 +231,7 @@ var _chunkK2TXT5HQjs = require('./chunk-K2TXT5HQ.js');
231
231
  var _chunkBO45CU4Qjs = require('./chunk-BO45CU4Q.js');
232
232
 
233
233
 
234
- var _chunkCFZJOGGHjs = require('./chunk-CFZJOGGH.js');
234
+ var _chunkOHSJ4KTUjs = require('./chunk-OHSJ4KTU.js');
235
235
 
236
236
 
237
237
  var _chunkC3NKZZQQjs = require('./chunk-C3NKZZQQ.js');
@@ -907,4 +907,4 @@ var version = "1.2.0";
907
907
 
908
908
 
909
909
 
910
- exports.ActivityFeed = _chunkDXMSDLVJjs.ActivityFeed; exports.Affix = _chunkRYIYE2PYjs.Affix; exports.Alert = _chunkVNMWPJDNjs.Alert; exports.Anchor = _chunkSQGFNVYTjs.Anchor; exports.AnchorLink = _chunkSQGFNVYTjs.AnchorLink; exports.AreaChart = _chunkDCKBVRLIjs.AreaChart; exports.AutoComplete = _chunkU356F7GUjs.AutoComplete; exports.Avatar = _chunk4MQCUKICjs.Avatar; exports.AvatarGroup = _chunkTQOWIDQTjs.AvatarGroup; exports.BackTop = _chunk4LIDROT4js.BackTop; exports.Badge = _chunkPNAWOJ32js.Badge; exports.BarChart = _chunkNMKFR435js.BarChart; exports.Breadcrumb = _chunkVDF2BD2Ajs.Breadcrumb; exports.BreadcrumbItem = _chunkVDF2BD2Ajs.BreadcrumbItem; exports.Button = _chunk56ZV3VVYjs.Button; exports.ButtonGroup = _chunkYMKA4L3Zjs.ButtonGroup; exports.Calendar = _chunk5EVHVZG5js.Calendar; exports.Card = _chunkUIO6O4MIjs.Card; exports.Carousel = _chunkB5TUTAVXjs.Carousel; exports.Cascader = _chunkTC6JLEGZjs.Cascader; exports.ChartAxis = _chunkE5GD3H7Ljs.ChartAxis; exports.ChartCanvas = _chunkUKLVOR4Ejs.ChartCanvas; exports.ChartGrid = _chunk3QFHVAZTjs.ChartGrid; exports.ChartLegend = _chunkWV5XHYW6js.ChartLegend; exports.ChartSeries = _chunkAX5XRD2Qjs.ChartSeries; exports.ChartTooltip = _chunkUVMQJOTXjs.ChartTooltip; exports.ChatWindow = _chunk2DH6MGC6js.ChatWindow; exports.Checkbox = _chunkF7H4ALKNjs.Checkbox; exports.CheckboxGroup = _chunkJLRRXRZOjs.CheckboxGroup; exports.Code = _chunkRTHC4KWMjs.Code; exports.CodeEditor = _chunk3E76U2RGjs.CodeEditor; exports.Col = _chunkQQKP437Ljs.Col; exports.Collapse = _chunkQ2GPRAF4js.Collapse; exports.CollapsePanel = _chunkWN3ZI7FNjs.CollapsePanel; exports.ColorPicker = _chunkJB33A4S6js.ColorPicker; exports.ColorSwatch = _chunkJ4SNBXJMjs.ColorSwatch; exports.CommentThread = _chunkEX63M5IDjs.CommentThread; exports.ConfigProvider = _chunkTDODFBBOjs.ConfigProvider; exports.Container = _chunkW3VLCSJLjs.Container; exports.Content = _chunkOFCKGWTSjs.Content; exports.Countdown = _chunkU3M24RPHjs.Countdown; exports.CronEditor = _chunkNRLGZRK2js.CronEditor; exports.CropUpload = _chunkUE52NMPOjs.CropUpload; exports.DataTableWithToolbar = _chunk7YUD6VICjs.DataTableWithToolbar; exports.DatePicker = _chunkTSJYAEFZjs.DatePicker; exports.Descriptions = _chunk6CWZXS5Bjs.Descriptions; exports.Divider = _chunkIZXU7DF6js.Divider; exports.DonutChart = _chunkK2TXT5HQjs.DonutChart; exports.Drawer = _chunkCFZJOGGHjs.Drawer; exports.Dropdown = _chunkAKZY7QYAjs.Dropdown; exports.DropdownItem = _chunkC3NKZZQQjs.DropdownItem; exports.DropdownMenu = _chunkAKZY7QYAjs.DropdownMenu; exports.Empty = _chunkZRHDNGWOjs.Empty; exports.FileManager = _chunkHR5GBE3Pjs.FileManager; exports.FloatButton = _chunkXFPJYKBQjs.FloatButton; exports.FloatButtonGroup = _chunkXFPJYKBQjs.FloatButtonGroup; exports.Footer = _chunkTB2UHDOZjs.Footer; exports.Form = _chunkUPPHGL64js.Form; exports.FormItem = _chunkBCQQYERGjs.FormItem; exports.FormWizard = _chunkDTYDPMNRjs.FormWizard; exports.FunnelChart = _chunkQIKR5EFIjs.FunnelChart; exports.Gantt = _chunkQMK4OFC5js.Gantt; exports.GaugeChart = _chunkT7KO6EVKjs.GaugeChart; exports.Header = _chunkVJJ76I7Ujs.Header; exports.HeatmapChart = _chunkH6NC6SBXjs.HeatmapChart; exports.Icon = _chunkIHH2O7YKjs.Icon; exports.Image = _chunkCGIBGSNEjs.Image; exports.ImageAnnotation = _chunkEHIXCFD7js.ImageAnnotation; exports.ImageCropper = _chunkFI53LYZ6js.ImageCropper; exports.ImageGroup = _chunkMB6U72CIjs.ImageGroup; exports.ImageGroupContext = _chunkMB6U72CIjs.ImageGroupContext; exports.ImagePreview = _chunk4U5HSR2Hjs.ImagePreview; exports.ImageViewer = _chunkUXUYCWQCjs.ImageViewer; exports.InfiniteScroll = _chunkM73NMNZXjs.InfiniteScroll; exports.Input = _chunkZYJTHGQWjs.Input; exports.InputGroup = _chunkI3CDTF4Ujs.InputGroup; exports.InputGroupAddon = _chunkI3CDTF4Ujs.InputGroupAddon; exports.InputNumber = _chunkSKMZTW3Kjs.InputNumber; exports.Kanban = _chunkCSH2QOOHjs.Kanban; exports.Layout = _chunkD6TKXVEBjs.Layout; exports.LineChart = _chunkEQD2U4KMjs.LineChart; exports.Link = _chunkQYYAXM5Fjs.Link; exports.List = _chunkWG3YS2QVjs.List; exports.Loading = _chunk3MRP3XYIjs.Loading; exports.MarkdownEditor = _chunkBFAZZUD6js.MarkdownEditor; exports.Mentions = _chunkXRNKHQTLjs.Mentions; exports.Menu = _chunkSY4P2AXWjs.Menu; exports.MenuItem = _chunkSY4P2AXWjs.MenuItem; exports.MenuItemGroup = _chunkSY4P2AXWjs.MenuItemGroup; exports.Message = _chunkLMTUM3J3js.Message; exports.MessageContainer = _chunkLMTUM3J3js.MessageContainer; exports.Modal = _chunkSXHP4Q7Ojs.Modal; exports.NotificationCenter = _chunkRUZQN7X3js.NotificationCenter; exports.NotificationContainer = _chunkNMEVQPODjs.NotificationContainer; exports.NumberKeyboard = _chunkG5USITWFjs.NumberKeyboard; exports.OrgChart = _chunk4DTMFQCYjs.OrgChart; exports.Pagination = _chunkKEF2PEP4js.Pagination; exports.PieChart = _chunkBO45CU4Qjs.PieChart; exports.Popconfirm = _chunkJNRUOQNTjs.Popconfirm; exports.Popover = _chunkIAONLOJNjs.Popover; exports.PrintLayout = _chunkQ4JMAQXJjs.PrintLayout; exports.PrintPageBreak = _chunkQ4JMAQXJjs.PrintPageBreak; exports.Progress = _chunkLODDAS62js.Progress; exports.QRCode = _chunkAUW7DCXLjs.QRCode; exports.RadarChart = _chunkEOU6WZTSjs.RadarChart; exports.Radio = _chunkTMON4MPOjs.Radio; exports.RadioGroup = _chunkZFMMAYSXjs.RadioGroup; exports.Rate = _chunkGG72T6JKjs.Rate; exports.Resizable = _chunkPFYK2V3Ejs.Resizable; exports.Result = _chunkYID7J6ZKjs.Result; exports.RichTextEditor = _chunkONTRGV5Tjs.RichTextEditor; exports.Row = _chunkVE3SYUMHjs.Row; exports.ScatterChart = _chunkW6AWN7BCjs.ScatterChart; exports.ScrollSpy = _chunkFBFCJCONjs.ScrollSpy; exports.Segmented = _chunkN2JYU4JIjs.Segmented; exports.Select = _chunk6Z4LLPZAjs.Select; exports.Sidebar = _chunkYWTZALG5js.Sidebar; exports.Signature = _chunk7ISEWLA3js.Signature; exports.Skeleton = _chunk4PPTEEDIjs.Skeleton; exports.Slider = _chunk7Z64GEMNjs.Slider; exports.Space = _chunkPTEDJ6MAjs.Space; exports.Splitter = _chunkH4AR4GXHjs.Splitter; exports.Spotlight = _chunkKYP7U6FKjs.Spotlight; exports.Statistic = _chunkZDXIP33Yjs.Statistic; exports.Stepper = _chunkMB3QU3USjs.Stepper; exports.Steps = _chunkXPA2YCQOjs.Steps; exports.StepsItem = _chunkXPA2YCQOjs.StepsItem; exports.SubMenu = _chunkSY4P2AXWjs.SubMenu; exports.SunburstChart = _chunkUIIOZEUPjs.SunburstChart; exports.Switch = _chunk4TEILQSNjs.Switch; exports.TabPane = _chunkRFHPG4KNjs.TabPane; exports.Table = _chunk5EZWYEGJjs.Table; exports.Tabs = _chunkRFHPG4KNjs.Tabs; exports.Tag = _chunkVCULFIZ5js.Tag; exports.TaskBoard = _chunkXHT2VIDRjs.TaskBoard; exports.Text = _chunkUF3DXKCIjs.Text; exports.Textarea = _chunkWVVXZKNIjs.Textarea; exports.TimePicker = _chunk4SO4LANYjs.TimePicker; exports.Timeline = _chunkPR3PQUKMjs.Timeline; exports.Tooltip = _chunkKRFD27WAjs.Tooltip; exports.Tour = _chunkKQ5I7PRMjs.Tour; exports.Transfer = _chunkEF5ZTNHXjs.Transfer; exports.Tree = _chunkSIY6FDKJjs.Tree; exports.TreeMapChart = _chunkX7JAYXPYjs.TreeMapChart; exports.TreeSelect = _chunkCBYJXDW4js.TreeSelect; exports.Upload = _chunkUHFHOTNIjs.Upload; exports.VirtualList = _chunkP36GX65Njs.VirtualList; exports.VirtualTable = _chunk77F5YT4Ejs.VirtualTable; exports.Watermark = _chunkCHPJPIW6js.Watermark; exports.notification = _chunkNMEVQPODjs.notification; exports.useAnchorContext = _chunkSQGFNVYTjs.useAnchorContext; exports.useBreadcrumbContext = _chunkVDF2BD2Ajs.useBreadcrumbContext; exports.useChartInteraction = _chunkXTV5JLLCjs.useChartInteraction; exports.useCollapseContext = _chunkQ2GPRAF4js.useCollapseContext; exports.useControlledState = _chunkUKGQ7256js.useControlledState; exports.useDrag = useDrag; exports.useFormContext = _chunkUPPHGL64js.useFormContext; exports.useFormController = useFormController; exports.useMenuContext = _chunkSY4P2AXWjs.useMenuContext; exports.useStepsContext = _chunkXPA2YCQOjs.useStepsContext; exports.useTabsContext = _chunkRFHPG4KNjs.useTabsContext; exports.useTigerConfig = _chunkTDODFBBOjs.useTigerConfig; exports.version = version;
910
+ exports.ActivityFeed = _chunkDXMSDLVJjs.ActivityFeed; exports.Affix = _chunkRYIYE2PYjs.Affix; exports.Alert = _chunkVNMWPJDNjs.Alert; exports.Anchor = _chunkSQGFNVYTjs.Anchor; exports.AnchorLink = _chunkSQGFNVYTjs.AnchorLink; exports.AreaChart = _chunkDCKBVRLIjs.AreaChart; exports.AutoComplete = _chunkU356F7GUjs.AutoComplete; exports.Avatar = _chunk4MQCUKICjs.Avatar; exports.AvatarGroup = _chunkTQOWIDQTjs.AvatarGroup; exports.BackTop = _chunk4LIDROT4js.BackTop; exports.Badge = _chunkPNAWOJ32js.Badge; exports.BarChart = _chunkNMKFR435js.BarChart; exports.Breadcrumb = _chunkVDF2BD2Ajs.Breadcrumb; exports.BreadcrumbItem = _chunkVDF2BD2Ajs.BreadcrumbItem; exports.Button = _chunk56ZV3VVYjs.Button; exports.ButtonGroup = _chunkYMKA4L3Zjs.ButtonGroup; exports.Calendar = _chunk5EVHVZG5js.Calendar; exports.Card = _chunkUIO6O4MIjs.Card; exports.Carousel = _chunkB5TUTAVXjs.Carousel; exports.Cascader = _chunkTC6JLEGZjs.Cascader; exports.ChartAxis = _chunkE5GD3H7Ljs.ChartAxis; exports.ChartCanvas = _chunkUKLVOR4Ejs.ChartCanvas; exports.ChartGrid = _chunk3QFHVAZTjs.ChartGrid; exports.ChartLegend = _chunkWV5XHYW6js.ChartLegend; exports.ChartSeries = _chunkAX5XRD2Qjs.ChartSeries; exports.ChartTooltip = _chunkUVMQJOTXjs.ChartTooltip; exports.ChatWindow = _chunk2DH6MGC6js.ChatWindow; exports.Checkbox = _chunkF7H4ALKNjs.Checkbox; exports.CheckboxGroup = _chunkJLRRXRZOjs.CheckboxGroup; exports.Code = _chunkRTHC4KWMjs.Code; exports.CodeEditor = _chunk3E76U2RGjs.CodeEditor; exports.Col = _chunkQQKP437Ljs.Col; exports.Collapse = _chunkQ2GPRAF4js.Collapse; exports.CollapsePanel = _chunkWN3ZI7FNjs.CollapsePanel; exports.ColorPicker = _chunkJB33A4S6js.ColorPicker; exports.ColorSwatch = _chunkJ4SNBXJMjs.ColorSwatch; exports.CommentThread = _chunkEX63M5IDjs.CommentThread; exports.ConfigProvider = _chunkTDODFBBOjs.ConfigProvider; exports.Container = _chunkW3VLCSJLjs.Container; exports.Content = _chunkOFCKGWTSjs.Content; exports.Countdown = _chunkU3M24RPHjs.Countdown; exports.CronEditor = _chunkNRLGZRK2js.CronEditor; exports.CropUpload = _chunkUE52NMPOjs.CropUpload; exports.DataTableWithToolbar = _chunk7YUD6VICjs.DataTableWithToolbar; exports.DatePicker = _chunkTSJYAEFZjs.DatePicker; exports.Descriptions = _chunk6CWZXS5Bjs.Descriptions; exports.Divider = _chunkIZXU7DF6js.Divider; exports.DonutChart = _chunkK2TXT5HQjs.DonutChart; exports.Drawer = _chunkOHSJ4KTUjs.Drawer; exports.Dropdown = _chunkAKZY7QYAjs.Dropdown; exports.DropdownItem = _chunkC3NKZZQQjs.DropdownItem; exports.DropdownMenu = _chunkAKZY7QYAjs.DropdownMenu; exports.Empty = _chunkZRHDNGWOjs.Empty; exports.FileManager = _chunkHR5GBE3Pjs.FileManager; exports.FloatButton = _chunkXFPJYKBQjs.FloatButton; exports.FloatButtonGroup = _chunkXFPJYKBQjs.FloatButtonGroup; exports.Footer = _chunkTB2UHDOZjs.Footer; exports.Form = _chunkUPPHGL64js.Form; exports.FormItem = _chunkBCQQYERGjs.FormItem; exports.FormWizard = _chunkDTYDPMNRjs.FormWizard; exports.FunnelChart = _chunkQIKR5EFIjs.FunnelChart; exports.Gantt = _chunkQMK4OFC5js.Gantt; exports.GaugeChart = _chunkT7KO6EVKjs.GaugeChart; exports.Header = _chunkVJJ76I7Ujs.Header; exports.HeatmapChart = _chunkH6NC6SBXjs.HeatmapChart; exports.Icon = _chunkIHH2O7YKjs.Icon; exports.Image = _chunkCGIBGSNEjs.Image; exports.ImageAnnotation = _chunkEHIXCFD7js.ImageAnnotation; exports.ImageCropper = _chunkFI53LYZ6js.ImageCropper; exports.ImageGroup = _chunkMB6U72CIjs.ImageGroup; exports.ImageGroupContext = _chunkMB6U72CIjs.ImageGroupContext; exports.ImagePreview = _chunk4U5HSR2Hjs.ImagePreview; exports.ImageViewer = _chunkUXUYCWQCjs.ImageViewer; exports.InfiniteScroll = _chunkM73NMNZXjs.InfiniteScroll; exports.Input = _chunkZYJTHGQWjs.Input; exports.InputGroup = _chunkI3CDTF4Ujs.InputGroup; exports.InputGroupAddon = _chunkI3CDTF4Ujs.InputGroupAddon; exports.InputNumber = _chunkSKMZTW3Kjs.InputNumber; exports.Kanban = _chunkCSH2QOOHjs.Kanban; exports.Layout = _chunkD6TKXVEBjs.Layout; exports.LineChart = _chunkEQD2U4KMjs.LineChart; exports.Link = _chunkQYYAXM5Fjs.Link; exports.List = _chunkWG3YS2QVjs.List; exports.Loading = _chunk3MRP3XYIjs.Loading; exports.MarkdownEditor = _chunkBFAZZUD6js.MarkdownEditor; exports.Mentions = _chunkXRNKHQTLjs.Mentions; exports.Menu = _chunkZDGBH4NAjs.Menu; exports.MenuItem = _chunkZDGBH4NAjs.MenuItem; exports.MenuItemGroup = _chunkZDGBH4NAjs.MenuItemGroup; exports.Message = _chunkLMTUM3J3js.Message; exports.MessageContainer = _chunkLMTUM3J3js.MessageContainer; exports.Modal = _chunkSXHP4Q7Ojs.Modal; exports.NotificationCenter = _chunkRUZQN7X3js.NotificationCenter; exports.NotificationContainer = _chunkNMEVQPODjs.NotificationContainer; exports.NumberKeyboard = _chunkG5USITWFjs.NumberKeyboard; exports.OrgChart = _chunk4DTMFQCYjs.OrgChart; exports.Pagination = _chunkKEF2PEP4js.Pagination; exports.PieChart = _chunkBO45CU4Qjs.PieChart; exports.Popconfirm = _chunkJNRUOQNTjs.Popconfirm; exports.Popover = _chunkIAONLOJNjs.Popover; exports.PrintLayout = _chunkQ4JMAQXJjs.PrintLayout; exports.PrintPageBreak = _chunkQ4JMAQXJjs.PrintPageBreak; exports.Progress = _chunkLODDAS62js.Progress; exports.QRCode = _chunkAUW7DCXLjs.QRCode; exports.RadarChart = _chunkEOU6WZTSjs.RadarChart; exports.Radio = _chunkTMON4MPOjs.Radio; exports.RadioGroup = _chunkZFMMAYSXjs.RadioGroup; exports.Rate = _chunkGG72T6JKjs.Rate; exports.Resizable = _chunkPFYK2V3Ejs.Resizable; exports.Result = _chunkYID7J6ZKjs.Result; exports.RichTextEditor = _chunkONTRGV5Tjs.RichTextEditor; exports.Row = _chunkVE3SYUMHjs.Row; exports.ScatterChart = _chunkW6AWN7BCjs.ScatterChart; exports.ScrollSpy = _chunkFBFCJCONjs.ScrollSpy; exports.Segmented = _chunkN2JYU4JIjs.Segmented; exports.Select = _chunk6Z4LLPZAjs.Select; exports.Sidebar = _chunkYWTZALG5js.Sidebar; exports.Signature = _chunk7ISEWLA3js.Signature; exports.Skeleton = _chunk4PPTEEDIjs.Skeleton; exports.Slider = _chunk7Z64GEMNjs.Slider; exports.Space = _chunkPTEDJ6MAjs.Space; exports.Splitter = _chunkH4AR4GXHjs.Splitter; exports.Spotlight = _chunkKYP7U6FKjs.Spotlight; exports.Statistic = _chunkZDXIP33Yjs.Statistic; exports.Stepper = _chunkMB3QU3USjs.Stepper; exports.Steps = _chunkXPA2YCQOjs.Steps; exports.StepsItem = _chunkXPA2YCQOjs.StepsItem; exports.SubMenu = _chunkZDGBH4NAjs.SubMenu; exports.SunburstChart = _chunkUIIOZEUPjs.SunburstChart; exports.Switch = _chunk4TEILQSNjs.Switch; exports.TabPane = _chunkRFHPG4KNjs.TabPane; exports.Table = _chunk5EZWYEGJjs.Table; exports.Tabs = _chunkRFHPG4KNjs.Tabs; exports.Tag = _chunkVCULFIZ5js.Tag; exports.TaskBoard = _chunkXHT2VIDRjs.TaskBoard; exports.Text = _chunkUF3DXKCIjs.Text; exports.Textarea = _chunkWVVXZKNIjs.Textarea; exports.TimePicker = _chunk4SO4LANYjs.TimePicker; exports.Timeline = _chunkPR3PQUKMjs.Timeline; exports.Tooltip = _chunkKRFD27WAjs.Tooltip; exports.Tour = _chunkKQ5I7PRMjs.Tour; exports.Transfer = _chunkEF5ZTNHXjs.Transfer; exports.Tree = _chunkSIY6FDKJjs.Tree; exports.TreeMapChart = _chunkX7JAYXPYjs.TreeMapChart; exports.TreeSelect = _chunkCBYJXDW4js.TreeSelect; exports.Upload = _chunkUHFHOTNIjs.Upload; exports.VirtualList = _chunkP36GX65Njs.VirtualList; exports.VirtualTable = _chunk77F5YT4Ejs.VirtualTable; exports.Watermark = _chunkCHPJPIW6js.Watermark; exports.notification = _chunkNMEVQPODjs.notification; exports.useAnchorContext = _chunkSQGFNVYTjs.useAnchorContext; exports.useBreadcrumbContext = _chunkVDF2BD2Ajs.useBreadcrumbContext; exports.useChartInteraction = _chunkXTV5JLLCjs.useChartInteraction; exports.useCollapseContext = _chunkQ2GPRAF4js.useCollapseContext; exports.useControlledState = _chunkUKGQ7256js.useControlledState; exports.useDrag = useDrag; exports.useFormContext = _chunkUPPHGL64js.useFormContext; exports.useFormController = useFormController; exports.useMenuContext = _chunkZDGBH4NAjs.useMenuContext; exports.useStepsContext = _chunkXPA2YCQOjs.useStepsContext; exports.useTabsContext = _chunkRFHPG4KNjs.useTabsContext; exports.useTigerConfig = _chunkTDODFBBOjs.useTigerConfig; exports.version = version;
package/dist/index.mjs CHANGED
@@ -144,7 +144,7 @@ import {
144
144
  MenuItemGroup,
145
145
  SubMenu,
146
146
  useMenuContext
147
- } from "./chunk-L2NMDYYQ.mjs";
147
+ } from "./chunk-XJXEAXWY.mjs";
148
148
  import {
149
149
  Message,
150
150
  MessageContainer
@@ -231,7 +231,7 @@ import {
231
231
  } from "./chunk-XBM76P27.mjs";
232
232
  import {
233
233
  Drawer
234
- } from "./chunk-G6MD6ZVN.mjs";
234
+ } from "./chunk-D62GWQBX.mjs";
235
235
  import {
236
236
  DropdownItem
237
237
  } from "./chunk-73OAHAPC.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expcat/tigercat-react",
3
- "version": "1.2.16",
3
+ "version": "1.2.23",
4
4
  "description": "React components for Tigercat UI library",
5
5
  "license": "MIT",
6
6
  "author": "Yizhe Wang",
@@ -47,7 +47,7 @@
47
47
  "access": "public"
48
48
  },
49
49
  "dependencies": {
50
- "@expcat/tigercat-core": "1.2.16"
50
+ "@expcat/tigercat-core": "1.2.23"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "^25.6.0",