king-design-analyzer 2.2.0 → 2.2.1

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 (149) hide show
  1. package/components/actions.json +8 -0
  2. package/components/advancedset.json +1 -0
  3. package/components/affix.json +1 -0
  4. package/components/anchor.json +220 -0
  5. package/components/anchorlink.json +111 -0
  6. package/components/badge.json +1 -0
  7. package/components/breadcrumb.json +2 -1
  8. package/components/button.json +1 -0
  9. package/components/buttonlink.json +1 -0
  10. package/components/card.json +6 -3
  11. package/components/cardcontent.json +5 -0
  12. package/components/cascader.json +56 -0
  13. package/components/collapse.json +335 -348
  14. package/components/configprovider.json +96 -0
  15. package/components/copyrow.json +1 -0
  16. package/components/descriptions.json +10 -3
  17. package/components/diagram.json +295 -0
  18. package/components/dialog.json +4 -0
  19. package/components/divider.json +1 -0
  20. package/components/drawer.json +32 -0
  21. package/components/dropdown.json +4 -4
  22. package/components/flex.json +1 -0
  23. package/components/form.json +12 -3
  24. package/components/header.json +4 -0
  25. package/components/input.json +8 -4
  26. package/components/layoutcontent.json +9 -0
  27. package/components/layoutlistcontent.json +9 -0
  28. package/components/layoutpermissioncontent.json +1 -0
  29. package/components/layoutstandardlist.json +1 -0
  30. package/components/lazymount.json +1 -0
  31. package/components/lazyteleport.json +1 -0
  32. package/components/menu.json +4 -3
  33. package/components/notification.json +351 -0
  34. package/components/protable.json +2 -0
  35. package/components/rate.json +1 -0
  36. package/components/scrollselect.json +140 -0
  37. package/components/select.json +63 -0
  38. package/components/skeleton.json +1 -0
  39. package/components/slider.json +12 -2
  40. package/components/spin.json +2 -1
  41. package/components/spinner.json +419 -429
  42. package/components/split.json +3 -0
  43. package/components/switch.json +4 -2
  44. package/components/table.json +6 -1
  45. package/components/tabs.json +2 -2
  46. package/components/tag.json +8 -5
  47. package/components/timeline.json +3 -1
  48. package/components/tip.json +20 -0
  49. package/components/tooltip.json +8 -0
  50. package/components/transfer.json +52 -5
  51. package/components/tree.json +22 -1
  52. package/components/treeselect.json +56 -0
  53. package/components/vdialog.json +1 -0
  54. package/components/vdrawer.json +4 -0
  55. package/dist/ast/index.d.mts +30 -1
  56. package/dist/ast/index.d.ts +30 -1
  57. package/dist/ast/index.js +3 -3
  58. package/dist/ast/index.mjs +1 -1
  59. package/dist/{chunk-BI5TIQID.mjs → chunk-4OTQAQ6J.mjs} +13 -2
  60. package/dist/{chunk-CJGGFVQJ.js → chunk-4WXOYU2N.js} +31 -8
  61. package/dist/chunk-6HOIRUQB.mjs +409 -0
  62. package/dist/{chunk-CR3GC4H3.js → chunk-DHLWNT53.js} +13 -2
  63. package/dist/{chunk-KMIDURUR.mjs → chunk-IPJJMPOO.mjs} +113 -19
  64. package/dist/{chunk-TA3SV4SP.js → chunk-JJ6AB4ZH.js} +2 -2
  65. package/dist/{chunk-SZYVGYKK.js → chunk-JNRGUR3O.js} +113 -19
  66. package/dist/{chunk-XGPHQHLR.mjs → chunk-LRTDTFFQ.mjs} +27 -4
  67. package/dist/{chunk-3LYQ5XFM.mjs → chunk-NZL6T22V.mjs} +1 -1
  68. package/dist/chunk-V5N65MRP.js +411 -0
  69. package/dist/full/index.d.mts +2 -0
  70. package/dist/full/index.d.ts +2 -0
  71. package/dist/full/index.js +6 -6
  72. package/dist/full/index.mjs +4 -4
  73. package/dist/index.js +13 -13
  74. package/dist/index.mjs +5 -5
  75. package/dist/metadata/index.d.mts +17 -2
  76. package/dist/metadata/index.d.ts +17 -2
  77. package/dist/runtime/index.d.mts +2 -0
  78. package/dist/runtime/index.d.ts +2 -0
  79. package/dist/runtime/index.js +4 -4
  80. package/dist/runtime/index.mjs +2 -2
  81. package/dist/static/index.js +5 -5
  82. package/dist/static/index.mjs +2 -2
  83. package/docs_for_llm/actions.doc.md +11 -1
  84. package/docs_for_llm/advancedset.doc.md +10 -1
  85. package/docs_for_llm/affix.doc.md +5 -0
  86. package/docs_for_llm/anchor.doc.md +155 -0
  87. package/docs_for_llm/anchorlink.doc.md +75 -0
  88. package/docs_for_llm/badge.doc.md +5 -0
  89. package/docs_for_llm/breadcrumb.doc.md +74 -1
  90. package/docs_for_llm/button.doc.md +57 -0
  91. package/docs_for_llm/buttonlink.doc.md +10 -1
  92. package/docs_for_llm/card.doc.md +50 -3
  93. package/docs_for_llm/cardcontent.doc.md +21 -0
  94. package/docs_for_llm/carousel.doc.md +71 -0
  95. package/docs_for_llm/cascader.doc.md +62 -0
  96. package/docs_for_llm/collapse.doc.md +138 -8
  97. package/docs_for_llm/configprovider.doc.md +77 -0
  98. package/docs_for_llm/copyrow.doc.md +10 -1
  99. package/docs_for_llm/datepicker.doc.md +19 -0
  100. package/docs_for_llm/descriptions.doc.md +113 -4
  101. package/docs_for_llm/diagram.doc.md +343 -0
  102. package/docs_for_llm/dialog.doc.md +49 -0
  103. package/docs_for_llm/divider.doc.md +5 -0
  104. package/docs_for_llm/drawer.doc.md +86 -0
  105. package/docs_for_llm/dropdown.doc.md +240 -3
  106. package/docs_for_llm/flex.doc.md +10 -1
  107. package/docs_for_llm/form.doc.md +163 -4
  108. package/docs_for_llm/formitemspinner.doc.md +1 -1
  109. package/docs_for_llm/grid.doc.md +71 -0
  110. package/docs_for_llm/header.doc.md +33 -4
  111. package/docs_for_llm/input.doc.md +109 -2
  112. package/docs_for_llm/layoutcontent.doc.md +37 -0
  113. package/docs_for_llm/layoutlistcontent.doc.md +82 -9
  114. package/docs_for_llm/layoutpermissioncontent.doc.md +10 -1
  115. package/docs_for_llm/layoutstandardlist.doc.md +10 -1
  116. package/docs_for_llm/lazymount.doc.md +10 -1
  117. package/docs_for_llm/lazyteleport.doc.md +10 -1
  118. package/docs_for_llm/menu.doc.md +125 -3
  119. package/docs_for_llm/message.doc.md +45 -0
  120. package/docs_for_llm/notification.doc.md +214 -0
  121. package/docs_for_llm/protable.doc.md +9 -0
  122. package/docs_for_llm/rate.doc.md +5 -0
  123. package/docs_for_llm/scrollselect.doc.md +90 -0
  124. package/docs_for_llm/select.doc.md +174 -0
  125. package/docs_for_llm/skeleton.doc.md +35 -0
  126. package/docs_for_llm/slider.doc.md +11 -1
  127. package/docs_for_llm/spin.doc.md +10 -1
  128. package/docs_for_llm/spinner.doc.md +1 -1
  129. package/docs_for_llm/split.doc.md +13 -0
  130. package/docs_for_llm/steps.doc.md +71 -0
  131. package/docs_for_llm/switch.doc.md +15 -2
  132. package/docs_for_llm/table.doc.md +199 -4
  133. package/docs_for_llm/tabs.doc.md +98 -2
  134. package/docs_for_llm/tag.doc.md +148 -5
  135. package/docs_for_llm/timeline.doc.md +80 -2
  136. package/docs_for_llm/timepicker.doc.md +19 -0
  137. package/docs_for_llm/tip.doc.md +30 -0
  138. package/docs_for_llm/tooltip.doc.md +46 -0
  139. package/docs_for_llm/tour.doc.md +78 -0
  140. package/docs_for_llm/transfer.doc.md +59 -4
  141. package/docs_for_llm/tree.doc.md +64 -1
  142. package/docs_for_llm/treeselect.doc.md +68 -0
  143. package/docs_for_llm/upload.doc.md +7 -0
  144. package/docs_for_llm/vdialog.doc.md +26 -1
  145. package/docs_for_llm/vdrawer.doc.md +33 -4
  146. package/docs_for_llm/virtuallist.doc.md +151 -0
  147. package/package.json +3 -3
  148. package/dist/chunk-D2SXGGTX.mjs +0 -162
  149. package/dist/chunk-EYKZY2F3.js +0 -164
