@veltra/desktop 1.2.4 → 1.2.6

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 (140) hide show
  1. package/dist/components/auto-complete/auto-complete.js +25 -13
  2. package/dist/components/auto-complete/auto-complete.js.map +1 -1
  3. package/dist/components/auto-complete/auto-complete.vue.d.ts +3 -2
  4. package/dist/components/batch-edit/batch-edit-form.js +33 -26
  5. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  6. package/dist/components/batch-edit/batch-edit-list.js +4 -1
  7. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  8. package/dist/components/batch-edit/batch-edit.js +29 -50
  9. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  10. package/dist/components/batch-edit/batch-edit.vue.d.ts +3 -3
  11. package/dist/components/batch-edit/di.js.map +1 -1
  12. package/dist/components/batch-edit/style2.css +3 -0
  13. package/dist/components/batch-edit/use-edit.js +39 -71
  14. package/dist/components/batch-edit/use-edit.js.map +1 -1
  15. package/dist/components/batch-edit/use-features.js +38 -0
  16. package/dist/components/batch-edit/use-features.js.map +1 -0
  17. package/dist/components/cascade/cascade.vue.d.ts +1 -1
  18. package/dist/components/contextmenu/style2.css +7 -7
  19. package/dist/components/dual-nav/dual-nav-app.js +70 -0
  20. package/dist/components/dual-nav/dual-nav-app.js.map +1 -0
  21. package/dist/components/dual-nav/dual-nav.js +128 -0
  22. package/dist/components/dual-nav/dual-nav.js.map +1 -0
  23. package/dist/components/dual-nav/dual-nav.vue.d.ts +13 -0
  24. package/dist/components/dual-nav/helper.js +21 -0
  25. package/dist/components/dual-nav/helper.js.map +1 -0
  26. package/dist/components/dual-nav/index.d.ts +1 -0
  27. package/dist/components/dual-nav/style.js +5 -0
  28. package/dist/components/dual-nav/style2.css +174 -0
  29. package/dist/components/index.d.ts +23 -22
  30. package/dist/components/index.js +28 -26
  31. package/dist/components/index.js.map +1 -1
  32. package/dist/components/loading/loading.js +1 -1
  33. package/dist/components/loading/loading.js.map +1 -1
  34. package/dist/components/loading/style2.css +61 -81
  35. package/dist/components/nav/di.js +7 -0
  36. package/dist/components/nav/di.js.map +1 -0
  37. package/dist/components/nav/helper.js +18 -0
  38. package/dist/components/nav/helper.js.map +1 -0
  39. package/dist/components/nav/index.d.ts +3 -0
  40. package/dist/components/{menu/menu-icon.js → nav/nav-icon.js} +4 -4
  41. package/dist/components/nav/nav-icon.js.map +1 -0
  42. package/dist/components/{menu/menu-item-collapsed.js → nav/nav-item-collapsed.js} +23 -23
  43. package/dist/components/nav/nav-item-collapsed.js.map +1 -0
  44. package/dist/components/{menu/menu-item.js → nav/nav-item.js} +13 -13
  45. package/dist/components/nav/nav-item.js.map +1 -0
  46. package/dist/components/{menu/menu-item.vue.d.ts → nav/nav-item.vue.d.ts} +4 -4
  47. package/dist/components/{menu/menu-sub-collapsed.js → nav/nav-sub-collapsed.js} +19 -19
  48. package/dist/components/nav/nav-sub-collapsed.js.map +1 -0
  49. package/dist/components/{menu/menu-sub.js → nav/nav-sub.js} +24 -24
  50. package/dist/components/nav/nav-sub.js.map +1 -0
  51. package/dist/components/{menu/menu-sub.vue.d.ts → nav/nav-sub.vue.d.ts} +4 -4
  52. package/dist/components/{menu/menu.js → nav/nav.js} +45 -36
  53. package/dist/components/nav/nav.js.map +1 -0
  54. package/dist/components/nav/nav.vue.d.ts +18 -0
  55. package/dist/components/nav/style.d.ts +1 -0
  56. package/dist/components/{menu → nav}/style2.css +105 -105
  57. package/dist/components/{menu/use-menu-item.js → nav/use-nav-item.js} +11 -11
  58. package/dist/components/nav/use-nav-item.js.map +1 -0
  59. package/dist/components/{menu/walk-menu-path.js → nav/walk-nav-path.js} +5 -5
  60. package/dist/components/nav/walk-nav-path.js.map +1 -0
  61. package/dist/components/number/number.vue.d.ts +1 -1
  62. package/dist/components/select/style2.css +4 -4
  63. package/dist/components/steps/steps.vue.d.ts +2 -2
  64. package/dist/components/tabs/tabs-horizontal.vue.d.ts +2 -2
  65. package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
  66. package/dist/components/tabs/tabs.vue.d.ts +2 -2
  67. package/dist/components/watermark/watermark.vue.d.ts +1 -1
  68. package/dist/index.d.ts +63 -61
  69. package/dist/index.js +56 -55
  70. package/dist/style.js +2 -1
  71. package/dist/types/auto-complete.d.ts +6 -1
  72. package/dist/types/batch-edit.d.ts +15 -2
  73. package/dist/types/dual-nav.d.ts +27 -0
  74. package/dist/types/index.d.ts +4 -3
  75. package/dist/types/loading.d.ts +1 -1
  76. package/dist/types/nav.d.ts +48 -0
  77. package/package.json +6 -6
  78. package/src/components/auto-complete/auto-complete.vue +24 -13
  79. package/src/components/batch-edit/batch-edit-form.vue +29 -18
  80. package/src/components/batch-edit/batch-edit-list.vue +6 -1
  81. package/src/components/batch-edit/batch-edit.vue +36 -73
  82. package/src/components/batch-edit/di.ts +3 -1
  83. package/src/components/batch-edit/style.scss +5 -0
  84. package/src/components/batch-edit/use-edit.ts +63 -116
  85. package/src/components/batch-edit/use-features.ts +58 -0
  86. package/src/components/contextmenu/style.scss +5 -5
  87. package/src/components/dual-nav/dual-nav-app.vue +61 -0
  88. package/src/components/dual-nav/dual-nav.vue +156 -0
  89. package/src/components/dual-nav/helper.ts +25 -0
  90. package/src/components/dual-nav/index.ts +1 -0
  91. package/src/components/dual-nav/style.scss +188 -0
  92. package/src/components/dual-nav/style.ts +5 -0
  93. package/src/components/index.ts +3 -1
  94. package/src/components/loading/loading.vue +1 -1
  95. package/src/components/loading/style.scss +68 -104
  96. package/src/components/nav/di.ts +17 -0
  97. package/src/components/nav/helper.ts +22 -0
  98. package/src/components/nav/index.ts +3 -0
  99. package/src/components/{menu/menu-icon.vue → nav/nav-icon.vue} +1 -1
  100. package/src/components/nav/nav-item-collapsed.vue +66 -0
  101. package/src/components/nav/nav-item.vue +36 -0
  102. package/src/components/{menu/menu-sub-collapsed.vue → nav/nav-sub-collapsed.vue} +15 -15
  103. package/src/components/{menu/menu-sub.vue → nav/nav-sub.vue} +19 -19
  104. package/src/components/{menu/menu.vue → nav/nav.vue} +42 -42
  105. package/src/components/{menu → nav}/style.scss +16 -14
  106. package/src/components/{menu/use-menu-item.ts → nav/use-nav-item.ts} +14 -14
  107. package/src/components/{menu/walk-menu-path.ts → nav/walk-nav-path.ts} +2 -2
  108. package/src/components/select/style.scss +4 -4
  109. package/src/style.ts +2 -1
  110. package/src/types/auto-complete.ts +6 -1
  111. package/src/types/batch-edit.ts +18 -1
  112. package/src/types/dual-nav.ts +28 -0
  113. package/src/types/index.ts +2 -1
  114. package/src/types/loading.ts +1 -1
  115. package/src/types/nav.ts +49 -0
  116. package/dist/components/menu/di.js +0 -7
  117. package/dist/components/menu/di.js.map +0 -1
  118. package/dist/components/menu/helper.js +0 -8
  119. package/dist/components/menu/helper.js.map +0 -1
  120. package/dist/components/menu/index.d.ts +0 -3
  121. package/dist/components/menu/menu-icon.js.map +0 -1
  122. package/dist/components/menu/menu-item-collapsed.js.map +0 -1
  123. package/dist/components/menu/menu-item.js.map +0 -1
  124. package/dist/components/menu/menu-sub-collapsed.js.map +0 -1
  125. package/dist/components/menu/menu-sub.js.map +0 -1
  126. package/dist/components/menu/menu.js.map +0 -1
  127. package/dist/components/menu/menu.vue.d.ts +0 -14
  128. package/dist/components/menu/use-menu-item.js.map +0 -1
  129. package/dist/components/menu/walk-menu-path.js.map +0 -1
  130. package/dist/types/menu.d.ts +0 -40
  131. package/src/components/menu/di.ts +0 -17
  132. package/src/components/menu/helper.ts +0 -3
  133. package/src/components/menu/index.ts +0 -3
  134. package/src/components/menu/menu-item-collapsed.vue +0 -66
  135. package/src/components/menu/menu-item.vue +0 -36
  136. package/src/components/menu/menu-node.ts +0 -6
  137. package/src/types/menu.ts +0 -41
  138. /package/dist/components/{menu → dual-nav}/style.d.ts +0 -0
  139. /package/dist/components/{menu → nav}/style.js +0 -0
  140. /package/src/components/{menu → nav}/style.ts +0 -0
