mortise-tenon-design 0.4.0-beta.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/dist/es/index.mjs +15 -0
  2. package/{es/core/build-design → dist/es}/package.json.mjs +2 -2
  3. package/dist/es/src/component-neo/index.mjs.map +1 -0
  4. package/dist/es/src/component-neo/src/component-neo.vue.mjs.map +1 -0
  5. package/dist/es/src/component-neo/src/hooks/use-component-neo.mjs +29 -0
  6. package/dist/es/src/component-neo/src/hooks/use-component-neo.mjs.map +1 -0
  7. package/dist/es/src/component-neo/src/hooks/use-component-state.mjs.map +1 -0
  8. package/dist/es/src/expand/index.mjs.map +1 -0
  9. package/dist/es/src/expand/src/expand.css +1 -0
  10. package/{es/components → dist/es/src}/expand/src/expand.vue.mjs +2 -2
  11. package/dist/es/src/expand/src/expand.vue2.mjs +37 -0
  12. package/dist/es/src/expand/src/expand.vue2.mjs.map +1 -0
  13. package/{es/components → dist/es/src}/installer.mjs +1 -1
  14. package/dist/es/src/installer.mjs.map +1 -0
  15. package/dist/es/src/sort/index.mjs.map +1 -0
  16. package/dist/es/src/sort/src/sort.mjs.map +1 -0
  17. package/dist/es/src/table/index.mjs.map +1 -0
  18. package/dist/es/src/table/src/table.css +1 -0
  19. package/{es/components → dist/es/src}/table/src/table.vue.mjs +1 -1
  20. package/dist/es/src/table/src/table.vue2.mjs.map +1 -0
  21. package/dist/es/src/utils/install.mjs.map +1 -0
  22. package/dist/lib/index.js +2 -0
  23. package/{lib/core/build-design → dist/lib}/package.json.js +1 -1
  24. package/dist/lib/src/component-neo/index.js.map +1 -0
  25. package/dist/lib/src/component-neo/src/component-neo.vue.js.map +1 -0
  26. package/dist/lib/src/component-neo/src/hooks/use-component-neo.js +2 -0
  27. package/dist/lib/src/component-neo/src/hooks/use-component-neo.js.map +1 -0
  28. package/dist/lib/src/component-neo/src/hooks/use-component-state.js.map +1 -0
  29. package/dist/lib/src/expand/index.js.map +1 -0
  30. package/dist/lib/src/expand/src/expand.css +1 -0
  31. package/{lib/components → dist/lib/src}/expand/src/expand.vue.js +1 -1
  32. package/dist/lib/src/expand/src/expand.vue2.js +2 -0
  33. package/dist/lib/src/expand/src/expand.vue2.js.map +1 -0
  34. package/dist/lib/src/installer.js +2 -0
  35. package/dist/lib/src/installer.js.map +1 -0
  36. package/dist/lib/src/sort/index.js.map +1 -0
  37. package/dist/lib/src/sort/src/sort.js.map +1 -0
  38. package/dist/lib/src/table/index.js.map +1 -0
  39. package/dist/lib/src/table/src/table.css +1 -0
  40. package/{lib/components → dist/lib/src}/table/src/table.vue.js +1 -1
  41. package/dist/lib/src/table/src/table.vue2.js.map +1 -0
  42. package/dist/lib/src/utils/install.js.map +1 -0
  43. package/{types → dist/types}/component-neo/index.d.ts +1 -3
  44. package/{types → dist/types}/component-neo/src/component-neo.d.ts +1 -1
  45. package/{types → dist/types}/component-neo/src/component-neo.vue.d.ts +1 -3
  46. package/dist/types/expand/src/expand.d.ts +17 -0
  47. package/global.d.ts +11 -11
  48. package/package.json +7 -9
  49. package/es/components/component-neo/index.mjs.map +0 -1
  50. package/es/components/component-neo/src/component-neo.vue.mjs.map +0 -1
  51. package/es/components/component-neo/src/hooks/use-component-neo.mjs +0 -31
  52. package/es/components/component-neo/src/hooks/use-component-neo.mjs.map +0 -1
  53. package/es/components/component-neo/src/hooks/use-component-state.mjs.map +0 -1
  54. package/es/components/expand/index.mjs.map +0 -1
  55. package/es/components/expand/src/expand.css +0 -1
  56. package/es/components/expand/src/expand.vue2.mjs +0 -41
  57. package/es/components/expand/src/expand.vue2.mjs.map +0 -1
  58. package/es/components/index.mjs +0 -13
  59. package/es/components/index.mjs.map +0 -1
  60. package/es/components/installer.mjs.map +0 -1
  61. package/es/components/sort/index.mjs.map +0 -1
  62. package/es/components/sort/src/sort.mjs.map +0 -1
  63. package/es/components/table/index.mjs.map +0 -1
  64. package/es/components/table/src/table.css +0 -1
  65. package/es/components/table/src/table.vue2.mjs.map +0 -1
  66. package/es/components/utils/install.mjs.map +0 -1
  67. package/es/index.mjs +0 -15
  68. package/lib/components/component-neo/index.js.map +0 -1
  69. package/lib/components/component-neo/src/component-neo.vue.js.map +0 -1
  70. package/lib/components/component-neo/src/hooks/use-component-neo.js +0 -2
  71. package/lib/components/component-neo/src/hooks/use-component-neo.js.map +0 -1
  72. package/lib/components/component-neo/src/hooks/use-component-state.js.map +0 -1
  73. package/lib/components/expand/index.js.map +0 -1
  74. package/lib/components/expand/src/expand.css +0 -1
  75. package/lib/components/expand/src/expand.vue2.js +0 -2
  76. package/lib/components/expand/src/expand.vue2.js.map +0 -1
  77. package/lib/components/index.js +0 -2
  78. package/lib/components/installer.js +0 -2
  79. package/lib/components/installer.js.map +0 -1
  80. package/lib/components/sort/index.js.map +0 -1
  81. package/lib/components/sort/src/sort.js.map +0 -1
  82. package/lib/components/table/index.js.map +0 -1
  83. package/lib/components/table/src/table.css +0 -1
  84. package/lib/components/table/src/table.vue2.js.map +0 -1
  85. package/lib/components/utils/install.js.map +0 -1
  86. package/lib/index.js +0 -2
  87. package/lib/index.js.map +0 -1
  88. package/types/expand/src/expand.d.ts +0 -8
  89. /package/{es → dist/es}/_virtual/_plugin-vue_export-helper.mjs +0 -0
  90. /package/{es → dist/es}/_virtual/_plugin-vue_export-helper.mjs.map +0 -0
  91. /package/{es → dist/es}/index.mjs.map +0 -0
  92. /package/{es/core/build-design → dist/es}/package.json.mjs.map +0 -0
  93. /package/{es/components → dist/es/src}/component-neo/index.mjs +0 -0
  94. /package/{es/components → dist/es/src}/component-neo/src/component-neo.vue.mjs +0 -0
  95. /package/{es/components → dist/es/src}/component-neo/src/component-neo.vue2.mjs +0 -0
  96. /package/{es/components → dist/es/src}/component-neo/src/component-neo.vue2.mjs.map +0 -0
  97. /package/{es/components → dist/es/src}/component-neo/src/hooks/use-component-state.mjs +0 -0
  98. /package/{es/components → dist/es/src}/expand/index.mjs +0 -0
  99. /package/{es/components → dist/es/src}/expand/src/expand.vue.mjs.map +0 -0
  100. /package/{es/components → dist/es/src}/sort/index.mjs +0 -0
  101. /package/{es/components → dist/es/src}/sort/src/sort.mjs +0 -0
  102. /package/{es/components → dist/es/src}/table/index.mjs +0 -0
  103. /package/{es/components → dist/es/src}/table/src/table.vue.mjs.map +0 -0
  104. /package/{es/components → dist/es/src}/table/src/table.vue2.mjs +0 -0
  105. /package/{es/components → dist/es/src}/utils/install.mjs +0 -0
  106. /package/{lib → dist/lib}/_virtual/_plugin-vue_export-helper.js +0 -0
  107. /package/{lib → dist/lib}/_virtual/_plugin-vue_export-helper.js.map +0 -0
  108. /package/{lib/components → dist/lib}/index.js.map +0 -0
  109. /package/{lib/core/build-design → dist/lib}/package.json.js.map +0 -0
  110. /package/{lib/components → dist/lib/src}/component-neo/index.js +0 -0
  111. /package/{lib/components → dist/lib/src}/component-neo/src/component-neo.vue.js +0 -0
  112. /package/{lib/components → dist/lib/src}/component-neo/src/component-neo.vue2.js +0 -0
  113. /package/{lib/components → dist/lib/src}/component-neo/src/component-neo.vue2.js.map +0 -0
  114. /package/{lib/components → dist/lib/src}/component-neo/src/hooks/use-component-state.js +0 -0
  115. /package/{lib/components → dist/lib/src}/expand/index.js +0 -0
  116. /package/{lib/components → dist/lib/src}/expand/src/expand.vue.js.map +0 -0
  117. /package/{lib/components → dist/lib/src}/sort/index.js +0 -0
  118. /package/{lib/components → dist/lib/src}/sort/src/sort.js +0 -0
  119. /package/{lib/components → dist/lib/src}/table/index.js +0 -0
  120. /package/{lib/components → dist/lib/src}/table/src/table.vue.js.map +0 -0
  121. /package/{lib/components → dist/lib/src}/table/src/table.vue2.js +0 -0
  122. /package/{lib/components → dist/lib/src}/utils/install.js +0 -0
  123. /package/{types → dist/types}/component-neo/src/hooks/use-component-neo.d.ts +0 -0
  124. /package/{types → dist/types}/component-neo/src/hooks/use-component-state.d.ts +0 -0
  125. /package/{types → dist/types}/expand/index.d.ts +0 -0
  126. /package/{types → dist/types}/expand/src/expand.vue.d.ts +0 -0
  127. /package/{types → dist/types}/index.d.ts +0 -0
  128. /package/{types → dist/types}/installer.d.ts +0 -0
  129. /package/{types → dist/types}/sort/index.d.ts +0 -0
  130. /package/{types → dist/types}/sort/src/sort.d.ts +0 -0
  131. /package/{types → dist/types}/table/index.d.ts +0 -0
  132. /package/{types → dist/types}/table/src/table.d.ts +0 -0
  133. /package/{types → dist/types}/table/src/table.vue.d.ts +0 -0
  134. /package/{types → dist/types}/utils/install.d.ts +0 -0
@@ -0,0 +1,15 @@
1
+ import t from "./src/installer.mjs";
2
+ import { MtComponentNeo as p } from "./src/component-neo/index.mjs";
3
+ import { MtExpand as f } from "./src/expand/index.mjs";
4
+ import { MtSort as n } from "./src/sort/index.mjs";
5
+ import { MtTable as l } from "./src/table/index.mjs";
6
+ import { useComponentNeo as s } from "./src/component-neo/src/hooks/use-component-neo.mjs";
7
+ export {
8
+ p as MtComponentNeo,
9
+ f as MtExpand,
10
+ n as MtSort,
11
+ l as MtTable,
12
+ t as default,
13
+ s as useComponentNeo
14
+ };
15
+ //# sourceMappingURL=index.mjs.map
@@ -1,5 +1,5 @@
1
- const e = "0.4.0-beta.4";
1
+ const o = "0.5.0";
2
2
  export {
3
- e as version
3
+ o as version
4
4
  };
