@keyblade/pro-components 1.1.0 → 1.2.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.
@@ -5,9 +5,10 @@ declare const ProLayout: {
5
5
  $: ComponentInternalInstance;
6
6
  $data: {};
7
7
  $props: {
8
+ layout?: "mix" | "side" | undefined;
8
9
  menuItems?: IProMenuItem[] | undefined;
9
- headerTitle?: string | undefined;
10
- headerLogo?: string | undefined;
10
+ title?: string | undefined;
11
+ logo?: string | undefined;
11
12
  theme?: "light" | "dark" | undefined;
12
13
  footerTitle?: string | undefined;
13
14
  showTabs?: boolean | undefined;
@@ -73,17 +74,22 @@ declare const ProLayout: {
73
74
  $emit: ((event: "collapse", collapsed: boolean) => void) & ((event: "keepAliveIncludeChange", keepAliveInclude: string[]) => void);
74
75
  $el: any;
75
76
  $options: ComponentOptionsBase<Readonly<ExtractPropTypes<{
77
+ layout: {
78
+ type: PropType<"mix" | "side">;
79
+ required: false;
80
+ default: string;
81
+ };
76
82
  menuItems: {
77
83
  type: PropType<IProMenuItem[]>;
78
84
  required: false;
79
85
  default: () => never[];
80
86
  };
81
- headerTitle: {
87
+ title: {
82
88
  type: PropType<string>;
83
89
  required: false;
84
90
  default: string;
85
91
  };
86
- headerLogo: {
92
+ logo: {
87
93
  type: PropType<string>;
88
94
  required: false;
89
95
  default: string;
@@ -115,9 +121,10 @@ declare const ProLayout: {
115
121
  collapse: (collapsed: boolean) => true;
116
122
  keepAliveIncludeChange: (keepAliveInclude: string[]) => true;
117
123
  }, string, {
124
+ layout: "mix" | "side";
118
125
  menuItems: IProMenuItem[];
119
- headerTitle: string;
120
- headerLogo: string;
126
+ title: string;
127
+ logo: string;
121
128
  theme: "light" | "dark";
122
129
  footerTitle: string;
123
130
  showTabs: boolean;
@@ -143,17 +150,22 @@ declare const ProLayout: {
143
150
  $nextTick: typeof nextTick;
144
151
  $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (args_0: R, args_1: R) => any : (...args: any) => any, options?: WatchOptions<boolean> | undefined): WatchStopHandle;
145
152
  } & Readonly<ExtractPropTypes<{
153
+ layout: {
154
+ type: PropType<"mix" | "side">;
155
+ required: false;
156
+ default: string;
157
+ };
146
158
  menuItems: {
147
159
  type: PropType<IProMenuItem[]>;
148
160
  required: false;
149
161
  default: () => never[];
150
162
  };
151
- headerTitle: {
163
+ title: {
152
164
  type: PropType<string>;
153
165
  required: false;
154
166
  default: string;
155
167
  };
156
- headerLogo: {
168
+ logo: {
157
169
  type: PropType<string>;
158
170
  required: false;
159
171
  default: string;
@@ -186,17 +198,22 @@ declare const ProLayout: {
186
198
  __isTeleport?: undefined;
187
199
  __isSuspense?: undefined;
188
200
  } & ComponentOptionsBase<Readonly<ExtractPropTypes<{
201
+ layout: {
202
+ type: PropType<"mix" | "side">;
203
+ required: false;
204
+ default: string;
205
+ };
189
206
  menuItems: {
190
207
  type: PropType<IProMenuItem[]>;
191
208
  required: false;
192
209
  default: () => never[];
193
210
  };
194
- headerTitle: {
211
+ title: {
195
212
  type: PropType<string>;
196
213
  required: false;
197
214
  default: string;
198
215
  };
199
- headerLogo: {
216
+ logo: {
200
217
  type: PropType<string>;
201
218
  required: false;
202
219
  default: string;
@@ -228,9 +245,10 @@ declare const ProLayout: {
228
245
  collapse: (collapsed: boolean) => true;
229
246
  keepAliveIncludeChange: (keepAliveInclude: string[]) => true;
230
247
  }, string, {
248
+ layout: "mix" | "side";
231
249
  menuItems: IProMenuItem[];
232
- headerTitle: string;
233
- headerLogo: string;
250
+ title: string;
251
+ logo: string;
234
252
  theme: "light" | "dark";
235
253
  footerTitle: string;
236
254
  showTabs: boolean;
@@ -1,17 +1,22 @@
1
1
  import type { DefineComponent, ComponentOptionsMixin, VNodeProps, AllowedComponentProps, ComponentCustomProps, ExtractPropTypes, type PropType } from 'vue';
2
2
  import type { IProMenuItem } from '../pro-menu';
3
3
  declare const _sfc_main: DefineComponent<{
4
+ layout: {
5
+ type: PropType<"mix" | "side">;
6
+ required: false;
7
+ default: string;
8
+ };
4
9
  menuItems: {
5
10
  type: PropType<IProMenuItem[]>;
6
11
  required: false;
7
12
  default: () => never[];
8
13
  };
9
- headerTitle: {
14
+ title: {
10
15
  type: PropType<string>;
11
16
  required: false;
12
17
  default: string;
13
18
  };
14
- headerLogo: {
19
+ logo: {
15
20
  type: PropType<string>;
16
21
  required: false;
17
22
  default: string;
@@ -40,17 +45,22 @@ declare const _sfc_main: DefineComponent<{
40
45
  collapse: (collapsed: boolean) => true;
41
46
  keepAliveIncludeChange: (keepAliveInclude: string[]) => true;
42
47
  }, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes<{
48
+ layout: {
49
+ type: PropType<"mix" | "side">;
50
+ required: false;
51
+ default: string;
52
+ };
43
53
  menuItems: {
44
54
  type: PropType<IProMenuItem[]>;
45
55
  required: false;
46
56
  default: () => never[];
47
57
  };
48
- headerTitle: {
58
+ title: {
49
59
  type: PropType<string>;
50
60
  required: false;
51
61
  default: string;
52
62
  };
53
- headerLogo: {
63
+ logo: {
54
64
  type: PropType<string>;
55
65
  required: false;
56
66
  default: string;
@@ -79,9 +89,10 @@ declare const _sfc_main: DefineComponent<{
79
89
  onCollapse?: ((collapsed: boolean) => any) | undefined;
80
90
  onKeepAliveIncludeChange?: ((keepAliveInclude: string[]) => any) | undefined;
81
91
  }, {
92
+ layout: "mix" | "side";
82
93
  menuItems: IProMenuItem[];
83
- headerTitle: string;
84
- headerLogo: string;
94
+ title: string;
95
+ logo: string;
85
96
  theme: "light" | "dark";
86
97
  footerTitle: string;
87
98
  showTabs: boolean;
@@ -1,6 +1,7 @@
1
- import { defineComponent, useCssVars, toRefs, useSlots, provide, ref, watch, resolveComponent, openBlock, createBlock, normalizeClass, withCtx, createVNode, createElementVNode, unref, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from "vue";
1
+ import { defineComponent, useCssVars, toRefs, useSlots, provide, ref, watch, resolveComponent, openBlock, createBlock, normalizeClass, withCtx, createVNode, createElementVNode, unref, renderSlot, createElementBlock, Fragment, createTextVNode, toDisplayString, createCommentVNode } from "vue";
2
2
  import { useHooks } from "./hooks.js";
3
3
  const _hoisted_1 = ["src"];
4
+ const _hoisted_2 = ["src"];
4
5
  const prefixClsName = "keyblade-pro-layout";
5
6
  const headerHeight = 60;
6
7
  const siderWidth = 220;
@@ -8,17 +9,22 @@ const siderCollapsedWidth = 48;
8
9
  const _sfc_main = /* @__PURE__ */ defineComponent({
9
10
  __name: "pro-layout",
10
11
  props: {
12
+ layout: {
13
+ type: String,
14
+ required: false,
15
+ default: "mix"
16
+ },
11
17
  menuItems: {
12
18
  type: Array,
13
19
  required: false,
14
20
  default: () => []
15
21
  },
16
- headerTitle: {
22
+ title: {
17
23
  type: String,
18
24
  required: false,
19
25
  default: "KeyBlade Pro"
20
26
  },
21
- headerLogo: {
27
+ logo: {
22
28
  type: String,
23
29
  required: false,
24
30
  default: "http://p3-armor.byteimg.com/tos-cn-i-49unhts6dw/dfdba5317c0c20ce20e64fac803d52bc.svg~tplv-49unhts6dw-image.image"
@@ -51,9 +57,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
51
57
  setup(__props, { emit }) {
52
58
  const props = __props;
53
59
  useCssVars((_ctx) => ({
54
- "0bcf949e": headerHeightWidthPx,
55
- "746cffdc": siderWidthPx,
56
- "59d7be69": siderCollapsedWidthPx
60
+ "1bd07f49": headerHeightWidthPx,
61
+ "d95c5d78": siderWidthPx,
62
+ "22b7fbfe": siderCollapsedWidthPx
57
63
  }));
58
64
  const { menuItems } = toRefs(props);
59
65
  const slots = useSlots();
@@ -107,36 +113,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
107
113
  const _component_a_layout_footer = resolveComponent("a-layout-footer");
108
114
  const _component_a_layout = resolveComponent("a-layout");
109
115
  return openBlock(), createBlock(_component_a_layout, {
110
- class: normalizeClass(prefixClsName)
116
+ class: normalizeClass(`${prefixClsName} ${prefixClsName}-${__props.layout}`)
111
117
  }, {
112
118
  default: withCtx(() => [
113
119
  createVNode(_component_a_layout_header, {
114
- class: normalizeClass(`${prefixClsName}-header`)
120
+ class: normalizeClass(`${prefixClsName}-header` + (siderCollapsed.value ? ` ${prefixClsName}-header-collapsed` : ""))
115
121
  }, {
116
122
  default: withCtx(() => [
117
123
  createElementVNode("div", {
118
124
  class: normalizeClass(`${prefixClsName}-header-left`)
119
125
  }, [
120
- unref(slots)["header-left"] ? renderSlot(_ctx.$slots, "header-left", { key: 0 }) : (openBlock(), createBlock(_component_a_space, { key: 1 }, {
121
- default: withCtx(() => [
122
- createElementVNode("img", {
123
- class: normalizeClass(`${prefixClsName}-header-left-logo`),
124
- alt: "logo",
125
- src: __props.headerLogo
126
- }, null, 10, _hoisted_1),
127
- !siderCollapsed.value ? (openBlock(), createBlock(_component_a_typography_title, {
128
- key: 0,
129
- class: normalizeClass(`${prefixClsName}-header-left-title`),
130
- heading: 5
131
- }, {
132
- default: withCtx(() => [
133
- createTextVNode(toDisplayString(__props.headerTitle), 1)
134
- ]),
135
- _: 1
136
- }, 8, ["class"])) : createCommentVNode("", true)
137
- ]),
138
- _: 1
139
- }))
126
+ unref(slots)["header-left"] ? renderSlot(_ctx.$slots, "header-left", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
127
+ __props.layout !== "side" ? (openBlock(), createBlock(_component_a_space, { key: 0 }, {
128
+ default: withCtx(() => [
129
+ createElementVNode("img", {
130
+ class: normalizeClass(`${prefixClsName}-header-left-logo`),
131
+ alt: "logo",
132
+ src: __props.logo
133
+ }, null, 10, _hoisted_1),
134
+ !siderCollapsed.value ? (openBlock(), createBlock(_component_a_typography_title, {
135
+ key: 0,
136
+ class: normalizeClass(`${prefixClsName}-header-left-title`),
137
+ heading: 5
138
+ }, {
139
+ default: withCtx(() => [
140
+ createTextVNode(toDisplayString(__props.title), 1)
141
+ ]),
142
+ _: 1
143
+ }, 8, ["class"])) : createCommentVNode("", true)
144
+ ]),
145
+ _: 1
146
+ })) : createCommentVNode("", true)
147
+ ], 64))
148
+ ], 2),
149
+ createElementVNode("div", {
150
+ class: normalizeClass(`${prefixClsName}-header-center`)
151
+ }, [
152
+ unref(slots)["header-center"] ? renderSlot(_ctx.$slots, "header-center", { key: 0 }) : createCommentVNode("", true)
140
153
  ], 2),
141
154
  createElementVNode("div", {
142
155
  class: normalizeClass(`${prefixClsName}-header-right`)
@@ -161,7 +174,33 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
161
174
  createElementVNode("div", {
162
175
  class: normalizeClass(`${prefixClsName}-sider-content`)
163
176
  }, [
164
- renderSlot(_ctx.$slots, "sider-top"),
177
+ unref(slots)["sider-top"] ? renderSlot(_ctx.$slots, "sider-top", { key: 0 }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
178
+ __props.layout === "side" ? (openBlock(), createElementBlock("div", {
179
+ key: 0,
180
+ class: normalizeClass(`${prefixClsName}-sider-content-top`)
181
+ }, [
182
+ createVNode(_component_a_space, null, {
183
+ default: withCtx(() => [
184
+ createElementVNode("img", {
185
+ class: normalizeClass(`${prefixClsName}-sider-content-top-logo`),
186
+ alt: "logo",
187
+ src: __props.logo
188
+ }, null, 10, _hoisted_2),
189
+ !siderCollapsed.value ? (openBlock(), createBlock(_component_a_typography_title, {
190
+ key: 0,
191
+ class: normalizeClass(`${prefixClsName}-sider-content-top-title`),
192
+ heading: 5
193
+ }, {
194
+ default: withCtx(() => [
195
+ createTextVNode(toDisplayString(__props.title), 1)
196
+ ]),
197
+ _: 1
198
+ }, 8, ["class"])) : createCommentVNode("", true)
199
+ ]),
200
+ _: 1
201
+ })
202
+ ], 2)) : createCommentVNode("", true)
203
+ ], 64)),
165
204
  createVNode(_component_kb_pro_menu, {
166
205
  collapsed: siderCollapsed.value,
167
206
  "selected-keys": unref(menuSelectedKeys),
@@ -223,7 +262,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
223
262
  })
224
263
  ]),
225
264
  _: 3
226
- });
265
+ }, 8, ["class"]);
227
266
  };
228
267
  }
229
268
  });
package/es/style.css CHANGED
@@ -16,7 +16,7 @@
16
16
  top: 0;
17
17
  left: 0;
18
18
  width: 100%;
19
- height: var(--0bcf949e);
19
+ height: var(--1bd07f49);
20
20
  z-index: 100;
21
21
  display: flex;
22
22
  align-items: center;
@@ -24,6 +24,7 @@
24
24
  padding: 0 20px;
25
25
  background-color: var(--color-bg-2);
26
26
  border-bottom: 1px solid var(--color-border);
27
+ transition: all 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
27
28
  }
28
29
  .keyblade-pro-layout-header-left {
29
30
  cursor: pointer;
@@ -38,7 +39,7 @@
38
39
  font-size: 18px;
39
40
  }
40
41
  .keyblade-pro-layout-sider {
41
- padding-top: var(--0bcf949e);
42
+ padding-top: var(--1bd07f49);
42
43
  position: fixed;
43
44
  top: 0;
44
45
  left: 0;
@@ -57,13 +58,16 @@
57
58
  bottom: 12px;
58
59
  }
59
60
  .keyblade-pro-layout-body {
60
- padding-top: var(--0bcf949e);
61
- padding-left: var(--746cffdc);
61
+ padding-top: var(--1bd07f49);
62
+ padding-left: var(--d95c5d78);
62
63
  min-height: 100vh;
63
64
  overflow-y: hidden;
64
65
  background-color: var(--color-fill-2);
65
66
  transition: padding 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
66
67
  }
68
+ .keyblade-pro-layout-body-affix .arco-affix {
69
+ z-index: 98;
70
+ }
67
71
  .keyblade-pro-layout-body-footer {
68
72
  display: flex;
69
73
  align-items: center;
@@ -73,7 +77,38 @@
73
77
  text-align: center;
74
78
  }
75
79
  .keyblade-pro-layout-body-collapsed {
76
- padding-left: var(--59d7be69);
80
+ padding-left: var(--22b7fbfe);
81
+ }
82
+ .keyblade-pro-layout-side .keyblade-pro-layout-header {
83
+ z-index: 98;
84
+ left: var(--d95c5d78);
85
+ width: calc(100% - var(--d95c5d78));
86
+ }
87
+ .keyblade-pro-layout-side .keyblade-pro-layout-header-collapsed {
88
+ left: var(--22b7fbfe);
89
+ width: calc(100% - var(--22b7fbfe));
90
+ }
91
+ .keyblade-pro-layout-side .keyblade-pro-layout-sider {
92
+ padding-top: 0;
93
+ }
94
+ .keyblade-pro-layout-side .keyblade-pro-layout-sider-content-top {
95
+ position: relative;
96
+ display: flex;
97
+ align-items: center;
98
+ padding: 16px;
99
+ cursor: pointer;
100
+ transition: padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
101
+ }
102
+ .keyblade-pro-layout-side .keyblade-pro-layout-sider-content-top-logo {
103
+ width: 28px;
104
+ height: auto;
105
+ }
106
+ .keyblade-pro-layout-side .keyblade-pro-layout-sider-content-top-title.arco-typography {
107
+ margin: 0;
108
+ font-size: 18px;
109
+ }
110
+ .keyblade-pro-layout-side .keyblade-pro-layout-sider-collapsed .keyblade-pro-layout-sider-content-top {
111
+ padding: 16px 8px;
77
112
  }
78
113
  .keyblade-pro-page-container {
79
114
  padding: 0 20px 20px 20px;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@keyblade/pro-components",
3
3
  "description": "KeyBlade Pro Components",
4
4
  "author": "yangshuai <704807396@qq.com>",
5
- "version": "1.1.0",
5
+ "version": "1.2.0",
6
6
  "private": false,
7
7
  "type": "module",
8
8
  "main": "es/index.js",
@@ -19,7 +19,7 @@
19
19
  "*.css"
20
20
  ],
21
21
  "dependencies": {
22
- "@arco-design/web-vue": "^2.46.0",
22
+ "@arco-design/web-vue": "^2.47.1",
23
23
  "vue-router": "^4.2.1"
24
24
  },
25
25
  "peerDependencies": {