jky-component-lib 0.0.65 → 0.0.72

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 (75) hide show
  1. package/dist/es/components.d.ts +1 -0
  2. package/dist/es/components.js +4 -1
  3. package/dist/es/form/Form.vue.d.ts +8 -8
  4. package/dist/es/index.js +15 -0
  5. package/dist/es/menu/Menu.vue.d.ts +5 -4
  6. package/dist/es/menu/Menu.vue.js +63 -70
  7. package/dist/es/menu/MenuItem.vue.d.ts +7 -0
  8. package/dist/es/menu/MenuItem.vue.js +67 -0
  9. package/dist/es/menu/MenuItem.vue2.js +4 -0
  10. package/dist/es/menu/style.css +3 -2
  11. package/dist/es/package.json.js +1 -1
  12. package/dist/es/page-header/PageHeader.vue.js +2 -2
  13. package/dist/es/page-header/PopoverMenu.vue.js +2 -2
  14. package/dist/es/page-layout/PageLayout.vue.d.ts +11 -31
  15. package/dist/es/page-layout/PageLayout.vue.js +274 -103
  16. package/dist/es/page-layout/style.css +59 -0
  17. package/dist/es/page-table/PageTable.vue.d.ts +28 -28
  18. package/dist/es/style.css +1190 -69
  19. package/dist/es/styles.css +1 -1
  20. package/dist/es/tabs/TabContent.vue.d.ts +16 -0
  21. package/dist/es/tabs/TabContent.vue.js +65 -0
  22. package/dist/es/tabs/TabContent.vue3.js +5 -0
  23. package/dist/es/tabs/Tabs.vue.d.ts +46 -0
  24. package/dist/es/tabs/Tabs.vue.js +311 -0
  25. package/dist/es/tabs/Tabs.vue3.js +5 -0
  26. package/dist/es/tabs/index.d.ts +9 -0
  27. package/dist/es/tabs/index.js +8 -0
  28. package/dist/es/tabs/routeListener.d.ts +19 -0
  29. package/dist/es/tabs/routeListener.js +26 -0
  30. package/dist/es/tabs/style.css +29 -0
  31. package/dist/es/tabs/useTabs.d.ts +27 -0
  32. package/dist/es/tabs/useTabs.js +59 -0
  33. package/dist/es/tabs/useTabsStore.d.ts +53 -0
  34. package/dist/es/tabs/useTabsStore.js +208 -0
  35. package/dist/lib/components.d.ts +1 -0
  36. package/dist/lib/components.js +4 -1
  37. package/dist/lib/form/Form.vue.d.ts +8 -8
  38. package/dist/lib/index.js +15 -0
  39. package/dist/lib/menu/Menu.vue.d.ts +5 -4
  40. package/dist/lib/menu/Menu.vue.js +62 -69
  41. package/dist/lib/menu/MenuItem.vue.d.ts +7 -0
  42. package/dist/lib/menu/MenuItem.vue.js +67 -0
  43. package/dist/lib/menu/MenuItem.vue2.js +4 -0
  44. package/dist/lib/menu/style.css +3 -2
  45. package/dist/lib/package.json.js +1 -1
  46. package/dist/lib/page-header/PageHeader.vue.js +3 -3
  47. package/dist/lib/page-header/PopoverMenu.vue.js +2 -2
  48. package/dist/lib/page-layout/PageLayout.vue.d.ts +11 -31
  49. package/dist/lib/page-layout/PageLayout.vue.js +273 -102
  50. package/dist/lib/page-layout/style.css +59 -0
  51. package/dist/lib/page-table/PageTable.vue.d.ts +28 -28
  52. package/dist/lib/style.css +1190 -69
  53. package/dist/lib/styles.css +1 -1
  54. package/dist/lib/tabs/TabContent.vue.d.ts +16 -0
  55. package/dist/lib/tabs/TabContent.vue.js +65 -0
  56. package/dist/lib/tabs/TabContent.vue3.js +5 -0
  57. package/dist/lib/tabs/Tabs.vue.d.ts +46 -0
  58. package/dist/lib/tabs/Tabs.vue.js +311 -0
  59. package/dist/lib/tabs/Tabs.vue3.js +5 -0
  60. package/dist/lib/tabs/index.d.ts +9 -0
  61. package/dist/lib/tabs/index.js +8 -0
  62. package/dist/lib/tabs/routeListener.d.ts +19 -0
  63. package/dist/lib/tabs/routeListener.js +26 -0
  64. package/dist/lib/tabs/style.css +29 -0
  65. package/dist/lib/tabs/useTabs.d.ts +27 -0
  66. package/dist/lib/tabs/useTabs.js +59 -0
  67. package/dist/lib/tabs/useTabsStore.d.ts +53 -0
  68. package/dist/lib/tabs/useTabsStore.js +208 -0
  69. package/package.json +21 -4
  70. package/dist/es/menu/Aside.vue.d.ts +0 -17
  71. package/dist/es/menu/Aside.vue.js +0 -44
  72. package/dist/es/menu/Aside.vue2.js +0 -4
  73. package/dist/lib/menu/Aside.vue.d.ts +0 -17
  74. package/dist/lib/menu/Aside.vue.js +0 -44
  75. package/dist/lib/menu/Aside.vue2.js +0 -4