5
5
  //# sourceMappingURL=package.json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/component-neo/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport ComponentNeo from './src/component-neo.vue';\n\nexport const MtComponentNeo = withInstall(ComponentNeo);\n\nexport * from './src/component-neo';\nexport * from './src/hooks/use-component-neo';\n"],"names":["MtComponentNeo","withInstall","ComponentNeo"],"mappings":";;;;AAGa,MAAAA,IAAiBC,EAAYC,CAAY;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-neo.vue.mjs","sources":["../../../../../src/component-neo/src/component-neo.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ComponentNeoProps } from './component-neo';\nimport { Comment, computed, h, nextTick, unref, useAttrs, watch } from 'vue';\nimport { useComponentState } from './hooks/use-component-state';\n\ndefineOptions({ name: 'MtComponentNeo', inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<ComponentNeoProps>(),\n { uniqueId: '', onToggle: () => { } },\n);\n\nconst emit = defineEmits<{\n (e: 'toggleComponent', name?: string, ref?: any): void\n}>();\n\nconst { initComponent } = useComponentState();\nconst { componentRef, componentNeo, componentAttrs, componentSlots } = initComponent(props.uniqueId);\nconst compRef = (el: Element) => componentRef.value = el;\n\nconst commonAttrs: Record<string, unknown> = useAttrs();\n/** 结合注入的属性和公共属性 */\nconst compAttrs = computed(() => {\n const newAttrs: Record<string, unknown> = {};\n // 仅传入有值的属性\n for (const key in componentAttrs.value) {\n if (typeof componentAttrs.value[key] !== 'undefined') {\n newAttrs[key] = unref(componentAttrs.value[key]); // 支持ref数据转入\n }\n }\n return Object.assign(newAttrs, commonAttrs);\n});\n\nconst compInstance = computed(() => componentNeo.value || props.is);\n\nconst compVNode = computed(() => {\n return !compInstance.value ? h(Comment, 'ComponentNeo is empty') : h(compInstance.value, compAttrs.value, componentSlots.value);\n});\n\nconst compName = computed(() => {\n return typeof compInstance.value === 'object' && 'name' in compInstance.value ? compInstance.value.name : undefined;\n});\n\n// 监听组件切换,触发回调\nwatch(compInstance, async () => {\n await nextTick();\n emit('toggleComponent', compName.value, componentRef.value);\n});\n\ndefineExpose({ componentRef });\n</script>\n\n<template>\n <!-- eslint-disable-next-line vue/attribute-hyphenation -->\n <slot :Component=\"compVNode\" :compRef=\"compRef\" :attrs=\"compAttrs\" :compName=\"compName\">\n <component :is=\"compVNode\" :ref=\"compRef\" />\n </slot>\n</template>\n"],"names":["props","__props","emit","__emit","initComponent","useComponentState","componentRef","componentNeo","componentAttrs","componentSlots","compRef","el","commonAttrs","useAttrs","compAttrs","computed","newAttrs","key","unref","compInstance","compVNode","h","Comment","compName","watch","nextTick","__expose"],"mappings":";;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAKRC,IAAOC,GAIP,EAAE,eAAAC,EAAc,IAAIC,EAAkB,GACtC,EAAE,cAAAC,GAAc,cAAAC,GAAc,gBAAAC,GAAgB,gBAAAC,MAAmBL,EAAcJ,EAAM,QAAQ,GAC7FU,IAAU,CAACC,MAAgBL,EAAa,QAAQK,GAEhDC,IAAuCC,EAAS,GAEhDC,IAAYC,EAAS,MAAM;AAC/B,YAAMC,IAAoC,CAAC;AAEhC,iBAAAC,KAAOT,EAAe;AAC/B,QAAI,OAAOA,EAAe,MAAMS,CAAG,IAAM,QACvCD,EAASC,CAAG,IAAIC,EAAMV,EAAe,MAAMS,CAAG,CAAC;AAG5C,aAAA,OAAO,OAAOD,GAAUJ,CAAW;AAAA,IAAA,CAC3C,GAEKO,IAAeJ,EAAS,MAAMR,EAAa,SAASP,EAAM,EAAE,GAE5DoB,IAAYL,EAAS,MACjBI,EAAa,QAA8CE,EAAEF,EAAa,OAAOL,EAAU,OAAOL,EAAe,KAAK,IAAjGY,EAAEC,GAAS,uBAAuB,CAChE,GAEKC,IAAWR,EAAS,MACjB,OAAOI,EAAa,SAAU,YAAY,UAAUA,EAAa,QAAQA,EAAa,MAAM,OAAO,MAC3G;AAGD,WAAAK,EAAML,GAAc,YAAY;AAC9B,YAAMM,EAAS,GACfvB,EAAK,mBAAmBqB,EAAS,OAAOjB,EAAa,KAAK;AAAA,IAAA,CAC3D,GAEYoB,EAAA,EAAE,cAAApB,GAAc;;;;;;;;;;"}
@@ -0,0 +1,29 @@
1
+ import { isRef as u, nextTick as d } from "vue";
2
+ import { useComponentState as C } from "./use-component-state.mjs";
3
+ function y(r = "") {
4
+ const { setComponent: f, getComponent: s } = C();
5
+ async function i(t, l, p) {
6
+ var c;
7
+ try {
8
+ const a = typeof t == "function" ? (await t()).default : t, o = {};
9
+ for (let e in l) {
10
+ const n = l[e];
11
+ e.startsWith("vModel:") || e === "vModel" ? (e = e.replace(/^(vModel):?/, "") || "modelValue", o[e] = n, u(n) && (o[`onUpdate:${e}`] = (m) => n.value = m)) : o[e] = n;
12
+ }
13
+ return f(r, { comp: a, attrs: o, slots: p || {} }), await d(), (c = s(r)) == null ? void 0 : c.Instance.value;
14
+ } catch (a) {
15
+ console.error(a);
16
+ }
17
+ }
18
+ return {
19
+ getComponentRef: () => {
20
+ var t;
21
+ return (t = s(r)) == null ? void 0 : t.Instance.value;
22
+ },
23
+ toggleComponent: i
24
+ };
25
+ }
26
+ export {
27
+ y as useComponentNeo
28
+ };
29
+ //# sourceMappingURL=use-component-neo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-component-neo.mjs","sources":["../../../../../../src/component-neo/src/hooks/use-component-neo.ts"],"sourcesContent":["import type { VNode } from 'vue';\nimport type { ComponentSlots, InstanceComponent } from '../component-neo';\nimport { isRef, nextTick } from 'vue';\nimport { useComponentState } from './use-component-state';\n\nexport type ImportComponentFn = () => Promise<Record<string, any>>;\nexport type DynamicComponent = InstanceComponent | ImportComponentFn | VNode;\n\nexport function useComponentNeo(uniqueId = '') {\n const { setComponent, getComponent } = useComponentState();\n\n /**\n * 切换渲染的组件\n * @param comp 组件,支持传入,1.import动态导入 2.组件类型 3.VNode\n * @param attrs 组件属性,可使用`on事件`方式添加事件方法,属性支持Ref类型进行绑定以实现动态变化, 支持通过{'vModal:value': value}方式双向绑定数据\n * @param slots 组件插槽\n */\n async function toggleComponent(comp?: DynamicComponent, attrs?: Record<string, any>, slots?: ComponentSlots) {\n try {\n const renderComp = typeof comp === 'function' ? (await (comp as ImportComponentFn)()).default : comp;\n const renderAttrs: Record<string, unknown> = {};\n for (let key in attrs) {\n const bindValue = attrs[key];\n // 兼容vModel\n if (key.startsWith('vModel:') || key === 'vModel') {\n key = key.replace(/^(vModel):?/, '') || 'modelValue';\n renderAttrs[key] = bindValue;\n if (isRef(bindValue)) {\n renderAttrs[`onUpdate:${key}`] = (value: unknown) => bindValue.value = value;\n }\n }\n else {\n renderAttrs[key] = bindValue;\n }\n }\n setComponent(uniqueId, { comp: renderComp, attrs: renderAttrs, slots: slots || {} });\n await nextTick();\n return getComponent(uniqueId)?.Instance.value;\n }\n catch (e) {\n console.error(e);\n }\n }\n return {\n getComponentRef: () => getComponent(uniqueId)?.Instance.value,\n toggleComponent,\n };\n};\n"],"names":["useComponentNeo","uniqueId","setComponent","getComponent","useComponentState","toggleComponent","comp","attrs","slots","renderComp","renderAttrs","key","bindValue","isRef","value","nextTick","_a","e"],"mappings":";;AAQgB,SAAAA,EAAgBC,IAAW,IAAI;AAC7C,QAAM,EAAE,cAAAC,GAAc,cAAAC,EAAa,IAAIC,EAAkB;AAQ1C,iBAAAC,EAAgBC,GAAyBC,GAA6BC,GAAwB;;AACvG,QAAA;AACF,YAAMC,IAAa,OAAOH,KAAS,cAAc,MAAOA,EAAA,GAA8B,UAAUA,GAC1FI,IAAuC,CAAC;AAC9C,eAASC,KAAOJ,GAAO;AACf,cAAAK,IAAYL,EAAMI,CAAG;AAE3B,QAAIA,EAAI,WAAW,SAAS,KAAKA,MAAQ,YACvCA,IAAMA,EAAI,QAAQ,eAAe,EAAE,KAAK,cACxCD,EAAYC,CAAG,IAAIC,GACfC,EAAMD,CAAS,MACjBF,EAAY,YAAYC,CAAG,EAAE,IAAI,CAACG,MAAmBF,EAAU,QAAQE,MAIzEJ,EAAYC,CAAG,IAAIC;AAAA,MACrB;AAEW,aAAAV,EAAAD,GAAU,EAAE,MAAMQ,GAAY,OAAOC,GAAa,OAAOF,KAAS,CAAA,GAAI,GACnF,MAAMO,EAAS,IACRC,IAAAb,EAAaF,CAAQ,MAArB,gBAAAe,EAAwB,SAAS;AAAA,aAEnCC,GAAG;AACR,cAAQ,MAAMA,CAAC;AAAA,IAAA;AAAA,EACjB;AAEK,SAAA;AAAA,IACL,iBAAiB,MAAA;;AAAM,cAAAD,IAAAb,EAAaF,CAAQ,MAArB,gBAAAe,EAAwB,SAAS;AAAA;AAAA,IACxD,iBAAAX;AAAA,EACF;AACF;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-component-state.mjs","sources":["../../../../../../src/component-neo/src/hooks/use-component-state.ts"],"sourcesContent":["import type { Ref, ShallowRef, VNode } from 'vue';\nimport type { ComponentSlots, InstanceComponent } from '../component-neo';\nimport { createGlobalState } from '@vueuse/core';\nimport { onBeforeUnmount, ref, shallowRef } from 'vue';\n\ninterface ComponentRefsType {\n /** 引用实例 */\n Instance: Ref<any>\n /** 组件 */\n comp: ShallowRef<InstanceComponent | VNode | undefined>\n /** 属性 */\n attrs: Ref<Record<string, unknown>>\n /** 插槽 */\n slots: Ref<ComponentSlots>\n}\n\ninterface ComponentData {\n comp?: InstanceComponent | VNode\n attrs: Record<string, unknown>\n slots: ComponentSlots\n}\n\n/** 组件状态 */\nexport const useComponentState = createGlobalState(() => {\n /** 缓存组件数据,组件未实例化时,可先缓存后赋值 */\n const dataBufferMap = new Map<string, ComponentData>();\n /** 实例化后的组件 */\n const componentRefsMap = new Map<string, ComponentRefsType>();\n /** 初始化组件 */\n function initComponent(uniqueId = '') {\n let componentRefs = componentRefsMap.get(uniqueId);\n if (!componentRefs) {\n componentRefs = {\n Instance: ref(),\n comp: shallowRef<InstanceComponent | VNode>(),\n attrs: ref<Record<string, unknown>>({}),\n slots: ref<ComponentSlots>({}),\n };\n componentRefsMap.set(uniqueId, componentRefs);\n onBeforeUnmount(() => removeComponent(uniqueId));\n }\n // 使用缓存数据初始化数据\n const bufferData = dataBufferMap.get(uniqueId);\n if (bufferData) {\n componentRefs.comp.value = bufferData.comp;\n componentRefs.attrs.value = bufferData.attrs;\n componentRefs.slots.value = bufferData.slots;\n }\n\n return {\n componentRef: componentRefs.Instance,\n componentNeo: componentRefs.comp,\n componentAttrs: componentRefs.attrs,\n componentSlots: componentRefs.slots,\n };\n }\n\n /** 获取实例 */\n function getComponent(uniqueId = '') {\n return componentRefsMap.get(uniqueId);\n }\n\n /** 移除实例 */\n function removeComponent(uniqueId = '') {\n dataBufferMap.delete(uniqueId);\n componentRefsMap.delete(uniqueId);\n }\n\n /** 设置组件数据 */\n function setComponent(uniqueId = '', args: ComponentData) {\n const { comp, attrs, slots } = args;\n const componentRefs = getComponent(uniqueId);\n if (componentRefs) {\n componentRefs.comp.value = comp;\n componentRefs.attrs.value = attrs;\n componentRefs.slots.value = slots;\n }\n dataBufferMap.set(uniqueId, { comp, attrs, slots });\n }\n\n return { initComponent, setComponent, getComponent, removeComponent };\n});\n"],"names":["useComponentState","createGlobalState","dataBufferMap","componentRefsMap","initComponent","uniqueId","componentRefs","ref","shallowRef","onBeforeUnmount","removeComponent","bufferData","getComponent","setComponent","args","comp","attrs","slots"],"mappings":";;AAuBa,MAAAA,IAAoBC,EAAkB,MAAM;AAEjD,QAAAC,wBAAoB,IAA2B,GAE/CC,wBAAuB,IAA+B;AAEnD,WAAAC,EAAcC,IAAW,IAAI;AAChC,QAAAC,IAAgBH,EAAiB,IAAIE,CAAQ;AACjD,IAAKC,MACaA,IAAA;AAAA,MACd,UAAUC,EAAI;AAAA,MACd,MAAMC,EAAsC;AAAA,MAC5C,OAAOD,EAA6B,EAAE;AAAA,MACtC,OAAOA,EAAoB,CAAE,CAAA;AAAA,IAC/B,GACiBJ,EAAA,IAAIE,GAAUC,CAAa,GAC5BG,EAAA,MAAMC,EAAgBL,CAAQ,CAAC;AAG3C,UAAAM,IAAaT,EAAc,IAAIG,CAAQ;AAC7C,WAAIM,MACYL,EAAA,KAAK,QAAQK,EAAW,MACxBL,EAAA,MAAM,QAAQK,EAAW,OACzBL,EAAA,MAAM,QAAQK,EAAW,QAGlC;AAAA,MACL,cAAcL,EAAc;AAAA,MAC5B,cAAcA,EAAc;AAAA,MAC5B,gBAAgBA,EAAc;AAAA,MAC9B,gBAAgBA,EAAc;AAAA,IAChC;AAAA,EAAA;AAIO,WAAAM,EAAaP,IAAW,IAAI;AAC5B,WAAAF,EAAiB,IAAIE,CAAQ;AAAA,EAAA;AAI7B,WAAAK,EAAgBL,IAAW,IAAI;AACtC,IAAAH,EAAc,OAAOG,CAAQ,GAC7BF,EAAiB,OAAOE,CAAQ;AAAA,EAAA;AAIzB,WAAAQ,EAAaR,IAAW,IAAIS,GAAqB;AACxD,UAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,OAAAC,EAAU,IAAAH,GACzBR,IAAgBM,EAAaP,CAAQ;AAC3C,IAAIC,MACFA,EAAc,KAAK,QAAQS,GAC3BT,EAAc,MAAM,QAAQU,GAC5BV,EAAc,MAAM,QAAQW,IAE9Bf,EAAc,IAAIG,GAAU,EAAE,MAAAU,GAAM,OAAAC,GAAO,OAAAC,GAAO;AAAA,EAAA;AAGpD,SAAO,EAAE,eAAAb,GAAe,cAAAS,GAAc,cAAAD,GAAc,iBAAAF,EAAgB;AACtE,CAAC;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/expand/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport Expand from './src/expand.vue';\n\nexport const MtExpand = withInstall(Expand);\n\nexport * from './src/expand';\n"],"names":["MtExpand","withInstall","Expand"],"mappings":";;AAGa,MAAAA,IAAWC,EAAYC,CAAM;"}
@@ -0,0 +1 @@
1
+ .mt-expand[data-v-22b2ddba]{overflow:hidden}.mt-expand-transition[data-v-22b2ddba]{transition:height var(--3f24abce) ease-in-out}
@@ -1,8 +1,8 @@
1
1
  import o from "./expand.vue2.mjs";
