@yh-ui/components 0.1.10 → 0.1.12
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/dist/ai-action-group/__tests__/ai-action-group.ssr.test.cjs +55 -0
- package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.d.ts +1 -0
- package/dist/ai-action-group/__tests__/ai-action-group.ssr.test.mjs +39 -0
- package/dist/ai-action-group/__tests__/ai-action-group.test.cjs +149 -0
- package/dist/ai-action-group/__tests__/ai-action-group.test.d.ts +1 -0
- package/dist/ai-action-group/__tests__/ai-action-group.test.mjs +104 -0
- package/dist/ai-action-group/index.cjs +26 -0
- package/dist/ai-action-group/index.d.ts +3 -0
- package/dist/ai-action-group/index.mjs +5 -0
- package/dist/ai-action-group/src/ai-action-group.cjs +50 -0
- package/dist/ai-action-group/src/ai-action-group.css +517 -0
- package/dist/ai-action-group/src/ai-action-group.d.ts +55 -0
- package/dist/ai-action-group/src/ai-action-group.d.vue.ts +40 -0
- package/dist/ai-action-group/src/ai-action-group.mjs +44 -0
- package/dist/ai-action-group/src/ai-action-group.vue +602 -0
- package/dist/ai-action-group/src/ai-action-group.vue.d.ts +40 -0
- package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.cjs +61 -0
- package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.d.ts +1 -0
- package/dist/ai-agent-card/__tests__/ai-agent-card.ssr.test.mjs +65 -0
- package/dist/ai-agent-card/__tests__/ai-agent-card.test.cjs +70 -0
- package/dist/ai-agent-card/__tests__/ai-agent-card.test.d.ts +1 -0
- package/dist/ai-agent-card/__tests__/ai-agent-card.test.mjs +64 -0
- package/dist/ai-agent-card/index.cjs +26 -0
- package/dist/ai-agent-card/index.d.ts +3 -0
- package/dist/ai-agent-card/index.mjs +5 -0
- package/dist/ai-agent-card/src/ai-agent-card.cjs +74 -0
- package/dist/ai-agent-card/src/ai-agent-card.css +859 -0
- package/dist/ai-agent-card/src/ai-agent-card.d.ts +122 -0
- package/dist/ai-agent-card/src/ai-agent-card.d.vue.ts +62 -0
- package/dist/ai-agent-card/src/ai-agent-card.mjs +68 -0
- package/dist/ai-agent-card/src/ai-agent-card.vue +1029 -0
- package/dist/ai-agent-card/src/ai-agent-card.vue.d.ts +62 -0
- package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.cjs +73 -0
- package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.d.ts +1 -0
- package/dist/ai-artifacts/__tests__/ai-artifacts.ssr.test.mjs +68 -0
- package/dist/ai-artifacts/__tests__/ai-artifacts.test.cjs +128 -0
- package/dist/ai-artifacts/__tests__/ai-artifacts.test.d.ts +1 -0
- package/dist/ai-artifacts/__tests__/ai-artifacts.test.mjs +109 -0
- package/dist/ai-artifacts/index.cjs +26 -0
- package/dist/ai-artifacts/index.d.ts +3 -0
- package/dist/ai-artifacts/index.mjs +5 -0
- package/dist/ai-artifacts/src/ai-artifacts.cjs +55 -0
- package/dist/ai-artifacts/src/ai-artifacts.css +633 -0
- package/dist/ai-artifacts/src/ai-artifacts.d.ts +93 -0
- package/dist/ai-artifacts/src/ai-artifacts.d.vue.ts +33 -0
- package/dist/ai-artifacts/src/ai-artifacts.mjs +49 -0
- package/dist/ai-artifacts/src/ai-artifacts.vue +803 -0
- package/dist/ai-artifacts/src/ai-artifacts.vue.d.ts +33 -0
- package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.cjs +87 -0
- package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.d.ts +1 -0
- package/dist/ai-bubble/__tests__/ai-bubble.ssr.test.mjs +58 -0
- package/dist/ai-bubble/__tests__/ai-bubble.test.cjs +227 -0
- package/dist/ai-bubble/__tests__/ai-bubble.test.d.ts +1 -0
- package/dist/ai-bubble/__tests__/ai-bubble.test.mjs +123 -0
- package/dist/ai-bubble/index.cjs +26 -0
- package/dist/ai-bubble/index.d.ts +3 -0
- package/dist/ai-bubble/index.mjs +5 -0
- package/dist/ai-bubble/src/ai-bubble.cjs +86 -0
- package/dist/ai-bubble/src/ai-bubble.css +932 -0
- package/dist/ai-bubble/src/ai-bubble.d.ts +126 -0
- package/dist/ai-bubble/src/ai-bubble.d.vue.ts +110 -0
- package/dist/ai-bubble/src/ai-bubble.mjs +80 -0
- package/dist/ai-bubble/src/ai-bubble.vue +1300 -0
- package/dist/ai-bubble/src/ai-bubble.vue.d.ts +110 -0
- package/dist/ai-chat/__tests__/ai-chat.ssr.test.cjs +82 -0
- package/dist/ai-chat/__tests__/ai-chat.ssr.test.d.ts +1 -0
- package/dist/ai-chat/__tests__/ai-chat.ssr.test.mjs +69 -0
- package/dist/ai-chat/__tests__/ai-chat.test.cjs +169 -0
- package/dist/ai-chat/__tests__/ai-chat.test.d.ts +1 -0
- package/dist/ai-chat/__tests__/ai-chat.test.mjs +121 -0
- package/dist/ai-chat/index.cjs +26 -0
- package/dist/ai-chat/index.d.ts +3 -0
- package/dist/ai-chat/index.mjs +5 -0
- package/dist/ai-chat/src/ai-chat.cjs +41 -0
- package/dist/ai-chat/src/ai-chat.css +503 -0
- package/dist/ai-chat/src/ai-chat.d.ts +57 -0
- package/dist/ai-chat/src/ai-chat.d.vue.ts +43 -0
- package/dist/ai-chat/src/ai-chat.mjs +35 -0
- package/dist/ai-chat/src/ai-chat.vue +606 -0
- package/dist/ai-chat/src/ai-chat.vue.d.ts +43 -0
- package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.cjs +66 -0
- package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.d.ts +1 -0
- package/dist/ai-code-block/__tests__/ai-code-block.ssr.test.mjs +48 -0
- package/dist/ai-code-block/__tests__/ai-code-block.test.cjs +174 -0
- package/dist/ai-code-block/__tests__/ai-code-block.test.d.ts +1 -0
- package/dist/ai-code-block/__tests__/ai-code-block.test.mjs +108 -0
- package/dist/ai-code-block/index.cjs +26 -0
- package/dist/ai-code-block/index.d.ts +3 -0
- package/dist/ai-code-block/index.mjs +5 -0
- package/dist/ai-code-block/src/ai-code-block.cjs +79 -0
- package/dist/ai-code-block/src/ai-code-block.css +589 -0
- package/dist/ai-code-block/src/ai-code-block.d.ts +76 -0
- package/dist/ai-code-block/src/ai-code-block.d.vue.ts +63 -0
- package/dist/ai-code-block/src/ai-code-block.mjs +73 -0
- package/dist/ai-code-block/src/ai-code-block.vue +706 -0
- package/dist/ai-code-block/src/ai-code-block.vue.d.ts +63 -0
- package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.cjs +50 -0
- package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.d.ts +1 -0
- package/dist/ai-conversations/__tests__/ai-conversations.ssr.test.mjs +42 -0
- package/dist/ai-conversations/__tests__/ai-conversations.test.cjs +67 -0
- package/dist/ai-conversations/__tests__/ai-conversations.test.d.ts +1 -0
- package/dist/ai-conversations/__tests__/ai-conversations.test.mjs +51 -0
- package/dist/ai-conversations/index.cjs +26 -0
- package/dist/ai-conversations/index.d.ts +3 -0
- package/dist/ai-conversations/index.mjs +5 -0
- package/dist/ai-conversations/src/ai-conversations.cjs +69 -0
- package/dist/ai-conversations/src/ai-conversations.css +679 -0
- package/dist/ai-conversations/src/ai-conversations.d.ts +67 -0
- package/dist/ai-conversations/src/ai-conversations.d.vue.ts +52 -0
- package/dist/ai-conversations/src/ai-conversations.mjs +63 -0
- package/dist/ai-conversations/src/ai-conversations.vue +949 -0
- package/dist/ai-conversations/src/ai-conversations.vue.d.ts +52 -0
- package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.cjs +62 -0
- package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.d.ts +1 -0
- package/dist/ai-editor-sender/__tests__/ai-editor-sender.ssr.test.mjs +50 -0
- package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.cjs +315 -0
- package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.d.ts +1 -0
- package/dist/ai-editor-sender/__tests__/ai-editor-sender.test.mjs +226 -0
- package/dist/ai-editor-sender/index.cjs +26 -0
- package/dist/ai-editor-sender/index.d.ts +3 -0
- package/dist/ai-editor-sender/index.mjs +5 -0
- package/dist/ai-editor-sender/src/ai-editor-sender.cjs +66 -0
- package/dist/ai-editor-sender/src/ai-editor-sender.css +566 -0
- package/dist/ai-editor-sender/src/ai-editor-sender.d.ts +70 -0
- package/dist/ai-editor-sender/src/ai-editor-sender.d.vue.ts +70 -0
- package/dist/ai-editor-sender/src/ai-editor-sender.mjs +60 -0
- package/dist/ai-editor-sender/src/ai-editor-sender.vue +713 -0
- package/dist/ai-editor-sender/src/ai-editor-sender.vue.d.ts +70 -0
- package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.cjs +49 -0
- package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.d.ts +1 -0
- package/dist/ai-prompts/__tests__/ai-prompts.ssr.test.mjs +41 -0
- package/dist/ai-prompts/__tests__/ai-prompts.test.cjs +54 -0
- package/dist/ai-prompts/__tests__/ai-prompts.test.d.ts +1 -0
- package/dist/ai-prompts/__tests__/ai-prompts.test.mjs +38 -0
- package/dist/ai-prompts/index.cjs +26 -0
- package/dist/ai-prompts/index.d.ts +3 -0
- package/dist/ai-prompts/index.mjs +5 -0
- package/dist/ai-prompts/src/ai-prompts.cjs +42 -0
- package/dist/ai-prompts/src/ai-prompts.css +572 -0
- package/dist/ai-prompts/src/ai-prompts.d.ts +45 -0
- package/dist/ai-prompts/src/ai-prompts.d.vue.ts +44 -0
- package/dist/ai-prompts/src/ai-prompts.mjs +36 -0
- package/dist/ai-prompts/src/ai-prompts.vue +646 -0
- package/dist/ai-prompts/src/ai-prompts.vue.d.ts +44 -0
- package/dist/ai-provider/__tests__/ai-provider.ssr.test.cjs +33 -0
- package/dist/ai-provider/__tests__/ai-provider.ssr.test.d.ts +1 -0
- package/dist/ai-provider/__tests__/ai-provider.ssr.test.mjs +34 -0
- package/dist/ai-provider/__tests__/ai-provider.test.cjs +38 -0
- package/dist/ai-provider/__tests__/ai-provider.test.d.ts +1 -0
- package/dist/ai-provider/__tests__/ai-provider.test.mjs +33 -0
- package/dist/ai-provider/index.cjs +38 -0
- package/dist/ai-provider/index.d.ts +4 -0
- package/dist/ai-provider/index.mjs +6 -0
- package/dist/ai-provider/src/ai-provider.cjs +7 -0
- package/dist/ai-provider/src/ai-provider.d.ts +88 -0
- package/dist/ai-provider/src/ai-provider.d.vue.ts +48 -0
- package/dist/ai-provider/src/ai-provider.mjs +1 -0
- package/dist/ai-provider/src/ai-provider.vue +24 -0
- package/dist/ai-provider/src/ai-provider.vue.d.ts +48 -0
- package/dist/ai-provider/src/use-ai-provider.cjs +11 -0
- package/dist/ai-provider/src/use-ai-provider.d.ts +10 -0
- package/dist/ai-provider/src/use-ai-provider.mjs +5 -0
- package/dist/ai-sender/__tests__/ai-sender.ssr.test.cjs +46 -0
- package/dist/ai-sender/__tests__/ai-sender.ssr.test.d.ts +1 -0
- package/dist/ai-sender/__tests__/ai-sender.ssr.test.mjs +37 -0
- package/dist/ai-sender/__tests__/ai-sender.test.cjs +388 -0
- package/dist/ai-sender/__tests__/ai-sender.test.d.ts +1 -0
- package/dist/ai-sender/__tests__/ai-sender.test.mjs +248 -0
- package/dist/ai-sender/index.cjs +26 -0
- package/dist/ai-sender/index.d.ts +3 -0
- package/dist/ai-sender/index.mjs +5 -0
- package/dist/ai-sender/src/ai-sender.cjs +91 -0
- package/dist/ai-sender/src/ai-sender.css +754 -0
- package/dist/ai-sender/src/ai-sender.d.ts +140 -0
- package/dist/ai-sender/src/ai-sender.d.vue.ts +69 -0
- package/dist/ai-sender/src/ai-sender.mjs +85 -0
- package/dist/ai-sender/src/ai-sender.vue +1032 -0
- package/dist/ai-sender/src/ai-sender.vue.d.ts +69 -0
- package/dist/ai-sources/__tests__/ai-sources.ssr.test.cjs +72 -0
- package/dist/ai-sources/__tests__/ai-sources.ssr.test.d.ts +1 -0
- package/dist/ai-sources/__tests__/ai-sources.ssr.test.mjs +82 -0
- package/dist/ai-sources/__tests__/ai-sources.test.cjs +93 -0
- package/dist/ai-sources/__tests__/ai-sources.test.d.ts +1 -0
- package/dist/ai-sources/__tests__/ai-sources.test.mjs +89 -0
- package/dist/ai-sources/index.cjs +26 -0
- package/dist/ai-sources/index.d.ts +3 -0
- package/dist/ai-sources/index.mjs +5 -0
- package/dist/ai-sources/src/ai-sources.cjs +59 -0
- package/dist/ai-sources/src/ai-sources.css +830 -0
- package/dist/ai-sources/src/ai-sources.d.ts +79 -0
- package/dist/ai-sources/src/ai-sources.d.vue.ts +45 -0
- package/dist/ai-sources/src/ai-sources.mjs +53 -0
- package/dist/ai-sources/src/ai-sources.vue +1109 -0
- package/dist/ai-sources/src/ai-sources.vue.d.ts +45 -0
- package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.cjs +56 -0
- package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.d.ts +1 -0
- package/dist/ai-thinking/__tests__/ai-thinking.ssr.test.mjs +42 -0
- package/dist/ai-thinking/__tests__/ai-thinking.test.cjs +151 -0
- package/dist/ai-thinking/__tests__/ai-thinking.test.d.ts +1 -0
- package/dist/ai-thinking/__tests__/ai-thinking.test.mjs +96 -0
- package/dist/ai-thinking/index.cjs +26 -0
- package/dist/ai-thinking/index.d.ts +3 -0
- package/dist/ai-thinking/index.mjs +5 -0
- package/dist/ai-thinking/src/ai-thinking.cjs +44 -0
- package/dist/ai-thinking/src/ai-thinking.css +543 -0
- package/dist/ai-thinking/src/ai-thinking.d.ts +42 -0
- package/dist/ai-thinking/src/ai-thinking.d.vue.ts +33 -0
- package/dist/ai-thinking/src/ai-thinking.mjs +38 -0
- package/dist/ai-thinking/src/ai-thinking.vue +631 -0
- package/dist/ai-thinking/src/ai-thinking.vue.d.ts +33 -0
- package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.cjs +83 -0
- package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.d.ts +1 -0
- package/dist/ai-thought-chain/__tests__/ai-thought-chain.ssr.test.mjs +52 -0
- package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.cjs +204 -0
- package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.d.ts +1 -0
- package/dist/ai-thought-chain/__tests__/ai-thought-chain.test.mjs +134 -0
- package/dist/ai-thought-chain/index.cjs +26 -0
- package/dist/ai-thought-chain/index.d.ts +3 -0
- package/dist/ai-thought-chain/index.mjs +5 -0
- package/dist/ai-thought-chain/src/ai-thought-chain.cjs +68 -0
- package/dist/ai-thought-chain/src/ai-thought-chain.css +668 -0
- package/dist/ai-thought-chain/src/ai-thought-chain.d.ts +82 -0
- package/dist/ai-thought-chain/src/ai-thought-chain.d.vue.ts +83 -0
- package/dist/ai-thought-chain/src/ai-thought-chain.mjs +62 -0
- package/dist/ai-thought-chain/src/ai-thought-chain.vue +813 -0
- package/dist/ai-thought-chain/src/ai-thought-chain.vue.d.ts +83 -0
- package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.cjs +32 -0
- package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.d.ts +1 -0
- package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.ssr.test.mjs +25 -0
- package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.cjs +113 -0
- package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.d.ts +1 -0
- package/dist/ai-voice-trigger/__tests__/ai-voice-trigger.test.mjs +93 -0
- package/dist/ai-voice-trigger/index.cjs +26 -0
- package/dist/ai-voice-trigger/index.d.ts +3 -0
- package/dist/ai-voice-trigger/index.mjs +5 -0
- package/dist/ai-voice-trigger/src/ai-voice-trigger.cjs +35 -0
- package/dist/ai-voice-trigger/src/ai-voice-trigger.css +603 -0
- package/dist/ai-voice-trigger/src/ai-voice-trigger.d.ts +37 -0
- package/dist/ai-voice-trigger/src/ai-voice-trigger.d.vue.ts +29 -0
- package/dist/ai-voice-trigger/src/ai-voice-trigger.mjs +29 -0
- package/dist/ai-voice-trigger/src/ai-voice-trigger.vue +708 -0
- package/dist/ai-voice-trigger/src/ai-voice-trigger.vue.d.ts +29 -0
- package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.cjs +57 -0
- package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.d.ts +1 -0
- package/dist/ai-welcome/__tests__/ai-welcome.ssr.test.mjs +39 -0
- package/dist/ai-welcome/__tests__/ai-welcome.test.cjs +169 -0
- package/dist/ai-welcome/__tests__/ai-welcome.test.d.ts +1 -0
- package/dist/ai-welcome/__tests__/ai-welcome.test.mjs +113 -0
- package/dist/ai-welcome/index.cjs +26 -0
- package/dist/ai-welcome/index.d.ts +3 -0
- package/dist/ai-welcome/index.mjs +5 -0
- package/dist/ai-welcome/src/ai-welcome.cjs +56 -0
- package/dist/ai-welcome/src/ai-welcome.css +591 -0
- package/dist/ai-welcome/src/ai-welcome.d.ts +59 -0
- package/dist/ai-welcome/src/ai-welcome.d.vue.ts +51 -0
- package/dist/ai-welcome/src/ai-welcome.mjs +50 -0
- package/dist/ai-welcome/src/ai-welcome.vue +655 -0
- package/dist/ai-welcome/src/ai-welcome.vue.d.ts +51 -0
- package/dist/alert/src/alert.d.vue.ts +5 -5
- package/dist/alert/src/alert.vue.d.ts +5 -5
- package/dist/autocomplete/src/autocomplete.d.vue.ts +2 -2
- package/dist/autocomplete/src/autocomplete.vue.d.ts +2 -2
- package/dist/avatar/index.d.ts +39 -1
- package/dist/back-top/src/back-top.d.vue.ts +1 -1
- package/dist/back-top/src/back-top.vue.d.ts +1 -1
- package/dist/button/index.d.ts +3 -3
- package/dist/button/src/button.css +3 -3
- package/dist/button/src/button.d.vue.ts +1 -1
- package/dist/button/src/button.vue +3 -3
- package/dist/button/src/button.vue.d.ts +1 -1
- package/dist/calendar/src/calendar.d.vue.ts +2 -2
- package/dist/calendar/src/calendar.vue.d.ts +2 -2
- package/dist/cascader/src/cascader-panel.d.vue.ts +2 -2
- package/dist/cascader/src/cascader-panel.vue.d.ts +2 -2
- package/dist/checkbox/index.d.ts +3 -3
- package/dist/checkbox/src/checkbox-group.d.vue.ts +1 -1
- package/dist/checkbox/src/checkbox-group.vue +13 -1
- package/dist/checkbox/src/checkbox-group.vue.d.ts +1 -1
- package/dist/checkbox/src/checkbox.d.ts +12 -0
- package/dist/col/src/col.d.vue.ts +4 -4
- package/dist/col/src/col.vue.d.ts +4 -4
- package/dist/color-picker/src/color-picker.d.vue.ts +1 -1
- package/dist/color-picker/src/color-picker.vue.d.ts +1 -1
- package/dist/component.d.ts +63 -0
- package/dist/date-picker/src/date-picker.d.vue.ts +4 -4
- package/dist/date-picker/src/date-picker.vue.d.ts +4 -4
- package/dist/descriptions/src/description-item.d.vue.ts +1 -1
- package/dist/descriptions/src/description-item.vue.d.ts +1 -1
- package/dist/dialog/src/dialog.d.vue.ts +6 -6
- package/dist/dialog/src/dialog.vue.d.ts +6 -6
- package/dist/drawer/src/drawer.d.vue.ts +3 -3
- package/dist/drawer/src/drawer.vue.d.ts +3 -3
- package/dist/dropdown/src/dropdown-item.d.vue.ts +1 -1
- package/dist/dropdown/src/dropdown-item.vue.d.ts +1 -1
- package/dist/dropdown/src/dropdown.d.vue.ts +8 -8
- package/dist/dropdown/src/dropdown.vue.d.ts +8 -8
- package/dist/form/__tests__/form-schema.test.cjs +477 -24
- package/dist/form/__tests__/form-schema.test.mjs +277 -57
- package/dist/form/index.cjs +12 -0
- package/dist/form/index.d.ts +1 -2
- package/dist/form/index.mjs +1 -0
- package/dist/form/src/form-item.d.vue.ts +2 -1
- package/dist/form/src/form-item.vue +3 -1
- package/dist/form/src/form-item.vue.d.ts +2 -1
- package/dist/form/src/form-schema.cjs +2 -1
- package/dist/form/src/form-schema.d.ts +124 -19
- package/dist/form/src/form-schema.d.vue.ts +69 -19
- package/dist/form/src/form-schema.mjs +2 -1
- package/dist/form/src/form-schema.vue +522 -160
- package/dist/form/src/form-schema.vue.d.ts +69 -19
- package/dist/form/src/form.cjs +7 -0
- package/dist/form/src/form.d.ts +20 -0
- package/dist/form/src/form.d.vue.ts +10 -1
- package/dist/form/src/form.mjs +7 -0
- package/dist/form/src/form.vue +22 -10
- package/dist/form/src/form.vue.d.ts +10 -1
- package/dist/grid/src/grid.d.vue.ts +1 -1
- package/dist/grid/src/grid.vue.d.ts +1 -1
- package/dist/icon/src/icons/index.cjs +122 -2
- package/dist/icon/src/icons/index.d.ts +24 -0
- package/dist/icon/src/icons/index.mjs +145 -1
- package/dist/image/index.d.ts +356 -2
- package/dist/image/src/image-viewer.d.vue.ts +3 -3
- package/dist/image/src/image-viewer.vue.d.ts +3 -3
- package/dist/image/src/image.d.vue.ts +4 -4
- package/dist/image/src/image.vue.d.ts +4 -4
- package/dist/index.cjs +193 -1
- package/dist/index.d.ts +16 -0
- package/dist/index.mjs +49 -1
- package/dist/input/index.d.ts +18 -18
- package/dist/input/src/input.d.vue.ts +6 -6
- package/dist/input/src/input.vue.d.ts +6 -6
- package/dist/input-tag/src/input-tag.d.vue.ts +2 -2
- package/dist/input-tag/src/input-tag.vue.d.ts +2 -2
- package/dist/mention/src/mention.d.vue.ts +8 -8
- package/dist/mention/src/mention.vue.d.ts +8 -8
- package/dist/menu/src/menu.d.vue.ts +4 -4
- package/dist/menu/src/menu.vue.d.ts +4 -4
- package/dist/message/src/message.d.vue.ts +1 -1
- package/dist/message/src/message.vue.d.ts +1 -1
- package/dist/popconfirm/src/popconfirm.d.vue.ts +5 -5
- package/dist/popconfirm/src/popconfirm.vue.d.ts +5 -5
- package/dist/popover/src/popover.d.vue.ts +4 -4
- package/dist/popover/src/popover.vue.d.ts +4 -4
- package/dist/progress/src/progress.d.vue.ts +1 -1
- package/dist/progress/src/progress.vue.d.ts +1 -1
- package/dist/radio/src/radio-group.d.vue.ts +1 -1
- package/dist/radio/src/radio-group.vue +25 -4
- package/dist/radio/src/radio-group.vue.d.ts +1 -1
- package/dist/radio/src/radio.d.ts +12 -0
- package/dist/rate/src/rate.d.vue.ts +1 -1
- package/dist/rate/src/rate.vue.d.ts +1 -1
- package/dist/select/src/select.d.vue.ts +1 -1
- package/dist/select/src/select.vue.d.ts +1 -1
- package/dist/skeleton/src/skeleton.d.vue.ts +1 -1
- package/dist/skeleton/src/skeleton.vue.d.ts +1 -1
- package/dist/slider/src/slider.d.vue.ts +1 -1
- package/dist/slider/src/slider.vue.d.ts +1 -1
- package/dist/steps/src/step.d.vue.ts +1 -1
- package/dist/steps/src/step.vue.d.ts +1 -1
- package/dist/switch/src/switch.d.vue.ts +2 -2
- package/dist/switch/src/switch.vue.d.ts +2 -2
- package/dist/table/__tests__/table.perf.test.cjs +2 -2
- package/dist/table/__tests__/table.perf.test.mjs +2 -2
- package/dist/table/__tests__/table.test.cjs +18 -0
- package/dist/table/__tests__/table.test.mjs +18 -0
- package/dist/table/__tests__/use-table-import.test.cjs +6 -0
- package/dist/table/__tests__/use-table-import.test.mjs +8 -1
- package/dist/table/src/table-column.d.vue.ts +1 -1
- package/dist/table/src/table-column.vue.d.ts +1 -1
- package/dist/table/src/table.d.vue.ts +1 -1
- package/dist/table/src/table.vue.d.ts +1 -1
- package/dist/tabs/src/tab-pane.d.vue.ts +1 -1
- package/dist/tabs/src/tab-pane.vue.d.ts +1 -1
- package/dist/tabs/src/tabs.d.vue.ts +2 -2
- package/dist/tabs/src/tabs.vue.d.ts +2 -2
- package/dist/tooltip/index.d.ts +7 -7
- package/dist/tooltip/src/tooltip.d.vue.ts +7 -7
- package/dist/tooltip/src/tooltip.vue.d.ts +7 -7
- package/dist/tree/src/tree.d.vue.ts +1 -1
- package/dist/tree/src/tree.vue.d.ts +1 -1
- package/dist/tree-select/src/tree-select.d.vue.ts +3 -3
- package/dist/tree-select/src/tree-select.vue.d.ts +3 -3
- package/dist/upload/src/upload.d.vue.ts +1 -1
- package/dist/upload/src/upload.vue.d.ts +1 -1
- package/package.json +8 -5
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import 'highlight.js/styles/atom-one-dark.css';
|
|
2
|
+
declare var __VLS_1: {}, __VLS_15: {}, __VLS_17: {}, __VLS_55: {};
|
|
3
|
+
type __VLS_Slots = {} & {
|
|
4
|
+
avatar?: (props: typeof __VLS_1) => any;
|
|
5
|
+
} & {
|
|
6
|
+
header?: (props: typeof __VLS_15) => any;
|
|
7
|
+
} & {
|
|
8
|
+
default?: (props: typeof __VLS_17) => any;
|
|
9
|
+
} & {
|
|
10
|
+
footer?: (props: typeof __VLS_55) => any;
|
|
11
|
+
};
|
|
12
|
+
declare const __VLS_component: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
13
|
+
readonly content: {
|
|
14
|
+
readonly type: StringConstructor;
|
|
15
|
+
readonly default: "";
|
|
16
|
+
};
|
|
17
|
+
readonly markdown: {
|
|
18
|
+
readonly type: BooleanConstructor;
|
|
19
|
+
readonly default: true;
|
|
20
|
+
};
|
|
21
|
+
readonly role: {
|
|
22
|
+
readonly type: import("vue").PropType<"user" | "assistant" | "system">;
|
|
23
|
+
readonly default: "assistant";
|
|
24
|
+
};
|
|
25
|
+
readonly placement: {
|
|
26
|
+
readonly type: import("vue").PropType<"start" | "end">;
|
|
27
|
+
};
|
|
28
|
+
readonly shape: {
|
|
29
|
+
readonly type: import("vue").PropType<"round" | "corner">;
|
|
30
|
+
readonly default: "round";
|
|
31
|
+
};
|
|
32
|
+
readonly variant: {
|
|
33
|
+
readonly type: import("vue").PropType<"filled" | "outlined" | "borderless" | "shadow">;
|
|
34
|
+
readonly default: "filled";
|
|
35
|
+
};
|
|
36
|
+
readonly time: StringConstructor;
|
|
37
|
+
readonly avatar: StringConstructor;
|
|
38
|
+
readonly loading: BooleanConstructor;
|
|
39
|
+
readonly typing: BooleanConstructor;
|
|
40
|
+
readonly citations: {
|
|
41
|
+
readonly type: import("vue").PropType<import("./ai-bubble").AiCitation[]>;
|
|
42
|
+
readonly default: () => never[];
|
|
43
|
+
};
|
|
44
|
+
readonly multimodal: {
|
|
45
|
+
readonly type: import("vue").PropType<import("./ai-bubble").AiMultimodal[]>;
|
|
46
|
+
readonly default: () => never[];
|
|
47
|
+
};
|
|
48
|
+
readonly themeOverrides: {
|
|
49
|
+
readonly type: import("vue").PropType<import("@yh-ui/theme").ComponentThemeVars>;
|
|
50
|
+
readonly default: undefined;
|
|
51
|
+
};
|
|
52
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
53
|
+
readonly content: {
|
|
54
|
+
readonly type: StringConstructor;
|
|
55
|
+
readonly default: "";
|
|
56
|
+
};
|
|
57
|
+
readonly markdown: {
|
|
58
|
+
readonly type: BooleanConstructor;
|
|
59
|
+
readonly default: true;
|
|
60
|
+
};
|
|
61
|
+
readonly role: {
|
|
62
|
+
readonly type: import("vue").PropType<"user" | "assistant" | "system">;
|
|
63
|
+
readonly default: "assistant";
|
|
64
|
+
};
|
|
65
|
+
readonly placement: {
|
|
66
|
+
readonly type: import("vue").PropType<"start" | "end">;
|
|
67
|
+
};
|
|
68
|
+
readonly shape: {
|
|
69
|
+
readonly type: import("vue").PropType<"round" | "corner">;
|
|
70
|
+
readonly default: "round";
|
|
71
|
+
};
|
|
72
|
+
readonly variant: {
|
|
73
|
+
readonly type: import("vue").PropType<"filled" | "outlined" | "borderless" | "shadow">;
|
|
74
|
+
readonly default: "filled";
|
|
75
|
+
};
|
|
76
|
+
readonly time: StringConstructor;
|
|
77
|
+
readonly avatar: StringConstructor;
|
|
78
|
+
readonly loading: BooleanConstructor;
|
|
79
|
+
readonly typing: BooleanConstructor;
|
|
80
|
+
readonly citations: {
|
|
81
|
+
readonly type: import("vue").PropType<import("./ai-bubble").AiCitation[]>;
|
|
82
|
+
readonly default: () => never[];
|
|
83
|
+
};
|
|
84
|
+
readonly multimodal: {
|
|
85
|
+
readonly type: import("vue").PropType<import("./ai-bubble").AiMultimodal[]>;
|
|
86
|
+
readonly default: () => never[];
|
|
87
|
+
};
|
|
88
|
+
readonly themeOverrides: {
|
|
89
|
+
readonly type: import("vue").PropType<import("@yh-ui/theme").ComponentThemeVars>;
|
|
90
|
+
readonly default: undefined;
|
|
91
|
+
};
|
|
92
|
+
}>> & Readonly<{}>, {
|
|
93
|
+
readonly themeOverrides: import("@yh-ui/theme").ComponentThemeVars;
|
|
94
|
+
readonly content: string;
|
|
95
|
+
readonly variant: "filled" | "outlined" | "borderless" | "shadow";
|
|
96
|
+
readonly loading: boolean;
|
|
97
|
+
readonly markdown: boolean;
|
|
98
|
+
readonly role: "user" | "assistant" | "system";
|
|
99
|
+
readonly shape: "round" | "corner";
|
|
100
|
+
readonly typing: boolean;
|
|
101
|
+
readonly citations: import("./ai-bubble").AiCitation[];
|
|
102
|
+
readonly multimodal: import("./ai-bubble").AiMultimodal[];
|
|
103
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
104
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
105
|
+
export default _default;
|
|
106
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
107
|
+
new (): {
|
|
108
|
+
$slots: S;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _vitest = require("vitest");
|
|
4
|
+
var _serverRenderer = require("@vue/server-renderer");
|
|
5
|
+
var _vue = require("vue");
|
|
6
|
+
_vitest.vi.mock("markdown-it", async () => {
|
|
7
|
+
class MockMd {
|
|
8
|
+
inline = {
|
|
9
|
+
ruler: {
|
|
10
|
+
after: _vitest.vi.fn()
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
render(content) {
|
|
14
|
+
return `<p>${content}</p>`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
default: MockMd
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
_vitest.vi.mock("highlight.js", () => ({
|
|
22
|
+
default: {
|
|
23
|
+
getLanguage: () => false,
|
|
24
|
+
highlight: _vitest.vi.fn(),
|
|
25
|
+
highlightAuto: _vitest.vi.fn(() => ({
|
|
26
|
+
value: ""
|
|
27
|
+
}))
|
|
28
|
+
}
|
|
29
|
+
}));
|
|
30
|
+
_vitest.vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
|
|
31
|
+
const {
|
|
32
|
+
default: AiChat
|
|
33
|
+
} = await Promise.resolve().then(() => require("../src/ai-chat.vue"));
|
|
34
|
+
(0, _vitest.describe)("YhAiChat SSR", () => {
|
|
35
|
+
(0, _vitest.it)("should render to string on server", async () => {
|
|
36
|
+
const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiChat));
|
|
37
|
+
(0, _vitest.expect)(html).toContain("yh-ai-chat");
|
|
38
|
+
});
|
|
39
|
+
(0, _vitest.it)("should render content area on server", async () => {
|
|
40
|
+
const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiChat));
|
|
41
|
+
(0, _vitest.expect)(html).toContain("yh-ai-chat__content");
|
|
42
|
+
});
|
|
43
|
+
(0, _vitest.it)("should render footer on server", async () => {
|
|
44
|
+
const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiChat));
|
|
45
|
+
(0, _vitest.expect)(html).toContain("yh-ai-chat__footer");
|
|
46
|
+
});
|
|
47
|
+
(0, _vitest.it)("should render message content on server", async () => {
|
|
48
|
+
const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiChat, {
|
|
49
|
+
messages: [{
|
|
50
|
+
id: "1",
|
|
51
|
+
role: "user",
|
|
52
|
+
content: "SSR hello"
|
|
53
|
+
}]
|
|
54
|
+
}));
|
|
55
|
+
(0, _vitest.expect)(html).toContain("SSR hello");
|
|
56
|
+
});
|
|
57
|
+
(0, _vitest.it)("should render suggestions on server when messages empty", async () => {
|
|
58
|
+
const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiChat, {
|
|
59
|
+
messages: [],
|
|
60
|
+
suggestions: ["Write code", "Translate"]
|
|
61
|
+
}));
|
|
62
|
+
(0, _vitest.expect)(html).toContain("Write code");
|
|
63
|
+
(0, _vitest.expect)(html).toContain("Translate");
|
|
64
|
+
});
|
|
65
|
+
(0, _vitest.it)("should render header with clear button when messages exist on server", async () => {
|
|
66
|
+
const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiChat, {
|
|
67
|
+
messages: [{
|
|
68
|
+
id: "1",
|
|
69
|
+
role: "user",
|
|
70
|
+
content: "hi"
|
|
71
|
+
}]
|
|
72
|
+
}));
|
|
73
|
+
(0, _vitest.expect)(html).toContain("yh-ai-chat__header");
|
|
74
|
+
});
|
|
75
|
+
(0, _vitest.it)("should render loading bubble on server when loading=true", async () => {
|
|
76
|
+
const html = await (0, _serverRenderer.renderToString)((0, _vue.h)(AiChat, {
|
|
77
|
+
loading: true,
|
|
78
|
+
messages: []
|
|
79
|
+
}));
|
|
80
|
+
(0, _vitest.expect)(html).toContain("is-loading");
|
|
81
|
+
});
|
|
82
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { renderToString } from "@vue/server-renderer";
|
|
3
|
+
import { h } from "vue";
|
|
4
|
+
vi.mock("markdown-it", async () => {
|
|
5
|
+
class MockMd {
|
|
6
|
+
inline = {
|
|
7
|
+
ruler: {
|
|
8
|
+
after: vi.fn()
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
render(content) {
|
|
12
|
+
return `<p>${content}</p>`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return { default: MockMd };
|
|
16
|
+
});
|
|
17
|
+
vi.mock("highlight.js", () => ({
|
|
18
|
+
default: {
|
|
19
|
+
getLanguage: () => false,
|
|
20
|
+
highlight: vi.fn(),
|
|
21
|
+
highlightAuto: vi.fn(() => ({ value: "" }))
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
|
|
25
|
+
const { default: AiChat } = await import("../src/ai-chat.vue");
|
|
26
|
+
describe("YhAiChat SSR", () => {
|
|
27
|
+
it("should render to string on server", async () => {
|
|
28
|
+
const html = await renderToString(h(AiChat));
|
|
29
|
+
expect(html).toContain("yh-ai-chat");
|
|
30
|
+
});
|
|
31
|
+
it("should render content area on server", async () => {
|
|
32
|
+
const html = await renderToString(h(AiChat));
|
|
33
|
+
expect(html).toContain("yh-ai-chat__content");
|
|
34
|
+
});
|
|
35
|
+
it("should render footer on server", async () => {
|
|
36
|
+
const html = await renderToString(h(AiChat));
|
|
37
|
+
expect(html).toContain("yh-ai-chat__footer");
|
|
38
|
+
});
|
|
39
|
+
it("should render message content on server", async () => {
|
|
40
|
+
const html = await renderToString(
|
|
41
|
+
h(AiChat, {
|
|
42
|
+
messages: [{ id: "1", role: "user", content: "SSR hello" }]
|
|
43
|
+
})
|
|
44
|
+
);
|
|
45
|
+
expect(html).toContain("SSR hello");
|
|
46
|
+
});
|
|
47
|
+
it("should render suggestions on server when messages empty", async () => {
|
|
48
|
+
const html = await renderToString(
|
|
49
|
+
h(AiChat, {
|
|
50
|
+
messages: [],
|
|
51
|
+
suggestions: ["Write code", "Translate"]
|
|
52
|
+
})
|
|
53
|
+
);
|
|
54
|
+
expect(html).toContain("Write code");
|
|
55
|
+
expect(html).toContain("Translate");
|
|
56
|
+
});
|
|
57
|
+
it("should render header with clear button when messages exist on server", async () => {
|
|
58
|
+
const html = await renderToString(
|
|
59
|
+
h(AiChat, {
|
|
60
|
+
messages: [{ id: "1", role: "user", content: "hi" }]
|
|
61
|
+
})
|
|
62
|
+
);
|
|
63
|
+
expect(html).toContain("yh-ai-chat__header");
|
|
64
|
+
});
|
|
65
|
+
it("should render loading bubble on server when loading=true", async () => {
|
|
66
|
+
const html = await renderToString(h(AiChat, { loading: true, messages: [] }));
|
|
67
|
+
expect(html).toContain("is-loading");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _vitest = require("vitest");
|
|
4
|
+
var _testUtils = require("@vue/test-utils");
|
|
5
|
+
_vitest.vi.mock("markdown-it", async () => {
|
|
6
|
+
class MockMd {
|
|
7
|
+
inline = {
|
|
8
|
+
ruler: {
|
|
9
|
+
after: _vitest.vi.fn()
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
render(content) {
|
|
13
|
+
return `<p>${content}</p>`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
default: MockMd
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
_vitest.vi.mock("highlight.js", () => ({
|
|
21
|
+
default: {
|
|
22
|
+
getLanguage: () => false,
|
|
23
|
+
highlight: _vitest.vi.fn(),
|
|
24
|
+
highlightAuto: _vitest.vi.fn(() => ({
|
|
25
|
+
value: ""
|
|
26
|
+
}))
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
_vitest.vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
|
|
30
|
+
const {
|
|
31
|
+
default: AiChat
|
|
32
|
+
} = await Promise.resolve().then(() => require("../src/ai-chat.vue"));
|
|
33
|
+
const makeMsg = (id, role, content, status) => ({
|
|
34
|
+
id,
|
|
35
|
+
role,
|
|
36
|
+
content,
|
|
37
|
+
...(status ? {
|
|
38
|
+
status
|
|
39
|
+
} : {})
|
|
40
|
+
});
|
|
41
|
+
(0, _vitest.describe)("YhAiChat", () => {
|
|
42
|
+
(0, _vitest.it)("should render with base class", () => {
|
|
43
|
+
const wrapper = (0, _testUtils.mount)(AiChat);
|
|
44
|
+
(0, _vitest.expect)(wrapper.find(".yh-ai-chat").exists()).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
(0, _vitest.it)("should render content area", () => {
|
|
47
|
+
const wrapper = (0, _testUtils.mount)(AiChat);
|
|
48
|
+
(0, _vitest.expect)(wrapper.find(".yh-ai-chat__content").exists()).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
(0, _vitest.it)("should render footer with sender by default", () => {
|
|
51
|
+
const wrapper = (0, _testUtils.mount)(AiChat);
|
|
52
|
+
(0, _vitest.expect)(wrapper.find(".yh-ai-chat__footer").exists()).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
(0, _vitest.it)("should not render header when no messages and no header slot", () => {
|
|
55
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
56
|
+
props: {
|
|
57
|
+
messages: []
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
(0, _vitest.expect)(wrapper.find(".yh-ai-chat__header").exists()).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
(0, _vitest.it)("should render header with clear button when messages exist", () => {
|
|
63
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
64
|
+
props: {
|
|
65
|
+
messages: [makeMsg("1", "user", "hello")]
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
(0, _vitest.expect)(wrapper.find(".yh-ai-chat__header").exists()).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
(0, _vitest.it)("should render suggestions when messages are empty", () => {
|
|
71
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
72
|
+
props: {
|
|
73
|
+
messages: [],
|
|
74
|
+
suggestions: ["Help me", "Write code"]
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const buttons = wrapper.findAll(".yh-ai-chat__suggestions .yh-button");
|
|
78
|
+
(0, _vitest.expect)(buttons.length).toBe(2);
|
|
79
|
+
(0, _vitest.expect)(buttons[0].text()).toBe("Help me");
|
|
80
|
+
});
|
|
81
|
+
(0, _vitest.it)("should not render suggestions when messages exist", () => {
|
|
82
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
83
|
+
props: {
|
|
84
|
+
messages: [makeMsg("1", "user", "hi")],
|
|
85
|
+
suggestions: ["Suggestion"]
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
(0, _vitest.expect)(wrapper.find(".yh-ai-chat__suggestions").exists()).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
(0, _vitest.it)("should show loading bubble when loading=true and no messages", () => {
|
|
91
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
92
|
+
props: {
|
|
93
|
+
loading: true,
|
|
94
|
+
messages: []
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
(0, _vitest.expect)(wrapper.html()).toContain("is-loading");
|
|
98
|
+
});
|
|
99
|
+
(0, _vitest.it)("should emit send when suggestion clicked", async () => {
|
|
100
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
101
|
+
props: {
|
|
102
|
+
messages: [],
|
|
103
|
+
suggestions: ["Write me code"]
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
await wrapper.find(".yh-ai-chat__suggestions .yh-button").trigger("click");
|
|
107
|
+
(0, _vitest.expect)(wrapper.emitted("send")).toBeTruthy();
|
|
108
|
+
(0, _vitest.expect)(wrapper.emitted("send")[0][0]).toBe("Write me code");
|
|
109
|
+
});
|
|
110
|
+
(0, _vitest.it)("should emit clear and update:messages on clear button click", async () => {
|
|
111
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
112
|
+
props: {
|
|
113
|
+
messages: [makeMsg("1", "user", "hello")]
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
await wrapper.find(".yh-ai-chat__header .yh-button").trigger("click");
|
|
117
|
+
(0, _vitest.expect)(wrapper.emitted("clear")).toBeTruthy();
|
|
118
|
+
(0, _vitest.expect)(wrapper.emitted("update:messages")).toBeTruthy();
|
|
119
|
+
(0, _vitest.expect)(wrapper.emitted("update:messages")[0][0]).toEqual([]);
|
|
120
|
+
});
|
|
121
|
+
(0, _vitest.it)("should render message content from messages prop", () => {
|
|
122
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
123
|
+
props: {
|
|
124
|
+
messages: [makeMsg("1", "user", "test message content")]
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
(0, _vitest.expect)(wrapper.html()).toContain("test message content");
|
|
128
|
+
});
|
|
129
|
+
(0, _vitest.it)("should render multiple messages", () => {
|
|
130
|
+
const messages = [makeMsg("1", "user", "Hello"), makeMsg("2", "assistant", "Hi there")];
|
|
131
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
132
|
+
props: {
|
|
133
|
+
messages
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
(0, _vitest.expect)(wrapper.html()).toContain("Hello");
|
|
137
|
+
(0, _vitest.expect)(wrapper.html()).toContain("Hi there");
|
|
138
|
+
});
|
|
139
|
+
(0, _vitest.it)("should render header slot", () => {
|
|
140
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
141
|
+
props: {
|
|
142
|
+
messages: [makeMsg("1", "user", "hi")]
|
|
143
|
+
},
|
|
144
|
+
slots: {
|
|
145
|
+
header: '<div class="custom-header">Custom Header</div>'
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
(0, _vitest.expect)(wrapper.find(".custom-header").exists()).toBe(true);
|
|
149
|
+
});
|
|
150
|
+
(0, _vitest.it)("should render sender slot", () => {
|
|
151
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
152
|
+
slots: {
|
|
153
|
+
sender: '<div class="custom-sender">Custom Sender</div>'
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
(0, _vitest.expect)(wrapper.find(".custom-sender").exists()).toBe(true);
|
|
157
|
+
});
|
|
158
|
+
(0, _vitest.it)("should render custom message via message slot", () => {
|
|
159
|
+
const wrapper = (0, _testUtils.mount)(AiChat, {
|
|
160
|
+
props: {
|
|
161
|
+
messages: [makeMsg("1", "user", "any")]
|
|
162
|
+
},
|
|
163
|
+
slots: {
|
|
164
|
+
message: '<div class="custom-msg">Custom Message</div>'
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
(0, _vitest.expect)(wrapper.find(".custom-msg").exists()).toBe(true);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { mount } from "@vue/test-utils";
|
|
3
|
+
vi.mock("markdown-it", async () => {
|
|
4
|
+
class MockMd {
|
|
5
|
+
inline = {
|
|
6
|
+
ruler: {
|
|
7
|
+
after: vi.fn()
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
render(content) {
|
|
11
|
+
return `<p>${content}</p>`;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return { default: MockMd };
|
|
15
|
+
});
|
|
16
|
+
vi.mock("highlight.js", () => ({
|
|
17
|
+
default: {
|
|
18
|
+
getLanguage: () => false,
|
|
19
|
+
highlight: vi.fn(),
|
|
20
|
+
highlightAuto: vi.fn(() => ({ value: "" }))
|
|
21
|
+
}
|
|
22
|
+
}));
|
|
23
|
+
vi.mock("highlight.js/styles/atom-one-dark.css", () => ({}));
|
|
24
|
+
const { default: AiChat } = await import("../src/ai-chat.vue");
|
|
25
|
+
const makeMsg = (id, role, content, status) => ({ id, role, content, ...status ? { status } : {} });
|
|
26
|
+
describe("YhAiChat", () => {
|
|
27
|
+
it("should render with base class", () => {
|
|
28
|
+
const wrapper = mount(AiChat);
|
|
29
|
+
expect(wrapper.find(".yh-ai-chat").exists()).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it("should render content area", () => {
|
|
32
|
+
const wrapper = mount(AiChat);
|
|
33
|
+
expect(wrapper.find(".yh-ai-chat__content").exists()).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it("should render footer with sender by default", () => {
|
|
36
|
+
const wrapper = mount(AiChat);
|
|
37
|
+
expect(wrapper.find(".yh-ai-chat__footer").exists()).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
it("should not render header when no messages and no header slot", () => {
|
|
40
|
+
const wrapper = mount(AiChat, { props: { messages: [] } });
|
|
41
|
+
expect(wrapper.find(".yh-ai-chat__header").exists()).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
it("should render header with clear button when messages exist", () => {
|
|
44
|
+
const wrapper = mount(AiChat, {
|
|
45
|
+
props: { messages: [makeMsg("1", "user", "hello")] }
|
|
46
|
+
});
|
|
47
|
+
expect(wrapper.find(".yh-ai-chat__header").exists()).toBe(true);
|
|
48
|
+
});
|
|
49
|
+
it("should render suggestions when messages are empty", () => {
|
|
50
|
+
const wrapper = mount(AiChat, {
|
|
51
|
+
props: { messages: [], suggestions: ["Help me", "Write code"] }
|
|
52
|
+
});
|
|
53
|
+
const buttons = wrapper.findAll(".yh-ai-chat__suggestions .yh-button");
|
|
54
|
+
expect(buttons.length).toBe(2);
|
|
55
|
+
expect(buttons[0].text()).toBe("Help me");
|
|
56
|
+
});
|
|
57
|
+
it("should not render suggestions when messages exist", () => {
|
|
58
|
+
const wrapper = mount(AiChat, {
|
|
59
|
+
props: {
|
|
60
|
+
messages: [makeMsg("1", "user", "hi")],
|
|
61
|
+
suggestions: ["Suggestion"]
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
expect(wrapper.find(".yh-ai-chat__suggestions").exists()).toBe(false);
|
|
65
|
+
});
|
|
66
|
+
it("should show loading bubble when loading=true and no messages", () => {
|
|
67
|
+
const wrapper = mount(AiChat, { props: { loading: true, messages: [] } });
|
|
68
|
+
expect(wrapper.html()).toContain("is-loading");
|
|
69
|
+
});
|
|
70
|
+
it("should emit send when suggestion clicked", async () => {
|
|
71
|
+
const wrapper = mount(AiChat, {
|
|
72
|
+
props: { messages: [], suggestions: ["Write me code"] }
|
|
73
|
+
});
|
|
74
|
+
await wrapper.find(".yh-ai-chat__suggestions .yh-button").trigger("click");
|
|
75
|
+
expect(wrapper.emitted("send")).toBeTruthy();
|
|
76
|
+
expect(wrapper.emitted("send")[0][0]).toBe("Write me code");
|
|
77
|
+
});
|
|
78
|
+
it("should emit clear and update:messages on clear button click", async () => {
|
|
79
|
+
const wrapper = mount(AiChat, {
|
|
80
|
+
props: { messages: [makeMsg("1", "user", "hello")] }
|
|
81
|
+
});
|
|
82
|
+
await wrapper.find(".yh-ai-chat__header .yh-button").trigger("click");
|
|
83
|
+
expect(wrapper.emitted("clear")).toBeTruthy();
|
|
84
|
+
expect(wrapper.emitted("update:messages")).toBeTruthy();
|
|
85
|
+
expect(wrapper.emitted("update:messages")[0][0]).toEqual([]);
|
|
86
|
+
});
|
|
87
|
+
it("should render message content from messages prop", () => {
|
|
88
|
+
const wrapper = mount(AiChat, {
|
|
89
|
+
props: { messages: [makeMsg("1", "user", "test message content")] }
|
|
90
|
+
});
|
|
91
|
+
expect(wrapper.html()).toContain("test message content");
|
|
92
|
+
});
|
|
93
|
+
it("should render multiple messages", () => {
|
|
94
|
+
const messages = [makeMsg("1", "user", "Hello"), makeMsg("2", "assistant", "Hi there")];
|
|
95
|
+
const wrapper = mount(AiChat, { props: { messages } });
|
|
96
|
+
expect(wrapper.html()).toContain("Hello");
|
|
97
|
+
expect(wrapper.html()).toContain("Hi there");
|
|
98
|
+
});
|
|
99
|
+
it("should render header slot", () => {
|
|
100
|
+
const wrapper = mount(AiChat, {
|
|
101
|
+
props: { messages: [makeMsg("1", "user", "hi")] },
|
|
102
|
+
slots: { header: '<div class="custom-header">Custom Header</div>' }
|
|
103
|
+
});
|
|
104
|
+
expect(wrapper.find(".custom-header").exists()).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
it("should render sender slot", () => {
|
|
107
|
+
const wrapper = mount(AiChat, {
|
|
108
|
+
slots: { sender: '<div class="custom-sender">Custom Sender</div>' }
|
|
109
|
+
});
|
|
110
|
+
expect(wrapper.find(".custom-sender").exists()).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
it("should render custom message via message slot", () => {
|
|
113
|
+
const wrapper = mount(AiChat, {
|
|
114
|
+
props: { messages: [makeMsg("1", "user", "any")] },
|
|
115
|
+
slots: {
|
|
116
|
+
message: '<div class="custom-msg">Custom Message</div>'
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
expect(wrapper.find(".custom-msg").exists()).toBe(true);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
YhAiChat: true
|
|
8
|
+
};
|
|
9
|
+
module.exports = exports.YhAiChat = void 0;
|
|
10
|
+
var _utils = require("@yh-ui/utils");
|
|
11
|
+
var _aiChat = _interopRequireDefault(require("./src/ai-chat.vue"));
|
|
12
|
+
var _aiChat2 = require("./src/ai-chat.cjs");
|
|
13
|
+
Object.keys(_aiChat2).forEach(function (key) {
|
|
14
|
+
if (key === "default" || key === "__esModule") return;
|
|
15
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
16
|
+
if (key in exports && exports[key] === _aiChat2[key]) return;
|
|
17
|
+
Object.defineProperty(exports, key, {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () {
|
|
20
|
+
return _aiChat2[key];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
|
+
const YhAiChat = exports.YhAiChat = (0, _utils.withInstall)(_aiChat.default);
|
|
26
|
+
module.exports = YhAiChat;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.aiChatProps = exports.aiChatEmits = void 0;
|
|
7
|
+
const aiChatProps = exports.aiChatProps = {
|
|
8
|
+
/**
|
|
9
|
+
* @description 消息列表
|
|
10
|
+
*/
|
|
11
|
+
messages: {
|
|
12
|
+
type: Array,
|
|
13
|
+
default: () => []
|
|
14
|
+
},
|
|
15
|
+
/**
|
|
16
|
+
* @description 是否全域加载中 (通常指整个对话框的加载态)
|
|
17
|
+
*/
|
|
18
|
+
loading: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
default: false
|
|
21
|
+
},
|
|
22
|
+
/**
|
|
23
|
+
* @description 默认建议提示词
|
|
24
|
+
*/
|
|
25
|
+
suggestions: {
|
|
26
|
+
type: Array,
|
|
27
|
+
default: () => []
|
|
28
|
+
},
|
|
29
|
+
/**
|
|
30
|
+
* @description 主题覆盖变量
|
|
31
|
+
*/
|
|
32
|
+
themeOverrides: {
|
|
33
|
+
type: Object,
|
|
34
|
+
default: void 0
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const aiChatEmits = exports.aiChatEmits = {
|
|
38
|
+
send: message => typeof message === "string",
|
|
39
|
+
"update:messages": messages => Array.isArray(messages),
|
|
40
|
+
clear: () => true
|
|
41
|
+
};
|