@zat-design/sisyphus-react 4.5.10-beta.1 → 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 (266) hide show
  1. package/es/FormsProvider/index.js +14 -21
  2. package/es/ProAction/components/CheckModalContent/index.js +12 -26
  3. package/es/ProAction/index.js +79 -83
  4. package/es/ProAction/propsType.js +0 -1
  5. package/es/ProConfigProvider/index.js +63 -110
  6. package/es/ProConfigProvider/propsType.js +0 -1
  7. package/es/ProDownload/index.js +55 -65
  8. package/es/ProDownload/propsType.js +0 -1
  9. package/es/ProDownload/utils.js +61 -95
  10. package/es/ProDrawerForm/components/ProDrawer/index.js +83 -113
  11. package/es/ProDrawerForm/components/ProModal/index.js +77 -108
  12. package/es/ProDrawerForm/components/index.js +6 -2
  13. package/es/ProDrawerForm/hooks/useConfirmClose.js +20 -39
  14. package/es/ProDrawerForm/index.js +29 -38
  15. package/es/ProDrawerForm/propsType.js +0 -1
  16. package/es/ProDrawerForm/utils/index.js +18 -36
  17. package/es/ProEditLabel/components/RenderProForm.js +45 -49
  18. package/es/ProEditLabel/index.js +126 -163
  19. package/es/ProEditLabel/propsType.js +0 -1
  20. package/es/ProEditLabel/utils/index.js +5 -8
  21. package/es/ProEditTable/components/ActionButton/index.js +111 -119
  22. package/es/ProEditTable/components/RcTable/BaseTable.js +38 -51
  23. package/es/ProEditTable/components/RcTable/DraggableTable.js +97 -129
  24. package/es/ProEditTable/components/RcTable/index.js +6 -4
  25. package/es/ProEditTable/components/RenderField/ListChangedWrapper.js +77 -95
  26. package/es/ProEditTable/components/RenderField/index.js +490 -587
  27. package/es/ProEditTable/components/RenderField/propsType.js +0 -1
  28. package/es/ProEditTable/components/RenderField/tools.js +115 -112
  29. package/es/ProEditTable/components/RenderToolbar/index.js +47 -73
  30. package/es/ProEditTable/components/Summary/index.js +38 -64
  31. package/es/ProEditTable/components/Validator/index.js +46 -46
  32. package/es/ProEditTable/components/index.js +12 -5
  33. package/es/ProEditTable/index.js +456 -378
  34. package/es/ProEditTable/propsType.js +0 -1
  35. package/es/ProEditTable/utils/config.js +60 -122
  36. package/es/ProEditTable/utils/diffOriginal.js +45 -82
  37. package/es/ProEditTable/utils/getDefaultProps.js +19 -24
  38. package/es/ProEditTable/utils/index.js +150 -236
  39. package/es/ProEditTable/utils/tools.js +149 -286
  40. package/es/ProEditTable/utils/transform.js +25 -30
  41. package/es/ProEditTable/utils/useEditTableError.js +30 -43
  42. package/es/ProEditTable/utils/useShouldUpdateForTable.js +42 -72
  43. package/es/ProEditTable/utils/validateAll.js +87 -154
  44. package/es/ProEnum/components/Group.js +38 -30
  45. package/es/ProEnum/components/Tag.js +22 -26
  46. package/es/ProEnum/hooks/useEnum.js +48 -116
  47. package/es/ProEnum/hooks/useEnumRequest.js +128 -179
  48. package/es/ProEnum/hooks/useFrequentEnumRequest.js +40 -48
  49. package/es/ProEnum/index.js +162 -172
  50. package/es/ProEnum/propsType.js +0 -1
  51. package/es/ProEnum/utils/eventCenter.js +10 -12
  52. package/es/ProEnum/utils/frequentEnum.js +35 -92
  53. package/es/ProEnum/utils/getEnum.js +32 -90
  54. package/es/ProEnum/utils/getEnumLabel.js +44 -49
  55. package/es/ProEnum/utils/index.js +93 -207
  56. package/es/ProForm/components/Container.js +13 -28
  57. package/es/ProForm/components/FormFooter/index.js +36 -44
  58. package/es/ProForm/components/FormFooter/propsType.js +0 -1
  59. package/es/ProForm/components/base/Checkbox/index.js +32 -59
  60. package/es/ProForm/components/base/DatePicker/index.js +49 -71
  61. package/es/ProForm/components/base/Input/index.js +63 -97
  62. package/es/ProForm/components/base/Input/propsType.js +0 -1
  63. package/es/ProForm/components/base/InputNumber/index.js +118 -172
  64. package/es/ProForm/components/base/Radio/index.js +39 -52
  65. package/es/ProForm/components/base/RangePicker/index.js +109 -127
  66. package/es/ProForm/components/base/RangePicker/useDateRange.js +20 -17
  67. package/es/ProForm/components/base/Select/index.js +63 -89
  68. package/es/ProForm/components/base/Switch/index.js +27 -35
  69. package/es/ProForm/components/base/SwitchCheckbox/index.js +36 -54
  70. package/es/ProForm/components/base/TextArea/index.js +30 -41
  71. package/es/ProForm/components/base/TimePicker/index.js +27 -37
  72. package/es/ProForm/components/combination/Container/index.js +37 -47
  73. package/es/ProForm/components/combination/Container/propsType.js +0 -1
  74. package/es/ProForm/components/combination/FormList/components/ActionButton.js +165 -237
  75. package/es/ProForm/components/combination/FormList/components/BlockFields.js +98 -103
  76. package/es/ProForm/components/combination/FormList/components/Empty.js +27 -54
  77. package/es/ProForm/components/combination/FormList/components/LineFields.js +57 -54
  78. package/es/ProForm/components/combination/FormList/components/ToolbarButton.js +61 -109
  79. package/es/ProForm/components/combination/FormList/index.js +151 -161
  80. package/es/ProForm/components/combination/FormList/propsType.js +0 -1
  81. package/es/ProForm/components/combination/FormList/utils.js +22 -38
  82. package/es/ProForm/components/combination/Group/component/AddonWrapper/index.js +12 -28
  83. package/es/ProForm/components/combination/Group/component/ComRender.js +50 -111
  84. package/es/ProForm/components/combination/Group/component/FlexibleGroup.js +105 -206
  85. package/es/ProForm/components/combination/Group/hooks/index.js +68 -128
  86. package/es/ProForm/components/combination/Group/index.js +87 -126
  87. package/es/ProForm/components/combination/Group/propsType.js +0 -1
  88. package/es/ProForm/components/combination/Group/utils/index.js +124 -239
  89. package/es/ProForm/components/combination/ProCascader/index.js +156 -199
  90. package/es/ProForm/components/combination/ProCascader/propsType.js +0 -1
  91. package/es/ProForm/components/combination/ProCascader/utils/index.js +12 -21
  92. package/es/ProForm/components/combination/ProModalSelect/hooks/useRequestList.js +63 -75
  93. package/es/ProForm/components/combination/ProModalSelect/index.js +290 -348
  94. package/es/ProForm/components/combination/ProModalSelect/propsType.js +0 -1
  95. package/es/ProForm/components/combination/ProModalSelect/utils/index.js +32 -39
  96. package/es/ProForm/components/combination/ProNumberRange/index.js +100 -156
  97. package/es/ProForm/components/combination/ProNumberRange/propsType.js +0 -1
  98. package/es/ProForm/components/combination/ProRangeLimit/index.js +104 -115
  99. package/es/ProForm/components/combination/ProRangeLimit/propsType.js +0 -1
  100. package/es/ProForm/components/combination/ProTimeLimit/hooks/useControlled.js +16 -16
  101. package/es/ProForm/components/combination/ProTimeLimit/index.js +75 -109
  102. package/es/ProForm/components/index.js +56 -34
  103. package/es/ProForm/components/render/ChangedWrapper.js +85 -94
  104. package/es/ProForm/components/render/ConfirmWrapper.js +27 -39
  105. package/es/ProForm/components/render/CustomComponentViewWrapper.js +65 -82
  106. package/es/ProForm/components/render/Render.js +223 -329
  107. package/es/ProForm/components/render/RenderFields.js +76 -113
  108. package/es/ProForm/components/render/propsType.js +0 -1
  109. package/es/ProForm/hooks/useControlled.js +8 -10
  110. package/es/ProForm/hooks/useDeepCompareMemo.js +11 -11
  111. package/es/ProForm/hooks/useFieldProps.js +8 -4
  112. package/es/ProForm/hooks/useForm.js +50 -110
  113. package/es/ProForm/hooks/useRules.js +17 -33
  114. package/es/ProForm/hooks/useShouldUpdate.js +77 -152
  115. package/es/ProForm/hooks/useWatch.js +58 -129
  116. package/es/ProForm/index.js +157 -194
  117. package/es/ProForm/propsType.js +15 -7
  118. package/es/ProForm/utils/buildFormItemProps.js +51 -58
  119. package/es/ProForm/utils/diffOriginal.js +43 -73
  120. package/es/ProForm/utils/getDefaultProps.js +18 -24
  121. package/es/ProForm/utils/index.js +159 -234
  122. package/es/ProForm/utils/processDependencies.js +21 -60
  123. package/es/ProForm/utils/reactiveValues.js +20 -34
  124. package/es/ProForm/utils/rulesCreator.js +42 -40
  125. package/es/ProForm/utils/transformNames.js +10 -13
  126. package/es/ProForm/utils/transformValue.js +16 -29
  127. package/es/ProForm/utils/valueType.js +96 -178
  128. package/es/ProIcon/config/index.js +340 -274
  129. package/es/ProIcon/index.js +135 -209
  130. package/es/ProIcon/propsTypes.js +0 -1
  131. package/es/ProIcon/utils/index.js +24 -39
  132. package/es/ProLayout/components/Layout/Header/index.js +108 -141
  133. package/es/ProLayout/components/Layout/Menu/FoldMenu/index.js +134 -190
  134. package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +111 -137
  135. package/es/ProLayout/components/Layout/Menu/OpenMenu/propsType.js +0 -1
  136. package/es/ProLayout/components/Layout/Menu/SideMenu/index.js +23 -31
  137. package/es/ProLayout/components/Layout/Menu/index.js +92 -89
  138. package/es/ProLayout/components/Layout/Notice/index.js +13 -27
  139. package/es/ProLayout/components/Layout/index.js +8 -3
  140. package/es/ProLayout/components/ProCollapse/PropTypes.js +0 -1
  141. package/es/ProLayout/components/ProCollapse/index.js +89 -111
  142. package/es/ProLayout/components/ProFooter/PropTypes.js +0 -1
  143. package/es/ProLayout/components/ProFooter/index.js +27 -25
  144. package/es/ProLayout/components/ProHeader/PropTypes.js +0 -1
  145. package/es/ProLayout/components/ProHeader/components/Copy/index.js +23 -21
  146. package/es/ProLayout/components/ProHeader/components/Describe/index.js +67 -86
  147. package/es/ProLayout/components/ProHeader/components/ProBackBtn/index.js +18 -21
  148. package/es/ProLayout/components/ProHeader/components/ProBackBtn/propsType.js +0 -1
  149. package/es/ProLayout/components/ProHeader/components/index.js +6 -2
  150. package/es/ProLayout/components/ProHeader/index.js +216 -356
  151. package/es/ProLayout/components/ProHeader/utils/index.js +19 -26
  152. package/es/ProLayout/components/TabsManager/components/TabContextMenu.js +92 -85
  153. package/es/ProLayout/components/TabsManager/components/TabItem.js +53 -64
  154. package/es/ProLayout/components/TabsManager/components/TabsContext.js +5 -5
  155. package/es/ProLayout/components/TabsManager/components/TabsHeader.js +42 -52
  156. package/es/ProLayout/components/TabsManager/hooks/useActiveTab.js +8 -9
  157. package/es/ProLayout/components/TabsManager/hooks/useIframeRoute.js +19 -32
  158. package/es/ProLayout/components/TabsManager/hooks/useProLayoutTabs.js +6 -20
  159. package/es/ProLayout/components/TabsManager/hooks/useTabsCache.js +25 -42
  160. package/es/ProLayout/components/TabsManager/hooks/useTabsState.js +290 -408
  161. package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.js +132 -95
  162. package/es/ProLayout/components/TabsManager/index.js +406 -390
  163. package/es/ProLayout/components/TabsManager/propTypes.js +7 -15
  164. package/es/ProLayout/components/TabsManager/utils/historyObserver.js +26 -23
  165. package/es/ProLayout/components/TabsManager/utils/index.js +127 -184
  166. package/es/ProLayout/components/index.js +8 -3
  167. package/es/ProLayout/index.js +171 -229
  168. package/es/ProLayout/propTypes.js +12 -52
  169. package/es/ProLayout/utils/index.js +48 -128
  170. package/es/ProSelect/components/AdaptiveTooltip.js +26 -25
  171. package/es/ProSelect/index.js +184 -229
  172. package/es/ProSelect/propsType.js +0 -1
  173. package/es/ProSelect/utils/index.js +100 -146
  174. package/es/ProStep/components/Anchor/index.js +71 -82
  175. package/es/ProStep/components/Item/index.js +49 -56
  176. package/es/ProStep/components/LazyLoad/index.js +23 -29
  177. package/es/ProStep/components/Listener/index.js +20 -33
  178. package/es/ProStep/components/Step/index.js +31 -38
  179. package/es/ProStep/constants.js +4 -1
  180. package/es/ProStep/index.js +166 -153
  181. package/es/ProStep/propsType.js +0 -1
  182. package/es/ProStep/utils/index.js +29 -55
  183. package/es/ProStepTab/index.js +83 -138
  184. package/es/ProStepTab/propsType.js +0 -1
  185. package/es/ProTable/components/EditableCell/EditIcon.js +10 -14
  186. package/es/ProTable/components/EditableCell/index.js +37 -71
  187. package/es/ProTable/components/EditableCell/propsType.js +0 -1
  188. package/es/ProTable/components/FormatColumn/index.js +209 -340
  189. package/es/ProTable/components/FormatColumn/propsType.js +0 -1
  190. package/es/ProTable/components/RcTable/components/BaseTable/index.js +35 -39
  191. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/index.js +80 -107
  192. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/index.js +54 -48
  193. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/propsType.js +0 -1
  194. package/es/ProTable/components/RcTable/components/DraggableTable/index.js +47 -54
  195. package/es/ProTable/components/RcTable/index.js +6 -4
  196. package/es/ProTable/components/RenderColumn/index.js +158 -186
  197. package/es/ProTable/components/RenderEmptyText/index.js +12 -21
  198. package/es/ProTable/components/RenderFooter/index.js +15 -15
  199. package/es/ProTable/components/RenderSummary/index.js +33 -50
  200. package/es/ProTable/components/RenderTableHeader/index.js +44 -46
  201. package/es/ProTable/components/RenderTabs/index.js +47 -51
  202. package/es/ProTable/components/TableResizable/index.js +56 -72
  203. package/es/ProTable/components/TooltipTitle/index.js +13 -21
  204. package/es/ProTable/components/index.js +16 -36
  205. package/es/ProTable/hooks/useAntdTable.js +185 -219
  206. package/es/ProTable/index.js +232 -249
  207. package/es/ProTable/propsType.js +0 -1
  208. package/es/ProTable/utils/columnStorage.js +63 -88
  209. package/es/ProTable/utils/index.js +57 -90
  210. package/es/ProTabs/components/Card/index.js +20 -48
  211. package/es/ProTabs/components/index.js +4 -1
  212. package/es/ProTabs/index.js +39 -56
  213. package/es/ProTabs/propType.js +0 -1
  214. package/es/ProThemeTools/component/ProTools/index.js +106 -158
  215. package/es/ProThemeTools/component/index.js +4 -1
  216. package/es/ProThemeTools/context/ThemeContext.js +67 -146
  217. package/es/ProThemeTools/index.js +103 -156
  218. package/es/ProThemeTools/propsType.js +0 -1
  219. package/es/ProThemeTools/utils/index.js +60 -109
  220. package/es/ProTooltip/index.js +132 -165
  221. package/es/ProTooltip/propsType.js +0 -1
  222. package/es/ProTree/components/AdaptiveTooltip.js +15 -17
  223. package/es/ProTree/components/CloseIcon.js +18 -26
  224. package/es/ProTree/components/List.js +28 -47
  225. package/es/ProTree/components/ProTree.js +152 -211
  226. package/es/ProTree/components/ProTreeSelect/index.js +254 -458
  227. package/es/ProTree/components/ProTreeSelect/propsType.js +0 -1
  228. package/es/ProTree/components/SearchTitle.js +23 -42
  229. package/es/ProTree/components/Tree.js +147 -195
  230. package/es/ProTree/components/index.js +10 -5
  231. package/es/ProTree/index.js +12 -16
  232. package/es/ProTree/propsType.js +0 -1
  233. package/es/ProTree/utils.js +46 -118
  234. package/es/ProTreeModal/components/Cascader.js +56 -64
  235. package/es/ProTreeModal/components/CloseIcon.js +18 -26
  236. package/es/ProTreeModal/components/List.js +114 -180
  237. package/es/ProTreeModal/components/SearchTitle.js +15 -18
  238. package/es/ProTreeModal/components/SortableItem.js +29 -58
  239. package/es/ProTreeModal/components/Tree.js +99 -113
  240. package/es/ProTreeModal/components/Trigger.js +87 -121
  241. package/es/ProTreeModal/components/index.js +14 -6
  242. package/es/ProTreeModal/index.js +397 -435
  243. package/es/ProTreeModal/propsType.js +0 -1
  244. package/es/ProTreeModal/utils.js +52 -95
  245. package/es/ProUpload/components/ButtonRender.js +44 -54
  246. package/es/ProUpload/components/DragRender.js +94 -134
  247. package/es/ProUpload/components/DraggableUploadListItem.js +12 -25
  248. package/es/ProUpload/components/Example.js +27 -31
  249. package/es/ProUpload/components/FileItem.js +69 -163
  250. package/es/ProUpload/components/ImageRender.js +134 -170
  251. package/es/ProUpload/index.js +68 -100
  252. package/es/ProUpload/propsType.js +0 -1
  253. package/es/ProUpload/uitls.js +8 -4
  254. package/es/ProUtils/utils/index.js +17 -13
  255. package/es/ProViewer/index.js +154 -175
  256. package/es/ProViewer/propsType.js +0 -5
  257. package/es/ProWaterMark/index.js +9 -16
  258. package/es/ProWaterMark/propsType.js +0 -1
  259. package/es/hooks/useDraggableRow.js +25 -53
  260. package/es/index.js +57 -77
  261. package/es/locale/en_US.js +153 -142
  262. package/es/locale/index.js +23 -36
  263. package/es/locale/zh_CN.js +145 -142
  264. package/es/tokens.js +84 -83
  265. package/es/utils/index.js +24 -51
  266. package/package.json +4 -3
