shineout 3.10.2-beta.3 → 3.10.2-beta.5

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
@@ -545,5 +545,5 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
545
545
  // 此文件由脚本自动生成,请勿直接修改。
546
546
  // This file was generated automatically by a script. Please do not modify it directly.
547
547
  var _default = exports.default = {
548
- version: '3.10.2-beta.3'
548
+ version: '3.10.2-beta.5'
549
549
  };
package/dist/shineout.js CHANGED
@@ -13735,7 +13735,7 @@ var handleStyle = function handleStyle(style) {
13735
13735
  };
13736
13736
  /* harmony default export */ var jss_style_handleStyle = (handleStyle);
13737
13737
  ;// CONCATENATED MODULE: ../shineout-style/src/version.ts
13738
- /* harmony default export */ var version = ('3.10.2-beta.3');
13738
+ /* harmony default export */ var version = ('3.10.2-beta.5');
13739
13739
  ;// CONCATENATED MODULE: ../shineout-style/src/jss-style/index.tsx
13740
13740
 
13741
13741
 
@@ -67541,6 +67541,18 @@ var useTableLayout = function useTableLayout(props) {
67541
67541
  scrollRef = props.scrollRef;
67542
67542
  var preColumns = use_previous(props.columns);
67543
67543
  var preData = use_previous(props.data);
67544
+
67545
+ // 按需启用 floatLeft/floatRight:只有存在对应方向的固定列时才跟踪状态
67546
+ var hasFixedLeft = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useMemo)(function () {
67547
+ return props.columns.some(function (col) {
67548
+ return col.fixed === 'left';
67549
+ });
67550
+ }, [props.columns]);
67551
+ var hasFixedRight = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useMemo)(function () {
67552
+ return props.columns.some(function (col) {
67553
+ return col.fixed === 'right';
67554
+ });
67555
+ }, [props.columns]);
67544
67556
  var _useRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)({
67545
67557
  checkNum: 0,
67546
67558
  cachedWidth: null,
@@ -67560,36 +67572,33 @@ var useTableLayout = function useTableLayout(props) {
67560
67572
  _React$useState6 = slicedToArray_default()(_React$useState5, 2),
67561
67573
  isScrollY = _React$useState6[0],
67562
67574
  setIsScrollY = _React$useState6[1];
67563
- var _React$useState7 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(false),
67575
+ // floatLeft/floatRight 改用 ref 跟踪,通过 DOM classList 直接切换,避免 setState 触发整棵树 re-render
67576
+ var floatLeftRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)(false);
67577
+ var floatRightRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)(false);
67578
+ var floatClassRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)(null);
67579
+ var checkFloatRafRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)(0);
67580
+ var _React$useState7 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(0),
67564
67581
  _React$useState8 = slicedToArray_default()(_React$useState7, 2),
67565
- floatLeft = _React$useState8[0],
67566
- setFloatLeft = _React$useState8[1];
67567
- var _React$useState9 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(false),
67582
+ resizeFlag = _React$useState8[0],
67583
+ setResizeFlag = _React$useState8[1];
67584
+ var _React$useState9 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(0),
67568
67585
  _React$useState10 = slicedToArray_default()(_React$useState9, 2),
67569
- floatRight = _React$useState10[0],
67570
- setFloatRight = _React$useState10[1];
67586
+ scrollBarWidth = _React$useState10[0],
67587
+ setScrollBarWidth = _React$useState10[1];
67571
67588
  var _React$useState11 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(0),
67572
67589
  _React$useState12 = slicedToArray_default()(_React$useState11, 2),