2
2
  /* empty css */
3
3
  import t from "../../../_virtual/_plugin-vue_export-helper.mjs";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-60128610"]]);
4
+ const d = /* @__PURE__ */ t(o, [["__scopeId", "data-v-22b2ddba"]]);
5
5
  export {
6
- m as default
6
+ d as default
7
7
  };
8
8
  //# sourceMappingURL=expand.vue.mjs.map
@@ -0,0 +1,37 @@
1
+ import { defineComponent as c, useCssVars as p, computed as o, ref as r, createElementBlock as m, openBlock as f, normalizeStyle as d, normalizeClass as v, renderSlot as g } from "vue";
2
+ import { useResizeObserver as R, useDebounceFn as x } from "@vueuse/core";
3
+ const h = /* @__PURE__ */ c({
4
+ name: "MtExpand",
5
+ __name: "expand",
6
+ props: {
7
+ open: { type: Boolean, default: !1 },
8
+ targetRange: { default: 0 },
9
+ transitionTime: { default: 200 }
10
+ },
11
+ setup(i) {
12
+ p((e) => ({
13
+ "3f24abce": l.value
14
+ }));
15
+ const t = i, l = o(() => `${t.transitionTime}ms`), a = r(), n = r(0);
16
+ R(a, x(() => {
17
+ var e;
18
+ n.value = ((e = a.value) == null ? void 0 : e.scrollHeight) || 0;
19
+ }, 200));
20
+ const s = o(() => n.value > t.targetRange), u = o(() => n.value ? { height: `${!s.value || t.open ? n.value : t.targetRange}px` } : {});
21
+ return (e, y) => (f(), m("div", {
22
+ ref_key: "contentRef",
23
+ ref: a,
24
+ class: v(["mt-expand", { "mt-expand-transition": !!e.transitionTime }]),
25
+ style: d(u.value)
26
+ }, [
27
+ g(e.$slots, "default", {
28
+ open: e.open,
29
+ isOutRange: s.value
30
+ }, void 0, !0)
31
+ ], 6));
32
+ }
33
+ });
34
+ export {
35
+ h as default
36
+ };
37
+ //# sourceMappingURL=expand.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.vue2.mjs","sources":["../../../../../src/expand/src/expand.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ExpandProps } from './expand.ts';\nimport { useDebounceFn, useResizeObserver } from '@vueuse/core';\nimport { computed, ref } from 'vue';\n\ndefineOptions({ name: 'MtExpand' });\n\nconst props = withDefaults(defineProps<ExpandProps>(), {\n open: false,\n targetRange: 0,\n transitionTime: 200,\n});\n\nconst transitionDuration = computed(() => `${props.transitionTime}ms`);\n\n/** 容器实例 */\nconst contentRef = ref<HTMLDivElement>();\n/** 容器的范围 */\nconst contentRange = ref(0);\n// 监听容器变化\nuseResizeObserver(contentRef, useDebounceFn(() => {\n contentRange.value = contentRef.value?.scrollHeight || 0;\n}, 200));\n\n/** 是否超出目标范围 */\nconst isOutRange = computed(() => contentRange.value > props.targetRange);\n\n/** 展开或收起后容器样式 */\nconst contentStyle = computed(() => {\n if (!contentRange.value) {\n return {};\n }\n const size = !isOutRange.value || props.open ? contentRange.value : props.targetRange;\n return { height: `${size}px` };\n});\n</script>\n\n<template>\n <div\n ref=\"contentRef\"\n class=\"mt-expand\"\n :class=\"{ 'mt-expand-transition': !!transitionTime }\"\n :style=\"contentStyle\"\n >\n <slot :open=\"open\" :is-out-range=\"isOutRange\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.mt-expand {\n overflow: hidden;\n}\n\n.mt-expand-transition {\n transition: height v-bind(transitionDuration) ease-in-out;\n}\n</style>\n"],"names":["props","__props","transitionDuration","computed","contentRef","ref","contentRange","useResizeObserver","useDebounceFn","_a","isOutRange","contentStyle"],"mappings":";;;;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAMRC,IAAqBC,EAAS,MAAM,GAAGH,EAAM,cAAc,IAAI,GAG/DI,IAAaC,EAAoB,GAEjCC,IAAeD,EAAI,CAAC;AAER,IAAAE,EAAAH,GAAYI,EAAc,MAAM;;AACnC,MAAAF,EAAA,UAAQG,IAAAL,EAAW,UAAX,gBAAAK,EAAkB,iBAAgB;AAAA,IACzD,GAAG,GAAG,CAAC;AAGP,UAAMC,IAAaP,EAAS,MAAMG,EAAa,QAAQN,EAAM,WAAW,GAGlEW,IAAeR,EAAS,MACvBG,EAAa,QAIX,EAAE,QAAQ,GADJ,CAACI,EAAW,SAASV,EAAM,OAAOM,EAAa,QAAQN,EAAM,WAClD,KAAK,IAHpB,CAAC,CAIX;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { version as e } from "../core/build-design/package.json.mjs";
1
+ import { version as e } from "../package.json.mjs";
2
2
  import { MtComponentNeo as m } from "./component-neo/index.mjs";
3
3
  import { MtExpand as i } from "./expand/index.mjs";