@@ -125,18 +125,21 @@
125
125
  {
126
126
  "name": "first",
127
127
  "description": "第一个面板内容。",
128
+ "bindingType": "none",
128
129
  "vueTemplate": "<template #first>...</template>",
129
130
  "usageExample": "<Split><template #first>左侧内容</template><template #last>右侧内容</template></Split>"
130
131
  },
131
132
  {
132
133
  "name": "last",
133
134
  "description": "第二个面板内容。",
135
+ "bindingType": "none",
134
136
  "vueTemplate": "<template #last>...</template>",
135
137
  "usageExample": "<Split><template #first>左侧内容</template><template #last>右侧内容</template></Split>"
136
138
  },
137
139
  {
138
140
  "name": "drag",
139
141
  "description": "自定义拖拽分割条内容。",
142
+ "bindingType": "none",
140
143
  "vueTemplate": "<template #drag>...</template>",
141
144
  "usageExample": "<Split><template #drag><div class=\"custom-handle\" /></template></Split>"
142
145
  }
@@ -168,11 +168,13 @@
168
168
  "slots": [
169
169
  {
170
170
  "name": "on",
171
- "description": "扩展开启时的文案"
171
+ "description": "扩展开启时的文案",
172
+ "bindingType": "none"
172
173
  },
173
174
  {
174
175
  "name": "off",
175
- "description": "扩展关闭时的文案"
176
+ "description": "扩展关闭时的文案",
177
+ "bindingType": "none"
176
178
  }
177
179
  ],
