api-dict-select 0.1.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.
package/README.md ADDED
@@ -0,0 +1,84 @@
1
+ # `api-dict-select`
2
+
3
+ 一个可复用的下拉组件。传入接口方法后自动请求选项数据,支持缓存、联动参数、`label` 回传和多选。
4
+
5
+ ## 目录说明
6
+
7
+ ```text
8
+ packages/dict-select
9
+ ```
10
+
11
+ 这个目录已经是一个独立 npm 包骨架,后续可以单独安装依赖、打包和发布。
12
+
13
+ ## 本地开发
14
+
15
+ ```bash
16
+ cd packages/dict-select
17
+ npm install
18
+ npm run build
19
+ ```
20
+
21
+ ## 发布
22
+
23
+ 发布前按需修改当前目录下 `package.json` 的包名和版本号,再执行:
24
+
25
+ ```bash
26
+ cd packages/dict-select
27
+ npm publish
28
+ ```
29
+
30
+ 如果要发私服:
31
+
32
+ ```bash
33
+ npm publish --registry=http://your-registry
34
+ ```
35
+
36
+ ## 使用方式
37
+
38
+ ```ts
39
+ import { createApp } from 'vue';
40
+ import ElementPlus from 'element-plus';
41
+ import DictSelect from 'api-dict-select';
42
+ import 'element-plus/dist/index.css';
43
+
44
+ const app = createApp(App);
45
+ app.use(ElementPlus);
46
+ app.use(DictSelect);
47
+ app.mount('#app');
48
+ ```
49
+
50
+ ```vue
51
+ <template>
52
+ <DictSelect
53
+ v-model="value"
54
+ :api="getOptions"
55
+ option-label="text"
56
+ option-value="code"
57
+ :param="{ type: 'status' }"
58
+ />
59
+ </template>
60
+
61
+ <script setup lang="ts">
62
+ import { ref } from 'vue';
63
+
64
+ const value = ref();
65
+
66
+ const getOptions = async (params: Record<string, any>) => {
67
+ return Promise.resolve({
68
+ result: {
69
+ list: [
70
+ { code: 1, text: '启用' },
71
+ { code: 0, text: '停用' },
72
+ ],
73
+ },
74
+ });
75
+ };
76
+ </script>
77
+ ```
78
+
79
+ ## 当前版本特点
80
+
81
+ - 不依赖业务项目内的 `pinia store`。
82
+ - 使用包内缓存,可直接在不同项目中复用。
83
+ - 支持 `cacheKey`,避免同接口不同参数时缓存串数据。
84
+ - 支持 `transform`,便于兼容不同接口返回结构。
package/dist/index.js ADDED
@@ -0,0 +1,214 @@
1
+ import { defineComponent as z, useModel as p, ref as B, computed as U, watch as v, resolveComponent as D, openBlock as M, createBlock as L, withCtx as _, createElementBlock as G, Fragment as H, renderList as P, mergeModels as N } from "vue";
2
+ const O = /* @__PURE__ */ new Map(), Q = () => O, W = (u) => {
3
+ if (u) {
4
+ O.delete(u);
5
+ return;
6
+ }
7
+ O.clear();
8
+ }, I = /* @__PURE__ */ z({
9
+ __name: "DictSelect",
10
+ props: /* @__PURE__ */ N({
11
+ placeholder: { default: "全部" },
12
+ disabled: { type: Boolean, default: !1 },
13
+ optionLabel: { default: "k" },
14
+ optionValue: { default: "v" },
15
+ optionDisabledField: { default: "text" },
16
+ optionDisabledValue: { type: [String, Number, Boolean], default: "disable" },
17
+ filter: { type: Boolean, default: !1 },
18
+ clearable: { type: Boolean, default: !0 },
19
+ vModelToNumber: { type: Boolean, default: !1 },
20
+ vModelToString: { type: Boolean, default: !1 },
21
+ isBuffer: { type: Boolean, default: !0 },
22
+ isLabel: { type: Boolean, default: !1 },
23
+ api: {},
24
+ mock: { default: () => [] },
25
+ multiple: { type: Boolean, default: !1 },
26
+ param: { default: () => ({}) },
27
+ callApiIfNeeded: { type: Boolean, default: !0 },
28
+ cacheKey: { default: "" },
29
+ transform: { type: Function, default: void 0 },
30
+ immediate: { type: Boolean, default: !0 },
31
+ autoClearInvalidValue: { type: Boolean, default: !0 }
32
+ }, {
33
+ modelValue: {},
34
+ modelModifiers: {},
35
+ options: {},
36
+ optionsModifiers: {},
37
+ response: {},
38
+ responseModifiers: {},
39
+ loading: { type: Boolean },
40
+ loadingModifiers: {},
41
+ selectedOption: {},
42
+ selectedOptionModifiers: {}
43
+ }),
44
+ emits: /* @__PURE__ */ N(["label", "allData", "options", "loaded", "error", "onClear"], ["update:modelValue", "update:options", "update:response", "update:loading", "update:selectedOption"]),
45
+ setup(u, { expose: w, emit: T }) {
46
+ const e = u, n = p(u, "modelValue"), A = p(u, "options"), K = p(u, "response"), E = p(u, "loading"), k = p(u, "selectedOption"), o = B([]), m = B(!1), d = B(), g = Q();
47
+ let y = 0;
48
+ const c = T, C = (l) => {
49
+ var a, i, t;
50
+ return ((a = l == null ? void 0 : l.result) == null ? void 0 : a.list) || ((i = l == null ? void 0 : l.result) == null ? void 0 : i.data) || ((t = l == null ? void 0 : l.result) == null ? void 0 : t.result) || (l == null ? void 0 : l.result) || (l == null ? void 0 : l.data) || l || [];
51
+ }, F = () => !e.param || Object.keys(e.param).length === 0 ? !0 : Object.values(e.param).every(
52
+ (l) => l != null && l !== ""
53
+ ), S = () => {
54
+ var a;
55
+ return `${e.cacheKey || ((a = e.api) == null ? void 0 : a.name) || "dict-select"}:${JSON.stringify(e.param || {})}`;
56
+ }, f = () => e.multiple ? Array.isArray(n.value) ? o.value.filter(
57
+ (l) => n.value.includes(l[e.optionValue])
58
+ ) : [] : o.value.find(
59
+ (l) => l[e.optionValue] === n.value
60
+ ), s = () => {
61
+ A.value = o.value, K.value = d.value, E.value = m.value, k.value = f();
62
+ }, j = (l) => {
63
+ e.vModelToNumber && l.forEach((a) => {
64
+ a[e.optionValue] = Number(a[e.optionValue]);
65
+ }), e.vModelToString && l.forEach((a) => {
66
+ a[e.optionValue] = String(a[e.optionValue]);
67
+ });
68
+ }, J = () => {
69
+ if (!e.autoClearInvalidValue)
70
+ return;
71
+ if (e.multiple) {
72
+ if (Array.isArray(n.value) && n.value.length > 0) {
73
+ const a = n.value.filter(
74
+ (i) => o.value.some((t) => t[e.optionValue] === i)
75
+ );
76
+ a.length !== n.value.length && (n.value = a);
77
+ }
78
+ return;
79
+ }
80
+ o.value.findIndex(
81
+ (a) => a[e.optionValue] === n.value
82
+ ) === -1 && (n.value = void 0);
83
+ }, R = () => {
84
+ c("onClear");
85
+ }, b = (l, a, i) => {
86
+ o.value = l, d.value = a, j(o.value), J(), s(), c("loaded", {
87
+ options: o.value,
88
+ response: d.value,
89
+ fromCache: i
90
+ });
91
+ }, V = async (l = !1) => {
92
+ if (e.mock.length > 0) {
93
+ b(e.mock, e.mock, !1);
94
+ return;
95
+ }
96
+ if (!e.api) {
97
+ o.value = [], d.value = void 0, s();
98
+ return;
99
+ }
100
+ if (!e.callApiIfNeeded || !F()) {
101
+ o.value = [], d.value = void 0, s();
102
+ return;
103
+ }
104
+ const a = S();
105
+ if (!l && e.isBuffer && g.has(a)) {
106
+ const t = g.get(a);
107
+ b((t == null ? void 0 : t.options) || [], t == null ? void 0 : t.response, !0);
108
+ return;
109
+ }
110
+ const i = ++y;
111
+ m.value = !0, s();
112
+ try {
113
+ const t = await e.api(e.param);
114
+ if (i !== y)
115
+ return;
116
+ const r = e.transform ? e.transform(C(t), t) : C(t), x = Array.isArray(r) ? r : [];
117
+ e.isBuffer && g.set(a, {
118
+ options: x,
119
+ response: t
120
+ }), b(x, t, !1);
121
+ } catch (t) {
122
+ if (i !== y)
123
+ return;
124
+ c("error", t), o.value = [], d.value = void 0, s();
125
+ } finally {
126
+ i === y && (m.value = !1, s());
127
+ }
128
+ }, q = async (l = !0) => {
129
+ await V(l);
130
+ }, $ = () => {
131
+ W(S());
132
+ }, h = U(() => {
133
+ if (e.multiple) {
134
+ const a = f();
135
+ return Array.isArray(a) ? a.map((i) => i[e.optionLabel]) : [];
136
+ }
137
+ const l = f();
138
+ return !l || Array.isArray(l) ? "" : l[e.optionLabel] ?? "";
139
+ });
140
+ return v(
141
+ () => o.value,
142
+ () => {
143
+ c("options", o.value), A.value = o.value;
144
+ }
145
+ ), v(
146
+ () => e.mock,
147
+ () => {
148
+ if (e.mock.length > 0) {
149
+ b(e.mock, e.mock, !1);
150
+ return;
151
+ }
152
+ e.api || (o.value = [], d.value = void 0, s());
153
+ }
154
+ ), v(
155
+ () => e.api,
156
+ () => {
157
+ e.immediate && V();
158
+ },
159
+ { immediate: e.immediate }
160
+ ), v(
161
+ () => e.param,
162
+ (l, a) => {
163
+ JSON.stringify(l) !== JSON.stringify(a) && V();
164
+ },
165
+ { deep: !0 }
166
+ ), v(
167
+ () => [n.value, o.value],
168
+ () => {
169
+ const l = f();
170
+ k.value = l, e.isLabel && c(
171
+ "label",
172
+ Array.isArray(h.value) ? h.value.join(",") : h.value
173
+ ), c("allData", l);
174
+ },
175
+ { immediate: !0, deep: !0 }
176
+ ), w({
177
+ refresh: q,
178
+ clearCache: $,
179
+ getOptions: () => o.value,
180
+ getResponse: () => d.value,
181
+ getSelectedOption: f
182
+ }), (l, a) => {
183
+ const i = D("el-option"), t = D("el-select");
184
+ return M(), L(t, {
185
+ modelValue: n.value,
186
+ "onUpdate:modelValue": a[0] || (a[0] = (r) => n.value = r),
187
+ filterable: e.filter,
188
+ disabled: e.disabled,
189
+ placeholder: e.placeholder,
190
+ clearable: e.clearable,
191
+ multiple: e.multiple,
192
+ loading: m.value,
193
+ onClear: R
194
+ }, {
195
+ default: _(() => [
196
+ (M(!0), G(H, null, P(o.value, (r) => (M(), L(i, {
197
+ key: r[e.optionValue],
198
+ label: r[e.optionLabel],
199
+ value: r[e.optionValue],
200
+ disabled: r[e.optionDisabledField] === e.optionDisabledValue
201
+ }, null, 8, ["label", "value", "disabled"]))), 128))
202
+ ]),
203
+ _: 1
204
+ }, 8, ["modelValue", "filterable", "disabled", "placeholder", "clearable", "multiple", "loading"]);
205
+ };
206
+ }
207
+ }), X = I;
208
+ X.install = (u) => {
209
+ u.component("DictSelect", I);
210
+ };
211
+ export {
212
+ I as DictSelect,
213
+ X as default
214
+ };
@@ -0,0 +1 @@
1
+ (function(s,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],t):(s=typeof globalThis<"u"?globalThis:s||self,t(s.DictSelect={},s.Vue))})(this,function(s,t){"use strict";const g=new Map,w=()=>g,x=r=>{if(r){g.delete(r);return}g.clear()},h=t.defineComponent({__name:"DictSelect",props:t.mergeModels({placeholder:{default:"全部"},disabled:{type:Boolean,default:!1},optionLabel:{default:"k"},optionValue:{default:"v"},optionDisabledField:{default:"text"},optionDisabledValue:{type:[String,Number,Boolean],default:"disable"},filter:{type:Boolean,default:!1},clearable:{type:Boolean,default:!0},vModelToNumber:{type:Boolean,default:!1},vModelToString:{type:Boolean,default:!1},isBuffer:{type:Boolean,default:!0},isLabel:{type:Boolean,default:!1},api:{},mock:{default:()=>[]},multiple:{type:Boolean,default:!1},param:{default:()=>({})},callApiIfNeeded:{type:Boolean,default:!0},cacheKey:{default:""},transform:{type:Function,default:void 0},immediate:{type:Boolean,default:!0},autoClearInvalidValue:{type:Boolean,default:!0}},{modelValue:{},modelModifiers:{},options:{},optionsModifiers:{},response:{},responseModifiers:{},loading:{type:Boolean},loadingModifiers:{},selectedOption:{},selectedOptionModifiers:{}}),emits:t.mergeModels(["label","allData","options","loaded","error","onClear"],["update:modelValue","update:options","update:response","update:loading","update:selectedOption"]),setup(r,{expose:L,emit:N}){const e=r,u=t.useModel(r,"modelValue"),O=t.useModel(r,"options"),T=t.useModel(r,"response"),I=t.useModel(r,"loading"),A=t.useModel(r,"selectedOption"),i=t.ref([]),v=t.ref(!1),c=t.ref(),V=w();let y=0;const p=N,C=l=>{var a,n,o;return((a=l==null?void 0:l.result)==null?void 0:a.list)||((n=l==null?void 0:l.result)==null?void 0:n.data)||((o=l==null?void 0:l.result)==null?void 0:o.result)||(l==null?void 0:l.result)||(l==null?void 0:l.data)||l||[]},j=()=>!e.param||Object.keys(e.param).length===0?!0:Object.values(e.param).every(l=>l!=null&&l!==""),S=()=>{var a;return`${e.cacheKey||((a=e.api)==null?void 0:a.name)||"dict-select"}:${JSON.stringify(e.param||{})}`},m=()=>e.multiple?Array.isArray(u.value)?i.value.filter(l=>u.value.includes(l[e.optionValue])):[]:i.value.find(l=>l[e.optionValue]===u.value),f=()=>{O.value=i.value,T.value=c.value,I.value=v.value,A.value=m()},K=l=>{e.vModelToNumber&&l.forEach(a=>{a[e.optionValue]=Number(a[e.optionValue])}),e.vModelToString&&l.forEach(a=>{a[e.optionValue]=String(a[e.optionValue])})},E=()=>{if(!e.autoClearInvalidValue)return;if(e.multiple){if(Array.isArray(u.value)&&u.value.length>0){const a=u.value.filter(n=>i.value.some(o=>o[e.optionValue]===n));a.length!==u.value.length&&(u.value=a)}return}i.value.findIndex(a=>a[e.optionValue]===u.value)===-1&&(u.value=void 0)},F=()=>{p("onClear")},b=(l,a,n)=>{i.value=l,c.value=a,K(i.value),E(),f(),p("loaded",{options:i.value,response:c.value,fromCache:n})},M=async(l=!1)=>{if(e.mock.length>0){b(e.mock,e.mock,!1);return}if(!e.api){i.value=[],c.value=void 0,f();return}if(!e.callApiIfNeeded||!j()){i.value=[],c.value=void 0,f();return}const a=S();if(!l&&e.isBuffer&&V.has(a)){const o=V.get(a);b((o==null?void 0:o.options)||[],o==null?void 0:o.response,!0);return}const n=++y;v.value=!0,f();try{const o=await e.api(e.param);if(n!==y)return;const d=e.transform?e.transform(C(o),o):C(o),D=Array.isArray(d)?d:[];e.isBuffer&&V.set(a,{options:D,response:o}),b(D,o,!1)}catch(o){if(n!==y)return;p("error",o),i.value=[],c.value=void 0,f()}finally{n===y&&(v.value=!1,f())}},q=async(l=!0)=>{await M(l)},J=()=>{x(S())},B=t.computed(()=>{if(e.multiple){const a=m();return Array.isArray(a)?a.map(n=>n[e.optionLabel]):[]}const l=m();return!l||Array.isArray(l)?"":l[e.optionLabel]??""});return t.watch(()=>i.value,()=>{p("options",i.value),O.value=i.value}),t.watch(()=>e.mock,()=>{if(e.mock.length>0){b(e.mock,e.mock,!1);return}e.api||(i.value=[],c.value=void 0,f())}),t.watch(()=>e.api,()=>{e.immediate&&M()},{immediate:e.immediate}),t.watch(()=>e.param,(l,a)=>{JSON.stringify(l)!==JSON.stringify(a)&&M()},{deep:!0}),t.watch(()=>[u.value,i.value],()=>{const l=m();A.value=l,e.isLabel&&p("label",Array.isArray(B.value)?B.value.join(","):B.value),p("allData",l)},{immediate:!0,deep:!0}),L({refresh:q,clearCache:J,getOptions:()=>i.value,getResponse:()=>c.value,getSelectedOption:m}),(l,a)=>{const n=t.resolveComponent("el-option"),o=t.resolveComponent("el-select");return t.openBlock(),t.createBlock(o,{modelValue:u.value,"onUpdate:modelValue":a[0]||(a[0]=d=>u.value=d),filterable:e.filter,disabled:e.disabled,placeholder:e.placeholder,clearable:e.clearable,multiple:e.multiple,loading:v.value,onClear:F},{default:t.withCtx(()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(i.value,d=>(t.openBlock(),t.createBlock(n,{key:d[e.optionValue],label:d[e.optionLabel],value:d[e.optionValue],disabled:d[e.optionDisabledField]===e.optionDisabledValue},null,8,["label","value","disabled"]))),128))]),_:1},8,["modelValue","filterable","disabled","placeholder","clearable","multiple","loading"])}}}),k=h;k.install=r=>{r.component("DictSelect",h)},s.DictSelect=h,s.default=k,Object.defineProperties(s,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -0,0 +1,92 @@
1
+ import type { ApiFunction, OptionItem, TransformFunction } from './types';
2
+ type __VLS_Props = {
3
+ placeholder?: string;
4
+ disabled?: boolean;
5
+ optionLabel?: string;
6
+ optionValue?: string;
7
+ optionDisabledField?: string;
8
+ optionDisabledValue?: string | number | boolean;
9
+ filter?: boolean;
10
+ clearable?: boolean;
11
+ vModelToNumber?: boolean;
12
+ vModelToString?: boolean;
13
+ isBuffer?: boolean;
14
+ isLabel?: boolean;
15
+ api?: ApiFunction;
16
+ mock?: OptionItem[];
17
+ multiple?: boolean;
18
+ param?: Record<string, any>;
19
+ callApiIfNeeded?: boolean;
20
+ cacheKey?: string;
21
+ transform?: TransformFunction;
22
+ immediate?: boolean;
23
+ autoClearInvalidValue?: boolean;
24
+ };
25
+ type __VLS_PublicProps = __VLS_Props & {
26
+ modelValue?: any;
27
+ 'options'?: OptionItem[] | undefined;
28
+ 'response'?: any;
29
+ 'loading'?: boolean | undefined;
30
+ 'selectedOption'?: OptionItem | OptionItem[] | undefined;
31
+ };
32
+ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {
33
+ refresh: (force?: boolean) => Promise<void>;
34
+ clearCache: () => void;
35
+ getOptions: () => OptionItem[];
36
+ getResponse: () => any;
37
+ getSelectedOption: () => OptionItem | OptionItem[] | undefined;
38
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
39
+ options: (args_0: OptionItem[]) => any;
40
+ label: (args_0: string) => any;
41
+ allData: (args_0: OptionItem | OptionItem[] | undefined) => any;
42
+ loaded: (args_0: {
43
+ options: OptionItem[];
44
+ response: any;
45
+ fromCache: boolean;
46
+ }) => any;
47
+ error: (args_0: unknown) => any;
48
+ onClear: () => any;
49
+ "update:modelValue": (value: any) => any;
50
+ "update:options": (value: OptionItem[] | undefined) => any;
51
+ "update:response": (value: any) => any;
52
+ "update:loading": (value: boolean | undefined) => any;
53
+ "update:selectedOption": (value: OptionItem | OptionItem[] | undefined) => any;
54
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
55
+ onOptions?: ((args_0: OptionItem[]) => any) | undefined;
56
+ onLabel?: ((args_0: string) => any) | undefined;
57
+ onAllData?: ((args_0: OptionItem | OptionItem[] | undefined) => any) | undefined;
58
+ onLoaded?: ((args_0: {
59
+ options: OptionItem[];
60
+ response: any;
61
+ fromCache: boolean;
62
+ }) => any) | undefined;
63
+ onError?: ((args_0: unknown) => any) | undefined;
64
+ onOnClear?: (() => any) | undefined;
65
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
66
+ "onUpdate:options"?: ((value: OptionItem[] | undefined) => any) | undefined;
67
+ "onUpdate:response"?: ((value: any) => any) | undefined;
68
+ "onUpdate:loading"?: ((value: boolean | undefined) => any) | undefined;
69
+ "onUpdate:selectedOption"?: ((value: OptionItem | OptionItem[] | undefined) => any) | undefined;
70
+ }>, {
71
+ placeholder: string;
72
+ disabled: boolean;
73
+ optionLabel: string;
74
+ optionValue: string;
75
+ optionDisabledField: string;
76
+ optionDisabledValue: string | number | boolean;
77
+ filter: boolean;
78
+ clearable: boolean;
79
+ vModelToNumber: boolean;
80
+ vModelToString: boolean;
81
+ isBuffer: boolean;
82
+ isLabel: boolean;
83
+ mock: OptionItem[];
84
+ multiple: boolean;
85
+ param: Record<string, any>;
86
+ callApiIfNeeded: boolean;
87
+ cacheKey: string;
88
+ transform: TransformFunction;
89
+ immediate: boolean;
90
+ autoClearInvalidValue: boolean;
91
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
92
+ export default _default;
@@ -0,0 +1,7 @@
1
+ export type OptionItem = Record<string, any>;
2
+ export interface CacheEntry {
3
+ options: OptionItem[];
4
+ response: any;
5
+ }
6
+ export declare const getOptionCache: () => Map<string, CacheEntry>;
7
+ export declare const clearOptionCache: (key?: string) => void;
@@ -0,0 +1,10 @@
1
+ import type { App } from 'vue';
2
+ import DictSelect from './DictSelect.vue';
3
+ import type { DictSelectExpose, OptionItem } from './types';
4
+ type DictSelectPlugin = typeof DictSelect & {
5
+ install: (app: App) => void;
6
+ };
7
+ declare const plugin: DictSelectPlugin;
8
+ export default plugin;
9
+ export { DictSelect };
10
+ export type { DictSelectExpose, OptionItem };
@@ -0,0 +1,10 @@
1
+ export type OptionItem = Record<string, any>;
2
+ export type ApiFunction = (params?: Record<string, any>) => Promise<any>;
3
+ export type TransformFunction = (raw: any, response: any) => OptionItem[];
4
+ export interface DictSelectExpose {
5
+ refresh: (force?: boolean) => Promise<void>;
6
+ clearCache: () => void;
7
+ getOptions: () => OptionItem[];
8
+ getResponse: () => any;
9
+ getSelectedOption: () => OptionItem | OptionItem[] | undefined;
10
+ }
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "api-dict-select",
3
+ "version": "0.1.0",
4
+ "description": "A reusable select component that loads options from an API automatically.",
5
+ "type": "module",
6
+ "main": "dist/index.umd.cjs",
7
+ "module": "dist/index.js",
8
+ "types": "dist/types/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.umd.cjs",
16
+ "types": "./dist/types/index.d.ts"
17
+ }
18
+ },
19
+ "scripts": {
20
+ "build": "vite build && vue-tsc --declaration --emitDeclarationOnly --outDir dist/types",
21
+ "dev": "vite build --watch"
22
+ },
23
+ "peerDependencies": {
24
+ "element-plus": "^2.7.2",
25
+ "vue": "^3.5.0"
26
+ },
27
+ "devDependencies": {
28
+ "@vitejs/plugin-vue": "^5.1.4",
29
+ "typescript": "^5.6.3",
30
+ "vite": "^5.4.10",
31
+ "vue": "^3.5.12",
32
+ "vue-tsc": "^2.1.10"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ }
37
+ }