4
4
  import { MtSort as l } from "./sort/index.mjs";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.mjs","sources":["../../../src/installer.ts"],"sourcesContent":["import type { App, Component, Plugin } from 'vue';\nimport { version } from '../package.json';\nimport { MtComponentNeo } from './component-neo';\nimport { MtExpand } from './expand';\nimport { MtSort } from './sort';\nimport { MtTable } from './table';\n\nconst INSTALLED_KEY = Symbol('MT_INSTALLED_KEY');\n\nfunction makeInstaller(components: Component[] = []) {\n const install = (app: App & { [INSTALLED_KEY]?: boolean }) => {\n if (app[INSTALLED_KEY])\n return;\n\n app[INSTALLED_KEY] = true;\n components.forEach(c => app.use(c as Plugin));\n };\n\n return {\n version,\n install,\n };\n}\n\nconst installer = makeInstaller([\n MtComponentNeo,\n MtExpand,\n MtSort,\n MtTable,\n]);\n\nexport default installer;\n"],"names":["INSTALLED_KEY","makeInstaller","components","version","app","c","installer","MtComponentNeo","MtExpand","MtSort","MtTable"],"mappings":";;;;;AAOA,MAAMA,IAAgB,OAAO,kBAAkB;AAE/C,SAASC,EAAcC,IAA0B,IAAI;AAS5C,SAAA;AAAA,IACL,SAAAC;AAAA,IACA,SAVc,CAACC,MAA6C;AAC5D,MAAIA,EAAIJ,CAAa,MAGrBI,EAAIJ,CAAa,IAAI,IACrBE,EAAW,QAAQ,CAAAG,MAAKD,EAAI,IAAIC,CAAW,CAAC;AAAA,IAC9C;AAAA,EAKA;AACF;AAEA,MAAMC,IAAYL,EAAc;AAAA,EAC9BM;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AACF,CAAC;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/sort/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport Sort from './src/sort';\n\nexport const MtSort = withInstall(Sort);\n\nexport * from './src/sort';\n"],"names":["MtSort","withInstall","Sort"],"mappings":";;AAGa,MAAAA,IAASC,EAAYC,CAAI;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.mjs","sources":["../../../../../src/sort/src/sort.ts"],"sourcesContent":["import type { PropType, VNode } from 'vue';\nimport { computed, defineComponent } from 'vue';\n\nexport interface SortProps {\n /** 排序配置 */\n sortList?: (string | number)[]\n /** 排序key名 */\n keyName?: string\n}\n\nexport default defineComponent({\n name: 'MtSort',\n props: {\n /** 排序配置 */\n sortList: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n /** 排序key名 */\n keyName: {\n type: String,\n default: 'sort-key',\n },\n },\n setup(props, { slots }) {\n const renderVNodes = computed(() => {\n const vNodeList = slots.default?.() || [];\n const sortVNodeMap = getVNodeMap(props.keyName, vNodeList);\n const sortVNodeList = Array.from(new Set(props.sortList)).map(key => sortVNodeMap[key]).filter(Boolean);\n return sortDefaultVNodes(props.keyName, vNodeList, props.sortList, sortVNodeList);\n });\n\n return () => renderVNodes.value;\n },\n});\n\n/** 获取插槽中需要排序的节点 */\nfunction getVNodeMap(keyName: string, vNodeList: VNode[], vNodeMap: Record<(string | number), VNode> = {}) {\n vNodeList.forEach((item) => {\n const sortKey = item.props?.[keyName];\n if (sortKey) {\n if (vNodeMap[sortKey]) {\n console.warn(`<mt-sort> ${keyName}: ${sortKey} repeat`);\n }\n else {\n vNodeMap[sortKey] = item;\n }\n return;\n }\n if (Array.isArray(item.children)) {\n getVNodeMap(keyName, item.children as VNode[], vNodeMap);\n }\n });\n return vNodeMap;\n}\n\n/** 根据排序后的节点跟换位置 */\nfunction sortDefaultVNodes(keyName: string, vNodeList: VNode[], sortList: (string | number)[], sortVNodeList: VNode[]) {\n const newList: VNode[] = [];\n vNodeList.forEach((vNode) => {\n const sortKey = vNode.props?.[keyName];\n if (sortKey && sortList.includes(sortKey)) {\n const sortVNode = sortVNodeList.shift();\n if (sortVNode) {\n newList.push(sortVNode);\n return;\n }\n }\n if (Array.isArray(vNode.children)) {\n vNode = { ...vNode }; // 避免修改原节点数据\n vNode.children = sortDefaultVNodes(keyName, vNode.children as VNode[], sortList, sortVNodeList);\n }\n newList.push(vNode);\n });\n return newList;\n}\n"],"names":["Sort","defineComponent","props","slots","renderVNodes","computed","vNodeList","_a","sortVNodeMap","getVNodeMap","sortVNodeList","key","sortDefaultVNodes","keyName","vNodeMap","item","sortKey","sortList","newList","vNode","sortVNode"],"mappings":";AAUA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA;AAAA,IAEL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS,MAAM,CAAA;AAAA,IACjB;AAAA;AAAA,IAEA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA,EACA,MAAMC,GAAO,EAAE,OAAAC,KAAS;AAChB,UAAAC,IAAeC,EAAS,MAAM;;AAClC,YAAMC,MAAYC,IAAAJ,EAAM,YAAN,gBAAAI,EAAA,KAAAJ,OAAqB,CAAC,GAClCK,IAAeC,EAAYP,EAAM,SAASI,CAAS,GACnDI,IAAgB,MAAM,KAAK,IAAI,IAAIR,EAAM,QAAQ,CAAC,EAAE,IAAI,OAAOM,EAAaG,CAAG,CAAC,EAAE,OAAO,OAAO;AACtG,aAAOC,EAAkBV,EAAM,SAASI,GAAWJ,EAAM,UAAUQ,CAAa;AAAA,IAAA,CACjF;AAED,WAAO,MAAMN,EAAa;AAAA,EAAA;AAE9B,CAAC;AAGD,SAASK,EAAYI,GAAiBP,GAAoBQ,IAA6C,CAAA,GAAI;AAC/F,SAAAR,EAAA,QAAQ,CAACS,MAAS;;AACpB,UAAAC,KAAUT,IAAAQ,EAAK,UAAL,gBAAAR,EAAaM;AAC7B,QAAIG,GAAS;AACP,MAAAF,EAASE,CAAO,IAClB,QAAQ,KAAK,aAAaH,CAAO,KAAKG,CAAO,SAAS,IAGtDF,EAASE,CAAO,IAAID;AAEtB;AAAA,IAAA;AAEF,IAAI,MAAM,QAAQA,EAAK,QAAQ,KACjBN,EAAAI,GAASE,EAAK,UAAqBD,CAAQ;AAAA,EACzD,CACD,GACMA;AACT;AAGA,SAASF,EAAkBC,GAAiBP,GAAoBW,GAA+BP,GAAwB;AACrH,QAAMQ,IAAmB,CAAC;AAChB,SAAAZ,EAAA,QAAQ,CAACa,MAAU;;AACrB,UAAAH,KAAUT,IAAAY,EAAM,UAAN,gBAAAZ,EAAcM;AAC9B,QAAIG,KAAWC,EAAS,SAASD,CAAO,GAAG;AACnC,YAAAI,IAAYV,EAAc,MAAM;AACtC,UAAIU,GAAW;AACb,QAAAF,EAAQ,KAAKE,CAAS;AACtB;AAAA,MAAA;AAAA,IACF;AAEF,IAAI,MAAM,QAAQD,EAAM,QAAQ,MACtBA,IAAA,EAAE,GAAGA,EAAM,GACnBA,EAAM,WAAWP,EAAkBC,GAASM,EAAM,UAAqBF,GAAUP,CAAa,IAEhGQ,EAAQ,KAAKC,CAAK;AAAA,EAAA,CACnB,GACMD;AACT;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/table/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport Table from './src/table.vue';\n\nexport const MtTable = withInstall(Table);\n\nexport * from './src/table';\n"],"names":["MtTable","withInstall","Table"],"mappings":";;AAGa,MAAAA,IAAUC,EAAYC,CAAK;"}
@@ -0,0 +1 @@
1
+ .mt-table[data-v-76e3a23b]{width:100%;max-width:100%;border-spacing:0;border-collapse:collapse}.mt-table thead tr th[data-v-76e3a23b]{padding:8px 16px;border:1px #f0f0f0 solid}.mt-table tbody tr td[data-v-76e3a23b]{padding:16px;border:1px #f0f0f0 solid}
@@ -1,7 +1,7 @@
1
1
  import o from "./table.vue2.mjs";
2
2
  /* empty css */
3
3
  import t from "../../../_virtual/_plugin-vue_export-helper.mjs";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-46d3894f"]]);
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-76e3a23b"]]);
5
5
  export {
6
6
  m as default
7
7
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.vue2.mjs","sources":["../../../../../src/table/src/table.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { TableProps } from './table';\nimport { computed } from 'vue';\n\ndefineOptions({ name: 'MtTable' });\n\nconst props = withDefaults(defineProps<TableProps>(), {\n data: () => [],\n config: () => [],\n});\n\n/** 表头配置 */\nconst headConfig = computed(() => {\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.title) }));\n});\n\n/** 数据配置 */\nconst dataConfig = computed(() => {\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.dataKey) }));\n});\n\n/** 最大列数 */\nconst maxColSpan = computed(() => {\n const handReduce = headConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.head?.colSpan || 1), 0));\n const cellReduce = dataConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.cell?.colSpan || 1), 0));\n return Math.max(...handReduce, ...cellReduce);\n});\n\n/** 表头列合并 */\nconst headColSpan = computed(() => {\n const colSpanList = headConfig.value.map(item => item.columns.map(column => column.head?.colSpan || 0));\n return getColSpanData(colSpanList);\n});\n\n/** 数据列合并 */\nconst dataColSpan = computed(() => {\n const colSpanList = dataConfig.value.map(item => item.columns.map(column => column.cell?.colSpan || 0));\n return getColSpanData(colSpanList);\n});\n\n/** 获取合并列数组 */\nfunction getColSpanData(colSpanList: number[][]) {\n return colSpanList.map((columns) => {\n const colSpanColumns = columns.filter(Boolean); // 已分配colSpan的列\n const beenColSpan = colSpanColumns.reduce((pur, cur) => pur + cur, 0); // 总colSpan\n let remainCount = columns.length - colSpanColumns.length; // 剩余未配置colSpan的列数\n let remainColSpan = maxColSpan.value - beenColSpan; // 剩余可分配的colSpan\n return columns.map((colSpan) => {\n if (!colSpan && remainColSpan > 0) {\n colSpan = Math.ceil(remainColSpan / remainCount); // 每列平均分配colSpan\n remainCount--;\n remainColSpan -= colSpan;\n }\n return colSpan;\n });\n });\n}\n</script>\n\n<template>\n <table class=\"mt-table\">\n <!-- 表头 -->\n <thead>\n <tr\n v-for=\"(row, rowIndex) in headConfig\"\n :key=\"rowIndex\"\n :style=\"row.headStyle\"\n >\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.title}-${columnIndex}`\">\n <th\n :colspan=\"headColSpan[rowIndex][columnIndex]\"\n :rowspan=\"column.head?.rowSpan\"\n :style=\"column.head?.style\"\n >\n <slot\n :column=\"column\"\n :column-index=\"columnIndex\"\n :row=\"row\"\n :row-index=\"rowIndex\"\n name=\"header\"\n >\n {{ column.title }}\n </slot>\n </th>\n </template>\n </tr>\n </thead>\n <!-- 表体 -->\n <tbody>\n <template\n v-for=\"(record, dataIndex) in data\"\n :key=\"dataIndex\"\n >\n <tr\n v-for=\"(row, rowIndex) in dataConfig\"\n :key=\"rowIndex\"\n :style=\"row.rowStyle\"\n >\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.dataKey}-${columnIndex}`\">\n <td\n :colspan=\"dataColSpan[rowIndex][columnIndex]\"\n :rowspan=\"column.cell?.rowSpan\"\n :style=\"column.cell?.style\"\n >\n <slot\n :column=\"column\"\n :column-index=\"columnIndex\"\n :data-index=\"dataIndex\"\n name=\"cell\"\n :record=\"record\"\n :row=\"row\"\n :row-index=\"rowIndex\"\n >\n {{ record[column.dataKey!] }}\n </slot>\n </td>\n </template>\n </tr>\n </template>\n </tbody>\n </table>\n</template>\n\n<style lang=\"scss\" scoped>\n.mt-table {\n width: 100%;\n max-width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n thead {\n tr {\n th {\n padding: 8px 16px;\n border: 1px #f0f0f0 solid;\n }\n }\n }\n\n tbody {\n tr {\n td {\n padding: 16px;\n border: 1px #f0f0f0 solid;\n }\n }\n }\n}\n</style>\n"],"names":["props","__props","headConfig","computed","rowItem","column","dataConfig","maxColSpan","handReduce","item","pre","cur","_a","cellReduce","headColSpan","colSpanList","getColSpanData","dataColSpan","columns","colSpanColumns","beenColSpan","pur","remainCount","remainColSpan","colSpan"],"mappings":";;;;;;;;;AAMA,UAAMA,IAAQC,GAMRC,IAAaC,EAAS,MACnBH,EAAM,OAAO,IAAI,CAAAI,OAAY,EAAE,GAAGA,GAAS,SAASA,EAAQ,QAAQ,OAAO,CAAAC,MAAUA,EAAO,KAAK,IAAI,CAC7G,GAGKC,IAAaH,EAAS,MACnBH,EAAM,OAAO,IAAI,CAAAI,OAAY,EAAE,GAAGA,GAAS,SAASA,EAAQ,QAAQ,OAAO,CAAAC,MAAUA,EAAO,OAAO,IAAI,CAC/G,GAGKE,IAAaJ,EAAS,MAAM;AAChC,YAAMK,IAAaN,EAAW,MAAM,IAAI,CAAAO,MAAQA,EAAK,QAAQ,OAAO,CAACC,GAAKC;;AAAQ,eAAAD,OAAOE,IAAAD,EAAI,SAAJ,gBAAAC,EAAU,YAAW;AAAA,SAAI,CAAC,CAAC,GAC9GC,IAAaP,EAAW,MAAM,IAAI,CAAAG,MAAQA,EAAK,QAAQ,OAAO,CAACC,GAAKC;;AAAQ,eAAAD,OAAOE,IAAAD,EAAI,SAAJ,gBAAAC,EAAU,YAAW;AAAA,SAAI,CAAC,CAAC;AACpH,aAAO,KAAK,IAAI,GAAGJ,GAAY,GAAGK,CAAU;AAAA,IAAA,CAC7C,GAGKC,IAAcX,EAAS,MAAM;AACjC,YAAMY,IAAcb,EAAW,MAAM,IAAI,CAAQO,MAAAA,EAAK,QAAQ,IAAI,CAAUJ,MAAA;;AAAA,iBAAAO,IAAAP,EAAO,SAAP,gBAAAO,EAAa,YAAW;AAAA,OAAC,CAAC;AACtG,aAAOI,EAAeD,CAAW;AAAA,IAAA,CAClC,GAGKE,IAAcd,EAAS,MAAM;AACjC,YAAMY,IAAcT,EAAW,MAAM,IAAI,CAAQG,MAAAA,EAAK,QAAQ,IAAI,CAAUJ,MAAA;;AAAA,iBAAAO,IAAAP,EAAO,SAAP,gBAAAO,EAAa,YAAW;AAAA,OAAC,CAAC;AACtG,aAAOI,EAAeD,CAAW;AAAA,IAAA,CAClC;AAGD,aAASC,EAAeD,GAAyB;AACxC,aAAAA,EAAY,IAAI,CAACG,MAAY;AAC5B,cAAAC,IAAiBD,EAAQ,OAAO,OAAO,GACvCE,IAAcD,EAAe,OAAO,CAACE,GAAKV,MAAQU,IAAMV,GAAK,CAAC;AAChE,YAAAW,IAAcJ,EAAQ,SAASC,EAAe,QAC9CI,IAAgBhB,EAAW,QAAQa;AAChC,eAAAF,EAAQ,IAAI,CAACM,OACd,CAACA,KAAWD,IAAgB,MACpBC,IAAA,KAAK,KAAKD,IAAgBD,CAAW,GAC/CA,KACiBC,KAAAC,IAEZA,EACR;AAAA,MAAA,CACF;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.mjs","sources":["../../../../src/utils/install.ts"],"sourcesContent":["import type { App, Component, Plugin } from 'vue';\n\nexport function withInstall<T extends Component>(comp: T) {\n (comp as T & Plugin).install = (app: App): void => {\n if (comp.name) {\n app.component(comp.name, comp);\n }\n };\n return comp;\n}\n"],"names":["withInstall","comp","app"],"mappings":"AAEO,SAASA,EAAiCC,GAAS;AACvD,SAAAA,EAAoB,UAAU,CAACC,MAAmB;AACjD,IAAID,EAAK,QACHC,EAAA,UAAUD,EAAK,MAAMA,CAAI;AAAA,EAEjC,GACOA;AACT;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./src/installer.js"),t=require("./src/component-neo/index.js"),o=require("./src/expand/index.js"),n=require("./src/sort/index.js"),r=require("./src/table/index.js"),u=require("./src/component-neo/src/hooks/use-component-neo.js");exports.default=e.default;exports.MtComponentNeo=t.MtComponentNeo;exports.MtExpand=o.MtExpand;exports.MtSort=n.MtSort;exports.MtTable=r.MtTable;exports.useComponentNeo=u.useComponentNeo;
2
+ //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="0.4.0-beta.4";exports.version=e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="0.5.0";exports.version=e;
2
2
  //# sourceMappingURL=package.json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/component-neo/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport ComponentNeo from './src/component-neo.vue';\n\nexport const MtComponentNeo = withInstall(ComponentNeo);\n\nexport * from './src/component-neo';\nexport * from './src/hooks/use-component-neo';\n"],"names":["MtComponentNeo","withInstall","ComponentNeo"],"mappings":"4NAGa,MAAAA,EAAiBC,cAAYC,EAAY,OAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-neo.vue.js","sources":["../../../../../src/component-neo/src/component-neo.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ComponentNeoProps } from './component-neo';\nimport { Comment, computed, h, nextTick, unref, useAttrs, watch } from 'vue';\nimport { useComponentState } from './hooks/use-component-state';\n\ndefineOptions({ name: 'MtComponentNeo', inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<ComponentNeoProps>(),\n { uniqueId: '', onToggle: () => { } },\n);\n\nconst emit = defineEmits<{\n (e: 'toggleComponent', name?: string, ref?: any): void\n}>();\n\nconst { initComponent } = useComponentState();\nconst { componentRef, componentNeo, componentAttrs, componentSlots } = initComponent(props.uniqueId);\nconst compRef = (el: Element) => componentRef.value = el;\n\nconst commonAttrs: Record<string, unknown> = useAttrs();\n/** 结合注入的属性和公共属性 */\nconst compAttrs = computed(() => {\n const newAttrs: Record<string, unknown> = {};\n // 仅传入有值的属性\n for (const key in componentAttrs.value) {\n if (typeof componentAttrs.value[key] !== 'undefined') {\n newAttrs[key] = unref(componentAttrs.value[key]); // 支持ref数据转入\n }\n }\n return Object.assign(newAttrs, commonAttrs);\n});\n\nconst compInstance = computed(() => componentNeo.value || props.is);\n\nconst compVNode = computed(() => {\n return !compInstance.value ? h(Comment, 'ComponentNeo is empty') : h(compInstance.value, compAttrs.value, componentSlots.value);\n});\n\nconst compName = computed(() => {\n return typeof compInstance.value === 'object' && 'name' in compInstance.value ? compInstance.value.name : undefined;\n});\n\n// 监听组件切换,触发回调\nwatch(compInstance, async () => {\n await nextTick();\n emit('toggleComponent', compName.value, componentRef.value);\n});\n\ndefineExpose({ componentRef });\n</script>\n\n<template>\n <!-- eslint-disable-next-line vue/attribute-hyphenation -->\n <slot :Component=\"compVNode\" :compRef=\"compRef\" :attrs=\"compAttrs\" :compName=\"compName\">\n <component :is=\"compVNode\" :ref=\"compRef\" />\n </slot>\n</template>\n"],"names":["props","__props","emit","__emit","initComponent","useComponentState","componentRef","componentNeo","componentAttrs","componentSlots","compRef","el","commonAttrs","useAttrs","compAttrs","computed","newAttrs","key","unref","compInstance","compVNode","h","Comment","compName","watch","nextTick","__expose"],"mappings":"0VAOA,MAAMA,EAAQC,EAKRC,EAAOC,EAIP,CAAE,cAAAC,CAAc,EAAIC,oBAAkB,EACtC,CAAE,aAAAC,EAAc,aAAAC,EAAc,eAAAC,EAAgB,eAAAC,GAAmBL,EAAcJ,EAAM,QAAQ,EAC7FU,EAAWC,GAAgBL,EAAa,MAAQK,EAEhDC,EAAuCC,EAAAA,SAAS,EAEhDC,EAAYC,EAAAA,SAAS,IAAM,CAC/B,MAAMC,EAAoC,CAAC,EAEhC,UAAAC,KAAOT,EAAe,MAC3B,OAAOA,EAAe,MAAMS,CAAG,EAAM,MACvCD,EAASC,CAAG,EAAIC,EAAAA,MAAMV,EAAe,MAAMS,CAAG,CAAC,GAG5C,OAAA,OAAO,OAAOD,EAAUJ,CAAW,CAAA,CAC3C,EAEKO,EAAeJ,EAAAA,SAAS,IAAMR,EAAa,OAASP,EAAM,EAAE,EAE5DoB,EAAYL,EAAAA,SAAS,IACjBI,EAAa,MAA8CE,IAAEF,EAAa,MAAOL,EAAU,MAAOL,EAAe,KAAK,EAAjGY,EAAAA,EAAEC,EAAAA,QAAS,uBAAuB,CAChE,EAEKC,EAAWR,EAAAA,SAAS,IACjB,OAAOI,EAAa,OAAU,UAAY,SAAUA,EAAa,MAAQA,EAAa,MAAM,KAAO,MAC3G,EAGDK,OAAAA,EAAA,MAAML,EAAc,SAAY,CAC9B,MAAMM,WAAS,EACfvB,EAAK,kBAAmBqB,EAAS,MAAOjB,EAAa,KAAK,CAAA,CAC3D,EAEYoB,EAAA,CAAE,aAAApB,EAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("vue"),d=require("./use-component-state.js");function C(r=""){const{setComponent:i,getComponent:a}=d.useComponentState();async function p(t,l,f){var c;try{const s=typeof t=="function"?(await t()).default:t,o={};for(let e in l){const n=l[e];e.startsWith("vModel:")||e==="vModel"?(e=e.replace(/^(vModel):?/,"")||"modelValue",o[e]=n,u.isRef(n)&&(o[`onUpdate:${e}`]=m=>n.value=m)):o[e]=n}return i(r,{comp:s,attrs:o,slots:f||{}}),await u.nextTick(),(c=a(r))==null?void 0:c.Instance.value}catch(s){console.error(s)}}return{getComponentRef:()=>{var t;return(t=a(r))==null?void 0:t.Instance.value},toggleComponent:p}}exports.useComponentNeo=C;
2
+ //# sourceMappingURL=use-component-neo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-component-neo.js","sources":["../../../../../../src/component-neo/src/hooks/use-component-neo.ts"],"sourcesContent":["import type { VNode } from 'vue';\nimport type { ComponentSlots, InstanceComponent } from '../component-neo';\nimport { isRef, nextTick } from 'vue';\nimport { useComponentState } from './use-component-state';\n\nexport type ImportComponentFn = () => Promise<Record<string, any>>;\nexport type DynamicComponent = InstanceComponent | ImportComponentFn | VNode;\n\nexport function useComponentNeo(uniqueId = '') {\n const { setComponent, getComponent } = useComponentState();\n\n /**\n * 切换渲染的组件\n * @param comp 组件,支持传入,1.import动态导入 2.组件类型 3.VNode\n * @param attrs 组件属性,可使用`on事件`方式添加事件方法,属性支持Ref类型进行绑定以实现动态变化, 支持通过{'vModal:value': value}方式双向绑定数据\n * @param slots 组件插槽\n */\n async function toggleComponent(comp?: DynamicComponent, attrs?: Record<string, any>, slots?: ComponentSlots) {\n try {\n const renderComp = typeof comp === 'function' ? (await (comp as ImportComponentFn)()).default : comp;\n const renderAttrs: Record<string, unknown> = {};\n for (let key in attrs) {\n const bindValue = attrs[key];\n // 兼容vModel\n if (key.startsWith('vModel:') || key === 'vModel') {\n key = key.replace(/^(vModel):?/, '') || 'modelValue';\n renderAttrs[key] = bindValue;\n if (isRef(bindValue)) {\n renderAttrs[`onUpdate:${key}`] = (value: unknown) => bindValue.value = value;\n }\n }\n else {\n renderAttrs[key] = bindValue;\n }\n }\n setComponent(uniqueId, { comp: renderComp, attrs: renderAttrs, slots: slots || {} });\n await nextTick();\n return getComponent(uniqueId)?.Instance.value;\n }\n catch (e) {\n console.error(e);\n }\n }\n return {\n getComponentRef: () => getComponent(uniqueId)?.Instance.value,\n toggleComponent,\n };\n};\n"],"names":["useComponentNeo","uniqueId","setComponent","getComponent","useComponentState","toggleComponent","comp","attrs","slots","renderComp","renderAttrs","key","bindValue","isRef","value","nextTick","_a","e"],"mappings":"6IAQgB,SAAAA,EAAgBC,EAAW,GAAI,CAC7C,KAAM,CAAE,aAAAC,EAAc,aAAAC,CAAa,EAAIC,oBAAkB,EAQ1C,eAAAC,EAAgBC,EAAyBC,EAA6BC,EAAwB,OACvG,GAAA,CACF,MAAMC,EAAa,OAAOH,GAAS,YAAc,MAAOA,EAAA,GAA8B,QAAUA,EAC1FI,EAAuC,CAAC,EAC9C,QAASC,KAAOJ,EAAO,CACf,MAAAK,EAAYL,EAAMI,CAAG,EAEvBA,EAAI,WAAW,SAAS,GAAKA,IAAQ,UACvCA,EAAMA,EAAI,QAAQ,cAAe,EAAE,GAAK,aACxCD,EAAYC,CAAG,EAAIC,EACfC,EAAAA,MAAMD,CAAS,IACjBF,EAAY,YAAYC,CAAG,EAAE,EAAKG,GAAmBF,EAAU,MAAQE,IAIzEJ,EAAYC,CAAG,EAAIC,CACrB,CAEW,OAAAV,EAAAD,EAAU,CAAE,KAAMQ,EAAY,MAAOC,EAAa,MAAOF,GAAS,CAAA,EAAI,EACnF,MAAMO,WAAS,GACRC,EAAAb,EAAaF,CAAQ,IAArB,YAAAe,EAAwB,SAAS,YAEnCC,EAAG,CACR,QAAQ,MAAMA,CAAC,CAAA,CACjB,CAEK,MAAA,CACL,gBAAiB,IAAA,OAAM,OAAAD,EAAAb,EAAaF,CAAQ,IAArB,YAAAe,EAAwB,SAAS,OACxD,gBAAAX,CACF,CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-component-state.js","sources":["../../../../../../src/component-neo/src/hooks/use-component-state.ts"],"sourcesContent":["import type { Ref, ShallowRef, VNode } from 'vue';\nimport type { ComponentSlots, InstanceComponent } from '../component-neo';\nimport { createGlobalState } from '@vueuse/core';\nimport { onBeforeUnmount, ref, shallowRef } from 'vue';\n\ninterface ComponentRefsType {\n /** 引用实例 */\n Instance: Ref<any>\n /** 组件 */\n comp: ShallowRef<InstanceComponent | VNode | undefined>\n /** 属性 */\n attrs: Ref<Record<string, unknown>>\n /** 插槽 */\n slots: Ref<ComponentSlots>\n}\n\ninterface ComponentData {\n comp?: InstanceComponent | VNode\n attrs: Record<string, unknown>\n slots: ComponentSlots\n}\n\n/** 组件状态 */\nexport const useComponentState = createGlobalState(() => {\n /** 缓存组件数据,组件未实例化时,可先缓存后赋值 */\n const dataBufferMap = new Map<string, ComponentData>();\n /** 实例化后的组件 */\n const componentRefsMap = new Map<string, ComponentRefsType>();\n /** 初始化组件 */\n function initComponent(uniqueId = '') {\n let componentRefs = componentRefsMap.get(uniqueId);\n if (!componentRefs) {\n componentRefs = {\n Instance: ref(),\n comp: shallowRef<InstanceComponent | VNode>(),\n attrs: ref<Record<string, unknown>>({}),\n slots: ref<ComponentSlots>({}),\n };\n componentRefsMap.set(uniqueId, componentRefs);\n onBeforeUnmount(() => removeComponent(uniqueId));\n }\n // 使用缓存数据初始化数据\n const bufferData = dataBufferMap.get(uniqueId);\n if (bufferData) {\n componentRefs.comp.value = bufferData.comp;\n componentRefs.attrs.value = bufferData.attrs;\n componentRefs.slots.value = bufferData.slots;\n }\n\n return {\n componentRef: componentRefs.Instance,\n componentNeo: componentRefs.comp,\n componentAttrs: componentRefs.attrs,\n componentSlots: componentRefs.slots,\n };\n }\n\n /** 获取实例 */\n function getComponent(uniqueId = '') {\n return componentRefsMap.get(uniqueId);\n }\n\n /** 移除实例 */\n function removeComponent(uniqueId = '') {\n dataBufferMap.delete(uniqueId);\n componentRefsMap.delete(uniqueId);\n }\n\n /** 设置组件数据 */\n function setComponent(uniqueId = '', args: ComponentData) {\n const { comp, attrs, slots } = args;\n const componentRefs = getComponent(uniqueId);\n if (componentRefs) {\n componentRefs.comp.value = comp;\n componentRefs.attrs.value = attrs;\n componentRefs.slots.value = slots;\n }\n dataBufferMap.set(uniqueId, { comp, attrs, slots });\n }\n\n return { initComponent, setComponent, getComponent, removeComponent };\n});\n"],"names":["useComponentState","createGlobalState","dataBufferMap","componentRefsMap","initComponent","uniqueId","componentRefs","ref","shallowRef","onBeforeUnmount","removeComponent","bufferData","getComponent","setComponent","args","comp","attrs","slots"],"mappings":"iIAuBaA,EAAoBC,oBAAkB,IAAM,CAEjD,MAAAC,MAAoB,IAEpBC,MAAuB,IAEpB,SAAAC,EAAcC,EAAW,GAAI,CAChC,IAAAC,EAAgBH,EAAiB,IAAIE,CAAQ,EAC5CC,IACaA,EAAA,CACd,SAAUC,EAAAA,IAAI,EACd,KAAMC,EAAAA,WAAsC,EAC5C,MAAOD,EAA6B,IAAA,EAAE,EACtC,MAAOA,EAAoB,IAAA,CAAE,CAAA,CAC/B,EACiBJ,EAAA,IAAIE,EAAUC,CAAa,EAC5BG,kBAAA,IAAMC,EAAgBL,CAAQ,CAAC,GAG3C,MAAAM,EAAaT,EAAc,IAAIG,CAAQ,EAC7C,OAAIM,IACYL,EAAA,KAAK,MAAQK,EAAW,KACxBL,EAAA,MAAM,MAAQK,EAAW,MACzBL,EAAA,MAAM,MAAQK,EAAW,OAGlC,CACL,aAAcL,EAAc,SAC5B,aAAcA,EAAc,KAC5B,eAAgBA,EAAc,MAC9B,eAAgBA,EAAc,KAChC,CAAA,CAIO,SAAAM,EAAaP,EAAW,GAAI,CAC5B,OAAAF,EAAiB,IAAIE,CAAQ,CAAA,CAI7B,SAAAK,EAAgBL,EAAW,GAAI,CACtCH,EAAc,OAAOG,CAAQ,EAC7BF,EAAiB,OAAOE,CAAQ,CAAA,CAIzB,SAAAQ,EAAaR,EAAW,GAAIS,EAAqB,CACxD,KAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,MAAAC,CAAU,EAAAH,EACzBR,EAAgBM,EAAaP,CAAQ,EACvCC,IACFA,EAAc,KAAK,MAAQS,EAC3BT,EAAc,MAAM,MAAQU,EAC5BV,EAAc,MAAM,MAAQW,GAE9Bf,EAAc,IAAIG,EAAU,CAAE,KAAAU,EAAM,MAAAC,EAAO,MAAAC,EAAO,CAAA,CAGpD,MAAO,CAAE,cAAAb,EAAe,aAAAS,EAAc,aAAAD,EAAc,gBAAAF,CAAgB,CACtE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/expand/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport Expand from './src/expand.vue';\n\nexport const MtExpand = withInstall(Expand);\n\nexport * from './src/expand';\n"],"names":["MtExpand","withInstall","Expand"],"mappings":"wJAGaA,EAAWC,cAAYC,EAAM,OAAA"}
@@ -0,0 +1 @@
1
+ .mt-expand[data-v-22b2ddba]{overflow:hidden}.mt-expand-transition[data-v-22b2ddba]{transition:height var(--3f24abce) ease-in-out}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./expand.vue2.js");;/* empty css */const t=require("../../../_virtual/_plugin-vue_export-helper.js"),u=t.default(e.default,[["__scopeId","data-v-60128610"]]);exports.default=u;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./expand.vue2.js");;/* empty css */const t=require("../../../_virtual/_plugin-vue_export-helper.js"),u=t.default(e.default,[["__scopeId","data-v-22b2ddba"]]);exports.default=u;
2
2
  //# sourceMappingURL=expand.vue.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),r=require("@vueuse/core"),c=e.defineComponent({name:"MtExpand",__name:"expand",props:{open:{type:Boolean,default:!1},targetRange:{default:0},transitionTime:{default:200}},setup(u){e.useCssVars(t=>({"3f24abce":l.value}));const n=u,l=e.computed(()=>`${n.transitionTime}ms`),o=e.ref(),a=e.ref(0);r.useResizeObserver(o,r.useDebounceFn(()=>{var t;a.value=((t=o.value)==null?void 0:t.scrollHeight)||0},200));const s=e.computed(()=>a.value>n.targetRange),i=e.computed(()=>a.value?{height:`${!s.value||n.open?a.value:n.targetRange}px`}:{});return(t,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"contentRef",ref:o,class:e.normalizeClass(["mt-expand",{"mt-expand-transition":!!t.transitionTime}]),style:e.normalizeStyle(i.value)},[e.renderSlot(t.$slots,"default",{open:t.open,isOutRange:s.value},void 0,!0)],6))}});exports.default=c;
2
+ //# sourceMappingURL=expand.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expand.vue2.js","sources":["../../../../../src/expand/src/expand.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ExpandProps } from './expand.ts';\nimport { useDebounceFn, useResizeObserver } from '@vueuse/core';\nimport { computed, ref } from 'vue';\n\ndefineOptions({ name: 'MtExpand' });\n\nconst props = withDefaults(defineProps<ExpandProps>(), {\n open: false,\n targetRange: 0,\n transitionTime: 200,\n});\n\nconst transitionDuration = computed(() => `${props.transitionTime}ms`);\n\n/** 容器实例 */\nconst contentRef = ref<HTMLDivElement>();\n/** 容器的范围 */\nconst contentRange = ref(0);\n// 监听容器变化\nuseResizeObserver(contentRef, useDebounceFn(() => {\n contentRange.value = contentRef.value?.scrollHeight || 0;\n}, 200));\n\n/** 是否超出目标范围 */\nconst isOutRange = computed(() => contentRange.value > props.targetRange);\n\n/** 展开或收起后容器样式 */\nconst contentStyle = computed(() => {\n if (!contentRange.value) {\n return {};\n }\n const size = !isOutRange.value || props.open ? contentRange.value : props.targetRange;\n return { height: `${size}px` };\n});\n</script>\n\n<template>\n <div\n ref=\"contentRef\"\n class=\"mt-expand\"\n :class=\"{ 'mt-expand-transition': !!transitionTime }\"\n :style=\"contentStyle\"\n >\n <slot :open=\"open\" :is-out-range=\"isOutRange\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.mt-expand {\n overflow: hidden;\n}\n\n.mt-expand-transition {\n transition: height v-bind(transitionDuration) ease-in-out;\n}\n</style>\n"],"names":["props","__props","transitionDuration","computed","contentRef","ref","contentRange","useResizeObserver","useDebounceFn","_a","isOutRange","contentStyle"],"mappings":"+VAOA,MAAMA,EAAQC,EAMRC,EAAqBC,EAAAA,SAAS,IAAM,GAAGH,EAAM,cAAc,IAAI,EAG/DI,EAAaC,EAAAA,IAAoB,EAEjCC,EAAeD,MAAI,CAAC,EAERE,oBAAAH,EAAYI,EAAAA,cAAc,IAAM,OACnCF,EAAA,QAAQG,EAAAL,EAAW,QAAX,YAAAK,EAAkB,eAAgB,CACzD,EAAG,GAAG,CAAC,EAGP,MAAMC,EAAaP,EAAAA,SAAS,IAAMG,EAAa,MAAQN,EAAM,WAAW,EAGlEW,EAAeR,EAAAA,SAAS,IACvBG,EAAa,MAIX,CAAE,OAAQ,GADJ,CAACI,EAAW,OAASV,EAAM,KAAOM,EAAa,MAAQN,EAAM,WAClD,IAAK,EAHpB,CAAC,CAIX"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("../package.json.js"),s=require("./component-neo/index.js"),u=require("./expand/index.js"),l=require("./sort/index.js"),c=require("./table/index.js"),t=Symbol("MT_INSTALLED_KEY");function a(n=[]){const r=e=>{e[t]||(e[t]=!0,n.forEach(o=>e.use(o)))};return{version:i.version,install:r}}const d=a([s.MtComponentNeo,u.MtExpand,l.MtSort,c.MtTable]);exports.default=d;
2
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sources":["../../../src/installer.ts"],"sourcesContent":["import type { App, Component, Plugin } from 'vue';\nimport { version } from '../package.json';\nimport { MtComponentNeo } from './component-neo';\nimport { MtExpand } from './expand';\nimport { MtSort } from './sort';\nimport { MtTable } from './table';\n\nconst INSTALLED_KEY = Symbol('MT_INSTALLED_KEY');\n\nfunction makeInstaller(components: Component[] = []) {\n const install = (app: App & { [INSTALLED_KEY]?: boolean }) => {\n if (app[INSTALLED_KEY])\n return;\n\n app[INSTALLED_KEY] = true;\n components.forEach(c => app.use(c as Plugin));\n };\n\n return {\n version,\n install,\n };\n}\n\nconst installer = makeInstaller([\n MtComponentNeo,\n MtExpand,\n MtSort,\n MtTable,\n]);\n\nexport default installer;\n"],"names":["INSTALLED_KEY","makeInstaller","components","install","app","c","version","installer","MtComponentNeo","MtExpand","MtSort","MtTable"],"mappings":"kRAOMA,EAAgB,OAAO,kBAAkB,EAE/C,SAASC,EAAcC,EAA0B,GAAI,CAC7C,MAAAC,EAAWC,GAA6C,CACxDA,EAAIJ,CAAa,IAGrBI,EAAIJ,CAAa,EAAI,GACrBE,EAAW,QAAQG,GAAKD,EAAI,IAAIC,CAAW,CAAC,EAC9C,EAEO,MAAA,CAAA,QACLC,EAAA,QACA,QAAAH,CACF,CACF,CAEA,MAAMI,EAAYN,EAAc,CAC9BO,EAAA,eACAC,EAAA,SACAC,EAAA,OACAC,EAAAA,OACF,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/sort/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport Sort from './src/sort';\n\nexport const MtSort = withInstall(Sort);\n\nexport * from './src/sort';\n"],"names":["MtSort","withInstall","Sort"],"mappings":"kJAGaA,EAASC,cAAYC,EAAI,OAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.js","sources":["../../../../../src/sort/src/sort.ts"],"sourcesContent":["import type { PropType, VNode } from 'vue';\nimport { computed, defineComponent } from 'vue';\n\nexport interface SortProps {\n /** 排序配置 */\n sortList?: (string | number)[]\n /** 排序key名 */\n keyName?: string\n}\n\nexport default defineComponent({\n name: 'MtSort',\n props: {\n /** 排序配置 */\n sortList: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n /** 排序key名 */\n keyName: {\n type: String,\n default: 'sort-key',\n },\n },\n setup(props, { slots }) {\n const renderVNodes = computed(() => {\n const vNodeList = slots.default?.() || [];\n const sortVNodeMap = getVNodeMap(props.keyName, vNodeList);\n const sortVNodeList = Array.from(new Set(props.sortList)).map(key => sortVNodeMap[key]).filter(Boolean);\n return sortDefaultVNodes(props.keyName, vNodeList, props.sortList, sortVNodeList);\n });\n\n return () => renderVNodes.value;\n },\n});\n\n/** 获取插槽中需要排序的节点 */\nfunction getVNodeMap(keyName: string, vNodeList: VNode[], vNodeMap: Record<(string | number), VNode> = {}) {\n vNodeList.forEach((item) => {\n const sortKey = item.props?.[keyName];\n if (sortKey) {\n if (vNodeMap[sortKey]) {\n console.warn(`<mt-sort> ${keyName}: ${sortKey} repeat`);\n }\n else {\n vNodeMap[sortKey] = item;\n }\n return;\n }\n if (Array.isArray(item.children)) {\n getVNodeMap(keyName, item.children as VNode[], vNodeMap);\n }\n });\n return vNodeMap;\n}\n\n/** 根据排序后的节点跟换位置 */\nfunction sortDefaultVNodes(keyName: string, vNodeList: VNode[], sortList: (string | number)[], sortVNodeList: VNode[]) {\n const newList: VNode[] = [];\n vNodeList.forEach((vNode) => {\n const sortKey = vNode.props?.[keyName];\n if (sortKey && sortList.includes(sortKey)) {\n const sortVNode = sortVNodeList.shift();\n if (sortVNode) {\n newList.push(sortVNode);\n return;\n }\n }\n if (Array.isArray(vNode.children)) {\n vNode = { ...vNode }; // 避免修改原节点数据\n vNode.children = sortDefaultVNodes(keyName, vNode.children as VNode[], sortList, sortVNodeList);\n }\n newList.push(vNode);\n });\n return newList;\n}\n"],"names":["Sort","defineComponent","props","slots","renderVNodes","computed","vNodeList","_a","sortVNodeMap","getVNodeMap","sortVNodeList","key","sortDefaultVNodes","keyName","vNodeMap","item","sortKey","sortList","newList","vNode","sortVNode"],"mappings":"mIAUAA,EAAeC,kBAAgB,CAC7B,KAAM,SACN,MAAO,CAEL,SAAU,CACR,KAAM,MACN,QAAS,IAAM,CAAA,CACjB,EAEA,QAAS,CACP,KAAM,OACN,QAAS,UAAA,CAEb,EACA,MAAMC,EAAO,CAAE,MAAAC,GAAS,CAChB,MAAAC,EAAeC,EAAAA,SAAS,IAAM,OAClC,MAAMC,IAAYC,EAAAJ,EAAM,UAAN,YAAAI,EAAA,KAAAJ,KAAqB,CAAC,EAClCK,EAAeC,EAAYP,EAAM,QAASI,CAAS,EACnDI,EAAgB,MAAM,KAAK,IAAI,IAAIR,EAAM,QAAQ,CAAC,EAAE,OAAWM,EAAaG,CAAG,CAAC,EAAE,OAAO,OAAO,EACtG,OAAOC,EAAkBV,EAAM,QAASI,EAAWJ,EAAM,SAAUQ,CAAa,CAAA,CACjF,EAED,MAAO,IAAMN,EAAa,KAAA,CAE9B,CAAC,EAGD,SAASK,EAAYI,EAAiBP,EAAoBQ,EAA6C,CAAA,EAAI,CAC/F,OAAAR,EAAA,QAASS,GAAS,OACpB,MAAAC,GAAUT,EAAAQ,EAAK,QAAL,YAAAR,EAAaM,GAC7B,GAAIG,EAAS,CACPF,EAASE,CAAO,EAClB,QAAQ,KAAK,aAAaH,CAAO,KAAKG,CAAO,SAAS,EAGtDF,EAASE,CAAO,EAAID,EAEtB,MAAA,CAEE,MAAM,QAAQA,EAAK,QAAQ,GACjBN,EAAAI,EAASE,EAAK,SAAqBD,CAAQ,CACzD,CACD,EACMA,CACT,CAGA,SAASF,EAAkBC,EAAiBP,EAAoBW,EAA+BP,EAAwB,CACrH,MAAMQ,EAAmB,CAAC,EAChB,OAAAZ,EAAA,QAASa,GAAU,OACrB,MAAAH,GAAUT,EAAAY,EAAM,QAAN,YAAAZ,EAAcM,GAC9B,GAAIG,GAAWC,EAAS,SAASD,CAAO,EAAG,CACnC,MAAAI,EAAYV,EAAc,MAAM,EACtC,GAAIU,EAAW,CACbF,EAAQ,KAAKE,CAAS,EACtB,MAAA,CACF,CAEE,MAAM,QAAQD,EAAM,QAAQ,IACtBA,EAAA,CAAE,GAAGA,CAAM,EACnBA,EAAM,SAAWP,EAAkBC,EAASM,EAAM,SAAqBF,EAAUP,CAAa,GAEhGQ,EAAQ,KAAKC,CAAK,CAAA,CACnB,EACMD,CACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/table/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\nimport Table from './src/table.vue';\n\nexport const MtTable = withInstall(Table);\n\nexport * from './src/table';\n"],"names":["MtTable","withInstall","Table"],"mappings":"uJAGaA,EAAUC,cAAYC,EAAK,OAAA"}
@@ -0,0 +1 @@
1
+ .mt-table[data-v-76e3a23b]{width:100%;max-width:100%;border-spacing:0;border-collapse:collapse}.mt-table thead tr th[data-v-76e3a23b]{padding:8px 16px;border:1px #f0f0f0 solid}.mt-table tbody tr td[data-v-76e3a23b]{padding:16px;border:1px #f0f0f0 solid}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./table.vue2.js");;/* empty css */const t=require("../../../_virtual/_plugin-vue_export-helper.js"),u=t.default(e.default,[["__scopeId","data-v-46d3894f"]]);exports.default=u;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./table.vue2.js");;/* empty css */const t=require("../../../_virtual/_plugin-vue_export-helper.js"),u=t.default(e.default,[["__scopeId","data-v-76e3a23b"]]);exports.default=u;
2
2
  //# sourceMappingURL=table.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.vue2.js","sources":["../../../../../src/table/src/table.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { TableProps } from './table';\nimport { computed } from 'vue';\n\ndefineOptions({ name: 'MtTable' });\n\nconst props = withDefaults(defineProps<TableProps>(), {\n data: () => [],\n config: () => [],\n});\n\n/** 表头配置 */\nconst headConfig = computed(() => {\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.title) }));\n});\n\n/** 数据配置 */\nconst dataConfig = computed(() => {\n return props.config.map(rowItem => ({ ...rowItem, columns: rowItem.columns.filter(column => column.dataKey) }));\n});\n\n/** 最大列数 */\nconst maxColSpan = computed(() => {\n const handReduce = headConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.head?.colSpan || 1), 0));\n const cellReduce = dataConfig.value.map(item => item.columns.reduce((pre, cur) => pre + (cur.cell?.colSpan || 1), 0));\n return Math.max(...handReduce, ...cellReduce);\n});\n\n/** 表头列合并 */\nconst headColSpan = computed(() => {\n const colSpanList = headConfig.value.map(item => item.columns.map(column => column.head?.colSpan || 0));\n return getColSpanData(colSpanList);\n});\n\n/** 数据列合并 */\nconst dataColSpan = computed(() => {\n const colSpanList = dataConfig.value.map(item => item.columns.map(column => column.cell?.colSpan || 0));\n return getColSpanData(colSpanList);\n});\n\n/** 获取合并列数组 */\nfunction getColSpanData(colSpanList: number[][]) {\n return colSpanList.map((columns) => {\n const colSpanColumns = columns.filter(Boolean); // 已分配colSpan的列\n const beenColSpan = colSpanColumns.reduce((pur, cur) => pur + cur, 0); // 总colSpan\n let remainCount = columns.length - colSpanColumns.length; // 剩余未配置colSpan的列数\n let remainColSpan = maxColSpan.value - beenColSpan; // 剩余可分配的colSpan\n return columns.map((colSpan) => {\n if (!colSpan && remainColSpan > 0) {\n colSpan = Math.ceil(remainColSpan / remainCount); // 每列平均分配colSpan\n remainCount--;\n remainColSpan -= colSpan;\n }\n return colSpan;\n });\n });\n}\n</script>\n\n<template>\n <table class=\"mt-table\">\n <!-- 表头 -->\n <thead>\n <tr\n v-for=\"(row, rowIndex) in headConfig\"\n :key=\"rowIndex\"\n :style=\"row.headStyle\"\n >\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.title}-${columnIndex}`\">\n <th\n :colspan=\"headColSpan[rowIndex][columnIndex]\"\n :rowspan=\"column.head?.rowSpan\"\n :style=\"column.head?.style\"\n >\n <slot\n :column=\"column\"\n :column-index=\"columnIndex\"\n :row=\"row\"\n :row-index=\"rowIndex\"\n name=\"header\"\n >\n {{ column.title }}\n </slot>\n </th>\n </template>\n </tr>\n </thead>\n <!-- 表体 -->\n <tbody>\n <template\n v-for=\"(record, dataIndex) in data\"\n :key=\"dataIndex\"\n >\n <tr\n v-for=\"(row, rowIndex) in dataConfig\"\n :key=\"rowIndex\"\n :style=\"row.rowStyle\"\n >\n <template v-for=\"(column, columnIndex) in row.columns\" :key=\"`${column.dataKey}-${columnIndex}`\">\n <td\n :colspan=\"dataColSpan[rowIndex][columnIndex]\"\n :rowspan=\"column.cell?.rowSpan\"\n :style=\"column.cell?.style\"\n >\n <slot\n :column=\"column\"\n :column-index=\"columnIndex\"\n :data-index=\"dataIndex\"\n name=\"cell\"\n :record=\"record\"\n :row=\"row\"\n :row-index=\"rowIndex\"\n >\n {{ record[column.dataKey!] }}\n </slot>\n </td>\n </template>\n </tr>\n </template>\n </tbody>\n </table>\n</template>\n\n<style lang=\"scss\" scoped>\n.mt-table {\n width: 100%;\n max-width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n thead {\n tr {\n th {\n padding: 8px 16px;\n border: 1px #f0f0f0 solid;\n }\n }\n }\n\n tbody {\n tr {\n td {\n padding: 16px;\n border: 1px #f0f0f0 solid;\n }\n }\n }\n}\n</style>\n"],"names":["props","__props","headConfig","computed","rowItem","column","dataConfig","maxColSpan","handReduce","item","pre","cur","_a","cellReduce","headColSpan","colSpanList","getColSpanData","dataColSpan","columns","colSpanColumns","beenColSpan","pur","remainCount","remainColSpan","colSpan"],"mappings":"0TAMA,MAAMA,EAAQC,EAMRC,EAAaC,EAAAA,SAAS,IACnBH,EAAM,OAAO,IAAII,IAAY,CAAE,GAAGA,EAAS,QAASA,EAAQ,QAAQ,OAAOC,GAAUA,EAAO,KAAK,GAAI,CAC7G,EAGKC,EAAaH,EAAAA,SAAS,IACnBH,EAAM,OAAO,IAAII,IAAY,CAAE,GAAGA,EAAS,QAASA,EAAQ,QAAQ,OAAOC,GAAUA,EAAO,OAAO,GAAI,CAC/G,EAGKE,EAAaJ,EAAAA,SAAS,IAAM,CAChC,MAAMK,EAAaN,EAAW,MAAM,IAAIO,GAAQA,EAAK,QAAQ,OAAO,CAACC,EAAKC,WAAQ,OAAAD,KAAOE,EAAAD,EAAI,OAAJ,YAAAC,EAAU,UAAW,IAAI,CAAC,CAAC,EAC9GC,EAAaP,EAAW,MAAM,IAAIG,GAAQA,EAAK,QAAQ,OAAO,CAACC,EAAKC,WAAQ,OAAAD,KAAOE,EAAAD,EAAI,OAAJ,YAAAC,EAAU,UAAW,IAAI,CAAC,CAAC,EACpH,OAAO,KAAK,IAAI,GAAGJ,EAAY,GAAGK,CAAU,CAAA,CAC7C,EAGKC,EAAcX,EAAAA,SAAS,IAAM,CACjC,MAAMY,EAAcb,EAAW,MAAM,IAAYO,GAAAA,EAAK,QAAQ,IAAcJ,GAAA,OAAA,QAAAO,EAAAP,EAAO,OAAP,YAAAO,EAAa,UAAW,EAAC,CAAC,EACtG,OAAOI,EAAeD,CAAW,CAAA,CAClC,EAGKE,EAAcd,EAAAA,SAAS,IAAM,CACjC,MAAMY,EAAcT,EAAW,MAAM,IAAYG,GAAAA,EAAK,QAAQ,IAAcJ,GAAA,OAAA,QAAAO,EAAAP,EAAO,OAAP,YAAAO,EAAa,UAAW,EAAC,CAAC,EACtG,OAAOI,EAAeD,CAAW,CAAA,CAClC,EAGD,SAASC,EAAeD,EAAyB,CACxC,OAAAA,EAAY,IAAKG,GAAY,CAC5B,MAAAC,EAAiBD,EAAQ,OAAO,OAAO,EACvCE,EAAcD,EAAe,OAAO,CAACE,EAAKV,IAAQU,EAAMV,EAAK,CAAC,EAChE,IAAAW,EAAcJ,EAAQ,OAASC,EAAe,OAC9CI,EAAgBhB,EAAW,MAAQa,EAChC,OAAAF,EAAQ,IAAKM,IACd,CAACA,GAAWD,EAAgB,IACpBC,EAAA,KAAK,KAAKD,EAAgBD,CAAW,EAC/CA,IACiBC,GAAAC,GAEZA,EACR,CAAA,CACF,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sources":["../../../../src/utils/install.ts"],"sourcesContent":["import type { App, Component, Plugin } from 'vue';\n\nexport function withInstall<T extends Component>(comp: T) {\n (comp as T & Plugin).install = (app: App): void => {\n if (comp.name) {\n app.component(comp.name, comp);\n }\n };\n return comp;\n}\n"],"names":["withInstall","comp","app"],"mappings":"gFAEO,SAASA,EAAiCC,EAAS,CACvD,OAAAA,EAAoB,QAAWC,GAAmB,CAC7CD,EAAK,MACHC,EAAA,UAAUD,EAAK,KAAMA,CAAI,CAEjC,EACOA,CACT"}
@@ -39,9 +39,7 @@ export declare const MtComponentNeo: {
39
39
  [key: string]: any;
40
40
  }>;
41
41
  compRef: (el: Element) => Element;
42
- attrs: Record<string, unknown> & {
43
- [x: string]: unknown;
44
- };
42
+ attrs: Record<string, unknown>;
45
43
  compName: any;
46
44
  }): any;
47
45
  };
@@ -6,4 +6,4 @@ export interface ComponentNeoProps {
6
6
  is?: string | Component;
7
7
  }
8
8
  export type InstanceComponent = DefineComponent<any, any, any, any, any, any, any, any, any, any>;
9
- export type ComponentSlots = Record<string, (arg: any) => VNode>;
9
+ export type ComponentSlots = Record<string, (arg: any) => VNode> | VNode;
@@ -7,9 +7,7 @@ declare function __VLS_template(): {
7
7
  [key: string]: any;
8
8
  }>;
9
9
  compRef: (el: Element) => Element;
10
- attrs: Record<string, unknown> & {
11
- [x: string]: unknown;
12
- };
10
+ attrs: Record<string, unknown>;
13
11
  compName: any;
14
12
  }): any;
15
13
  };
@@ -0,0 +1,17 @@
1
+ export interface ExpandProps {
2
+ /**
3
+ * 控制是否展开
4
+ * @default false
5
+ */
6
+ open?: boolean;
7
+ /**
8
+ * 达到可调整的目标范围(px)
9
+ * @default 0
10
+ */
11
+ targetRange?: number;
12
+ /**
13
+ * 动画过渡时间(ms)
14
+ * @default 200
15
+ */
16
+ transitionTime?: number;
17
+ }
package/global.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- // GlobalComponents for Volar
2
- declare module 'vue' {
3
- export interface GlobalComponents {
4
- MtComponentNeo: typeof import('mortise-tenon-design')['MtComponentNeo']
5
- MtExpand: typeof import('mortise-tenon-design')['MtExpand']
6
- MtSort: typeof import('mortise-tenon-design')['MtSort']
7
- MtTable: typeof import('mortise-tenon-design')['MtTable']
8
- }
9
- }
10
-
11
- export {};
1
+ // GlobalComponents for Volar
2
+ declare module 'vue' {
3
+ export interface GlobalComponents {
4
+ MtComponentNeo: typeof import('mortise-tenon-design')['MtComponentNeo']
5
+ MtExpand: typeof import('mortise-tenon-design')['MtExpand']
6
+ MtSort: typeof import('mortise-tenon-design')['MtSort']
7
+ MtTable: typeof import('mortise-tenon-design')['MtTable']
8
+ }
9
+ }
10
+
11
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mortise-tenon-design",
3
3
  "type": "module",
4
- "version": "0.4.0-beta.4",
4
+ "version": "0.5.0",
5
5
  "description": "榫卯组件库",
6
6
  "author": "nixwai",
7
7
  "license": "ISC",
@@ -9,20 +9,18 @@
9
9
  "type": "git",
10
10
  "url": "https://github.com/nixwai/mortise-tenon"
11
11
  },