@@ -0,0 +1,59 @@
1
+ import { computed } from "vue";
2
+ import { useTabsStore } from "./useTabsStore.js";
3
+ function useTabs(store) {
4
+ const tabsStore = store || useTabsStore();
5
+ function getCurrentTab() {
6
+ return tabsStore.tabList.find(
7
+ (t) => t.name === tabsStore.activeTab
8
+ );
9
+ }
10
+ function addTab(tab) {
11
+ tabsStore.addTab(tab);
12
+ }
13
+ function closeTab(name) {
14
+ const tabName = name || tabsStore.activeTab;
15
+ tabsStore.removeTab(tabName);
16
+ }
17
+ function closeLeft(name) {
18
+ const tabName = name || tabsStore.activeTab;
19
+ tabsStore.closeLeft(tabName);
20
+ }
21
+ function closeRight(name) {
22
+ const tabName = name || tabsStore.activeTab;
23
+ tabsStore.closeRight(tabName);
24
+ }
25
+ function closeOther(name) {
26
+ const tabName = name || tabsStore.activeTab;
27
+ tabsStore.closeOther(tabName);
28
+ }
29
+ function closeAll() {
30
+ tabsStore.closeAll();
31
+ }
32
+ function refresh(name) {
33
+ const tabName = name || tabsStore.activeTab;
34
+ tabsStore.refresh(tabName);
35
+ }
36
+ function setTitle(title, name) {
37
+ const tabName = name || tabsStore.activeTab;
38
+ tabsStore.updateTab(tabName, { label: title });
39
+ }
40
+ return {
41
+ // 状态
42
+ activeTab: computed(() => tabsStore.activeTab),
43
+ tabList: computed(() => tabsStore.getTabList()),
44
+ cacheTabs: computed(() => tabsStore.getCacheTabs()),
45
+ // 方法
46
+ getCurrentTab,
47
+ addTab,
48
+ closeTab,
49
+ closeLeft,
50
+ closeRight,
51
+ closeOther,
52
+ closeAll,
53
+ refresh,
54
+ setTitle
55
+ };
56
+ }
57
+ export {
58
+ useTabs
59
+ };
@@ -0,0 +1,53 @@
1
+ import { TabItem } from './types';
2
+ /**
3
+ * Tabs Store 返回类型
4
+ * 注意:Pinia 会自动解包 Ref,所以这里使用 UnwrapRef
5
+ */
6
+ export interface TabsStoreReturn {
7
+ tabList: TabItem[];
8
+ activeTab: string;
9
+ cacheTabs: string[];
10
+ closedTabs: string[];
11
+ addTab: (tab: TabItem) => void;
12
+ updateTab: (name: string, tab: Partial<TabItem>) => void;
13
+ removeTab: (name: string) => void;
14
+ setActiveTab: (name: string) => void;
15
+ addCache: (name: string) => void;
16
+ removeCache: (name: string) => void;
17
+ bulkRemove: (names: string[]) => void;
18
+ closeLeft: (name: string) => void;
19
+ closeRight: (name: string) => void;
20
+ closeOther: (name: string) => void;
21
+ closeAll: () => void;
22
+ refresh: (name: string) => void;
23
+ getTabList: () => TabItem[];
24
+ getCacheTabs: () => string[];
25
+ isClosed: (name: string) => boolean;
26
+ isCached: (name: string) => boolean;
27
+ reset: () => void;
28
+ }
29
+ /**
30
+ * Tabs Store
31
+ * 使用 Pinia 管理标签页状态和缓存
32
+ *
33
+ * @param persist - 是否启用持久化(默认 false)
34
+ * @param persistKey - 持久化 key(可选,默认 'jky-tabs-state')
35
+ */
36
+ export declare function createTabsStore(persist?: boolean, persistKey?: string): TabsStoreReturn;
37
+ /**
38
+ * 获取或创建 Tabs Store
39
+ *
40
+ * @param persist - 是否启用持久化(默认 false)
41
+ * @param persistKey - 持久化 key(可选)
42
+ */
43
+ export declare function useTabsStore(persist?: boolean, persistKey?: string): TabsStoreReturn;
44
+ /**
45
+ * 重置 Store
46
+ */
47
+ export declare function resetTabsStore(): void;
48
+ /**
49
+ * 在应用中提供持久化 key
50
+ */
51
+ export declare function provideTabsPersistKey(key: string): {
52
+ key: string;
53
+ };
@@ -0,0 +1,208 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ import { defineStore } from "pinia";
18
+ import { ref, shallowRef, computed, inject } from "vue";
19
+ const PERSIST_KEY_SYMBOL = Symbol("jky-tabs-persist-key");
20
+ const DEFAULT_PERSIST_KEY = "jky-tabs-state";
21
+ function getPersistConfig(persist, persistKey) {
22
+ const injectedPersistKey = inject(PERSIST_KEY_SYMBOL, void 0);
23
+ const finalPersistKey = injectedPersistKey || persistKey || DEFAULT_PERSIST_KEY;
24
+ return {
25
+ enabled: persist !== void 0 ? persist : false,
26
+ key: finalPersistKey
27
+ };
28
+ }
29
+ function loadFromStorage(key) {
30
+ try {
31
+ const stored = localStorage.getItem(key);
32
+ if (stored) {
33
+ return JSON.parse(stored);
34
+ }
35
+ } catch (error) {
36
+ console.warn("Failed to load tabs from storage:", error);
37
+ }
38
+ return null;
39
+ }
40
+ function saveToStorage(key, data) {
41
+ try {
42
+ localStorage.setItem(key, JSON.stringify(data));
43
+ } catch (error) {
44
+ console.warn("Failed to save tabs to storage:", error);
45
+ }
46
+ }
47
+ function createTabsStore(persist, persistKey) {
48
+ const persistConfig = getPersistConfig(persist, persistKey);
49
+ const initialData = persistConfig.enabled ? loadFromStorage(persistConfig.key) : null;
50
+ const store = defineStore("jky-tabs", () => {
51
+ const tabList = ref((initialData == null ? void 0 : initialData.tabList) || []);
52
+ const activeTab = ref((initialData == null ? void 0 : initialData.activeTab) || "");
53
+ const cacheTabs = shallowRef((initialData == null ? void 0 : initialData.cacheTabs) || []);
54
+ const closedTabs = shallowRef((initialData == null ? void 0 : initialData.closedTabs) || []);
55
+ const cacheSet = computed(() => new Set(cacheTabs.value));
56
+ const closedSet = computed(() => new Set(closedTabs.value));
57
+ function persistState() {
58
+ if (!persistConfig.enabled)
59
+ return;
60
+ saveToStorage(persistConfig.key, {
61
+ tabList: tabList.value,
62
+ activeTab: activeTab.value,
63
+ cacheTabs: cacheTabs.value,
64
+ closedTabs: closedTabs.value
65
+ });
66
+ }
67
+ function addTab(tab) {
68
+ const index = tabList.value.findIndex((t) => t.name === tab.name);
69
+ if (index !== -1) {
70
+ tabList.value[index] = __spreadValues(__spreadValues({}, tabList.value[index]), tab);
71
+ } else {
72
+ tabList.value.push(tab);
73
+ }
74
+ persistState();
75
+ }
76
+ function updateTab(name, tab) {
77
+ const index = tabList.value.findIndex((t) => t.name === name);
78
+ if (index !== -1) {
79
+ tabList.value[index] = __spreadValues(__spreadValues({}, tabList.value[index]), tab);
80
+ persistState();
81
+ }
82
+ }
83
+ function removeTab(name) {
84
+ const index = tabList.value.findIndex((t) => t.name === name);
85
+ if (index !== -1) {
86
+ tabList.value.splice(index, 1);
87
+ removeCache(name);
88
+ if (activeTab.value === name && tabList.value.length > 0) {
89
+ const nextTab = tabList.value[index] || tabList.value[index - 1];
90
+ if (nextTab) {
91
+ activeTab.value = nextTab.name;
92
+ }
93
+ }
94
+ persistState();
95
+ }
96
+ }
97
+ function setActiveTab(name) {
98
+ activeTab.value = name;
99
+ persistState();
100
+ }
101
+ function addCache(name) {
102
+ if (!cacheSet.value.has(name)) {
103
+ cacheTabs.value = [...cacheTabs.value, name];
104
+ persistState();
105
+ }
106
+ }
107
+ function removeCache(name) {
108
+ cacheTabs.value = cacheTabs.value.filter((t) => t !== name);
109
+ persistState();
110
+ }
111
+ function bulkRemove(names) {
112
+ tabList.value = tabList.value.filter((tab) => !names.includes(tab.name));
113
+ names.forEach((name) => removeCache(name));
114
+ persistState();
115
+ }
116
+ function closeLeft(name) {
117
+ const index = tabList.value.findIndex((t) => t.name === name);
118
+ if (index > 0) {
119
+ const leftTabs = tabList.value.slice(0, index);
120
+ const removableTabs = leftTabs.filter((tab) => !tab.affix);
121
+ bulkRemove(removableTabs.map((tab) => tab.name));
122
+ }
123
+ }
124
+ function closeRight(name) {
125
+ const index = tabList.value.findIndex((t) => t.name === name);
126
+ if (index >= 0 && index < tabList.value.length - 1) {
127
+ const rightTabs = tabList.value.slice(index + 1);
128
+ const removableTabs = rightTabs.filter((tab) => !tab.affix);
129
+ bulkRemove(removableTabs.map((tab) => tab.name));
130
+ }
131
+ }
132
+ function closeOther(name) {
133
+ const removableTabs = tabList.value.filter(
134
+ (tab) => tab.name !== name && !tab.affix
135
+ );
136
+ bulkRemove(removableTabs.map((tab) => tab.name));
137
+ }
138
+ function closeAll() {
139
+ const removableTabs = tabList.value.filter((tab) => !tab.affix);
140
+ bulkRemove(removableTabs.map((tab) => tab.name));
141
+ }
142
+ function refresh(name) {
143
+ removeCache(name);
144
+ setTimeout(() => {
145
+ addCache(name);
146
+ }, 0);
147
+ }
148
+ function getTabList() {
149
+ return [...tabList.value];
150
+ }
151
+ function getCacheTabs() {
152
+ return [...cacheTabs.value];
153
+ }
154
+ function isClosed(name) {
155
+ return closedSet.value.has(name);
156
+ }
157
+ function isCached(name) {
158
+ return cacheSet.value.has(name);
159
+ }
160
+ function reset() {
161
+ tabList.value = [];
162
+ activeTab.value = "";
163
+ cacheTabs.value = [];
164
+ closedTabs.value = [];
165
+ persistState();
166
+ }
167
+ return {
168
+ tabList,
169
+ activeTab,
170
+ cacheTabs,
171
+ closedTabs,
172
+ addTab,
173
+ updateTab,
174
+ removeTab,
175
+ setActiveTab,
176
+ addCache,
177
+ removeCache,
178
+ bulkRemove,
179
+ closeLeft,
180
+ closeRight,
181
+ closeOther,
182
+ closeAll,
183
+ refresh,
184
+ getTabList,
185
+ getCacheTabs,
186
+ isClosed,
187
+ isCached,
188
+ reset
189
+ };
190
+ });
191
+ return store();
192
+ }
193
+ const storeInstances = /* @__PURE__ */ new Map();
194
+ function useTabsStore(persist, persistKey) {
195
+ const key = persistKey || DEFAULT_PERSIST_KEY;
196
+ if (!storeInstances.has(key)) {
197
+ storeInstances.set(key, () => createTabsStore(persist, persistKey));
198
+ }
199
+ return storeInstances.get(key)();
200
+ }
201
+ function resetTabsStore() {
202
+ storeInstances.clear();
203
+ }
204
+ export {
205
+ createTabsStore,
206
+ resetTabsStore,
207
+ useTabsStore
208
+ };
@@ -10,5 +10,6 @@ export * from './page-layout';
10
10
  export * from './page-table';