178
180
  "events": [],
@@ -553,6 +553,7 @@
553
553
  {
554
554
  "name": "empty",
555
555
  "description": "自定义无数据展示模板",
556
+ "bindingType": "none",
556
557
  "vueTemplate": "#empty",
557
558
  "usageExample": "<Table :data=\"[]\">\n <template #empty>\n <div>暂无数据</div>\n </template>\n</Table>"
558
559
  },
@@ -578,6 +579,7 @@
578
579
  {
579
580
  "name": "footer",
580
581
  "description": "自定义表格底部",
582
+ "bindingType": "none",
581
583
  "vueTemplate": "#footer",
582
584
  "usageExample": "<Table :data=\"data\">\n <template #footer>\n <div>总计: {{ total }}</div>\n </template>\n</Table>"
583
585
  },
@@ -862,11 +864,13 @@
862
864
  "name": "title",
863
865
  "description": "自定义复杂表头内容",
864
866
  "vueTemplate": "#title",
865
- "usageExample": "<TableColumn key=\"custom\">\n <template #title>自定义表头</template>\n</TableColumn>"
867
+ "usageExample": "<TableColumn key=\"custom\">\n <template #title>自定义表头</template>\n</TableColumn>",
868
+ "bindingType": "none"
866
869
  },
867
870
  {
868
871
  "name": "template",
869
872
  "description": "自定义单元格内容",
873
+ "bindingType": "array",
870
874
  "slotProps": [
871
875
  {
872
876
  "name": "data",
@@ -886,6 +890,7 @@
886
890
  {
887
891
  "name": "default",
888
892
  "description": "与template扩展点等价,为了方便vue中使用的别名",
893
+ "bindingType": "array",
889
894
  "slotProps": [
890
895
  {
891
896
  "name": "data",
@@ -197,8 +197,8 @@
197
197
  "description": "原生鼠标事件"
198
198
  }
199
199
  ],
200
- "usageExample": "<Tab @click=\"handleClick\"></Tab>",
201
- "handlerExample": "const handleClick = (e: MouseEvent) => {\n console.log('Tab 被点击');\n};"
200
+ "usageExample": "<Tab @click=\"handleTabClick\"></Tab>",
201
+ "handlerExample": "const openInNewWindow = ref(false);\n\nconst handleTabClick = (e: MouseEvent) => {\n openInNewWindow.value = e.metaKey || e.ctrlKey;\n};"
202
202
  }
203
203
  ]
204
204
  }
@@ -243,8 +243,8 @@
243
243
  "description": "起始位置索引"
244
244
  }
245
245
  ],
246
- "usageExample": "<Tags draggable @dragstart=\"handleDragStart\"></Tags>",
247
- "handlerExample": "const handleDragStart = ({key, from}) => {\n console.log('开始拖拽', key, from);\n};"
246
+ "usageExample": "<Tags draggable @dragstart=\"handleTagDragStart\"></Tags>",
247
+ "handlerExample": "const draggingTagKey = ref<string | number | null>(null);\n\nconst handleTagDragStart = ({ key }) => {\n draggingTagKey.value = key;\n};"
248
248
  },
249
249
  {
250
250
  "name": "dragend",
@@ -267,14 +267,17 @@
267
267
  "description": "目标位置索引"
268
268
  }
269
269
  ],
270
- "usageExample": "<Tags draggable @dragend=\"handleDragEnd\"></Tags>",
271
- "handlerExample": "const handleDragEnd = ({key, from, to}) => {\n console.log('拖拽结束', key, 'from', from, 'to', to);\n};"
270
+ "usageExample": "<Tags draggable @dragend=\"handleTagDragEnd\"></Tags>",
271
+ "handlerExample": "const tags = ref(['稳定版', '灰度中', '待发布']);\nconst draggingTagKey = ref<string | number | null>(null);\n\nconst handleTagDragEnd = ({ from, to }) => {\n const moved = tags.value.splice(from, 1)[0];\n tags.value.splice(to, 0, moved);\n draggingTagKey.value = null;\n};"
272
272
  }