@@ -1,8 +0,0 @@
1
- //#region src/components/menu/helper.ts
2
- function getKey(index, parentKey) {
3
- return `${parentKey}-${index}`;
4
- }
5
- //#endregion
6
- export { getKey };
7
-
8
- //# sourceMappingURL=helper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helper.js","names":[],"sources":["../../../src/components/menu/helper.ts"],"sourcesContent":["export function getKey(index: number, parentKey: string): string {\n return `${parentKey}-${index}`\n}\n"],"mappings":";AAAA,SAAgB,OAAO,OAAe,WAA2B;CAC/D,OAAO,GAAG,UAAU,GAAG;AACzB"}
@@ -1,3 +0,0 @@
1
- import { _default } from "./menu.vue.js";
2
- import { _default as _default$1 } from "./menu-sub.vue.js";
3
- import { _default as _default$2 } from "./menu-item.vue.js";
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-icon.js","names":[],"sources":["../../../src/components/menu/menu-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: 'MenuIcon' })\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 +0,0 @@
1
- {"version":3,"file":"menu-item-collapsed.js","names":[],"sources":["../../../src/components/menu/menu-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', menu.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickMenu\"\n >\n <UMenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n <span v-else>{{ menu.title[0] }}</span>\n </li>\n\n <template #content>\n {{ menu.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', menu.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"_handleClickMenu\"\n >\n <UMenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"collapsedCls.e('item-title')\">\n {{ menu.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 { MenuItem } from '../../types'\nimport { UTip } from '../tip'\nimport UMenuIcon from './menu-icon.vue'\nimport { useMenuItem } from './use-menu-item'\n\ndefineOptions({ name: 'MenuItemCollapsed' })\n\nconst props = defineProps<{ menu: MenuItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst emit = defineEmits(['click'])\n\nconst { collapsedCls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })\n\nfunction _handleClickMenu() {\n handleClickMenu()\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,YAAY;GAAE,WAAW;GAAO;EAAQ,CAAC;EAE3F,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;QAES,QAAA,KAAK,QAAA,UAAA,GAAtB,YAAgF,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;oDACpE,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;;IAES,QAAA,KAAK,QAAA,UAAA,GAAtB,YAAgF,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;;IAEpE,mBAAA,MAAA;IACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,YAAA,CAAA,EAAA,GAAA,gBACvB,QAAA,KAAK,KAAK,GAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-item.js","names":[],"sources":["../../../src/components/menu/menu-item.vue"],"sourcesContent":["<template>\n <li\n :class=\"[\n cls.e('item'),\n bem.is('first-level', depth === 0),\n bem.is('active', active),\n bem.is('disabled', menu.disabled ?? false)\n ]\"\n ref=\"item\"\n @click=\"handleClickMenu\"\n >\n <MenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('item-title')\">\n {{ menu.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 { MenuItem } from '../../types'\nimport MenuIcon from './menu-icon.vue'\nimport { useMenuItem } from './use-menu-item'\n\ndefineOptions({ name: 'MenuItem' })\n\nconst props = defineProps<{ menu: MenuItem; depth: number }>()\n\nconst itemRef = useTemplateRef('item')\n\nconst { cls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })\n</script>\n"],"mappings":";;;;;;;;;;;;;EAkCA,MAAM,EAAE,KAAK,QAAQ,oBAAoB,YAAY;GAAE,WAAW;GAAO,SAFzD,eAAe,MAE0C;EAAQ,CAAC;;uBAjChF,mBAgBK,MAAA;IAfF,OAAK,eAAA;KAAU,MAAA,GAAA,EAAI,EAAC,MAAA;KAAgB,MAAA,GAAA,EAAI,GAAE,eAAgB,QAAA,UAAK,CAAA;KAAe,MAAA,GAAA,EAAI,GAAE,UAAW,MAAA,MAAA,CAAM;KAAS,MAAA,GAAA,EAAI,GAAE,YAAa,QAAA,KAAK,YAAQ,KAAA;;IAM/I,KAAI;IACH,SAAK,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,eAAA,KAAA,MAAA,eAAA,EAAA,GAAA,IAAA;;IAEQ,QAAA,KAAK,QAAA,UAAA,GAArB,YAAsE,aAAA;;KAA1C,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,MAAA,CAAA;;IAE1D,mBAAA,MAAA;IACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,YAAA,CAAA,EAAA,GAAA,gBACd,QAAA,KAAK,KAAK,GAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-sub-collapsed.js","names":[],"sources":["../../../src/components/menu/menu-sub-collapsed.vue"],"sourcesContent":["<template>\n <u-tip\n hide-arrow\n direction=\"right\"\n alignment=\"start\"\n :class=\"[collapsedCls.m(size), collapsedCls.e('panel')]\"\n style=\"padding: 0\"\n v-model:visible=\"visible\"\n >\n <li :class=\"[collapsedCls.e('sub-content'), bem.is('first-level', depth === 0)]\">\n <MenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <span v-else>{{ menu.title[0] }}</span>\n\n <template v-if=\"depth !== 0\">\n <span :class=\"collapsedCls.e('sub-title')\">\n {{ menu.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[collapsedCls.e('sub-expand')]\">\n <ArrowRight />\n </u-icon>\n </template>\n </li>\n\n <template #content>\n <u-scroll tag=\"ul\" :class=\"collapsedCls.e('sub-list')\">\n <template v-for=\"(child, index) of menu.children!\" :key=\"getKey(index, parentKey)\">\n <UMenuItemCollapsed\n v-if=\"!child.children?.length\"\n :menu=\"child\"\n :depth=\"depth + 1\"\n @click=\"closeSubMenu\"\n />\n\n <MenuSubCollapsed\n v-else\n :menu=\"child\"\n :parent-key=\"getKey(index, parentKey)\"\n :depth=\"depth + 1\"\n />\n </template>\n </u-scroll>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject, ref } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { UTip } from '../tip'\nimport { MenuDIKey } from './di'\nimport { getKey } from './helper'\nimport MenuIcon from './menu-icon.vue'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\n\ndefineOptions({ name: 'MenuSubCollapsed' })\n\ndefineProps<{ menu: MenuItem; parentKey: string; depth: number }>()\n\nconst visible = ref(false)\n\nfunction closeSubMenu() {\n visible.value = false\n}\n\nconst { collapsedCls, size } = inject(MenuDIKey)!\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAkEA,MAAM,UAAU,IAAI,KAAK;EAEzB,SAAS,eAAe;GACtB,QAAQ,QAAQ;EAClB;EAEA,MAAM,EAAE,cAAc,SAAS,OAAO,SAAS;;;uBAvE7C,YA4CQ,MAAA,WAAA,GAAA;IA3CN,cAAA;IACA,WAAU;IACV,WAAU;IACT,OAAK,eAAA,CAAG,MAAA,YAAA,EAAa,EAAE,MAAA,IAAA,CAAI,GAAG,MAAA,YAAA,EAAa,EAAC,OAAA,CAAA,CAAA;IAC7C,OAAA,EAAA,WAAA,IAAA;IACQ,SAAS,QAAA;8DAAA,QAAO,QAAA;;IAmBb,SAAO,cAiBL,CAhBX,YAgBW,MAAA,WAAA,GAAA;KAhBD,KAAI;KAAM,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,UAAA,CAAA;;4BACW,EAAA,UAAA,IAAA,GAAlD,mBAcW,UAAA,MAAA,WAdwB,QAAA,KAAK,WAAtB,OAAO,UAAK;8DAA2B,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS,EAAA,GAAA,CAAA,CAErE,MAAM,UAAU,UAAA,UAAA,GADzB,YAKE,aAAA;;OAHC,MAAM;OACN,OAAO,QAAA,QAAK;OACZ,SAAO;sDAGV,YAKE,6BAAA;;OAHC,MAAM;OACN,cAAY,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS;OACnC,OAAO,QAAA,QAAK;;;;;;;;;2BAhBhB,CAfL,mBAeK,MAAA,EAfA,OAAK,eAAA,CAAG,MAAA,YAAA,EAAa,EAAC,aAAA,GAAiB,MAAA,GAAA,EAAI,GAAE,eAAgB,QAAA,UAAK,CAAA,CAAA,CAAA,EAAA,GAAA,CACrD,QAAA,KAAK,QAAA,UAAA,GAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,MAAA,CAAA;oDAEnE,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,EAAA,GAAA,CAAA,IAEV,QAAA,UAAK,KAAA,UAAA,GAArB,mBASW,UAAA,EAAA,KAAA,EAAA,GAAA;KART,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,YAAA,EAAa,EAAC,WAAA,CAAA,EAAA,GAAA,gBACvB,QAAA,KAAK,KAAK,GAAA,CAAA;KAGf,mBAAA,QAAA;KACA,YAES,MAAA,WAAA,GAAA,EAFA,OAAK,eAAA,CAAG,MAAA,YAAA,EAAa,EAAC,YAAA,CAAA,CAAA,EAAA,GAAA;6BACf,CAAd,YAAc,MAAA,UAAA,CAAA,CAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-sub.js","names":[],"sources":["../../../src/components/menu/menu-sub.vue"],"sourcesContent":["<template>\n <li :class=\"[cls.e('sub'), bem.is('expanded', expanded)]\">\n <div\n :class=\"[\n cls.e('sub-content'),\n bem.is('first-level', depth === 0),\n bem.is('expanded', expanded),\n bem.is('branch-active', branchActive)\n ]\"\n @click=\"handleToggleExpand\"\n >\n <UMenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"cls.e('icon')\" />\n\n <!-- 文本 -->\n <span :class=\"cls.e('sub-title')\">\n {{ menu.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[cls.e('sub-expand'), bem.is('expanded', expanded)]\">\n <ArrowRight />\n </u-icon>\n </div>\n\n <!-- @vue-ignore -->\n <transition\n @enter=\"(el: Element) => expandTransition.enter(el as HTMLElement)\"\n @after-enter=\"(el: Element) => expandTransition.afterEnter(el as HTMLElement)\"\n @before-leave=\"(el: Element) => expandTransition.beforeLeave(el as HTMLElement)\"\n @leave=\"(el: Element) => expandTransition.leave(el as HTMLElement)\"\n @after-leave=\"(el: Element) => expandTransition.afterLeave(el as HTMLElement)\"\n >\n <ul :class=\"cls.e('sub-list')\" v-show=\"expanded\">\n <template v-for=\"(child, index) of menu.children!\" :key=\"getKey(index, parentKey)\">\n <UMenuItem v-if=\"!child.children?.length\" :menu=\"child\" :depth=\"depth + 1\" />\n <MenuSub v-else :menu=\"child\" :parent-key=\"getKey(index, parentKey)\" :depth=\"depth + 1\" />\n </template>\n </ul>\n </transition>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { MenuDIKey } from './di'\nimport { getKey } from './helper'\nimport UMenuIcon from './menu-icon.vue'\nimport UMenuItem from './menu-item.vue'\n\ndefineOptions({ name: 'MenuSub' })\n\nconst props = defineProps<{ menu: MenuItem; parentKey: string; depth: number }>()\n\nconst { cls, expandedPath, menuProps, expandTransition } = inject(MenuDIKey)!\n\nconst expanded = computed(() => expandedPath.has(props.menu.path))\n\nconst branchActive = computed(() => {\n const currentPath = menuProps.currentPath\n if (!currentPath) return false\n\n const check = (items?: MenuItem[]) => {\n return items?.some((item) => item.path === currentPath || check(item.children)) ?? false\n }\n\n return check(props.menu.children)\n})\n\nfunction handleToggleExpand() {\n const { menu } = props\n expandedPath.has(menu.path) ? expandedPath.delete(menu.path) : expandedPath.add(menu.path)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAwDA,MAAM,QAAQ;EAEd,MAAM,EAAE,KAAK,cAAc,WAAW,qBAAqB,OAAO,SAAS;EAE3E,MAAM,WAAW,eAAe,aAAa,IAAI,MAAM,KAAK,IAAI,CAAC;EAEjE,MAAM,eAAe,eAAe;GAClC,MAAM,cAAc,UAAU;GAC9B,IAAI,CAAC,aAAa,OAAO;GAEzB,MAAM,SAAS,UAAuB;IACpC,OAAO,OAAO,MAAM,SAAS,KAAK,SAAS,eAAe,MAAM,KAAK,QAAQ,CAAC,KAAK;GACrF;GAEA,OAAO,MAAM,MAAM,KAAK,QAAQ;EAClC,CAAC;EAED,SAAS,qBAAqB;GAC5B,MAAM,EAAE,SAAS;GACjB,aAAa,IAAI,KAAK,IAAI,IAAI,aAAa,OAAO,KAAK,IAAI,IAAI,aAAa,IAAI,KAAK,IAAI;EAC3F;;;uBA3EE,mBAsCK,MAAA,EAtCA,OAAK,eAAA,CAAG,MAAA,GAAA,EAAI,EAAC,KAAA,GAAS,MAAA,GAAA,EAAI,GAAE,YAAa,SAAA,KAAQ,CAAA,CAAA,EAAA,GAAA;IACpD,mBAoBM,OAAA;KAnBH,OAAK,eAAA;MAAY,MAAA,GAAA,EAAI,EAAC,aAAA;MAAyB,MAAA,GAAA,EAAI,GAAE,eAAgB,QAAA,UAAK,CAAA;MAAiB,MAAA,GAAA,EAAI,GAAE,YAAa,SAAA,KAAQ;MAAW,MAAA,GAAA,EAAI,GAAE,iBAAkB,aAAA,KAAY;;KAMrK,SAAO;;KAES,QAAA,KAAK,QAAA,UAAA,GAAtB,YAAuE,aAAA;;MAA1C,MAAM,QAAA,KAAK;MAAO,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,MAAA,CAAA;;KAE3D,mBAAA,MAAA;KACA,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,WAAA,CAAA,EAAA,GAAA,gBACd,QAAA,KAAK,KAAK,GAAA,CAAA;KAGf,mBAAA,QAAA;KACA,YAES,MAAA,WAAA,GAAA,EAFA,OAAK,eAAA,CAAG,MAAA,GAAA,EAAI,EAAC,YAAA,GAAgB,MAAA,GAAA,EAAI,GAAE,YAAa,SAAA,KAAQ,CAAA,CAAA,EAAA,GAAA;6BACjD,CAAd,YAAc,MAAA,UAAA,CAAA,CAAA,CAAA;;;;IAIlB,mBAAA,eAAA;IACA,YAaa,YAAA;KAZV,SAAK,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,MAAM,EAAE;KACjD,cAAW,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,WAAW,EAAE;KAC5D,eAAY,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,YAAY,EAAE;KAC9D,SAAK,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,MAAM,EAAE;KACjD,cAAW,OAAA,OAAA,OAAA,MAAG,OAAgB,MAAA,gBAAA,EAAiB,WAAW,EAAE;KAL/D,WAAA;;4BAYO,CAAA,eALL,mBAKK,MAAA,EALA,OAAK,eAAE,MAAA,GAAA,EAAI,EAAC,UAAA,CAAA,EAAA,GAAA,EAAA,UAAA,IAAA,GACf,mBAGW,UAAA,MAAA,WAHwB,QAAA,KAAK,WAAtB,OAAO,UAAK;8DAA2B,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS,EAAA,GAAA,CAAA,CAC5D,MAAM,UAAU,UAAA,UAAA,GAAlC,YAA6E,aAAA;;OAAlC,MAAM;OAAQ,OAAO,QAAA,QAAK;sDACrE,YAA0F,oBAAA;;OAAzE,MAAM;OAAQ,cAAY,MAAA,MAAA,EAAO,OAAO,QAAA,SAAS;OAAI,OAAO,QAAA,QAAK;;;;;;8BAH/C,SAAA,KAAQ,CAAA,CAAA,CAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu.js","names":[],"sources":["../../../src/components/menu/menu.vue"],"sourcesContent":["<template>\n <u-scroll\n tag=\"ul\"\n :class=\"[menuCls.b, menuCls.m(size)]\"\n :container-class=\"menuCls.e('container')\"\n >\n <!-- 常规 -->\n <template v-if=\"!collapsed\">\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSub\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItem v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n\n <!-- 折叠 -->\n <template v-else>\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSubCollapsed\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItemCollapsed v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, shallowReactive, watch } from 'vue'\n\nimport type { MenuEmits, MenuProps, ComponentSize } from '../../types'\nimport { UScroll } from '../scroll'\nimport { MenuDIKey } from './di'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\nimport UMenuItem from './menu-item.vue'\nimport UMenuSubCollapsed from './menu-sub-collapsed.vue'\nimport UMenuSub from './menu-sub.vue'\nimport { walkMenuWithPath } from './walk-menu-path'\n\ndefineOptions({ name: 'Menu' })\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n expand: false,\n activeIndex: '',\n collapsed: false,\n uniqueOpened: false\n})\n\nconst emit = defineEmits<MenuEmits>()\n\nconst cls = bem('menu')\nconst collapsedCls = bem('collapsed-menu')\n\nconst menuCls = computed(() => {\n return props.collapsed ? collapsedCls : cls\n})\n\nconst expandTransition = new ExpandTransition({\n enterTransition:\n 'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',\n leaveTransition:\n 'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',\n opacity: true\n})\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst expandedPath = shallowReactive(new Set<string>())\n\nwatch(\n [() => props.currentPath, () => props.menus],\n ([currentPath, menus]) => {\n if (!currentPath || !menus) return\n menus.forEach((menu) => {\n walkMenuWithPath(menu, (node, nodePath) => {\n if (node.path === currentPath) {\n nodePath.slice(0, -1).forEach((path) => {\n expandedPath.add(path.path)\n })\n return false\n }\n })\n })\n },\n { immediate: true }\n)\n\nprovide(MenuDIKey, {\n cls,\n collapsedCls,\n menuProps: props,\n menuEmit: emit,\n expandedPath,\n size,\n expandTransition\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,MAAM;EACtB,MAAM,eAAe,IAAI,gBAAgB;EAEzC,MAAM,UAAU,eAAe;GAC7B,OAAO,MAAM,YAAY,eAAe;EAC1C,CAAC;EAED,MAAM,mBAAmB,IAAI,iBAAiB;GAC5C,iBACE;GACF,iBACE;GACF,SAAS;EACX,CAAC;EAED,MAAM,EAAE,SAAS,iBAAiB,CAAC,KAAK,GAAG,EAAE,MAAM,UAA2B,CAAC;EAE/E,MAAM,eAAe,gCAAgB,IAAI,IAAY,CAAC;EAEtD,MACE,OAAO,MAAM,mBAAmB,MAAM,KAAK,IAC1C,CAAC,aAAa,WAAW;GACxB,IAAI,CAAC,eAAe,CAAC,OAAO;GAC5B,MAAM,SAAS,SAAS;IACtB,iBAAiB,OAAO,MAAM,aAAa;KACzC,IAAI,KAAK,SAAS,aAAa;MAC7B,SAAS,MAAM,GAAG,EAAE,EAAE,SAAS,SAAS;OACtC,aAAa,IAAI,KAAK,IAAI;MAC5B,CAAC;MACD,OAAO;KACT;IACF,CAAC;GACH,CAAC;EACH,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,QAAQ,WAAW;GACjB;GACA;GACA,WAAW;GACX,UAAU;GACV;GACA;GACA;EACF,CAAC;;uBAvGC,YA8BW,MAAA,WAAA,GAAA;IA7BT,KAAI;IACH,OAAK,eAAA,CAAG,QAAA,MAAQ,GAAG,QAAA,MAAQ,EAAE,MAAA,IAAA,CAAI,CAAA,CAAA;IACjC,mBAAiB,QAAA,MAAQ,EAAC,WAAA;;2BAEhB,CAAX,mBAAA,MAAA,GAAA,CACiB,QAAA,aAAA,UAAA,IAAA,GACf,mBAQW,UAAA,EAAA,KAAA,EAAA,GAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,MAAK,GAAA,CAE1C,KAAK,UAAU,UAAA,UAAA,GADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,KAAK;MACxB,OAAO;0DAEV,YAAyD,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO;;8BAKxD,mBAUW,UAAA,EAAA,KAAA,EAAA,GAAA,CAXX,mBAAA,MAAA,IAAA,UAAA,IAAA,GAEE,mBAQW,UAAA,MAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,MAAK,GAAA,CAE1C,KAAK,UAAU,UAAA,UAAA,GADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,KAAK;MACxB,OAAO;0DAEV,YAAkE,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO"}
@@ -1,14 +0,0 @@
1
- import { MenuItem, MenuProps } from "../../types/menu.js";
2
- //#region src/components/menu/menu.vue.d.ts
3
- declare const __VLS_export: import("vue").DefineComponent<MenuProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
4
- "item-click": (item: MenuItem) => any;
5
- }, string, import("vue").PublicProps, Readonly<MenuProps> & Readonly<{
6
- "onItem-click"?: ((item: MenuItem) => any) | undefined;
7
- }>, {
8
- collapsed: boolean;
9
- uniqueOpened: boolean;
10
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
- declare const _default: typeof __VLS_export;
12
- //#endregion
13
- export { _default };
14
- //# sourceMappingURL=menu.vue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-menu-item.js","names":[],"sources":["../../../src/components/menu/use-menu-item.ts"],"sourcesContent":["import { scrollIntoContainerView, type BEM } from '@veltra/utils'\nimport { computed, inject, watch, type ShallowRef, type ComputedRef } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { MenuDIKey } from './di'\n\ninterface Options {\n itemProps: { menu: MenuItem; depth: number }\n itemRef: ShallowRef<HTMLElement | null>\n}\n\ninterface UseMenuItemReturned {\n cls: BEM<'menu'>\n collapsedCls: BEM<'collapsed-menu'>\n\n active: ComputedRef<boolean>\n handleClickMenu: () => void\n}\n\nexport function useMenuItem(options: Options): UseMenuItemReturned {\n const { itemProps, itemRef } = options\n const { cls, collapsedCls, menuProps, menuEmit } = inject(MenuDIKey)!\n\n const active = computed(() => {\n return menuProps.currentPath === itemProps.menu.path\n })\n\n let changedByClick = false\n watch([active, itemRef], ([active, itemEl]) => {\n if (changedByClick) {\n changedByClick = false\n return\n }\n if (!active || !itemEl) return\n scrollIntoContainerView(itemEl, null)\n })\n\n function handleClickMenu() {\n if (itemProps.menu.disabled) return\n changedByClick = true\n menuEmit('item-click', itemProps.menu)\n }\n\n return {\n cls,\n collapsedCls,\n\n active,\n handleClickMenu\n }\n}\n"],"mappings":";;;;AAmBA,SAAgB,YAAY,SAAuC;CACjE,MAAM,EAAE,WAAW,YAAY;CAC/B,MAAM,EAAE,KAAK,cAAc,WAAW,aAAa,OAAO,SAAS;CAEnE,MAAM,SAAS,eAAe;EAC5B,OAAO,UAAU,gBAAgB,UAAU,KAAK;CAClD,CAAC;CAED,IAAI,iBAAiB;CACrB,MAAM,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,YAAY;EAC7C,IAAI,gBAAgB;GAClB,iBAAiB;GACjB;EACF;EACA,IAAI,CAAC,UAAU,CAAC,QAAQ;EACxB,wBAAwB,QAAQ,IAAI;CACtC,CAAC;CAED,SAAS,kBAAkB;EACzB,IAAI,UAAU,KAAK,UAAU;EAC7B,iBAAiB;EACjB,SAAS,cAAc,UAAU,IAAI;CACvC;CAEA,OAAO;EACL;EACA;EAEA;EACA;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"walk-menu-path.js","names":[],"sources":["../../../src/components/menu/walk-menu-path.ts"],"sourcesContent":["/**\n * 深度优先 + 路径;回调返回 `false` 时剪枝当前节点子树(不中断兄弟)。\n * `@cat-kit/core` 的 `dfs` 在返回 `true` 时会终止整段遍历,语义不同,故保留此辅助。\n */\nexport function walkMenuWithPath<T extends Record<string, unknown>>(\n data: T,\n cb: (node: T, path: T[]) => void | false,\n childrenKey = 'children',\n prefix: T[] = []\n): void {\n const path = [...prefix, data]\n if (cb(data, path) === false) return\n const raw = data[childrenKey]\n if (!Array.isArray(raw)) return\n for (let i = 0; i < raw.length; i++) {\n walkMenuWithPath(raw[i] as T, cb, childrenKey, path)\n }\n}\n"],"mappings":";;;;;AAIA,SAAgB,iBACd,MACA,IACA,cAAc,YACd,SAAc,CAAC,GACT;CACN,MAAM,OAAO,CAAC,GAAG,QAAQ,IAAI;CAC7B,IAAI,GAAG,MAAM,IAAI,MAAM,OAAO;CAC9B,MAAM,MAAM,KAAK;CACjB,IAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;CACzB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAC9B,iBAAiB,IAAI,IAAS,IAAI,aAAa,IAAI;AAEvD"}
@@ -1,40 +0,0 @@
1
- import { DefineComponent } from "vue";
2
- import { DeconstructValue } from "@veltra/utils";
3
-
4
- //#region src/types/menu.d.ts
5
- /** 菜单项 */
6
- interface MenuItem {
7
- /** 图标 */
8
- icon?: string | DefineComponent;
9
- /** 菜单标题 */
10
- title: string;
11
- /** 菜单路径 */
12
- path: string;
13
- /** 是否禁用 */
14
- disabled?: boolean;
15
- /** 子菜单 */
16
- children?: MenuItem[];
17
- [key: string]: any;
18
- }
19
- /** 菜单组件组件属性 */
20
- interface MenuProps {
21
- /** 当前路径 */
22
- currentPath?: string;
23
- /** 是否折叠 */
24
- collapsed?: boolean;
25
- /** 仅允许一个菜单可以打开 */
26
- uniqueOpened?: boolean;
27
- /** 菜单列表 */
28
- menus?: MenuItem[];
29
- }
30
- /** 菜单组件组件定义的事件 */
31
- interface MenuEmits {
32
- (e: 'item-click', item: MenuItem): void;
33
- }
34
- /** 菜单组件组件暴露的属性和方法(组件内部使用) */
35
- interface _MenuExposed {}
36
- /** 菜单组件组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
37
- type MenuExposed = DeconstructValue<_MenuExposed>;
38
- //#endregion
39
- export { MenuEmits, MenuExposed, MenuItem, MenuProps, _MenuExposed };
40
- //# sourceMappingURL=menu.d.ts.map
@@ -1,17 +0,0 @@
1
- import { type BEM, ExpandTransition } from '@veltra/utils'
2
- import type { ComputedRef, InjectionKey } from 'vue'
3
-
4
- import type { MenuProps, MenuEmits } from '../../types'
5
- import type { ComponentSize } from '../../types'
6
-
7
- export interface MenuContext {
8
- cls: BEM<'menu', 'u-'>
9
- collapsedCls: BEM<'collapsed-menu', 'u-'>
10
- menuProps: MenuProps
11
- menuEmit: MenuEmits
12
- expandedPath: Set<string>
13
- size: ComputedRef<ComponentSize>
14
- expandTransition: ExpandTransition
15
- }
16
-
17
- export const MenuDIKey: InjectionKey<MenuContext> = Symbol('MenuDIKey')
@@ -1,3 +0,0 @@
1
- export function getKey(index: number, parentKey: string): string {
2
- return `${parentKey}-${index}`
3
- }
@@ -1,3 +0,0 @@
1
- export { default as UMenu } from './menu.vue'
2
- export { default as UMenuSub } from './menu-sub.vue'
3
- export { default as UMenuItem } from './menu-item.vue'
@@ -1,66 +0,0 @@
1
- <template>
2
- <!-- 一级菜单 -->
3
- <u-tip v-if="depth === 0" direction="right" hide-arrow>
4
- <li
5
- :class="[
6
- collapsedCls.e('item'),
7
- bem.is('active', active),
8
- bem.is('first-level'),
9
- bem.is('disabled', menu.disabled ?? false)
10
- ]"
11
- ref="item"
12
- @click="handleClickMenu"
13
- >
14
- <UMenuIcon v-if="menu.icon" :icon="menu.icon" :class="collapsedCls.e('icon')" />
15
- <span v-else>{{ menu.title[0] }}</span>
16
- </li>
17
-
18
- <template #content>
19
- {{ menu.title }}
20
- </template>
21
- </u-tip>
22
-
23
- <!-- 二级以及二级以下菜单 -->
24
- <li
25
- v-else
26
- :class="[
27
- collapsedCls.e('item'),
28
- bem.is('active', active),
29
- bem.is('disabled', menu.disabled ?? false)
30
- ]"
31
- ref="item"
32
- @click="_handleClickMenu"
33
- >
34
- <UMenuIcon v-if="menu.icon" :icon="menu.icon" :class="collapsedCls.e('icon')" />
35
-
36
- <!-- 文本 -->
37
- <span :class="collapsedCls.e('item-title')">
38
- {{ menu.title }}
39
- </span>
40
- </li>
41
- </template>
42
-
43
- <script setup lang="ts">
44
- import { bem } from '@veltra/utils'
45
- import { useTemplateRef } from 'vue'
46
-
47
- import type { MenuItem } from '../../types'
48
- import { UTip } from '../tip'
49
- import UMenuIcon from './menu-icon.vue'
50
- import { useMenuItem } from './use-menu-item'
51
-
52
- defineOptions({ name: 'MenuItemCollapsed' })
53
-
54
- const props = defineProps<{ menu: MenuItem; depth: number }>()
55
-
56
- const itemRef = useTemplateRef('item')
57
-
58
- const emit = defineEmits(['click'])
59
-
60
- const { collapsedCls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })
61
-
62
- function _handleClickMenu() {
63
- handleClickMenu()
64
- emit('click')
65
- }
66
- </script>
@@ -1,36 +0,0 @@
1
- <template>
2
- <li
3
- :class="[
4
- cls.e('item'),
5
- bem.is('first-level', depth === 0),
6
- bem.is('active', active),
7
- bem.is('disabled', menu.disabled ?? false)
8
- ]"
9
- ref="item"
10
- @click="handleClickMenu"
11
- >
12
- <MenuIcon v-if="menu.icon" :icon="menu.icon" :class="cls.e('icon')" />
13
-
14
- <!-- 文本 -->
15
- <span :class="cls.e('item-title')">
16
- {{ menu.title }}
17
- </span>
18
- </li>
19
- </template>
20
-
21
- <script setup lang="ts">
22
- import { bem } from '@veltra/utils'
23
- import { useTemplateRef } from 'vue'
24
-
25
- import type { MenuItem } from '../../types'
26
- import MenuIcon from './menu-icon.vue'
27
- import { useMenuItem } from './use-menu-item'
28
-
29
- defineOptions({ name: 'MenuItem' })
30
-
31
- const props = defineProps<{ menu: MenuItem; depth: number }>()
32
-
33
- const itemRef = useTemplateRef('item')
34
-
35
- const { cls, active, handleClickMenu } = useMenuItem({ itemProps: props, itemRef })
36
- </script>
@@ -1,6 +0,0 @@
1
- import { TreeNode } from '@cat-kit/core'
2
-
3
- export class MenuNode<Data extends Record<string, any>> extends TreeNode<Data, MenuNode<Data>> {
4
- declare parent?: MenuNode<Data>
5
- declare children?: MenuNode<Data>[]
6
- }
package/src/types/menu.ts DELETED
@@ -1,41 +0,0 @@
1
- import type { DeconstructValue } from '@veltra/utils'
2
- import type { DefineComponent } from 'vue'
3
-
4
- /** 菜单项 */
5
- export interface MenuItem {
6
- /** 图标 */
7
- icon?: string | DefineComponent
8
- /** 菜单标题 */
9
- title: string
10
- /** 菜单路径 */
11
- path: string
12
- /** 是否禁用 */
13
- disabled?: boolean
14
- /** 子菜单 */
15
- children?: MenuItem[]
16
-
17
- [key: string]: any
18
- }
19
-
20
- /** 菜单组件组件属性 */
21
- export interface MenuProps {
22
- /** 当前路径 */
23
- currentPath?: string
24
- /** 是否折叠 */
25
- collapsed?: boolean
26
- /** 仅允许一个菜单可以打开 */
27
- uniqueOpened?: boolean
28
- /** 菜单列表 */
29
- menus?: MenuItem[]
30
- }
31
-
32
- /** 菜单组件组件定义的事件 */
33
- export interface MenuEmits {
34
- (e: 'item-click', item: MenuItem): void
35
- }
36
-
37
- /** 菜单组件组件暴露的属性和方法(组件内部使用) */
38
- export interface _MenuExposed {}
39
-
40
- /** 菜单组件组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
41
- export type MenuExposed = DeconstructValue<_MenuExposed>
File without changes
File without changes
File without changes