@veltra/desktop 1.2.4 → 1.2.5

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 (135) hide show
  1. package/dist/components/action/action-group.vue.d.ts +2 -2
  2. package/dist/components/action/action.vue.d.ts +2 -2
  3. package/dist/components/auto-complete/auto-complete.js +25 -13
  4. package/dist/components/auto-complete/auto-complete.js.map +1 -1
  5. package/dist/components/auto-complete/auto-complete.vue.d.ts +3 -2
  6. package/dist/components/batch-edit/batch-edit-form.js +33 -26
  7. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  8. package/dist/components/batch-edit/batch-edit-list.js +4 -1
  9. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  10. package/dist/components/batch-edit/batch-edit.js +29 -50
  11. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  12. package/dist/components/batch-edit/batch-edit.vue.d.ts +3 -3
  13. package/dist/components/batch-edit/di.js.map +1 -1
  14. package/dist/components/batch-edit/style2.css +3 -0
  15. package/dist/components/batch-edit/use-edit.js +39 -71
  16. package/dist/components/batch-edit/use-edit.js.map +1 -1
  17. package/dist/components/batch-edit/use-features.js +38 -0
  18. package/dist/components/batch-edit/use-features.js.map +1 -0
  19. package/dist/components/cascade/cascade.vue.d.ts +1 -1
  20. package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
  21. package/dist/components/contextmenu/style2.css +7 -7
  22. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  23. package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
  24. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
  25. package/dist/components/dual-nav/dual-nav-app.js +49 -0
  26. package/dist/components/dual-nav/dual-nav-app.js.map +1 -0
  27. package/dist/components/dual-nav/dual-nav.js +125 -0
  28. package/dist/components/dual-nav/dual-nav.js.map +1 -0
  29. package/dist/components/dual-nav/dual-nav.vue.d.ts +13 -0
  30. package/dist/components/dual-nav/helper.js +21 -0
  31. package/dist/components/dual-nav/helper.js.map +1 -0
  32. package/dist/components/dual-nav/index.d.ts +1 -0
  33. package/dist/components/dual-nav/style.js +4 -0
  34. package/dist/components/dual-nav/style2.css +145 -0
  35. package/dist/components/empty/empty.vue.d.ts +1 -1
  36. package/dist/components/index.d.ts +23 -22
  37. package/dist/components/index.js +28 -26
  38. package/dist/components/index.js.map +1 -1
  39. package/dist/components/nav/di.js +7 -0
  40. package/dist/components/nav/di.js.map +1 -0
  41. package/dist/components/nav/helper.js +18 -0
  42. package/dist/components/nav/helper.js.map +1 -0
  43. package/dist/components/nav/index.d.ts +3 -0
  44. package/dist/components/{menu/menu-icon.js → nav/nav-icon.js} +4 -4
  45. package/dist/components/nav/nav-icon.js.map +1 -0
  46. package/dist/components/{menu/menu-item-collapsed.js → nav/nav-item-collapsed.js} +23 -23
  47. package/dist/components/nav/nav-item-collapsed.js.map +1 -0
  48. package/dist/components/{menu/menu-item.js → nav/nav-item.js} +13 -13
  49. package/dist/components/nav/nav-item.js.map +1 -0
  50. package/dist/components/{menu/menu-item.vue.d.ts → nav/nav-item.vue.d.ts} +4 -4
  51. package/dist/components/{menu/menu-sub-collapsed.js → nav/nav-sub-collapsed.js} +19 -19
  52. package/dist/components/nav/nav-sub-collapsed.js.map +1 -0
  53. package/dist/components/{menu/menu-sub.js → nav/nav-sub.js} +24 -24
  54. package/dist/components/nav/nav-sub.js.map +1 -0
  55. package/dist/components/{menu/menu-sub.vue.d.ts → nav/nav-sub.vue.d.ts} +4 -4
  56. package/dist/components/{menu/menu.js → nav/nav.js} +45 -36
  57. package/dist/components/nav/nav.js.map +1 -0
  58. package/dist/components/nav/nav.vue.d.ts +18 -0
  59. package/dist/components/nav/style.d.ts +1 -0
  60. package/dist/components/{menu → nav}/style2.css +105 -105
  61. package/dist/components/{menu/use-menu-item.js → nav/use-nav-item.js} +11 -11
  62. package/dist/components/nav/use-nav-item.js.map +1 -0
  63. package/dist/components/{menu/walk-menu-path.js → nav/walk-nav-path.js} +5 -5
  64. package/dist/components/nav/walk-nav-path.js.map +1 -0
  65. package/dist/components/number/number.vue.d.ts +1 -1
  66. package/dist/components/select/style2.css +4 -4
  67. package/dist/index.d.ts +63 -61
  68. package/dist/index.js +56 -55
  69. package/dist/style.js +2 -1
  70. package/dist/types/auto-complete.d.ts +6 -1
  71. package/dist/types/batch-edit.d.ts +15 -2
  72. package/dist/types/dual-nav.d.ts +27 -0
  73. package/dist/types/index.d.ts +4 -3
  74. package/dist/types/nav.d.ts +48 -0
  75. package/package.json +6 -6
  76. package/src/components/auto-complete/auto-complete.vue +24 -13
  77. package/src/components/batch-edit/batch-edit-form.vue +29 -18
  78. package/src/components/batch-edit/batch-edit-list.vue +6 -1
  79. package/src/components/batch-edit/batch-edit.vue +36 -73
  80. package/src/components/batch-edit/di.ts +3 -1
  81. package/src/components/batch-edit/style.scss +5 -0
  82. package/src/components/batch-edit/use-edit.ts +63 -116
  83. package/src/components/batch-edit/use-features.ts +58 -0
  84. package/src/components/contextmenu/style.scss +5 -5
  85. package/src/components/dual-nav/dual-nav-app.vue +33 -0
  86. package/src/components/dual-nav/dual-nav.vue +150 -0
  87. package/src/components/dual-nav/helper.ts +25 -0
  88. package/src/components/dual-nav/index.ts +1 -0
  89. package/src/components/dual-nav/style.scss +153 -0
  90. package/src/components/dual-nav/style.ts +4 -0
  91. package/src/components/index.ts +3 -1
  92. package/src/components/nav/di.ts +17 -0
  93. package/src/components/nav/helper.ts +22 -0
  94. package/src/components/nav/index.ts +3 -0
  95. package/src/components/{menu/menu-icon.vue → nav/nav-icon.vue} +1 -1
  96. package/src/components/nav/nav-item-collapsed.vue +66 -0
  97. package/src/components/nav/nav-item.vue +36 -0
  98. package/src/components/{menu/menu-sub-collapsed.vue → nav/nav-sub-collapsed.vue} +15 -15
  99. package/src/components/{menu/menu-sub.vue → nav/nav-sub.vue} +19 -19
  100. package/src/components/{menu/menu.vue → nav/nav.vue} +42 -42
  101. package/src/components/{menu → nav}/style.scss +16 -14
  102. package/src/components/{menu/use-menu-item.ts → nav/use-nav-item.ts} +14 -14
  103. package/src/components/{menu/walk-menu-path.ts → nav/walk-nav-path.ts} +2 -2
  104. package/src/components/select/style.scss +4 -4
  105. package/src/style.ts +2 -1
  106. package/src/types/auto-complete.ts +6 -1
  107. package/src/types/batch-edit.ts +18 -1
  108. package/src/types/dual-nav.ts +28 -0
  109. package/src/types/index.ts +2 -1
  110. package/src/types/nav.ts +49 -0
  111. package/dist/components/menu/di.js +0 -7
  112. package/dist/components/menu/di.js.map +0 -1
  113. package/dist/components/menu/helper.js +0 -8
  114. package/dist/components/menu/helper.js.map +0 -1
  115. package/dist/components/menu/index.d.ts +0 -3
  116. package/dist/components/menu/menu-icon.js.map +0 -1
  117. package/dist/components/menu/menu-item-collapsed.js.map +0 -1
  118. package/dist/components/menu/menu-item.js.map +0 -1
  119. package/dist/components/menu/menu-sub-collapsed.js.map +0 -1
  120. package/dist/components/menu/menu-sub.js.map +0 -1
  121. package/dist/components/menu/menu.js.map +0 -1
  122. package/dist/components/menu/menu.vue.d.ts +0 -14
  123. package/dist/components/menu/use-menu-item.js.map +0 -1
  124. package/dist/components/menu/walk-menu-path.js.map +0 -1
  125. package/dist/types/menu.d.ts +0 -40
  126. package/src/components/menu/di.ts +0 -17
  127. package/src/components/menu/helper.ts +0 -3
  128. package/src/components/menu/index.ts +0 -3
  129. package/src/components/menu/menu-item-collapsed.vue +0 -66
  130. package/src/components/menu/menu-item.vue +0 -36
  131. package/src/components/menu/menu-node.ts +0 -6
  132. package/src/types/menu.ts +0 -41
  133. /package/dist/components/{menu → dual-nav}/style.d.ts +0 -0
  134. /package/dist/components/{menu → nav}/style.js +0 -0
  135. /package/src/components/{menu → nav}/style.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dual-nav.js","names":[],"sources":["../../../src/components/dual-nav/dual-nav.vue"],"sourcesContent":["<template>\n <div :class=\"cls.b\">\n <div :class=\"cls.e('rail')\">\n <DualNavApp\n v-for=\"app in menus\"\n :key=\"app.path\"\n :app=\"app\"\n :active=\"isAppActive(app)\"\n @click=\"handleAppClick(app)\"\n />\n </div>\n\n <div :class=\"cls.e('divider')\" aria-hidden=\"true\" />\n\n <div :class=\"cls.e('panel')\">\n <template v-if=\"panelApp\">\n <div :class=\"cls.e('panel-header')\">\n <div :class=\"cls.e('panel-header-main')\">\n <h3 :class=\"cls.e('panel-title')\">{{ panelApp.title }}</h3>\n <p v-if=\"panelApp.description\" :class=\"cls.e('description')\">\n {{ panelApp.description }}\n </p>\n </div>\n\n <u-tip\n v-if=\"hasExpandableMenus\"\n :content=\"allExpanded ? '折叠全部' : '展开全部'\"\n hide-arrow\n >\n <button\n type=\"button\"\n :class=\"cls.e('toggle-expand')\"\n :aria-label=\"allExpanded ? '折叠全部' : '展开全部'\"\n @click=\"handleToggleExpandAll\"\n >\n <u-icon>\n <FolderOpened v-if=\"!allExpanded\" />\n <Folder v-else />\n </u-icon>\n </button>\n </u-tip>\n </div>\n\n <div :class=\"cls.e('panel-body')\">\n <UNav\n ref=\"navRef\"\n :menus=\"panelMenus\"\n :current-path=\"currentPath\"\n :collapsed=\"false\"\n @item-click=\"emit('item-click', $event)\"\n />\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Folder, FolderOpened } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, ref, useTemplateRef, watch } from 'vue'\n\nimport type { DualNavEmits, DualNavProps, DualNavRootItem } from '../../types/dual-nav'\nimport type { NavExposed, NavItem } from '../../types/nav'\nimport { UIcon } from '../icon'\nimport { UNav } from '../nav'\nimport { collectNavBranchPaths } from '../nav/helper'\nimport { UTip } from '../tip'\nimport DualNavApp from './dual-nav-app.vue'\nimport { findRootApp } from './helper'\n\ndefineOptions({ name: 'DualNav' })\n\nconst props = defineProps<DualNavProps>()\nconst emit = defineEmits<DualNavEmits>()\n\nconst cls = bem('dual-nav')\nconst navRef = useTemplateRef<NavExposed>('navRef')\n\n/** 右栏当前展示的应用(点击左轨或 currentPath 同步) */\nconst panelAppPath = ref<string>()\nconst allExpanded = ref(false)\n\nfunction syncPanelAppFromCurrentPath(currentPath?: string) {\n const rootApp = findRootApp(props.menus, currentPath)\n if (rootApp) {\n panelAppPath.value = rootApp.path\n return\n }\n\n if (!panelAppPath.value && props.menus?.length) {\n panelAppPath.value = props.menus[0]!.path\n }\n}\n\nwatch(\n () => [props.currentPath, props.menus] as const,\n ([currentPath]) => {\n syncPanelAppFromCurrentPath(currentPath)\n },\n { immediate: true }\n)\n\nconst panelApp = computed<DualNavRootItem | undefined>(() => {\n if (!panelAppPath.value || !props.menus?.length) return undefined\n return props.menus.find((app) => app.path === panelAppPath.value)\n})\n\n/** 右栏菜单:有子级时展示子级,单层时展示根项自身 */\nconst panelMenus = computed<NavItem[] | undefined>(() => {\n const app = panelApp.value\n if (!app) return undefined\n if (app.children?.length) return app.children\n return [app]\n})\n\nconst hasExpandableMenus = computed(() => {\n return collectNavBranchPaths(panelMenus.value).length > 0\n})\n\nwatch(panelAppPath, () => {\n allExpanded.value = false\n})\n\n/** 左轨高亮:仅当 currentPath 落在该应用下时激活 */\nfunction isAppActive(app: NavItem): boolean {\n return findRootApp(props.menus, props.currentPath)?.path === app.path\n}\n\nfunction handleAppClick(app: NavItem) {\n if (app.disabled) return\n\n panelAppPath.value = app.path\n\n if (!app.children?.length) {\n emit('item-click', app)\n }\n}\n\nfunction handleToggleExpandAll() {\n if (allExpanded.value) {\n navRef.value?.collapseAll()\n allExpanded.value = false\n return\n }\n\n navRef.value?.expandAll()\n allExpanded.value = true\n}\n</script>\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { NavItem } from "../../types/nav.js";