12
- "main": "lib/index.js",
13
- "module": "es/index.mjs",
14
- "types": "types/index.d.ts",
12
+ "main": "dist/lib/index.js",
13
+ "module": "dist/es/index.mjs",
14
+ "types": "dist/types/index.d.ts",
15
15
  "files": [
16
- "es",
17
- "global.d.ts",
18
- "lib",
19
- "types"
16
+ "dist",
17
+ "global.d.ts"
20
18
  ],
21
19
  "peerDependencies": {
22
20
  "vue": "^3.4.0"
23
21
  },
24
22
  "dependencies": {
25
- "@vueuse/core": "^11.1.0",
23
+ "@vueuse/core": "^12.8.2",
26
24
  "lodash-es": "^4.17.21"
27
25
  }
28
26
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/component-neo/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\r\nimport ComponentNeo from './src/component-neo.vue';\r\n\r\nexport const MtComponentNeo = withInstall(ComponentNeo);\r\n\r\nexport * from './src/component-neo';\r\nexport * from './src/hooks/use-component-neo';\r\n"],"names":["MtComponentNeo","withInstall","ComponentNeo"],"mappings":";;;;AAGa,MAAAA,IAAiBC,EAAYC,CAAY;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-neo.vue.mjs","sources":["../../../../../../packages/components/component-neo/src/component-neo.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport type { ComponentNeoProps } from './component-neo';\r\nimport { Comment, computed, h, nextTick, unref, useAttrs, watch } from 'vue';\r\nimport { useComponentState } from './hooks/use-component-state';\r\n\r\ndefineOptions({ name: 'MtComponentNeo', inheritAttrs: false });\r\n\r\nconst props = withDefaults(\r\n defineProps<ComponentNeoProps>(),\r\n { uniqueId: '', onToggle: () => { } },\r\n);\r\n\r\nconst emit = defineEmits<{\r\n (e: 'toggleComponent', name?: string, ref?: any): void\r\n}>();\r\n\r\nconst { initComponent } = useComponentState();\r\nconst { componentRef, componentNeo, componentAttrs, componentSlots } = initComponent(props.uniqueId);\r\nconst compRef = (el: Element) => componentRef.value = el;\r\n\r\nconst commonAttrs = useAttrs();\r\n/** 结合注入的属性和公共属性 */\r\nconst compAttrs = computed(() => {\r\n const newAttrs: Record<string, unknown> = {};\r\n // 仅传入有值的属性\r\n for (const key in componentAttrs.value) {\r\n if (typeof componentAttrs.value[key] !== 'undefined') {\r\n newAttrs[key] = unref(componentAttrs.value[key]); // 支持ref数据转入\r\n }\r\n }\r\n return Object.assign(newAttrs, commonAttrs);\r\n});\r\n\r\nconst compInstance = computed(() => componentNeo.value || props.is);\r\n\r\nconst compVNode = computed(() => {\r\n return !compInstance.value ? h(Comment, 'ComponentNeo is empty') : h(compInstance.value, compAttrs.value, componentSlots.value);\r\n});\r\n\r\nconst compName = computed(() => {\r\n return typeof compInstance.value === 'object' && 'name' in compInstance.value ? compInstance.value.name : undefined;\r\n});\r\n\r\n// 监听组件切换,触发回调\r\nwatch(compInstance, async () => {\r\n await nextTick();\r\n emit('toggleComponent', compName.value, componentRef.value);\r\n});\r\n\r\ndefineExpose({ componentRef });\r\n</script>\r\n\r\n<template>\r\n <!-- eslint-disable-next-line vue/attribute-hyphenation -->\r\n <slot :Component=\"compVNode\" :compRef=\"compRef\" :attrs=\"compAttrs\" :compName=\"compName\">\r\n <component :is=\"compVNode\" :ref=\"compRef\" />\r\n </slot>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","initComponent","useComponentState","componentRef","componentNeo","componentAttrs","componentSlots","compRef","el","commonAttrs","useAttrs","compAttrs","computed","newAttrs","key","unref","compInstance","compVNode","h","Comment","compName","watch","nextTick","__expose"],"mappings":";;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAKRC,IAAOC,GAIP,EAAE,eAAAC,EAAc,IAAIC,EAAkB,GACtC,EAAE,cAAAC,GAAc,cAAAC,GAAc,gBAAAC,GAAgB,gBAAAC,MAAmBL,EAAcJ,EAAM,QAAQ,GAC7FU,IAAU,CAACC,MAAgBL,EAAa,QAAQK,GAEhDC,IAAcC,EAAS,GAEvBC,IAAYC,EAAS,MAAM;AAC/B,YAAMC,IAAoC,CAAC;AAEhC,iBAAAC,KAAOT,EAAe;AAC/B,QAAI,OAAOA,EAAe,MAAMS,CAAG,IAAM,QACvCD,EAASC,CAAG,IAAIC,EAAMV,EAAe,MAAMS,CAAG,CAAC;AAG5C,aAAA,OAAO,OAAOD,GAAUJ,CAAW;AAAA,IAAA,CAC3C,GAEKO,IAAeJ,EAAS,MAAMR,EAAa,SAASP,EAAM,EAAE,GAE5DoB,IAAYL,EAAS,MACjBI,EAAa,QAA8CE,EAAEF,EAAa,OAAOL,EAAU,OAAOL,EAAe,KAAK,IAAjGY,EAAEC,GAAS,uBAAuB,CAChE,GAEKC,IAAWR,EAAS,MACjB,OAAOI,EAAa,SAAU,YAAY,UAAUA,EAAa,QAAQA,EAAa,MAAM,OAAO,MAC3G;AAGD,WAAAK,EAAML,GAAc,YAAY;AAC9B,YAAMM,EAAS,GACfvB,EAAK,mBAAmBqB,EAAS,OAAOjB,EAAa,KAAK;AAAA,IAAA,CAC3D,GAEYoB,EAAA,EAAE,cAAApB,GAAc;;;;;;;;;;"}
@@ -1,31 +0,0 @@
1
- import { nextTick as u } from "vue";
2
- import { useComponentState as C } from "./use-component-state.mjs";
3
- function g(r = "") {
4
- const { setComponent: i, getComponent: s } = C();
5
- async function p(t, c, f) {
6
- var l;
7
- try {
8
- const a = typeof t == "function" ? (await t()).default : t, n = {};
9
- for (let e in c) {
10
- const o = c[e];
11
- e.startsWith("vModel:") ? (e = e.replace("vModel:", ""), n[e] = o, n[`onUpdate:${e}`] = (m) => {
12
- "value" in o && (o.value = m);
13
- }) : n[e] = o;
14
- }
15
- return i(r, { comp: a, attrs: n, slots: f || {} }), await u(), (l = s(r)) == null ? void 0 : l.Instance.value;
16
- } catch (a) {
17
- console.error(a);
18
- }
19
- }
20
- return {
21
- getComponentRef: () => {
22
- var t;
23
- return (t = s(r)) == null ? void 0 : t.Instance.value;
24
- },
25
- toggleComponent: p
26
- };
27
- }
28
- export {
29
- g as useComponentNeo
30
- };
31
- //# sourceMappingURL=use-component-neo.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-component-neo.mjs","sources":["../../../../../../../packages/components/component-neo/src/hooks/use-component-neo.ts"],"sourcesContent":["import type { VNode } from 'vue';\r\nimport type { ComponentSlots, InstanceComponent } from '../component-neo';\r\nimport { nextTick } from 'vue';\r\nimport { useComponentState } from './use-component-state';\r\n\r\nexport type ImportComponentFn = () => Promise<Record<string, any>>;\r\nexport type DynamicComponent = InstanceComponent | ImportComponentFn | VNode;\r\n\r\nexport function useComponentNeo(uniqueId = '') {\r\n const { setComponent, getComponent } = useComponentState();\r\n\r\n /**\r\n * 切换渲染的组件\r\n * @param comp 组件,可传入两种类型,1.import动态导入 2.组件类型 3.VNode\r\n * @param attrs 组件属性,可使用`on事件`方式添加事件方法,属性支持Ref类型进行绑定以实现动态变化, 支持通过{'vModal:value': value}方式双向绑定数据\r\n * @param slots 组件插槽\r\n */\r\n async function toggleComponent(comp?: DynamicComponent, attrs?: Record<string, any>, slots?: ComponentSlots) {\r\n try {\r\n const renderComp = typeof comp === 'function' ? (await (comp as ImportComponentFn)()).default : comp;\r\n const renderAttrs: Record<string, unknown> = {};\r\n for (let key in attrs) {\r\n const bindValue = attrs[key];\r\n // 兼容vModel\r\n if (key.startsWith('vModel:')) {\r\n key = key.replace('vModel:', '');\r\n renderAttrs[key] = bindValue;\r\n renderAttrs[`onUpdate:${key}`] = (value: unknown) => {\r\n if ('value' in bindValue) {\r\n bindValue.value = value;\r\n }\r\n };\r\n }\r\n else {\r\n renderAttrs[key] = bindValue;\r\n }\r\n }\r\n setComponent(uniqueId, { comp: renderComp, attrs: renderAttrs, slots: slots || {} });\r\n await nextTick();\r\n return getComponent(uniqueId)?.Instance.value;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n return {\r\n getComponentRef: () => getComponent(uniqueId)?.Instance.value,\r\n toggleComponent,\r\n };\r\n};\r\n"],"names":["useComponentNeo","uniqueId","setComponent","getComponent","useComponentState","toggleComponent","comp","attrs","slots","renderComp","renderAttrs","key","bindValue","value","nextTick","_a","e"],"mappings":";;AAQgB,SAAAA,EAAgBC,IAAW,IAAI;AAC7C,QAAM,EAAE,cAAAC,GAAc,cAAAC,EAAa,IAAIC,EAAkB;AAQ1C,iBAAAC,EAAgBC,GAAyBC,GAA6BC,GAAwB;;AACvG,QAAA;AACF,YAAMC,IAAa,OAAOH,KAAS,cAAc,MAAOA,EAAA,GAA8B,UAAUA,GAC1FI,IAAuC,CAAC;AAC9C,eAASC,KAAOJ,GAAO;AACf,cAAAK,IAAYL,EAAMI,CAAG;AAEvB,QAAAA,EAAI,WAAW,SAAS,KACpBA,IAAAA,EAAI,QAAQ,WAAW,EAAE,GAC/BD,EAAYC,CAAG,IAAIC,GACnBF,EAAY,YAAYC,CAAG,EAAE,IAAI,CAACE,MAAmB;AACnD,UAAI,WAAWD,MACbA,EAAU,QAAQC;AAAA,QAEtB,KAGAH,EAAYC,CAAG,IAAIC;AAAA,MACrB;AAEW,aAAAV,EAAAD,GAAU,EAAE,MAAMQ,GAAY,OAAOC,GAAa,OAAOF,KAAS,CAAA,GAAI,GACnF,MAAMM,EAAS,IACRC,IAAAZ,EAAaF,CAAQ,MAArB,gBAAAc,EAAwB,SAAS;AAAA,aAEnCC,GAAG;AACR,cAAQ,MAAMA,CAAC;AAAA,IAAA;AAAA,EACjB;AAEK,SAAA;AAAA,IACL,iBAAiB,MAAA;;AAAM,cAAAD,IAAAZ,EAAaF,CAAQ,MAArB,gBAAAc,EAAwB,SAAS;AAAA;AAAA,IACxD,iBAAAV;AAAA,EACF;AACF;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-component-state.mjs","sources":["../../../../../../../packages/components/component-neo/src/hooks/use-component-state.ts"],"sourcesContent":["import type { Ref, ShallowRef, VNode } from 'vue';\r\nimport type { ComponentSlots, InstanceComponent } from '../component-neo';\r\nimport { createGlobalState } from '@vueuse/core';\r\nimport { onBeforeUnmount, ref, shallowRef } from 'vue';\r\n\r\ninterface ComponentRefsType {\r\n /** 引用实例 */\r\n Instance: Ref<any>\r\n /** 组件 */\r\n comp: ShallowRef<InstanceComponent | VNode | undefined>\r\n /** 属性 */\r\n attrs: Ref<Record<string, unknown>>\r\n /** 插槽 */\r\n slots: Ref<ComponentSlots>\r\n}\r\n\r\ninterface ComponentData {\r\n comp?: InstanceComponent | VNode\r\n attrs: Record<string, unknown>\r\n slots: ComponentSlots\r\n}\r\n\r\n/** 组件状态 */\r\nexport const useComponentState = createGlobalState(() => {\r\n /** 缓存组件数据,组件未实例化时,可先缓存后赋值 */\r\n const dataBufferMap = new Map<string, ComponentData>();\r\n /** 实例化后的组件 */\r\n const componentRefsMap = new Map<string, ComponentRefsType>();\r\n /** 初始化组件 */\r\n function initComponent(uniqueId = '') {\r\n let componentRefs = componentRefsMap.get(uniqueId);\r\n if (!componentRefs) {\r\n componentRefs = {\r\n Instance: ref(),\r\n comp: shallowRef<InstanceComponent | VNode>(),\r\n attrs: ref<Record<string, unknown>>({}),\r\n slots: ref<ComponentSlots>({}),\r\n };\r\n componentRefsMap.set(uniqueId, componentRefs);\r\n onBeforeUnmount(() => removeComponent(uniqueId));\r\n }\r\n // 使用缓存数据初始化数据\r\n const bufferData = dataBufferMap.get(uniqueId);\r\n if (bufferData) {\r\n componentRefs.comp.value = bufferData.comp;\r\n componentRefs.attrs.value = bufferData.attrs;\r\n componentRefs.slots.value = bufferData.slots;\r\n }\r\n\r\n return {\r\n componentRef: componentRefs.Instance,\r\n componentNeo: componentRefs.comp,\r\n componentAttrs: componentRefs.attrs,\r\n componentSlots: componentRefs.slots,\r\n };\r\n }\r\n\r\n /** 获取实例 */\r\n function getComponent(uniqueId = '') {\r\n return componentRefsMap.get(uniqueId);\r\n }\r\n\r\n /** 移除实例 */\r\n function removeComponent(uniqueId = '') {\r\n dataBufferMap.delete(uniqueId);\r\n componentRefsMap.delete(uniqueId);\r\n }\r\n\r\n /** 设置组件数据 */\r\n function setComponent(uniqueId = '', args: ComponentData) {\r\n const { comp, attrs, slots } = args;\r\n const componentRefs = getComponent(uniqueId);\r\n if (componentRefs) {\r\n componentRefs.comp.value = comp;\r\n componentRefs.attrs.value = attrs;\r\n componentRefs.slots.value = slots;\r\n }\r\n dataBufferMap.set(uniqueId, { comp, attrs, slots });\r\n }\r\n\r\n return { initComponent, setComponent, getComponent, removeComponent };\r\n});\r\n"],"names":["useComponentState","createGlobalState","dataBufferMap","componentRefsMap","initComponent","uniqueId","componentRefs","ref","shallowRef","onBeforeUnmount","removeComponent","bufferData","getComponent","setComponent","args","comp","attrs","slots"],"mappings":";;AAuBa,MAAAA,IAAoBC,EAAkB,MAAM;AAEjD,QAAAC,wBAAoB,IAA2B,GAE/CC,wBAAuB,IAA+B;AAEnD,WAAAC,EAAcC,IAAW,IAAI;AAChC,QAAAC,IAAgBH,EAAiB,IAAIE,CAAQ;AACjD,IAAKC,MACaA,IAAA;AAAA,MACd,UAAUC,EAAI;AAAA,MACd,MAAMC,EAAsC;AAAA,MAC5C,OAAOD,EAA6B,EAAE;AAAA,MACtC,OAAOA,EAAoB,CAAE,CAAA;AAAA,IAC/B,GACiBJ,EAAA,IAAIE,GAAUC,CAAa,GAC5BG,EAAA,MAAMC,EAAgBL,CAAQ,CAAC;AAG3C,UAAAM,IAAaT,EAAc,IAAIG,CAAQ;AAC7C,WAAIM,MACYL,EAAA,KAAK,QAAQK,EAAW,MACxBL,EAAA,MAAM,QAAQK,EAAW,OACzBL,EAAA,MAAM,QAAQK,EAAW,QAGlC;AAAA,MACL,cAAcL,EAAc;AAAA,MAC5B,cAAcA,EAAc;AAAA,MAC5B,gBAAgBA,EAAc;AAAA,MAC9B,gBAAgBA,EAAc;AAAA,IAChC;AAAA,EAAA;AAIO,WAAAM,EAAaP,IAAW,IAAI;AAC5B,WAAAF,EAAiB,IAAIE,CAAQ;AAAA,EAAA;AAI7B,WAAAK,EAAgBL,IAAW,IAAI;AACtC,IAAAH,EAAc,OAAOG,CAAQ,GAC7BF,EAAiB,OAAOE,CAAQ;AAAA,EAAA;AAIzB,WAAAQ,EAAaR,IAAW,IAAIS,GAAqB;AACxD,UAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,OAAAC,EAAU,IAAAH,GACzBR,IAAgBM,EAAaP,CAAQ;AAC3C,IAAIC,MACFA,EAAc,KAAK,QAAQS,GAC3BT,EAAc,MAAM,QAAQU,GAC5BV,EAAc,MAAM,QAAQW,IAE9Bf,EAAc,IAAIG,GAAU,EAAE,MAAAU,GAAM,OAAAC,GAAO,OAAAC,GAAO;AAAA,EAAA;AAGpD,SAAO,EAAE,eAAAb,GAAe,cAAAS,GAAc,cAAAD,GAAc,iBAAAF,EAAgB;AACtE,CAAC;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/expand/index.ts"],"sourcesContent":["import { withInstall } from '../utils/install';\r\nimport Expand from './src/expand.vue';\r\n\r\nexport const MtExpand = withInstall(Expand);\r\n\r\nexport * from './src/expand';\r\n"],"names":["MtExpand","withInstall","Expand"],"mappings":";;AAGa,MAAAA,IAAWC,EAAYC,CAAM;"}
@@ -1 +0,0 @@
1
- .mt-expand[data-v-60128610]{overflow:hidden}.mt-expand-transition[data-v-60128610]{transition:height var(--2863d212) ease-in-out}