shineout 3.9.2-beta.1 → 3.9.2-beta.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.
package/cjs/index.js CHANGED
@@ -522,5 +522,5 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
522
522
  // 此文件由脚本自动生成,请勿直接修改。
523
523
  // This file was generated automatically by a script. Please do not modify it directly.
524
524
  var _default = exports.default = {
525
- version: '3.9.2-beta.1'
525
+ version: '3.9.2-beta.2'
526
526
  };
package/dist/shineout.js CHANGED
@@ -12400,7 +12400,7 @@ var handleStyle = function handleStyle(style) {
12400
12400
  };
12401
12401
  /* harmony default export */ var jss_style_handleStyle = (handleStyle);
12402
12402
  ;// CONCATENATED MODULE: ../shineout-style/src/version.ts
12403
- /* harmony default export */ var version = ('3.9.2-beta.1');
12403
+ /* harmony default export */ var version = ('3.9.2-beta.2');
12404
12404
  ;// CONCATENATED MODULE: ../shineout-style/src/jss-style/index.tsx
12405
12405
 
12406
12406
 
@@ -21325,17 +21325,21 @@ var menuStyle = {
21325
21325
  flexDirection: 'row'
21326
21326
  },
21327
21327
  wrapperHasOpen: {},
21328
+ wrapperInlineAnimate: {},
21328
21329
  children: {
21329
21330
  padding: '0',
21330
21331
  margin: '0',
21331
- display: 'none',
21332
21332
  minWidth: '100%',
21333
21333
  whiteSpace: 'nowrap',
21334
- '$itemOpen > &, $childrenShow&': {
21334
+ '$childrenShow&': {
21335
21335
  display: 'block'
21336
+ },
21337
+ '$childrenHidden&': {
21338
+ display: 'none'
21336
21339
  }
21337
21340
  },
21338
21341
  childrenShow: {},
21342
+ childrenHidden: {},
21339
21343
  childrenUp: {},
21340
21344
  item: {
21341
21345
  listStyle: 'none',
@@ -21344,6 +21348,7 @@ var menuStyle = {
21344
21348
  itemActive: {},
21345
21349
  itemDisabled: {},
21346
21350
  itemOpen: {},
21351
+ itemClosing: {},
21347
21352
  itemInPath: {},
21348
21353
  itemHasChildren: {},
21349
21354
  childrenHasExpand: {},
@@ -21629,8 +21634,14 @@ var menuStyle = {
21629
21634
  alignItems: 'center',
21630
21635
  display: 'flex',
21631
21636
  minHeight: "calc(".concat(src.lineHeightDynamic, " + ").concat(src.menuTitlePaddingY, "*2)"),
21637
+ '$wrapperInlineAnimate$wrapper:not($wrapperVertical) &': {
21638
+ transition: 'transform 240ms cubic-bezier(.2,0,0,1)'
21639
+ },
21632
21640
  '$wrapper:not($wrapperVertical) $itemOpen > $itemContent &': {
21633
21641
  transform: 'rotate(180deg)'
21642
+ },
21643
+ '$wrapper:not($wrapperVertical) $itemClosing > $itemContent &': {
21644
+ transform: 'rotate(0deg)'
21634
21645
  }
21635
21646
  }
21636
21647
  },
@@ -50672,7 +50683,7 @@ var method = function method(type, jssStyle) {
50672
50683
  });
50673
50684
  if (!root) return;
50674
50685
  var destroyModal = function destroyModal() {
50675
- innerClose();
50686
+ if (innerClose) innerClose();
50676
50687
  setTimeout(function () {
50677
50688
  destroy(root);
50678
50689
  }, 300);
@@ -60510,16 +60521,18 @@ var useMenuItem = function useMenuItem(props) {
60510
60521
  /* harmony default export */ var use_menu_item = (useMenuItem);
60511
60522
  ;// CONCATENATED MODULE: ../hooks/src/common/use-collapse-animation/use-collapse-animation.ts
60512
60523
 
60524
+
60513
60525
  /**
60514
60526
  * 为元素添加折叠/展开动画的 Hook
60515
60527
  *
60516
60528
  * @example
60517
60529
  * ```tsx
60518
60530
  * const ref = useRef<HTMLDivElement>(null);
60519
- * useCollapseAnimation(ref, { isOpen: true });
60531
+ * const { shouldHide, shouldKeepOpen } = useCollapseAnimation(ref, { isOpen: true });
60520
60532
  *
60521
- * return <div ref={ref}>Content</div>;
60533
+ * return <div ref={ref} className={shouldHide ? 'hide' : ''}>Content</div>;
60522
60534
  * ```
60535
+ * @returns 动画状态对象
60523
60536
  */
60524
60537
  function useCollapseAnimation(elementRef, options) {
60525
60538
  var isOpen = options.isOpen,
@@ -60528,8 +60541,17 @@ function useCollapseAnimation(elementRef, options) {
60528
60541
  _options$disabled = options.disabled,
60529
60542
  disabled = _options$disabled === void 0 ? false : _options$disabled,
60530
60543
  _options$timingFuncti = options.timingFunction,
60531
- timingFunction = _options$timingFuncti === void 0 ? 'cubic-bezier(.2,0,0,1)' : _options$timingFuncti;
60544
+ timingFunction = _options$timingFuncti === void 0 ? 'cubic-bezier(.2,0,0,1)' : _options$timingFuncti,
60545
+ parentOpenClassName = options.parentOpenClassName;
60532
60546
  var isFirstRenderRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)(true);
60547
+ var _useState = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useState)(!isOpen),
60548
+ _useState2 = slicedToArray_default()(_useState, 2),
60549
+ shouldHide = _useState2[0],
60550
+ setShouldHide = _useState2[1];
60551
+ var _useState3 = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useState)(false),
60552
+ _useState4 = slicedToArray_default()(_useState3, 2),
60553
+ isAnimating = _useState4[0],
60554
+ setIsAnimating = _useState4[1];
60533
60555
 
60534
60556
  // 当 disabled 状态变化时,重置首次渲染标记
60535
60557
  (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
@@ -60537,6 +60559,8 @@ function useCollapseAnimation(elementRef, options) {
60537
60559
  isFirstRenderRef.current = true;
60538
60560
  }
60539
60561
  }, [disabled]);
60562
+
60563
+ // 使用 useLayoutEffect 确保动画状态在 DOM 更新前同步设置
60540
60564
  (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
60541
60565
  if (!elementRef.current) return;
60542
60566
  var el = elementRef.current;
@@ -60551,9 +60575,6 @@ function useCollapseAnimation(elementRef, options) {
60551
60575
  }
60552
60576
  var timer = null;
60553
60577
 
60554
- // 设置 display: block,让元素始终可见,由高度控制折叠
60555
- el.style.display = 'block';
60556
-
60557
60578
  // 首次渲染时,直接设置初始状态,不做动画
60558
60579
  if (isFirstRenderRef.current) {
60559
60580
  isFirstRenderRef.current = false;
@@ -60564,9 +60585,13 @@ function useCollapseAnimation(elementRef, options) {
60564
60585
  return;
60565
60586
  }
60566
60587
  if (isOpen) {
60567
- // 展开动画
60588
+ // 展开动画 - 先显示元素
60589
+ setShouldHide(false);
60590
+ setIsAnimating(true);
60591
+ el.style.display = 'block';
60568
60592
  el.style.height = '0px';
60569
60593
  el.style.overflow = 'hidden';
60594
+ el.style.opacity = '0';
60570
60595
 
60571
60596
  // 强制重绘
60572
60597
  void el.offsetHeight;
@@ -60576,8 +60601,9 @@ function useCollapseAnimation(elementRef, options) {
60576
60601
 
60577
60602
  // 启动动画
60578
60603
  requestAnimationFrame(function () {
60579
- el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction);
60604
+ el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction, ", opacity ").concat(duration, "ms ").concat(timingFunction);
60580
60605
  el.style.height = "".concat(scrollHeight, "px");
60606
+ el.style.opacity = '1';
60581
60607
 
60582
60608
  // 动画结束后恢复 auto
60583
60609
  timer = setTimeout(function () {
@@ -60585,20 +60611,45 @@ function useCollapseAnimation(elementRef, options) {
60585
60611
  el.style.height = '';
60586
60612
  el.style.overflow = '';
60587
60613
  el.style.transition = '';
60614
+ el.style.opacity = '';
60615
+ setIsAnimating(false);
60588
60616
  }
60589
60617
  }, duration);
60590
60618
  });
60591
60619
  } else {
60592
60620
  // 收起动画
60621
+ setIsAnimating(true);
60622
+
60623
+ // 临时添加父元素的 open class,确保用户依赖此 class 的布局样式在获取高度时生效
60624
+ var parentElement = el.parentElement;
60625
+ var needTempClass = parentOpenClassName && parentElement;
60626
+ if (needTempClass) {
60627
+ parentElement.classList.add(parentOpenClassName);
60628
+ }
60629
+
60630
+ // 强制重绘,确保临时 class 生效
60631
+ void el.offsetHeight;
60593
60632
  var _scrollHeight = el.scrollHeight;
60594
60633
  el.style.height = "".concat(_scrollHeight, "px");
60595
60634
  el.style.overflow = 'hidden';
60635
+ el.style.opacity = '1';
60596
60636
 
60597
60637
  // 强制重绘
60598
60638
  void el.offsetHeight;
60599
60639
  requestAnimationFrame(function () {
60600
- el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction);
60640
+ el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction, ", opacity ").concat(duration, "ms ").concat(timingFunction);
60601
60641
  el.style.height = '0px';
60642
+ el.style.opacity = '0';
60643
+
60644
+ // 动画结束后隐藏元素
60645
+ timer = setTimeout(function () {
60646
+ // 移除临时 class
60647
+ if (needTempClass) {
60648
+ parentElement.classList.remove(parentOpenClassName);
60649
+ }
60650
+ setShouldHide(true);
60651
+ setIsAnimating(false);
60652
+ }, duration);
60602
60653
  });
60603
60654
  }
