king-design-analyzer 1.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.
Files changed (92) hide show
  1. package/README.md +151 -0
  2. package/components/affix.json +178 -0
  3. package/components/az.json +86 -0
  4. package/components/badge.json +162 -0
  5. package/components/billtypes.json +90 -0
  6. package/components/breadcrumb.json +220 -0
  7. package/components/button.json +511 -0
  8. package/components/card.json +334 -0
  9. package/components/cardcontent.json +144 -0
  10. package/components/carousel.json +207 -0
  11. package/components/cascader.json +373 -0
  12. package/components/checkbox.json +298 -0
  13. package/components/code.json +318 -0
  14. package/components/collapse.json +358 -0
  15. package/components/copy.json +220 -0
  16. package/components/datepicker.json +529 -0
  17. package/components/descriptions.json +309 -0
  18. package/components/dialog.json +460 -0
  19. package/components/divider.json +287 -0
  20. package/components/drawer.json +563 -0
  21. package/components/dropdown.json +407 -0
  22. package/components/editable.json +331 -0
  23. package/components/ellipsis.json +218 -0
  24. package/components/form.json +638 -0
  25. package/components/grid.json +377 -0
  26. package/components/icon.json +442 -0
  27. package/components/input.json +821 -0
  28. package/components/layoutcontent.json +210 -0
  29. package/components/menu.json +482 -0
  30. package/components/message.json +345 -0
  31. package/components/pagination.json +444 -0
  32. package/components/paginationplus.json +74 -0
  33. package/components/popover.json +456 -0
  34. package/components/progress.json +354 -0
  35. package/components/protable.json +132 -0
  36. package/components/radio.json +246 -0
  37. package/components/region.json +115 -0
  38. package/components/select.json +676 -0
  39. package/components/slider.json +422 -0
  40. package/components/spin.json +232 -0
  41. package/components/spinner.json +441 -0
  42. package/components/status.json +75 -0
  43. package/components/steps.json +292 -0
  44. package/components/switch.json +357 -0
  45. package/components/table.json +1057 -0
  46. package/components/tablecolumnid.json +217 -0
  47. package/components/tabs.json +363 -0
  48. package/components/tag.json +504 -0
  49. package/components/timepicker.json +447 -0
  50. package/components/tip.json +322 -0
  51. package/components/tooltip.json +416 -0
  52. package/components/tour.json +395 -0
  53. package/components/transfer.json +414 -0
  54. package/components/tree.json +480 -0
  55. package/components/treeselect.json +478 -0
  56. package/components/upload.json +499 -0
  57. package/components/virtuallist.json +178 -0
  58. package/dist/ast/index.d.mts +71 -0
  59. package/dist/ast/index.d.ts +71 -0
  60. package/dist/ast/index.js +15 -0
  61. package/dist/ast/index.mjs +2 -0
  62. package/dist/chunk-4BUGNH4F.mjs +62 -0
  63. package/dist/chunk-5H7N2A5X.mjs +1 -0
  64. package/dist/chunk-5IF32MBB.js +603 -0
  65. package/dist/chunk-ARWRNWDW.js +219 -0
  66. package/dist/chunk-C3L4IXJC.mjs +577 -0
  67. package/dist/chunk-GNVCC37B.js +102 -0
  68. package/dist/chunk-N4UIA6DN.js +68 -0
  69. package/dist/chunk-RAMIBZAU.mjs +216 -0
  70. package/dist/chunk-RNQHI7YG.js +64 -0
  71. package/dist/chunk-TB6BF5TJ.mjs +99 -0
  72. package/dist/chunk-UX7KGX45.mjs +66 -0
  73. package/dist/chunk-YTEYDSDW.js +2 -0
  74. package/dist/full/index.d.mts +29 -0
  75. package/dist/full/index.d.ts +29 -0
  76. package/dist/full/index.js +16 -0
  77. package/dist/full/index.mjs +3 -0
  78. package/dist/index.d.mts +5 -0
  79. package/dist/index.d.ts +5 -0
  80. package/dist/index.js +43 -0
  81. package/dist/index.mjs +6 -0
  82. package/dist/runtime/index.d.mts +14 -0
  83. package/dist/runtime/index.d.ts +14 -0
  84. package/dist/runtime/index.js +15 -0
  85. package/dist/runtime/index.mjs +2 -0
  86. package/dist/sfcCompiler-m51JOfWs.d.mts +22 -0
  87. package/dist/sfcCompiler-m51JOfWs.d.ts +22 -0
  88. package/dist/static/index.d.mts +14 -0
  89. package/dist/static/index.d.ts +14 -0
  90. package/dist/static/index.js +19 -0
  91. package/dist/static/index.mjs +2 -0
  92. package/package.json +88 -0
