@revolist/vue3-datagrid 3.2.16 → 3.6.16
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.
- package/.github/ISSUE_TEMPLATE/issue-template.md +19 -0
- package/.webpack/webpack.dev.js +1 -1
- package/dist/revogrid.d.ts +13 -49
- package/dist/vgrid.d.ts +6 -2
- package/dist/vgrid.js +1 -1
- package/dist/vue-component-lib/utils.d.ts +1 -3
- package/dist/vue-editor-adapter.d.ts +2 -1
- package/dist/vue-template.d.ts +9 -2
- package/package.json +14 -14
- package/public/App.vue +4 -7
- package/public/dataService.ts +1 -1
- package/src/revogrid.ts +3 -2
- package/src/vgrid.ts +5 -7
- package/src/vue-component-lib/utils.ts +52 -43
- package/src/vue-editor-adapter.tsx +8 -5
- package/src/vue-editor.tsx +7 -4
- package/src/vue-template.tsx +28 -30
- package/tsconfig.json +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Issue template
|
|
3
|
+
about: Create a report to help us improve
|
|
4
|
+
title: ''
|
|
5
|
+
labels: ''
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**Check if issue exists**
|
|
11
|
+
Search the repo and ensure your issue doesn't already exist. If so, it may:
|
|
12
|
+
- Have already been fixed in an unreleased version.
|
|
13
|
+
- Have been closed without a solution. Please create a new issue instead of commenting on the old one.
|
|
14
|
+
|
|
15
|
+
**Describe the issue**
|
|
16
|
+
A clear and concise description of what the issue is.
|
|
17
|
+
|
|
18
|
+
**To Reproduce**
|
|
19
|
+
Create a minimal reproduction to illustrate the issue. Here's a [template](https://codesandbox.io/s/revo-grid-vue3-thry7) to start you off.
|
package/.webpack/webpack.dev.js
CHANGED
|
@@ -33,7 +33,7 @@ module.exports = {
|
|
|
33
33
|
extensions: [ '.tsx', '.ts', '.js', '.vue' ],
|
|
34
34
|
alias: {
|
|
35
35
|
'vue$': 'vue/dist/vue.esm-bundler.js',
|
|
36
|
-
'@revolist/vue-datagrid': path.resolve(__dirname, '../
|
|
36
|
+
'@revolist/vue-datagrid': path.resolve(__dirname, '../src/vgrid')
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
module: {
|
package/dist/revogrid.d.ts
CHANGED
|
@@ -1,50 +1,14 @@
|
|
|
1
1
|
import type { JSX } from '@revolist/revogrid';
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
export declare const
|
|
15
|
-
export declare const RevogrFilterPanel: import("vue").DefineComponent<JSX.RevogrFilterPanel & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrFilterPanel & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
|
|
16
|
-
export declare const RevogrFocus: import("vue").DefineComponent<JSX.RevogrFocus & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrFocus & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
|
|
17
|
-
dimensionRow: any;
|
|
18
|
-
colData: any;
|
|
19
|
-
dataStore: any;
|
|
20
|
-
selectionStore: any;
|
|
21
|
-
dimensionCol: any;
|
|
22
|
-
}>;
|
|
23
|
-
export declare const RevogrHeader: import("vue").DefineComponent<JSX.RevogrHeader & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrHeader & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
|
|
24
|
-
viewportCol?: any;
|
|
25
|
-
selectionStore?: any;
|
|
26
|
-
dimensionCol?: any;
|
|
27
|
-
}>;
|
|
28
|
-
export declare const RevogrOrderEditor: import("vue").DefineComponent<JSX.RevogrOrderEditor & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrOrderEditor & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
|
|
29
|
-
dimensionRow?: any;
|
|
30
|
-
dataStore?: any;
|
|
31
|
-
dimensionCol?: any;
|
|
32
|
-
}>;
|
|
33
|
-
export declare const RevogrOverlaySelection: import("vue").DefineComponent<JSX.RevogrOverlaySelection & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrOverlaySelection & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
|
|
34
|
-
dimensionRow?: any;
|
|
35
|
-
colData?: any;
|
|
36
|
-
dataStore?: any;
|
|
37
|
-
selectionStore?: any;
|
|
38
|
-
dimensionCol?: any;
|
|
39
|
-
}>;
|
|
40
|
-
export declare const RevogrRowHeaders: import("vue").DefineComponent<JSX.RevogrRowHeaders & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrRowHeaders & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
|
|
41
|
-
export declare const RevogrScrollVirtual: import("vue").DefineComponent<JSX.RevogrScrollVirtual & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrScrollVirtual & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
|
|
42
|
-
viewportStore?: any;
|
|
43
|
-
dimensionStore?: any;
|
|
44
|
-
}>;
|
|
45
|
-
export declare const RevogrTempRange: import("vue").DefineComponent<JSX.RevogrTempRange & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrTempRange & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
|
|
46
|
-
dimensionRow?: any;
|
|
47
|
-
selectionStore?: any;
|
|
48
|
-
dimensionCol?: any;
|
|
49
|
-
}>;
|
|
50
|
-
export declare const RevogrViewportScroll: import("vue").DefineComponent<JSX.RevogrViewportScroll & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrViewportScroll & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
|
|
2
|
+
export declare const RevoGrid: (props: JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
3
|
+
export declare const RevogrClipboard: (props: JSX.RevogrClipboard & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
4
|
+
export declare const RevogrData: (props: JSX.RevogrData & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
5
|
+
export declare const RevogrEdit: (props: JSX.RevogrEdit & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
6
|
+
export declare const RevogrFilterPanel: (props: JSX.RevogrFilterPanel & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
7
|
+
export declare const RevogrFocus: (props: JSX.RevogrFocus & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
8
|
+
export declare const RevogrHeader: (props: JSX.RevogrHeader & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
9
|
+
export declare const RevogrOrderEditor: (props: JSX.RevogrOrderEditor & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
10
|
+
export declare const RevogrOverlaySelection: (props: JSX.RevogrOverlaySelection & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
11
|
+
export declare const RevogrRowHeaders: (props: JSX.RevogrRowHeaders & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
12
|
+
export declare const RevogrScrollVirtual: (props: JSX.RevogrScrollVirtual & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
13
|
+
export declare const RevogrTempRange: (props: JSX.RevogrTempRange & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
14
|
+
export declare const RevogrViewportScroll: (props: JSX.RevogrViewportScroll & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
package/dist/vgrid.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { App } from "vue";
|
|
2
|
-
export declare const VGrid:
|
|
2
|
+
export declare const VGrid: (props: import("@revolist/revogrid/dist/types/components").JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
|
|
3
3
|
export declare const VGridPlugin: {
|
|
4
4
|
install(app: App): void;
|
|
5
5
|
};
|
|
6
6
|
export declare const VGridVueTemplate: (vueConstructor: any) => (h: import("@revolist/revogrid/dist/types/interfaces").RevoGrid.HyperFunc<import("@revolist/revogrid/dist/types/stencil-public-runtime").VNode>, p: import("@revolist/revogrid/dist/types/interfaces").RevoGrid.ColumnDataSchemaModel) => JSX.Element;
|
|
7
|
-
export declare const VGridVueTemplateConstructor: (vueConstructor: import("vue").DefineComponent
|
|
7
|
+
export declare const VGridVueTemplateConstructor: (vueConstructor: import("vue").DefineComponent, el: import("./vue-template").VueElement, p: Record<string, any>, appContext: any) => {
|
|
8
|
+
vueInstance: any;
|
|
9
|
+
destroy: () => void;
|
|
10
|
+
el: import("./vue-template").VueElement;
|
|
11
|
+
};
|
|
8
12
|
export declare const VGridVueEditor: (vueConstructor: any) => (column: import("@revolist/revogrid/dist/types/interfaces").RevoGrid.ColumnDataSchemaModel, save: Function, close: Function) => import("./vue-editor-adapter").default;
|
|
9
13
|
export default VGrid;
|
package/dist/vgrid.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("vue"),require("@revolist/revogrid/
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("vue"),require("@revolist/revogrid/loader")):"function"==typeof define&&define.amd?define("VGrid",["vue","@revolist/revogrid/loader"],r):"object"==typeof exports?exports.VGrid=r(require("vue"),require("@revolist/revogrid/loader")):e.VGrid=r(e.vue,e["@revolist/revogrid/loader"])}(self,((e,r)=>(()=>{"use strict";var t,o,n,s,a={941:(e,r,t)=>{t.a(e,(async(e,o)=>{try{t.d(r,{d_:()=>e});var n=t(638),s=t(829);await(0,s.defineCustomElements)();const e=(0,n.j)("revo-grid",void 0,["rowHeaders","frameSize","rowSize","colSize","range","readonly","resize","canFocus","useClipboard","columns","source","pinnedTopSource","pinnedBottomSource","rowDefinitions","editors","plugins","columnTypes","theme","rowClass","autoSizeColumn","filter","canMoveColumns","trimmedRows","exporting","grouping","stretch","beforeedit","beforerangeedit","afteredit","beforeautofill","beforeaange","afterfocus","roworderchanged","beforesourcesortingapply","beforesortingapply","beforesorting","rowdragstart","headerclick","beforecellfocus","beforefocuslost","beforesourceset","aftersourceset","beforecolumnsset","beforecolumnapplied","aftercolumnsset","beforefilterapply","beforefiltertrimmed","beforetrimmed","aftertrimmed","viewportscroll","beforeexport","beforeeditstart","aftercolumnresize"]);o()}catch(e){o(e)}}),1)},846:(e,r,t)=>{t.a(e,(async(e,o)=>{try{t.r(r),t.d(r,{VGrid:()=>l,VGridPlugin:()=>d,VGridVueEditor:()=>p,VGridVueTemplate:()=>c,VGridVueTemplateConstructor:()=>f,default:()=>v});var n=t(941),s=t(258),a=t(210),i=e([n]);const l=(n=(i.then?(await i)():i)[0]).d_;let u=!1;const d={install(e){u||(u=!0,e.component("vue-data-grid",l))}},c=s.Z,f=s.k,p=a.Z,v=l;o()}catch(e){o(e)}}))},638:(e,r,t)=>{t.d(r,{j:()=>c});var o=t(748);const n="update:modelValue",s="modelValue",a="navManager",i=Symbol(),l={default:i},u=e=>(null==e?void 0:e.split(" "))||[],d=(e,r,t=[])=>{var o;return[...Array.from((null===(o=e.value)||void 0===o?void 0:o.classList)||[]),...t].filter(((e,t,o)=>!r.has(e)&&o.indexOf(e)===t))},c=(e,r,t=[],c,f,p)=>{void 0!==r&&r();const v=(0,o.defineComponent)(((r,{attrs:t,slots:l,emit:v})=>{var m;let b=r[c];const h=(0,o.ref)(),y=new Set(u(t.class)),g=e=>{e.el&&(Array.isArray(f)?f:[f]).forEach((r=>{e.el.addEventListener(r.toLowerCase(),(e=>{b=(null==e?void 0:e.target)[c],v(n,b),p&&v(p,e)}))}))},w=(0,o.getCurrentInstance)(),C=(null===(m=null==w?void 0:w.appContext)||void 0===m?void 0:m.provides[a])?(0,o.inject)(a):void 0;return()=>{b=r[c],u(t.class).forEach((e=>{y.add(e)}));const n=r.onClick;let a={ref:h,class:d(h,y),onClick:e=>{void 0!==n&&n(e),e.defaultPrevented||(e=>{const{routerLink:t}=r;if(t!==i)if(void 0!==C){let t={event:e};for(const e in r){const o=r[e];r.hasOwnProperty(e)&&e.startsWith("router")&&o!==i&&(t[e]=o)}C.navigate(t)}else console.warn("Tried to navigate, but no router was found. Make sure you have mounted Vue Router.")})(e)},onVnodeBeforeMount:f?g:void 0};for(const e in r){const t=r[e];(r.hasOwnProperty(e)&&t!==i||e.startsWith("aria"))&&(a[e]=t)}return c&&(r[s]!==i?a=Object.assign(Object.assign({},a),{[c]:r[s]}):b!==i&&(a=Object.assign(Object.assign({},a),{[c]:b}))),(0,o.h)(e,a,l.default&&l.default())}}));return"function"!=typeof v&&(v.name=e,v.props={routerLink:l},t.forEach((e=>{v.props[e]=l})),c&&(v.props[s]=l,v.emits=[n,p])),v}},210:(e,r,t)=>{t.d(r,{Z:()=>a});var o=t(748),n=t(258);class s{constructor(e,r,t,o,n){this.VueEditorConstructor=e,this.column=r,this.save=t,this.close=o,this.appContext=n,this.element=null,this.editCell=null}componentDidRender(){}disconnectedCallback(){this.vueEl&&(this.vueEl.destroy(),this.vueEl=void 0)}render(e){return e("span",{ref:e=>{this.vueEl=(0,n.k)(this.VueEditorConstructor,e,Object.assign(Object.assign({},this.editCell),{column:this.column,save:this.save,close:this.close}),this.appContext)}})}}const a=e=>{const r=(0,o.getCurrentInstance)(),t=null==r?void 0:r.appContext;return function(r,o,n){return new s(e,r,o,n,t)}}},258:(e,r,t)=>{t.d(r,{Z:()=>s,k:()=>n});var o=t(748);const n=(e,r,t,n)=>{if(!r)return null;let s=r._vnode;if(s){n&&(s.appContext=n);for(const e in t)s.component.props[e]=t[e]}else s=(0,o.createVNode)(e,t),n&&(s.appContext=n),(0,o.render)(s,r);return{vueInstance:s,destroy:()=>(0,o.render)(null,r),el:r}},s=e=>{const r=(0,o.getCurrentInstance)(),t=null==r?void 0:r.appContext;return(r,o)=>r("span",{ref:r=>n(e,r,o,t)})}},829:e=>{e.exports=r},748:r=>{r.exports=e}},i={};function l(e){var r=i[e];if(void 0!==r)return r.exports;var t=i[e]={exports:{}};return a[e](t,t.exports,l),t.exports}return t="function"==typeof Symbol?Symbol("webpack queues"):"__webpack_queues__",o="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",n="function"==typeof Symbol?Symbol("webpack error"):"__webpack_error__",s=e=>{e&&e.d<1&&(e.d=1,e.forEach((e=>e.r--)),e.forEach((e=>e.r--?e.r++:e())))},l.a=(e,r,a)=>{var i;a&&((i=[]).d=-1);var l,u,d,c=new Set,f=e.exports,p=new Promise(((e,r)=>{d=r,u=e}));p[o]=f,p[t]=e=>(i&&e(i),c.forEach(e),p.catch((e=>{}))),e.exports=p,r((e=>{var r;l=(e=>e.map((e=>{if(null!==e&&"object"==typeof e){if(e[t])return e;if(e.then){var r=[];r.d=0,e.then((e=>{a[o]=e,s(r)}),(e=>{a[n]=e,s(r)}));var a={};return a[t]=e=>e(r),a}}var i={};return i[t]=e=>{},i[o]=e,i})))(e);var a=()=>l.map((e=>{if(e[n])throw e[n];return e[o]})),u=new Promise((e=>{(r=()=>e(a)).r=0;var o=e=>e!==i&&!c.has(e)&&(c.add(e),e&&!e.d&&(r.r++,e.push(r)));l.map((e=>e[t](o)))}));return r.r?u:a()}),(e=>(e?d(p[n]=e):u(f),s(i)))),i&&i.d<0&&(i.d=0)},l.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return l.d(r,{a:r}),r},l.d=(e,r)=>{for(var t in r)l.o(r,t)&&!l.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},l.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l(846)})()));
|
|
@@ -15,6 +15,4 @@ export interface InputProps<T> {
|
|
|
15
15
|
* @prop externalModelUpdateEvent - The external event to fire from your Vue component when modelUpdateEvent fires. This is used for ensuring that v-model references have been
|
|
16
16
|
* correctly updated when a user's event callback fires.
|
|
17
17
|
*/
|
|
18
|
-
export declare const defineContainer: <Props, VModelType = string | number | boolean>(name: string, defineCustomElement: any, componentProps?: string[], modelProp?: string, modelUpdateEvent?: string, externalModelUpdateEvent?: string) =>
|
|
19
|
-
[x: string]: unknown;
|
|
20
|
-
}> ? import("vue").ExtractPropTypes<T> : T : never : never>, import("vue").ExtractDefaultPropTypes<Props & InputProps<VModelType>>>;
|
|
18
|
+
export declare const defineContainer: <Props, VModelType = string | number | boolean>(name: string, defineCustomElement: any, componentProps?: string[], modelProp?: string, modelUpdateEvent?: string, externalModelUpdateEvent?: string) => (props: Props & InputProps<VModelType> & {}) => any;
|
|
@@ -6,10 +6,11 @@ export default class VueEditorAdapter {
|
|
|
6
6
|
column: RevoGrid.ColumnDataSchemaModel;
|
|
7
7
|
private save;
|
|
8
8
|
private close;
|
|
9
|
+
private appContext;
|
|
9
10
|
element: Element | null;
|
|
10
11
|
editCell: Edition.EditCell | null;
|
|
11
12
|
private vueEl;
|
|
12
|
-
constructor(VueEditorConstructor: DefineComponent, column: RevoGrid.ColumnDataSchemaModel, save: Function, close: Function);
|
|
13
|
+
constructor(VueEditorConstructor: DefineComponent, column: RevoGrid.ColumnDataSchemaModel, save: Function, close: Function, appContext: Object);
|
|
13
14
|
componentDidRender(): void;
|
|
14
15
|
disconnectedCallback(): void;
|
|
15
16
|
render(h: RevoGrid.HyperFunc<VNode>): JSX.Element;
|
package/dist/vue-template.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { RevoGrid } from '@revolist/revogrid/dist/types/interfaces';
|
|
2
2
|
import { VNode } from '@revolist/revogrid/dist/types/stencil-public-runtime';
|
|
3
|
-
import { DefineComponent } from
|
|
4
|
-
export
|
|
3
|
+
import { ComponentPublicInstance, DefineComponent } from "vue";
|
|
4
|
+
export interface VueElement extends HTMLElement {
|
|
5
|
+
_vnode?: ComponentPublicInstance<any>;
|
|
6
|
+
}
|
|
7
|
+
export declare const vueTemplateConstructor: (vueConstructor: DefineComponent, el: VueElement | null, p: Record<string, any>, appContext: any) => {
|
|
8
|
+
vueInstance: any;
|
|
9
|
+
destroy: () => void;
|
|
10
|
+
el: VueElement;
|
|
11
|
+
};
|
|
5
12
|
declare const vueTemplate: (vueConstructor: any) => (h: RevoGrid.HyperFunc<VNode>, p: RevoGrid.ColumnDataSchemaModel) => JSX.Element;
|
|
6
13
|
export default vueTemplate;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revolist/vue3-datagrid",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.16",
|
|
4
4
|
"description": "Vue 3 DataGrid Spreadsheet",
|
|
5
5
|
"main": "dist/vgrid.js",
|
|
6
6
|
"types": "dist/vgrid.d.ts",
|
|
@@ -34,24 +34,24 @@
|
|
|
34
34
|
"homepage": "https://github.com/revolist/vue3-datagrid#readme",
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@revolist/revogrid": "^3.
|
|
37
|
+
"@revolist/revogrid": "^3.6.16",
|
|
38
38
|
"@stencil/core": "^2.17.3"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@vue/compiler-sfc": "^3.
|
|
41
|
+
"@vue/compiler-sfc": "^3.3.4",
|
|
42
42
|
"clean-webpack-plugin": "^4.0.0",
|
|
43
43
|
"css-loader": "^6.7.1",
|
|
44
|
-
"html-webpack-plugin": "^5.5.
|
|
45
|
-
"sass": "^1.
|
|
46
|
-
"sass-loader": "^13.
|
|
47
|
-
"style-loader": "^3.3.
|
|
48
|
-
"ts-loader": "^9.
|
|
49
|
-
"typescript": "^
|
|
50
|
-
"vue": "^3.
|
|
51
|
-
"vue-loader": "^17.
|
|
44
|
+
"html-webpack-plugin": "^5.5.3",
|
|
45
|
+
"sass": "^1.64.2",
|
|
46
|
+
"sass-loader": "^13.3.2",
|
|
47
|
+
"style-loader": "^3.3.3",
|
|
48
|
+
"ts-loader": "^9.4.4",
|
|
49
|
+
"typescript": "^5.1.6",
|
|
50
|
+
"vue": "^3.3.4",
|
|
51
|
+
"vue-loader": "^17.2.2",
|
|
52
52
|
"vue-style-loader": "^4.1.3",
|
|
53
|
-
"webpack": "^5.
|
|
54
|
-
"webpack-cli": "^
|
|
55
|
-
"webpack-dev-server": "^4.
|
|
53
|
+
"webpack": "^5.88.2",
|
|
54
|
+
"webpack-cli": "^5.1.4",
|
|
55
|
+
"webpack-dev-server": "^4.15.1"
|
|
56
56
|
}
|
|
57
57
|
}
|
package/public/App.vue
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="tile large">
|
|
3
3
|
<v-grid
|
|
4
|
-
|
|
5
|
-
readonly="false"
|
|
4
|
+
:readonly="false"
|
|
6
5
|
:source="source"
|
|
7
|
-
resize="false"
|
|
6
|
+
:resize="false"
|
|
8
7
|
:columns="headers"
|
|
9
8
|
:editors="gridEditors"
|
|
10
9
|
theme="material"
|
|
@@ -16,8 +15,7 @@
|
|
|
16
15
|
<script lang="ts">
|
|
17
16
|
// beforeCellFocus
|
|
18
17
|
import {defineComponent, ref} from 'vue';
|
|
19
|
-
import {
|
|
20
|
-
import VGrid, { VGridVueEditor, VGridVueTemplate } from '@revolist/vue-datagrid';
|
|
18
|
+
import VGrid, { VGridVueEditor, VGridVueTemplate } from '../src/vgrid';
|
|
21
19
|
import Editor from './Editor.vue';
|
|
22
20
|
import Cell from './Cell.vue';
|
|
23
21
|
import {generateFakeDataObject} from './dataService';
|
|
@@ -34,8 +32,7 @@ export default defineComponent({
|
|
|
34
32
|
setup() {
|
|
35
33
|
const button = VGridVueEditor(Editor);
|
|
36
34
|
const gridEditors = { button };
|
|
37
|
-
|
|
38
|
-
return { grid, gridEditors };
|
|
35
|
+
return { gridEditors };
|
|
39
36
|
},
|
|
40
37
|
methods: {
|
|
41
38
|
test(e: CustomEvent) {
|
package/public/dataService.ts
CHANGED
|
@@ -18,7 +18,7 @@ function naturalSort(prop,a,b) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export function generateFakeDataObject(rowsNumber: number, colsNumber: number, cellTemplate: any) {
|
|
21
|
-
const result:
|
|
21
|
+
const result: any[] = [];
|
|
22
22
|
const columns: Record<number, any> = {};
|
|
23
23
|
const all = colsNumber * rowsNumber;
|
|
24
24
|
for (let j = 0; j < all; j++) {
|
package/src/revogrid.ts
CHANGED
|
@@ -5,9 +5,9 @@ import { defineContainer } from './vue-component-lib/utils';
|
|
|
5
5
|
|
|
6
6
|
import type { JSX } from '@revolist/revogrid';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { defineCustomElements } from '@revolist/revogrid/loader';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
await defineCustomElements();
|
|
11
11
|
|
|
12
12
|
export const RevoGrid = /*@__PURE__*/ defineContainer<JSX.RevoGrid>('revo-grid', undefined, [
|
|
13
13
|
'rowHeaders',
|
|
@@ -164,6 +164,7 @@ export const RevogrOverlaySelection = /*@__PURE__*/ defineContainer<JSX.RevogrOv
|
|
|
164
164
|
'internalCellEdit',
|
|
165
165
|
'internalFocusCell',
|
|
166
166
|
'setEdit',
|
|
167
|
+
'cancelEdit',
|
|
167
168
|
'setRange',
|
|
168
169
|
'setTempRange',
|
|
169
170
|
'focusCell',
|
package/src/vgrid.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { App
|
|
2
|
-
import {RevoGrid} from "./revogrid";
|
|
3
|
-
import vueTemplate, {vueTemplateConstructor} from "./vue-template";
|
|
1
|
+
import { App } from "vue";
|
|
2
|
+
import { RevoGrid } from "./revogrid";
|
|
3
|
+
import vueTemplate, { vueTemplateConstructor } from "./vue-template";
|
|
4
4
|
import vueEditor from "./vue-editor";
|
|
5
5
|
|
|
6
6
|
export const VGrid = RevoGrid;
|
|
@@ -13,8 +13,8 @@ export const VGridPlugin = {
|
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
installed = true;
|
|
16
|
-
app.component(
|
|
17
|
-
}
|
|
16
|
+
app.component("vue-data-grid", VGrid);
|
|
17
|
+
},
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
// Vue template wrapper for virtual nodes
|
|
@@ -26,6 +26,4 @@ export const VGridVueTemplateConstructor = vueTemplateConstructor;
|
|
|
26
26
|
// Vue editor wrapper
|
|
27
27
|
export const VGridVueEditor = vueEditor;
|
|
28
28
|
|
|
29
|
-
|
|
30
29
|
export default VGrid;
|
|
31
|
-
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// It's easier and safer for Volar to disable typechecking and let the return type inference do its job.
|
|
1
3
|
import { VNode, defineComponent, getCurrentInstance, h, inject, ref, Ref } from 'vue';
|
|
2
4
|
|
|
3
5
|
export interface InputProps<T> {
|
|
@@ -9,7 +11,7 @@ const MODEL_VALUE = 'modelValue';
|
|
|
9
11
|
const ROUTER_LINK_VALUE = 'routerLink';
|
|
10
12
|
const NAV_MANAGER = 'navManager';
|
|
11
13
|
const ROUTER_PROP_PREFIX = 'router';
|
|
12
|
-
|
|
14
|
+
const ARIA_PROP_PREFIX = 'aria';
|
|
13
15
|
/**
|
|
14
16
|
* Starting in Vue 3.1.0, all properties are
|
|
15
17
|
* added as keys to the props object, even if
|
|
@@ -30,26 +32,31 @@ const getComponentClasses = (classes: unknown) => {
|
|
|
30
32
|
return (classes as string)?.split(' ') || [];
|
|
31
33
|
};
|
|
32
34
|
|
|
33
|
-
const getElementClasses = (
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
const getElementClasses = (
|
|
36
|
+
ref: Ref<HTMLElement | undefined>,
|
|
37
|
+
componentClasses: Set<string>,
|
|
38
|
+
defaultClasses: string[] = []
|
|
39
|
+
) => {
|
|
40
|
+
return [...Array.from(ref.value?.classList || []), ...defaultClasses].filter(
|
|
41
|
+
(c: string, i, self) => !componentClasses.has(c) && self.indexOf(c) === i
|
|
42
|
+
);
|
|
36
43
|
};
|
|
37
44
|
|
|
38
45
|
/**
|
|
39
|
-
* Create a callback to define a Vue component wrapper around a Web Component.
|
|
40
|
-
*
|
|
41
|
-
* @prop name - The component tag name (i.e. `ion-button`)
|
|
42
|
-
* @prop componentProps - An array of properties on the
|
|
43
|
-
* component. These usually match up with the @Prop definitions
|
|
44
|
-
* in each component's TSX file.
|
|
45
|
-
* @prop customElement - An option custom element instance to pass
|
|
46
|
-
* to customElements.define. Only set if `includeImportCustomElements: true` in your config.
|
|
47
|
-
* @prop modelProp - The prop that v-model binds to (i.e. value)
|
|
48
|
-
* @prop modelUpdateEvent - The event that is fired from your Web Component when the value changes (i.e. ionChange)
|
|
49
|
-
* @prop externalModelUpdateEvent - The external event to fire from your Vue component when modelUpdateEvent fires. This is used for ensuring that v-model references have been
|
|
50
|
-
* correctly updated when a user's event callback fires.
|
|
51
|
-
*/
|
|
52
|
-
export const defineContainer = <Props, VModelType=string|number|boolean>(
|
|
46
|
+
* Create a callback to define a Vue component wrapper around a Web Component.
|
|
47
|
+
*
|
|
48
|
+
* @prop name - The component tag name (i.e. `ion-button`)
|
|
49
|
+
* @prop componentProps - An array of properties on the
|
|
50
|
+
* component. These usually match up with the @Prop definitions
|
|
51
|
+
* in each component's TSX file.
|
|
52
|
+
* @prop customElement - An option custom element instance to pass
|
|
53
|
+
* to customElements.define. Only set if `includeImportCustomElements: true` in your config.
|
|
54
|
+
* @prop modelProp - The prop that v-model binds to (i.e. value)
|
|
55
|
+
* @prop modelUpdateEvent - The event that is fired from your Web Component when the value changes (i.e. ionChange)
|
|
56
|
+
* @prop externalModelUpdateEvent - The external event to fire from your Vue component when modelUpdateEvent fires. This is used for ensuring that v-model references have been
|
|
57
|
+
* correctly updated when a user's event callback fires.
|
|
58
|
+
*/
|
|
59
|
+
export const defineContainer = <Props, VModelType = string | number | boolean>(
|
|
53
60
|
name: string,
|
|
54
61
|
defineCustomElement: any,
|
|
55
62
|
componentProps: string[] = [],
|
|
@@ -58,16 +65,16 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
|
|
|
58
65
|
externalModelUpdateEvent?: string
|
|
59
66
|
) => {
|
|
60
67
|
/**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
* Create a Vue component wrapper around a Web Component.
|
|
69
|
+
* Note: The `props` here are not all properties on a component.
|
|
70
|
+
* They refer to whatever properties are set on an instance of a component.
|
|
71
|
+
*/
|
|
65
72
|
|
|
66
73
|
if (defineCustomElement !== undefined) {
|
|
67
74
|
defineCustomElement();
|
|
68
75
|
}
|
|
69
76
|
|
|
70
|
-
const Container = defineComponent<Props & InputProps<VModelType>>((props
|
|
77
|
+
const Container = defineComponent<Props & InputProps<VModelType>>((props, { attrs, slots, emit }) => {
|
|
71
78
|
let modelPropValue = props[modelProp];
|
|
72
79
|
const containerRef = ref<HTMLElement>();
|
|
73
80
|
const classes = new Set(getComponentClasses(attrs.class));
|
|
@@ -116,12 +123,12 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
|
|
|
116
123
|
} else {
|
|
117
124
|
console.warn('Tried to navigate, but no router was found. Make sure you have mounted Vue Router.');
|
|
118
125
|
}
|
|
119
|
-
}
|
|
126
|
+
};
|
|
120
127
|
|
|
121
128
|
return () => {
|
|
122
129
|
modelPropValue = props[modelProp];
|
|
123
130
|
|
|
124
|
-
getComponentClasses(attrs.class).forEach(value => {
|
|
131
|
+
getComponentClasses(attrs.class).forEach((value) => {
|
|
125
132
|
classes.add(value);
|
|
126
133
|
});
|
|
127
134
|
|
|
@@ -133,13 +140,13 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
|
|
|
133
140
|
if (!ev.defaultPrevented) {
|
|
134
141
|
handleRouterLink(ev);
|
|
135
142
|
}
|
|
136
|
-
}
|
|
143
|
+
};
|
|
137
144
|
|
|
138
145
|
let propsToAdd: any = {
|
|
139
146
|
ref: containerRef,
|
|
140
147
|
class: getElementClasses(containerRef, classes),
|
|
141
148
|
onClick: handleClick,
|
|
142
|
-
onVnodeBeforeMount:
|
|
149
|
+
onVnodeBeforeMount: modelUpdateEvent ? onVnodeBeforeMount : undefined,
|
|
143
150
|
};
|
|
144
151
|
|
|
145
152
|
/**
|
|
@@ -150,7 +157,7 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
|
|
|
150
157
|
*/
|
|
151
158
|
for (const key in props) {
|
|
152
159
|
const value = props[key];
|
|
153
|
-
if (props.hasOwnProperty(key) && value !== EMPTY_PROP) {
|
|
160
|
+
if ((props.hasOwnProperty(key) && value !== EMPTY_PROP) || key.startsWith(ARIA_PROP_PREFIX)) {
|
|
154
161
|
propsToAdd[key] = value;
|
|
155
162
|
}
|
|
156
163
|
}
|
|
@@ -165,33 +172,35 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
|
|
|
165
172
|
if (props[MODEL_VALUE] !== EMPTY_PROP) {
|
|
166
173
|
propsToAdd = {
|
|
167
174
|
...propsToAdd,
|
|
168
|
-
[modelProp]: props[MODEL_VALUE]
|
|
169
|
-
}
|
|
175
|
+
[modelProp]: props[MODEL_VALUE],
|
|
176
|
+
};
|
|
170
177
|
} else if (modelPropValue !== EMPTY_PROP) {
|
|
171
178
|
propsToAdd = {
|
|
172
179
|
...propsToAdd,
|
|
173
|
-
[modelProp]: modelPropValue
|
|
174
|
-
}
|
|
180
|
+
[modelProp]: modelPropValue,
|
|
181
|
+
};
|
|
175
182
|
}
|
|
176
183
|
}
|
|
177
184
|
|
|
178
185
|
return h(name, propsToAdd, slots.default && slots.default());
|
|
179
|
-
}
|
|
186
|
+
};
|
|
180
187
|
});
|
|
181
188
|
|
|
182
|
-
Container
|
|
189
|
+
if (typeof Container !== 'function') {
|
|
190
|
+
Container.name = name;
|
|
183
191
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
192
|
+
Container.props = {
|
|
193
|
+
[ROUTER_LINK_VALUE]: DEFAULT_EMPTY_PROP,
|
|
194
|
+
};
|
|
187
195
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
196
|
+
componentProps.forEach((componentProp) => {
|
|
197
|
+
Container.props[componentProp] = DEFAULT_EMPTY_PROP;
|
|
198
|
+
});
|
|
191
199
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
200
|
+
if (modelProp) {
|
|
201
|
+
Container.props[MODEL_VALUE] = DEFAULT_EMPTY_PROP;
|
|
202
|
+
Container.emits = [UPDATE_VALUE_EVENT, externalModelUpdateEvent];
|
|
203
|
+
}
|
|
195
204
|
}
|
|
196
205
|
|
|
197
206
|
return Container;
|
|
@@ -12,7 +12,8 @@ export default class VueEditorAdapter {
|
|
|
12
12
|
private VueEditorConstructor: DefineComponent,
|
|
13
13
|
public column: RevoGrid.ColumnDataSchemaModel,
|
|
14
14
|
private save: Function,
|
|
15
|
-
private close: Function
|
|
15
|
+
private close: Function,
|
|
16
|
+
private appContext: Object
|
|
16
17
|
) {}
|
|
17
18
|
|
|
18
19
|
// optional, called after editor rendered
|
|
@@ -20,8 +21,10 @@ export default class VueEditorAdapter {
|
|
|
20
21
|
|
|
21
22
|
// optional, called after editor destroyed
|
|
22
23
|
disconnectedCallback() {
|
|
23
|
-
this.vueEl
|
|
24
|
-
|
|
24
|
+
if (this.vueEl) {
|
|
25
|
+
this.vueEl.destroy();
|
|
26
|
+
this.vueEl = undefined;
|
|
27
|
+
}
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
render(h: RevoGrid.HyperFunc<VNode>) {
|
|
@@ -31,6 +34,6 @@ export default class VueEditorAdapter {
|
|
|
31
34
|
column: this.column,
|
|
32
35
|
save: this.save,
|
|
33
36
|
close: this.close
|
|
34
|
-
})}}/>;
|
|
37
|
+
}, this.appContext)}}/>;
|
|
35
38
|
}
|
|
36
|
-
}
|
|
39
|
+
}
|
package/src/vue-editor.tsx
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import {RevoGrid} from "@revolist/revogrid/dist/types/interfaces";
|
|
1
|
+
import {RevoGrid, Edition} from "@revolist/revogrid/dist/types/interfaces";
|
|
2
|
+
import { getCurrentInstance } from "vue";
|
|
2
3
|
import VueEditorAdapter from './vue-editor-adapter';
|
|
3
4
|
|
|
4
5
|
|
|
5
|
-
const vueEditor = (vueConstructor: any) => {
|
|
6
|
+
const vueEditor = (vueConstructor: any): Edition.EditorCtr => {
|
|
7
|
+
const current = getCurrentInstance();
|
|
8
|
+
const appContext = current?.appContext;
|
|
6
9
|
return function(column: RevoGrid.ColumnDataSchemaModel, save: Function, close: Function) {
|
|
7
|
-
return new VueEditorAdapter(vueConstructor, column, save, close);
|
|
8
|
-
}
|
|
10
|
+
return new VueEditorAdapter(vueConstructor, column, save, close, appContext);
|
|
11
|
+
} as unknown as Edition.EditorCtr;
|
|
9
12
|
};
|
|
10
13
|
|
|
11
14
|
export default vueEditor;
|
package/src/vue-template.tsx
CHANGED
|
@@ -1,43 +1,41 @@
|
|
|
1
1
|
import { RevoGrid } from '@revolist/revogrid/dist/types/interfaces';
|
|
2
2
|
import { VNode } from '@revolist/revogrid/dist/types/stencil-public-runtime';
|
|
3
|
-
import { ComponentPublicInstance, createVNode, DefineComponent, render } from
|
|
3
|
+
import { ComponentPublicInstance, createVNode, DefineComponent, render, getCurrentInstance } from "vue";
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
interface VueElement extends HTMLElement {
|
|
6
|
+
export interface VueElement extends HTMLElement {
|
|
7
7
|
_vnode?: ComponentPublicInstance<any>;
|
|
8
8
|
}
|
|
9
9
|
export const vueTemplateConstructor =
|
|
10
|
-
(vueConstructor: DefineComponent,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
// check, probably vue instance already inited
|
|
25
|
-
let vueInstance = el._vnode;
|
|
26
|
-
// if exists, return
|
|
27
|
-
if (vueInstance) {
|
|
28
|
-
// if vue inited just update it's properties
|
|
29
|
-
for (const k in p) {
|
|
30
|
-
vueInstance.component.props[k] = p[k];
|
|
31
|
-
}
|
|
32
|
-
} else {
|
|
33
|
-
const vNode = createVNode(vueConstructor, p);
|
|
34
|
-
render(vNode, el);
|
|
10
|
+
(vueConstructor: DefineComponent, el: VueElement|null, p: Record<string, any>, appContext: any) => {
|
|
11
|
+
if (!el) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// check, probably vue instance already inited
|
|
16
|
+
let vNode = el._vnode;
|
|
17
|
+
// if exists, return
|
|
18
|
+
if (vNode) {
|
|
19
|
+
if (appContext) vNode.appContext = appContext;
|
|
20
|
+
// if vue inited just update it's properties
|
|
21
|
+
for (const k in p) {
|
|
22
|
+
vNode.component.props[k] = p[k];
|
|
35
23
|
}
|
|
36
|
-
|
|
37
|
-
|
|
24
|
+
} else {
|
|
25
|
+
vNode = createVNode(vueConstructor, p);
|
|
26
|
+
if (appContext) vNode.appContext = appContext;
|
|
27
|
+
render(vNode, el);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// useful hints: https://stackoverflow.com/questions/65163775/how-to-destroy-unmount-vue-js-3-components
|
|
31
|
+
const destroy = () => render(null, el);
|
|
32
|
+
return { vueInstance: vNode, destroy, el };
|
|
33
|
+
};
|
|
38
34
|
|
|
39
35
|
const vueTemplate = (vueConstructor: any) => {
|
|
40
|
-
|
|
36
|
+
const current = getCurrentInstance();
|
|
37
|
+
const appContext = current?.appContext;
|
|
38
|
+
return (h: RevoGrid.HyperFunc<VNode>, p: RevoGrid.ColumnDataSchemaModel) => <span ref={(el) => vueTemplateConstructor(vueConstructor, el as HTMLElement, p, appContext)}></span>;
|
|
41
39
|
};
|
|
42
40
|
|
|
43
41
|
export default vueTemplate;
|