60604
60655
 
@@ -60609,6 +60660,16 @@ function useCollapseAnimation(elementRef, options) {
60609
60660
  }
60610
60661
  };
60611
60662
  }, [isOpen, disabled, duration, timingFunction]);
60663
+ if (disabled) {
60664
+ return {
60665
+ shouldHide: !isOpen,
60666
+ shouldKeepOpen: false
60667
+ };
60668
+ }
60669
+ return {
60670
+ shouldHide: shouldHide,
60671
+ shouldKeepOpen: isAnimating && !isOpen
60672
+ };
60612
60673
  }
60613
60674
  ;// CONCATENATED MODULE: ../base/src/menu/item.tsx
60614
60675
 
@@ -60682,10 +60743,13 @@ var MenuItem = function MenuItem(props) {
60682
60743
  handleMouseLeave = _useMenuItem.handleMouseLeave;
60683
60744
 
60684
60745
  // 为 inline 模式添加折叠动画(仅当 inlineAnimate 为 true 时启用)
60685
- useCollapseAnimation(childrenRef, {
60686
- isOpen: isOpen,
60687
- disabled: !props.inlineAnimate || shoudPop || !children.length
60688
- });
60746
+ var _useCollapseAnimation = useCollapseAnimation(childrenRef, {
60747
+ isOpen: isOpen,
60748
+ disabled: !props.inlineAnimate || shoudPop || !children.length,
60749
+ parentOpenClassName: classes === null || classes === void 0 ? void 0 : classes.itemOpen
60750
+ }),
60751
+ shouldHideChildren = _useCollapseAnimation.shouldHide,
60752
+ shouldKeepOpen = _useCollapseAnimation.shouldKeepOpen;
60689
60753
  var renderChildren = function renderChildren() {
60690
60754
  var _items;
60691
60755
  var items = children;
@@ -60700,8 +60764,8 @@ var MenuItem = function MenuItem(props) {
60700
60764
  }
60701
60765
  var content = function content(close) {
60702
60766
  return /*#__PURE__*/(0,jsx_runtime.jsx)("ul", {
60703
- ref: !shoudPop && props.inlineAnimate ? childrenRef : undefined,
60704
- className: classnames_default()(shoudPop && (classes === null || classes === void 0 ? void 0 : classes.childrenShow), classes === null || classes === void 0 ? void 0 : classes.children, isUp && (classes === null || classes === void 0 ? void 0 : classes.childrenUp), hasExpandAbleChildren && (classes === null || classes === void 0 ? void 0 : classes.childrenHasExpand))
60767
+ ref: childrenRef,
60768
+ className: classnames_default()(shoudPop && (classes === null || classes === void 0 ? void 0 : classes.childrenShow), classes === null || classes === void 0 ? void 0 : classes.children, isUp && (classes === null || classes === void 0 ? void 0 : classes.childrenUp), hasExpandAbleChildren && (classes === null || classes === void 0 ? void 0 : classes.childrenHasExpand), shouldHideChildren && (classes === null || classes === void 0 ? void 0 : classes.childrenHidden))
60705
60769
  // 子菜单点击弹出
60706
60770
  ,
60707
60771
  onClick: close,
@@ -60838,7 +60902,7 @@ var MenuItem = function MenuItem(props) {
60838
60902
  }
60839
60903
  };
60840
60904
  return /*#__PURE__*/(0,jsx_runtime.jsxs)("li", {
60841
- className: classnames_default()(classes === null || classes === void 0 ? void 0 : classes.item, isDisabled && (classes === null || classes === void 0 ? void 0 : classes.itemDisabled), isInPath && (classes === null || classes === void 0 ? void 0 : classes.itemInPath), (isOpen || popOpen) && (classes === null || classes === void 0 ? void 0 : classes.itemOpen), isChecked && (classes === null || classes === void 0 ? void 0 : classes.itemActive), expandAble && (classes === null || classes === void 0 ? void 0 : classes.itemHasChildren)),
60905
+ className: classnames_default()(classes === null || classes === void 0 ? void 0 : classes.item, isDisabled && (classes === null || classes === void 0 ? void 0 : classes.itemDisabled), isInPath && (classes === null || classes === void 0 ? void 0 : classes.itemInPath), (isOpen || popOpen || shouldKeepOpen) && (classes === null || classes === void 0 ? void 0 : classes.itemOpen), shouldKeepOpen && (classes === null || classes === void 0 ? void 0 : classes.itemClosing), isChecked && (classes === null || classes === void 0 ? void 0 : classes.itemActive), expandAble && (classes === null || classes === void 0 ? void 0 : classes.itemHasChildren)),
60842
60906
  onMouseEnter: handleMouseEnter,
60843
60907
  onMouseLeave: handleMouseLeave,
60844
60908
  dir: config.direction,
@@ -60927,7 +60991,7 @@ var Menu = function Menu(props) {
60927
60991
  }
60928
60992
  }, [data, openKeys]);
60929
60993
  return /*#__PURE__*/(0,jsx_runtime.jsxs)("div", objectSpread2_default()(objectSpread2_default()({
60930
- className: classnames_default()(props.className, classes === null || classes === void 0 ? void 0 : classes.rootClass, classes === null || classes === void 0 ? void 0 : classes.wrapper, mode === 'inline' && (classes === null || classes === void 0 ? void 0 : classes.wrapperInline), (mode === 'vertical' || mode === 'vertical-auto') && (classes === null || classes === void 0 ? void 0 : classes.wrapperVertical), mode === 'horizontal' && (classes === null || classes === void 0 ? void 0 : classes.wrapperHorizontal), hasOpen && (classes === null || classes === void 0 ? void 0 : classes.wrapperHasOpen), theme === 'dark' ? classes === null || classes === void 0 ? void 0 : classes.wrapperDark : classes === null || classes === void 0 ? void 0 : classes.wrapperLight, collapse && (classes === null || classes === void 0 ? void 0 : classes.wrapperCollapse), context.inTransition && (classes === null || classes === void 0 ? void 0 : classes.wrapperInTransition))
60994
+ className: classnames_default()(props.className, classes === null || classes === void 0 ? void 0 : classes.rootClass, classes === null || classes === void 0 ? void 0 : classes.wrapper, mode === 'inline' && (classes === null || classes === void 0 ? void 0 : classes.wrapperInline), (mode === 'vertical' || mode === 'vertical-auto') && (classes === null || classes === void 0 ? void 0 : classes.wrapperVertical), mode === 'horizontal' && (classes === null || classes === void 0 ? void 0 : classes.wrapperHorizontal), hasOpen && (classes === null || classes === void 0 ? void 0 : classes.wrapperHasOpen), theme === 'dark' ? classes === null || classes === void 0 ? void 0 : classes.wrapperDark : classes === null || classes === void 0 ? void 0 : classes.wrapperLight, collapse && (classes === null || classes === void 0 ? void 0 : classes.wrapperCollapse), context.inTransition && (classes === null || classes === void 0 ? void 0 : classes.wrapperInTransition), props.inlineAnimate && (classes === null || classes === void 0 ? void 0 : classes.wrapperInlineAnimate))
60931
60995
  }, getDataAttribute({
60932
60996
  theme: theme,
60933
60997
  mode: isVertical ? 'vertical' : mode
@@ -74461,7 +74525,7 @@ var upload_interface = __webpack_require__(8821);
74461
74525
 
74462
74526
 
74463
74527
  /* harmony default export */ var src_0 = ({
74464
- version: '3.9.2-beta.1'
74528
+ version: '3.9.2-beta.2'
74465
74529
  });
74466
74530
  }();
74467
74531
  /******/ return __webpack_exports__;