@gx-design-vue/pro-layout 0.1.0-alpha.0

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 (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/dist/Context/expose.d.ts +6 -0
  4. package/dist/Context/expose.js +7 -0
  5. package/dist/Context/index.d.ts +43 -0
  6. package/dist/Context/index.js +18 -0
  7. package/dist/ProLayout.d.ts +539 -0
  8. package/dist/ProLayout.js +371 -0
  9. package/dist/WrapContent.d.ts +100 -0
  10. package/dist/WrapContent.js +45 -0
  11. package/dist/components/AppPage/context.d.ts +9 -0
  12. package/dist/components/AppPage/context.js +7 -0
  13. package/dist/components/AppPage/index.d.ts +73 -0
  14. package/dist/components/AppPage/index.js +71 -0
  15. package/dist/components/AppPage/style.d.ts +10 -0
  16. package/dist/components/AppPage/style.js +40 -0
  17. package/dist/components/BaseMenu/index.d.ts +255 -0
  18. package/dist/components/BaseMenu/index.js +381 -0
  19. package/dist/components/BaseMenu/props.d.ts +105 -0
  20. package/dist/components/BaseMenu/props.js +94 -0
  21. package/dist/components/BaseMenu/style.d.ts +6 -0
  22. package/dist/components/BaseMenu/style.js +155 -0
  23. package/dist/components/BreadCrumb/Breadcrumb.d.ts +33 -0
  24. package/dist/components/BreadCrumb/Breadcrumb.js +75 -0
  25. package/dist/components/BreadCrumb/index.d.ts +7 -0
  26. package/dist/components/BreadCrumb/index.js +44 -0
  27. package/dist/components/BreadCrumb/style.d.ts +8 -0
  28. package/dist/components/BreadCrumb/style.js +87 -0
  29. package/dist/components/CollapsedIcon/index.d.ts +33 -0
  30. package/dist/components/CollapsedIcon/index.js +51 -0
  31. package/dist/components/CollapsedIcon/style.d.ts +9 -0
  32. package/dist/components/CollapsedIcon/style.js +34 -0
  33. package/dist/components/FooterToolbar/index.d.ts +76 -0
  34. package/dist/components/FooterToolbar/index.js +96 -0
  35. package/dist/components/FooterToolbar/props.d.ts +47 -0
  36. package/dist/components/FooterToolbar/props.js +33 -0
  37. package/dist/components/FooterToolbar/style/index.d.ts +14 -0
  38. package/dist/components/FooterToolbar/style/index.js +48 -0
  39. package/dist/components/FooterToolbar/style/stylish.d.ts +18 -0
  40. package/dist/components/FooterToolbar/style/stylish.js +16 -0
  41. package/dist/components/GlobalFooter/index.d.ts +73 -0
  42. package/dist/components/GlobalFooter/index.js +77 -0
  43. package/dist/components/GlobalFooter/style.d.ts +6 -0
  44. package/dist/components/GlobalFooter/style.js +29 -0
  45. package/dist/components/GlobalHeader/DefaultHeader.d.ts +164 -0
  46. package/dist/components/GlobalHeader/DefaultHeader.js +149 -0
  47. package/dist/components/GlobalHeader/index.d.ts +164 -0
  48. package/dist/components/GlobalHeader/index.js +78 -0
  49. package/dist/components/GlobalHeader/props.d.ts +70 -0
  50. package/dist/components/GlobalHeader/props.js +56 -0
  51. package/dist/components/GlobalHeader/style/defaultHeader.d.ts +6 -0
  52. package/dist/components/GlobalHeader/style/defaultHeader.js +108 -0
  53. package/dist/components/GlobalHeader/style/header.d.ts +6 -0
  54. package/dist/components/GlobalHeader/style/header.js +41 -0
  55. package/dist/components/LogoContent/index.d.ts +80 -0
  56. package/dist/components/LogoContent/index.js +90 -0
  57. package/dist/components/LogoContent/props.d.ts +57 -0
  58. package/dist/components/LogoContent/props.js +37 -0
  59. package/dist/components/LogoContent/style.d.ts +6 -0
  60. package/dist/components/LogoContent/style.js +63 -0
  61. package/dist/components/PageContainer/PageHeader.d.ts +39 -0
  62. package/dist/components/PageContainer/PageHeader.js +53 -0
  63. package/dist/components/PageContainer/index.d.ts +197 -0
  64. package/dist/components/PageContainer/index.js +222 -0
  65. package/dist/components/PageContainer/props.d.ts +138 -0
  66. package/dist/components/PageContainer/props.js +103 -0
  67. package/dist/components/PageContainer/style/index.d.ts +14 -0
  68. package/dist/components/PageContainer/style/index.js +52 -0
  69. package/dist/components/PageContainer/style/pageHeader.d.ts +6 -0
  70. package/dist/components/PageContainer/style/pageHeader.js +44 -0
  71. package/dist/components/PageTranstion/index.d.ts +40 -0
  72. package/dist/components/PageTranstion/index.js +71 -0
  73. package/dist/components/PageTranstion/keyFrame/back.d.ts +16 -0
  74. package/dist/components/PageTranstion/keyFrame/back.js +158 -0
  75. package/dist/components/PageTranstion/keyFrame/bounce.d.ts +18 -0
  76. package/dist/components/PageTranstion/keyFrame/bounce.js +178 -0
  77. package/dist/components/PageTranstion/keyFrame/fade.d.ts +34 -0
  78. package/dist/components/PageTranstion/keyFrame/fade.js +342 -0
  79. package/dist/components/PageTranstion/keyFrame/flip.d.ts +12 -0
  80. package/dist/components/PageTranstion/keyFrame/flip.js +92 -0
  81. package/dist/components/PageTranstion/keyFrame/lightSpeed.d.ts +12 -0
  82. package/dist/components/PageTranstion/keyFrame/lightSpeed.js +72 -0
  83. package/dist/components/PageTranstion/keyFrame/roll.d.ts +10 -0
  84. package/dist/components/PageTranstion/keyFrame/roll.js +35 -0
  85. package/dist/components/PageTranstion/keyFrame/rotate.d.ts +18 -0
  86. package/dist/components/PageTranstion/keyFrame/rotate.js +149 -0
  87. package/dist/components/PageTranstion/keyFrame/slide.d.ts +16 -0
  88. package/dist/components/PageTranstion/keyFrame/slide.js +102 -0
  89. package/dist/components/PageTranstion/keyFrame/zoom.d.ts +18 -0
  90. package/dist/components/PageTranstion/keyFrame/zoom.js +165 -0
  91. package/dist/components/PageTranstion/style.d.ts +10 -0
  92. package/dist/components/PageTranstion/style.js +51 -0
  93. package/dist/components/SiderMenu/Arrow.d.ts +6 -0
  94. package/dist/components/SiderMenu/Arrow.js +15 -0
  95. package/dist/components/SiderMenu/SiderMenu.d.ts +180 -0
  96. package/dist/components/SiderMenu/SiderMenu.js +265 -0
  97. package/dist/components/SiderMenu/index.d.ts +193 -0
  98. package/dist/components/SiderMenu/index.js +51 -0
  99. package/dist/components/SiderMenu/props.d.ts +77 -0
  100. package/dist/components/SiderMenu/props.js +67 -0
  101. package/dist/components/SiderMenu/style/index.d.ts +12 -0
  102. package/dist/components/SiderMenu/style/index.js +162 -0
  103. package/dist/components/SiderMenu/typings.d.ts +38 -0
  104. package/dist/components/SiderMenu/typings.js +1 -0
  105. package/dist/components/TabsRoute/index.d.ts +95 -0
  106. package/dist/components/TabsRoute/index.js +405 -0
  107. package/dist/components/TabsRoute/props.d.ts +78 -0
  108. package/dist/components/TabsRoute/props.js +47 -0
  109. package/dist/components/TabsRoute/style.d.ts +15 -0
  110. package/dist/components/TabsRoute/style.js +133 -0
  111. package/dist/components/TabsRoute/utils/config.d.ts +18 -0
  112. package/dist/components/TabsRoute/utils/config.js +64 -0
  113. package/dist/config/animate.d.ts +11 -0
  114. package/dist/config/animate.js +76 -0
  115. package/dist/config/index.d.ts +34 -0
  116. package/dist/config/index.js +30 -0
  117. package/dist/hooks/collapsed/index.d.ts +15 -0
  118. package/dist/hooks/collapsed/index.js +50 -0
  119. package/dist/hooks/layout/useLayoutExpose.d.ts +15 -0
  120. package/dist/hooks/layout/useLayoutExpose.js +22 -0
  121. package/dist/hooks/layout/usePageContent.d.ts +6 -0
  122. package/dist/hooks/layout/usePageContent.js +28 -0
  123. package/dist/hooks/menu/context.d.ts +21 -0
  124. package/dist/hooks/menu/context.js +7 -0
  125. package/dist/hooks/menu/index.d.ts +29 -0
  126. package/dist/hooks/menu/index.js +118 -0
  127. package/dist/hooks/theme/index.d.ts +11 -0
  128. package/dist/hooks/theme/index.js +13 -0
  129. package/dist/index.d.ts +28 -0
  130. package/dist/index.js +24 -0
  131. package/dist/pro-layout.esm.js +6042 -0
  132. package/dist/pro-layout.js +37 -0
  133. package/dist/props/collapsedProps.d.ts +39 -0
  134. package/dist/props/collapsedProps.js +45 -0
  135. package/dist/props/defaultSettings.d.ts +62 -0
  136. package/dist/props/defaultSettings.js +56 -0
  137. package/dist/props/index.d.ts +226 -0
  138. package/dist/props/index.js +109 -0
  139. package/dist/props/themeProps.d.ts +14 -0
  140. package/dist/props/themeProps.js +10 -0
  141. package/dist/style/index.d.ts +24 -0
  142. package/dist/style/index.js +62 -0
  143. package/dist/types/Breadcrumb.d.ts +22 -0
  144. package/dist/types/Breadcrumb.js +1 -0
  145. package/dist/types/MenuTypings.d.ts +46 -0
  146. package/dist/types/MenuTypings.js +1 -0
  147. package/dist/types/RouteTypings.d.ts +96 -0
  148. package/dist/types/RouteTypings.js +1 -0
  149. package/dist/types/SlotsTypings.d.ts +124 -0
  150. package/dist/types/SlotsTypings.js +32 -0
  151. package/dist/types/typings.d.ts +73 -0
  152. package/dist/types/typings.js +3 -0
  153. package/dist/utils/index.d.ts +7 -0
  154. package/dist/utils/index.js +17 -0
  155. package/dist/utils/menu.d.ts +24 -0
  156. package/dist/utils/menu.js +134 -0
  157. package/dist/utils/style/index.d.ts +44 -0
  158. package/dist/utils/style/index.js +103 -0
  159. package/global.d.ts +11 -0
  160. package/package.json +73 -0
@@ -0,0 +1,40 @@
1
+ import { getAlphaColor, useStyle as useStyle$1 } from "@gx-design-vue/pro-provider";
2
+
3
+ //#region src/components/AppPage/style.ts
4
+ const pageLoadingStyle = (token) => {
5
+ return { [token.componentCls]: {
6
+ height: "100%",
7
+ [`&${token.componentCls}-loading`]: {
8
+ position: "relative",
9
+ height: "100%",
10
+ overflow: "hidden"
11
+ },
12
+ "&-blur": {
13
+ position: "absolute",
14
+ top: 0,
15
+ left: 0,
16
+ width: "100%",
17
+ height: "100%",
18
+ backgroundColor: getAlphaColor(token.colorBgContainer, .5),
19
+ [`& > ${token.componentCls}-spin`]: {
20
+ position: "absolute",
21
+ top: "50%",
22
+ left: "50%",
23
+ transform: "translate(-50%, -50%)",
24
+ [`& > ${token.componentCls}-spin-dot`]: {
25
+ fontSize: 32,
26
+ ".gx-spin-icon": { animationDuration: "0.75s" }
27
+ },
28
+ "> *": { color: token.colorPrimary }
29
+ }
30
+ }
31
+ } };
32
+ };
33
+ function useStyle(componentCls) {
34
+ return useStyle$1("AppPage", (token) => {
35
+ return [pageLoadingStyle(token)];
36
+ }, componentCls);
37
+ }
38
+
39
+ //#endregion
40
+ export { useStyle };
@@ -0,0 +1,255 @@
1
+ import { AppRouteModule } from "../../types/RouteTypings.js";
2
+ import { BaseMenuProps, MenuClassNamesType, MenuSemanticName, MenuStylesType, ProLayoutMenuFunProps } from "../../types/MenuTypings.js";
3
+ import { MenuItemRender, MenuTextRender, SubMenuItemRender } from "../../types/SlotsTypings.js";
4
+ import { ProLayoutConfig, ProLayoutType } from "../../config/index.js";
5
+ import "../../index.js";
6
+ import * as vue97 from "vue";
7
+ import { CSSProperties, FunctionalComponent } from "vue";
8
+ import { ProTokenType } from "@gx-design-vue/pro-provider";
9
+ import { CustomRender } from "@gx-design-vue/pro-utils";
10
+ import * as ant_design_vue0 from "ant-design-vue";
11
+ import * as ant_design_vue_es_menu_src_interface0 from "ant-design-vue/es/menu/src/interface";
12
+ import * as ant_design_vue_es__util_type15 from "ant-design-vue/es/_util/type";
13
+ import * as ant_design_vue_es__util_transition0 from "ant-design-vue/es/_util/transition";
14
+ import * as ant_design_vue_es__util_EventInterface0 from "ant-design-vue/es/_util/EventInterface";
15
+
16
+ //#region src/components/BaseMenu/index.d.ts
17
+ interface LazyIconProps {
18
+ icon: CustomRender;
19
+ iconPrefix?: string;
20
+ className?: string;
21
+ style?: CSSProperties;
22
+ hashId?: string;
23
+ iconfontUrl?: string;
24
+ }
25
+ declare const LazyIcon: FunctionalComponent<LazyIconProps>;
26
+ type MenuUtilProps = Partial<BaseMenuProps> & {
27
+ token?: ProTokenType;
28
+ menuRenderType?: 'header' | 'sider';
29
+ baseClassName: string;
30
+ hashId: string;
31
+ iconPrefixes?: string;
32
+ prefixCls?: string;
33
+ iconfontUrl?: string;
34
+ selectedKeys?: string[];
35
+ isMobile?: boolean;
36
+ layout?: ProLayoutType;
37
+ collapsed?: boolean;
38
+ inlineIndent?: number;
39
+ extraInlineIndent?: number;
40
+ onCollapse?: (value: boolean) => void;
41
+ };
42
+ declare const _default: vue97.DefineComponent<vue97.ExtractPropTypes<{
43
+ class: {
44
+ type: vue97.PropType<string>;
45
+ };
46
+ classNames: {
47
+ type: vue97.PropType<MenuClassNamesType>;
48
+ default: () => {};
49
+ };
50
+ styles: {
51
+ type: vue97.PropType<MenuStylesType>;
52
+ default: () => {};
53
+ };
54
+ type: {
55
+ type: vue97.PropType<BaseMenuProps["type"]>;
56
+ };
57
+ menuRenderType: {
58
+ type: vue97.PropType<"header" | "sider">;
59
+ };
60
+ style: {
61
+ type: vue97.PropType<CSSProperties>;
62
+ default: () => {};
63
+ };
64
+ iconfontUrl: {
65
+ type: vue97.PropType<ProLayoutConfig["iconfontUrl"]>;
66
+ default: string;
67
+ };
68
+ mode: {
69
+ type: vue97.PropType<BaseMenuProps["mode"]>;
70
+ default: string;
71
+ };
72
+ menuData: {
73
+ type: vue97.PropType<BaseMenuProps["menuData"]>;
74
+ default: () => any[];
75
+ };
76
+ menuProps: {
77
+ type: vue97.PropType<BaseMenuProps["menuProps"]>;
78
+ default: () => any;
79
+ };
80
+ onClick: vue97.PropType<BaseMenuProps["onClick"]>;
81
+ onOpenKeys: {
82
+ type: vue97.PropType<BaseMenuProps["onOpenKeys"]>;
83
+ };
84
+ onSelect: {
85
+ type: vue97.PropType<BaseMenuProps["onSelect"]>;
86
+ };
87
+ menuItemRender: {
88
+ type: vue97.PropType<BaseMenuProps["menuItemRender"]>;
89
+ default: () => any;
90
+ };
91
+ menuTextRender: {
92
+ type: vue97.PropType<BaseMenuProps["menuTextRender"]>;
93
+ default: () => any;
94
+ };
95
+ subMenuItemRender: {
96
+ type: vue97.PropType<BaseMenuProps["subMenuItemRender"]>;
97
+ default: () => any;
98
+ };
99
+ openKeys: {
100
+ type: vue97.PropType<ProLayoutMenuFunProps["openKeys"]>;
101
+ default: () => any[];
102
+ };
103
+ selectedKeys: {
104
+ type: vue97.PropType<ProLayoutMenuFunProps["selectedKeys"]>;
105
+ default: () => any[];
106
+ };
107
+ }>, () => ant_design_vue_es__util_type15.VueNode, {}, {}, {}, vue97.ComponentOptionsMixin, vue97.ComponentOptionsMixin, {}, string, vue97.PublicProps, Readonly<vue97.ExtractPropTypes<{
108
+ class: {
109
+ type: vue97.PropType<string>;
110
+ };
111
+ classNames: {
112
+ type: vue97.PropType<MenuClassNamesType>;
113
+ default: () => {};
114
+ };
115
+ styles: {
116
+ type: vue97.PropType<MenuStylesType>;
117
+ default: () => {};
118
+ };
119
+ type: {
120
+ type: vue97.PropType<BaseMenuProps["type"]>;
121
+ };
122
+ menuRenderType: {
123
+ type: vue97.PropType<"header" | "sider">;
124
+ };
125
+ style: {
126
+ type: vue97.PropType<CSSProperties>;
127
+ default: () => {};
128
+ };
129
+ iconfontUrl: {
130
+ type: vue97.PropType<ProLayoutConfig["iconfontUrl"]>;
131
+ default: string;
132
+ };
133
+ mode: {
134
+ type: vue97.PropType<BaseMenuProps["mode"]>;
135
+ default: string;
136
+ };
137
+ menuData: {
138
+ type: vue97.PropType<BaseMenuProps["menuData"]>;
139
+ default: () => any[];
140
+ };
141
+ menuProps: {
142
+ type: vue97.PropType<BaseMenuProps["menuProps"]>;
143
+ default: () => any;
144
+ };
145
+ onClick: vue97.PropType<BaseMenuProps["onClick"]>;
146
+ onOpenKeys: {
147
+ type: vue97.PropType<BaseMenuProps["onOpenKeys"]>;
148
+ };
149
+ onSelect: {
150
+ type: vue97.PropType<BaseMenuProps["onSelect"]>;
151
+ };
152
+ menuItemRender: {
153
+ type: vue97.PropType<BaseMenuProps["menuItemRender"]>;
154
+ default: () => any;
155
+ };
156
+ menuTextRender: {
157
+ type: vue97.PropType<BaseMenuProps["menuTextRender"]>;
158
+ default: () => any;
159
+ };
160
+ subMenuItemRender: {
161
+ type: vue97.PropType<BaseMenuProps["subMenuItemRender"]>;
162
+ default: () => any;
163
+ };
164
+ openKeys: {
165
+ type: vue97.PropType<ProLayoutMenuFunProps["openKeys"]>;
166
+ default: () => any[];
167
+ };
168
+ selectedKeys: {
169
+ type: vue97.PropType<ProLayoutMenuFunProps["selectedKeys"]>;
170
+ default: () => any[];
171
+ };
172
+ }>> & Readonly<{}>, {
173
+ styles: Partial<Record<MenuSemanticName, CSSProperties>>;
174
+ classNames: Partial<Record<MenuSemanticName, string>>;
175
+ openKeys: string[];
176
+ selectedKeys: string[];
177
+ menuItemRender: MenuItemRender;
178
+ menuTextRender: MenuTextRender;
179
+ subMenuItemRender: SubMenuItemRender;
180
+ menuProps: Partial<vue97.ExtractPropTypes<{
181
+ id: StringConstructor;
182
+ prefixCls: StringConstructor;
183
+ items: vue97.PropType<ant_design_vue0.ItemType[]>;
184
+ disabled: BooleanConstructor;
185
+ inlineCollapsed: BooleanConstructor;
186
+ disabledOverflow: BooleanConstructor;
187
+ forceSubMenuRender: BooleanConstructor;
188
+ openKeys: vue97.PropType<ant_design_vue_es__util_type15.Key[]>;
189
+ selectedKeys: vue97.PropType<ant_design_vue_es__util_type15.Key[]>;
190
+ activeKey: StringConstructor;
191
+ selectable: {
192
+ type: BooleanConstructor;
193
+ default: boolean;
194
+ };
195
+ multiple: {
196
+ type: BooleanConstructor;
197
+ default: boolean;
198
+ };
199
+ tabindex: {
200
+ type: (StringConstructor | NumberConstructor)[];
201
+ };
202
+ motion: vue97.PropType<ant_design_vue_es__util_transition0.CSSMotionProps>;
203
+ role: StringConstructor;
204
+ theme: {
205
+ type: vue97.PropType<ant_design_vue0.MenuTheme>;
206
+ default: string;
207
+ };
208
+ mode: {
209
+ type: vue97.PropType<ant_design_vue0.MenuMode>;
210
+ default: string;
211
+ };
212
+ inlineIndent: {
213
+ type: NumberConstructor;
214
+ default: number;
215
+ };
216
+ subMenuOpenDelay: {
217
+ type: NumberConstructor;
218
+ default: number;
219
+ };
220
+ subMenuCloseDelay: {
221
+ type: NumberConstructor;
222
+ default: number;
223
+ };
224
+ builtinPlacements: {
225
+ type: vue97.PropType<ant_design_vue_es_menu_src_interface0.BuiltinPlacements>;
226
+ };
227
+ triggerSubMenuAction: {
228
+ type: vue97.PropType<ant_design_vue_es_menu_src_interface0.TriggerSubMenuAction>;
229
+ default: string;
230
+ };
231
+ getPopupContainer: vue97.PropType<(node: HTMLElement) => HTMLElement>;
232
+ expandIcon: vue97.PropType<(p?: {
233
+ [key: string]: any;
234
+ isOpen: boolean;
235
+ }) => any>;
236
+ onOpenChange: vue97.PropType<(keys: ant_design_vue_es__util_type15.Key[]) => void>;
237
+ onSelect: vue97.PropType<ant_design_vue_es_menu_src_interface0.SelectEventHandler>;
238
+ onDeselect: vue97.PropType<ant_design_vue_es_menu_src_interface0.SelectEventHandler>;
239
+ onClick: vue97.PropType<ant_design_vue_es_menu_src_interface0.MenuClickEventHandler>;
240
+ onFocus: vue97.PropType<ant_design_vue_es__util_EventInterface0.FocusEventHandler>;
241
+ onBlur: vue97.PropType<ant_design_vue_es__util_EventInterface0.FocusEventHandler>;
242
+ onMousedown: vue97.PropType<ant_design_vue_es__util_EventInterface0.MouseEventHandler>;
243
+ 'onUpdate:openKeys': vue97.PropType<(keys: ant_design_vue_es__util_type15.Key[]) => void>;
244
+ 'onUpdate:selectedKeys': vue97.PropType<(keys: ant_design_vue_es__util_type15.Key[]) => void>;
245
+ 'onUpdate:activeKey': vue97.PropType<(key: ant_design_vue_es__util_type15.Key) => void>;
246
+ }>> & {
247
+ extraInlineIndent?: number;
248
+ };
249
+ style: CSSProperties;
250
+ iconfontUrl: string;
251
+ mode: ant_design_vue0.MenuMode;
252
+ menuData: AppRouteModule[];
253
+ }, {}, {}, {}, string, vue97.ComponentProvideOptions, true, {}, any>;
254
+ //#endregion
255
+ export { LazyIcon, LazyIconProps, MenuUtilProps, _default as default };
@@ -0,0 +1,381 @@
1
+ import { useProLayoutContext } from "../../Context/index.js";
2
+ import { convertCSSPropertiesToString } from "../../utils/style/index.js";
3
+ import { defaultSettings } from "../../config/index.js";
4
+ import { baseMenuProps } from "./props.js";
5
+ import { ProBaseMenuStyle } from "./style.js";
6
+ import { cloneVNode, computed, createVNode, defineComponent, isVNode, mergeProps, resolveComponent, watch } from "vue";
7
+ import { useMemo, useState } from "@gx-design-vue/pro-hooks";
8
+ import { unit, useProConfigContext, useProStyle } from "@gx-design-vue/pro-provider";
9
+ import { classNames as classNames$1, getPrefixCls, isImg, isString, isUrl } from "@gx-design-vue/pro-utils";
10
+ import { useStyleTag } from "@vueuse/core";
11
+ import { Menu } from "ant-design-vue";
12
+ import { omit } from "es-toolkit";
13
+ import { createFromIconfontCN } from "@ant-design/icons-vue";
14
+ import { useRouter } from "vue-router";
15
+
16
+ //#region src/components/BaseMenu/index.tsx
17
+ const LazyIcon = (props) => {
18
+ const { icon, iconPrefix = "", iconfontUrl, hashId, style } = props;
19
+ const className = classNames$1(props.className, iconPrefix, hashId);
20
+ /**
21
+ * 如果没有icon在收起的时候用首字母代替
22
+ */
23
+ const defaultIcon = createVNode("span", {
24
+ "class": classNames$1(className),
25
+ "style": { display: "none" }
26
+ }, [createVNode("span", { "class": "anticon" }, null)]);
27
+ if (!icon) return defaultIcon;
28
+ const renderImg = (src) => createVNode("img", {
29
+ "src": src,
30
+ "alt": "icon",
31
+ "class": classNames$1(props.className ? `${props.className}-image` : "", className),
32
+ "style": style
33
+ }, null);
34
+ const renderIconFont = (type) => {
35
+ const IconFont = createFromIconfontCN({ scriptUrl: iconfontUrl || defaultSettings.iconfontUrl });
36
+ return iconfontUrl ? createVNode(IconFont, {
37
+ "type": type,
38
+ "class": className,
39
+ "style": style
40
+ }, null) : createVNode("span", {
41
+ "class": className,
42
+ "style": style
43
+ }, null);
44
+ };
45
+ const renderVNodeIcon = () => cloneVNode(icon, {
46
+ class: className,
47
+ style
48
+ });
49
+ const renderByString = (str) => {
50
+ if (isUrl(str) || isImg(str)) return renderImg(str);
51
+ if (iconPrefix === "iconfont") return renderIconFont(str);
52
+ const DynamicIcon = resolveComponent(str);
53
+ return typeof DynamicIcon === "function" && createVNode(DynamicIcon, null, null) || defaultIcon;
54
+ };
55
+ if (typeof icon === "string") return icon !== "" ? renderByString(icon) : defaultIcon;
56
+ if (isVNode(icon)) return renderVNodeIcon();
57
+ return defaultIcon;
58
+ };
59
+ let IconFont = createFromIconfontCN({ scriptUrl: defaultSettings.iconfontUrl });
60
+ function getIcon({ icon, style, iconPrefixes = "icon-", className, hashId }) {
61
+ if (typeof icon === "string" && icon !== "") {
62
+ if (isUrl(icon) || isImg(icon)) return createVNode("img", {
63
+ "key": icon,
64
+ "src": icon,
65
+ "alt": "icon",
66
+ "style": style,
67
+ "class": classNames$1(`${className}-image`, hashId)
68
+ }, null);
69
+ if (icon.startsWith(iconPrefixes)) return createVNode(IconFont, {
70
+ "type": icon,
71
+ "style": style
72
+ }, null);
73
+ }
74
+ return icon;
75
+ }
76
+ function getMenuTitleSymbol(title) {
77
+ if (title && typeof title === "string") return title.substring(0, 1).toUpperCase();
78
+ return null;
79
+ }
80
+ var MenuUtil = class {
81
+ constructor(props) {
82
+ this.props = props;
83
+ }
84
+ getNavMenuItems = (menusData = [], level, noGroupLevel) => menusData.filter((item) => !item.meta?.hideInMenu).map((item) => this.getSubMenuOrItem(item, level, noGroupLevel)).filter((item) => item).flat(1);
85
+ /** Get SubMenu or Item */
86
+ getSubMenuOrItem = (item, level, noGroupLevel) => {
87
+ const { menuRenderType, subMenuItemRender, baseClassName, iconPrefixes, styles, classNames } = this.props;
88
+ const collapsed = menuRenderType === "sider" ? this.props.collapsed : false;
89
+ const name = this.getIntlName(item);
90
+ const inlineIndentCount = menuRenderType === "sider" ? item.meta?.inlineIndent ?? level * (this.props.extraInlineIndent ?? 10) : 0;
91
+ const children = item?.children;
92
+ const hidden = item?.meta?.hideInMenu;
93
+ const rightContent = item?.meta?.rightContent;
94
+ const hasDivider = item?.meta?.divider;
95
+ const isSubMenu = Array.isArray(children) && children.length > 0 && !hidden;
96
+ const emptyChilds = children?.every((child) => child.meta?.hideInMenu);
97
+ if (isSubMenu && !emptyChilds) {
98
+ const shouldHasIcon = collapsed || menuRenderType === "header" ? level === 0 : item.meta?.icon || level === 0;
99
+ const hasImageIcon = typeof item.meta?.icon === "string" ? isUrl(item.meta?.icon) || isImg(item.meta?.icon) : false;
100
+ const iconDom = getIcon({
101
+ icon: item.meta?.icon,
102
+ style: item.meta?.styles?.itemIcon,
103
+ iconPrefixes,
104
+ className: classNames$1(`${baseClassName}-item`, item.meta?.classNames?.itemIcon),
105
+ hashId: this.props?.hashId
106
+ });
107
+ /**
108
+ * 如果没有icon在收起的时候用首字母代替
109
+ */
110
+ const defaultIcon = collapsed && shouldHasIcon ? getMenuTitleSymbol(item.meta?.title) : null;
111
+ const defaultTitle = createVNode("div", {
112
+ "class": classNames$1(classNames?.menuItemTitle, `${baseClassName}-item-title`, this.props?.hashId, {
113
+ [`${baseClassName}-item-title-collapsed`]: collapsed,
114
+ [`${baseClassName}-item-title-collapsed-level-${noGroupLevel}`]: collapsed
115
+ }, item.meta?.classNames?.itemTitle),
116
+ "style": {
117
+ paddingInlineStart: collapsed ? 0 : level === 0 ? void 0 : unit(inlineIndentCount),
118
+ ...styles?.menuItemTitle || {},
119
+ ...item.meta?.styles?.itemTitle || {}
120
+ }
121
+ }, [
122
+ shouldHasIcon && iconDom ? !collapsed || level === 0 ? createVNode("span", {
123
+ "class": classNames$1(`${baseClassName}-item-icon`, this.props?.hashId, classNames?.menuItemIcon, item.meta?.classNames?.itemIcon),
124
+ "style": {
125
+ ...styles?.menuItemIcon,
126
+ ...hasImageIcon ? {} : item.meta?.styles?.itemIcon || {}
127
+ }
128
+ }, [iconDom]) : defaultIcon : defaultIcon,
129
+ createVNode("span", {
130
+ "class": classNames$1(`${baseClassName}-item-text`, this.props?.hashId, { [`${baseClassName}-item-text-has-icon`]: shouldHasIcon && (iconDom || defaultIcon) }, classNames?.menuItemTitleText, item.meta?.classNames?.itemTitle),
131
+ "style": {
132
+ ...styles?.menuItemTitleText || {},
133
+ ...item.meta?.styles?.itemTitle || {}
134
+ }
135
+ }, [name]),
136
+ rightContent && typeof rightContent === "function" ? createVNode("div", {
137
+ "class": classNames$1(`${baseClassName}-item-right-content`, this.props.hashId, item.meta?.classNames?.itemRight),
138
+ "style": item.meta?.styles?.itemRight
139
+ }, [rightContent(item.meta)]) : null
140
+ ]);
141
+ const title = subMenuItemRender ? subMenuItemRender({
142
+ item,
143
+ children: defaultTitle,
144
+ menuProps: this.props
145
+ }) : defaultTitle;
146
+ const childrenList = this.getNavMenuItems(children, level + 1, level === 0 && collapsed ? level : level + 1);
147
+ return [hasDivider && menuRenderType === "sider" ? { type: "divider" } : void 0, {
148
+ key: item.name,
149
+ label: title,
150
+ children: childrenList,
151
+ style: {
152
+ ...styles?.subMenu || {},
153
+ ...item.meta?.styles?.subMenu || {}
154
+ },
155
+ disabled: item.meta?.disabled,
156
+ class: classNames$1(classNames?.subMenu, {
157
+ [`${baseClassName}-submenu`]: true,
158
+ [`${baseClassName}-submenu-has-icon`]: shouldHasIcon && iconDom
159
+ }, item.meta?.classNames?.subMenu),
160
+ popupClassName: classNames$1(classNames?.subMenuPopup, `${baseClassName}-submenu-popup`, `${baseClassName}-submenu-popup-${this.props?.menuRenderType}`, this.props?.hashId, item.meta?.classNames?.subMenuPopup)
161
+ }].filter(Boolean);
162
+ }
163
+ return [hasDivider && menuRenderType === "sider" ? { type: "divider" } : void 0, {
164
+ class: classNames$1(`${baseClassName}-item`, classNames?.menuItem, item.meta?.classNames?.item),
165
+ style: {
166
+ ...styles?.menuItem || {},
167
+ ...item.meta?.styles?.item || {}
168
+ },
169
+ key: item.name,
170
+ disabled: item.meta?.disabled,
171
+ label: this.getMenuItemPath(item, level, noGroupLevel)
172
+ }].filter(Boolean);
173
+ };
174
+ getIntlName = (item) => {
175
+ const meta = { ...item.meta };
176
+ const finalName = meta.title;
177
+ if (this.props.menuTextRender) return this.props.menuTextRender({
178
+ item,
179
+ defaultText: meta.title,
180
+ menuProps: this.props
181
+ });
182
+ return finalName;
183
+ };
184
+ /**
185
+ * 判断是否是http链接.返回 Link 或 a Judge whether it is http link.return a or Link
186
+ *
187
+ * @memberof SiderMenu
188
+ */
189
+ getMenuItemPath = (item, level, noGroupLevel) => {
190
+ const itemPath = this.conversionPath(item.path || "/");
191
+ const { isMobile, menuRenderType, onCollapse, menuItemRender, iconPrefixes, classNames, styles, baseClassName } = this.props;
192
+ const menuItemTitle = this.getIntlName(item);
193
+ const collapsed = menuRenderType === "sider" ? this.props.collapsed : false;
194
+ const hasIcon = item.meta?.icon || level === 0;
195
+ const rightContent = item.meta?.rightContent;
196
+ const hasImageIcon = typeof item.meta?.icon === "string" ? isUrl(item.meta?.icon) || isImg(item.meta?.icon) : false;
197
+ const inlineIndentCount = menuRenderType === "sider" ? item.meta?.inlineIndent ?? level * (this.props.extraInlineIndent ?? 10) : 0;
198
+ const icon = !hasIcon ? null : getIcon({
199
+ icon: item.meta?.icon,
200
+ style: item.meta?.styles?.itemIcon,
201
+ iconPrefixes,
202
+ className: `${baseClassName}-item`,
203
+ hashId: this.props?.hashId
204
+ });
205
+ const defaultIcon = collapsed && hasIcon ? getMenuTitleSymbol(item.meta?.title) : null;
206
+ const isHttpUrl = item.meta?.linkStatus === 1 && isUrl(item.meta?.link);
207
+ const defaultItem = createVNode("div", {
208
+ "key": itemPath,
209
+ "class": classNames$1(classNames?.menuItemTitle, `${baseClassName}-item-title`, this.props?.hashId, {
210
+ [`${baseClassName}-item-link`]: isHttpUrl,
211
+ [`${baseClassName}-item-title-collapsed`]: collapsed,
212
+ [`${baseClassName}-item-title-collapsed-level-${noGroupLevel}`]: collapsed
213
+ }, item.meta?.classNames?.itemTitle),
214
+ "style": {
215
+ paddingInlineStart: collapsed ? 0 : unit(inlineIndentCount),
216
+ ...styles?.menuItemTitle || {},
217
+ ...item.meta?.styles?.itemTitle || {}
218
+ }
219
+ }, [
220
+ createVNode("span", {
221
+ "class": classNames$1(`${baseClassName}-item-icon ${this.props?.hashId}`, classNames?.menuItemIcon),
222
+ "style": {
223
+ display: defaultIcon === null && !icon ? "none" : "",
224
+ ...styles?.menuItemIcon,
225
+ ...hasImageIcon ? {} : item.meta?.styles?.itemIcon || {}
226
+ }
227
+ }, [icon || createVNode("span", { "class": "anticon" }, [defaultIcon])]),
228
+ createVNode("span", {
229
+ "class": classNames$1(classNames?.menuItemTitleText, `${baseClassName}-item-text`, this.props?.hashId, { [`${baseClassName}-item-text-has-icon`]: hasIcon && (icon || defaultIcon) }, item.meta?.classNames?.itemTitleText),
230
+ "style": {
231
+ ...styles?.menuItemTitleText || {},
232
+ ...item.meta?.styles?.itemTitleText || {}
233
+ }
234
+ }, [menuItemTitle]),
235
+ rightContent && typeof rightContent === "function" && !collapsed ? createVNode("div", {
236
+ "class": classNames$1(`${baseClassName}-item-right-content`, this.props.hashId, item.meta?.classNames?.itemRight),
237
+ "style": item.meta?.styles?.itemRight
238
+ }, [rightContent(item.meta)]) : null
239
+ ]);
240
+ if (menuItemRender) return menuItemRender({
241
+ item: {
242
+ ...item,
243
+ isUrl: isHttpUrl,
244
+ itemPath,
245
+ isMobile,
246
+ replace: itemPath === location.pathname,
247
+ onClick: () => onCollapse && onCollapse(true),
248
+ children: void 0
249
+ },
250
+ defaultDom: defaultItem,
251
+ menuProps: this.props
252
+ });
253
+ return defaultItem;
254
+ };
255
+ conversionPath = (path) => {
256
+ if (path && path.indexOf("http") === 0) return path;
257
+ return `/${path || ""}`.replace(/\/+/g, "/");
258
+ };
259
+ };
260
+ var BaseMenu_default = /* @__PURE__ */ defineComponent({
261
+ name: "BaseMenu",
262
+ props: baseMenuProps,
263
+ setup(props) {
264
+ const router = useRouter();
265
+ const { dark, token } = useProConfigContext();
266
+ const layoutContext = useProLayoutContext();
267
+ const baseClassName = (layoutContext?.getPrefixCls || getPrefixCls)({
268
+ isPor: true,
269
+ suffixCls: `base-menu`
270
+ });
271
+ const { wrapSSR, hashId } = useProStyle("ProBaseMenu", [ProBaseMenuStyle], baseClassName);
272
+ const [openKeys, setOpenKeys] = useState(props.openKeys || []);
273
+ const [selectedKeys, setSelectedKeys] = useState(props.selectedKeys || []);
274
+ const menuUtils = useMemo(() => {
275
+ return new MenuUtil({
276
+ ...props,
277
+ layout: layoutContext?.settings?.value?.layout,
278
+ isMobile: layoutContext?.isMobile?.value,
279
+ collapsed: layoutContext?.collapsedEffect?.value,
280
+ token: token.value,
281
+ menuRenderType: props.menuRenderType,
282
+ baseClassName,
283
+ inlineIndent: props.menuProps?.inlineIndent,
284
+ extraInlineIndent: props.menuProps?.extraInlineIndent,
285
+ iconfontUrl: props.iconfontUrl,
286
+ hashId: hashId.value,
287
+ onCollapse: (value) => {
288
+ if (layoutContext) layoutContext.collapsed.value = value;
289
+ }
290
+ });
291
+ }, [
292
+ () => hashId.value,
293
+ () => token.value,
294
+ () => props.menuData,
295
+ () => props.iconfontUrl,
296
+ () => props.styles,
297
+ () => props.classNames,
298
+ () => props.menuProps?.inlineIndent,
299
+ () => props.menuProps?.extraInlineIndent,
300
+ () => layoutContext?.isMobile?.value,
301
+ () => layoutContext?.collapsedEffect?.value,
302
+ () => layoutContext?.settings?.value?.layout
303
+ ]);
304
+ useStyleTag(computed(() => {
305
+ const tooltip = ".ant-tooltip-inner";
306
+ const menuClass = `.${baseClassName}`;
307
+ const menuItemClass = `.${baseClassName}-item`;
308
+ const menuSubmenuClass = `.${baseClassName}-submenu`;
309
+ const menuItemSelectClass = `${token.value.antCls}-menu-item-selected`;
310
+ return `
311
+ ${tooltip} ${menuItemClass}-title ${menuItemClass}-image {
312
+ display: none;
313
+ }
314
+ ${menuClass} ${menuSubmenuClass}>${`${token.value.antCls}-menu-submenu-title`} {
315
+ ${convertCSSPropertiesToString(props.styles.subMenuTitle)}
316
+ }
317
+ ${menuClass} ${menuItemClass}${menuItemSelectClass} {
318
+ ${convertCSSPropertiesToString(props.styles.menuItemSelect)}
319
+ }
320
+ `;
321
+ }));
322
+ watch(() => props.openKeys, (val) => setOpenKeys(val));
323
+ watch(() => props.selectedKeys, (val) => setSelectedKeys(val));
324
+ watch(() => props.iconfontUrl, () => {
325
+ if (props.iconfontUrl) IconFont = createFromIconfontCN({ scriptUrl: props.iconfontUrl });
326
+ }, { immediate: true });
327
+ return () => {
328
+ if (props.menuData && props.menuData?.length < 1) return null;
329
+ return wrapSSR(createVNode(Menu, mergeProps({
330
+ "key": layoutContext?.collapsedEffect?.value ? "Menu1" : "Menu",
331
+ "mode": props.mode,
332
+ "inlineIndent": 16,
333
+ "theme": dark.value ? "dark" : "light",
334
+ "openKeys": openKeys.value,
335
+ "selectedKeys": selectedKeys.value,
336
+ "style": {
337
+ backgroundColor: "transparent",
338
+ border: "none",
339
+ ...props.style
340
+ },
341
+ "class": classNames$1(props.class, hashId, baseClassName, {
342
+ [`${baseClassName}-inline`]: props.mode === "inline",
343
+ [`${baseClassName}-horizontal`]: props.mode === "horizontal",
344
+ [`${baseClassName}-collapsed`]: props.menuRenderType === "sider" ? layoutContext?.collapsedEffect?.value : false
345
+ }),
346
+ "items": menuUtils.value.getNavMenuItems(props.menuData, 0, 0)
347
+ }, omit(props.menuProps, [
348
+ "onOpenChange",
349
+ "onSelect",
350
+ "onClick",
351
+ "items"
352
+ ]), {
353
+ "onOpenChange": (_openKeys) => {
354
+ if (layoutContext?.collapsedEffect?.value) return;
355
+ setOpenKeys(_openKeys);
356
+ props.onOpenKeys && props.onOpenKeys(_openKeys);
357
+ },
358
+ "onSelect": (info) => {
359
+ props.onSelect && props.onSelect(info);
360
+ setSelectedKeys(info.selectedKeys);
361
+ },
362
+ "onClick": (e) => {
363
+ if (props.onClick) props.onClick(e);
364
+ else {
365
+ const row = layoutContext?.menu?.value?.flatMenus?.find((item) => item.name === e.key);
366
+ if (row) {
367
+ const toPath = isString(row.redirect) ? row.redirect : row.path || "";
368
+ const target = row.meta?.link || "";
369
+ const hasUrl = isUrl(target);
370
+ if (router.currentRoute.value?.fullPath !== toPath) if (hasUrl && target && row.meta?.linkStatus === 1) window.open(target);
371
+ else router.push({ path: toPath });
372
+ }
373
+ }
374
+ }
375
+ }), null));
376
+ };
377
+ }
378
+ });
379
+
380
+ //#endregion
381
+ export { LazyIcon, BaseMenu_default as default };