11
11
  export * from './rich-editor';
12
12
  export * from './say-hello';
13
+ export * from './tabs';
13
14
  export declare const components: Plugin[];
14
15
  export default components;
@@ -11,6 +11,7 @@ const index$7 = require("./page-layout/index.js");
11
11
  const index$8 = require("./page-table/index.js");
12
12
  const index$9 = require("./rich-editor/index.js");
13
13
  const index$a = require("./say-hello/index.js");
14
+ const index$b = require("./tabs/index.js");
14
15
  const components = [
15
16
  index$a.JkySayHello,
16
17
  index$1.JkyButton,
@@ -22,7 +23,8 @@ const components = [
22
23
  index.JkyAddInput,
23
24
  index$9.JkyRichEditor,
24
25
  index$8.JkyPageTable,
25
- index$7.JkyPageLayout
26
+ index$7.JkyPageLayout,
27
+ index$b.JkyTabs
26
28
  ];
27
29
  exports.JkyAddInput = index.JkyAddInput;
28
30
  exports.JkyButton = index$1.JkyButton;
@@ -35,4 +37,5 @@ exports.JkyPageLayout = index$7.JkyPageLayout;
35
37
  exports.JkyPageTable = index$8.JkyPageTable;
36
38
  exports.JkyRichEditor = index$9.JkyRichEditor;
37
39
  exports.JkySayHello = index$a.JkySayHello;
40
+ exports.JkyTabs = index$b.JkyTabs;
38
41
  exports.components = components;
@@ -88,7 +88,7 @@ declare function getFormInstance(): ({
88
88
  validateOnRuleChange: boolean;
89
89
  }> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
90
90
  onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
91
- }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
91
+ }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & {
92
92
  validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
93
93
  validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
94
94
  resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
@@ -97,7 +97,7 @@ declare function getFormInstance(): ({
97
97
  getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
98
98
  fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
99
99
  setInitialValues: (initModel: Record<string, any>) => void;
100
- }> & {} & import('vue').ComponentCustomProperties & {} & {
100
+ } & {} & import('vue').ComponentCustomProperties & {} & {
101
101
  $slots: {
102
102
  default?: (props: {}) => any;
103
103
  };
@@ -195,7 +195,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
195
195
  validateOnRuleChange: boolean;
196
196
  }> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
197
197
  onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
198
- }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
198
+ }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & {
199
199
  validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
200
200
  validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
201
201
  resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
@@ -204,7 +204,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
204
204
  getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
205
205
  fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
206
206
  setInitialValues: (initModel: Record<string, any>) => void;
207
- }> & {} & import('vue').ComponentCustomProperties & {} & {
207
+ } & {} & import('vue').ComponentCustomProperties & {} & {
208
208
  $slots: {
209
209
  default?: (props: {}) => any;
210
210
  };
@@ -293,7 +293,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
293
293
  validateOnRuleChange: boolean;
294
294
  }> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