67573
- resizeFlag = _React$useState12[0],
67574
- setResizeFlag = _React$useState12[1];
67575
- var _React$useState13 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(0),
67576
- _React$useState14 = slicedToArray_default()(_React$useState13, 2),
67577
- scrollBarWidth = _React$useState14[0],
67578
- setScrollBarWidth = _React$useState14[1];
67579
- var _React$useState15 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(0),
67580
- _React$useState16 = slicedToArray_default()(_React$useState15, 2),
67581
- scrollWidth = _React$useState16[0],
67582
- setScrollWidth = _React$useState16[1];
67583
- var _React$useState17 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(props.columns.map(function (v) {
67590
+ scrollWidth = _React$useState12[0],
67591
+ setScrollWidth = _React$useState12[1];
67592
+ var _React$useState13 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(props.columns.map(function (v) {
67584
67593
  return v.width;
67585
67594
  })),
67586
- _React$useState18 = slicedToArray_default()(_React$useState17, 2),
67587
- colgroup = _React$useState18[0],
67588
- setColgroup = _React$useState18[1];
67589
- var _React$useState19 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(true),
67590
- _React$useState20 = slicedToArray_default()(_React$useState19, 2),
67591
- adjust = _React$useState20[0],
67592
- setAdjust = _React$useState20[1];
67595
+ _React$useState14 = slicedToArray_default()(_React$useState13, 2),
67596
+ colgroup = _React$useState14[0],
67597
+ setColgroup = _React$useState14[1];
67598
+ var _React$useState15 = external_root_React_commonjs2_react_commonjs_react_amd_react_default().useState(true),
67599
+ _React$useState16 = slicedToArray_default()(_React$useState15, 2),
67600
+ adjust = _React$useState16[0],
67601
+ setAdjust = _React$useState16[1];
67593
67602
 
67594
67603
  // 检查滚动状态
67595
67604
  var checkScroll = use_persist_fn(function () {
@@ -67796,6 +67805,7 @@ var useTableLayout = function useTableLayout(props) {
67796
67805
  changeColGroup(newCols, false);
67797
67806
  });
67798
67807
  var checkFloat = use_persist_fn(function () {
67808
+ var _props$tableElRef;
67799
67809
  var scrollEl = scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current;
67800
67810
  if (!scrollEl || !(scrollEl !== null && scrollEl !== void 0 && scrollEl.offsetParent)) return;
67801
67811
  var max = scrollEl.scrollWidth - scrollEl.clientWidth;
@@ -67804,11 +67814,36 @@ var useTableLayout = function useTableLayout(props) {
67804
67814
  if (props.isRtl) {
67805
67815
  left = left * -1;
67806
67816
  }
67807
- var l = left > min;
67808
- // 缩放比例小于1时, 会出现小数, 导致判断错误
67809
- var r = max - left > 1;
67810
- if (l !== floatLeft) setFloatLeft(l);
67811
- if (r !== floatRight) setFloatRight(r);
67817
+
67818
+ // 直接操作 DOM classList,不触发 React re-render
67819
+ var classes = floatClassRef.current;
67820
+ var el = (_props$tableElRef = props.tableElRef) === null || _props$tableElRef === void 0 ? void 0 : _props$tableElRef.current;
67821
+ if (!classes || !el) return;
67822
+ if (hasFixedLeft) {
67823
+ var l = left > min;
67824
+ if (l !== floatLeftRef.current) {
67825
+ floatLeftRef.current = l;
67826
+ el.classList.toggle(classes.left, l);
67827
+ }
67828
+ }
67829
+ if (hasFixedRight) {
67830
+ // 缩放比例小于1时,会出现小数,导致判断错误
67831
+ var r = max - left > 1;
67832
+ if (r !== floatRightRef.current) {
67833
+ floatRightRef.current = r;
67834
+ el.classList.toggle(classes.right, r);
67835
+ }
67836
+ }
67837
+ });
67838
+
67839
+ // rAF 节流版:高频滚动路径使用,一帧最多执行一次 checkFloat
67840
+ var scheduleCheckFloat = use_persist_fn(function () {
67841
+ if (!hasFixedLeft && !hasFixedRight) return;
67842
+ if (checkFloatRafRef.current) return;
67843
+ checkFloatRafRef.current = requestAnimationFrame(function () {
67844
+ checkFloatRafRef.current = 0;
67845
+ checkFloat();
67846
+ });
67812
67847
  });
67813
67848
  var syncScrollWidth = use_persist_fn(function () {
67814
67849
  if (!scrollRef.current) return;
@@ -67831,8 +67866,18 @@ var useTableLayout = function useTableLayout(props) {
67831
67866
  resetColGroup: resetColGroup,
67832
67867
  resizeCol: resizeCol,
67833
67868
  dragCol: dragCol,
67834
- checkFloat: checkFloat
67869
+ checkFloat: checkFloat,
67870
+ scheduleCheckFloat: scheduleCheckFloat
67835
67871
  });
67872
+
67873
+ // 组件卸载时清理 rAF
67874
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
67875
+ return function () {
67876
+ if (checkFloatRafRef.current) {
67877
+ cancelAnimationFrame(checkFloatRafRef.current);
67878
+ }
67879
+ };
67880
+ }, []);
67836
67881
  (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
67837
67882
  if (!colgroup) return;
67838
67883
  // columns 增加或者减少列, 或者宽度发生变化且和colgroup的宽度不一致时
@@ -67910,18 +67955,25 @@ var useTableLayout = function useTableLayout(props) {
67910
67955
  } else {
67911
67956
  tableWidth = undefined;
67912
67957
  }
67958
+
67959
+ // 注册 float class name,由 table.tsx 初始化时调用
67960
+ var registerFloatClass = use_persist_fn(function (left, right) {
67961
+ floatClassRef.current = {
67962
+ left: left,
67963
+ right: right
67964
+ };
67965
+ });
67913
67966
  return {
67914
67967
  isScrollX: !!isScrollX,
67915
67968
  isScrollY: !!isScrollY,
67916
- floatLeft: floatLeft,
67917
- floatRight: floatRight,
67918
67969
  scrollBarWidth: scrollBarWidth,
67919
67970
  colgroup: colgroup ? colgroup : [],
67920
67971
  func: func,
67921
67972
  width: tableWidth,
67922
67973
  shouldLastColAuto: props.columnResizable && !adjust,
67923
67974
  scrollWidth: scrollWidth,
67924
- resizeFlag: resizeFlag
67975
+ resizeFlag: resizeFlag,
67976
+ registerFloatClass: registerFloatClass
67925
67977
  };
67926
67978
  };
67927
67979
  /* harmony default export */ var use_table_layout = (useTableLayout);
@@ -70681,6 +70733,7 @@ function Table(props) {
70681
70733
  theadRef: theadRef,
70682
70734
  tbodyRef: tbodyRef,
70683
70735
  scrollRef: scrollRef,
70736
+ tableElRef: tableRef,
70684
70737
  columns: columns,
70685
70738
  data: props.data,
70686
70739
  dataChangeResize: !!props.dataChangeResize,
@@ -70694,13 +70747,15 @@ function Table(props) {
70694
70747
  colgroup = _useTableLayout.colgroup,
70695
70748
  isScrollY = _useTableLayout.isScrollY,
70696
70749
  isScrollX = _useTableLayout.isScrollX,
70697
- floatLeft = _useTableLayout.floatLeft,
70698
- floatRight = _useTableLayout.floatRight,
70699
70750
  width = _useTableLayout.width,
70700
70751
  shouldLastColAuto = _useTableLayout.shouldLastColAuto,
70701
70752
  scrollBarWidth = _useTableLayout.scrollBarWidth,
70702
70753
  scrollWidth = _useTableLayout.scrollWidth,
70703
- resizeFlag = _useTableLayout.resizeFlag;
70754
+ resizeFlag = _useTableLayout.resizeFlag,
70755
+ registerFloatClass = _useTableLayout.registerFloatClass;
70756
+
70757
+ // 注册 floatLeft/floatRight 的 CSS class 名,供 checkFloat 直接操作 DOM
70758
+ registerFloatClass(tableClasses.floatLeft, tableClasses.floatRight);
70704
70759
  var _useTableFilter = use_table_filter({
70705
70760
  keygen: props.keygen,
70706
70761
  data: props.data,
@@ -70851,7 +70906,7 @@ function Table(props) {
70851
70906
  var handleBodyScroll = usePersistFn(function (e) {
70852
70907
  var target = e.currentTarget;
70853
70908
  if (!target) return;
70854
- layoutFunc.checkFloat();
70909
+ layoutFunc.scheduleCheckFloat();
70855
70910
  if (isVirtualColumnEnabled) columnInfo.handleScroll({
70856
70911
  scrollLeft: target.scrollLeft
70857
70912
  });
@@ -70878,7 +70933,7 @@ function Table(props) {
70878
70933
  var handleVirtualScroll = usePersistFn(function (info) {
70879
70934
  virtualInfo.handleScroll(info);
70880
70935
  if (isVirtualColumnEnabled) columnInfo.handleScroll(info);
70881
- layoutFunc.checkFloat();
70936
+ layoutFunc.scheduleCheckFloat();
70882
70937
  if (headMirrorScrollRef.current) {
70883
70938
  headMirrorScrollRef.current.scrollLeft = info.scrollLeft;
70884
70939
  }
@@ -71268,6 +71323,7 @@ function Table(props) {
71268
71323
  };
71269
71324
 
71270
71325
  // handle head and foot scroll
71326
+ // 使用 passive: true 监听 wheel,不调用 preventDefault,避免阻塞合成器线程(优化 INP)
71271
71327
  var handleHeaderWheel = usePersistFn(function (e) {
71272
71328
  var _theadRef$current2;
71273
71329
  var scrollEl = scrollRef.current;
@@ -71278,7 +71334,6 @@ function Table(props) {
71278
71334
  if (scrollLeft === scrollEl.scrollLeft) {
71279
71335
  return;
71280
71336
  }
71281
- e.preventDefault();
71282
71337
  var left = Math.min(Math.max(scrollLeft, 0), max);
71283
71338
  scrollEl.scrollLeft = left;
71284
71339
  theadRef.current.parentElement.scrollLeft = left;
@@ -71290,10 +71345,10 @@ function Table(props) {
71290
71345
  syncHeaderScroll(((_scrollRef$current10 = scrollRef.current) === null || _scrollRef$current10 === void 0 ? void 0 : _scrollRef$current10.scrollLeft) || 0);
71291
71346
  }, [isScrollX, props.sticky, $empty]);
71292
71347
  (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
71293
- // 绑定 wheel 事件
71348
+ // 绑定 wheel 事件(passive: true 不阻塞合成器线程)
71294
71349
  if (props.sticky && theadRef.current && theadRef.current.parentElement) {
71295
71350
  theadRef.current.parentElement.addEventListener('wheel', handleHeaderWheel, {
71296
- passive: false
71351
+ passive: true
71297
71352
  });
71298
71353
  }
71299
71354
  return function () {
@@ -71360,7 +71415,7 @@ function Table(props) {
71360
71415
  });
71361
71416
  return /*#__PURE__*/(0,jsx_runtime.jsxs)(jsx_runtime.Fragment, {
71362
71417
  children: [/*#__PURE__*/(0,jsx_runtime.jsx)("div", objectSpread2_default()(objectSpread2_default()({
71363
- className: classnames_default()(tableWrapperClass, defineProperty_default()(defineProperty_default()(defineProperty_default()({}, tableClasses.sticky, props.sticky), tableClasses.floatLeft, floatLeft), tableClasses.floatRight, floatRight)),
71418
+ className: classnames_default()(tableWrapperClass, defineProperty_default()({}, tableClasses.sticky, props.sticky)),
71364
71419
  style: tableWrapperStyle
71365
71420
  }, selection.getTableProps()), {}, {
71366
71421
  ref: tableRef,
@@ -80080,7 +80135,7 @@ var watermark_interface = __webpack_require__(6640);
80080
80135
 
80081
80136
 
80082
80137
  /* harmony default export */ var src_0 = ({
80083
- version: '3.10.2-beta.3'
80138
+ version: '3.10.2-beta.5'
80084
80139
  });
80085
80140
  }();
80086
80141
  /******/ return __webpack_exports__;