coze-chat-widget 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.
- package/README.md +79 -0
- package/dist/coze-widget.css +1 -0
- package/dist/coze-widget.js +1879 -0
- package/dist/coze-widget.js.map +1 -0
- package/dist/coze-widget.umd.cjs +87 -0
- package/dist/coze-widget.umd.cjs.map +1 -0
- package/package.json +46 -0
- package/types/index.d.ts +15 -0
- package/types/theme.d.ts +35 -0
package/README.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# coze-chat-widget
|
|
2
|
+
|
|
3
|
+
Coze 问答 AI 对话弹窗的构建产物包,可在任意网页或前端项目中通过 Script 或 ESM 引入,无需单独部署前端工程。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install coze-chat-widget
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 使用方式
|
|
12
|
+
|
|
13
|
+
### 方式一:Script 标签(UMD)
|
|
14
|
+
|
|
15
|
+
适用于任意 HTML 页面或非构建型项目。需同时引入 Vue 3 与本包(UMD 依赖全局 `Vue`):
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
|
|
19
|
+
<link rel="stylesheet" href="./node_modules/coze-chat-widget/dist/coze-widget.css">
|
|
20
|
+
<script src="./node_modules/coze-chat-widget/dist/coze-widget.umd.cjs"></script>
|
|
21
|
+
<script>
|
|
22
|
+
CozeWidget.init({
|
|
23
|
+
apiUrl: 'https://your-api.com/api',
|
|
24
|
+
userId: 'user-123',
|
|
25
|
+
theme: {
|
|
26
|
+
primaryColor: '#1890ff',
|
|
27
|
+
position: 'bottom-right',
|
|
28
|
+
headerTitle: '智能助手'
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
</script>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 方式二:ES Module
|
|
35
|
+
|
|
36
|
+
在支持 ESM 的项目中:
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
import 'coze-chat-widget/dist/coze-widget.css';
|
|
40
|
+
import CozeWidget from 'coze-chat-widget';
|
|
41
|
+
|
|
42
|
+
CozeWidget.init({
|
|
43
|
+
apiUrl: 'https://your-api.com/api',
|
|
44
|
+
theme: { position: 'bottom-right' }
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 类型(TypeScript)
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import type { WidgetConfig, ThemeConfig } from 'coze-chat-widget';
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 配置说明
|
|
55
|
+
|
|
56
|
+
| 参数 | 类型 | 说明 |
|
|
57
|
+
|------|------|------|
|
|
58
|
+
| `apiUrl` | string | 必填,后端 API 根地址(如 `https://your-api.com/api`) |
|
|
59
|
+
| `userId` | string | 可选,用户标识,默认 `anonymous` |
|
|
60
|
+
| `theme` | ThemeConfig | 可选,主题与布局配置 |
|
|
61
|
+
|
|
62
|
+
更多主题选项见主仓库 [主题自定义指南](https://github.com/your-repo/docs/blob/main/docs/主题自定义指南.md)。
|
|
63
|
+
|
|
64
|
+
## API
|
|
65
|
+
|
|
66
|
+
- `CozeWidget.init(config)`:初始化并挂载弹窗
|
|
67
|
+
- `CozeWidget.destroy()`:销毁弹窗实例
|
|
68
|
+
- `CozeWidget.openWithQuestion(question)`:打开弹窗并预填问题
|
|
69
|
+
|
|
70
|
+
## 构建说明(维护者)
|
|
71
|
+
|
|
72
|
+
本包由主仓库 `frontend` 的 Widget 构建产出复制而来。发布前请在**仓库根目录**执行:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npm run build:widget:pkg
|
|
76
|
+
cd packages/coze-chat-widget && npm publish
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
确保 `dist/` 内包含 `coze-widget.js`、`coze-widget.umd.cjs`、`coze-widget.css`。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.chat-wrapper[data-v-dba9b35f]{position:relative}.floating-button[data-v-dba9b35f]{position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;border:none;font-size:24px;cursor:pointer;box-shadow:0 4px 12px #00000026;transition:all .2s ease;z-index:calc(var(--coze-z-index) - 1);display:flex;align-items:center;justify-content:center;color:#fff}.floating-button[data-v-dba9b35f]:hover{box-shadow:0 6px 16px #0003;transform:scale(1.05)}.floating-button[data-v-dba9b35f]:active{transform:scale(.95)}.chat-container[data-v-dba9b35f]{position:fixed;bottom:24px;right:24px;display:flex;flex-direction:column;border-radius:16px;box-shadow:0 10px 40px #0000001f;z-index:var(--coze-z-index, 9999);overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.chat-window-enter-active[data-v-dba9b35f],.chat-window-leave-active[data-v-dba9b35f]{transition:all .25s ease-out}.chat-window-enter-from[data-v-dba9b35f],.chat-window-leave-to[data-v-dba9b35f]{opacity:0;transform:translateY(10px) scale(.95)}.chat-header[data-v-dba9b35f]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;color:#fff;border-bottom:1px solid rgba(255,255,255,.1);min-height:56px}.chat-header-left[data-v-dba9b35f]{display:flex;align-items:center;gap:12px;flex:1}.chat-logo[data-v-dba9b35f]{-o-object-fit:contain;object-fit:contain;border-radius:8px;box-shadow:0 2px 4px #0000001a}.chat-title[data-v-dba9b35f]{font-size:16px;font-weight:600}.chat-header-actions[data-v-dba9b35f]{display:flex;align-items:center;gap:6px}.chat-action-button[data-v-dba9b35f]{width:var(--coze-action-button-size, 36px);height:var(--coze-action-button-size, 36px);border:none;border-radius:4px;background:transparent;color:#fff;font-size:var(--coze-action-button-font-size, 24px);cursor:pointer;transition:opacity .15s ease;display:flex;align-items:center;justify-content:center}.chat-action-button[data-v-dba9b35f]:hover{opacity:.8}.chat-action-button[data-v-dba9b35f]:active{opacity:.6}.chat-close-button[data-v-dba9b35f]{font-size:var(--coze-close-button-font-size, 28px);line-height:1}.chat-messages[data-v-dba9b35f]{flex:1;overflow-y:auto;overflow-x:hidden;padding:16px;min-height:0;scroll-behavior:smooth}.chat-messages-scrollbar[data-v-dba9b35f]::-webkit-scrollbar{width:6px}.chat-messages-scrollbar[data-v-dba9b35f]::-webkit-scrollbar-track{background:transparent}.chat-messages-scrollbar[data-v-dba9b35f]::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:3px}.chat-messages-scrollbar[data-v-dba9b35f]::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.3)}.message-list-container[data-v-dba9b35f]{display:flex;flex-direction:column;gap:12px}.empty-state[data-v-dba9b35f]{text-align:center;padding:48px 20px;font-size:14px}.message-item[data-v-dba9b35f]{display:flex;gap:12px}.message-user[data-v-dba9b35f]{flex-direction:row-reverse}.message-avatar[data-v-dba9b35f]{width:var(--coze-avatar-size, 40px);height:var(--coze-avatar-size, 40px);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--coze-avatar-font-size, 20px);flex-shrink:0}.message-content-wrapper[data-v-dba9b35f]{flex:1;display:flex;flex-direction:column;gap:4px;max-width:75%}.message-content-wrapper-user[data-v-dba9b35f]{align-items:flex-end}.message-content-wrapper-assistant[data-v-dba9b35f]{align-items:flex-start}.message-content[data-v-dba9b35f]{padding:10px 16px;border-radius:8px;word-wrap:break-word;word-break:break-word;line-height:1.6;font-size:14px}.message-content-user[data-v-dba9b35f]{color:#fff;border-bottom-right-radius:2px}.message-content-assistant[data-v-dba9b35f]{border:1px solid;border-bottom-left-radius:2px}.message-actions[data-v-dba9b35f]{display:flex;gap:4px;margin-top:4px}.message-expand-button[data-v-dba9b35f]{padding:4px 8px;border:none;border-radius:4px;background:transparent;color:color-mix(in srgb,var(--coze-text-color, #333333) 60%,transparent);font-size:14px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.message-expand-button[data-v-dba9b35f]:hover{background-color:color-mix(in srgb,var(--coze-text-color, #333333) 10%,transparent);color:var(--coze-primary-color, #007bff)}.message-expand-button[data-v-dba9b35f]:active{transform:scale(.95)}.message-timestamp[data-v-dba9b35f]{font-size:11px;padding:0 4px}.message-loading[data-v-dba9b35f]{justify-content:flex-start;align-items:center;gap:12px}.loading-animation[data-v-dba9b35f]{display:flex;gap:6px;align-items:center;padding:10px 16px;border-radius:8px;border:1px solid}.loading-dot[data-v-dba9b35f]{width:8px;height:8px;border-radius:50%;animation:loadingDot-dba9b35f 1.4s infinite ease-in-out}.message-list-enter-active[data-v-dba9b35f],.message-list-leave-active[data-v-dba9b35f]{transition:all .2s ease-out}.message-list-enter-from[data-v-dba9b35f]{opacity:0;transform:translateY(5px)}.message-list-leave-to[data-v-dba9b35f]{opacity:0;transform:translate(5px)}@keyframes loadingDot-dba9b35f{0%,80%,to{transform:scale(.8);opacity:.5}40%{transform:scale(1);opacity:1}}.message-content-assistant[data-v-dba9b35f] p{margin:0 0 8px}.message-content-assistant[data-v-dba9b35f] p:last-child{margin-bottom:0}.message-content-assistant[data-v-dba9b35f] h1,.message-content-assistant[data-v-dba9b35f] h2,.message-content-assistant[data-v-dba9b35f] h3,.message-content-assistant[data-v-dba9b35f] h4,.message-content-assistant[data-v-dba9b35f] h5,.message-content-assistant[data-v-dba9b35f] h6{margin:12px 0 8px;font-weight:600;color:var(--coze-text-color, #333333)}.message-content-assistant[data-v-dba9b35f] ul,.message-content-assistant[data-v-dba9b35f] ol{margin:8px 0;padding-left:24px}.message-content-assistant[data-v-dba9b35f] li{margin:4px 0}.message-content-assistant[data-v-dba9b35f] code{background:color-mix(in srgb,var(--coze-bg-color, #ffffff) 85%,var(--coze-text-color, #333333));padding:2px 6px;border-radius:4px;font-family:Consolas,Monaco,monospace;font-size:13px;color:var(--coze-primary-color, #007bff)}.message-content-assistant[data-v-dba9b35f] pre{background:#282c34;color:#abb2bf;padding:12px;border-radius:8px;overflow-x:auto;margin:8px 0;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:1.5}.message-content-assistant[data-v-dba9b35f] pre code{background:transparent;padding:0;color:inherit}.message-content-assistant[data-v-dba9b35f] blockquote{border-left:4px solid var(--coze-primary-color, #007bff);padding-left:12px;margin:8px 0;color:color-mix(in srgb,var(--coze-text-color, #333333) 70%,transparent);font-style:italic}.message-content-assistant[data-v-dba9b35f] a{color:var(--coze-primary-color, #007bff);text-decoration:none}.message-content-assistant[data-v-dba9b35f] a:hover{text-decoration:underline}.message-content-assistant[data-v-dba9b35f] strong{font-weight:600}.message-content-assistant[data-v-dba9b35f] em{font-style:italic}.chat-footer[data-v-dba9b35f]{display:flex;gap:8px;padding:12px 16px;border-top:1px solid;align-items:center}.chat-input[data-v-dba9b35f]{flex:1;padding:10px 16px;border:1px solid;border-radius:8px;font-size:14px;outline:none;transition:all .15s ease;font-family:inherit;background-color:var(--coze-bg-color, #ffffff)}.chat-input[data-v-dba9b35f]:focus{border-color:var(--coze-primary-color, #007bff);box-shadow:0 0 0 3px color-mix(in srgb,var(--coze-primary-color, #007bff) 10%,transparent)}.chat-input[data-v-dba9b35f]:disabled{background-color:color-mix(in srgb,var(--coze-bg-color, #ffffff) 95%,var(--coze-text-color, #333333));cursor:not-allowed;opacity:.6}.chat-input[data-v-dba9b35f]::-moz-placeholder{color:color-mix(in srgb,var(--coze-text-color, #333333) 60%,transparent)}.chat-input[data-v-dba9b35f]::placeholder{color:color-mix(in srgb,var(--coze-text-color, #333333) 60%,transparent)}.chat-send-button[data-v-dba9b35f]{padding:10px 20px;border:none;border-radius:8px;color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .15s ease;white-space:nowrap}.chat-send-button[data-v-dba9b35f]:hover:not(:disabled){opacity:.9}.chat-send-button[data-v-dba9b35f]:active:not(:disabled){opacity:.8}.chat-send-button[data-v-dba9b35f]:disabled{opacity:.5;cursor:not-allowed}@media (max-width: 480px){.chat-container[data-v-dba9b35f]{bottom:0!important;right:0!important;left:0!important;width:100vw!important;height:100vh!important;border-radius:0!important;max-width:none!important;max-height:none!important}.floating-button[data-v-dba9b35f]{bottom:16px!important;right:16px!important;width:48px!important;height:48px!important;font-size:20px!important}.message-content-wrapper[data-v-dba9b35f]{max-width:85%!important}.chat-header[data-v-dba9b35f]{padding:12px 16px!important;min-height:52px!important}.chat-title[data-v-dba9b35f]{font-size:15px!important}.chat-messages[data-v-dba9b35f]{padding:12px!important}.chat-footer[data-v-dba9b35f]{padding:10px 12px!important}}.drawer-overlay[data-v-dba9b35f]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:calc(var(--coze-z-index, 9999) + 1);display:flex;align-items:center;justify-content:center;padding:20px}.drawer-content[data-v-dba9b35f]{background-color:var(--coze-bg-color, #ffffff);border-radius:16px;box-shadow:0 20px 60px #0000004d;max-width:800px;width:100%;max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.drawer-header[data-v-dba9b35f]{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--coze-border-color, #dee2e6);background-color:var(--coze-primary-color, #007bff);color:#fff}.drawer-title[data-v-dba9b35f]{margin:0;font-size:18px;font-weight:600}.drawer-close-button[data-v-dba9b35f]{width:32px;height:32px;border:none;border-radius:4px;background:rgba(255,255,255,.2);color:#fff;font-size:24px;line-height:1;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.drawer-close-button[data-v-dba9b35f]:hover{background:rgba(255,255,255,.3);transform:scale(1.1)}.drawer-close-button[data-v-dba9b35f]:active{transform:scale(.95)}.drawer-body[data-v-dba9b35f]{flex:1;overflow-y:auto;padding:24px;color:var(--coze-text-color, #333333);line-height:1.8;font-size:15px}.drawer-body[data-v-dba9b35f]::-webkit-scrollbar{width:8px}.drawer-body[data-v-dba9b35f]::-webkit-scrollbar-track{background:transparent}.drawer-body[data-v-dba9b35f]::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:4px}.drawer-body[data-v-dba9b35f]::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.3)}.drawer-body[data-v-dba9b35f] p{margin:0 0 16px}.drawer-body[data-v-dba9b35f] p:last-child{margin-bottom:0}.drawer-body[data-v-dba9b35f] h1,.drawer-body[data-v-dba9b35f] h2,.drawer-body[data-v-dba9b35f] h3,.drawer-body[data-v-dba9b35f] h4,.drawer-body[data-v-dba9b35f] h5,.drawer-body[data-v-dba9b35f] h6{margin:20px 0 12px;font-weight:600;color:var(--coze-text-color, #333333)}.drawer-body[data-v-dba9b35f] h1{font-size:24px}.drawer-body[data-v-dba9b35f] h2{font-size:20px}.drawer-body[data-v-dba9b35f] h3{font-size:18px}.drawer-body[data-v-dba9b35f] ul,.drawer-body[data-v-dba9b35f] ol{margin:12px 0;padding-left:28px}.drawer-body[data-v-dba9b35f] li{margin:8px 0}.drawer-body[data-v-dba9b35f] code{background:color-mix(in srgb,var(--coze-bg-color, #ffffff) 85%,var(--coze-text-color, #333333));padding:3px 8px;border-radius:4px;font-family:Consolas,Monaco,monospace;font-size:14px;color:var(--coze-primary-color, #007bff)}.drawer-body[data-v-dba9b35f] pre{background:#282c34;color:#abb2bf;padding:16px;border-radius:8px;overflow-x:auto;margin:16px 0;font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.6}.drawer-body[data-v-dba9b35f] pre code{background:transparent;padding:0;color:inherit}.drawer-body[data-v-dba9b35f] blockquote{border-left:4px solid var(--coze-primary-color, #007bff);padding-left:16px;margin:16px 0;color:color-mix(in srgb,var(--coze-text-color, #333333) 70%,transparent);font-style:italic}.drawer-body[data-v-dba9b35f] a{color:var(--coze-primary-color, #007bff);text-decoration:none}.drawer-body[data-v-dba9b35f] a:hover{text-decoration:underline}.drawer-body[data-v-dba9b35f] strong{font-weight:600}.drawer-body[data-v-dba9b35f] em{font-style:italic}.drawer-body[data-v-dba9b35f] table{width:100%;border-collapse:collapse;margin:16px 0}.drawer-body[data-v-dba9b35f] th,.drawer-body[data-v-dba9b35f] td{border:1px solid var(--coze-border-color, #dee2e6);padding:8px 12px;text-align:left}.drawer-body[data-v-dba9b35f] th{background-color:color-mix(in srgb,var(--coze-bg-color, #ffffff) 90%,var(--coze-text-color, #333333));font-weight:600}.drawer-enter-active[data-v-dba9b35f],.drawer-leave-active[data-v-dba9b35f]{transition:all .3s ease}.drawer-enter-from[data-v-dba9b35f],.drawer-leave-to[data-v-dba9b35f]{opacity:0}.drawer-enter-from .drawer-content[data-v-dba9b35f],.drawer-leave-to .drawer-content[data-v-dba9b35f]{transform:scale(.9) translateY(20px)}.drawer-enter-to .drawer-content[data-v-dba9b35f],.drawer-leave-from .drawer-content[data-v-dba9b35f]{transform:scale(1) translateY(0)}.drawer-content[data-v-dba9b35f]{transition:transform .3s ease}.chat-widget-wrapper[data-v-4b054758]{position:relative;isolation:isolate}:root{--coze-primary-color: #007bff;--coze-bg-color: #ffffff;--coze-text-color: #333333;--coze-button-color: #007bff;--coze-border-color: #dee2e6;--coze-width: 400px;--coze-height: 75vh;--coze-border-radius: 12px;--coze-shadow: 0 4px 12px rgba(0, 0, 0, .15);--coze-z-index: 9999;--coze-action-button-size: 36px;--coze-action-button-font-size: 24px;--coze-close-button-font-size: 28px;--coze-avatar-size: 40px;--coze-avatar-font-size: 20px;--coze-user-avatar-opacity: 20%;--coze-assistant-avatar-opacity: 10%}
|