jky-component-lib 0.0.10 → 0.0.17

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 (63) hide show
  1. package/dist/es/button/Button.vue.d.ts +6 -0
  2. package/dist/es/button/Button.vue.js +32 -4
  3. package/dist/es/button/style.css +144 -89
  4. package/dist/es/button-nav/ButtonNav.vue.d.ts +30 -0
  5. package/dist/es/button-nav/ButtonNav.vue.js +130 -0
  6. package/dist/es/button-nav/ButtonNav.vue3.js +5 -0
  7. package/dist/es/button-nav/index.d.ts +4 -0
  8. package/dist/es/button-nav/index.js +8 -0
  9. package/dist/es/button-nav/style.css +39 -0
  10. package/dist/es/components.d.ts +3 -0
  11. package/dist/es/components.js +10 -1
  12. package/dist/es/index.js +8 -2
  13. package/dist/es/menu/Menu.vue.d.ts +32 -0
  14. package/dist/es/menu/Menu.vue.js +110 -0
  15. package/dist/es/menu/Menu.vue3.js +5 -0
  16. package/dist/es/menu/index.d.ts +4 -0
  17. package/dist/es/menu/index.js +8 -0
  18. package/dist/es/menu/style.css +70 -0
  19. package/dist/es/package.json.js +1 -1
  20. package/dist/es/page-header/PageHeader.vue.d.ts +45 -0
  21. package/dist/es/page-header/PageHeader.vue.js +263 -0
  22. package/dist/es/page-header/PageHeader.vue3.js +5 -0
  23. package/dist/es/page-header/index.d.ts +4 -0
  24. package/dist/es/page-header/index.js +8 -0
  25. package/dist/es/page-header/style.css +140 -0
  26. package/dist/es/resolver.d.ts +1 -1
  27. package/dist/es/resolver.js +2 -2
  28. package/dist/es/say-hello/style.css +32 -8
  29. package/dist/es/style.css +531 -54
  30. package/dist/es/styles.css +1 -1
  31. package/dist/lib/button/Button.vue.d.ts +6 -0
  32. package/dist/lib/button/Button.vue.js +31 -3
  33. package/dist/lib/button/style.css +144 -89
  34. package/dist/lib/button-nav/ButtonNav.vue.d.ts +30 -0
  35. package/dist/lib/button-nav/ButtonNav.vue.js +130 -0
  36. package/dist/lib/button-nav/ButtonNav.vue3.js +5 -0
  37. package/dist/lib/button-nav/index.d.ts +4 -0
  38. package/dist/lib/button-nav/index.js +8 -0
  39. package/dist/lib/button-nav/style.css +39 -0
  40. package/dist/lib/components.d.ts +3 -0
  41. package/dist/lib/components.js +13 -4
  42. package/dist/lib/index.js +9 -3
  43. package/dist/lib/menu/Menu.vue.d.ts +32 -0
  44. package/dist/lib/menu/Menu.vue.js +110 -0
  45. package/dist/lib/menu/Menu.vue3.js +5 -0
  46. package/dist/lib/menu/index.d.ts +4 -0
  47. package/dist/lib/menu/index.js +8 -0
  48. package/dist/lib/menu/style.css +70 -0
  49. package/dist/lib/package.json.js +1 -1
  50. package/dist/lib/page-header/PageHeader.vue.d.ts +45 -0
  51. package/dist/lib/page-header/PageHeader.vue.js +263 -0
  52. package/dist/lib/page-header/PageHeader.vue3.js +5 -0
  53. package/dist/lib/page-header/index.d.ts +4 -0
  54. package/dist/lib/page-header/index.js +8 -0
  55. package/dist/lib/page-header/style.css +140 -0
  56. package/dist/lib/resolver.d.ts +1 -1
  57. package/dist/lib/resolver.js +2 -2
  58. package/dist/lib/say-hello/style.css +32 -8
  59. package/dist/lib/style.css +531 -54
  60. package/dist/lib/styles.css +1 -1
  61. package/dist/umd/index.js +1856 -14
  62. package/dist/umd/styles.css +1 -1
  63. package/package.json +6 -1