295
295
  onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
296
- }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
296
+ }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & {
297
297
  validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
298
298
  validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
299
299
  resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
@@ -302,7 +302,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
302
302
  getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
303
303
  fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
304
304
  setInitialValues: (initModel: Record<string, any>) => void;
305
- }> & {} & import('vue').ComponentCustomProperties & {} & {
305
+ } & {} & import('vue').ComponentCustomProperties & {} & {
306
306
  $slots: {
307
307
  default?: (props: {}) => any;
308
308
  };
@@ -427,7 +427,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
427
427
  validateOnRuleChange: boolean;
428
428
  }> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
429
429
  onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
430
- }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
430
+ }>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & {
431
431
  validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
432
432
  validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
433
433
  resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
@@ -436,7 +436,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
436
436
  getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
437
437
  fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
438
438
  setInitialValues: (initModel: Record<string, any>) => void;
439
- }> & {} & import('vue').ComponentCustomProperties & {} & {
439
+ } & {} & import('vue').ComponentCustomProperties & {} & {
440
440
  $slots: {
441
441
  default?: (props: {}) => any;
442
442
  };
package/dist/lib/index.js CHANGED
@@ -4,6 +4,8 @@ const components = require("./components.js");
4
4
  const installer$1 = require("./utils/installer.js");
5
5
  ;/* empty css */
6
6
  const resolver = require("./resolver.js");
7
+ const TabContent_vue_vue_type_script_setup_true_lang = require("./tabs/TabContent.vue.js");
8
+ ;/* empty css */
7
9
  const index = require("./add-input/index.js");
8
10
  const index$1 = require("./button/index.js");
9
11
  const index$2 = require("./button-nav/index.js");
@@ -15,11 +17,16 @@ const index$7 = require("./page-layout/index.js");
15
17
  const index$8 = require("./page-table/index.js");
16
18
  const index$9 = require("./rich-editor/index.js");
17
19
  const index$a = require("./say-hello/index.js");
20
+ const index$b = require("./tabs/index.js");
21
+ const routeListener = require("./tabs/routeListener.js");
22
+ const useTabsStore = require("./tabs/useTabsStore.js");
23
+ const useTabs = require("./tabs/useTabs.js");
18
24
  const installer = installer$1.createInstaller(components.components);
19
25
  const install = installer.install;
20
26
  const version = installer.version;
21
27
  exports.components = components.components;
22
28
  exports.JkyComponentLibResolver = resolver.JkyComponentLibResolver;
29
+ exports.JkyTabContent = TabContent_vue_vue_type_script_setup_true_lang.default;
23
30
  exports.JkyAddInput = index.JkyAddInput;
24
31
  exports.JkyButton = index$1.JkyButton;
25
32
  exports.JkyButtonNav = index$2.JkyButtonNav;
@@ -31,6 +38,14 @@ exports.JkyPageLayout = index$7.JkyPageLayout;
31
38
  exports.JkyPageTable = index$8.JkyPageTable;
32
39
  exports.JkyRichEditor = index$9.JkyRichEditor;
33
40
  exports.JkySayHello = index$a.JkySayHello;
41
+ exports.JkyTabs = index$b.JkyTabs;
42
+ exports.clearRouteListeners = routeListener.clearRouteListeners;
43
+ exports.emitRouteChange = routeListener.emitRouteChange;
44
+ exports.onRouteChange = routeListener.onRouteChange;
45
+ exports.createTabsStore = useTabsStore.createTabsStore;
46
+ exports.resetTabsStore = useTabsStore.resetTabsStore;
47
+ exports.useTabsStore = useTabsStore.useTabsStore;
48
+ exports.useTabs = useTabs.useTabs;
34
49
  exports.default = installer;
35
50
  exports.install = install;
36
51
  exports.version = version;
@@ -1,17 +1,18 @@
1
- import { MenuItem, MenuProps } from './types';
1
+ import { MenuProps } from './types';
2
2
  declare function __VLS_template(): {
3
3
  attrs: Partial<{}>;
4
4
  slots: {
5
5
  default?(_: {}): any;
6
- default?(_: {}): any;
7
6
  };
8
7
  refs: {};
9
8
  rootEl: any;
10
9
  };
11
10
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
12
11
  declare const __VLS_component: import('vue').DefineComponent<MenuProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<MenuProps> & Readonly<{}>, {
13
- aside: boolean;
14
- menuData: MenuItem[];
12
+ levels: number;
13
+ readonly uniqueOpened: boolean;
14
+ readonly menuTrigger: import('element-plus/es/utils').EpPropMergeType<StringConstructor, "click" | "hover", unknown>;
15
+ menuData: import('./types').MenuItem[];
15
16
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
16
17
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
17
18
  export default _default;
@@ -21,20 +21,29 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
21
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
22
22
  const vue = require("vue");
23
23
  const ElementPlus = require("element-plus");
24
- const Aside_vue_vue_type_script_setup_true_lang = require("./Aside.vue.js");
24
+ const MenuItem_vue_vue_type_script_setup_true_lang = require("./MenuItem.vue.js");
25
+ const _hoisted_1 = {
26
+ key: 1,
27
+ class: "jky-menu-item__title"
28
+ };
29
+ const _hoisted_2 = {
30
+ key: 1,
31
+ class: "jky-menu-item__title"
32
+ };
25
33
  const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValues({}, {
26
- name: "JkyMenu"
34
+ name: "JkyMenu",
35
+ inheritAttrs: false
27
36
  }), {
28
37
  __name: "Menu",
29
38
  props: {
30
- aside: { type: Boolean, default: false },
31
39
  menuData: { default: () => [] },
40
+ levels: { default: 0 },
32
41
  mode: {},
33
42
  defaultActive: {},
34
43
  defaultOpeneds: {},
35
- uniqueOpened: { type: Boolean },
44
+ uniqueOpened: { type: Boolean, default: true },
36
45
  router: { type: Boolean },
37
- menuTrigger: {},
46
+ menuTrigger: { default: "click" },
38
47
  collapse: { type: Boolean },
39
48
  backgroundColor: {},
40
49
  textColor: {},
@@ -53,76 +62,60 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
53
62
  },
54
63
  setup(__props) {
55
64
  const props = __props;
56
- function renderMenuItem(item) {
57
- var _a;
58
- return vue.h(
59
- ElementPlus.ElMenuItem,
60
- {
61
- index: item.index || item.id || "",
62
- disabled: (_a = item.disabled) != null ? _a : false,
63
- route: item.route
64
- },
65
- {
66
- default: () => [
67
- item.icon ? vue.h("span", { class: "jky-menu-item__icon" }, [vue.h("span", { class: item.icon })]) : null,
68
- item.title ? vue.h("span", { class: "jky-menu-item__title" }, item.title) : null
69
- ]
70
- }
71
- );
72
- }
73
- function renderSubMenu(item) {
74
- var _a;
75
- const children = item.children || [];
76
- return vue.h(
77
- ElementPlus.ElSubMenu,
78
- {
79
- index: item.index || item.id || "",
80
- disabled: (_a = item.disabled) != null ? _a : false,
81
- popperOffset: item.popperOffset
82
- },
83
- {
84
- title: () => [
85
- item.icon ? vue.h("span", { class: "jky-menu-item__icon" }, [vue.h("span", { class: item.icon })]) : null,
86
- item.title ? vue.h("span", { class: "jky-menu-item__title" }, item.title) : null
87
- ],
88
- default: () => children.map((child) => renderMenuNode(child))
89
- }
90
- );
91
- }
92
- function renderMenuNode(item) {
93
- if (item.children && item.children.length > 0) {
94
- return renderSubMenu(item);
95
- }
96
- return renderMenuItem(item);
97
- }
65
+ const attrs = vue.useAttrs();
98
66
  return (_ctx, _cache) => {
99
- return props.aside ? (vue.openBlock(), vue.createBlock(Aside_vue_vue_type_script_setup_true_lang.default, { key: 0 }, {
100
- default: vue.withCtx(() => [
101
- vue.createVNode(vue.unref(ElementPlus.ElMenu), vue.mergeProps({ class: "jky-menu" }, __spreadValues(__spreadValues({}, props), _ctx.$attrs)), {
102
- default: vue.withCtx(() => [
103
- props.menuData && props.menuData.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(props.menuData, (item) => {
104
- return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderMenuNode(item)), {
105
- key: item.index || item.id
106
- });
107
- }), 128)) : vue.renderSlot(_ctx.$slots, "default", { key: 1 })
108
- ]),
109
- _: 3
110
- }, 16)
111
- ]),
112
- _: 3
113
- })) : (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElMenu), vue.mergeProps({
114
- key: 1,
115
- class: "jky-menu"
116
- }, __spreadValues(__spreadValues({}, props), _ctx.$attrs)), {
67
+ return vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElMenu), vue.mergeProps({ class: "jky-menu" }, __spreadValues(__spreadValues({}, vue.unref(attrs)), props)), {
117
68
  default: vue.withCtx(() => [
118
69
  props.menuData && props.menuData.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(props.menuData, (item) => {
119
- return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderMenuNode(item)), {
120
- key: item.index || item.id
121
- });
70
+ var _a, _b;
71
+ return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
72
+ key: item.index
73
+ }, [
74
+ item.children && item.children.length > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElSubMenu), {
75
+ key: 0,
76
+ index: item.index || "",
77
+ class: vue.normalizeClass(item.customClass),
78
+ disabled: (_a = item.disabled) != null ? _a : false,
79
+ "popper-offset": item.popperOffset
80
+ }, {
81
+ title: vue.withCtx(() => [
82
+ item.icon ? (vue.openBlock(), vue.createElementBlock("span", {
83
+ key: 0,
84
+ class: vue.normalizeClass([item.icon, "jky-menu-item__icon"])
85
+ }, null, 2)) : vue.createCommentVNode("", true),
86
+ item.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1, vue.toDisplayString(item.title), 1)) : vue.createCommentVNode("", true)
87
+ ]),
88
+ default: vue.withCtx(() => [
89
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(item.children, (child) => {
90
+ return vue.openBlock(), vue.createBlock(MenuItem_vue_vue_type_script_setup_true_lang.default, {
91
+ key: child.index,
92
+ item: child,
93
+ levels: props.levels > 0 ? props.levels - 1 : 0
94
+ }, null, 8, ["item", "levels"]);
95
+ }), 128))
96
+ ]),
97
+ _: 2
98
+ }, 1032, ["index", "class", "disabled", "popper-offset"])) : (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElMenuItem), {
99
+ key: 1,
100
+ index: item.index || "",
101
+ class: vue.normalizeClass(item.customClass),
102
+ disabled: (_b = item.disabled) != null ? _b : false,
103
+ route: item.route
104
+ }, {
105
+ default: vue.withCtx(() => [
106
+ item.icon ? (vue.openBlock(), vue.createElementBlock("span", {
107
+ key: 0,
108
+ class: vue.normalizeClass([item.icon, "jky-menu-item__icon"])
109
+ }, null, 2)) : vue.createCommentVNode("", true),
110
+ item.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2, vue.toDisplayString(item.title), 1)) : vue.createCommentVNode("", true)
111
+ ]),
112
+ _: 2
113
+ }, 1032, ["index", "class", "disabled", "route"]))
114
+ ], 64);
122
115
  }), 128)) : vue.renderSlot(_ctx.$slots, "default", { key: 1 })
123
116
  ]),
124
117
  _: 3
125
- }, 16));
118
+ }, 16);
126
119
  };
127
120
  }
128
121
  }));
@@ -0,0 +1,7 @@
1
+ import { MenuItem as MenuItemType } from './types';
2
+ type __VLS_Props = {
3
+ item: MenuItemType;
4
+ levels?: number;
5
+ };
6
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
7
+ export default _default;