@zat-design/sisyphus-react 4.5.9 → 4.5.10-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.
Files changed (280) hide show
  1. package/dist/index.esm.css +1 -1
  2. package/dist/less.esm.css +1 -1
  3. package/es/FormsProvider/index.js +14 -21
  4. package/es/ProAction/components/CheckModalContent/index.js +12 -26
  5. package/es/ProAction/index.js +79 -83
  6. package/es/ProAction/propsType.js +0 -1
  7. package/es/ProConfigProvider/index.js +63 -110
  8. package/es/ProConfigProvider/propsType.js +0 -1
  9. package/es/ProDownload/index.d.ts +2 -1
  10. package/es/ProDownload/index.js +74 -69
  11. package/es/ProDownload/propsType.js +0 -1
  12. package/es/ProDownload/utils.d.ts +10 -5
  13. package/es/ProDownload/utils.js +63 -95
  14. package/es/ProDrawerForm/components/ProDrawer/index.js +83 -113
  15. package/es/ProDrawerForm/components/ProModal/index.js +77 -108
  16. package/es/ProDrawerForm/components/index.js +6 -2
  17. package/es/ProDrawerForm/hooks/useConfirmClose.js +20 -39
  18. package/es/ProDrawerForm/index.js +29 -38
  19. package/es/ProDrawerForm/propsType.js +0 -1
  20. package/es/ProDrawerForm/utils/index.js +18 -36
  21. package/es/ProEditLabel/components/RenderProForm.js +45 -49
  22. package/es/ProEditLabel/index.js +126 -163
  23. package/es/ProEditLabel/propsType.js +0 -1
  24. package/es/ProEditLabel/utils/index.js +5 -8
  25. package/es/ProEditTable/components/ActionButton/index.js +111 -119
  26. package/es/ProEditTable/components/RcTable/BaseTable.js +38 -51
  27. package/es/ProEditTable/components/RcTable/DraggableTable.js +97 -129
  28. package/es/ProEditTable/components/RcTable/index.js +6 -4
  29. package/es/ProEditTable/components/RenderField/ListChangedWrapper.js +77 -95
  30. package/es/ProEditTable/components/RenderField/index.js +490 -587
  31. package/es/ProEditTable/components/RenderField/propsType.js +0 -1
  32. package/es/ProEditTable/components/RenderField/tools.js +115 -112
  33. package/es/ProEditTable/components/RenderToolbar/index.js +47 -73
  34. package/es/ProEditTable/components/Summary/index.js +38 -64
  35. package/es/ProEditTable/components/Validator/index.js +46 -46
  36. package/es/ProEditTable/components/index.js +12 -5
  37. package/es/ProEditTable/index.js +456 -378
  38. package/es/ProEditTable/propsType.js +0 -1
  39. package/es/ProEditTable/utils/config.js +60 -122
  40. package/es/ProEditTable/utils/diffOriginal.js +45 -82
  41. package/es/ProEditTable/utils/getDefaultProps.js +19 -24
  42. package/es/ProEditTable/utils/index.js +154 -235
  43. package/es/ProEditTable/utils/tools.js +149 -286
  44. package/es/ProEditTable/utils/transform.js +25 -30
  45. package/es/ProEditTable/utils/useEditTableError.js +30 -43
  46. package/es/ProEditTable/utils/useShouldUpdateForTable.js +42 -72
  47. package/es/ProEditTable/utils/validateAll.js +87 -154
  48. package/es/ProEnum/components/Group.js +38 -30
  49. package/es/ProEnum/components/Tag.js +22 -26
  50. package/es/ProEnum/hooks/useEnum.js +48 -116
  51. package/es/ProEnum/hooks/useEnumRequest.js +182 -212
  52. package/es/ProEnum/hooks/useFrequentEnumRequest.js +40 -48
  53. package/es/ProEnum/index.js +162 -172
  54. package/es/ProEnum/propsType.js +0 -1
  55. package/es/ProEnum/utils/eventCenter.js +10 -12
  56. package/es/ProEnum/utils/frequentEnum.js +35 -92
  57. package/es/ProEnum/utils/getEnum.js +32 -90
  58. package/es/ProEnum/utils/getEnumLabel.js +44 -49
  59. package/es/ProEnum/utils/index.js +93 -207
  60. package/es/ProForm/components/Container.js +13 -28
  61. package/es/ProForm/components/FormFooter/index.js +36 -44
  62. package/es/ProForm/components/FormFooter/propsType.js +0 -1
  63. package/es/ProForm/components/base/Checkbox/index.js +32 -59
  64. package/es/ProForm/components/base/DatePicker/index.js +49 -71
  65. package/es/ProForm/components/base/Input/index.js +63 -97
  66. package/es/ProForm/components/base/Input/propsType.js +0 -1
  67. package/es/ProForm/components/base/InputNumber/index.js +118 -172
  68. package/es/ProForm/components/base/Radio/index.js +39 -52
  69. package/es/ProForm/components/base/RangePicker/index.js +109 -127
  70. package/es/ProForm/components/base/RangePicker/useDateRange.js +20 -17
  71. package/es/ProForm/components/base/Select/index.js +63 -89
  72. package/es/ProForm/components/base/Switch/index.js +27 -35
  73. package/es/ProForm/components/base/SwitchCheckbox/index.js +36 -54
  74. package/es/ProForm/components/base/TextArea/index.js +30 -41
  75. package/es/ProForm/components/base/TimePicker/index.js +27 -37
  76. package/es/ProForm/components/combination/Container/index.js +37 -47
  77. package/es/ProForm/components/combination/Container/propsType.js +0 -1
  78. package/es/ProForm/components/combination/FormList/components/ActionButton.js +165 -237
  79. package/es/ProForm/components/combination/FormList/components/BlockFields.js +98 -102
  80. package/es/ProForm/components/combination/FormList/components/Empty.js +28 -55
  81. package/es/ProForm/components/combination/FormList/components/LineFields.js +57 -54
  82. package/es/ProForm/components/combination/FormList/components/ToolbarButton.js +61 -109
  83. package/es/ProForm/components/combination/FormList/index.js +151 -161
  84. package/es/ProForm/components/combination/FormList/propsType.js +0 -1
  85. package/es/ProForm/components/combination/FormList/style/index.less +6 -0
  86. package/es/ProForm/components/combination/FormList/utils.js +22 -38
  87. package/es/ProForm/components/combination/Group/component/AddonWrapper/index.js +12 -28
  88. package/es/ProForm/components/combination/Group/component/ComRender.js +50 -111
  89. package/es/ProForm/components/combination/Group/component/FlexibleGroup.js +106 -213
  90. package/es/ProForm/components/combination/Group/hooks/index.js +69 -129
  91. package/es/ProForm/components/combination/Group/index.js +87 -126
  92. package/es/ProForm/components/combination/Group/propsType.js +0 -1
  93. package/es/ProForm/components/combination/Group/utils/index.js +124 -239
  94. package/es/ProForm/components/combination/ProCascader/index.js +156 -199
  95. package/es/ProForm/components/combination/ProCascader/propsType.js +0 -1
  96. package/es/ProForm/components/combination/ProCascader/utils/index.js +12 -21
  97. package/es/ProForm/components/combination/ProModalSelect/hooks/useRequestList.js +72 -70
  98. package/es/ProForm/components/combination/ProModalSelect/index.js +309 -347
  99. package/es/ProForm/components/combination/ProModalSelect/propsType.js +0 -1
  100. package/es/ProForm/components/combination/ProModalSelect/utils/index.js +32 -39
  101. package/es/ProForm/components/combination/ProNumberRange/index.js +100 -156
  102. package/es/ProForm/components/combination/ProNumberRange/propsType.js +0 -1
  103. package/es/ProForm/components/combination/ProRangeLimit/index.js +104 -115
  104. package/es/ProForm/components/combination/ProRangeLimit/propsType.js +0 -1
  105. package/es/ProForm/components/combination/ProTimeLimit/hooks/useControlled.js +16 -16
  106. package/es/ProForm/components/combination/ProTimeLimit/index.js +75 -109
  107. package/es/ProForm/components/index.js +56 -34
  108. package/es/ProForm/components/render/ChangedWrapper.js +85 -94
  109. package/es/ProForm/components/render/ConfirmWrapper.js +27 -39
  110. package/es/ProForm/components/render/CustomComponentViewWrapper.js +65 -82
  111. package/es/ProForm/components/render/Render.js +223 -329
  112. package/es/ProForm/components/render/RenderFields.js +76 -113
  113. package/es/ProForm/components/render/propsType.js +0 -1
  114. package/es/ProForm/hooks/useControlled.js +8 -10
  115. package/es/ProForm/hooks/useDeepCompareMemo.js +11 -11
  116. package/es/ProForm/hooks/useFieldProps.js +8 -4
  117. package/es/ProForm/hooks/useForm.js +50 -110
  118. package/es/ProForm/hooks/useRules.js +17 -33
  119. package/es/ProForm/hooks/useShouldUpdate.js +77 -152
  120. package/es/ProForm/hooks/useWatch.js +62 -134
  121. package/es/ProForm/index.js +157 -194
  122. package/es/ProForm/propsType.js +15 -7
  123. package/es/ProForm/utils/buildFormItemProps.js +51 -58
  124. package/es/ProForm/utils/diffOriginal.js +43 -73
  125. package/es/ProForm/utils/getDefaultProps.js +18 -24
  126. package/es/ProForm/utils/index.js +160 -235
  127. package/es/ProForm/utils/processDependencies.js +21 -60
  128. package/es/ProForm/utils/reactiveValues.js +20 -34
  129. package/es/ProForm/utils/rulesCreator.js +42 -40
  130. package/es/ProForm/utils/transformNames.js +10 -13
  131. package/es/ProForm/utils/transformValue.js +16 -29
  132. package/es/ProForm/utils/valueType.js +96 -178
  133. package/es/ProIcon/config/index.js +340 -274
  134. package/es/ProIcon/index.js +135 -209
  135. package/es/ProIcon/propsTypes.js +0 -1
  136. package/es/ProIcon/utils/index.js +24 -39
  137. package/es/ProLayout/components/Layout/Header/index.js +108 -141
  138. package/es/ProLayout/components/Layout/Menu/FoldMenu/index.js +134 -190
  139. package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +113 -139
  140. package/es/ProLayout/components/Layout/Menu/OpenMenu/propsType.js +0 -1
  141. package/es/ProLayout/components/Layout/Menu/SideMenu/index.js +23 -31
  142. package/es/ProLayout/components/Layout/Menu/index.js +92 -89
  143. package/es/ProLayout/components/Layout/Notice/index.js +13 -27
  144. package/es/ProLayout/components/Layout/index.js +8 -3
  145. package/es/ProLayout/components/ProCollapse/PropTypes.js +0 -1
  146. package/es/ProLayout/components/ProCollapse/index.js +89 -111
  147. package/es/ProLayout/components/ProFooter/PropTypes.js +0 -1
  148. package/es/ProLayout/components/ProFooter/index.js +27 -24
  149. package/es/ProLayout/components/ProHeader/PropTypes.js +0 -1
  150. package/es/ProLayout/components/ProHeader/components/Copy/index.js +23 -21
  151. package/es/ProLayout/components/ProHeader/components/Describe/index.js +67 -84
  152. package/es/ProLayout/components/ProHeader/components/ProBackBtn/index.js +18 -21
  153. package/es/ProLayout/components/ProHeader/components/ProBackBtn/propsType.js +0 -1
  154. package/es/ProLayout/components/ProHeader/components/index.js +6 -2
  155. package/es/ProLayout/components/ProHeader/index.js +216 -356
  156. package/es/ProLayout/components/ProHeader/utils/index.js +19 -26
  157. package/es/ProLayout/components/TabsManager/components/TabContextMenu.js +92 -85
  158. package/es/ProLayout/components/TabsManager/components/TabItem.js +53 -63
  159. package/es/ProLayout/components/TabsManager/components/TabsContext.js +5 -5
  160. package/es/ProLayout/components/TabsManager/components/TabsHeader.js +42 -52
  161. package/es/ProLayout/components/TabsManager/hooks/useActiveTab.js +8 -9
  162. package/es/ProLayout/components/TabsManager/hooks/useIframeRoute.js +19 -32
  163. package/es/ProLayout/components/TabsManager/hooks/useProLayoutTabs.js +6 -20
  164. package/es/ProLayout/components/TabsManager/hooks/useTabsCache.js +25 -42
  165. package/es/ProLayout/components/TabsManager/hooks/useTabsState.js +320 -350
  166. package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.d.ts +19 -0
  167. package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.js +332 -0
  168. package/es/ProLayout/components/TabsManager/index.js +407 -351
  169. package/es/ProLayout/components/TabsManager/propTypes.d.ts +4 -0
  170. package/es/ProLayout/components/TabsManager/propTypes.js +7 -15
  171. package/es/ProLayout/components/TabsManager/style/index.less +1 -1
  172. package/es/ProLayout/components/TabsManager/utils/historyObserver.d.ts +7 -0
  173. package/es/ProLayout/components/TabsManager/utils/historyObserver.js +65 -0
  174. package/es/ProLayout/components/TabsManager/utils/index.d.ts +15 -2
  175. package/es/ProLayout/components/TabsManager/utils/index.js +156 -159
  176. package/es/ProLayout/components/index.js +8 -3
  177. package/es/ProLayout/index.js +173 -228
  178. package/es/ProLayout/propTypes.d.ts +28 -1
  179. package/es/ProLayout/propTypes.js +12 -52
  180. package/es/ProLayout/utils/index.js +48 -128
  181. package/es/ProSelect/components/AdaptiveTooltip.js +26 -25
  182. package/es/ProSelect/index.js +187 -223
  183. package/es/ProSelect/propsType.js +0 -1
  184. package/es/ProSelect/style/index.less +13 -0
  185. package/es/ProSelect/utils/index.js +100 -146
  186. package/es/ProStep/components/Anchor/index.js +71 -82
  187. package/es/ProStep/components/Item/index.js +49 -56
  188. package/es/ProStep/components/LazyLoad/index.js +23 -29
  189. package/es/ProStep/components/Listener/index.js +20 -33
  190. package/es/ProStep/components/Step/index.js +31 -38
  191. package/es/ProStep/constants.js +4 -1
  192. package/es/ProStep/index.js +166 -153
  193. package/es/ProStep/propsType.js +0 -1
  194. package/es/ProStep/style/index.less +1 -1
  195. package/es/ProStep/utils/index.js +29 -55
  196. package/es/ProStepTab/index.js +83 -138
  197. package/es/ProStepTab/propsType.js +0 -1
  198. package/es/ProTable/components/EditableCell/EditIcon.js +10 -14
  199. package/es/ProTable/components/EditableCell/index.js +37 -71
  200. package/es/ProTable/components/EditableCell/propsType.js +0 -1
  201. package/es/ProTable/components/FormatColumn/index.js +209 -340
  202. package/es/ProTable/components/FormatColumn/propsType.js +0 -1
  203. package/es/ProTable/components/RcTable/components/BaseTable/index.js +35 -39
  204. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/index.js +80 -107
  205. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/index.js +54 -48
  206. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/propsType.js +0 -1
  207. package/es/ProTable/components/RcTable/components/DraggableTable/index.js +47 -54
  208. package/es/ProTable/components/RcTable/index.js +6 -4
  209. package/es/ProTable/components/RenderColumn/index.js +158 -186
  210. package/es/ProTable/components/RenderEmptyText/index.js +12 -21
  211. package/es/ProTable/components/RenderFooter/index.js +15 -15
  212. package/es/ProTable/components/RenderSummary/index.js +33 -50
  213. package/es/ProTable/components/RenderTableHeader/index.js +44 -46
  214. package/es/ProTable/components/RenderTabs/index.js +47 -51
  215. package/es/ProTable/components/TableResizable/index.js +56 -72
  216. package/es/ProTable/components/TooltipTitle/index.js +13 -21
  217. package/es/ProTable/components/index.js +16 -36
  218. package/es/ProTable/hooks/useAntdTable.js +191 -224
  219. package/es/ProTable/index.js +232 -249
  220. package/es/ProTable/propsType.js +0 -1
  221. package/es/ProTable/utils/columnStorage.js +63 -88
  222. package/es/ProTable/utils/index.js +57 -90
  223. package/es/ProTabs/components/Card/index.js +20 -48
  224. package/es/ProTabs/components/index.js +4 -1
  225. package/es/ProTabs/index.js +41 -58
  226. package/es/ProTabs/propType.js +0 -1
  227. package/es/ProThemeTools/component/ProTools/index.js +106 -158
  228. package/es/ProThemeTools/component/index.js +4 -1
  229. package/es/ProThemeTools/context/ThemeContext.js +67 -146
  230. package/es/ProThemeTools/index.js +103 -156
  231. package/es/ProThemeTools/propsType.js +0 -1
  232. package/es/ProThemeTools/utils/index.js +60 -109
  233. package/es/ProTooltip/index.js +132 -168
  234. package/es/ProTooltip/propsType.js +0 -1
  235. package/es/ProTree/components/AdaptiveTooltip.js +15 -17
  236. package/es/ProTree/components/CloseIcon.js +18 -26
  237. package/es/ProTree/components/List.js +28 -47
  238. package/es/ProTree/components/ProTree.js +152 -211
  239. package/es/ProTree/components/ProTreeSelect/index.js +255 -459
  240. package/es/ProTree/components/ProTreeSelect/propsType.js +0 -1
  241. package/es/ProTree/components/SearchTitle.js +23 -42
  242. package/es/ProTree/components/Tree.js +147 -195
  243. package/es/ProTree/components/index.js +10 -5
  244. package/es/ProTree/index.js +12 -16
  245. package/es/ProTree/propsType.js +0 -1
  246. package/es/ProTree/utils.js +46 -118
  247. package/es/ProTreeModal/components/Cascader.js +56 -64
  248. package/es/ProTreeModal/components/CloseIcon.js +18 -26
  249. package/es/ProTreeModal/components/List.js +114 -180
  250. package/es/ProTreeModal/components/SearchTitle.js +15 -18
  251. package/es/ProTreeModal/components/SortableItem.js +29 -58
  252. package/es/ProTreeModal/components/Tree.js +99 -113
  253. package/es/ProTreeModal/components/Trigger.js +87 -121
  254. package/es/ProTreeModal/components/index.js +14 -6
  255. package/es/ProTreeModal/index.js +397 -438
  256. package/es/ProTreeModal/propsType.js +0 -1
  257. package/es/ProTreeModal/utils.js +52 -95
  258. package/es/ProUpload/components/ButtonRender.js +44 -54
  259. package/es/ProUpload/components/DragRender.js +94 -148
  260. package/es/ProUpload/components/DraggableUploadListItem.js +12 -25
  261. package/es/ProUpload/components/Example.js +27 -31
  262. package/es/ProUpload/components/FileItem.js +69 -163
  263. package/es/ProUpload/components/ImageRender.js +134 -170
  264. package/es/ProUpload/index.js +68 -100
  265. package/es/ProUpload/propsType.js +0 -1
  266. package/es/ProUpload/uitls.js +8 -4
  267. package/es/ProUtils/utils/index.js +17 -13
  268. package/es/ProViewer/index.js +154 -175
  269. package/es/ProViewer/propsType.js +0 -5
  270. package/es/ProWaterMark/index.js +9 -16
  271. package/es/ProWaterMark/propsType.js +0 -1
  272. package/es/hooks/useDraggableRow.js +25 -53
  273. package/es/index.js +57 -77
  274. package/es/locale/en_US.js +153 -142
  275. package/es/locale/index.js +23 -36
  276. package/es/locale/zh_CN.js +145 -142
  277. package/es/tokens.js +84 -83
  278. package/es/utils/index.js +24 -51
  279. package/package.json +4 -2
  280. package/es/ProConfigProvider/demo/locale.js +0 -58
