@zat-design/sisyphus-react 4.1.0 → 4.1.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/index.esm.css +1 -1
  2. package/dist/less.esm.css +1 -1
  3. package/es/ProDrawerForm/components/ProDrawer/index.js +5 -2
  4. package/es/ProEditTable/components/RcTable/DraggableTable.js +6 -1
  5. package/es/ProEditTable/components/RenderField/index.js +18 -11
  6. package/es/ProEditTable/index.js +76 -69
  7. package/es/ProEditTable/utils/config.d.ts +1 -1
  8. package/es/ProEditTable/utils/config.js +16 -9
  9. package/es/ProEditTable/utils/index.js +14 -1
  10. package/es/ProForm/components/combination/Container/index.js +2 -1
  11. package/es/ProForm/components/combination/Group/utils/index.d.ts +14 -14
  12. package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +4 -1
  13. package/es/ProLayout/components/Layout/Menu/OpenMenu/style/index.less +13 -1
  14. package/es/ProLayout/components/Layout/Menu/SideMenu/style/index.less +16 -1
  15. package/es/ProLayout/components/Layout/Menu/index.js +104 -1
  16. package/es/ProLayout/components/ProCollapse/index.js +4 -3
  17. package/es/ProSelect/index.js +2 -2
  18. package/lib/ProDrawerForm/components/ProDrawer/index.js +5 -2
  19. package/lib/ProEditTable/components/RcTable/DraggableTable.js +6 -1
  20. package/lib/ProEditTable/components/RenderField/index.js +18 -11
  21. package/lib/ProEditTable/index.js +76 -69
  22. package/lib/ProEditTable/utils/config.d.ts +1 -1
  23. package/lib/ProEditTable/utils/config.js +16 -9
  24. package/lib/ProEditTable/utils/index.js +14 -1
  25. package/lib/ProForm/components/combination/Container/index.js +2 -1
  26. package/lib/ProForm/components/combination/Group/utils/index.d.ts +14 -14
  27. package/lib/ProLayout/components/Layout/Menu/OpenMenu/index.js +4 -1
  28. package/lib/ProLayout/components/Layout/Menu/OpenMenu/style/index.less +13 -1
  29. package/lib/ProLayout/components/Layout/Menu/SideMenu/style/index.less +16 -1
  30. package/lib/ProLayout/components/Layout/Menu/index.js +104 -3
  31. package/lib/ProLayout/components/ProCollapse/index.js +6 -3
  32. package/lib/ProSelect/index.js +2 -2
  33. package/package.json +2 -1
@@ -75,45 +75,43 @@ export declare const useFormItemProps: (column: FlexibleGroupColumnType, context
75
75
  confirm?: boolean | import("antd").ModalFuncProps | import("../../../render/propsType").FunctionArgs<any, boolean | import("antd").ModalFuncProps>;
76
76
  show?: boolean | ReactiveFunction<any, boolean>;
77
77
  component?: React.ReactNode | ReactiveFunction<any, React.ReactNode>;
78
- style?: React.CSSProperties;
79
78
  id?: string;
80
- children?: React.ReactNode | ((form: FormInstance<any>) => React.ReactNode);
81
- trim?: boolean;
82
- normalize?: (value: any, prevValue: any, allValues: import("@rc-component/form/lib/interface").Store) => any;
83
79
  className?: string;
84
- vertical?: boolean;
85
80
  hidden?: boolean;
81
+ style?: React.CSSProperties;
82
+ children?: React.ReactNode | ((form: FormInstance<any>) => React.ReactNode);
86
83
  onReset?: () => void;
87
84
  prefixCls?: string;
85
+ status?: "" | "warning" | "error" | "success" | "validating";
88
86
  rootClassName?: string;
89
- status?: "" | "success" | "error" | "warning" | "validating";
90
- trigger?: string;
91
- colon?: boolean;
92
87
  isView?: boolean;
93
- desensitization?: [number, number] | ReactiveFunction<any, [number, number]>;
94
- getValueProps?: ((value: any) => Record<string, unknown>) & ((value: any) => Record<string, unknown>);
95
- layout?: import("antd/es/form/Form").FormItemLayout;
96
- help?: React.ReactNode;
97
- preserve?: boolean;
88
+ colon?: boolean;
98
89
  htmlFor?: string;
99
90
  labelAlign?: import("antd/es/form/interface").FormLabelAlign;
100
91
  labelCol?: import("antd").ColProps;
92
+ vertical?: boolean;
101
93
  getValueFromEvent?: (...args: import("@rc-component/form/lib/interface").EventArgs) => any;
94
+ normalize?: (value: any, prevValue: any, allValues: import("@rc-component/form/lib/interface").Store) => any;
102
95
  shouldUpdate?: import("@rc-component/form/lib/Field").ShouldUpdate<any>;
96
+ trigger?: string;
103
97
  validateTrigger?: string | false | string[];
104
98
  validateDebounce?: number;
105
99
  valuePropName?: string;
100
+ getValueProps?: ((value: any) => Record<string, unknown>) & ((value: any) => Record<string, unknown>);
106
101
  messageVariables?: Record<string, string>;
107
102
  initialValue?: any;
108
103
  onMetaChange?: (meta: import("@rc-component/form/lib/Field").MetaEvent) => void;
104
+ preserve?: boolean;
109
105
  isListField?: boolean;
110
106
  isList?: boolean;
111
107
  noStyle?: boolean;
112
108
  hasFeedback?: boolean | {
113
109
  icons: import("antd/es/form/FormItem").FeedbackIcons;
114
110
  };
115
- validateStatus?: "" | "success" | "error" | "warning" | "validating";
111
+ validateStatus?: "" | "warning" | "error" | "success" | "validating";
112
+ layout?: import("antd/es/form/Form").FormItemLayout;
116
113
  wrapperCol?: import("antd").ColProps;
114
+ help?: React.ReactNode;
117
115
  fieldId?: string;
118
116
  valueType?: import("../../../render/propsType").ProFormValueType;
119
117
  switchValue?: [any, any];
@@ -123,10 +121,12 @@ export declare const useFormItemProps: (column: FlexibleGroupColumnType, context
123
121
  index?: number;
124
122
  }) => string | React.ReactElement<any, any>;
