@n8n/chat 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.cjs +10 -0
  3. package/.np-config.json +5 -0
  4. package/.storybook/main.ts +27 -0
  5. package/.storybook/preview.scss +4 -0
  6. package/.storybook/preview.ts +16 -0
  7. package/.vscode/extensions.json +3 -0
  8. package/build.config.js +21 -0
  9. package/env.d.ts +1 -0
  10. package/index.html +13 -0
  11. package/package.json +2 -34
  12. package/resources/images/fullscreen.png +0 -0
  13. package/resources/images/windowed.png +0 -0
  14. package/resources/workflow-manual.json +238 -0
  15. package/resources/workflow.json +119 -0
  16. package/scripts/pack.js +11 -0
  17. package/scripts/postbuild.js +36 -0
  18. package/src/__stories__/App.stories.ts +43 -0
  19. package/src/__tests__/index.spec.ts +218 -0
  20. package/src/__tests__/utils/create.ts +16 -0
  21. package/src/__tests__/utils/fetch.ts +18 -0
  22. package/src/__tests__/utils/selectors.ts +53 -0
  23. package/src/api/generic.ts +63 -0
  24. package/src/api/message.ts +37 -0
  25. package/src/components/Button.vue +41 -0
  26. package/src/components/ChatWindow.vue +125 -0
  27. package/{components → src/components}/GetStarted.vue +7 -7
  28. package/{components → src/components}/GetStartedFooter.vue +2 -2
  29. package/{components → src/components}/Input.vue +40 -35
  30. package/src/components/Layout.vue +82 -0
  31. package/src/components/Message.vue +97 -0
  32. package/src/components/MessageTyping.vue +109 -0
  33. package/{components → src/components}/MessagesList.vue +4 -4
  34. package/{components → src/components}/PoweredBy.vue +7 -6
  35. package/src/composables/useChat.ts +7 -0
  36. package/src/composables/useI18n.ts +16 -0
  37. package/src/composables/useOptions.ts +11 -0
  38. package/src/constants/defaults.ts +29 -0
  39. package/{constants/localStorage.mjs → src/constants/localStorage.ts} +1 -1
  40. package/src/constants/symbols.ts +8 -0
  41. package/src/css/_tokens.scss +36 -0
  42. package/src/css/index.scss +1 -0
  43. package/src/event-buses/chatEventBus.ts +3 -0
  44. package/src/index.ts +42 -0
  45. package/src/main.scss +5 -0
  46. package/src/plugins/chat.ts +105 -0
  47. package/src/types/chat.ts +12 -0
  48. package/src/types/messages.ts +6 -0
  49. package/src/types/options.ts +28 -0
  50. package/src/types/webhook.ts +17 -0
  51. package/src/utils/event-bus.ts +51 -0
  52. package/src/utils/mount.ts +16 -0
  53. package/tsconfig.json +27 -0
  54. package/vite.config.ts +53 -0
  55. package/vitest.config.ts +20 -0
  56. package/__stories__/App.stories.d.ts +0 -16
  57. package/__stories__/App.stories.js +0 -38
  58. package/__stories__/App.stories.mjs +0 -32
  59. package/__tests__/index.spec.d.ts +0 -1
  60. package/__tests__/index.spec.js +0 -146
  61. package/__tests__/index.spec.mjs +0 -172
  62. package/__tests__/setup.js +0 -3
  63. package/__tests__/setup.mjs +0 -1
  64. package/__tests__/utils/create.d.ts +0 -5
  65. package/__tests__/utils/create.js +0 -16
  66. package/__tests__/utils/create.mjs +0 -10
  67. package/__tests__/utils/fetch.d.ts +0 -3
  68. package/__tests__/utils/fetch.js +0 -20
  69. package/__tests__/utils/fetch.mjs +0 -9
  70. package/__tests__/utils/index.js +0 -38
  71. package/__tests__/utils/index.mjs +0 -3
  72. package/__tests__/utils/selectors.d.ts +0 -12
  73. package/__tests__/utils/selectors.js +0 -58
  74. package/__tests__/utils/selectors.mjs +0 -41
  75. package/api/generic.d.ts +0 -6
  76. package/api/generic.js +0 -68
  77. package/api/generic.mjs +0 -54
  78. package/api/index.js +0 -27
  79. package/api/index.mjs +0 -2
  80. package/api/message.d.ts +0 -3
  81. package/api/message.js +0 -33
  82. package/api/message.mjs +0 -30
  83. package/chat.bundle.es.js +0 -10753
  84. package/chat.bundle.umd.js +0 -18
  85. package/chat.es.js +0 -6864
  86. package/chat.umd.js +0 -18
  87. package/components/Button.vue +0 -34
  88. package/components/ChatWindow.vue +0 -104
  89. package/components/Layout.vue +0 -66
  90. package/components/Message.vue +0 -94
  91. package/components/MessageTyping.vue +0 -101
  92. package/components/index.js +0 -76
  93. package/components/index.mjs +0 -10
  94. package/composables/index.js +0 -38
  95. package/composables/index.mjs +0 -3
  96. package/composables/useChat.d.ts +0 -1
  97. package/composables/useChat.js +0 -11
  98. package/composables/useChat.mjs +0 -5
  99. package/composables/useI18n.d.ts +0 -4
  100. package/composables/useI18n.js +0 -23
  101. package/composables/useI18n.mjs +0 -12
  102. package/composables/useOptions.d.ts +0 -3
  103. package/composables/useOptions.js +0 -14
  104. package/composables/useOptions.mjs +0 -8
  105. package/constants/defaults.d.ts +0 -3
  106. package/constants/defaults.js +0 -32
  107. package/constants/defaults.mjs +0 -26
  108. package/constants/index.js +0 -38
  109. package/constants/index.mjs +0 -3
  110. package/constants/localStorage.d.ts +0 -2
  111. package/constants/localStorage.js +0 -8
  112. package/constants/symbols.d.ts +0 -3
  113. package/constants/symbols.js +0 -8
  114. package/constants/symbols.mjs +0 -2
  115. package/css/index.css +0 -31
  116. package/event-buses/chatEventBus.d.ts +0 -1
  117. package/event-buses/chatEventBus.js +0 -8
  118. package/event-buses/chatEventBus.mjs +0 -2
  119. package/event-buses/index.js +0 -16
  120. package/event-buses/index.mjs +0 -1
  121. package/index.d.ts +0 -3
  122. package/index.js +0 -43
  123. package/index.mjs +0 -36
  124. package/main.css +0 -151
  125. package/plugins/chat.d.ts +0 -3
  126. package/plugins/chat.js +0 -85
  127. package/plugins/chat.mjs +0 -83
  128. package/plugins/index.js +0 -16
  129. package/plugins/index.mjs +0 -1
  130. package/style.css +0 -1
  131. package/types/App.vue.d.ts +0 -8
  132. package/types/__stories__/App.stories.d.ts +0 -17
  133. package/types/__tests__/index.spec.d.ts +0 -1
  134. package/types/__tests__/setup.d.ts +0 -0
  135. package/types/__tests__/utils/create.d.ts +0 -5
  136. package/types/__tests__/utils/fetch.d.ts +0 -4
  137. package/types/__tests__/utils/index.d.ts +0 -3
  138. package/types/__tests__/utils/selectors.d.ts +0 -12
  139. package/types/api/generic.d.ts +0 -6
  140. package/types/api/index.d.ts +0 -2
  141. package/types/api/message.d.ts +0 -3
  142. package/types/chat.d.ts +0 -11
  143. package/types/chat.js +0 -1
  144. package/types/chat.mjs +0 -0
  145. package/types/components/Button.vue.d.ts +0 -9
  146. package/types/components/Chat.vue.d.ts +0 -2
  147. package/types/components/ChatWindow.vue.d.ts +0 -2
  148. package/types/components/GetStarted.vue.d.ts +0 -2
  149. package/types/components/GetStartedFooter.vue.d.ts +0 -2
  150. package/types/components/Input.vue.d.ts +0 -2
  151. package/types/components/Layout.vue.d.ts +0 -11
  152. package/types/components/Message.vue.d.ts +0 -21
  153. package/types/components/MessageTyping.vue.d.ts +0 -15
  154. package/types/components/MessagesList.vue.d.ts +0 -14
  155. package/types/components/PoweredBy.vue.d.ts +0 -2
  156. package/types/components/index.d.ts +0 -10
  157. package/types/composables/index.d.ts +0 -3
  158. package/types/composables/useChat.d.ts +0 -2
  159. package/types/composables/useI18n.d.ts +0 -4
  160. package/types/composables/useOptions.d.ts +0 -4
  161. package/types/constants/defaults.d.ts +0 -3
  162. package/types/constants/index.d.ts +0 -3
  163. package/types/constants/localStorage.d.ts +0 -2
  164. package/types/constants/symbols.d.ts +0 -4
  165. package/types/event-buses/chatEventBus.d.ts +0 -1
  166. package/types/event-buses/index.d.ts +0 -1
  167. package/types/index.js +0 -49
  168. package/types/index.mjs +0 -4
  169. package/types/messages.d.ts +0 -6
  170. package/types/messages.js +0 -1
  171. package/types/messages.mjs +0 -0
  172. package/types/options.d.ts +0 -25
  173. package/types/options.js +0 -1
  174. package/types/options.mjs +0 -0
  175. package/types/plugins/chat.d.ts +0 -3
  176. package/types/plugins/index.d.ts +0 -1
  177. package/types/types/chat.d.ts +0 -11
  178. package/types/types/index.d.ts +0 -4
  179. package/types/types/messages.d.ts +0 -6
  180. package/types/types/options.d.ts +0 -25
  181. package/types/types/webhook.d.ts +0 -15
  182. package/types/utils/event-bus.d.ts +0 -8
  183. package/types/utils/mount.d.ts +0 -1
  184. package/types/webhook.d.ts +0 -15
  185. package/types/webhook.js +0 -1
  186. package/types/webhook.mjs +0 -0
  187. package/utils/event-bus.d.ts +0 -8
  188. package/utils/event-bus.js +0 -38
  189. package/utils/event-bus.mjs +0 -32
  190. package/utils/index.d.ts +0 -2
  191. package/utils/index.js +0 -27
  192. package/utils/index.mjs +0 -2
  193. package/utils/mount.d.ts +0 -1
  194. package/utils/mount.js +0 -19
  195. package/utils/mount.mjs +0 -13
  196. package/{favicon.ico → public/favicon.ico} +0 -0
  197. package/{App.vue → src/App.vue} +1 -1
  198. package/{__tests__/setup.d.ts → src/__tests__/setup.ts} +0 -0
  199. package/{__tests__/utils/index.d.ts → src/__tests__/utils/index.ts} +0 -0
  200. package/{api/index.d.ts → src/api/index.ts} +0 -0
  201. package/{components → src/components}/Chat.vue +1 -1
  202. /package/{components/index.d.ts → src/components/index.ts} +0 -0
  203. /package/{composables/index.d.ts → src/composables/index.ts} +0 -0
  204. /package/{constants/index.d.ts → src/constants/index.ts} +0 -0
  205. /package/{event-buses/index.d.ts → src/event-buses/index.ts} +0 -0
  206. /package/{plugins/index.d.ts → src/plugins/index.ts} +0 -0
  207. /package/{shims.d.ts → src/shims.d.ts} +0 -0
  208. /package/{types/index.d.ts → src/types/index.ts} +0 -0
  209. /package/{types/utils/index.d.ts → src/utils/index.ts} +0 -0