@@ -1,8 +1,7 @@
1
- /* eslint-disable func-call-spacing */
2
- /* eslint-disable no-spaced-func */
3
- import { createContext, useMemo, useRef, useCallback, useLayoutEffect, useState } from 'react';
4
- import classNames from 'classnames';
5
- import { useSetState, useToggle, useDeepCompareEffect } from 'ahooks';
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { createContext, useMemo, useRef, useCallback, useLayoutEffect, useState } from "react";
3
+ import classNames from "classnames";
4
+ import { useSetState, useToggle, useDeepCompareEffect } from "ahooks";
6
5
  import { ProWaterMark } from "../index";
7
6
  import { ProCollapse, ProFooter, ProHeader } from "./components";
8
7
  import { Header, Notice, Menu } from "./components/Layout/index";
@@ -11,17 +10,15 @@ import { isTabsMode, validateTabsProps } from "./propTypes";
11
10
  import { useProLayoutTabs } from "./components/TabsManager/hooks/useProLayoutTabs";
12
11
  import { useActiveTab } from "./components/TabsManager/hooks/useActiveTab";
13
12
  import { transformMenus } from "./utils";
14
- import { canOpenAsTab } from "./components/TabsManager/utils";
13
+ import { canOpenAsTab, flattenMenuData } from "./components/TabsManager/utils";
15
14
  import headerBg from "../assets/header_bg.png";