273
273
  ],
274
274
  "slots": [
275
275
  {
276
276
  "name": "append",
277
- "description": "追加到后面的元素,不参与到Tags对Tag的管理中"
277
+ "description": "追加到后面的元素,不参与到Tags对Tag的管理中",
278
+ "bindingType": "none",
279
+ "vueTemplate": "#append",
280
+ "usageExample": "<Tags>\n <Tag closable>标签一</Tag>\n <template #append>\n <Button type=\"link\">新增标签</Button>\n </template>\n</Tags>"
278
281
  }
279
282
  ]
280
283
  }
@@ -11,6 +11,7 @@
11
11
  {
12
12
  "name": "default",
13
13
  "description": "时间轴内容,通常由多个 TimelineItem 组成。",
14
+ "bindingType": "none",
14
15
  "vueTemplate": "<Timeline>...</Timeline>",
15
16
  "usageExample": "<Timeline><TimelineItem>创建完成</TimelineItem><TimelineItem>审核通过</TimelineItem></Timeline>"
16
17
  }
@@ -99,7 +100,8 @@
99
100
  "name": "dot",
100
101
  "description": "自定义时间轴节点圆点。",
101
102
  "vueTemplate": "<template #dot>...</template>",
102
- "usageExample": "<TimelineItem><template #dot><Icon class=\"k-icon-check\" /></template>发布完成</TimelineItem>"
103
+ "usageExample": "<TimelineItem><template #dot><Icon class=\"k-icon-check\" /></template>发布完成</TimelineItem>",
104
+ "bindingType": "none"
103
105
  }
104
106
  ]
105
107
  }
@@ -175,6 +175,26 @@
175
175
  "handlerExample": "const handleClose = (e: MouseEvent) => {\n console.log('提示已关闭');\n};"
176
176
  }
177
177
  ],
178
+ "slots": [
179
+ {
180
+ "name": "title",
181
+ "description": "自定义标题内容",
182
+ "bindingType": "none",
183
+ "vueTemplate": "<template #title>...</template>"
184
+ },
185
+ {
186
+ "name": "close",
187
+ "description": "自定义关闭按钮内容",
188
+ "bindingType": "none",
189
+ "vueTemplate": "<template #close>...</template>"
190
+ },
191
+ {
192
+ "name": "icon",
193
+ "description": "自定义Icon内容",
194
+ "bindingType": "none",
195
+ "vueTemplate": "<template #icon>...</template>"
196
+ }
197
+ ],
178
198
  "methods": [],
179
199
  "examples": [
180
200
  {
@@ -272,6 +272,14 @@
272
272
  "handlerExample": "const handlePositioned = (feedback: Feedback) => {\n console.log('Tooltip 最终位置', feedback.placement);\n};"
273
273
  }
274
274
  ],