@@ -0,0 +1,110 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { defineComponent, openBlock, createBlock, unref, mergeProps, withCtx, createElementBlock, Fragment, renderList, resolveDynamicComponent, renderSlot, h } from "vue";
21
+ import { ElMenu, ElSubMenu, ElMenuItem } from "element-plus";
22
+ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({}, {
23
+ name: "JkyMenu",
24
+ inheritAttrs: false
25
+ }), {
26
+ __name: "Menu",
27
+ props: {
28
+ menuData: { default: () => [] },
29
+ modelValue: {},
30
+ mode: {},
31
+ defaultActive: {},
32
+ defaultOpeneds: {},
33
+ uniqueOpened: { type: Boolean },
34
+ router: { type: Boolean },
35
+ menuTrigger: {},
36
+ collapse: { type: Boolean },
37
+ backgroundColor: {},
38
+ textColor: {},
39
+ activeTextColor: {},
40
+ closeOnClickOutside: { type: Boolean },
41
+ collapseTransition: { type: Boolean },
42
+ ellipsis: { type: Boolean },
43
+ popperOffset: {},
44
+ ellipsisIcon: {},
45
+ popperEffect: {},
46
+ popperClass: {},
47
+ popperStyle: {},
48
+ showTimeout: {},
49
+ hideTimeout: {},
50
+ persistent: { type: Boolean }
51
+ },
52
+ setup(__props) {
53
+ function renderMenuItem(item) {
54
+ return h(
55
+ ElMenuItem,
56
+ {
57
+ index: item.index,
58
+ disabled: item.disabled,
59
+ route: item.route
60
+ },
61
+ {
62
+ default: () => [
63
+ item.icon ? h("span", { class: "jky-menu-item__icon" }, [h("span", { class: item.icon })]) : null,
64
+ item.title ? h("span", { class: "jky-menu-item__title" }, item.title) : null
65
+ ]
66
+ }
67
+ );
68
+ }
69
+ function renderSubMenu(item) {
70
+ var _a;
71
+ const children = item.children || [];
72
+ return h(
73
+ ElSubMenu,
74
+ {
75
+ index: item.index,
76
+ disabled: (_a = item.disabled) != null ? _a : false,
77
+ popperOffset: item.popperOffset
78
+ },
79
+ {
80
+ title: () => [
81
+ item.icon ? h("span", { class: "jky-menu-item__icon" }, [h("span", { class: item.icon })]) : null,
82
+ item.title ? h("span", { class: "jky-menu-item__title" }, item.title) : null
83
+ ],
84
+ default: () => children.map((child) => renderMenuNode(child))
85
+ }
86
+ );
87
+ }
88
+ function renderMenuNode(item) {
89
+ if (item.children && item.children.length > 0) {
90
+ return renderSubMenu(item);
91
+ }
92
+ return renderMenuItem(item);
93
+ }
94
+ return (_ctx, _cache) => {
95
+ return openBlock(), createBlock(unref(ElMenu), mergeProps({ class: "jky-menu" }, _ctx.$attrs), {
96
+ default: withCtx(() => [
97
+ __props.menuData && __props.menuData.length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(__props.menuData, (item) => {
98
+ return openBlock(), createBlock(resolveDynamicComponent(renderMenuNode(item)), {
99
+ key: item.index
100
+ });
101
+ }), 128)) : renderSlot(_ctx.$slots, "default", { key: 1 })
102
+ ]),
103
+ _: 3
104
+ }, 16);
105
+ };
106
+ }
107
+ }));
108
+ export {
109
+ _sfc_main as default
110
+ };
@@ -0,0 +1,5 @@
1
+ import _sfc_main from "./Menu.vue.js";
2
+ /* empty css */
3
+ export {
4
+ _sfc_main as default
5
+ };
@@ -0,0 +1,4 @@
1
+ import { InstallWithSFC } from '../utils';
2
+ import { default as Menu } from './Menu.vue';
3
+ export declare const JkyMenu: InstallWithSFC<typeof Menu>;
4
+ export default JkyMenu;
@@ -0,0 +1,8 @@
1
+ import _sfc_main from "./Menu.vue.js";
2
+ /* empty css */
3
+ import { installWithSFC } from "../utils/with-install.js";
4
+ const JkyMenu = installWithSFC(_sfc_main);
5
+ export {
6
+ JkyMenu,
7
+ JkyMenu as default
8
+ };
@@ -0,0 +1,70 @@
1
+ /* Menu 组件样式 - 使用 CSS 变量实现主题化 */
2
+
3
+ /* 1. 定义 CSS 变量 */
4
+ :root {
5
+ /* 颜色变量 */
6
+ --jky-menu-bg-color: #ffffff;
7
+ --jky-menu-text-color: #303133;
8
+ --jky-menu-active-color: #409eff;
9
+ --jky-menu-hover-bg-color: #f5f7fa;
10
+ --jky-menu-hover-text-color: #606266;
11
+
12
+ /* 尺寸变量 */
13
+ --jky-menu-item-height: 56px;
14
+ --jky-menu-item-padding: 0 20px;
15
+ --jky-menu-item-font-size: 14px;
16
+
17
+ /* 图标 */
18
+ --jky-menu-icon-size: 18px;
19
+ --jky-menu-icon-margin: 8px;
20
+
21
+ /* 边框 */
22
+ --jky-menu-border-color: #e4e7ed;
23
+
24
+ /* 状态变量 */
25
+ --jky-menu-disabled-opacity: 0.5;
26
+ --jky-menu-disabled-text-color: #c0c4cc;
27
+ }
28
+
29
+ /* 2. 基础样式 */
30
+ .jky-menu {
31
+ background-color: var(--jky-menu-bg-color);
32
+ color: var(--jky-menu-text-color);
33
+ }
34
+
35
+ /* 3. 菜单项容器样式 - 确保统一高度 */
36
+ .jky-menu {
37
+ li + li {
38
+ margin-top: 0;
39
+ }
40
+ }
41
+
42
+ /* 4. 菜单项图标样式 */
43
+ .jky-menu-item__icon {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ width: var(--jky-menu-icon-size);
48
+ height: var(--jky-menu-icon-size);
49
+ margin-right: var(--jky-menu-icon-margin);
50
+ font-size: var(--jky-menu-icon-size);
51
+ flex-shrink: 0;
52
+ }
53
+
54
+ /* 5. 菜单项标题样式 */
55
+ .jky-menu-item__title {
56
+ flex: 1;
57
+ font-size: var(--jky-menu-item-font-size);
58
+ color: var(--jky-menu-text-color);
59
+ line-height: normal;
60
+ overflow: hidden;
61
+ text-overflow: ellipsis;
62
+ white-space: nowrap;
63
+ }
64
+
65
+ /* 6. 禁用状态 */
66
+ .jky-menu-item.is-disabled {
67
+ opacity: var(--jky-menu-disabled-opacity);
68
+ color: var(--jky-menu-disabled-text-color);
69
+ cursor: not-allowed;
70
+ }
@@ -1,4 +1,4 @@
1
- const version = "0.0.10";
1
+ const version = "0.0.17";
2
2
  export {
3
3
  version
4
4
  };