@@ -1,2 +0,0 @@
1
- import { createEventBus } from "@n8n/chat/utils";
2
- export const chatEventBus = createEventBus();
@@ -1,16 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _chatEventBus = require("./chatEventBus");
7
- Object.keys(_chatEventBus).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _chatEventBus[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _chatEventBus[key];
14
- }
15
- });
16
- });
@@ -1 +0,0 @@
1
- export * from "./chatEventBus.mjs";
package/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import './main.scss';
2
- import type { ChatOptions } from '@n8n/chat/types';
3
- export declare function createChat(options?: Partial<ChatOptions>): import("vue").App<Element>;
package/index.js DELETED
@@ -1,43 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createChat = createChat;
7
- require("./main.scss");
8
- var _vue = require("vue");
9
- var _App = _interopRequireDefault(require("./App.vue"));
10
- var _constants = require("@n8n/chat/constants");
11
- var _utils = require("@n8n/chat/utils");
12
- var _plugins = require("@n8n/chat/plugins");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
- function createChat(options) {
15
- const resolvedOptions = {
16
- ..._constants.defaultOptions,
17
- ...options,
18
- webhookConfig: {
19
- ..._constants.defaultOptions.webhookConfig,
20
- ...options?.webhookConfig
21
- },
22
- i18n: {
23
- ..._constants.defaultOptions.i18n,
24
- ...options?.i18n,
25
- en: {
26
- ..._constants.defaultOptions.i18n?.en,
27
- ...options?.i18n?.en
28
- }
29
- },
30
- theme: {
31
- ..._constants.defaultOptions.theme,
32
- ...options?.theme
33
- }
34
- };
35
- const mountingTarget = resolvedOptions.target ?? _constants.defaultMountingTarget;
36
- if (typeof mountingTarget === "string") {
37
- (0, _utils.createDefaultMountingTarget)(mountingTarget);
38
- }
39
- const app = (0, _vue.createApp)(_App.default);
40
- app.use(_plugins.ChatPlugin, resolvedOptions);
41
- app.mount(mountingTarget);
42
- return app;
43
- }
package/index.mjs DELETED
@@ -1,36 +0,0 @@
1
- import "./main.scss";
2
- import { createApp } from "vue";
3
- import App from "./App.vue";
4
- import { defaultMountingTarget, defaultOptions } from "@n8n/chat/constants";
5
- import { createDefaultMountingTarget } from "@n8n/chat/utils";
6
- import { ChatPlugin } from "@n8n/chat/plugins";
7
- export function createChat(options) {
8
- const resolvedOptions = {
9
- ...defaultOptions,
10
- ...options,
11
- webhookConfig: {
12
- ...defaultOptions.webhookConfig,
13
- ...options?.webhookConfig
14
- },
15
- i18n: {
16
- ...defaultOptions.i18n,
17
- ...options?.i18n,
18
- en: {
19
- ...defaultOptions.i18n?.en,
20
- ...options?.i18n?.en
21
- }
22
- },
23
- theme: {
24
- ...defaultOptions.theme,
25
- ...options?.theme
26
- }
27
- };
28
- const mountingTarget = resolvedOptions.target ?? defaultMountingTarget;
29
- if (typeof mountingTarget === "string") {
30
- createDefaultMountingTarget(mountingTarget);
31
- }
32
- const app = createApp(App);
33
- app.use(ChatPlugin, resolvedOptions);
34
- app.mount(mountingTarget);
35
- return app;
36
- }
package/main.css DELETED
@@ -1,151 +0,0 @@
1
- .n8n-chat {
2
- /*!
3
- Theme: GitHub
4
- Description: Light theme as seen on github.com
5
- Author: github.com
6
- Maintainer: @Hirse
7
- Updated: 2021-05-15
8
-
9
- Outdated base version: https://github.com/primer/github-syntax-light
10
- Current colors taken from GitHub's CSS
11
- */
12
- }
13
- .n8n-chat pre code.hljs {
14
- display: block;
15
- overflow-x: auto;
16
- padding: 1em;
17
- }
18
- .n8n-chat code.hljs {
19
- padding: 3px 5px;
20
- }
21
- .n8n-chat .hljs {
22
- color: #24292e;
23
- background: #ffffff;
24
- }
25
- .n8n-chat .hljs-doctag,
26
- .n8n-chat .hljs-keyword,
27
- .n8n-chat .hljs-meta .hljs-keyword,
28
- .n8n-chat .hljs-template-tag,
29
- .n8n-chat .hljs-template-variable,
30
- .n8n-chat .hljs-type,
31
- .n8n-chat .hljs-variable.language_ {
32
- /* prettylights-syntax-keyword */
33
- color: #d73a49;
34
- }
35
- .n8n-chat .hljs-title,
36
- .n8n-chat .hljs-title.class_,
37
- .n8n-chat .hljs-title.class_.inherited__,
38
- .n8n-chat .hljs-title.function_ {
39
- /* prettylights-syntax-entity */
40
- color: #6f42c1;
41
- }
42
- .n8n-chat .hljs-attr,
43
- .n8n-chat .hljs-attribute,
44
- .n8n-chat .hljs-literal,
45
- .n8n-chat .hljs-meta,
46
- .n8n-chat .hljs-number,
47
- .n8n-chat .hljs-operator,
48
- .n8n-chat .hljs-variable,
49
- .n8n-chat .hljs-selector-attr,
50
- .n8n-chat .hljs-selector-class,
51
- .n8n-chat .hljs-selector-id {
52
- /* prettylights-syntax-constant */
53
- color: #005cc5;
54
- }
55
- .n8n-chat .hljs-regexp,
56
- .n8n-chat .hljs-string,
57
- .n8n-chat .hljs-meta .hljs-string {
58
- /* prettylights-syntax-string */
59
- color: #032f62;
60
- }
61
- .n8n-chat .hljs-built_in,
62
- .n8n-chat .hljs-symbol {
63
- /* prettylights-syntax-variable */
64
- color: #e36209;
65
- }
66
- .n8n-chat .hljs-comment,
67
- .n8n-chat .hljs-code,
68
- .n8n-chat .hljs-formula {
69
- /* prettylights-syntax-comment */
70
- color: #6a737d;
71
- }
72
- .n8n-chat .hljs-name,
73
- .n8n-chat .hljs-quote,
74
- .n8n-chat .hljs-selector-tag,
75
- .n8n-chat .hljs-selector-pseudo {
76
- /* prettylights-syntax-entity-tag */
77
- color: #22863a;
78
- }
79
- .n8n-chat .hljs-subst {
80
- /* prettylights-syntax-storage-modifier-import */
81
- color: #24292e;
82
- }
83
- .n8n-chat .hljs-section {
84
- /* prettylights-syntax-markup-heading */
85
- color: #005cc5;
86
- font-weight: bold;
87
- }
88
- .n8n-chat .hljs-bullet {
89
- /* prettylights-syntax-markup-list */
90
- color: #735c0f;
91
- }
92
- .n8n-chat .hljs-emphasis {
93
- /* prettylights-syntax-markup-italic */
94
- color: #24292e;
95
- font-style: italic;
96
- }
97
- .n8n-chat .hljs-strong {
98
- /* prettylights-syntax-markup-bold */
99
- color: #24292e;
100
- font-weight: bold;
101
- }
102
- .n8n-chat .hljs-addition {
103
- /* prettylights-syntax-markup-inserted */
104
- color: #22863a;
105
- background-color: #f0fff4;
106
- }
107
- .n8n-chat .hljs-deletion {
108
- /* prettylights-syntax-markup-deleted */
109
- color: #b31d28;
110
- background-color: #ffeef0;
111
- }
112
- .n8n-chat .hljs-char.escape_,
113
- .n8n-chat .hljs-link,
114
- .n8n-chat .hljs-params,
115
- .n8n-chat .hljs-property,
116
- .n8n-chat .hljs-punctuation,
117
- .n8n-chat .hljs-tag {
118
- /* purposely ignored */
119
- }
120
-
121
- :root {
122
- --chat--color-primary: #e74266;
123
- --chat--color-primary-shade-50: #db4061;
124
- --chat--color-primary-shade-100: #cf3c5c;
125
- --chat--color-secondary: #20b69e;
126
- --chat--color-secondary-shade-50: #1ca08a;
127
- --chat--color-white: #ffffff;
128
- --chat--color-light: #f2f4f8;
129
- --chat--color-light-shade-50: #e6e9f1;
130
- --chat--color-light-shade-100: #c2c5cc;
131
- --chat--color-medium: #d2d4d9;
132
- --chat--color-dark: #101330;
133
- --chat--color-disabled: #777980;
134
- --chat--color-typing: #404040;
135
- --chat--spacing: 1rem;
136
- --chat--border-radius: 0.25rem;
137
- --chat--transition-duration: 0.15s;
138
- --chat--window--width: 400px;
139
- --chat--window--height: 600px;
140
- --chat--textarea--height: 50px;
141
- --chat--message--bot--background: var(--chat--color-white);
142
- --chat--message--bot--color: var(--chat--color-dark);
143
- --chat--message--user--background: var(--chat--color-secondary);
144
- --chat--message--user--color: var(--chat--color-white);
145
- --chat--message--pre--background: rgba(0, 0, 0, 0.05);
146
- --chat--toggle--background: var(--chat--color-primary);
147
- --chat--toggle--hover--background: var(--chat--color-primary-shade-50);
148
- --chat--toggle--active--background: var(--chat--color-primary-shade-100);
149
- --chat--toggle--color: var(--chat--color-white);
150
- --chat--toggle--size: 64px;
151
- }
package/plugins/chat.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { Plugin } from 'vue';
2
- import type { ChatOptions } from '@n8n/chat/types';
3
- export declare const ChatPlugin: Plugin<ChatOptions>;
package/plugins/chat.js DELETED
@@ -1,85 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ChatPlugin = void 0;
7
- var _vue = require("vue");
8
- var _uuid = require("uuid");
9
- var _eventBuses = require("@n8n/chat/event-buses");
10
- var api = _interopRequireWildcard(require("@n8n/chat/api"));
11
- var _constants = require("@n8n/chat/constants");
12
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
- const ChatPlugin = exports.ChatPlugin = {
15
- install(app, options) {
16
- app.provide(_constants.ChatOptionsSymbol, options);
17
- const messages = (0, _vue.ref)([]);
18
- const currentSessionId = (0, _vue.ref)(null);
19
- const waitingForResponse = (0, _vue.ref)(false);
20
- const initialMessages = (0, _vue.computed)(() => (options.initialMessages ?? []).map(text => ({
21
- id: (0, _uuid.v4)(),
22
- text,
23
- sender: "bot",
24
- createdAt: /* @__PURE__ */new Date().toISOString()
25
- })));
26
- async function sendMessage(text) {
27
- const sentMessage = {
28
- id: (0, _uuid.v4)(),
29
- text,
30
- sender: "user",
31
- createdAt: /* @__PURE__ */new Date().toISOString()
32
- };
33
- messages.value.push(sentMessage);
34
- waitingForResponse.value = true;
35
- void (0, _vue.nextTick)(() => {
36
- _eventBuses.chatEventBus.emit("scrollToBottom");
37
- });
38
- const sendMessageResponse = await api.sendMessage(text, currentSessionId.value, options);
39
- const receivedMessage = {
40
- id: (0, _uuid.v4)(),
41
- text: sendMessageResponse.output,
42
- sender: "bot",
43
- createdAt: /* @__PURE__ */new Date().toISOString()
44
- };
45
- messages.value.push(receivedMessage);
46
- waitingForResponse.value = false;
47
- void (0, _vue.nextTick)(() => {
48
- _eventBuses.chatEventBus.emit("scrollToBottom");
49
- });
50
- }
51
- async function loadPreviousSession() {
52
- if (!options.loadPreviousSession) {
53
- return;
54
- }
55
- const sessionId = localStorage.getItem(_constants.localStorageSessionIdKey) ?? (0, _uuid.v4)();
56
- const previousMessagesResponse = await api.loadPreviousSession(sessionId, options);
57
- const timestamp = /* @__PURE__ */new Date().toISOString();
58
- messages.value = (previousMessagesResponse?.data || []).map((message, index) => ({
59
- id: `${index}`,
60
- text: message.kwargs.content,
61
- sender: message.id.includes("HumanMessage") ? "user" : "bot",
62
- createdAt: timestamp
63
- }));
64
- if (messages.value.length) {
65
- currentSessionId.value = sessionId;
66
- }
67
- return sessionId;
68
- }
69
- async function startNewSession() {
70
- currentSessionId.value = (0, _uuid.v4)();
71
- localStorage.setItem(_constants.localStorageSessionIdKey, currentSessionId.value);
72
- }
73
- const chatStore = {
74
- initialMessages,
75
- messages,
76
- currentSessionId,
77
- waitingForResponse,
78
- loadPreviousSession,
79
- startNewSession,
80
- sendMessage
81
- };
82
- app.provide(_constants.ChatSymbol, chatStore);
83
- app.config.globalProperties.$chat = chatStore;
84
- }
85
- };
package/plugins/chat.mjs DELETED
@@ -1,83 +0,0 @@
1
- import { computed, nextTick, ref } from "vue";
2
- import { v4 as uuidv4 } from "uuid";
3
- import { chatEventBus } from "@n8n/chat/event-buses";
4
- import * as api from "@n8n/chat/api";
5
- import { ChatOptionsSymbol, ChatSymbol, localStorageSessionIdKey } from "@n8n/chat/constants";
6
- export const ChatPlugin = {
7
- install(app, options) {
8
- app.provide(ChatOptionsSymbol, options);
9
- const messages = ref([]);
10
- const currentSessionId = ref(null);
11
- const waitingForResponse = ref(false);
12
- const initialMessages = computed(
13
- () => (options.initialMessages ?? []).map((text) => ({
14
- id: uuidv4(),
15
- text,
16
- sender: "bot",
17
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
18
- }))
19
- );
20
- async function sendMessage(text) {
21
- const sentMessage = {
22
- id: uuidv4(),
23
- text,
24
- sender: "user",
25
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
26
- };
27
- messages.value.push(sentMessage);
28
- waitingForResponse.value = true;
29
- void nextTick(() => {
30
- chatEventBus.emit("scrollToBottom");
31
- });
32
- const sendMessageResponse = await api.sendMessage(
33
- text,
34
- currentSessionId.value,
35
- options
36
- );
37
- const receivedMessage = {
38
- id: uuidv4(),
39
- text: sendMessageResponse.output,
40
- sender: "bot",
41
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
42
- };
43
- messages.value.push(receivedMessage);
44
- waitingForResponse.value = false;
45
- void nextTick(() => {
46
- chatEventBus.emit("scrollToBottom");
47
- });
48
- }
49
- async function loadPreviousSession() {
50
- if (!options.loadPreviousSession) {
51
- return;
52
- }
53
- const sessionId = localStorage.getItem(localStorageSessionIdKey) ?? uuidv4();
54
- const previousMessagesResponse = await api.loadPreviousSession(sessionId, options);
55
- const timestamp = (/* @__PURE__ */ new Date()).toISOString();
56
- messages.value = (previousMessagesResponse?.data || []).map((message, index) => ({
57
- id: `${index}`,
58
- text: message.kwargs.content,
59
- sender: message.id.includes("HumanMessage") ? "user" : "bot",
60
- createdAt: timestamp
61
- }));
62
- if (messages.value.length) {
63
- currentSessionId.value = sessionId;
64
- }
65
- return sessionId;
66
- }
67
- async function startNewSession() {
68
- currentSessionId.value = uuidv4();
69
- localStorage.setItem(localStorageSessionIdKey, currentSessionId.value);
70
- }
71
- const chatStore = {
72
- initialMessages,
73
- messages,
74
- currentSessionId,
75
- waitingForResponse,
76
- loadPreviousSession,
77
- startNewSession,
78
- sendMessage
79
- };
80
- app.provide(ChatSymbol, chatStore);
81
- app.config.globalProperties.$chat = chatStore;
82
- }
83
- };
package/plugins/index.js DELETED
@@ -1,16 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _chat = require("./chat");
7
- Object.keys(_chat).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _chat[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _chat[key];
14
- }
15
- });
16
- });
package/plugins/index.mjs DELETED
@@ -1 +0,0 @@
1
- export * from "./chat.mjs";
package/style.css DELETED
@@ -1 +0,0 @@
1
- .n8n-chat pre code.hljs{display:block;overflow-x:auto;padding:1em}.n8n-chat code.hljs{padding:3px 5px}.n8n-chat .hljs{color:#24292e;background:#ffffff}.n8n-chat .hljs-doctag,.n8n-chat .hljs-keyword,.n8n-chat .hljs-meta .hljs-keyword,.n8n-chat .hljs-template-tag,.n8n-chat .hljs-template-variable,.n8n-chat .hljs-type,.n8n-chat .hljs-variable.language_{color:#d73a49}.n8n-chat .hljs-title,.n8n-chat .hljs-title.class_,.n8n-chat .hljs-title.class_.inherited__,.n8n-chat .hljs-title.function_{color:#6f42c1}.n8n-chat .hljs-attr,.n8n-chat .hljs-attribute,.n8n-chat .hljs-literal,.n8n-chat .hljs-meta,.n8n-chat .hljs-number,.n8n-chat .hljs-operator,.n8n-chat .hljs-variable,.n8n-chat .hljs-selector-attr,.n8n-chat .hljs-selector-class,.n8n-chat .hljs-selector-id{color:#005cc5}.n8n-chat .hljs-regexp,.n8n-chat .hljs-string,.n8n-chat .hljs-meta .hljs-string{color:#032f62}.n8n-chat .hljs-built_in,.n8n-chat .hljs-symbol{color:#e36209}.n8n-chat .hljs-comment,.n8n-chat .hljs-code,.n8n-chat .hljs-formula{color:#6a737d}.n8n-chat .hljs-name,.n8n-chat .hljs-quote,.n8n-chat .hljs-selector-tag,.n8n-chat .hljs-selector-pseudo{color:#22863a}.n8n-chat .hljs-subst{color:#24292e}.n8n-chat .hljs-section{color:#005cc5;font-weight:700}.n8n-chat .hljs-bullet{color:#735c0f}.n8n-chat .hljs-emphasis{color:#24292e;font-style:italic}.n8n-chat .hljs-strong{color:#24292e;font-weight:700}.n8n-chat .hljs-addition{color:#22863a;background-color:#f0fff4}.n8n-chat .hljs-deletion{color:#b31d28;background-color:#ffeef0}:root{--chat--color-primary: #e74266;--chat--color-primary-shade-50: #db4061;--chat--color-primary-shade-100: #cf3c5c;--chat--color-secondary: #20b69e;--chat--color-secondary-shade-50: #1ca08a;--chat--color-white: #ffffff;--chat--color-light: #f2f4f8;--chat--color-light-shade-50: #e6e9f1;--chat--color-light-shade-100: #c2c5cc;--chat--color-medium: #d2d4d9;--chat--color-dark: #101330;--chat--color-disabled: #777980;--chat--color-typing: #404040;--chat--spacing: 1rem;--chat--border-radius: .25rem;--chat--transition-duration: .15s;--chat--window--width: 400px;--chat--window--height: 600px;--chat--textarea--height: 50px;--chat--message--bot--background: var(--chat--color-white);--chat--message--bot--color: var(--chat--color-dark);--chat--message--user--background: var(--chat--color-secondary);--chat--message--user--color: var(--chat--color-white);--chat--message--pre--background: rgba(0, 0, 0, .05);--chat--toggle--background: var(--chat--color-primary);--chat--toggle--hover--background: var(--chat--color-primary-shade-50);--chat--toggle--active--background: var(--chat--color-primary-shade-100);--chat--toggle--color: var(--chat--color-white);--chat--toggle--size: 64px}.chat-button{display:inline-flex;text-align:center;vertical-align:middle;-webkit-user-select:none;user-select:none;color:var(--chat--button--color, var(--chat--color-light));background-color:var(--chat--button--background, var(--chat--color-primary));border:1px solid transparent;padding:var(--chat--button--padding, calc(var(--chat--spacing) * 1 / 2) var(--chat--spacing));font-size:1rem;line-height:1.5;border-radius:var(--chat--button--border-radius, var(--chat--border-radius));transition:color var(--chat--transition-duration) ease-in-out,background-color var(--chat--transition-duration) ease-in-out,border-color var(--chat--transition-duration) ease-in-out,box-shadow var(--chat--transition-duration) ease-in-out;cursor:pointer}.chat-button:hover{color:var(--chat--button--hover--color, var(--chat--color-light));background-color:var(--chat--button--hover--background, var(--chat--color-primary-shade-50));text-decoration:none}.chat-button:focus{outline:0;box-shadow:0 0 0 .2rem #007bff40}.chat-button:disabled{opacity:.65}.chat-layout{width:100%;height:100%;display:flex;overflow-y:auto;flex-direction:column;font-family:var(--chat--font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif)}.chat-layout .chat-header{padding:var(--chat--header--padding, var(--chat--spacing));background:var(--chat--header--background, var(--chat--color-dark));color:var(--chat--header--color, var(--chat--color-light))}.chat-layout .chat-body{background:var(--chat--body--background, var(--chat--color-light));flex:1;display:flex;flex-direction:column;overflow-y:auto;position:relative;min-height:100px}.chat-layout .chat-footer{border-top:1px solid var(--chat--color-light-shade-100);background:var(--chat--footer--background, var(--chat--color-light));color:var(--chat--footer--color, var(--chat--color-dark))}.chat-get-started{padding-top:var(--chat--spacing);padding-bottom:var(--chat--spacing);display:flex;justify-content:center;align-items:center;height:100%}.chat-powered-by{text-align:center}.chat-powered-by a{color:var(--chat--color-primary);text-decoration:none}.chat-get-started-footer{padding:var(--chat--spacing)}.chat-message{display:block;max-width:80%;padding:var(--chat--message--padding, var(--chat--spacing));border-radius:var(--chat--message--border-radius, var(--chat--border-radius))}.chat-message+.chat-message{margin-top:var(--chat--message--margin-bottom, calc(var(--chat--spacing) * .5))}.chat-message.chat-message-from-bot{background-color:var(--chat--message--bot--background);color:var(--chat--message--bot--color);border-bottom-left-radius:0}.chat-message.chat-message-from-user{background-color:var(--chat--message--user--background);color:var(--chat--message--user--color);margin-left:auto;border-bottom-right-radius:0}.chat-message>.chat-message-markdown{display:block;box-sizing:border-box}.chat-message>.chat-message-markdown>*:first-child{margin-top:0}.chat-message>.chat-message-markdown>*:last-child{margin-bottom:0}.chat-message>.chat-message-markdown pre{font-family:inherit;font-size:inherit;margin:0;white-space:pre-wrap;box-sizing:border-box;padding:var(--chat--spacing);background:var(--chat--message--pre--background);border-radius:var(--chat--border-radius)}.chat-message-typing{max-width:80px}.chat-message-typing.chat-message-typing-animation-scaling .chat-message-typing-circle{animation:chat-message-typing-animation-scaling .8s ease-in-out infinite;animation-delay:3.6s}.chat-message-typing.chat-message-typing-animation-bouncing .chat-message-typing-circle{animation:chat-message-typing-animation-bouncing .8s ease-in-out infinite;animation-delay:3.6s}.chat-message-typing .chat-message-typing-body{display:flex;justify-content:center;align-items:center}.chat-message-typing .chat-message-typing-circle{display:block;height:10px;width:10px;border-radius:50%;background-color:var(--chat--color-typing);margin:3px}.chat-message-typing .chat-message-typing-circle:nth-child(1){animation-delay:0ms}.chat-message-typing .chat-message-typing-circle:nth-child(2){animation-delay:333ms}.chat-message-typing .chat-message-typing-circle:nth-child(3){animation-delay:666ms}@keyframes chat-message-typing-animation-scaling{0%{transform:scale(1)}33%{transform:scale(1)}50%{transform:scale(1.4)}to{transform:scale(1)}}@keyframes chat-message-typing-animation-bouncing{0%{transform:translateY(0)}33%{transform:translateY(0)}50%{transform:translateY(-10px)}to{transform:translateY(0)}}.chat-messages-list{margin-top:auto;display:block;padding:var(--chat--messages-list--padding, var(--chat--spacing))}.chat-input{display:flex;justify-content:center;align-items:center;width:100%}.chat-input textarea{font-family:inherit;font-size:inherit;width:100%;border:0;padding:var(--chat--spacing);max-height:var(--chat--textarea--height);resize:none}.chat-input .chat-input-send-button{height:var(--chat--textarea--height);width:var(--chat--textarea--height);background:white;cursor:pointer;color:var(--chat--color-secondary);border:0;font-size:24px;display:inline-flex;align-items:center;justify-content:center;transition:color var(--chat--transition-duration) ease}.chat-input .chat-input-send-button:hover,.chat-input .chat-input-send-button:focus{color:var(--chat--color-secondary-shade-50)}.chat-input .chat-input-send-button[disabled]{cursor:default;color:var(--chat--color-disabled)}.chat-window-wrapper{position:fixed;display:flex;flex-direction:column;bottom:var(--chat--window--bottom, var(--chat--spacing));right:var(--chat--window--right, var(--chat--spacing));z-index:var(--chat--window--z-index, 9999);max-width:calc(100% - var(--chat--window--right, var(--chat--spacing)) * 2);max-height:calc(100% - var(--chat--window--bottom, var(--chat--spacing)) * 2)}.chat-window-wrapper .chat-window{display:flex;width:var(--chat--window--width);height:var(--chat--window--height);max-width:100%;max-height:100%;border:var(--chat--window--border, 1px solid var(--chat--color-light-shade-100));border-radius:var(--chat--window--border-radius, var(--chat--border-radius));margin-bottom:var(--chat--window--margin-bottom, var(--chat--spacing));overflow:hidden;transform-origin:bottom right}.chat-window-wrapper .chat-window .chat-layout{width:auto;height:auto;flex:1}.chat-window-wrapper .chat-window-toggle{flex:0 0 auto;background:var(--chat--toggle--background);color:var(--chat--toggle--color);cursor:pointer;width:var(--chat--toggle--width, var(--chat--toggle--size));height:var(--chat--toggle--height, var(--chat--toggle--size));border-radius:var(--chat--toggle--border-radius, 50%);display:inline-flex;align-items:center;justify-content:center;margin-left:auto;transition:transform var(--chat--transition-duration) ease,background var(--chat--transition-duration) ease}.chat-window-wrapper .chat-window-toggle:hover,.chat-window-wrapper .chat-window-toggle:focus{transform:scale(1.05);background:var(--chat--toggle--hover--background)}.chat-window-wrapper .chat-window-toggle:active{transform:scale(.95);background:var(--chat--toggle--active--background)}.chat-window-transition-enter-active,.chat-window-transition-leave-active{transition:transform var(--chat--transition-duration) ease,opacity var(--chat--transition-duration) ease}.chat-window-transition-enter-from,.chat-window-transition-leave-to{transform:scale(0);opacity:0}.chat-window-toggle-transition-enter-active,.chat-window-toggle-transition-leave-active{transition:opacity var(--chat--transition-duration) ease}.chat-window-toggle-transition-enter-from,.chat-window-toggle-transition-leave-to{opacity:0}
@@ -1,8 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<Readonly<import("vue").ComponentPropsOptions<{
2
- [x: string]: unknown;
3
- }>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, readonly string[] | Readonly<import("vue").ExtractPropTypes<Readonly<import("vue").ComponentObjectPropsOptions<{
4
- [x: string]: unknown;
5
- }>>>>, {
6
- readonly [x: number]: string;
7
- } | {}, {}>;
8
- export default _default;
@@ -1,17 +0,0 @@
1
- import type { StoryObj } from '@storybook/vue3';
2
- import type { ChatOptions } from '../types';
3
- declare const meta: {
4
- title: string;
5
- render: (args: Partial<ChatOptions>) => {
6
- setup(): {};
7
- template: string;
8
- };
9
- parameters: {
10
- layout: string;
11
- };
12
- tags: string[];
13
- };
14
- export default meta;
15
- type Story = StoryObj<typeof meta>;
16
- export declare const Fullscreen: Story;
17
- export declare const Windowed: Story;
@@ -1 +0,0 @@
1
- export {};
File without changes
@@ -1,5 +0,0 @@
1
- import { createChat } from '../../index';
2
- export declare function createTestChat(options?: Parameters<typeof createChat>[0]): {
3
- unmount: () => void;
4
- container: Element;
5
- };
@@ -1,4 +0,0 @@
1
- import type { LoadPreviousSessionResponse, SendMessageResponse } from '../../types';
2
- export declare function createFetchResponse<T>(data: T): () => Promise<Response>;
3
- export declare const createGetLatestMessagesResponse: (data?: LoadPreviousSessionResponse['data']) => LoadPreviousSessionResponse;
4
- export declare const createSendMessageResponse: (output: SendMessageResponse['output']) => SendMessageResponse;
@@ -1,3 +0,0 @@
1
- export * from './create';
2
- export * from './fetch';
3
- export * from './selectors';
@@ -1,12 +0,0 @@
1
- export declare function getMountingTarget(target?: string): Element | null;
2
- export declare function getChatWindowWrapper(): Element | null;
3
- export declare function getChatWindowToggle(): Element | null;
4
- export declare function getChatWrapper(): Element | null;
5
- export declare function getChatMessages(): NodeListOf<Element>;
6
- export declare function getChatMessage(index: number): Element;
7
- export declare function getChatMessageByText(text: string): HTMLElement | null;
8
- export declare function getChatMessageTyping(): Element | null;
9
- export declare function getGetStartedButton(): Element | null;
10
- export declare function getChatInput(): Element | null;
11
- export declare function getChatInputTextarea(): Element | null;
12
- export declare function getChatInputSendButton(): Element | null;
@@ -1,6 +0,0 @@
1
- export declare function authenticatedFetch<T>(...args: Parameters<typeof fetch>): Promise<T>;
2
- export declare function get<T>(url: string, query?: object, options?: RequestInit): Promise<T>;
3
- export declare function post<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
4
- export declare function put<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
5
- export declare function patch<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
6
- export declare function del<T>(url: string, body?: object, options?: RequestInit): Promise<T>;
@@ -1,2 +0,0 @@
1
- export * from './generic';
2
- export * from './message';
@@ -1,3 +0,0 @@
1
- import type { ChatOptions, LoadPreviousSessionResponse, SendMessageResponse } from '../types';
2
- export declare function loadPreviousSession(sessionId: string, options: ChatOptions): Promise<LoadPreviousSessionResponse>;
3
- export declare function sendMessage(message: string, sessionId: string, options: ChatOptions): Promise<SendMessageResponse>;
package/types/chat.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import type { ChatMessage } from '@n8n/chat/types/messages';
2
- import type { Ref } from 'vue';
3
- export interface Chat {
4
- initialMessages: Ref<ChatMessage[]>;
5
- messages: Ref<ChatMessage[]>;
6
- currentSessionId: Ref<string | null>;
7
- waitingForResponse: Ref<boolean>;
8
- loadPreviousSession: () => Promise<string | undefined>;
9
- startNewSession: () => Promise<void>;
10
- sendMessage: (text: string) => Promise<void>;
11
- }
package/types/chat.js DELETED
@@ -1 +0,0 @@
1
- "use strict";
package/types/chat.mjs DELETED
File without changes
@@ -1,9 +0,0 @@
1
- declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>, {
2
- default?(_: {}): any;
3
- }>;
4
- export default _default;
5
- type __VLS_WithTemplateSlots<T, S> = T & {
6
- new (): {
7
- $slots: S;
8
- };
9
- };
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
- export default _default;
@@ -1,11 +0,0 @@
1
- declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>, {
2
- header?(_: {}): any;
3
- default?(_: {}): any;
4
- footer?(_: {}): any;
5
- }>;
6
- export default _default;
7
- type __VLS_WithTemplateSlots<T, S> = T & {
8
- new (): {
9
- $slots: S;
10
- };
11
- };
@@ -1,21 +0,0 @@
1
- import type { ChatMessage } from '../types';
2
- import type { PropType } from 'vue';
3
- declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
4
- message: {
5
- type: PropType<ChatMessage>;
6
- required: true;
7
- };
8
- }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
9
- message: {
10
- type: PropType<ChatMessage>;
11
- required: true;
12
- };
13
- }>>, {}, {}>, {
14
- default?(_: {}): any;
15
- }>;
16
- export default _default;
17
- type __VLS_WithTemplateSlots<T, S> = T & {
18
- new (): {
19
- $slots: S;
20
- };
21
- };