@neatui/vue 1.2.22 → 2.0.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.
@@ -0,0 +1,274 @@
1
+ <template>
2
+ <div class="flex-block pr">
3
+ <el-input v-if="node.model[0] === 'Input'" v-model="value" class="full-w" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted" />
4
+ <el-input
5
+ v-if="node.model[0] === 'TextArea'"
6
+ v-model="value"
7
+ class="full-w"
8
+ v-bind="{ ...(node.model[1] || {}, { type: 'textarea', rows: 3 }) }"
9
+ @input="setInteracted"
10
+ @blur="setInteracted"
11
+ />
12
+ <el-select v-else-if="node.model[0] === 'Select'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
13
+ <el-option v-for="item in node.enums" :key="item.value" :label="item.label" :value="item.value"> </el-option>
14
+ </el-select>
15
+ <el-radio-group v-else-if="node.model[0] === 'Radio'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
16
+ <el-radio v-for="item in node.enums" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
17
+ </el-radio-group>
18
+ <el-checkbox-group v-else-if="node.model[0] === 'Checkbox' && node.enums" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
19
+ <el-checkbox v-for="item in node.enums" :key="item.value" :label="item.value">{{ item.label }}</el-checkbox>
20
+ </el-checkbox-group>
21
+ <el-checkbox v-else-if="node.model[0] === 'Checkbox'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted"> </el-checkbox>
22
+ <el-switch v-else-if="node.model[0] === 'Switch'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted"> </el-switch>
23
+ <el-time-select v-else-if="node.model[0] === 'TimeSelect'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted"> </el-time-select>
24
+ <el-time-picker v-else-if="node.model[0] === 'TimePicker'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted"> </el-time-picker>
25
+ <el-date-picker v-else-if="node.model[0] === 'DatePicker'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted"> </el-date-picker>
26
+ <el-date-picker
27
+ v-else-if="node.model[0] === 'DateTimePicker'"
28
+ v-model="value"
29
+ v-bind="{ ...(node.model[1] || {}, { type: 'datetime' }) }"
30
+ @input="setInteracted"
31
+ @blur="setInteracted"
32
+ >
33
+ </el-date-picker>
34
+ <el-cascader
35
+ v-else-if="node.model[0] === 'Cascader'"
36
+ v-model="value"
37
+ :options="node.enums"
38
+ v-bind="{ ...node.model[1] }"
39
+ @input="setInteracted"
40
+ @blur="setInteracted"
41
+ ></el-cascader>
42
+ <gallery-value v-else-if="node.model[0] === 'SelectImg'" :form="data" :node="node" v-bind="{ ...node.model[1] }"></gallery-value>
43
+ <!-- 自定义组件插槽 -->
44
+ <slot v-else-if="node.model[0]" :name="node.model[0]" :data="data" :node="node" v-model:bind="bind"></slot>
45
+ <!-- 自定义字段插槽 -->
46
+ <slot v-else :name="`${node.field}-value`" :data="data" :node="node" v-model:bind="bind"></slot>
47
+ <p v-show="error.verify === 'no'" class="form-loader-verify" :data-verify-type="error.co">{{ error.tips }}</p>
48
+ </div>
49
+ </template>
50
+ <script>
51
+ import { isFunction } from '@fekit/utils';
52
+ import GalleryValue from '@/common/galleryValue';
53
+
54
+ export default {
55
+ components: { GalleryValue },
56
+ props: {
57
+ node: {
58
+ type: Object,
59
+ default: () => ({})
60
+ },
61
+ data: {
62
+ type: Object,
63
+ default: () => ({})
64
+ },
65
+ interacted: {
66
+ type: Boolean,
67
+ default: false
68
+ }
69
+ },
70
+ data() {
71
+ return {
72
+ _interacted: false,
73
+ bind: {
74
+ value: null
75
+ },
76
+ error: {}
77
+ };
78
+ },
79
+ created() {
80
+ // console.log(54, this.$props.node);
81
+ },
82
+ computed: {
83
+ value: {
84
+ get() {
85
+ return this.$props.data?.[this.$props.node?.field];
86
+ },
87
+ set(value) {
88
+ const _value = this.$props.node.value;
89
+ if (_value) {
90
+ if (isFunction(_value)) {
91
+ this.$set(this.$props.data, this.$props.node.field, _value(value));
92
+ } else {
93
+ this.$set(this.$props.data, this.$props.node.field, _value);
94
+ }
95
+ } else {
96
+ this.$set(this.$props.data, this.$props.node.field, value);
97
+ }
98
+ this.validate();
99
+ }
100
+ }
101
+ },
102
+ methods: {
103
+ async validate() {
104
+ if (this._interacted) {
105
+ // 提示文案
106
+ let tips = '';
107
+ // 错误类型
108
+ let type = '';
109
+ // 验证结果
110
+ let verify = '';
111
+ const value = this.data[this.node.field];
112
+ if (`${value}`) {
113
+ // 有值
114
+ let _err = false;
115
+ // 遍历校验规则
116
+ for (const rule of this.node.rules) {
117
+ if (rule && rule.validator) {
118
+ const yes = !(await rule.validator(value));
119
+ if (yes) {
120
+ tips = rule.message;
121
+ type = rule.type;
122
+ _err = true;
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ verify = _err ? 'no' : 'ok';
128
+ // console.log(91);
129
+ } else {
130
+ // console.log(92);
131
+ // 无值
132
+ let _err = false;
133
+ // 遍历校验规则
134
+ for (const rule of this.node.rules) {
135
+ if (rule) {
136
+ tips = rule.message;
137
+ type = rule.type;
138
+ if (rule.required) {
139
+ _err = true;
140
+ break;
141
+ }
142
+ }
143
+ }
144
+ verify = _err ? 'no' : '';
145
+ }
146
+ if (verify !== 'no' && this.tips) {
147
+ tips = this.tips;
148
+ }
149
+ // 是否显示提示
150
+ const ontips = (verify === 'no' && tips) || this.tips ? 'show' : '';
151
+ // 状态颜色
152
+ const co = verify === 'no' ? 'co:' + type : this.co ? 'co:' + this.co : '';
153
+ this.error = { tips, ontips, verify, co };
154
+ } else {
155
+ this.error = { tips: this.tips, ontips: this.tips ? 'show' : '', verify: '', co: '' };
156
+ }
157
+ },
158
+ setInteracted() {
159
+ // 用户交互
160
+ if (!this._interacted) {
161
+ setTimeout(() => {
162
+ this._interacted = true;
163
+ this.validate();
164
+ }, 50);
165
+ }
166
+ }
167
+ },
168
+ watch: {
169
+ bind: {
170
+ handler(bind) {
171
+ let value = bind.value;
172
+ const run = this.$props.node.value;
173
+ if (run) {
174
+ if (isFunction(run)) {
175
+ value = run(value);
176
+ } else {
177
+ value = run;
178
+ }
179
+ }
180
+ this.$set(this.$props.data, this.$props.node.field, value);
181
+ this.$set(this.bind, 'value', value);
182
+ },
183
+ deep: true
184
+ },
185
+ interacted: {
186
+ handler(val) {
187
+ this._interacted = val;
188
+ this.validate();
189
+ },
190
+ deep: true
191
+ },
192
+ value: {
193
+ handler() {
194
+ this.validate();
195
+ },
196
+ deep: true
197
+ }
198
+ }
199
+ };
200
+ </script>
201
+ <style>
202
+ .form-loader .flex-block {
203
+ overflow: unset !important;
204
+ }
205
+
206
+ .form-loader-verify {
207
+ position: absolute;
208
+ bottom: 100%;
209
+ left: 0;
210
+ background: #f95850;
211
+ color: #fff;
212
+ padding: 0.2em 0.5em;
213
+ font-size: 0.8em;
214
+ border-radius: 0.3em;
215
+ margin-bottom: 0.3em;
216
+ opacity: 0.9;
217
+ z-index: 1;
218
+ }
219
+ .form-loader-verify[data-verify-type~='co:warn'] {
220
+ background: #fb9a2a;
221
+ }
222
+ .form-loader-verify::before {
223
+ position: absolute;
224
+ content: '';
225
+ display: block;
226
+ width: 0;
227
+ height: 0;
228
+ border: 3px solid transparent;
229
+ border-top-color: #f95850;
230
+ bottom: -6px;
231
+ left: 0.7em;
232
+ }
233
+ .form-loader-verify[data-verify-type~='co:warn']::before {
234
+ border-top-color: #fb9a2a;
235
+ }
236
+
237
+ .form-loader .el-radio__label,
238
+ .form-loader .el-checkbox__label {
239
+ font-size: 12px;
240
+ padding-left: 4px;
241
+ }
242
+ .form-loader .el-textarea__inner {
243
+ height: auto;
244
+ }
245
+
246
+ .form-loader .el-select,
247
+ .form-loader .el-cascader {
248
+ display: block;
249
+ }
250
+ .form-loader .el-radio-group {
251
+ margin-top: 6px;
252
+ }
253
+ .form-loader .el-radio,
254
+ .form-loader .el-checkbox {
255
+ font-weight: normal;
256
+ color: #0e255a;
257
+ }
258
+ .form-loader .el-switch,
259
+ .form-loader .el-checkbox {
260
+ margin-top: 4px;
261
+ }
262
+ .form-loader .el-radio__label {
263
+ font-size: 12px;
264
+ padding-left: 4px;
265
+ }
266
+ .form-loader .el-checkbox__label {
267
+ font-size: 12px;
268
+ padding-left: 4px;
269
+ }
270
+
271
+ .form-loader .el-date-editor .el-range-separator {
272
+ line-height: 20px;
273
+ }
274
+ </style>
@@ -1,17 +1,54 @@
1
1
  <template>
2
- <!-- 桌面端 -->
3
- <table ui-hide="<pad" ui-table="@b sz:l" ref="tableRef">
4
- <thead class="table-head-fixed">
5
- <tr>
6
- <th v-if="showSelectAll" col-fixed="1" min-width>
7
- <label class="mb-ss" ui-form="@a type:checkbox"><input type="checkbox" :checked="state.isAllSelect" @change="fSelectAll" /><span></span></label>
8
- </th>
9
- <template v-for="(col, idx) in state.table" :key="idx">
10
- <th v-if="!col._close" class="fs-xs nowrap" :min-width="col.fixed" :col-fixed="col.fixed" :col-fixed-side="col.fixed || 'l'" :data-field="col.field">
11
- <div :ui-flex="`row ${!slots.operate && idx === state._last ? 'rm' : 'lm'}`">
12
- <span class="nl-xs" v-if="col.sort" :ui-sort="0" @click="emits('onsort', col)">{{ col.label }}</span>
13
- <span class="nl-xs" v-else>{{ col.label }}</span>
14
- <IFollowView v-if="!slots.operate && idx === state._last" tipBoxClass="n-no">
2
+ <div class="full" ui-scroll=":x :y">
3
+ <!-- 桌面端 -->
4
+ <table ui-hide="<pad" ui-table="@b sz:l" ref="tableRef">
5
+ <thead class="table-head-fixed">
6
+ <tr>
7
+ <th v-if="showSelectAll" col-fixed="1" min-width>
8
+ <label class="mb-ss" ui-form="@a type:checkbox"><input type="checkbox" :checked="state.isAllSelect" @change="fSelectAll" /><span></span></label>
9
+ </th>
10
+ <template v-for="(col, idx) in state.table" :key="idx">
11
+ <th v-if="!col._close" class="fs-xs nowrap" :min-width="col.fixed" :col-fixed="col.fixed" :col-fixed-side="col.fixed || 'l'" :data-field="col.field">
12
+ <div :ui-flex="`row ${!slots.operate && idx === state._last ? 'rm' : 'lm'}`">
13
+ <span class="nl-xs" v-if="col.sort" :ui-sort="0" @click="emits('onsort', col)">{{ col.label }}</span>
14
+ <span class="nl-xs" v-else>{{ col.label }}</span>
15
+ <IFollowView v-if="!slots.operate && idx === state._last" tipBoxClass="n-no">
16
+ <button :ui-btn="`@a none s :square`">
17
+ <Icon name="tableloader-setting" class="co-read"></Icon>
18
+ </button>
19
+ <template #tips>
20
+ <div class="w-mm h-ls n-sl" ui-scroll="x:hidden :y">
21
+ <draggable
22
+ v-model="state.table"
23
+ :force-fallback="false"
24
+ item-key="name"
25
+ chosen-class="chosen"
26
+ animation="200"
27
+ filter=".forbid"
28
+ :move="(e: any) => !e.relatedContext.element.fixed"
29
+ >
30
+ <template #item="{ element, index }">
31
+ <div :class="`item ux-hover nowrap r-ss ${element.fixed ? 'forbid' : 'element'}`" :key="index">
32
+ <label ui-form="@a type:checkbox" class="ny-xs nx-sl">
33
+ <input type="checkbox" :checked="!element._close" @change="element._close = element._close ? 0 : 1" />
34
+ <span>
35
+ {{ element.label }}
36
+ <i v-if="element.fixed" class="icon icon-fixed fs-xs"></i>
37
+ </span>
38
+ </label>
39
+ </div>
40
+ </template>
41
+ </draggable>
42
+ </div>
43
+ </template>
44
+ </IFollowView>
45
+ </div>
46
+ </th>
47
+ </template>
48
+ <th v-if="slots.operate" col-fixed="r" class="fs-xs nowrap ar">
49
+ <div ui-flex="row rm">
50
+ <span class="mr-sm">{{ words['operate'] || '操作' }}</span>
51
+ <IFollowView tipBoxClass="n-no">
15
52
  <button :ui-btn="`@a none s :square`">
16
53
  <Icon name="tableloader-setting" class="co-read"></Icon>
17
54
  </button>
@@ -43,120 +80,85 @@
43
80
  </IFollowView>
44
81
  </div>
45
82
  </th>
46
- </template>
47
- <th v-if="slots.operate" col-fixed="r" class="fs-xs nowrap ar">
48
- <div ui-flex="row rm">
49
- <span class="mr-sm">{{ words['operate'] || '操作' }}</span>
50
- <IFollowView tipBoxClass="n-no">
51
- <button :ui-btn="`@a none s :square`">
52
- <Icon name="tableloader-setting" class="co-read"></Icon>
53
- </button>
54
- <template #tips>
55
- <div class="w-mm h-ls n-sl" ui-scroll="x:hidden :y">
56
- <draggable
57
- v-model="state.table"
58
- :force-fallback="false"
59
- item-key="name"
60
- chosen-class="chosen"
61
- animation="200"
62
- filter=".forbid"
63
- :move="(e: any) => !e.relatedContext.element.fixed"
64
- >
65
- <template #item="{ element, index }">
66
- <div :class="`item ux-hover nowrap r-ss ${element.fixed ? 'forbid' : 'element'}`" :key="index">
67
- <label ui-form="@a type:checkbox" class="ny-xs nx-sl">
68
- <input type="checkbox" :checked="!element._close" @change="element._close = element._close ? 0 : 1" />
69
- <span>
70
- {{ element.label }}
71
- <i v-if="element.fixed" class="icon icon-fixed fs-xs"></i>
72
- </span>
73
- </label>
74
- </div>
75
- </template>
76
- </draggable>
77
- </div>
78
- </template>
79
- </IFollowView>
80
- </div>
81
- </th>
82
- </tr>
83
- </thead>
84
- <tbody :ui-tbody-load="state.load">
85
- <template v-if="lists.length">
86
- <tr v-for="(item, idx) in lists" :key="idx" v-bind="rows.attrs" v-on="event(rows.event, item, 'td')">
87
- <td v-if="showSelectAll" col-fixed="1" min-width>
88
- <label class="mb-ss" ui-form="@a type:checkbox"><input type="checkbox" v-model="item.__selected" /><span></span></label>
89
- </td>
90
- <template v-for="(col, idx) in state.table" :key="idx">
91
- <td
92
- v-if="!col._close"
93
- :class="`${!slots.operate && idx === state._last ? 'ar' : ''}`"
94
- :min-width="col.fixed"
95
- :col-fixed="col.fixed"
96
- :col-fixed-side="col.fixed || 'l'"
97
- :data-field="col.field"
98
- >
99
- <slot v-if="slots[col.field]" :name="col.field"></slot>
100
- <TableColView v-else :col="col" :data="item" />
101
- </td>
102
- </template>
103
- <td v-if="slots.operate" col-fixed="r" class="ar"><slot name="operate" :item="item" :idx="idx"></slot></td>
104
- </tr>
105
- </template>
106
- </tbody>
107
- </table>
108
- <!-- 移动端 -->
109
- <div ui-hide=">mob">
110
- <table class="n-sl" ui-table="@a">
111
- <thead class="table-head-fixed">
112
- <tr>
113
- <th class="fs-xs ar ps nr-no">
114
- <div ui-flex="row xm">
115
- <span class="fs-xs bold">信息</span>
116
- <IFollowView>
117
- <button :ui-btn="`@a none s :square`"><Icon name="tableloader-setting" class="co-read"></Icon></button>
118
- <template #tips>
119
- <draggable :list="state.table" :force-fallback="false" item-key="name" chosen-class="chosen" animation="200">
120
- <template #item="{ element, index }">
121
- <div class="item ux-hover nowrap r-ss" :key="index">
122
- <label ui-form="@a type:checkbox" class="ny-xs nx-sl">
123
- <input type="checkbox" :checked="!element._close" @change="element._close = element._close ? 0 : 1" />
124
- <span>{{ element.label }}</span>
125
- </label>
126
- </div>
127
- </template>
128
- </draggable>
129
- </template>
130
- </IFollowView>
131
- </div>
132
- </th>
133
83
  </tr>
134
84
  </thead>
135
85
  <tbody :ui-tbody-load="state.load">
136
86
  <template v-if="lists.length">
137
- <tr v-for="(item, idx) in lists" :key="idx" v-bind="rows.attrs" v-on="event(rows.event, item)">
138
- <td ui-card="@a bk:line" class="mb-sl">
139
- <div ui-card-body="" class="n-ss">
140
- <ul>
141
- <template v-for="(col, idx) in state.table" :key="idx">
142
- <li v-if="!col._close" :class="`${col.fixed ? 'ps z-sm' : ''}`" ui-flex="row lm">
143
- <div class="w-sl">{{ col.label }}:</div>
144
- <TableColView :col="col" :data="item" />
145
- </li>
146
- </template>
147
- <li v-if="slots.operate"><slot name="operate" :item="item" :idx="idx"></slot></li>
148
- </ul>
149
- </div>
87
+ <tr v-for="(item, idx) in lists" :key="idx" v-bind="rows.attrs" v-on="event(rows.event, item, 'td')">
88
+ <td v-if="showSelectAll" col-fixed="1" min-width>
89
+ <label class="mb-ss" ui-form="@a type:checkbox"><input type="checkbox" v-model="item.__selected" /><span></span></label>
150
90
  </td>
91
+ <template v-for="(col, idx) in state.table" :key="idx">
92
+ <td
93
+ v-if="!col._close"
94
+ :class="`${!slots.operate && idx === state._last ? 'ar' : ''}`"
95
+ :min-width="col.fixed"
96
+ :col-fixed="col.fixed"
97
+ :col-fixed-side="col.fixed || 'l'"
98
+ :data-field="col.field"
99
+ >
100
+ <slot v-if="slots[col.field]" :name="col.field"></slot>
101
+ <TableColView v-else :col="col" :data="item" />
102
+ </td>
103
+ </template>
104
+ <td v-if="slots.operate" col-fixed="r" class="ar"><slot name="operate" :item="item" :idx="idx"></slot></td>
151
105
  </tr>
152
106
  </template>
153
107
  </tbody>
154
108
  </table>
155
- </div>
156
- <div v-if="!lists.length" class="ny-ls o-mm" ui-flex="col cm">
157
- <div class="ac">
158
- <p><i class="icon icon-nodata fs-lm lh-ss"></i></p>
159
- <p>{{ words['common.nodata'] || '暂无记录' }}</p>
109
+ <!-- 移动端 -->
110
+ <div ui-hide=">mob">
111
+ <table class="n-sl" ui-table="@a">
112
+ <thead class="table-head-fixed">
113
+ <tr>
114
+ <th class="fs-xs ar ps nr-no">
115
+ <div ui-flex="row xm">
116
+ <span class="fs-xs bold">信息</span>
117
+ <IFollowView>
118
+ <button :ui-btn="`@a none s :square`"><Icon name="tableloader-setting" class="co-read"></Icon></button>
119
+ <template #tips>
120
+ <draggable :list="state.table" :force-fallback="false" item-key="name" chosen-class="chosen" animation="200">
121
+ <template #item="{ element, index }">
122
+ <div class="item ux-hover nowrap r-ss" :key="index">
123
+ <label ui-form="@a type:checkbox" class="ny-xs nx-sl">
124
+ <input type="checkbox" :checked="!element._close" @change="element._close = element._close ? 0 : 1" />
125
+ <span>{{ element.label }}</span>
126
+ </label>
127
+ </div>
128
+ </template>
129
+ </draggable>
130
+ </template>
131
+ </IFollowView>
132
+ </div>
133
+ </th>
134
+ </tr>
135
+ </thead>
136
+ <tbody :ui-tbody-load="state.load">
137
+ <template v-if="lists.length">
138
+ <tr v-for="(item, idx) in lists" :key="idx" v-bind="rows.attrs" v-on="event(rows.event, item)">
139
+ <td ui-card="@a bk:line" class="mb-sl">
140
+ <div ui-card-body="" class="n-ss">
141
+ <ul>
142
+ <template v-for="(col, idx) in state.table" :key="idx">
143
+ <li v-if="!col._close" :class="`${col.fixed ? 'ps z-sm' : ''}`" ui-flex="row lm">
144
+ <div class="w-sl">{{ col.label }}:</div>
145
+ <TableColView :col="col" :data="item" />
146
+ </li>
147
+ </template>
148
+ <li v-if="slots.operate"><slot name="operate" :item="item" :idx="idx"></slot></li>
149
+ </ul>
150
+ </div>
151
+ </td>
152
+ </tr>
153
+ </template>
154
+ </tbody>
155
+ </table>
156
+ </div>
157
+ <div v-if="!lists.length" class="ny-ls o-mm" ui-flex="col cm">
158
+ <div class="ac">
159
+ <p><i class="icon icon-nodata fs-lm lh-ss"></i></p>
160
+ <p>{{ words['common.nodata'] || '暂无记录' }}</p>
161
+ </div>
160
162
  </div>
161
163
  </div>
162
164
  </template>
@@ -16,7 +16,7 @@
16
16
  </p>
17
17
  <ul v-if="state.detail" class="mb-sl fs-ss" ui-scroll=":y" style="max-height: 20rem">
18
18
  <template v-for="(item, idx) in state.diffs" :key="idx">
19
- <li v-if="item.label" ui-flex="row lm" class="bb-xs b-line b-solid ny-ss">
19
+ <li v-if="item.label" ui-flex="row lm" class="bb-xs bk-line b-solid ny-ss">
20
20
  <span class="nx-ss r-sm mr-sm ux-hover nowrap" @click="fScrollToField(item.domId)">[{{ item.label }}]</span>
21
21
  <span v-if="item.lhsLabel" class="nx-ss r-sm ux-hover" ui-flex="row lm" @click="fDiscardDrafts(item)">
22
22
  <i class="icon icon-cloud co-well o-mm mr-xs"></i>
@@ -0,0 +1,5 @@
1
+ declare module '*.vue' {
2
+ import { DefineComponent } from 'vue';
3
+ const component: DefineComponent<{}, {}, any>;
4
+ export default component;
5
+ }
package/tsconfig.json CHANGED
@@ -19,6 +19,6 @@
19
19
  },
20
20
  "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
21
21
  },
22
- "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"],
22
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "src/shims-vue.d.ts"],
23
23
  "exclude": ["node_modules"]
24
24
  }