@@ -0,0 +1,422 @@
1
+ {
2
+ "id": "slider",
3
+ "name": "Slider",
4
+ "displayName": "滑块",
5
+ "category": "form",
6
+ "description": "滑块组件,用于在一个范围内选择数值。支持单值选择和范围选择、自定义步长、刻度标注、提示气泡等功能。",
7
+ "importStatement": "import { Slider } from '@king-design/vue';",
8
+ "props": [
9
+ {
10
+ "name": "value",
11
+ "description": "当前值,可用 v-model 双向绑定。范围选择时为 [number, number] 数组",
12
+ "type": {
13
+ "raw": "number | [number, number]",
14
+ "kind": "union"
15
+ },
16
+ "required": false,
17
+ "default": "0",
18
+ "usageExample": "<Slider v-model=\"value\" />"
19
+ },
20
+ {
21
+ "name": "min",
22
+ "description": "最小值",
23
+ "type": {
24
+ "raw": "number",
25
+ "kind": "number"
26
+ },
27
+ "required": false,
28
+ "default": "0",
29
+ "usageExample": "<Slider :min=\"0\" />"
30
+ },
31
+ {
32
+ "name": "max",
33
+ "description": "最大值",
34
+ "type": {
35
+ "raw": "number",
36
+ "kind": "number"
37
+ },
38
+ "required": false,
39
+ "default": "100",
40
+ "usageExample": "<Slider :max=\"200\" />"
41
+ },
42
+ {
43
+ "name": "range",
44
+ "description": "是否是范围选择(双滑块)",
45
+ "type": {
46
+ "raw": "boolean",
47
+ "kind": "boolean"
48
+ },
49
+ "required": false,
50
+ "default": "false",
51
+ "usageExample": "<Slider v-model=\"rangeValue\" range />"
52
+ },
53
+ {
54
+ "name": "step",
55
+ "description": "步长,支持数字、对象配置或函数",
56
+ "type": {
57
+ "raw": "number | StepObject | StepFunction",
58
+ "kind": "union"
59
+ },
60
+ "required": false,
61
+ "default": "1",
62
+ "usageExample": "<Slider :step=\"10\" />"
63
+ },
64
+ {
65
+ "name": "disabled",
66
+ "description": "是否禁用",
67
+ "type": {
68
+ "raw": "boolean",
69
+ "kind": "boolean"
70
+ },
71
+ "required": false,
72
+ "default": "false",
73
+ "usageExample": "<Slider disabled />"
74
+ },
75
+ {
76
+ "name": "unit",
77
+ "description": "单位,用于刻度展示",
78
+ "type": {
79
+ "raw": "string",
80
+ "kind": "string"
81
+ },
82
+ "required": false,
83
+ "default": "\"\"",
84
+ "usageExample": "<Slider unit=\"%\" />"
85
+ },
86
+ {
87
+ "name": "showEnd",
88
+ "description": "是否展示最小值和最大值刻度",
89
+ "type": {
90
+ "raw": "boolean",
91
+ "kind": "boolean"
92
+ },
93
+ "required": false,
94
+ "default": "true",
95
+ "usageExample": "<Slider :showEnd=\"false\" />"
96
+ },
97
+ {
98
+ "name": "showInput",
99
+ "description": "是否展示输入框",
100
+ "type": {
101
+ "raw": "boolean",
102
+ "kind": "boolean"
103
+ },
104
+ "required": false,
105
+ "default": "true",
106
+ "usageExample": "<Slider :showInput=\"false\" />"
107
+ },
108
+ {
109
+ "name": "showTooltip",
110
+ "description": "是否展示提示气泡",
111
+ "type": {
112
+ "raw": "boolean",
113
+ "kind": "boolean"
114
+ },
115
+ "required": false,
116
+ "default": "false",
117
+ "usageExample": "<Slider showTooltip />"
118
+ },
119
+ {
120
+ "name": "always",
121
+ "description": "当展示气泡时,是否一直展示",
122
+ "type": {
123
+ "raw": "boolean",
124
+ "kind": "boolean"
125
+ },
126
+ "required": false,
127
+ "default": "false",
128
+ "usageExample": "<Slider showTooltip always />"
129
+ },
130
+ {
131
+ "name": "points",
132
+ "description": "是否展示间隔点,或指定哪些值展示间隔点",
133
+ "type": {
134
+ "raw": "boolean | number[]",
135
+ "kind": "union"
136
+ },
137
+ "required": false,
138
+ "default": "false",
139
+ "usageExample": "<Slider :points=\"[25, 50, 75]\" />"
140
+ },
141
+ {
142
+ "name": "marks",
143
+ "description": "标注刻度,对象形式指定位置和标签",
144
+ "type": {
145
+ "raw": "Marks",
146
+ "kind": "object"
147
+ },
148
+ "required": false,
149
+ "default": "undefined",
150
+ "usageExample": "<Slider :marks=\"{0: '低', 50: '中', 100: '高'}\" />"
151
+ },
152
+ {
153
+ "name": "animate",
154
+ "description": "滑块移动是否使用缓动动画",
155
+ "type": {
156
+ "raw": "boolean",
157
+ "kind": "boolean"
158
+ },
159
+ "required": false,
160
+ "default": "true",
161
+ "usageExample": "<Slider :animate=\"false\" />"
162
+ },
163
+ {
164
+ "name": "forceStep",
165
+ "description": "是否限制 value(除边界外)满足 min + step * n",
166
+ "type": {
167
+ "raw": "boolean",
168
+ "kind": "boolean"
169
+ },
170
+ "required": false,
171
+ "default": "true",
172
+ "usageExample": "<Slider :forceStep=\"false\" />"
173
+ },
174
+ {
175
+ "name": "tooltipProps",
176
+ "description": "设置内置 Tooltip 的所有属性",
177
+ "type": {
178
+ "raw": "TooltipProps",
179
+ "kind": "object"
180
+ },
181
+ "required": false,
182
+ "default": "undefined",
183
+ "usageExample": "<Slider showTooltip :tooltipProps=\"{position: 'bottom'}\" />"
184
+ },
185
+ {
186
+ "name": "spinnerProps",
187
+ "description": "设置内置 Spinner 输入框的所有属性",
188
+ "type": {
189
+ "raw": "SpinnerProps",
190
+ "kind": "object"
191
+ },
192
+ "required": false,
193
+ "default": "undefined",
194
+ "usageExample": "<Slider :spinnerProps=\"{precision: 2}\" />"
195
+ }
196
+ ],
197
+ "events": [
198
+ {
199
+ "name": "change",
200
+ "vueEventName": "@change",
201
+ "description": "当值变化时触发,拖动过程中不会触发,拖动结束时触发",
202
+ "payload": [
203
+ {
204
+ "name": "newValue",
205
+ "type": "number | [number, number]",
206
+ "description": "新的值"
207
+ },
208
+ {
209
+ "name": "oldValue",
210
+ "type": "number | [number, number]",
211
+ "description": "旧的值"
212
+ }
213
+ ],
214
+ "usageExample": "<Slider @change=\"handleChange\" />",
215
+ "handlerExample": "const handleChange = (newVal: number, oldVal: number) => {\n console.log(`值从 ${oldVal} 变为 ${newVal}`);\n};"
216
+ }
217
+ ],
218
+ "slots": [
219
+ {
220
+ "name": "tooltip",
221
+ "description": "当展示提示气泡,定义气泡的内容,和Tooltip组件行为一样,如果你传入空的内容,则不会展示气泡"
222
+ }
223
+ ],
224
+ "methods": [],
225
+ "typeDefinitions": [
226
+ {
227
+ "name": "StepObject",
228
+ "definition": "type StepObject = {\n [key in number]: number\n} & {\n $?: number\n}",
229
+ "description": "动态步长对象,key 为阈值,value 为该阈值后的步长"
230
+ },
231
+ {
232
+ "name": "StepFunction",
233
+ "definition": "type StepFunction = (value: number) => number",
234
+ "description": "动态步长函数"
235
+ },
236
+ {
237
+ "name": "Marks",
238
+ "definition": "type MarkKey = string | number\ntype MarkValue = MarkKey | [MarkKey] | [MarkKey, MarkKey]\ntype Marks = Record<MarkKey, MarkValue>",
239
+ "description": "刻度标注配置"
240
+ }
241
+ ],
242
+ "examples": [
243
+ {
244
+ "id": "slider_basic",
245
+ "title": "基础用法",
246
+ "description": "基本的滑块",
247
+ "difficulty": "easy",
248
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Slider } from '@king-design/vue';\n\nconst value = ref(30);\n</script>\n<template>\n <Slider v-model=\"value\" />\n</template>",
249
+ "tags": [
250
+ "basic"
251
+ ],
252
+ "usedProps": [
253
+ "value"
254
+ ],
255
+ "usedEvents": [],
256
+ "usedMethods": [],
257
+ "scenario": "创建一个基本的滑块"
258
+ },
259
+ {
260
+ "id": "slider_range",
261
+ "title": "范围选择",
262
+ "description": "双滑块范围选择",
263
+ "difficulty": "easy",
264
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Slider } from '@king-design/vue';\n\nconst value = ref<[number, number]>([20, 80]);\n</script>\n<template>\n <Slider v-model=\"value\" range />\n</template>",
265
+ "tags": [
266
+ "range",
267
+ "dual"
268
+ ],
269
+ "usedProps": [
270
+ "value",
271
+ "range"
272
+ ],
273
+ "usedEvents": [],
274
+ "usedMethods": [],
275
+ "scenario": "创建范围选择的双滑块"
276
+ },
277
+ {
278
+ "id": "slider_min_max_step",
279
+ "title": "范围和步长",
280
+ "description": "设置最小值、最大值和步长",
281
+ "difficulty": "easy",
282
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Slider } from '@king-design/vue';\n\nconst value = ref(50);\n</script>\n<template>\n <Slider v-model=\"value\" :min=\"0\" :max=\"200\" :step=\"10\" />\n</template>",
283
+ "tags": [
284
+ "min",
285
+ "max",
286
+ "step"
287
+ ],
288
+ "usedProps": [
289
+ "value",
290
+ "min",
291
+ "max",
292
+ "step"
293
+ ],
294
+ "usedEvents": [],
295
+ "usedMethods": [],
296
+ "scenario": "设置滑块的范围和步长"
297
+ },
298
+ {
299
+ "id": "slider_marks",
300
+ "title": "刻度标注",
301
+ "description": "添加刻度标注",
302
+ "difficulty": "medium",
303
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Slider } from '@king-design/vue';\n\nconst value = ref(30);\nconst marks = {\n 0: '0°C',\n 25: '25°C',\n 50: '50°C',\n 100: '100°C'\n};\n</script>\n<template>\n <Slider v-model=\"value\" :marks=\"marks\" />\n</template>",
304
+ "tags": [
305
+ "marks",
306
+ "label"
307
+ ],
308
+ "usedProps": [
309
+ "value",
310
+ "marks"
311
+ ],
312
+ "usedEvents": [],
313
+ "usedMethods": [],
314
+ "scenario": "添加刻度标注显示"
315
+ },
316
+ {
317
+ "id": "slider_tooltip",
318
+ "title": "显示气泡",
319
+ "description": "拖动时显示提示气泡",
320
+ "difficulty": "easy",
321
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Slider } from '@king-design/vue';\n\nconst value = ref(50);\n</script>\n<template>\n <Slider v-model=\"value\" showTooltip />\n</template>",
322
+ "tags": [
323
+ "tooltip",
324
+ "tip"
325
+ ],
326
+ "usedProps": [
327
+ "value",
328
+ "showTooltip"
329
+ ],
330
+ "usedEvents": [],
331
+ "usedMethods": [],
332
+ "scenario": "拖动时显示当前值气泡"
333
+ },
334
+ {
335
+ "id": "slider_disabled",
336
+ "title": "禁用状态",
337
+ "description": "禁用滑块",
338
+ "difficulty": "easy",
339
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Slider } from '@king-design/vue';\n\nconst value = ref(30);\n</script>\n<template>\n <Slider v-model=\"value\" disabled />\n</template>",
340
+ "tags": [
341
+ "disabled"
342
+ ],
343
+ "usedProps": [
344
+ "value",
345
+ "disabled"
346
+ ],
347
+ "usedEvents": [],
348
+ "usedMethods": [],
349
+ "scenario": "禁用滑块"
350
+ },
351
+ {
352
+ "id": "slider_no_input",
353
+ "title": "隐藏输入框",
354
+ "description": "不显示输入框",
355
+ "difficulty": "easy",
356
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Slider } from '@king-design/vue';\n\nconst value = ref(50);\n</script>\n<template>\n <Slider v-model=\"value\" :showInput=\"false\" showTooltip />\n</template>",
357
+ "tags": [
358
+ "noInput",
359
+ "simple"
360
+ ],
361
+ "usedProps": [
362
+ "value",
363
+ "showInput",
364
+ "showTooltip"
365
+ ],
366
+ "usedEvents": [],
367
+ "usedMethods": [],
368
+ "scenario": "只显示滑块不显示输入框"
369
+ }
370
+ ],
371
+ "commonMistakes": [
372
+ {
373
+ "id": "slider_range_value_type",
374
+ "description": "范围选择时 value 类型错误",
375
+ "wrongCode": "const value = ref(50);\n<Slider v-model=\"value\" range />",
376
+ "correctCode": "const value = ref<[number, number]>([20, 80]);\n<Slider v-model=\"value\" range />",
377
+ "explanation": "当 range 为 true 时,value 必须是 [number, number] 数组",
378
+ "relatedProps": [
379
+ "value",
380
+ "range"
381
+ ]
382
+ },
383
+ {
384
+ "id": "slider_step_type",
385
+ "description": "step 使用字符串而非数字",
386
+ "wrongCode": "<Slider step=\"10\" />",
387
+ "correctCode": "<Slider :step=\"10\" />",
388
+ "explanation": "step 是数字类型,需要使用 v-bind 语法",
389
+ "relatedProps": [
390
+ "step"
391
+ ]
392
+ },
393
+ {
394
+ "id": "slider_marks_format",
395
+ "description": "marks 格式错误",
396
+ "wrongCode": "const marks = ['低', '中', '高'];",
397
+ "correctCode": "const marks = {\n 0: '低',\n 50: '中',\n 100: '高'\n};",
398
+ "explanation": "marks 必须是对象格式,key 为位置值,value 为显示文本",
399
+ "relatedProps": [
400
+ "marks"
401
+ ]
402
+ }
403
+ ],
404
+ "searchKeywords": [
405
+ "滑块",
406
+ "slider",
407
+ "范围选择",
408
+ "数值选择",
409
+ "拖动",
410
+ "刻度"
411
+ ],
412
+ "useCases": [
413
+ "音量调节",
414
+ "价格范围筛选",
415
+ "亮度调节",
416
+ "进度控制",
417
+ "数值范围选择"
418
+ ],
419
+ "relatedComponents": [
420
+ "Spinner"
421
+ ]
422
+ }
@@ -0,0 +1,232 @@
1
+ {
2
+ "id": "spin",
3
+ "name": "Spin",
4
+ "displayName": "加载中",
5
+ "category": "feedback",
6
+ "description": "加载中组件,用于展示加载状态的旋转动画。支持多种尺寸、居中显示、带遮罩层覆盖内容等功能。常用于数据加载、页面切换等场景。",
7
+ "importStatement": "import { Spin } from '@king-design/vue';",
8
+ "props": [
9
+ {
10
+ "name": "size",
11
+ "description": "组件尺寸",
12
+ "type": {
13
+ "raw": "\"large\" | \"default\" | \"small\" | \"mini\"",
14
+ "kind": "union",
15
+ "unionTypes": [
16
+ "large",
17
+ "default",
18
+ "small",
19
+ "mini"
20
+ ]
21
+ },
22
+ "required": false,
23
+ "default": "\"default\"",
24
+ "allowedValues": [
25
+ {
26
+ "value": "large",
27
+ "label": "大尺寸"
28
+ },
29
+ {
30
+ "value": "default",
31
+ "label": "默认尺寸",
32
+ "isDefault": true
33
+ },
34
+ {
35
+ "value": "small",
36
+ "label": "小尺寸"
37
+ },
38
+ {
39
+ "value": "mini",
40
+ "label": "迷你尺寸"
41
+ }
42
+ ],
43
+ "usageExample": "<Spin size=\"small\" />"
44
+ },
45
+ {
46
+ "name": "center",
47
+ "description": "是否居中展示,需要父元素为定位元素(position: relative/absolute)",
48
+ "type": {
49
+ "raw": "boolean",
50
+ "kind": "boolean"
51
+ },
52
+ "required": false,
53
+ "default": "false",
54
+ "usageExample": "<Spin center />"
55
+ },
56
+ {
57
+ "name": "overlay",
58
+ "description": "是否展示带遮罩层的加载动画,需要父元素为定位元素",
59
+ "type": {
60
+ "raw": "boolean",
61
+ "kind": "boolean"
62
+ },
63
+ "required": false,
64
+ "default": "false",
65
+ "usageExample": "<Spin overlay center />"
66
+ }
67
+ ],
68
+ "events": [],
69
+ "slots": [
70
+ {
71
+ "name": "canvas",
72
+ "description": "自定义旋转的元素内容"
73
+ }
74
+ ],
75
+ "methods": [],
76
+ "examples": [
77
+ {
78
+ "id": "spin_basic",
79
+ "title": "基础用法",
80
+ "description": "基本的加载动画",
81
+ "difficulty": "easy",
82
+ "code": "<script setup lang=\"ts\">\nimport { Spin } from '@king-design/vue';\n</script>\n<template>\n <Spin />\n</template>",
83
+ "tags": [
84
+ "basic"
85
+ ],
86
+ "usedProps": [],
87
+ "usedEvents": [],
88
+ "usedMethods": [],
89
+ "scenario": "展示基本的加载动画"
90
+ },
91
+ {
92
+ "id": "spin_sizes",
93
+ "title": "不同尺寸",
94
+ "description": "四种尺寸的加载动画",
95
+ "difficulty": "easy",
96
+ "code": "<script setup lang=\"ts\">\nimport { Spin } from '@king-design/vue';\n</script>\n<template>\n <Spin size=\"mini\" />\n <Spin size=\"small\" />\n <Spin size=\"default\" />\n <Spin size=\"large\" />\n</template>",
97
+ "tags": [
98
+ "size",
99
+ "mini",
100
+ "small",
101
+ "large"
102
+ ],
103
+ "usedProps": [
104
+ "size"
105
+ ],
106
+ "usedEvents": [],
107
+ "usedMethods": [],
108
+ "scenario": "展示不同尺寸的加载动画"
109
+ },
110
+ {
111
+ "id": "spin_center",
112
+ "title": "居中展示",
113
+ "description": "在容器中居中显示",
114
+ "difficulty": "easy",
115
+ "code": "<script setup lang=\"ts\">\nimport { Spin } from '@king-design/vue';\n</script>\n<template>\n <div style=\"position: relative; height: 100px; border: 1px solid #eee;\">\n <Spin center />\n </div>\n</template>",
116
+ "tags": [
117
+ "center"
118
+ ],
119
+ "usedProps": [
120
+ "center"
121
+ ],
122
+ "usedEvents": [],
123
+ "usedMethods": [],
124
+ "scenario": "在容器中居中显示加载动画"
125
+ },
126
+ {
127
+ "id": "spin_overlay",
128
+ "title": "带遮罩层",
129
+ "description": "带遮罩层覆盖内容的加载状态",
130
+ "difficulty": "medium",
131
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Spin, Button } from '@king-design/vue';\n\nconst loading = ref(true);\n</script>\n<template>\n <div style=\"position: relative; height: 200px;\">\n <Spin v-if=\"loading\" overlay center />\n <div>\n <p>内容区域</p>\n <p>加载时会被遮罩覆盖</p>\n </div>\n </div>\n <Button @click=\"loading = !loading\">切换加载状态</Button>\n</template>",
132
+ "tags": [
133
+ "overlay",
134
+ "mask"
135
+ ],
136
+ "usedProps": [
137
+ "overlay",
138
+ "center"
139
+ ],
140
+ "usedEvents": [],
141
+ "usedMethods": [],
142
+ "scenario": "带遮罩层的加载状态"
143
+ },
144
+ {
145
+ "id": "spin_card",
146
+ "title": "卡片加载",
147
+ "description": "卡片内容加载状态",
148
+ "difficulty": "medium",
149
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Spin, Card } from '@king-design/vue';\n\nconst loading = ref(true);\n</script>\n<template>\n <Card title=\"数据列表\" style=\"position: relative;\">\n <Spin v-if=\"loading\" overlay center />\n <p>这是卡片内容</p>\n <p>加载时会显示遮罩层</p>\n </Card>\n</template>",
150
+ "tags": [
151
+ "card",
152
+ "content"
153
+ ],
154
+ "usedProps": [
155
+ "overlay",
156
+ "center"
157
+ ],
158
+ "usedEvents": [],
159
+ "usedMethods": [],
160
+ "scenario": "卡片内容的加载状态展示"
161
+ },
162
+ {
163
+ "id": "spin_button",
164
+ "title": "按钮加载",
165
+ "description": "配合按钮使用的加载状态",
166
+ "difficulty": "easy",
167
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Spin, Button } from '@king-design/vue';\n\nconst loading = ref(false);\n\nconst handleClick = async () => {\n loading.value = true;\n await new Promise(r => setTimeout(r, 2000));\n loading.value = false;\n};\n</script>\n<template>\n <Button @click=\"handleClick\" :disabled=\"loading\">\n <Spin v-if=\"loading\" size=\"mini\" /> 提交\n </Button>\n</template>",
168
+ "tags": [
169
+ "button",
170
+ "inline"
171
+ ],
172
+ "usedProps": [
173
+ "size"
174
+ ],
175
+ "usedEvents": [],
176
+ "usedMethods": [],
177
+ "scenario": "按钮内嵌加载动画"
178
+ }
179
+ ],
180
+ "commonMistakes": [
181
+ {
182
+ "id": "spin_center_no_position",
183
+ "description": "使用 center 但父元素无定位",
184
+ "wrongCode": "<div>\n <Spin center />\n</div>",
185
+ "correctCode": "<div style=\"position: relative; height: 100px;\">\n <Spin center />\n</div>",
186
+ "explanation": "使用 center 属性时,父元素必须设置 position: relative 或 absolute",
187
+ "relatedProps": [
188
+ "center"
189
+ ]
190
+ },
191
+ {
192
+ "id": "spin_overlay_no_position",
193
+ "description": "使用 overlay 但父元素无定位",
194
+ "wrongCode": "<div>\n <Spin overlay />\n <p>内容</p>\n</div>",
195
+ "correctCode": "<div style=\"position: relative;\">\n <Spin overlay center />\n <p>内容</p>\n</div>",
196
+ "explanation": "使用 overlay 时,父元素必须设置定位,且通常配合 center 使用",
197
+ "relatedProps": [
198
+ "overlay",
199
+ "center"
200
+ ]
201
+ },
202
+ {
203
+ "id": "spin_size_typo",
204
+ "description": "size 值拼写错误",
205
+ "wrongCode": "<Spin size=\"xs\" />",
206
+ "correctCode": "<Spin size=\"mini\" />",
207
+ "explanation": "size 只支持 large, default, small, mini,不存在 xs 值",
208
+ "relatedProps": [
209
+ "size"
210
+ ]
211
+ }
212
+ ],
213
+ "searchKeywords": [
214
+ "加载",
215
+ "spin",
216
+ "loading",
217
+ "旋转",
218
+ "等待",
219
+ "遮罩"
220
+ ],
221
+ "useCases": [
222
+ "数据加载中",
223
+ "页面加载状态",
224
+ "表格数据刷新",
225
+ "表单提交等待",
226
+ "卡片内容加载"
227
+ ],
228
+ "relatedComponents": [
229
+ "Skeleton",
230
+ "Progress"
231
+ ]
232
+ }