2
+ import { DualNavProps } from "../../types/dual-nav.js";
3
+
4
+ //#region src/components/dual-nav/dual-nav.vue.d.ts
5
+ declare const __VLS_export: import("vue").DefineComponent<DualNavProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
6
+ "item-click": (item: NavItem) => any;
7
+ }, string, import("vue").PublicProps, Readonly<DualNavProps> & Readonly<{
8
+ "onItem-click"?: ((item: NavItem) => any) | undefined;
9
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const _default: typeof __VLS_export;
11
+ //#endregion
12
+ export { _default };
13
+ //# sourceMappingURL=dual-nav.vue.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { walkNavWithPath } from "../nav/walk-nav-path.js";
2
+ //#region src/components/dual-nav/helper.ts
3
+ /** 根据当前路径反查所属顶层应用 */
4
+ function findRootApp(menus, currentPath) {
5
+ if (!currentPath || !menus?.length) return void 0;
6
+ for (const app of menus) {
7
+ if (app.path === currentPath) return app;
8
+ let matched = false;
9
+ walkNavWithPath(app, (node) => {
10
+ if (node.path === currentPath) {
11
+ matched = true;
12
+ return false;
13
+ }
14
+ });
15
+ if (matched) return app;
16
+ }
17
+ }
18
+ //#endregion
19
+ export { findRootApp };
20
+
21
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","names":[],"sources":["../../../src/components/dual-nav/helper.ts"],"sourcesContent":["import type { DualNavRootItem } from '../../types'\nimport { walkNavWithPath } from '../nav/walk-nav-path'\n\n/** 根据当前路径反查所属顶层应用 */\nexport function findRootApp(\n menus: DualNavRootItem[] | undefined,\n currentPath?: string\n): DualNavRootItem | undefined {\n if (!currentPath || !menus?.length) return undefined\n\n for (const app of menus) {\n if (app.path === currentPath) return app\n\n let matched = false\n walkNavWithPath(app, (node) => {\n if (node.path === currentPath) {\n matched = true\n return false\n }\n })\n if (matched) return app\n }\n\n return undefined\n}\n"],"mappings":";;;AAIA,SAAgB,YACd,OACA,aAC6B;CAC7B,IAAI,CAAC,eAAe,CAAC,OAAO,QAAQ,OAAO,KAAA;CAE3C,KAAK,MAAM,OAAO,OAAO;EACvB,IAAI,IAAI,SAAS,aAAa,OAAO;EAErC,IAAI,UAAU;EACd,gBAAgB,MAAM,SAAS;GAC7B,IAAI,KAAK,SAAS,aAAa;IAC7B,UAAU;IACV,OAAO;GACT;EACF,CAAC;EACD,IAAI,SAAS,OAAO;CACtB;AAGF"}
@@ -0,0 +1 @@
1
+ import { _default } from "./dual-nav.vue.js";
@@ -0,0 +1,4 @@
1
+ import "../icon/style.js";
2
+ import "../tip/style.js";
3
+ import "../nav/style.js";
4
+ import "./style2.css";
@@ -0,0 +1,145 @@
1
+ @charset "UTF-8";
2
+ /** flex布局 */
3
+ /**
4
+ * 设置css变量
5
+ * 参数1:变量前缀
6
+ * 参数2: 一个由值组成的列表或者由key, value组成的map
7
+ * css-var(height, (
8
+ * large: 40px
9
+ * default: 32px
10
+ * small: 24px
11
+ * ))
12
+ * 生成的css变量:
13
+ * --u-height-large: 40px;
14
+ * --u-height-default: 32px;
15
+ * --u-height-small: 24px;
16
+ */
17
+ /** 暗色:data-theme 与系统偏好,与 UITheme.injectBuiltInThemes 选择器策略一致 */
18
+ .u-dual-nav {
19
+ display: flex;
20
+ height: 100%;
21
+ min-height: 0;
22
+ background-color: var(--u-nav-bg-color);
23
+ border: 1px solid var(--u-border-color);
24
+ border-radius: calc(var(--u-radius-large) + 6px);
25
+ overflow: hidden;
26
+ }
27
+ .u-dual-nav__rail {
28
+ flex-shrink: 0;
29
+ width: var(--u-nav-rail-width);
30
+ display: flex;
31
+ flex-direction: column;
32
+ align-items: center;
33
+ gap: 4px;
34
+ padding: 8px 6px;
35
+ background-color: var(--u-bg-color-middle);
36
+ }
37
+ .u-dual-nav__divider {
38
+ flex-shrink: 0;
39
+ width: 1px;
40
+ background-color: var(--u-border-color);
41
+ }
42
+ .u-dual-nav__panel {
43
+ flex: 1;
44
+ min-width: 0;
45
+ min-height: 0;
46
+ display: flex;
47
+ flex-direction: column;
48
+ }
49
+ .u-dual-nav__panel-header {
50
+ flex-shrink: 0;
51
+ display: flex;
52
+ align-items: flex-start;
53
+ justify-content: space-between;
54
+ gap: 8px;
55
+ padding: 12px 12px 10px;
56
+ border-bottom: 1px solid var(--u-border-color);
57
+ }
58
+ .u-dual-nav__panel-header-main {
59
+ flex: 1;
60
+ min-width: 0;
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: 4px;
64
+ }
65
+ .u-dual-nav__panel-title {
66
+ margin: 0;
67
+ font-size: var(--u-font-size-default);
68
+ font-weight: 600;
69
+ line-height: 1.4;
70
+ color: var(--u-text-color-title);
71
+ }
72
+ .u-dual-nav__description {
73
+ margin: 0;
74
+ font-size: var(--u-font-size-assist-default);
75
+ line-height: 1.5;
76
+ color: var(--u-text-color-second);
77
+ }
78
+ .u-dual-nav__toggle-expand {
79
+ flex-shrink: 0;
80
+ display: inline-flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ width: 28px;
84
+ height: 28px;
85
+ padding: 0;
86
+ border: none;
87
+ border-radius: var(--u-radius-default);
88
+ background: transparent;
89
+ color: var(--u-text-color-second);
90
+ cursor: pointer;
91
+ transition: background-color 0.15s ease, color 0.15s ease;
92
+ }
93
+ .u-dual-nav__toggle-expand:hover {
94
+ background-color: var(--u-nav-hover-bg);
95
+ color: var(--u-nav-hover-color);
96
+ }
97
+ .u-dual-nav__panel-body {
98
+ flex: 1;
99
+ min-height: 0;
100
+ }
101
+ .u-dual-nav__panel-body .u-nav {
102
+ height: 100%;
103
+ border: none;
104
+ border-radius: 0;
105
+ box-shadow: none;
106
+ background-color: transparent;
107
+ }
108
+ .u-dual-nav__app {
109
+ width: 100%;
110
+ aspect-ratio: 1;
111
+ max-width: calc(var(--u-nav-rail-width) - 12px);
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ padding: 0;
116
+ border: none;
117
+ border-radius: calc(var(--u-radius-default) + 2px);
118
+ background: transparent;
119
+ color: var(--u-text-color-second);
120
+ cursor: pointer;
121
+ transition: background-color 0.15s ease, color 0.15s ease;
122
+ }
123
+ .u-dual-nav__app:hover:not(:disabled) {
124
+ background-color: var(--u-nav-hover-bg);
125
+ color: var(--u-nav-hover-color);
126
+ }
127
+ .u-dual-nav__app.is-active {
128
+ background-color: var(--u-nav-active-bg);
129
+ color: var(--u-nav-active-color);
130
+ }
131
+ .u-dual-nav__app.is-disabled {
132
+ opacity: 0.55;
133
+ cursor: not-allowed;
134
+ }
135
+ .u-dual-nav__app-icon {
136
+ width: 20px;
137
+ height: 20px;
138
+ font-size: 20px;
139
+ object-fit: contain;
140
+ }
141
+ .u-dual-nav__app-fallback {
142
+ font-size: 14px;
143
+ font-weight: 600;
144
+ line-height: 1;
145
+ }
@@ -1,8 +1,8 @@
1
1
  import { EmptyProps } from "../../types/empty.js";
2
2
  //#region src/components/empty/empty.vue.d.ts
3
3
  declare const __VLS_export: import("vue").DefineComponent<EmptyProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<EmptyProps> & Readonly<{}>, {
4
- text: string;
5
4
  size: number;
5
+ text: string;
6
6
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
7
  declare const _default: typeof __VLS_export;
8
8
  //#endregion
@@ -72,25 +72,26 @@ import { _default as _default$62 } from "./group-input/group-input.vue.js";
72
72
  import { _default as _default$63 } from "./list/list.vue.js";
73
73
  import { _default as _default$64 } from "./list/list-item.vue.js";
74
74
  import { _default as _default$65 } from "./rich-text-editor/rich-text-editor.vue.js";
75
- import { _default as _default$66 } from "./menu/menu.vue.js";
76
- import { _default as _default$67 } from "./menu/menu-sub.vue.js";
77
- import { _default as _default$68 } from "./menu/menu-item.vue.js";
78
- import { _default as _default$69 } from "./grid-input/grid-input.vue.js";
79
- import { _default as _default$70 } from "./switch/switch.vue.js";
80
- import { _default as _default$71 } from "./form-item/form-item.vue.js";
81
- import { _default as _default$72 } from "./radio-group/radio-group.vue.js";
82
- import { _default as _default$73 } from "./checkbox-group/checkbox-group.vue.js";
83
- import { _default as _default$74 } from "./file-viewer/file-viewer.vue.js";
84
- import { _default as _default$75 } from "./text/text.vue.js";
85
- import { _default as _default$76 } from "./select/select.vue.js";
86
- import { _default as _default$77 } from "./breadcrumb/breadcrumb.vue.js";
87
- import { _default as _default$78 } from "./icon/icon.vue.js";
88
- import { _default as _default$79 } from "./kbd/kbd.vue.js";
89
- import { _default as _default$80 } from "./pop-confirm/pop-confirm.vue.js";
90
- import { _default as _default$81 } from "./paginator/paginator.vue.js";
91
- import { _default as _default$82 } from "./tag/tag.vue.js";
92
- import { _default as _default$83 } from "./float-button/float-button.vue.js";
93
- import { _default as _default$84 } from "./palette/palette.vue.js";
94
- import { _default as _default$85 } from "./grid/grid.vue.js";
95
- import { _default as _default$86 } from "./grid/grid-item.vue.js";
96
- import { _default as _default$87 } from "./badge/badge.vue.js";
75
+ import { _default as _default$66 } from "./nav/nav.vue.js";
76
+ import { _default as _default$67 } from "./nav/nav-sub.vue.js";
77
+ import { _default as _default$68 } from "./nav/nav-item.vue.js";
78
+ import { _default as _default$69 } from "./dual-nav/dual-nav.vue.js";
79
+ import { _default as _default$70 } from "./grid-input/grid-input.vue.js";
80
+ import { _default as _default$71 } from "./switch/switch.vue.js";
81
+ import { _default as _default$72 } from "./form-item/form-item.vue.js";
82
+ import { _default as _default$73 } from "./radio-group/radio-group.vue.js";
83
+ import { _default as _default$74 } from "./checkbox-group/checkbox-group.vue.js";
84
+ import { _default as _default$75 } from "./file-viewer/file-viewer.vue.js";
85
+ import { _default as _default$76 } from "./text/text.vue.js";
86
+ import { _default as _default$77 } from "./select/select.vue.js";
87
+ import { _default as _default$78 } from "./breadcrumb/breadcrumb.vue.js";
88
+ import { _default as _default$79 } from "./icon/icon.vue.js";
89
+ import { _default as _default$80 } from "./kbd/kbd.vue.js";
90
+ import { _default as _default$81 } from "./pop-confirm/pop-confirm.vue.js";
91
+ import { _default as _default$82 } from "./paginator/paginator.vue.js";
92
+ import { _default as _default$83 } from "./tag/tag.vue.js";
93
+ import { _default as _default$84 } from "./float-button/float-button.vue.js";
94
+ import { _default as _default$85 } from "./palette/palette.vue.js";
95
+ import { _default as _default$86 } from "./grid/grid.vue.js";
96
+ import { _default as _default$87 } from "./grid/grid-item.vue.js";
97
+ import { _default as _default$88 } from "./badge/badge.vue.js";
@@ -82,19 +82,20 @@ import _sfc_main$66 from "./group-input/group-input.js";
82
82
  import _sfc_main$67 from "./list/list.js";
83
83
  import _sfc_main$68 from "./list/list-item.js";
84
84
  import _sfc_main$69 from "./rich-text-editor/rich-text-editor.js";
85
- import _sfc_main$70 from "./menu/menu-item.js";
86
- import _sfc_main$71 from "./menu/menu-sub.js";
87
- import _sfc_main$72 from "./menu/menu.js";
88
- import _sfc_main$73 from "./grid-input/grid-input.js";
89
- import _sfc_main$74 from "./switch/switch.js";
90
- import _sfc_main$75 from "./radio-group/radio-group.js";
91
- import _sfc_main$76 from "./checkbox-group/checkbox-group.js";
92
- import _sfc_main$77 from "./file-viewer/file-viewer.js";
93
- import _sfc_main$78 from "./text/text.js";
94
- import _sfc_main$79 from "./breadcrumb/breadcrumb.js";
95
- import _sfc_main$80 from "./paginator/paginator.js";
96
- import _sfc_main$81 from "./float-button/float-button.js";
97
- import _sfc_main$82 from "./badge/badge.js";
85
+ import _sfc_main$70 from "./nav/nav-item.js";
86
+ import _sfc_main$71 from "./nav/nav-sub.js";
87
+ import _sfc_main$72 from "./nav/nav.js";
88
+ import _sfc_main$73 from "./dual-nav/dual-nav.js";
89
+ import _sfc_main$74 from "./grid-input/grid-input.js";
90
+ import _sfc_main$75 from "./switch/switch.js";
91
+ import _sfc_main$76 from "./radio-group/radio-group.js";
92
+ import _sfc_main$77 from "./checkbox-group/checkbox-group.js";
93
+ import _sfc_main$78 from "./file-viewer/file-viewer.js";
94
+ import _sfc_main$79 from "./text/text.js";
95
+ import _sfc_main$80 from "./breadcrumb/breadcrumb.js";
96
+ import _sfc_main$81 from "./paginator/paginator.js";
97
+ import _sfc_main$82 from "./float-button/float-button.js";
98
+ import _sfc_main$83 from "./badge/badge.js";
98
99
  //#region src/components/index.ts
99
100
  var components_exports = /* @__PURE__ */ __exportAll({
100
101
  MessageConfirm: () => MessageConfirm,
@@ -102,9 +103,9 @@ var components_exports = /* @__PURE__ */ __exportAll({
102
103
  UAction: () => _sfc_main$57,
103
104
  UActionGroup: () => action_group_default,
104
105
  UAutoComplete: () => _sfc_main$31,
105
- UBadge: () => _sfc_main$82,
106
+ UBadge: () => _sfc_main$83,
106
107
  UBatchEdit: () => _sfc_main$58,
107
- UBreadcrumb: () => _sfc_main$79,
108
+ UBreadcrumb: () => _sfc_main$80,
108
109
  UButton: () => _sfc_main$17,
109
110
  UButtonGroup: () => _sfc_main$18,
110
111
  UCalendar: () => _sfc_main$20,
@@ -117,7 +118,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
117
118
  UCheckTag: () => _sfc_main$48,
118
119
  UCheckbox: () => _sfc_main$10,
119
120
  UCheckboxButton: () => _sfc_main$36,
120
- UCheckboxGroup: () => _sfc_main$76,
121
+ UCheckboxGroup: () => _sfc_main$77,
121
122
  UCodeEditor: () => _sfc_main$13,
122
123
  UCollapse: () => _sfc_main$44,
123
124
  UCollapseItem: () => _sfc_main$45,
@@ -129,16 +130,17 @@ var components_exports = /* @__PURE__ */ __exportAll({
129
130
  UDialog: () => _sfc_main$52,
130
131
  UDrawer: () => _sfc_main$14,
131
132
  UDropdown: () => _sfc_main$4,
133
+ UDualNav: () => _sfc_main$73,
132
134
  UEmpty: () => _sfc_main$1,
133
135
  UExpressionEditor: () => _sfc_main$53,
134
136
  UFilePicker: () => _sfc_main$41,
135
- UFileViewer: () => _sfc_main$77,
136
- UFloatButton: () => _sfc_main$81,
137
+ UFileViewer: () => _sfc_main$78,
138
+ UFloatButton: () => _sfc_main$82,
137
139
  UForm: () => form_default,
138
140
  UFormItem: () => form_item_default,
139
141
  UGanttChart: () => _sfc_main$39,
140
142
  UGrid: () => _sfc_main$15,
141
- UGridInput: () => _sfc_main$73,
143
+ UGridInput: () => _sfc_main$74,
142
144
  UGridItem: () => _sfc_main$16,
143
145
  UGroupInput: () => _sfc_main$66,
144
146
  UIcon: () => _sfc_main,
@@ -148,39 +150,39 @@ var components_exports = /* @__PURE__ */ __exportAll({
148
150
  UList: () => _sfc_main$67,
149
151
  UListItem: () => _sfc_main$68,
150
152
  ULoading: () => _sfc_main$29,
151
- UMenu: () => _sfc_main$72,
152
- UMenuItem: () => _sfc_main$70,
153
- UMenuSub: () => _sfc_main$71,
154
153
  UMessage: () => _sfc_main$40,
155
154
  UMessageConfirm: () => _sfc_main$19,
156
155
  UMultiSelect: () => _sfc_main$37,
157
156
  UMultiTreeSelect: () => _sfc_main$65,
157
+ UNav: () => _sfc_main$72,
158
+ UNavItem: () => _sfc_main$70,
159
+ UNavSub: () => _sfc_main$71,
158
160
  UNodeRender: () => NodeRender,
159
161
  UNotification: () => _sfc_main$33,
160
162
  UNumber: () => _sfc_main$51,
161
163
  UNumberInput: () => _sfc_main$42,
162
164
  UNumberRangeInput: () => _sfc_main$43,
163
- UPaginator: () => _sfc_main$80,
165
+ UPaginator: () => _sfc_main$81,
164
166
  UPalette: () => _sfc_main$63,
165
167
  UPasswordInput: () => _sfc_main$50,
166
168
  UPopConfirm: () => _sfc_main$56,
167
169
  UProgress: () => _sfc_main$32,
168
170
  UProgressNodes: () => _sfc_main$30,
169
171
  URadio: () => _sfc_main$21,
170
- URadioGroup: () => _sfc_main$75,
172
+ URadioGroup: () => _sfc_main$76,
171
173
  URichTextEditor: () => _sfc_main$69,
172
174
  UScroll: () => _sfc_main$2,
173
175
  USelect: () => _sfc_main$5,
174
176
  USlider: () => _sfc_main$38,
175
177
  USteps: () => _sfc_main$61,
176
- USwitch: () => _sfc_main$74,
178
+ USwitch: () => _sfc_main$75,
177
179
  UTable: () => _sfc_main$46,
178
180
  UTableEditor: () => _sfc_main$47,
179
181
  UTabs: () => _sfc_main$9,
180
182
  UTabsHorizontal: () => _sfc_main$7,
181
183
  UTabsVertical: () => _sfc_main$8,
182
184
  UTag: () => _sfc_main$35,
183
- UText: () => _sfc_main$78,
185
+ UText: () => _sfc_main$79,
184
186
  UTextarea: () => _sfc_main$59,
185
187
  UTheme: () => _sfc_main$64,
186
188
  UTip: () => _sfc_main$3,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/components/index.ts"],"sourcesContent":["export * from './condition-editor'\n\nexport * from './tabs'\n\nexport * from './tree'\n\nexport * from './tree-select'\n\nexport * from './code-editor'\n\nexport * from './dropdown'\n\nexport * from './drawer'\n\nexport * from './form'\n\nexport * from './message-confirm'\n\nexport * from './calendar'\n\nexport * from './radio'\n\nexport * from './card'\n\nexport * from './date-range-picker'\n\nexport * from './loading'\n\nexport * from './scroll'\n\nexport * from './progress-nodes'\n\nexport * from './empty'\n\nexport * from './auto-complete'\n\nexport * from './progress'\n\nexport * from './input'\n\nexport * from './notification'\n\nexport * from './layout'\n\nexport * from './multi-select'\n\nexport * from './checkbox'\n\nexport * from './slider'\n\nexport * from './gantt-chart'\n\nexport * from './message'\n\nexport * from './file-picker'\n\nexport * from './number-range-input'\n\nexport * from './number-input'\n\nexport * from './collapse'\n\nexport * from './date-panel'\n\nexport * from './table-editor'\n\nexport * from './check-tag'\n\nexport * from './contextmenu'\n\nexport * from './password-input'\n\nexport * from './number'\n\nexport * from './dialog'\n\nexport * from './node-render'\n\nexport * from './expression-editor'\n\nexport * from './watermark'\n\nexport * from './batch-edit'\n\nexport * from './action'\n\nexport * from './tip'\n\nexport * from './textarea'\n\nexport * from './button'\n\nexport * from './cascade'\n\nexport * from './steps'\n\nexport * from './date-picker'\n\nexport * from './theme'\n\nexport * from './table'\n\nexport * from './multi-tree-select'\n\nexport * from './group-input'\n\nexport * from './list'\n\nexport * from './rich-text-editor'\n\nexport * from './menu'\n\nexport * from './grid-input'\n\nexport * from './switch'\n\nexport * from './form-item'\n\nexport * from './radio-group'\n\nexport * from './checkbox-group'\n\nexport * from './file-viewer'\n\nexport * from './text'\n\nexport * from './select'\n\nexport * from './breadcrumb'\n\nexport * from './icon'\n\nexport * from './kbd'\n\nexport * from './pop-confirm'\n\nexport * from './paginator'\n\nexport * from './tag'\n\nexport * from './float-button'\n\nexport * from './palette'\n\nexport * from './grid'\n\nexport * from './badge'\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/components/index.ts"],"sourcesContent":["export * from './condition-editor'\n\nexport * from './tabs'\n\nexport * from './tree'\n\nexport * from './tree-select'\n\nexport * from './code-editor'\n\nexport * from './dropdown'\n\nexport * from './drawer'\n\nexport * from './form'\n\nexport * from './message-confirm'\n\nexport * from './calendar'\n\nexport * from './radio'\n\nexport * from './card'\n\nexport * from './date-range-picker'\n\nexport * from './loading'\n\nexport * from './scroll'\n\nexport * from './progress-nodes'\n\nexport * from './empty'\n\nexport * from './auto-complete'\n\nexport * from './progress'\n\nexport * from './input'\n\nexport * from './notification'\n\nexport * from './layout'\n\nexport * from './multi-select'\n\nexport * from './checkbox'\n\nexport * from './slider'\n\nexport * from './gantt-chart'\n\nexport * from './message'\n\nexport * from './file-picker'\n\nexport * from './number-range-input'\n\nexport * from './number-input'\n\nexport * from './collapse'\n\nexport * from './date-panel'\n\nexport * from './table-editor'\n\nexport * from './check-tag'\n\nexport * from './contextmenu'\n\nexport * from './password-input'\n\nexport * from './number'\n\nexport * from './dialog'\n\nexport * from './node-render'\n\nexport * from './expression-editor'\n\nexport * from './watermark'\n\nexport * from './batch-edit'\n\nexport * from './action'\n\nexport * from './tip'\n\nexport * from './textarea'\n\nexport * from './button'\n\nexport * from './cascade'\n\nexport * from './steps'\n\nexport * from './date-picker'\n\nexport * from './theme'\n\nexport * from './table'\n\nexport * from './multi-tree-select'\n\nexport * from './group-input'\n\nexport * from './list'\n\nexport * from './rich-text-editor'\n\nexport * from './nav'\n\nexport * from './dual-nav'\n\nexport * from './grid-input'\n\nexport * from './switch'\n\nexport * from './form-item'\n\nexport * from './radio-group'\n\nexport * from './checkbox-group'\n\nexport * from './file-viewer'\n\nexport * from './text'\n\nexport * from './select'\n\nexport * from './breadcrumb'\n\nexport * from './icon'\n\nexport * from './kbd'\n\nexport * from './pop-confirm'\n\nexport * from './paginator'\n\nexport * from './tag'\n\nexport * from './float-button'\n\nexport * from './palette'\n\nexport * from './grid'\n\nexport * from './badge'\n"],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import "@veltra/utils";
2
+ //#region src/components/nav/di.ts
3
+ const NavDIKey = Symbol("NavDIKey");
4
+ //#endregion
5
+ export { NavDIKey };
6
+
7
+ //# sourceMappingURL=di.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di.js","names":[],"sources":["../../../src/components/nav/di.ts"],"sourcesContent":["import { type BEM, ExpandTransition } from '@veltra/utils'\nimport type { ComputedRef, InjectionKey } from 'vue'\n\nimport type { NavProps, NavEmits } from '../../types'\nimport type { ComponentSize } from '../../types'\n\nexport interface NavContext {\n cls: BEM<'nav', 'u-'>\n collapsedCls: BEM<'collapsed-nav', 'u-'>\n navProps: NavProps\n navEmit: NavEmits\n expandedPath: Set<string>\n size: ComputedRef<ComponentSize>\n expandTransition: ExpandTransition\n}\n\nexport const NavDIKey: InjectionKey<NavContext> = Symbol('NavDIKey')\n"],"mappings":";;AAgBA,MAAa,WAAqC,OAAO,UAAU"}
@@ -0,0 +1,18 @@
1
+ import { walkNavWithPath } from "./walk-nav-path.js";
2
+ //#region src/components/nav/helper.ts
3
+ function getKey(index, parentKey) {
4
+ return `${parentKey}-${index}`;
5
+ }
6
+ /** 收集导航树中所有含子级的节点 path */
7
+ function collectNavBranchPaths(menus) {
8
+ const paths = [];
9
+ if (!menus?.length) return paths;
10
+ for (const menu of menus) walkNavWithPath(menu, (node) => {
11
+ if (node.children?.length) paths.push(node.path);
12
+ });
13
+ return paths;
14
+ }
15
+ //#endregion
16
+ export { collectNavBranchPaths, getKey };
17
+
18
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","names":[],"sources":["../../../src/components/nav/helper.ts"],"sourcesContent":["import type { NavItem } from '../../types'\nimport { walkNavWithPath } from './walk-nav-path'\n\nexport function getKey(index: number, parentKey: string): string {\n return `${parentKey}-${index}`\n}\n\n/** 收集导航树中所有含子级的节点 path */\nexport function collectNavBranchPaths(menus?: NavItem[]): string[] {\n const paths: string[] = []\n if (!menus?.length) return paths\n\n for (const menu of menus) {\n walkNavWithPath(menu, (node) => {\n if (node.children?.length) {\n paths.push(node.path)\n }\n })\n }\n\n return paths\n}\n"],"mappings":";;AAGA,SAAgB,OAAO,OAAe,WAA2B;CAC/D,OAAO,GAAG,UAAU,GAAG;AACzB;;AAGA,SAAgB,sBAAsB,OAA6B;CACjE,MAAM,QAAkB,CAAC;CACzB,IAAI,CAAC,OAAO,QAAQ,OAAO;CAE3B,KAAK,MAAM,QAAQ,OACjB,gBAAgB,OAAO,SAAS;EAC9B,IAAI,KAAK,UAAU,QACjB,MAAM,KAAK,KAAK,IAAI;CAExB,CAAC;CAGH,OAAO;AACT"}
@@ -0,0 +1,3 @@
1
+ import { _default } from "./nav.vue.js";
2
+ import { _default as _default$1 } from "./nav-sub.vue.js";
3
+ import { _default as _default$2 } from "./nav-item.vue.js";
@@ -1,10 +1,10 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import { createBlock, createElementBlock, defineComponent, openBlock, resolveDynamicComponent, unref, withCtx } from "vue";
3
- //#region src/components/menu/menu-icon.vue
3
+ //#region src/components/nav/nav-icon.vue
4
4
  const _hoisted_1 = ["src"];
5
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
- name: "MenuIcon",
7
- __name: "menu-icon",
6
+ name: "NavIcon",
7
+ __name: "nav-icon",
8
8
  props: { icon: {} },
9
9
  setup(__props) {
10
10
  return (_ctx, _cache) => {
@@ -22,4 +22,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
22
22
  //#endregion
23
23
  export { _sfc_main as default };
24
24
 
25
- //# sourceMappingURL=menu-icon.js.map
25
+ //# sourceMappingURL=nav-icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-icon.js","names":[],"sources":["../../../src/components/nav/nav-icon.vue"],"sourcesContent":["<template>\n <u-icon v-if=\"typeof icon !== 'string'\">\n <component :is=\"icon\" />\n </u-icon>\n\n <img :src=\"icon\" v-else alt=\"icon\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DefineComponent } from 'vue'\n\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'NavIcon' })\n\ndefineProps<{ icon: string | DefineComponent }>()\n</script>\n"],"mappings":";;;;;;;;;;iBACuB,QAAA,SAAI,YAAA,UAAA,GAAzB,YAES,MAAA,WAAA,GAAA,EAAA,KAAA,EAAA,GAAA;2BADiB,EAAA,UAAA,GAAxB,YAAwB,wBAAR,QAAA,IAAI,CAAA,EAAA,CAAA;;uBAGtB,mBAAqC,OAAA;;IAA/B,KAAK,QAAA;IAAa,KAAI"}
@@ -1,15 +1,15 @@
1
1
  import _sfc_main$1 from "../tip/tip.js";
2
- import _sfc_main$2 from "./menu-icon.js";
3
- import { useMenuItem } from "./use-menu-item.js";
2
+ import _sfc_main$2 from "./nav-icon.js";
3
+ import { useNavItem } from "./use-nav-item.js";
4
4
  import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, normalizeClass, openBlock, toDisplayString, unref, useTemplateRef, withCtx } from "vue";
5
5
  import { bem } from "@veltra/utils";
6
- //#region src/components/menu/menu-item-collapsed.vue
6
+ //#region src/components/nav/nav-item-collapsed.vue
7
7
  const _hoisted_1 = { key: 1 };
8
8
  const _sfc_main = /* @__PURE__ */ defineComponent({
9
- name: "MenuItemCollapsed",
10
- __name: "menu-item-collapsed",
9
+ name: "NavItemCollapsed",
10
+ __name: "nav-item-collapsed",
11
11
  props: {
12
- menu: {},
12
+ item: {},
13
13
  depth: {}
14
14
  },
15
15
  emits: ["click"],
@@ -17,52 +17,52 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
17
17
  const props = __props;
18
18
  const itemRef = useTemplateRef("item");
19
19
  const emit = __emit;
20
- const { collapsedCls, active, handleClickMenu } = useMenuItem({
20
+ const { collapsedCls, active, handleClickItem } = useNavItem({
21
21
  itemProps: props,
22
22
  itemRef
23
23
  });
24
- function _handleClickMenu() {
25
- handleClickMenu();
24
+ function _handleClickItem() {
25
+ handleClickItem();
26
26
  emit("click");
27
27
  }
28
28
  return (_ctx, _cache) => {
29
- return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" 一级菜单 "), __props.depth === 0 ? (openBlock(), createBlock(unref(_sfc_main$1), {
29
+ return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" 一级导航 "), __props.depth === 0 ? (openBlock(), createBlock(unref(_sfc_main$1), {
30
30
  key: 0,
31
31
  direction: "right",
32
32
  "hide-arrow": ""
33
33
  }, {
34
- content: withCtx(() => [createTextVNode(toDisplayString(__props.menu.title), 1)]),
34
+ content: withCtx(() => [createTextVNode(toDisplayString(__props.item.title), 1)]),
35
35
  default: withCtx(() => [createElementVNode("li", {
36
36
  class: normalizeClass([
37
37
  unref(collapsedCls).e("item"),
38
38
  unref(bem).is("active", unref(active)),
39
39
  unref(bem).is("first-level"),
40
- unref(bem).is("disabled", __props.menu.disabled ?? false)
40
+ unref(bem).is("disabled", __props.item.disabled ?? false)
41
41
  ]),
42
42
  ref: "item",
43
- onClick: _cache[0] || (_cache[0] = (...args) => unref(handleClickMenu) && unref(handleClickMenu)(...args))
44
- }, [__props.menu.icon ? (openBlock(), createBlock(_sfc_main$2, {
43
+ onClick: _cache[0] || (_cache[0] = (...args) => unref(handleClickItem) && unref(handleClickItem)(...args))
44
+ }, [__props.item.icon ? (openBlock(), createBlock(_sfc_main$2, {
45
45
  key: 0,
46
- icon: __props.menu.icon,
46
+ icon: __props.item.icon,
47
47
  class: normalizeClass(unref(collapsedCls).e("icon"))
48
- }, null, 8, ["icon", "class"])) : (openBlock(), createElementBlock("span", _hoisted_1, toDisplayString(__props.menu.title[0]), 1))], 2)]),
48
+ }, null, 8, ["icon", "class"])) : (openBlock(), createElementBlock("span", _hoisted_1, toDisplayString(__props.item.title[0]), 1))], 2)]),
49
49
  _: 1
50
- })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" 二级以及二级以下菜单 "), createElementVNode("li", {
50
+ })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" 二级以及二级以下导航 "), createElementVNode("li", {
51
51
  class: normalizeClass([
52
52
  unref(collapsedCls).e("item"),
53
53
  unref(bem).is("active", unref(active)),
54
- unref(bem).is("disabled", __props.menu.disabled ?? false)
54
+ unref(bem).is("disabled", __props.item.disabled ?? false)
55
55
  ]),
56
56
  ref: "item",
57
- onClick: _handleClickMenu
57
+ onClick: _handleClickItem
58
58
  }, [
59
- __props.menu.icon ? (openBlock(), createBlock(_sfc_main$2, {
59
+ __props.item.icon ? (openBlock(), createBlock(_sfc_main$2, {
60
60
  key: 0,
61
- icon: __props.menu.icon,
61
+ icon: __props.item.icon,
62
62
  class: normalizeClass(unref(collapsedCls).e("icon"))
63
63
  }, null, 8, ["icon", "class"])) : createCommentVNode("v-if", true),
64
64
  createCommentVNode(" 文本 "),
65
- createElementVNode("span", { class: normalizeClass(unref(collapsedCls).e("item-title")) }, toDisplayString(__props.menu.title), 3)
65
+ createElementVNode("span", { class: normalizeClass(unref(collapsedCls).e("item-title")) }, toDisplayString(__props.item.title), 3)
66
66
  ], 2)], 2112))], 2112);
67
67
  };
68
68
  }
@@ -70,4 +70,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
70
70
  //#endregion
71
71
  export { _sfc_main as default };
72
72
 
73
- //# sourceMappingURL=menu-item-collapsed.js.map
73
+ //# sourceMappingURL=nav-item-collapsed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-item-collapsed.js","names":[],"sources":["../../../src/components/nav/nav-item-collapsed.vue"],"sourcesContent":["<template>\n <!-- 一级导航 -->\n <u-tip v-if=\"depth === 0\" direction=\"right\" hide-arrow>\n <li\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('first-level'),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickItem\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n <span v-else>{{ item.title[0] }}</span>\n </li>\n\n <template #content>\n {{ item.title }}\n </template>\n </u-tip>\n\n <!-- 二级以及二级以下导航 -->\n <li\n v-else\n :class=\"[\n collapsedCls.e('item'),\n bem.is('active', active),\n bem.is('disabled', item.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"_handleClickItem\"\n >\n <UNavIcon v-if=\"item.icon\" :icon=\"item.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"collapsedCls.e('item-title')\">\n {{ item.title }}\n </span>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { bem } from '@veltra/utils'\nimport { useTemplateRef } from 'vue'\n\nimport type { NavItem } from '../../types'\nimport { UTip } from '../tip'\nimport UNavIcon from './nav-icon.vue'\nimport { useNavItem } from './use-nav-item'\n\ndefineOptions({ name: 'NavItemCollapsed' })\n\nconst props = defineProps<{ item: NavItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst emit = defineEmits(['click'])\n\nconst { collapsedCls, active, handleClickItem } = useNavItem({ itemProps: props, itemRef })\n\nfunction _handleClickItem() {\n handleClickItem()\n emit('click')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAqDA,MAAM,QAAQ;EAEd,MAAM,UAAU,eAAe,MAAM;EAErC,MAAM,OAAO;EAEb,MAAM,EAAE,cAAc,QAAQ,oBAAoB,WAAW;GAAE,WAAW;GAAO;EAAQ,CAAC;EAE1F,SAAS,mBAAmB;GAC1B,gBAAgB;GAChB,KAAK,OAAO;EACd;;2DA/DE,mBAAA,QAAA,GACa,QAAA,UAAK,KAAA,UAAA,GAAlB,YAkBQ,MAAA,WAAA,GAAA;;IAlBkB,WAAU;IAAQ,cAAA;;IAe/B,SAAO,cACA,CAAA,gBAAA,gBAAb,QAAA,KAAK,KAAK,GAAA,CAAA,CAAA,CAAA;2BAHV,CAZL,mBAYK,MAAA;KAXF,OAAK,eAAA;MAAY,MAAA,YAAA,EAAa,EAAC,MAAA;MAAkB,MAAA,GAAA,EAAI,GAAE,UAAW,MAAA,MAAA,CAAM;MAAW,MAAA,GAAA,EAAI,GAAE,aAAA;MAAyB,MAAA,GAAA,EAAI,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;KAMnJ,KAAI;KACH,SAAK,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,eAAA,KAAA,MAAA,eAAA,EAAA,GAAA,IAAA;QAEQ,QAAA,KAAK,QAAA,UAAA,GAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;oDACnE,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAA,CAAA;;uBAS9B,mBAgBK,UAAA,EAAA,KAAA,EAAA,GAAA,CAjBL,mBAAA,cAAA,GACA,mBAgBK,MAAA;IAdF,OAAK,eAAA;KAAU,MAAA,YAAA,EAAa,EAAC,MAAA;KAAgB,MAAA,GAAA,EAAI,GAAE,UAAW,MAAA,MAAA,CAAM;KAAS,MAAA,GAAA,EAAI,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;IAK9G,KAAI;IACH,SAAO;;IAEQ,QAAA,KAAK,QAAA,UAAA,GAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;;IAEnE,mBAAA,MAAA;IACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,YAAA,CAAA,EAAA,GAAA,gBACvB,QAAA,KAAK,KAAK,GAAA,CAAA"}