125
123
  viewType?: import("../../../render/propsType").ViewType;
124
+ trim?: boolean;
126
125
  upperCase?: boolean;
127
126
  toISOString?: boolean;
128
127
  toCSTString?: boolean;
129
128
  clearNotShow?: boolean;
129
+ desensitization?: [number, number] | ReactiveFunction<any, [number, number]>;
130
130
  name: any;
131
131
  dependencies: any[];
132
132
  tooltip: string | {
@@ -29,7 +29,9 @@ var OpenMenu = props => {
29
29
  var className = props.className,
30
30
  dataSource = props.dataSource,
31
31
  style = props.style,
32
- onMenuClick = props.onMenuClick;
32
+ onMenuClick = props.onMenuClick,
33
+ _props$textVisible = props.textVisible,
34
+ textVisible = _props$textVisible === void 0 ? true : _props$textVisible;
33
35
  var _ref = dataSource || {},
34
36
  menus = _ref.menus,
35
37
  sideMenu = _ref.sideMenu;
@@ -53,6 +55,7 @@ var OpenMenu = props => {
53
55
  var layoutTarget = layoutContext === null || layoutContext === void 0 ? void 0 : layoutContext.target;
54
56
  var cls = (0, _classnames.default)({
55
57
  'pro-layout-open-menu': true,
58
+ 'pro-layout-menu-text-hidden': textVisible === false,
56
59
  [`${className}`]: className
57
60
  });
58
61
 
@@ -1,6 +1,17 @@
1
1
  @import '../../../../../../style/variables.less';
2
2
 
3
3
  .pro-layout-open-menu {
4
+ // 展开动画期间(Menu 传入 textVisible=false)隐藏文字,避免”挤压式逐字出现”;宽度过渡结束后再淡入
5
+ &.pro-layout-menu-text-hidden {
6
+ .@{ant-prefix}-menu-title-content {
7
+ div {
8
+ h2 {
9
+ opacity: 0 !important;
10
+ transition: none !important; // 确保隐藏时无过渡动画
11
+ }
12
+ }
13
+ }
14
+ }
4
15
 
5
16
  .@{ant-prefix}-menu-root {
6
17
  overflow-y: auto !important;
@@ -98,7 +109,8 @@
98
109
  font-weight: 400;
99
110
  font-size: var(--zaui-font-size-md, 14px);
100
111
  opacity: 1;
101
- transition: opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), margin 0.3s, color 0.3s;
112
+ // 修改:添加 150ms opacity 淡入动画,消除"突然出现"的卡顿感
113
+ transition: opacity 0.15s ease-out, margin 0.3s, color 0.3s;
102
114
  }
103
115
  }
104
116
  }
@@ -78,9 +78,24 @@
78
78
  overflow-x: hidden;
79
79
  overflow-y: auto;
80
80
 
81
+ // 与展开态一致:hover 使用透明背景 + 左侧品牌色半透明条
81
82
  .@{ant-prefix}-menu-submenu-title:hover,
82
83
  .@{ant-prefix}-menu-item:hover {
83
- background-color: transparent;
84
+ position: relative;
85
+ background-color: transparent !important;
86
+
87
+ &::before {
88
+ position: absolute;
89
+ left: var(--zaui-space-size-sm, 8px);
90
+ right: var(--zaui-space-size-sm, 8px);
91
+ width: auto;
92
+ min-height: 38px;
93
+ height: 80%;
94
+ background-color: var(--zaui-brand, #006aff);
95
+ border-radius: var(--zaui-border-radius, 8px);
96
+ opacity: 0.08;
97
+ content: '';
98
+ }
84
99
  }
85
100
 
86
101
  .@{ant-prefix}-menu-item {
@@ -4,13 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _react = require("react");
7
8
  var _classnames = _interopRequireDefault(require("classnames"));
8
9
  var _OpenMenu = _interopRequireDefault(require("./OpenMenu"));
9
10
  var _FoldMenu = _interopRequireDefault(require("./FoldMenu"));
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
- // 折叠后菜单
13
-
13
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
17
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
18
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // 折叠后菜单
19
+ // 菜单宽度配置
20
+ var MENU_CONFIG = {
21
+ TRANSITION_DURATION: 300,
22
+ // 宽度过渡时长(ms)
23
+ TEXT_VISIBLE_THRESHOLD: 150,
24
+ // 文字显示阈值(px, 约68%展开)
25
+ FULL_WIDTH: 219 // 完全展开宽度(px)
26
+ };
14
27
  var Menu = props => {
15
28
  var _ref = props || {},
16
29
  headerHeight = _ref.headerHeight,
@@ -24,6 +37,83 @@ var Menu = props => {
24
37
  sideMenuHeaderRender = _ref.sideMenuHeaderRender,
25
38
  onMenuClick = _ref.onMenuClick;
26
39
  var menus = [];
40
+ var menuRef = (0, _react.useRef)(null);
41
+ // 整合所有动画相关的refs
42
+ var animationStateRef = (0, _react.useRef)({
43
+ timer: null,
44
+ observer: null,
45
+ hasTriggered: false
46
+ });
47
+ var _useState = (0, _react.useState)(false),
48
+ _useState2 = _slicedToArray(_useState, 2),
49
+ isOpenMenuTextVisible = _useState2[0],
50
+ setIsOpenMenuTextVisible = _useState2[1];
51
+
52
+ // 提取清理逻辑
53
+ var cleanupAnimation = (0, _react.useCallback)(() => {
54
+ var state = animationStateRef.current;
55
+ if (state.timer) {
56
+ clearTimeout(state.timer);
57
+ state.timer = null;
58
+ }
59
+ if (state.observer) {
60
+ try {
61
+ state.observer.disconnect();
62
+ } catch (e) {
63
+ console.warn('ResizeObserver disconnect failed:', e);
64
+ }
65
+ state.observer = null;
66
+ }
67
+ }, []);
68
+
69
+ // 触发文字显示
70
+ var showMenuText = (0, _react.useCallback)(() => {
71
+ var state = animationStateRef.current;
72
+ if (state.hasTriggered) return;
73
+ state.hasTriggered = true;
74
+ setIsOpenMenuTextVisible(true);
75
+ // 延迟清理,避免回调内竞态
76
+ setTimeout(cleanupAnimation, 0);
77
+ }, [cleanupAnimation]);
78
+
79
+ // ResizeObserver 监听宽度变化,提前显示文字
80
+ (0, _react.useEffect)(() => {
81
+ var _menuRef$current$getB, _menuRef$current, _menuRef$current$getB2;
82
+ var state = animationStateRef.current;
83
+ state.hasTriggered = false;
84
+
85
+ // 折叠态:清理并隐藏文字
86
+ if (!collapsed) {
87
+ setIsOpenMenuTextVisible(false);
88
+ cleanupAnimation();
89
+ return;
90
+ }
91
+
92
+ // 检查是否已展开
93
+ var currentWidth = (_menuRef$current$getB = (_menuRef$current = menuRef.current) === null || _menuRef$current === void 0 || (_menuRef$current$getB2 = _menuRef$current.getBoundingClientRect) === null || _menuRef$current$getB2 === void 0 ? void 0 : _menuRef$current$getB2.call(_menuRef$current).width) !== null && _menuRef$current$getB !== void 0 ? _menuRef$current$getB : 0;
94
+ if (currentWidth >= MENU_CONFIG.FULL_WIDTH) {
95
+ state.hasTriggered = true;
96
+ setIsOpenMenuTextVisible(true);
97
+ return;
98
+ }
99
+
100
+ // 创建 ResizeObserver
101
+ var supportsResizeObserver = typeof ResizeObserver !== 'undefined';
102
+ if (supportsResizeObserver && menuRef.current) {
103
+ state.observer = new ResizeObserver(entries => {
104
+ var _entries$0$contentRec, _entries$;
105
+ var width = (_entries$0$contentRec = (_entries$ = entries[0]) === null || _entries$ === void 0 ? void 0 : _entries$.contentRect.width) !== null && _entries$0$contentRec !== void 0 ? _entries$0$contentRec : 0;
106
+ if (width >= MENU_CONFIG.TEXT_VISIBLE_THRESHOLD) {
107
+ showMenuText();
108
+ }
109
+ });
110
+ state.observer.observe(menuRef.current);
111
+ }
112
+
113
+ // Fallback:定时器保底
114
+ state.timer = setTimeout(showMenuText, MENU_CONFIG.TRANSITION_DURATION);
115
+ return cleanupAnimation;
116
+ }, [collapsed, cleanupAnimation, showMenuText]);
27
117
  var menuCls = (0, _classnames.default)({
28
118
  'pro-layout-menu': true,
29
119
  'pro-layout-menu-open': collapsed
@@ -37,10 +127,17 @@ var Menu = props => {
37
127
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
38
128
  }
39
129
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
130
+ ref: menuRef,
40
131
  className: menuCls,
41
132
  style: {
42
133
  top: notice ? 96 + headerHeight - 64 : headerHeight
43
134
  },
135
+ onTransitionEnd: e => {
136
+ // Fallback:确保宽度过渡结束后文字一定显示
137
+ if (e.propertyName === 'width' && e.target === menuRef.current && collapsed) {
138
+ showMenuText();
139
+ }
140
+ },
44
141
  children: [sideMenuHeaderRender, /*#__PURE__*/(0, _jsxRuntime.jsx)(_OpenMenu.default, {
45
142
  dataSource: {
46
143
  menus,
@@ -48,6 +145,7 @@ var Menu = props => {
48
145
  height: headerHeight + (notice ? 32 : 0) + 48
49
146
  },
50
147
  onMenuClick: onMenuClick,
148
+ textVisible: isOpenMenuTextVisible,
51
149
  style: {
52
150
  display: collapsed ? 'block' : 'none'
53
151
  }
@@ -67,7 +165,10 @@ var Menu = props => {
67
165
  }
68
166
  }), sideMenuFooterRender || /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
69
167
  className: "pro-layout-menu-collapsed",
70
- onClick: onToggle,
168
+ onClick: () => {
169
+ setIsOpenMenuTextVisible(false);
170
+ onToggle === null || onToggle === void 0 || onToggle();
171
+ },
71
172
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
72
173
  className: "pro-layout-arrow "
73
174
  })
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = require("react");
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _antd = require("antd");
9
9
  var _icons = require("@ant-design/icons");
10
10
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -12,6 +12,8 @@ var _fold = _interopRequireDefault(require("../../../assets/fold.svg"));
12
12
  var _index = _interopRequireDefault(require("../../../ProIcon/index"));
13
13
  var _jsxRuntime = require("react/jsx-runtime");
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
17
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
18
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
19
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -61,11 +63,12 @@ var ProCollapse = props => {
61
63
  'pro-collapse-no-level1-title': !title && level !== '2' && level !== '3',
62
64
  [`${className}`]: className
63
65
  });
64
- var content = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
66
+ var shouldRenderContent = children !== null && children !== undefined;
67
+ var content = shouldRenderContent ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
65
68
  className: "pro-collapse-content",
66
69
  style: contentStyle,
67
70
  children: children
68
- });
71
+ }) : null;
69
72
 
70
73
  // 生成 Collapse items 配置
71
74
  var getCollapseItems = () => {
@@ -431,7 +431,7 @@ var ProSelect = (props, ref) => {
431
431
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(OptGroup, {
432
432
  label: item[label],
433
433
  children: groupOpts.map(opt => /*#__PURE__*/(0, _jsxRuntime.jsx)(Option, {
434
- label: opt[label],
434
+ label: selectProps.showCodeName ? `${opt[code]}-${opt[label]}` : opt[label],
435
435
  value: opt[code],
436
436
  record: opt,
437
437
  disabled: !!opt.disabled,
@@ -447,7 +447,7 @@ var ProSelect = (props, ref) => {
447
447
  }, (_item$label = item[label]) !== null && _item$label !== void 0 ? _item$label : `group-${index}`);
448
448
  }
449
449
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Option, {
450
- label: item[label],
450
+ label: selectProps.showCodeName ? `${item[code]}-${item[label]}` : item[label],
451
451
  value: optionValue,
452
452
  record: item,
453
453
  disabled: !!item.disabled,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zat-design/sisyphus-react",
3
- "version": "4.1.0",
3
+ "version": "4.1.2-beta.1",
4
4
  "license": "MIT",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -92,6 +92,7 @@
92
92
  "@dnd-kit/utilities": "^3.2.1",
93
93
  "@rc-component/picker": "^1.9.0",
94
94
  "@zat-design/utils": "4.0.0",
95
+ "@zat-design/sisyphus-login": "4.0.0-beta.1",
95
96
  "ahooks": "3.9.5",
96
97
  "antd": "^6.2.2",
97
98
  "big.js": "^6.2.1",