16
-
17
- // 全局上下文
18
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
- export const LayoutContext = /*#__PURE__*/createContext(undefined);
15
+ const LayoutContext = createContext(void 0);
20
16
  const TABS_HEADER_MEASURE_SELECTOR = '[data-pro-layout-tabs-measure="true"]';
21
- const ProLayout = props => {
17
+ const ProLayout = (props) => {
18
+ var _a;
22
19
  const {
23
20
  children,
24
- className = '',
21
+ className = "",
25
22
  pure = false,
26
23
  headerHeight = 64,
27
24
  contentStyle = {},
@@ -30,7 +27,7 @@ const ProLayout = props => {
30
27
  notice: noticeIn,
31
28
  // 修改别名
32
29
  dataSource,
33
- pathPrefix = '',
30
+ pathPrefix = "",
34
31
  target,
35
32
  onCollapsedChange,
36
33
  collapsed: propsCollapsed = false,
@@ -39,108 +36,89 @@ const ProLayout = props => {
39
36
  headerTitleRender,
40
37
  headerContentRender,
41
38
  rightContentRender,
42
- title = '',
39
+ title = "",
43
40
  logo,
44
41
  appsOptions,
45
42
  // Menu组件需要的props
46
- iconfontUrl = '',
43
+ iconfontUrl = "",
47
44
  sideMenuFooterRender,
48
45
  sideMenuHeaderRender,
49
- mode = 'normal',
46
+ mode = "normal",
50
47
  tabs
51
48
  } = props;
52
49
  const isTabsLayout = isTabsMode(props);
53
50
  validateTabsProps(mode, tabs);
54
51
  const tabsManagerRef = useRef(null);
55
-
56
- // Tab Portal 挂载目标及动画状态
57
- const [{
58
- tabsBarEl,
59
- hasTabs,
60
- isIframePure
61
- }, setTabsState] = useSetState({
62
- tabsBarEl: null,
63
- hasTabs: false,
64
- isIframePure: false
65
- });
66
- // 稳定的 ref 回调,避免内联函数每次渲染都触发 setState 导致无限循环
67
- const setTabsBarElRef = useCallback(el => setTabsState({
68
- tabsBarEl: el
69
- }), []);
70
- // TabsManager 会在 layout effect 中调用这两个回调;保持引用稳定,避免父组件每次
71
- // render 都让 layout effect 重新执行并再次 setState,形成无限更新循环。
72
- const handleTabsChange = useCallback(v => setTabsState({
73
- hasTabs: v
74
- }), []);
75
- const handleIframePureChange = useCallback(v => setTabsState({
76
- isIframePure: v
77
- }), []);
52
+ const [{ tabsBarEl, hasTabs, isIframePure }, setTabsState] = useSetState({ tabsBarEl: null, hasTabs: false, isIframePure: false });
53
+ const setTabsBarElRef = useCallback(
54
+ (el) => setTabsState({ tabsBarEl: el }),
55
+ []
56
+ );
57
+ const handleTabsChange = useCallback((v) => setTabsState({ hasTabs: v }), []);
58
+ const handleIframePureChange = useCallback((v) => setTabsState({ isIframePure: v }), []);
78
59
  const noticeElRef = useRef(null);
79
- const setNoticeElRef = useCallback(el => {
60
+ const setNoticeElRef = useCallback((el) => {
80
61
  noticeElRef.current = el;
81
62
  }, []);
82
- const [stickyHeights, setStickyHeights] = useState({
83
- notice: 0,
84
- tabsBar: 0
85
- });
86
- const [{
87
- notice,
88
- menus,
89
- selectedPath
90
- }, setState] = useSetState({
63
+ const [stickyHeights, setStickyHeights] = useState({ notice: 0, tabsBar: 0 });
64
+ const [{ notice, menus, selectedPath }, setState] = useSetState({
91
65
  notice: headerNotice || noticeIn,
92
66
  menus: [],
93
- selectedPath: ''
67
+ selectedPath: ""
94
68
  });
95
69
  useLayoutEffect(() => {
96
70
  const noticeEl = notice && !isIframePure ? noticeElRef.current : null;
97
71
  const visibleTabsBarEl = isTabsLayout && hasTabs && !isIframePure ? tabsBarEl : null;
98
- const visibleTabsHeaderEl = visibleTabsBarEl?.querySelector(TABS_HEADER_MEASURE_SELECTOR);
72
+ const visibleTabsHeaderEl = visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.querySelector(
73
+ TABS_HEADER_MEASURE_SELECTOR
74
+ );
99
75
  let active = true;
100
76
  let animationFrameId;
101
77
  const measureStickyElements = () => {
102
- if (!active) return;
78
+ if (!active)
79
+ return;
103
80
  const nextHeights = {
104
- notice: noticeEl?.getBoundingClientRect().height ?? 0,
105
- tabsBar: visibleTabsHeaderEl?.getBoundingClientRect().height ?? 0
81
+ notice: (noticeEl == null ? void 0 : noticeEl.getBoundingClientRect().height) ?? 0,
82
+ tabsBar: (visibleTabsHeaderEl == null ? void 0 : visibleTabsHeaderEl.getBoundingClientRect().height) ?? 0
106
83
  };
107
- setStickyHeights(currentHeights => currentHeights.notice === nextHeights.notice && currentHeights.tabsBar === nextHeights.tabsBar ? currentHeights : nextHeights);
84
+ setStickyHeights(
85
+ (currentHeights) => currentHeights.notice === nextHeights.notice && currentHeights.tabsBar === nextHeights.tabsBar ? currentHeights : nextHeights
86
+ );
108
87
  };
109
88
  measureStickyElements();
110
- if (typeof window.requestAnimationFrame === 'function') {
89
+ if (typeof window.requestAnimationFrame === "function") {
111
90
  animationFrameId = window.requestAnimationFrame(measureStickyElements);
112
91
  }
113
- const handleTabsTransitionEnd = event => {
114
- if (event.target === visibleTabsBarEl && event.propertyName === 'grid-template-rows') {
92
+ const handleTabsTransitionEnd = (event) => {
93
+ if (event.target === visibleTabsBarEl && event.propertyName === "grid-template-rows") {
115
94
  measureStickyElements();
116
95
  }
117
96
  };
118
- visibleTabsBarEl?.addEventListener('transitionend', handleTabsTransitionEnd);
119
- const observedElements = [noticeEl, visibleTabsHeaderEl].filter(element => element !== null && element !== undefined);
120
- if (observedElements.length === 0 || typeof ResizeObserver === 'undefined') {
97
+ visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.addEventListener("transitionend", handleTabsTransitionEnd);
98
+ const observedElements = [noticeEl, visibleTabsHeaderEl].filter(
99
+ (element) => element !== null && element !== void 0
100
+ );
101
+ if (observedElements.length === 0 || typeof ResizeObserver === "undefined") {
121
102
  return () => {
122
103
  active = false;
123
- if (animationFrameId !== undefined) {
104
+ if (animationFrameId !== void 0) {
124
105
  window.cancelAnimationFrame(animationFrameId);
125
106
  }
126
- visibleTabsBarEl?.removeEventListener('transitionend', handleTabsTransitionEnd);
107
+ visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.removeEventListener("transitionend", handleTabsTransitionEnd);
127
108
  };
128
109
  }
129
110
  const resizeObserver = new ResizeObserver(measureStickyElements);
130
- observedElements.forEach(element => resizeObserver.observe(element));
111
+ observedElements.forEach((element) => resizeObserver.observe(element));
131
112
  return () => {
132
113
  active = false;
133
- if (animationFrameId !== undefined) {
114
+ if (animationFrameId !== void 0) {
134
115
  window.cancelAnimationFrame(animationFrameId);
135
116
  }
136
- visibleTabsBarEl?.removeEventListener('transitionend', handleTabsTransitionEnd);
117
+ visibleTabsBarEl == null ? void 0 : visibleTabsBarEl.removeEventListener("transitionend", handleTabsTransitionEnd);
137
118
  resizeObserver.disconnect();
138
119
  };
139
120
  }, [hasTabs, isIframePure, isTabsLayout, notice, tabsBarEl]);
140
- const [collapsed, {
141
- toggle,
142
- set
143
- }] = useToggle(props.collapsed || false);
121
+ const [collapsed, { toggle, set }] = useToggle(props.collapsed || false);
144
122
  useDeepCompareEffect(() => {
145
123
  set(props.collapsed || false);
146
124
  }, [props.collapsed]);
@@ -149,27 +127,17 @@ const ProLayout = props => {
149
127
  return;
150
128
  }
151
129
  const userData = transformMenus(dataSource, pathPrefix);
152
- // 确保 menus 始终是一个数组
153
- const menuData = Array.isArray(userData) ? userData : userData?.menus || [];
154
- setState({
155
- menus: menuData
156
- });
130
+ const menuData = Array.isArray(userData) ? userData : (userData == null ? void 0 : userData.menus) || [];
131
+ setState({ menus: menuData });
157
132
  }, [dataSource]);
158
133
  const menuDataSource = useMemo(() => {
159
- // menus 已通过 useDeepCompareEffect 填充,直接使用
160
134
  if (Array.isArray(menus) && menus.length > 0) {
161
- return {
162
- menus
163
- };
135
+ return { menus };
164
136
  }
165
- // menus state 尚未填充(初始为 []),直接用 dataSource 原始 menus
166
- // 确保 tabsInstance 第一次创建时就能查到完整菜单数据(含 closable 等属性)
167
- if (!Array.isArray(dataSource) && Array.isArray(dataSource?.menus)) {
137
+ if (!Array.isArray(dataSource) && Array.isArray(dataSource == null ? void 0 : dataSource.menus)) {
168
138
  return dataSource;
169
139
  }
170
- return {
171
- menus: menus || []
172
- };
140
+ return { menus: menus || [] };
173
141
  }, [menus, dataSource]);
174
142
  const enhancedTabsConfig = useMemo(() => {
175
143
  if (!isTabsLayout || !tabs) {
@@ -178,99 +146,80 @@ const ProLayout = props => {
178
146
  return {
179
147
  ...tabs,
180
148
  onTabChange: (activeKey, activeTab, allTabs) => {
149
+ var _a2, _b, _c, _d, _e;
181
150
  if (!allTabs || allTabs.length === 0) {
182
- // 使用一个不可能匹配的路径来清除选中状态,避免 OpenMenu fallback 到 window.location.pathname
183
- setState({
184
- selectedPath: '##EMPTY##'
185
- });
151
+ setState({ selectedPath: "##EMPTY##" });
186
152
  return;
187
153
  }
188
- const targetPath = activeTab?.url || activeTab?.menuItem?.router || activeTab?.menuItem?.redirectUrl || activeTab?.menuItem?.url;
154
+ const menuCodeSource = (_a2 = activeTab == null ? void 0 : activeTab.menuCodeSource) == null ? void 0 : _a2.trim();
155
+ const sourceMenu = menuCodeSource ? flattenMenuData(menuDataSource.menus).find((menu) => menu.code === menuCodeSource) : void 0;
156
+ const sourcePath = (sourceMenu == null ? void 0 : sourceMenu.redirectUrl) || (sourceMenu == null ? void 0 : sourceMenu.url) || (sourceMenu == null ? void 0 : sourceMenu.router);
157
+ const targetPath = sourcePath || (activeTab == null ? void 0 : activeTab.url) || ((_b = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _b.router) || ((_c = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _c.redirectUrl) || ((_d = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _d.url);
189
158
  if (targetPath && targetPath !== selectedPath) {
190
- setState({
191
- selectedPath: targetPath
192
- });
159
+ setState({ selectedPath: targetPath });
193
160
  }
194
- tabs.onTabChange?.(activeKey, activeTab, allTabs);
161
+ (_e = tabs.onTabChange) == null ? void 0 : _e.call(tabs, activeKey, activeTab, allTabs);
195
162
  }
196
163
  };
197
- }, [isTabsLayout, tabs, selectedPath]);
164
+ }, [isTabsLayout, menuDataSource.menus, tabs, selectedPath]);
198
165
  const renderContent = () => {
199
166
  if (!isTabsLayout || !enhancedTabsConfig) {
200
- return /*#__PURE__*/_jsx("div", {
201
- children: children
202
- });
167
+ return /* @__PURE__ */ jsx("div", { children });
203
168
  }
204
- return /*#__PURE__*/_jsx(TabsManager, {
205
- ref: tabsManagerRef,
206
- config: enhancedTabsConfig,
207
- dataSource: menuDataSource,
208
- originalOnMenuClick: onMenuClick,
209
- tabsBarContainer: tabsBarEl,
210
- onTabsChange: handleTabsChange,
211
- onIframePureChange: handleIframePureChange,
212
- children: children
213
- });
169
+ return /* @__PURE__ */ jsx(
170
+ TabsManager,
171
+ {
172
+ ref: tabsManagerRef,
173
+ config: enhancedTabsConfig,
174
+ dataSource: menuDataSource,
175
+ originalOnMenuClick: onMenuClick,
176
+ tabsBarContainer: tabsBarEl,
177
+ onTabsChange: handleTabsChange,
178
+ onIframePureChange: handleIframePureChange,
179
+ children
180
+ }
181
+ );
214
182
  };
215
- const handleMenuClick = useCallback(params => {
216
- // tabs 模式,直接调用原始回调并允许激活
217
- if (!isTabsLayout) {
218
- onMenuClick?.(params);
219
- return true;
220
- }
221
-
222
- // tabs 模式:调用 TabsManager handleMenuClick 来添加标签页
223
- tabsManagerRef.current?.handleMenuClick?.(params);
224
- if (!params.item) {
225
- return true;
226
- }
227
-
228
- // 只有叶子节点(无 children)可入签;有 children 的节点不激活
229
- if (!canOpenAsTab(params.item)) {
230
- return false;
231
- }
232
-
233
- // 可入签节点:检查是否可以添加标签页(检查 max 限制、_blank 等)
234
- const canAdd = tabsManagerRef.current?.canAddTab?.(params.item);
235
- if (!canAdd) {
236
- // 超过限制,返回 false 阻止菜单激活
183
+ const handleMenuClick = useCallback(
184
+ (params) => {
185
+ var _a2, _b, _c, _d, _e, _f, _g;
186
+ if (!isTabsLayout) {
187
+ onMenuClick == null ? void 0 : onMenuClick(params);
188
+ return true;
189
+ }
190
+ (_b = (_a2 = tabsManagerRef.current) == null ? void 0 : _a2.handleMenuClick) == null ? void 0 : _b.call(_a2, params);
191
+ if (!params.item) {
192
+ return true;
193
+ }
194
+ if (!canOpenAsTab(params.item)) {
195
+ return false;
196
+ }
197
+ const canAdd = (_d = (_c = tabsManagerRef.current) == null ? void 0 : _c.canAddTab) == null ? void 0 : _d.call(_c, params.item);
198
+ if (!canAdd) {
199
+ return false;
200
+ }
201
+ const targetPath = ((_e = params.item) == null ? void 0 : _e.redirectUrl) || ((_f = params.item) == null ? void 0 : _f.url) || ((_g = params.item) == null ? void 0 : _g.router);
202
+ if (targetPath && targetPath !== selectedPath) {
203
+ setState({ selectedPath: targetPath });
204
+ }
237
205
  return false;
238
- }
239
-
240
- // 可以添加标签页,设置选中路径(激活菜单)
241
- const targetPath = params.item?.redirectUrl || params.item?.url || params.item?.router;
242
- if (targetPath && targetPath !== selectedPath) {
243
- setState({
244
- selectedPath: targetPath
245
- });
246
- }
247
- // tabs 模式下由 Tab 管理内容,阻止菜单默认 Link 跳转
248
- return false;
249
- }, [isTabsLayout, onMenuClick, selectedPath]);
250
-
251
- /**
252
- * 关闭提示框
253
- */
206
+ },
207
+ [isTabsLayout, onMenuClick, selectedPath]
208
+ );
254
209
  const onCancelNotice = () => {
255
- setState({
256
- notice: null
257
- });
210
+ setState({ notice: null });
258
211
  };
259
212
  const contentCls = classNames({
260
- 'pro-layout-row': true,
261
- 'pro-layout-row-has-notice': notice,
262
- 'pro-layout-row-pure': typeof pure === 'boolean' && pure,
263
- 'pro-layout-row-top-pure': typeof pure !== 'boolean' && pure.topMenu,
264
- 'pro-layout-row-left-pure': typeof pure !== 'boolean' && pure.leftMenu
213
+ "pro-layout-row": true,
214
+ "pro-layout-row-has-notice": notice,
215
+ "pro-layout-row-pure": typeof pure === "boolean" && pure,
216
+ "pro-layout-row-top-pure": typeof pure !== "boolean" && pure.topMenu,
217
+ "pro-layout-row-left-pure": typeof pure !== "boolean" && pure.leftMenu
265
218
  });
266
219
  const noticeHeight = stickyHeights.notice;
267
-
268
- // pure 模式下 Header 不渲染,有效头部高度为 0
269
- const isPureHeader = typeof pure === 'boolean' ? pure : !!pure?.topMenu;
220
+ const isPureHeader = typeof pure === "boolean" ? pure : !!(pure == null ? void 0 : pure.topMenu);
270
221
  const effectiveHeaderHeight = isPureHeader ? 0 : headerHeight;
271
222
  const contentStickyTop = effectiveHeaderHeight + noticeHeight + (hasTabs ? stickyHeights.tabsBar : 0);
272
-
273
- // 为Header组件创建专门的props对象
274
223
  const headerProps = {
275
224
  headerHeight,
276
225
  pure,
@@ -281,21 +230,15 @@ const ProLayout = props => {
281
230
  logo,
282
231
  appsOptions
283
232
  };
284
-
285
- // 为Notice组件创建专门的props对象
286
233
  const noticeProps = {
287
234
  headerHeight: effectiveHeaderHeight,
288
235
  notice,
289
236
  onCancel: onCancelNotice,
290
237
  noticeRef: setNoticeElRef
291
238
  };
292
-
293
- // 为Menu组件创建专门的props对象
294
239
  const menuProps = {
295
240
  headerHeight,
296
- dataSource: Array.isArray(menus) ? {
297
- menus
298
- } : menus,
241
+ dataSource: Array.isArray(menus) ? { menus } : menus,
299
242
  iconfontUrl,
300
243
  collapsed,
301
244
  notice,
@@ -309,72 +252,74 @@ const ProLayout = props => {
309
252
  onMenuClick: handleMenuClick,
310
253
  appsOptions
311
254
  };
312
- const layoutDom = isIframePure ?
313
- /*#__PURE__*/
314
- /* iframe pure 模式:仅渲染 TabsManager 内容,不渲染 Header/Notice/Menu/tabsBar */
315
- _jsx("div", {
316
- className: classNames({
317
- 'pro-layout': true,
318
- 'pro-layout-light': true,
319
- 'pro-layout-iframe-pure': true,
320
- [`${className}`]: className
321
- }),
322
- children: renderContent()
323
- }) : /*#__PURE__*/_jsxs("div", {
324
- className: classNames({
325
- 'pro-layout': true,
326
- 'pro-layout-light': true,
327
- 'pro-layout-pure': typeof pure === 'boolean' ? pure : pure?.topMenu || pure?.leftMenu,
328
- [`${className}`]: className
329
- }),
330
- style: {
331
- '--header-bg-image': `url(${headerBg})`,
332
- '--pro-layout-header-height': `${effectiveHeaderHeight}px`,
333
- '--pro-layout-notice-height': `${noticeHeight}px`,
334
- '--pro-layout-content-sticky-top': `${contentStickyTop}px`
335
- },
336
- children: [/*#__PURE__*/_jsx(Header, {
337
- ...headerProps
338
- }), /*#__PURE__*/_jsx(Notice, {
339
- ...noticeProps
340
- }), /*#__PURE__*/_jsx("div", {
341
- ref: setTabsBarElRef,
342
- className: `pro-layout-tabs-bar-wrapper${hasTabs ? ' tabs-visible' : ''}${collapsed ? ' tabs-menu-open' : ''}`,
343
- style: {
344
- marginTop: effectiveHeaderHeight + noticeHeight
345
- }
346
- }), /*#__PURE__*/_jsxs("div", {
347
- className: contentCls,
348
- children: [/*#__PURE__*/_jsx(Menu, {
349
- ...menuProps
350
- }), /*#__PURE__*/_jsx("div", {
351
- className: `pro-layout-content${hasTabs ? ' pro-layout-content-has-tabs' : ''}`,
352
- style: {
353
- ...contentStyle,
354
- marginTop: 0
355
- },
255
+ const layoutDom = isIframePure ? (
256
+ /* iframe pure 模式:仅渲染 TabsManager 内容,不渲染 Header/Notice/Menu/tabsBar */
257
+ /* @__PURE__ */ jsx(
258
+ "div",
259
+ {
260
+ className: classNames({
261
+ "pro-layout": true,
262
+ "pro-layout-light": true,
263
+ "pro-layout-iframe-pure": true,
264
+ [`${className}`]: className
265
+ }),
356
266
  children: renderContent()
357
- })]
358
- })]
359
- });
360
- return /*#__PURE__*/_jsx(LayoutContext.Provider, {
361
- value: {
362
- selectedPath,
363
- target,
364
- onSelected: setState
365
- },
366
- children: !Object.keys(waterMarkProps)?.length ? layoutDom : /*#__PURE__*/_jsx(ProWaterMark, {
367
- ...waterMarkProps,
368
- children: layoutDom
369
- })
370
- });
267
+ }
268
+ )
269
+ ) : /* @__PURE__ */ jsxs(
270
+ "div",
271
+ {
272
+ className: classNames({
273
+ "pro-layout": true,
274
+ "pro-layout-light": true,
275
+ "pro-layout-pure": typeof pure === "boolean" ? pure : (pure == null ? void 0 : pure.topMenu) || (pure == null ? void 0 : pure.leftMenu),
276
+ [`${className}`]: className
277
+ }),
278
+ style: {
279
+ "--header-bg-image": `url(${headerBg})`,
280
+ "--pro-layout-header-height": `${effectiveHeaderHeight}px`,
281
+ "--pro-layout-notice-height": `${noticeHeight}px`,
282
+ "--pro-layout-content-sticky-top": `${contentStickyTop}px`
283
+ },
284
+ children: [
285
+ /* @__PURE__ */ jsx(Header, { ...headerProps }),
286
+ /* @__PURE__ */ jsx(Notice, { ...noticeProps }),
287
+ /* @__PURE__ */ jsx(
288
+ "div",
289
+ {
290
+ ref: setTabsBarElRef,
291
+ className: `pro-layout-tabs-bar-wrapper${hasTabs ? " tabs-visible" : ""}${collapsed ? " tabs-menu-open" : ""}`,
292
+ style: { marginTop: effectiveHeaderHeight + noticeHeight }
293
+ }
294
+ ),
295
+ /* @__PURE__ */ jsxs("div", { className: contentCls, children: [
296
+ /* @__PURE__ */ jsx(Menu, { ...menuProps }),
297
+ /* @__PURE__ */ jsx(
298
+ "div",
299
+ {
300
+ className: `pro-layout-content${hasTabs ? " pro-layout-content-has-tabs" : ""}`,
301
+ style: {
302
+ ...contentStyle,
303
+ marginTop: 0
304
+ },
305
+ children: renderContent()
306
+ }
307
+ )
308
+ ] })
309
+ ]
310
+ }
311
+ );
312
+ return /* @__PURE__ */ jsx(LayoutContext.Provider, { value: { selectedPath, target, onSelected: setState }, children: !((_a = Object.keys(waterMarkProps)) == null ? void 0 : _a.length) ? layoutDom : /* @__PURE__ */ jsx(ProWaterMark, { ...waterMarkProps, children: layoutDom }) });
371
313
  };
372
314
  ProLayout.ProCollapse = ProCollapse;
373
315
  ProLayout.ProFooter = ProFooter;
374
316
  ProLayout.ProHeader = ProHeader;
375
317
  ProLayout.useProLayoutTabs = useProLayoutTabs;
376
318
  ProLayout.useActiveTab = useActiveTab;
377
-
378
- // 同时导出Hook供直接使用
379
- export { useProLayoutTabs, useActiveTab };
380
- export default ProLayout;
319
+ var ProLayout_default = ProLayout;
320
+ export {
321
+ LayoutContext,
322
+ ProLayout_default as default,
323
+ useActiveTab,
324
+ useProLayoutTabs
325
+ };
@@ -321,7 +321,7 @@ export interface TabItem {
321
321
  */
322
322
  title: string;
323
323
  /**
324
- * @description 标签关联路由
324
+ * @description 标签关联路由。URL 同步模式下保存当前完整的 pathname + search + hash
325
325
  */
326
326
  url?: string;
327
327
  /**
@@ -349,6 +349,10 @@ export interface TabItem {
349
349
  * @description 标签页关联键;用于业务详情页复用已有标签页
350
350
  */
351
351
  relationKey?: string | number;
352
+ /**
353
+ * @description 最初打开当前业务标签链路的左侧菜单 code;仅用于激活来源菜单
354
+ */
355
+ menuCodeSource?: string;
352
356
  }
353
357
  export interface TabsState {
354
358
  tabsList: TabItem[];
@@ -358,6 +362,13 @@ export interface TabsState {
358
362
  activeComponent?: string;
359
363
  }
360
364
  export type TabsStorageStrategy = 'localStorage' | 'sessionStorage';
365
+ export interface TabsUrlSyncConfig {
366
+ /**
367
+ * @description 切换标签页时写入浏览器历史的方式
368
+ * @default 'replace'
369
+ */
370
+ history?: 'replace' | 'push';
371
+ }
361
372
  /**
362
373
  * @description 添加标签页的业务参数
363
374
  */
@@ -370,6 +381,11 @@ export interface AddTabParams {
370
381
  * @description 标签页显示名称
371
382
  */
372
383
  name: string;
384
+ /**
385
+ * @description 应用内完整 URL。URL 同步模式下作为页签业务身份
386
+ * @example '/wjs/workbench/workbench/Record?recordTab=quote'
387
+ */
388
+ url?: string;
373
389
  /**
374
390
  * @description 额外的业务数据
375
391
  */
@@ -378,6 +394,10 @@ export interface AddTabParams {
378
394
  * @description 标签页关联键;相同关联键的业务详情重复打开时复用已有标签页
379
395
  */
380
396
  relationKey?: string | number;
397
+ /**
398
+ * @description 最初打开当前业务标签链路的左侧菜单 code;仅用于激活来源菜单
399
+ */
400
+ menuCodeSource?: string;
381
401
  }
382
402
  /**
383
403
  * @description 添加标签页的选项
@@ -519,6 +539,13 @@ export interface TabsConfig {
519
539
  max?: number;
520
540
  storage?: TabsStorageStrategy;
521
541
  cacheKey?: string;
542
+ /**
543
+ * @description 是否将活动页签与浏览器 URL 双向同步。默认不同步,保持现有行为
544
+ * - true: 开启同步,切换页签时使用 replace
545
+ * - object: 开启同步并自定义历史写入方式
546
+ * @default false
547
+ */
548
+ urlSync?: boolean | TabsUrlSyncConfig;
522
549
  /**
523
550
  * @description 普通初始标签页。无缓存时每次 ProLayout 挂载只初始化一次;关闭全部后本次挂载期间不会重新添加
524
551
  */