@@ -0,0 +1,45 @@
1
+ type __VLS_Props = {
2
+ logo?: string;
3
+ title?: string;
4
+ height?: string | number;
5
+ background?: string;
6
+ backgroundImage?: string;
7
+ statusIcons?: StatusIcon[];
8
+ userName?: string;
9
+ userAvatar?: string;
10
+ };
11
+ interface StatusIcon {
12
+ icon: string | object;
13
+ label: string;
14
+ color?: string;
15
+ onClick?: () => void;
16
+ }
17
+ declare function __VLS_template(): {
18
+ attrs: Partial<{}>;
19
+ slots: {
20
+ center?(_: {}): any;
21
+ time?(_: {}): any;
22
+ };
23
+ refs: {};
24
+ rootEl: HTMLElement;
25
+ };
26
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
27
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
28
+ logout: () => any;
29
+ clearCache: () => any;
30
+ profile: () => any;
31
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
32
+ onLogout?: (() => any) | undefined;
33
+ onClearCache?: (() => any) | undefined;
34
+ onProfile?: (() => any) | undefined;
35
+ }>, {
36
+ height: string | number;
37
+ statusIcons: StatusIcon[];
38
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLElement>;
39
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
40
+ export default _default;
41
+ type __VLS_WithTemplateSlots<T, S> = T & {
42
+ new (): {
43
+ $slots: S;
44
+ };
45
+ };
@@ -0,0 +1,263 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode, toDisplayString, renderSlot, Fragment, renderList, normalizeClass, createBlock, unref, withCtx, resolveDynamicComponent, createVNode, createTextVNode } from "vue";
21
+ import { ElIcon, ElDropdown, ElDropdownMenu, ElDropdownItem } from "element-plus";
22
+ const _hoisted_1 = { class: "jky-page-header__container" };
23
+ const _hoisted_2 = { class: "jky-page-header__left" };
24
+ const _hoisted_3 = ["src", "alt"];
25
+ const _hoisted_4 = {
26
+ key: 1,
27
+ class: "jky-page-header__title"
28
+ };
29
+ const _hoisted_5 = { class: "jky-page-header__center" };
30
+ const _hoisted_6 = { class: "jky-page-header__right" };
31
+ const _hoisted_7 = { class: "jky-page-header__status-icons hidden md:flex" };
32
+ const _hoisted_8 = {
33
+ xmlns: "http://www.w3.org/2000/svg",
34
+ style: { "color": "white" },
35
+ fill: "none",
36
+ viewBox: "0 0 24 24",
37
+ stroke: "currentColor"
38
+ };
39
+ const _hoisted_9 = { class: "jky-page-header__time hidden md:block" };
40
+ const _hoisted_10 = { class: "jky-page-header__user" };
41
+ const _hoisted_11 = ["src", "alt"];
42
+ const _hoisted_12 = {
43
+ key: 2,
44
+ class: "jky-page-header__username hidden md:block"
45
+ };
46
+ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({}, {
47
+ name: "JkyPageHeader"
48
+ }), {
49
+ __name: "PageHeader",
50
+ props: {
51
+ logo: {},
52
+ title: {},
53
+ height: { default: 76 },
54
+ background: {},
55
+ backgroundImage: {},
56
+ statusIcons: { default: () => [] },
57
+ userName: {},
58
+ userAvatar: {}
59
+ },
60
+ emits: ["logout", "clearCache", "profile"],
61
+ setup(__props, { emit: __emit }) {
62
+ const props = __props;
63
+ const emit = __emit;
64
+ const heightValue = computed(() => {
65
+ if (typeof props.height === "number") {
66
+ return `${props.height}px`;
67
+ }
68
+ return props.height;
69
+ });
70
+ const backgroundStyle = computed(() => {
71
+ const style = {};
72
+ if (props.backgroundImage) {
73
+ style.backgroundImage = `url(${props.backgroundImage})`;
74
+ style.backgroundSize = "cover";
75
+ style.backgroundPosition = "center";
76
+ }
77
+ if (props.background) {
78
+ style.backgroundColor = props.background;
79
+ }
80
+ return style;
81
+ });
82
+ function handleLogout() {
83
+ emit("logout");
84
+ }
85
+ function handleClearCache() {
86
+ emit("clearCache");
87
+ }
88
+ function handleProfile() {
89
+ emit("profile");
90
+ }
91
+ return (_ctx, _cache) => {
92
+ return openBlock(), createElementBlock("header", {
93
+ class: "jky-page-header",
94
+ style: normalizeStyle([backgroundStyle.value, { height: heightValue.value }])
95
+ }, [
96
+ createElementVNode("div", _hoisted_1, [
97
+ createElementVNode("div", _hoisted_2, [
98
+ __props.logo ? (openBlock(), createElementBlock("img", {
99
+ key: 0,
100
+ src: __props.logo,
101
+ alt: __props.title || "Logo",
102
+ class: "jky-page-header__logo"
103
+ }, null, 8, _hoisted_3)) : createCommentVNode("", true),
104
+ __props.title ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(__props.title), 1)) : createCommentVNode("", true)
105
+ ]),
106
+ createElementVNode("div", _hoisted_5, [
107
+ renderSlot(_ctx.$slots, "center")
108
+ ]),
109
+ createElementVNode("div", _hoisted_6, [
110
+ createElementVNode("div", _hoisted_7, [
111
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.statusIcons, (icon, index) => {
112
+ return openBlock(), createElementBlock(Fragment, { key: index }, [
113
+ typeof icon.icon === "string" ? (openBlock(), createElementBlock("span", {
114
+ key: 0,
115
+ class: normalizeClass(["jky-page-header__status-icon text-white cursor-pointer", [icon.icon]])
116
+ }, null, 2)) : (openBlock(), createBlock(unref(ElIcon), {
117
+ key: 1,
118
+ size: 20,
119
+ title: icon.label,
120
+ color: icon.color || "white",
121
+ class: "jky-page-header__status-icon cursor-pointer",
122
+ onClick: icon.onClick
123
+ }, {
124
+ default: withCtx(() => [
125
+ (openBlock(), createBlock(resolveDynamicComponent(icon.icon)))
126
+ ]),
127
+ _: 2
128
+ }, 1032, ["title", "color", "onClick"]))
129
+ ], 64);
130
+ }), 128))
131
+ ]),
132
+ __props.statusIcons.length > 0 ? (openBlock(), createBlock(unref(ElDropdown), {
133
+ key: 0,
134
+ trigger: "click",
135
+ class: "md:hidden"
136
+ }, {
137
+ dropdown: withCtx(() => [
138
+ createVNode(unref(ElDropdownMenu), null, {
139
+ default: withCtx(() => [
140
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.statusIcons, (icon, index) => {
141
+ return openBlock(), createBlock(unref(ElDropdownItem), {
142
+ key: index,
143
+ onClick: icon.onClick
144
+ }, {
145
+ default: withCtx(() => [
146
+ typeof icon.icon === "string" ? (openBlock(), createElementBlock("span", {
147
+ key: 0,
148
+ class: normalizeClass(["text-white", [icon.icon]])
149
+ }, null, 2)) : (openBlock(), createBlock(unref(ElIcon), {
150
+ key: 1,
151
+ size: 16,
152
+ class: "mr-2"
153
+ }, {
154
+ default: withCtx(() => [
155
+ (openBlock(), createBlock(resolveDynamicComponent(icon.icon)))
156
+ ]),
157
+ _: 2
158
+ }, 1024)),
159
+ createTextVNode(" " + toDisplayString(icon.label), 1)
160
+ ]),
161
+ _: 2
162
+ }, 1032, ["onClick"]);
163
+ }), 128))
164
+ ]),
165
+ _: 1
166
+ })
167
+ ]),
168
+ default: withCtx(() => [
169
+ createVNode(unref(ElIcon), {
170
+ size: 20,
171
+ class: "jky-page-header__status-icon text-white"
172
+ }, {
173
+ default: withCtx(() => [
174
+ (openBlock(), createElementBlock("svg", _hoisted_8, [..._cache[0] || (_cache[0] = [
175
+ createElementVNode("path", {
176
+ "stroke-linecap": "round",
177
+ "stroke-linejoin": "round",
178
+ "stroke-width": "2",
179
+ d: "M4 6h16M4 12h16M4 18h16"
180
+ }, null, -1)
181
+ ])]))
182
+ ]),
183
+ _: 1
184
+ })
185
+ ]),
186
+ _: 1
187
+ })) : createCommentVNode("", true),
188
+ createElementVNode("div", _hoisted_9, [
189
+ renderSlot(_ctx.$slots, "time", {}, () => [
190
+ createElementVNode("span", null, toDisplayString((/* @__PURE__ */ new Date()).toLocaleString("zh-CN")), 1)
191
+ ])
192
+ ]),
193
+ createVNode(unref(ElDropdown), { trigger: "click" }, {
194
+ dropdown: withCtx(() => [
195
+ createVNode(unref(ElDropdownMenu), null, {
196
+ default: withCtx(() => [
197
+ createVNode(unref(ElDropdownItem), { onClick: handleProfile }, {
198
+ default: withCtx(() => [..._cache[2] || (_cache[2] = [
199
+ createElementVNode("span", { class: "icon-[heroicons--user]" }, null, -1),
200
+ createTextVNode(" 个人信息 ", -1)
201
+ ])]),
202
+ _: 1
203
+ }),
204
+ createVNode(unref(ElDropdownItem), { onClick: handleClearCache }, {
205
+ default: withCtx(() => [..._cache[3] || (_cache[3] = [
206
+ createElementVNode("span", { class: "icon-[heroicons--trash]" }, null, -1),
207
+ createTextVNode(" 清理缓存 ", -1)
208
+ ])]),
209
+ _: 1
210
+ }),
211
+ createVNode(unref(ElDropdownItem), {
212
+ divided: "",
213
+ onClick: handleLogout
214
+ }, {
215
+ default: withCtx(() => [..._cache[4] || (_cache[4] = [
216
+ createElementVNode("span", { class: "icon-[heroicons--arrow-right-on-rectangle]" }, null, -1),
217
+ createTextVNode(" 注销 ", -1)
218
+ ])]),
219
+ _: 1
220
+ })
221
+ ]),
222
+ _: 1
223
+ })
224
+ ]),
225
+ default: withCtx(() => [
226
+ createElementVNode("div", _hoisted_10, [
227
+ __props.userAvatar ? (openBlock(), createBlock(unref(ElIcon), {
228
+ key: 0,
229
+ size: 32,
230
+ class: "jky-page-header__avatar"
231
+ }, {
232
+ default: withCtx(() => [
233
+ createElementVNode("img", {
234
+ src: __props.userAvatar,
235
+ alt: __props.userName,
236
+ class: "rounded-full"
237
+ }, null, 8, _hoisted_11)
238
+ ]),
239
+ _: 1
240
+ })) : (openBlock(), createBlock(unref(ElIcon), {
241
+ key: 1,
242
+ size: 32,
243
+ class: "jky-page-header__avatar"
244
+ }, {
245
+ default: withCtx(() => [..._cache[1] || (_cache[1] = [
246
+ createElementVNode("span", { class: "icon-[heroicons--user]" }, null, -1)
247
+ ])]),
248
+ _: 1
249
+ })),
250
+ __props.userName ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(__props.userName), 1)) : createCommentVNode("", true)
251
+ ])
252
+ ]),
253
+ _: 1
254
+ })
255
+ ])
256
+ ])
257
+ ], 4);
258
+ };
259
+ }
260
+ }));
261
+ export {
262
+ _sfc_main as default
263
+ };
@@ -0,0 +1,5 @@
1
+ import _sfc_main from "./PageHeader.vue.js";
2
+ /* empty css */
3
+ export {
4
+ _sfc_main as default
5
+ };
@@ -0,0 +1,4 @@
1
+ import { InstallWithSFC } from '../utils';
2
+ import { default as PageHeader } from './PageHeader.vue';
3
+ export declare const JkyPageHeader: InstallWithSFC<typeof PageHeader>;
4
+ export default JkyPageHeader;
@@ -0,0 +1,8 @@
1
+ import _sfc_main from "./PageHeader.vue.js";
2
+ /* empty css */
3
+ import { installWithSFC } from "../utils/with-install.js";
4
+ const JkyPageHeader = installWithSFC(_sfc_main);
5
+ export {
6
+ JkyPageHeader,
7
+ JkyPageHeader as default
8
+ };
@@ -0,0 +1,140 @@
1
+ /* PageHeader 组件样式变量 */
2
+ :root {
3
+ /* 背景 */
4
+ --jky-page-header-bg-color: #1890ff;
5
+ --jky-page-header-bg-size: cover;
6
+ --jky-page-header-bg-position: center;
7
+ --jky-page-header-box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
8
+
9
+ /* 布局 */
10
+ --jky-page-header-padding-x: 24px;
11
+ --jky-page-header-padding-x-mobile: 16px;
12
+ --jky-page-header-gap: 16px;
13
+ --jky-page-header-gap-mobile: 12px;
14
+ --jky-page-header-gap-left: 12px;
15
+ --jky-page-header-gap-status: 12px;
16
+ --jky-page-header-gap-center: 24px;
17
+ --jky-page-header-gap-center-mobile: 12px;
18
+
19
+ /* 文字 */
20
+ --jky-page-header-title-color: #ffffff;
21
+ --jky-page-header-title-size: 20px;
22
+ --jky-page-header-title-size-mobile: 16px;
23
+ --jky-page-header-title-weight: 600;
24
+ --jky-page-header-text-color: rgba(255, 255, 255, 0.85);
25
+ --jky-page-header-text-size: 14px;
26
+
27
+ /* 图标 */
28
+ --jky-page-header-icon-color: #ffffff;
29
+ --jky-page-header-icon-size: 20px;
30
+ --jky-page-header-icon-hover-opacity: 0.8;
31
+
32
+ /* Logo */
33
+ --jky-page-header-logo-height: 40px;
34
+
35
+ /* 用户头像 */
36
+ --jky-page-header-avatar-size: 32px;
37
+ }
38
+ .jky-page-header {
39
+ width: 100%;
40
+ background-color: var(--jky-page-header-bg-color);
41
+ background-size: var(--jky-page-header-bg-size);
42
+ background-position: var(--jky-page-header-bg-position);
43
+ box-shadow: var(--jky-page-header-box-shadow);
44
+ }
45
+ .jky-page-header__container {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: space-between;
49
+ height: 100%;
50
+ padding: 0 var(--jky-page-header-padding-x);
51
+ margin: 0 auto;
52
+ max-width: 100%;
53
+ }
54
+ /* 左侧区域 */
55
+ .jky-page-header__left {
56
+ display: flex;
57
+ align-items: center;
58
+ gap: var(--jky-page-header-gap-left);
59
+ flex-shrink: 0;
60
+ }
61
+ .jky-page-header__logo {
62
+ height: var(--jky-page-header-logo-height);
63
+ width: auto;
64
+ object-fit: contain;
65
+ }
66
+ .jky-page-header__title {
67
+ font-size: var(--jky-page-header-title-size);
68
+ font-weight: var(--jky-page-header-title-weight);
69
+ color: var(--jky-page-header-title-color);
70
+ white-space: nowrap;
71
+ }
72
+ /* 中间区域 */
73
+ .jky-page-header__center {
74
+ flex: 1;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ min-width: 0;
79
+ margin: 0 var(--jky-page-header-gap-center);
80
+ }
81
+ /* 右侧区域 */
82
+ .jky-page-header__right {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: var(--jky-page-header-gap);
86
+ flex-shrink: 0;
87
+ }
88
+ .jky-page-header__status-icons {
89
+ display: flex;
90
+ align-items: center;
91
+ gap: var(--jky-page-header-gap-status);
92
+ }
93
+ .jky-page-header__status-icon {
94
+ color: var(--jky-page-header-icon-color);
95
+ cursor: pointer;
96
+ transition: opacity 0.2s;
97
+ &:hover {
98
+ opacity: var(--jky-page-header-icon-hover-opacity);
99
+ }
100
+ }
101
+ .jky-page-header__time {
102
+ color: var(--jky-page-header-text-color);
103
+ font-size: var(--jky-page-header-text-size);
104
+ white-space: nowrap;
105
+ }
106
+ .jky-page-header__user {
107
+ display: flex;
108
+ align-items: center;
109
+ gap: 8px;
110
+ cursor: pointer;
111
+ color: var(--jky-page-header-text-color);
112
+ }
113
+ .jky-page-header__avatar {
114
+ color: var(--jky-page-header-icon-color);
115
+ img {
116
+ width: 100%;
117
+ height: 100%;
118
+ object-fit: cover;
119
+ }
120
+ }
121
+ .jky-page-header__username {
122
+ font-size: var(--jky-page-header-text-size);
123
+ color: var(--jky-page-header-text-color);
124
+ white-space: nowrap;
125
+ }
126
+ /* 响应式设计 */
127
+ @media (max-width: 768px) {
128
+ .jky-page-header__container {
129
+ padding: 0 var(--jky-page-header-padding-x-mobile);
130
+ }
131
+ .jky-page-header__title {
132
+ font-size: var(--jky-page-header-title-size-mobile);
133
+ }
134
+ .jky-page-header__center {
135
+ margin: 0 var(--jky-page-header-gap-center-mobile);
136
+ }
137
+ .jky-page-header__right {
138
+ gap: var(--jky-page-header-gap-mobile);
139
+ }
140
+ }
@@ -1,2 +1,2 @@
1
1
  import { ComponentResolver } from 'unplugin-vue-components';
2
- export declare function StarterLibVue3Resolver(): ComponentResolver;
2
+ export declare function JkyComponentLibResolver(): ComponentResolver;