@@ -1,73 +1,82 @@
1
- import { createContext, useContext, useEffect, useRef, useState } from 'react';
2
- import * as ReactRouterDom from 'react-router-dom';
3
- import { canOpenAsTab, flattenMenuData, getCurrentTabUrl, getMenuRoute, getTabUrlPathname, normalizeTabUrl } from "../utils";
4
- import { subscribeHistoryLocation } from "../utils/historyObserver";
5
- const getOptionalRouterContext = exportName => {
1
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
2
+ import * as ReactRouterDom from "react-router-dom";
3
+ import {
4
+ canOpenAsTab,
5
+ flattenMenuData,
6
+ getCurrentTabUrl,
7
+ getMenuRoute,
8
+ getTabUrlPathname,
9
+ normalizeTabUrl
10
+ } from "../utils";
11
+ import {
12
+ subscribeHistoryLocation
13
+ } from "../utils/historyObserver";
14
+ const getOptionalRouterContext = (exportName) => {
6
15
  const descriptor = Object.getOwnPropertyDescriptor(ReactRouterDom, exportName);
7
- return descriptor ? Reflect.get(ReactRouterDom, exportName) : undefined;
16
+ return descriptor ? Reflect.get(ReactRouterDom, exportName) : void 0;
8
17
  };
9
- const OptionalNavigationContext = getOptionalRouterContext('UNSAFE_NavigationContext') || /*#__PURE__*/createContext(null);
10
-
11
- // Data Router 从 react-router-dom 6.4 起提供;保留 6.0-6.3 peer 兼容。
12
- const OptionalDataRouterContext = getOptionalRouterContext('UNSAFE_DataRouterContext') || /*#__PURE__*/createContext(null);
18
+ const OptionalNavigationContext = getOptionalRouterContext("UNSAFE_NavigationContext") || createContext(null);
19
+ const OptionalDataRouterContext = getOptionalRouterContext("UNSAFE_DataRouterContext") || createContext(null);
13
20
  const getDataRouterUrl = (url, basename) => {
14
- if (!basename || basename === '/') return url;
21
+ if (!basename || basename === "/")
22
+ return url;
15
23
  const pathname = getTabUrlPathname(url);
16
- if (!pathname) return url;
17
- const normalizedBasename = `/${basename.replace(/^\/+|\/+$/g, '')}`;
24
+ if (!pathname)
25
+ return url;
26
+ const normalizedBasename = `/${basename.replace(/^\/+|\/+$/g, "")}`;
18
27
  const lowerPathname = pathname.toLowerCase();
19
28
  const lowerBasename = normalizedBasename.toLowerCase();
20
29
  const suffix = url.slice(pathname.length);
21
- if (lowerPathname === lowerBasename) return `/${suffix}`;
30
+ if (lowerPathname === lowerBasename)
31
+ return `/${suffix}`;
22
32
  if (lowerPathname.startsWith(`${lowerBasename}/`)) {
23
33
  return `${pathname.slice(normalizedBasename.length)}${suffix}`;
24
34
  }
25
35
  return url;
26
36
  };
27
37
  const isCurrentDataRouterNavigation = (currentUrl, dataRouterContext) => {
28
- const navigationLocation = dataRouterContext?.router.state?.navigation?.location;
29
- if (!navigationLocation) return false;
30
- const navigationUrl = `${navigationLocation.pathname}${navigationLocation.search ?? ''}${navigationLocation.hash ?? ''}`;
31
- return navigationUrl === currentUrl || navigationUrl === getDataRouterUrl(currentUrl, dataRouterContext?.basename);
38
+ var _a, _b;
39
+ const navigationLocation = (_b = (_a = dataRouterContext == null ? void 0 : dataRouterContext.router.state) == null ? void 0 : _a.navigation) == null ? void 0 : _b.location;
40
+ if (!navigationLocation)
41
+ return false;
42
+ const navigationUrl = `${navigationLocation.pathname}${navigationLocation.search ?? ""}${navigationLocation.hash ?? ""}`;
43
+ return navigationUrl === currentUrl || navigationUrl === getDataRouterUrl(currentUrl, dataRouterContext == null ? void 0 : dataRouterContext.basename);
32
44
  };
33
45
  const isSameOrNestedPath = (basePathname, currentPathname) => {
34
- if (!basePathname || !currentPathname) return false;
35
- const normalizedBase = basePathname === '/' ? '/' : basePathname.replace(/\/$/, '');
36
- return currentPathname === normalizedBase || normalizedBase !== '/' && currentPathname.startsWith(`${normalizedBase}/`);
46
+ if (!basePathname || !currentPathname)
47
+ return false;
48
+ const normalizedBase = basePathname === "/" ? "/" : basePathname.replace(/\/$/, "");
49
+ return currentPathname === normalizedBase || normalizedBase !== "/" && currentPathname.startsWith(`${normalizedBase}/`);
37
50
  };
38
- const getSourceMenus = dataSource => {
39
- if (!dataSource || !('menus' in dataSource) || !Array.isArray(dataSource.menus)) return [];
51
+ const getSourceMenus = (dataSource) => {
52
+ if (!dataSource || !("menus" in dataSource) || !Array.isArray(dataSource.menus))
53
+ return [];
40
54
  return flattenMenuData(dataSource.menus);
41
55
  };
42
- const createPushHistoryState = currentState => {
43
- if (!currentState || typeof currentState !== 'object' || Array.isArray(currentState)) {
56
+ const createPushHistoryState = (currentState) => {
57
+ if (!currentState || typeof currentState !== "object" || Array.isArray(currentState)) {
44
58
  return currentState;
45
59
  }
46
- const nextState = {
47
- ...currentState
48
- };
60
+ const nextState = { ...currentState };
49
61
  const currentIndex = nextState.idx;
50
62
  const currentKey = nextState.key;
51
- const isReactRouterState = 'usr' in nextState && typeof currentIndex === 'number' && typeof currentKey === 'string';
63
+ const isReactRouterState = "usr" in nextState && typeof currentIndex === "number" && typeof currentKey === "string";
52
64
  if (isReactRouterState) {
53
65
  nextState.idx = currentIndex + 1;
54
66
  nextState.key = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;
55
67
  }
56
68
  return nextState;
57
69
  };
58
- const getRouterLocationState = currentState => {
59
- if (!currentState || typeof currentState !== 'object' || Array.isArray(currentState)) {
70
+ const getRouterLocationState = (currentState) => {
71
+ if (!currentState || typeof currentState !== "object" || Array.isArray(currentState)) {
60
72
  return currentState;
61
73
  }
62
74
  const state = currentState;
63
- if (typeof state.idx !== 'number') return currentState;
64
- return 'usr' in state ? state.usr : null;
75
+ if (typeof state.idx !== "number")
76
+ return currentState;
77
+ return "usr" in state ? state.usr : null;
65
78
  };
66
- /**
67
- * 维护浏览器 location 与活动页签 URL 的双向同步。
68
- * 未开启 config.urlSync 时不安装任何 History 监听或写入逻辑。
69
- */
70
- export const useTabsUrlSync = ({
79
+ const useTabsUrlSync = ({
71
80
  config,
72
81
  dataSource,
73
82
  state,
@@ -80,31 +89,31 @@ export const useTabsUrlSync = ({
80
89
  }) => {
81
90
  const navigationContext = useContext(OptionalNavigationContext);
82
91
  const dataRouterContext = useContext(OptionalDataRouterContext);
83
- const navigator = navigationContext?.navigator;
84
- const enabled = config.urlSync === true || typeof config.urlSync === 'object' && config.urlSync !== null;
85
- const historyMode = typeof config.urlSync === 'object' ? config.urlSync.history || 'replace' : 'replace';
92
+ const navigator = navigationContext == null ? void 0 : navigationContext.navigator;
93
+ const enabled = config.urlSync === true || typeof config.urlSync === "object" && config.urlSync !== null;
94
+ const historyMode = typeof config.urlSync === "object" ? config.urlSync.history || "replace" : "replace";
86
95
  const bootstrappedRef = useRef(false);
87
96
  const writingUrlRef = useRef(false);
88
97
  const preserveUrlInteractionRef = useRef(null);
89
98
  const locationSequenceRef = useRef(0);
90
- const handledLocationSequenceRef = useRef(undefined);
99
+ const handledLocationSequenceRef = useRef(void 0);
91
100
  const committedActiveKeyRef = useRef(state.activeKey);
92
- const committedTabIdsRef = useRef(new Set(state.tabsList.map(tab => tab.id)));
101
+ const committedTabIdsRef = useRef(new Set(state.tabsList.map((tab) => tab.id)));
93
102
  const navigationAttemptRef = useRef(0);
94
103
  const pendingDataNavigationRef = useRef(false);
95
104
  const pendingDataNavigationUrlRef = useRef(null);
96
105
  const ignoredHistoryUrlRef = useRef(null);
97
106
  const [locationChange, setLocationChange] = useState(() => ({
98
- url: typeof window === 'undefined' ? '' : getCurrentTabUrl(),
99
- source: 'initial',
107
+ url: typeof window === "undefined" ? "" : getCurrentTabUrl(),
108
+ source: "initial",
100
109
  sequence: 0
101
110
  }));
102
-
103
- // History API 不会为 pushState/replaceState 触发 popstate,在挂载期间补齐通知。
104
111
  useEffect(() => {
105
- if (!enabled || typeof window === 'undefined') return undefined;
106
- return subscribeHistoryLocation(source => {
107
- if (writingUrlRef.current) return;
112
+ if (!enabled || typeof window === "undefined")
113
+ return void 0;
114
+ return subscribeHistoryLocation((source) => {
115
+ if (writingUrlRef.current)
116
+ return;
108
117
  const currentUrl = getCurrentTabUrl();
109
118
  if (ignoredHistoryUrlRef.current === currentUrl) {
110
119
  ignoredHistoryUrlRef.current = null;
@@ -120,10 +129,13 @@ export const useTabsUrlSync = ({
120
129
  pendingDataNavigationUrlRef.current = isPendingDataNavigationCommit ? currentUrl : null;
121
130
  if (pendingDataNavigation && !isPendingDataNavigationCommit && dataRouterContext) {
122
131
  ignoredHistoryUrlRef.current = currentUrl;
123
- const cancellation = dataRouterContext.router.navigate(getDataRouterUrl(currentUrl, dataRouterContext.basename), {
124
- replace: true,
125
- state: getRouterLocationState(window.history.state)
126
- });
132
+ const cancellation = dataRouterContext.router.navigate(
133
+ getDataRouterUrl(currentUrl, dataRouterContext.basename),
134
+ {
135
+ replace: true,
136
+ state: getRouterLocationState(window.history.state)
137
+ }
138
+ );
127
139
  void cancellation.finally(() => {
128
140
  if (ignoredHistoryUrlRef.current === currentUrl) {
129
141
  ignoredHistoryUrlRef.current = null;
@@ -139,15 +151,16 @@ export const useTabsUrlSync = ({
139
151
  });
140
152
  });
141
153
  }, [enabled, dataRouterContext]);
142
-
143
- // URL -> Tabs:精确 URL 优先;同 pathname 视为当前页签内导航;
144
- // 其次才按菜单 pathname 创建新页签。
145
154
  useEffect(() => {
146
- if (!enabled || !isInitialized || typeof window === 'undefined') return;
155
+ var _a, _b;
156
+ if (!enabled || !isInitialized || typeof window === "undefined")
157
+ return;
147
158
  const currentUrl = normalizeTabUrl(locationChange.url);
148
- if (!currentUrl) return;
149
- if (handledLocationSequenceRef.current === locationChange.sequence) return;
150
- const exactTab = state.tabsList.find(tab => normalizeTabUrl(tab.url) === currentUrl);
159
+ if (!currentUrl)
160
+ return;
161
+ if (handledLocationSequenceRef.current === locationChange.sequence)
162
+ return;
163
+ const exactTab = state.tabsList.find((tab) => normalizeTabUrl(tab.url) === currentUrl);
151
164
  if (exactTab) {
152
165
  handledLocationSequenceRef.current = locationChange.sequence;
153
166
  bootstrappedRef.current = true;
@@ -159,17 +172,19 @@ export const useTabsUrlSync = ({
159
172
  }
160
173
  const currentPathname = getTabUrlPathname(currentUrl);
161
174
  const sourceMenus = getSourceMenus(dataSource);
162
- const activeTab = state.tabsList.find(tab => tab.id === state.activeKey);
163
- const activeCode = activeTab?.menuItem?.code || activeTab?.code;
164
- const activeSourceMenu = activeCode ? sourceMenus.find(item => item.code === activeCode) : undefined;
165
- const activeMenuItem = activeSourceMenu || activeTab?.menuItem;
166
- const activeBasePathname = activeMenuItem ? getTabUrlPathname(getMenuRoute(activeMenuItem)) : getTabUrlPathname(activeTab?.url);
167
- const targetMenu = sourceMenus.map(item => ({
175
+ const activeTab = state.tabsList.find((tab) => tab.id === state.activeKey);
176
+ const activeCode = ((_a = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _a.code) || (activeTab == null ? void 0 : activeTab.code);
177
+ const activeSourceMenu = activeCode ? sourceMenus.find((item) => item.code === activeCode) : void 0;
178
+ const activeMenuItem = activeSourceMenu || (activeTab == null ? void 0 : activeTab.menuItem);
179
+ const activeBasePathname = activeMenuItem ? getTabUrlPathname(getMenuRoute(activeMenuItem)) : getTabUrlPathname(activeTab == null ? void 0 : activeTab.url);
180
+ const targetMenu = (_b = sourceMenus.map((item) => ({
168
181
  item,
169
182
  pathname: getTabUrlPathname(getMenuRoute(item))
170
- })).filter(entry => !!entry.pathname && isSameOrNestedPath(entry.pathname, currentPathname)).sort((left, right) => right.pathname.length - left.pathname.length)[0]?.item;
183
+ })).filter(
184
+ (entry) => !!entry.pathname && isSameOrNestedPath(entry.pathname, currentPathname)
185
+ ).sort((left, right) => right.pathname.length - left.pathname.length)[0]) == null ? void 0 : _b.item;
171
186
  const targetBelongsToActiveMenu = !targetMenu || !!activeCode && targetMenu.code === activeCode;
172
- if (activeTab && locationChange.source !== 'initial' && targetBelongsToActiveMenu && isSameOrNestedPath(activeBasePathname, currentPathname)) {
187
+ if (activeTab && locationChange.source !== "initial" && targetBelongsToActiveMenu && isSameOrNestedPath(activeBasePathname, currentPathname)) {
173
188
  handledLocationSequenceRef.current = locationChange.sequence;
174
189
  bootstrappedRef.current = true;
175
190
  preserveUrlInteractionRef.current = null;
@@ -180,11 +195,7 @@ export const useTabsUrlSync = ({
180
195
  handledLocationSequenceRef.current = locationChange.sequence;
181
196
  bootstrappedRef.current = true;
182
197
  preserveUrlInteractionRef.current = interactionSequence;
183
- addTab({
184
- ...targetMenu,
185
- url: currentUrl,
186
- redirectUrl: undefined
187
- });
198
+ addTab({ ...targetMenu, url: currentUrl, redirectUrl: void 0 });
188
199
  return;
189
200
  }
190
201
  if (!bootstrappedRef.current) {
@@ -192,28 +203,37 @@ export const useTabsUrlSync = ({
192
203
  preserveUrlInteractionRef.current = interactionSequence;
193
204
  return;
194
205
  }
195
- if (activeTab && locationChange.source !== 'initial') {
206
+ if (activeTab && locationChange.source !== "initial") {
196
207
  handledLocationSequenceRef.current = locationChange.sequence;
197
208
  preserveUrlInteractionRef.current = null;
198
209
  navigationAttemptRef.current += 1;
199
210
  updateTabUrl(activeTab.id, currentUrl);
200
211
  return;
201
212
  }
202
- if (locationChange.source !== 'initial') {
213
+ if (locationChange.source !== "initial") {
203
214
  handledLocationSequenceRef.current = locationChange.sequence;
204
215
  }
205
- }, [enabled, isInitialized, locationChange, state.tabsList, state.activeKey, dataSource, addTab, switchTab, updateTabUrl, interactionSequence]);
206
-
207
- // Tabs -> URL:默认用 replace 避免切签堆积浏览器历史。
216
+ }, [
217
+ enabled,
218
+ isInitialized,
219
+ locationChange,
220
+ state.tabsList,
221
+ state.activeKey,
222
+ dataSource,
223
+ addTab,
224
+ switchTab,
225
+ updateTabUrl,
226
+ interactionSequence
227
+ ]);
208
228
  useEffect(() => {
209
- if (!enabled || !isInitialized || !bootstrappedRef.current || typeof window === 'undefined') {
229
+ if (!enabled || !isInitialized || !bootstrappedRef.current || typeof window === "undefined") {
210
230
  return;
211
231
  }
212
- const activeTab = state.tabsList.find(tab => tab.id === state.activeKey);
213
- const targetUrl = normalizeTabUrl(activeTab?.url);
232
+ const activeTab = state.tabsList.find((tab) => tab.id === state.activeKey);
233
+ const targetUrl = normalizeTabUrl(activeTab == null ? void 0 : activeTab.url);
214
234
  const commitActiveTab = () => {
215
235
  committedActiveKeyRef.current = state.activeKey;
216
- committedTabIdsRef.current = new Set(state.tabsList.map(tab => tab.id));
236
+ committedTabIdsRef.current = new Set(state.tabsList.map((tab) => tab.id));
217
237
  };
218
238
  if (preserveUrlInteractionRef.current !== null) {
219
239
  if (preserveUrlInteractionRef.current === interactionSequence) {
@@ -233,10 +253,13 @@ export const useTabsUrlSync = ({
233
253
  if (pendingNavigation && dataRouterContext) {
234
254
  const cancellationUrl = getCurrentTabUrl();
235
255
  ignoredHistoryUrlRef.current = cancellationUrl;
236
- const cancellation = dataRouterContext.router.navigate(getDataRouterUrl(cancellationUrl, dataRouterContext.basename), {
237
- replace: true,
238
- state: getRouterLocationState(window.history.state)
239
- });
256
+ const cancellation = dataRouterContext.router.navigate(
257
+ getDataRouterUrl(cancellationUrl, dataRouterContext.basename),
258
+ {
259
+ replace: true,
260
+ state: getRouterLocationState(window.history.state)
261
+ }
262
+ );
240
263
  void cancellation.finally(() => {
241
264
  if (ignoredHistoryUrlRef.current === cancellationUrl) {
242
265
  ignoredHistoryUrlRef.current = null;
@@ -257,7 +280,8 @@ export const useTabsUrlSync = ({
257
280
  const routerState = getRouterLocationState(window.history.state);
258
281
  if (dataRouterContext) {
259
282
  const settleNavigation = () => {
260
- if (navigationAttemptRef.current !== navigationAttempt) return;
283
+ if (navigationAttemptRef.current !== navigationAttempt)
284
+ return;
261
285
  const committedDataNavigationUrl = pendingDataNavigationUrlRef.current;
262
286
  pendingDataNavigationRef.current = false;
263
287
  pendingDataNavigationUrlRef.current = null;
@@ -271,25 +295,38 @@ export const useTabsUrlSync = ({
271
295
  pendingDataNavigationRef.current = true;
272
296
  pendingDataNavigationUrlRef.current = targetUrl;
273
297
  void dataRouterContext.router.navigate(getDataRouterUrl(targetUrl, dataRouterContext.basename), {
274
- replace: historyMode === 'replace',
298
+ replace: historyMode === "replace",
275
299
  state: routerState
276
300
  }).then(settleNavigation);
277
301
  } else if (navigator) {
278
- if (historyMode === 'push') {
302
+ if (historyMode === "push") {
279
303
  navigator.push(targetUrl, routerState);
280
304
  } else {
281
305
  navigator.replace(targetUrl, routerState);
282
306
  }
283
307
  commitActiveTab();
284
- } else if (historyMode === 'push') {
285
- window.history.pushState(createPushHistoryState(window.history.state), '', targetUrl);
308
+ } else if (historyMode === "push") {
309
+ window.history.pushState(createPushHistoryState(window.history.state), "", targetUrl);
286
310
  commitActiveTab();
287
311
  } else {
288
- window.history.replaceState(window.history.state, '', targetUrl);
312
+ window.history.replaceState(window.history.state, "", targetUrl);
289
313
  commitActiveTab();
290
314
  }
291
315
  } finally {
292
316
  writingUrlRef.current = false;
293
317
  }
294
- }, [enabled, historyMode, isInitialized, state.tabsList, state.activeKey, interactionSequence, navigator, dataRouterContext, rollbackTabActivation]);
295
- };
318
+ }, [
319
+ enabled,
320
+ historyMode,
321
+ isInitialized,
322
+ state.tabsList,
323
+ state.activeKey,
324
+ interactionSequence,
325
+ navigator,
326
+ dataRouterContext,
327
+ rollbackTabActivation
328
+ ]);
329
+ };
330
+ export {
331
+ useTabsUrlSync
332
+ };