275
+ "slots": [
276
+ {
277
+ "name": "content",
278
+ "description": "自定义提示内容",
279
+ "bindingType": "none",
280
+ "vueTemplate": "<template #content>...</template>"
281
+ }
282
+ ],
275
283
  "methods": [
276
284
  {
277
285
  "name": "show",
@@ -236,22 +236,69 @@
236
236
  {
237
237
  "name": "header",
238
238
  "description": "自定义整个头部内容",
239
- "params": "(type: 'left' | 'right') => Children"
239
+ "bindingType": "single",
240
+ "slotProps": [
241
+ {
242
+ "name": "type",
243
+ "type": "'left' | 'right'",
244
+ "description": "当前面板标识,`left` 表示候选列表,`right` 表示已选列表。"
245
+ }
246
+ ],
247
+ "vueTemplate": "#header=\"type\"",
248
+ "usageExample": "<Transfer :data=\"data\">\n <template #header=\"type\">\n <span>{{ type === 'left' ? '待选列表' : '已选列表' }}</span>\n </template>\n</Transfer>"
240
249
  },
241
250
  {
242
251
  "name": "filter",
243
252
  "description": "自定义检索内容",
244
- "params": "(type: 'left' | 'right') => Children"
253
+ "bindingType": "single",
254
+ "slotProps": [
255
+ {
256
+ "name": "type",
257
+ "type": "'left' | 'right'",
258
+ "description": "当前面板标识,`left` 表示候选列表,`right` 表示已选列表。"
259
+ }
260
+ ],
261
+ "vueTemplate": "#filter=\"type\"",
262
+ "usageExample": "<Transfer :data=\"data\">\n <template #filter=\"type\">\n <span>{{ type === 'left' ? '搜索左侧' : '搜索右侧' }}</span>\n </template>\n</Transfer>"
245
263
  },
246
264
  {
247
265
  "name": "list",
248
266
  "description": "自定义整个列表内容",
249
- "params": "(type: 'left' | 'right') => Children"
267
+ "bindingType": "single",
268
+ "slotProps": [
269
+ {
270
+ "name": "type",
271
+ "type": "'left' | 'right'",
272
+ "description": "当前面板标识,`left` 表示候选列表,`right` 表示已选列表。"
273
+ }
274
+ ],
275
+ "vueTemplate": "#list=\"type\"",
276
+ "usageExample": "<Transfer :data=\"data\">\n <template #list=\"type\">\n <div>当前面板: {{ type }}</div>\n </template>\n</Transfer>"
250
277
  },
251
278
  {
252
279
  "name": "label",
253
- "description": "自定义每一项的渲染函数,类似于label属性",
254
- "params": "(data: TransferDataItem, key: string, type: 'left' | 'right') => Children"
280
+ "description": "自定义每一项的渲染函数,类似于 label 属性",
281
+ "bindingType": "array",
282
+ "slotProps": [
283
+ {
284
+ "name": "data",
285
+ "type": "TransferDataItem",
286
+ "description": "当前列表项数据",
287
+ "destructuringExample": "[data]"
288
+ },
289
+ {
290
+ "name": "key",
291
+ "type": "string | number",
292
+ "description": "当前列表项在当前面板中的索引或标识"
293
+ },
294
+ {
295
+ "name": "type",
296
+ "type": "'left' | 'right'",
297
+ "description": "当前面板标识,`left` 表示候选列表,`right` 表示已选列表。"
298
+ }
299
+ ],
300
+ "vueTemplate": "#label=\"[data, key, type]\"",
301
+ "usageExample": "<Transfer :data=\"data\">\n <template #label=\"[data, key, type]\">\n <span>{{ data.label }} - {{ type }} - {{ key }}</span>\n </template>\n</Transfer>"
255
302
  }
256
303
  ],
257
304
  "typeDefinitions": [
@@ -291,7 +291,28 @@
291
291
  "slots": [
292
292
  {
293
293
  "name": "label",
294
- "description": "自定义节点渲染内容"
294
+ "description": "自定义节点渲染内容",
295
+ "bindingType": "array",
296
+ "slotProps": [
297
+ {
298
+ "name": "data",
299
+ "type": "TreeDataItem",
300
+ "description": "当前节点对应的数据项",
301
+ "destructuringExample": "[data]"
302
+ },
303
+ {
304
+ "name": "node",
305
+ "type": "TreeNode",
306
+ "description": "当前树节点实例"
307
+ },
308
+ {
309
+ "name": "index",
310
+ "type": "number",
311
+ "description": "当前节点在同级中的索引"
312
+ }
313
+ ],
314
+ "vueTemplate": "#label=\"[data, node, index]\"",
315
+ "usageExample": "<Tree :data=\"treeData\">\n <template #label=\"[data, node]\">\n <span>{{ data.label }}</span>\n <em v-if=\"node.isLeaf\">叶子</em>\n </template>\n</Tree>"
295
316
  }
296
317
  ],
297
318
  "typeDefinitions": [
@@ -354,6 +354,62 @@
354
354
  "handlerExample": "const handleHide = () => {\n console.log('下拉菜单已关闭');\n};"
355
355
  }
356
356
  ],
357
+ "slots": [
358
+ {
359
+ "name": "value",
360
+ "description": "自定义单选模式下的已选值展示内容",
361
+ "bindingType": "array",
362
+ "slotProps": [
363
+ {
364
+ "name": "value",
365
+ "type": "K",
366
+ "description": "当前选中的值",
367
+ "destructuringExample": "[value]"
368
+ },
369
+ {
370
+ "name": "label",
371
+ "type": "string",
372
+ "description": "当前选中值对应的展示文案"
373
+ }
374
+ ],
375
+ "vueTemplate": "#value=\"[value, label]\"",
376
+ "usageExample": "<TreeSelect v-model=\"value\" :data=\"treeData\">\n <template #value=\"[value, label]\">\n <span>{{ label }} ({{ value }})</span>\n </template>\n</TreeSelect>"
377
+ },
378
+ {
379
+ "name": "values",
380
+ "description": "自定义多选模式下的已选值展示内容",
381
+ "bindingType": "array",
382
+ "slotProps": [
383
+ {
384
+ "name": "values",
385
+ "type": "K[]",
386
+ "description": "当前选中的值数组",
387
+ "destructuringExample": "[values]"
388
+ },
389
+ {
390
+ "name": "labels",
391
+ "type": "string[]",
392
+ "description": "当前选中值对应的展示文案数组"
393
+ }
394
+ ],
395
+ "vueTemplate": "#values=\"[values, labels]\"",
396
+ "usageExample": "<TreeSelect v-model=\"values\" :data=\"treeData\" multiple>\n <template #values=\"[values, labels]\">\n <span>已选 {{ labels.length }} 项</span>\n </template>\n</TreeSelect>"
397
+ },
398
+ {
399
+ "name": "prefix",
400
+ "description": "扩展选择框前缀内容",
401
+ "bindingType": "none",
402
+ "vueTemplate": "#prefix",
403
+ "usageExample": "<TreeSelect :data=\"treeData\">\n <template #prefix>\n <span class=\"k-icon-search\"></span>\n </template>\n</TreeSelect>"
404
+ },
405
+ {
406
+ "name": "suffix",
407
+ "description": "扩展选择框后缀内容",
408
+ "bindingType": "none",
409
+ "vueTemplate": "#suffix",
410
+ "usageExample": "<TreeSelect :data=\"treeData\">\n <template #suffix>\n <span class=\"suffix-tip\">树</span>\n </template>\n</TreeSelect>"
411
+ }
412
+ ],
357
413
  "methods": [
358
414
  {
359
415
  "name": "show",
@@ -235,6 +235,7 @@
235
235
  {
236
236
  "name": "trigger",
237
237
  "description": "自定义触发按钮或触发区域",
238
+ "bindingType": "none",
238
239
  "vueTemplate": "<template #trigger>...</template>"
239
240
  }
240
241
  ],
@@ -244,21 +244,25 @@
244
244
  {
245
245
  "name": "default",
246
246
  "description": "抽屉主体内容区域",
247
+ "bindingType": "none",
247
248
  "vueTemplate": "<VDrawer>...</VDrawer>"
248
249
  },
249
250
  {
250
251
  "name": "header",
251
252
  "description": "自定义抽屉头部",
253
+ "bindingType": "none",
252
254
  "vueTemplate": "<template #header>...</template>"
253
255
  },
254
256
  {
255
257
  "name": "footer",
256
258
  "description": "自定义抽屉底部操作区",
259
+ "bindingType": "none",
257
260
  "vueTemplate": "<template #footer>...</template>"
258
261
  },
259
262
  {
260
263
  "name": "trigger",
261
264
  "description": "自定义触发按钮或触发区域",
265
+ "bindingType": "none",
262
266
  "vueTemplate": "<template #trigger>...</template>"
263
267
  }
264
268
  ],
@@ -44,6 +44,16 @@ interface ComponentEvent {
44
44
  }
45
45
  interface ComponentSlot {
46
46
  name: string;
47
+ description?: string;
48
+ vueTemplate?: string;
49
+ usageExample?: string;
50
+ bindingType?: 'array' | 'object' | 'single' | 'none';
51
+ slotProps?: {
52
+ name: string;
53
+ type?: string;
54
+ description?: string;
55
+ destructuringExample?: string;
56
+ }[];
47
57
  }
48
58
  interface MistakeEntry {
49
59
  id: string;
@@ -52,6 +62,25 @@ interface MistakeEntry {
52
62
  correctCode: string;
53
63
  explanation: string;
54
64
  }
65
+ interface ComponentSubComponent {
66
+ name: string;
67
+ description?: string;
68
+ props?: ComponentProp[];
69
+ events?: ComponentEvent[];
70
+ slots?: ComponentSlot[];
71
+ methods?: {
72
+ name: string;
73
+ description?: string;
74
+ params?: {
75
+ name: string;
76
+ type: string;
77
+ description?: string;
78
+ optional?: boolean;
79
+ default?: string;
80
+ }[];
81
+ returnType?: string;
82
+ }[];
83
+ }
55
84
  interface ComponentMetadata {
56
85
  id?: string;
57
86
  name: string;
@@ -70,7 +99,7 @@ interface ComponentMetadata {
70
99
  }[];
71
100
  returnType?: string;
72
101
  }[];
73
- subComponents?: ComponentMetadata[];
102
+ subComponents?: ComponentSubComponent[];
74
103
  commonMistakes?: MistakeEntry[];
75
104
  importStatement?: string;
76
105
  requiredParent?: string;
@@ -44,6 +44,16 @@ interface ComponentEvent {
44
44
  }
45
45
  interface ComponentSlot {
46
46
  name: string;
47
+ description?: string;
48
+ vueTemplate?: string;
49
+ usageExample?: string;
50
+ bindingType?: 'array' | 'object' | 'single' | 'none';
51
+ slotProps?: {
52
+ name: string;
53
+ type?: string;
54
+ description?: string;
55
+ destructuringExample?: string;
56
+ }[];
47
57
  }
48
58
  interface MistakeEntry {
49
59
  id: string;
@@ -52,6 +62,25 @@ interface MistakeEntry {
52
62
  correctCode: string;
53
63
  explanation: string;
54
64
  }
65
+ interface ComponentSubComponent {
66
+ name: string;
67
+ description?: string;
68
+ props?: ComponentProp[];
69
+ events?: ComponentEvent[];
70
+ slots?: ComponentSlot[];
71
+ methods?: {
72
+ name: string;
73
+ description?: string;
74
+ params?: {
75
+ name: string;
76
+ type: string;
77
+ description?: string;
78
+ optional?: boolean;
79
+ default?: string;
80
+ }[];
81
+ returnType?: string;
82
+ }[];
83
+ }
55
84
  interface ComponentMetadata {
56
85
  id?: string;
57
86
  name: string;
@@ -70,7 +99,7 @@ interface ComponentMetadata {
70
99
  }[];
71
100
  returnType?: string;
72
101
  }[];
73
- subComponents?: ComponentMetadata[];
102
+ subComponents?: ComponentSubComponent[];
74
103
  commonMistakes?: MistakeEntry[];
75
104
  importStatement?: string;
76
105
  requiredParent?: string;
package/dist/ast/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  require('../chunk-YTEYDSDW.js');
4
- var chunkSZYVGYKK_js = require('../chunk-SZYVGYKK.js');
4
+ var chunkJNRGUR3O_js = require('../chunk-JNRGUR3O.js');
5
5
  require('../chunk-KF5YBEM5.js');
6
6
  require('../chunk-JSBRDJBE.js');
7
7
 
@@ -9,9 +9,9 @@ require('../chunk-JSBRDJBE.js');
9
9
 
10
10
  Object.defineProperty(exports, "analyzeCodeWithAST", {
11
11
  enumerable: true,
12
- get: function () { return chunkSZYVGYKK_js.analyzeCodeWithAST; }
12
+ get: function () { return chunkJNRGUR3O_js.analyzeCodeWithAST; }
13
13
  });
14
14
  Object.defineProperty(exports, "componentRegistry", {
15
15
  enumerable: true,
16
- get: function () { return chunkSZYVGYKK_js.componentRegistry; }
16
+ get: function () { return chunkJNRGUR3O_js.componentRegistry; }
17
17
  });
@@ -1,4 +1,4 @@
1
1
  import '../chunk-5H7N2A5X.mjs';
2
- export { analyzeCodeWithAST, componentRegistry } from '../chunk-KMIDURUR.mjs';
2
+ export { analyzeCodeWithAST, componentRegistry } from '../chunk-IPJJMPOO.mjs';
3
3
  import '../chunk-QC6VTSA3.mjs';
4
4
  import '../chunk-UJCSKKID.mjs';
@@ -6,6 +6,7 @@ import * as ts from 'typescript';
6
6
  var ALLOWED_IMPORT_SOURCES = [
7
7
  "vue",
8
8
  "@vue/",
9
+ "vue-router",
9
10
  "@king-design/vue",
10
11
  "@ksyun-internal/versatile"
11
12
  ];
@@ -65,6 +66,16 @@ function getRuntimeInjectedBindingsForSource(source) {
65
66
  if (source === "vue" || source.startsWith("@vue/")) {
66
67
  return VUE_RUNTIME_INJECTED_BINDINGS;
67
68
  }
69
+ if (source === "vue-router") {
70
+ return /* @__PURE__ */ new Set([
71
+ "useRouter",
72
+ "useRoute",
73
+ "onBeforeRouteLeave",
74
+ "onBeforeRouteUpdate",
75
+ "RouterLink",
76
+ "RouterView"
77
+ ]);
78
+ }
68
79
  if (source === "@ksyun-internal/versatile") {
69
80
  return VERSATILE_RUNTIME_INJECTED_BINDINGS;
70
81
  }
@@ -201,7 +212,7 @@ function transformValueImports(scriptContent, whitelist, strippedImports) {
201
212
  if (reason === "relative") {
202
213
  return transformImportToBinding(importClause, `__mockModule('${source}')`);
203
214
  }
204
- return "";
215
+ return transformImportToBinding(importClause, `__mockModule('${source}')`);
205
216
  }
206
217
  );
207
218
  nextScript = nextScript.replace(
@@ -212,7 +223,7 @@ function transformValueImports(scriptContent, whitelist, strippedImports) {
212
223
  if (reason === "relative") {
213
224
  return `__mockModule('${source}');`;
214
225
  }
215
- return "";
226
+ return `__mockModule('${source}');`;
216
227
  }
217
228
  );
218
229
  return nextScript;
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkSZYVGYKK_js = require('./chunk-SZYVGYKK.js');
4
- var chunkEYKZY2F3_js = require('./chunk-EYKZY2F3.js');
5
- var chunkCR3GC4H3_js = require('./chunk-CR3GC4H3.js');
3
+ var chunkJNRGUR3O_js = require('./chunk-JNRGUR3O.js');
4
+ var chunkV5N65MRP_js = require('./chunk-V5N65MRP.js');
5
+ var chunkDHLWNT53_js = require('./chunk-DHLWNT53.js');
6
6
 
7
7
  // src/tools/unifiedValidator.ts
8
8
  function validateCompilation(code) {
@@ -41,7 +41,7 @@ function validateCompilation(code) {
41
41
  errors: ["SFC \u7ED3\u6784\u9519\u8BEF: \u7F3A\u5C11 <template> \u6216 <script> \u6807\u7B7E"]
42
42
  };
43
43
  }
44
- const result = chunkCR3GC4H3_js.compileSFC(code, scopeId);
44
+ const result = chunkDHLWNT53_js.compileSFC(code, scopeId);
45
45
  if (result.error) {
46
46
  return {
47
47
  name: "\u7F16\u8BD1\u68C0\u67E5",
@@ -64,7 +64,7 @@ function validateCompilation(code) {
64
64
  }
65
65
  async function validateAST(code) {
66
66
  try {
67
- const violations = await chunkSZYVGYKK_js.analyzeCodeWithAST(code);
67
+ const violations = await chunkJNRGUR3O_js.analyzeCodeWithAST(code);
68
68
  if (violations.length > 0) {
69
69
  return {
70
70
  name: "AST\u89C4\u5219\u68C0\u67E5",
@@ -110,7 +110,7 @@ async function validateCode(code) {
110
110
  summary: `\u274C AST\u89C4\u5219\u8FDD\u89C4 (${astResult.errors.length}\u9879)`
111
111
  };
112
112
  }
113
- const runtimeResult = chunkEYKZY2F3_js.validateRuntimePrecheck(code);
113
+ const runtimeResult = chunkV5N65MRP_js.validateRuntimePrecheck(code);
114
114
  if (!runtimeResult.passed) {
115
115
  return {
116
116
  passed: false,
@@ -122,6 +122,28 @@ async function validateCode(code) {
122
122
  summary: `\u274C \u8FD0\u884C\u65F6\u9519\u8BEF: ${runtimeResult.errors[0]}`
123
123
  };
124
124
  }
125
+ if (runtimeResult.status === "env_dependent") {
126
+ return {
127
+ passed: true,
128
+ layers: {
129
+ compilation: compilationResult,
130
+ ast: astResult,
131
+ runtime: runtimeResult
132
+ },
133
+ summary: "\u26A0\uFE0F \u8FD0\u884C\u65F6\u68C0\u67E5\u53D7\u73AF\u5883\u5F71\u54CD\uFF0C\u7ED3\u679C\u4F9D\u8D56 mock"
134
+ };
135
+ }
136
+ if (runtimeResult.status === "runtime_skipped") {
137
+ return {
138
+ passed: true,
139
+ layers: {
140
+ compilation: compilationResult,
141
+ ast: astResult,
142
+ runtime: runtimeResult
143
+ },
144
+ summary: "\u26A0\uFE0F \u8FD0\u884C\u65F6\u68C0\u67E5\u5DF2\u964D\u7EA7\u4E3A\u8DF3\u8FC7\u4E25\u683C\u5224\u5B9A"
145
+ };
146
+ }
125
147
  return {
126
148
  passed: true,
127
149
  layers: {
@@ -144,14 +166,15 @@ function validateCodeSync(code) {
144
166
  summary: `\u274C \u7F16\u8BD1\u5931\u8D25: ${compilationResult.errors[0]}`
145
167
  };
146
168
  }
147
- const runtimeResult = chunkEYKZY2F3_js.validateRuntimePrecheck(code);
169
+ const runtimeResult = chunkV5N65MRP_js.validateRuntimePrecheck(code);
170
+ const summary = runtimeResult.passed ? runtimeResult.status === "env_dependent" ? "\u26A0\uFE0F \u8FD0\u884C\u65F6\u68C0\u67E5\u53D7\u73AF\u5883\u5F71\u54CD" : runtimeResult.status === "runtime_skipped" ? "\u26A0\uFE0F \u8FD0\u884C\u65F6\u68C0\u67E5\u5DF2\u964D\u7EA7" : "\u2705 \u68C0\u67E5\u901A\u8FC7" : `\u274C ${runtimeResult.errors[0]}`;
148
171
  return {
149
172
  passed: runtimeResult.passed,
150
173
  layers: {
151
174
  compilation: compilationResult,
152
175
  runtime: runtimeResult
153
176
  },
154
- summary: runtimeResult.passed ? "\u2705 \u68C0\u67E5\u901A\u8FC7" : `\u274C ${runtimeResult.errors[0]}`
177
+ summary
155
178
  };
156
179
  }
157
180