@djangocfg/ext-knowbase 1.0.21 → 1.0.23
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/config.cjs +12 -3
- package/dist/config.js +12 -3
- package/dist/hooks.cjs +209 -37
- package/dist/hooks.js +210 -38
- package/dist/i18n.cjs +164 -0
- package/dist/i18n.d.cts +72 -0
- package/dist/i18n.d.ts +72 -0
- package/dist/i18n.js +136 -0
- package/dist/index.cjs +12 -3
- package/dist/index.js +12 -3
- package/package.json +20 -11
- package/src/components/Chat/ChatWidget.tsx +30 -16
- package/src/components/Chat/components/MessageInput.tsx +15 -8
- package/src/components/Chat/components/MessageList.tsx +16 -7
- package/src/components/Chat/components/SessionList.tsx +29 -14
- package/src/i18n/index.ts +26 -0
- package/src/i18n/locales/en.ts +36 -0
- package/src/i18n/locales/ko.ts +36 -0
- package/src/i18n/locales/ru.ts +36 -0
- package/src/i18n/types.ts +59 -0
- package/src/i18n/useKnowbaseT.ts +60 -0
package/dist/config.cjs
CHANGED
|
@@ -27,7 +27,7 @@ var import_ext_base = require("@djangocfg/ext-base");
|
|
|
27
27
|
// package.json
|
|
28
28
|
var package_default = {
|
|
29
29
|
name: "@djangocfg/ext-knowbase",
|
|
30
|
-
version: "1.0.
|
|
30
|
+
version: "1.0.23",
|
|
31
31
|
description: "Knowledge base and chat extension for DjangoCFG",
|
|
32
32
|
keywords: [
|
|
33
33
|
"django",
|
|
@@ -73,6 +73,11 @@ var package_default = {
|
|
|
73
73
|
types: "./dist/config.d.ts",
|
|
74
74
|
import: "./dist/config.js",
|
|
75
75
|
require: "./dist/config.cjs"
|
|
76
|
+
},
|
|
77
|
+
"./i18n": {
|
|
78
|
+
types: "./dist/i18n.d.ts",
|
|
79
|
+
import: "./dist/i18n.js",
|
|
80
|
+
require: "./dist/i18n.cjs"
|
|
76
81
|
}
|
|
77
82
|
},
|
|
78
83
|
files: [
|
|
@@ -88,27 +93,31 @@ var package_default = {
|
|
|
88
93
|
peerDependencies: {
|
|
89
94
|
"@djangocfg/api": "workspace:*",
|
|
90
95
|
"@djangocfg/ext-base": "workspace:*",
|
|
96
|
+
"@djangocfg/i18n": "workspace:*",
|
|
91
97
|
"@djangocfg/ui-core": "workspace:*",
|
|
92
98
|
"@djangocfg/ui-nextjs": "workspace:*",
|
|
93
99
|
consola: "^3.4.2",
|
|
94
100
|
"lucide-react": "^0.545.0",
|
|
101
|
+
moment: "^2.30.1",
|
|
95
102
|
next: "^16",
|
|
103
|
+
"next-intl": "^4",
|
|
96
104
|
"p-retry": "^7.0.0",
|
|
97
105
|
react: "^19",
|
|
98
106
|
"react-dom": "^19",
|
|
99
107
|
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
100
108
|
swr: "^2.3.7",
|
|
101
|
-
zod: "^4.3.4"
|
|
102
|
-
moment: "^2.30.1"
|
|
109
|
+
zod: "^4.3.4"
|
|
103
110
|
},
|
|
104
111
|
devDependencies: {
|
|
105
112
|
"@djangocfg/api": "workspace:*",
|
|
106
113
|
"@djangocfg/ext-base": "workspace:*",
|
|
114
|
+
"@djangocfg/i18n": "workspace:*",
|
|
107
115
|
"@djangocfg/ui-core": "workspace:*",
|
|
108
116
|
"@djangocfg/typescript-config": "workspace:*",
|
|
109
117
|
"@types/node": "^24.7.2",
|
|
110
118
|
"@types/react": "^19.0.0",
|
|
111
119
|
consola: "^3.4.2",
|
|
120
|
+
"next-intl": "^4.1.0",
|
|
112
121
|
"p-retry": "^7.0.0",
|
|
113
122
|
swr: "^2.3.7",
|
|
114
123
|
tsup: "^8.5.0",
|
package/dist/config.js
CHANGED
|
@@ -4,7 +4,7 @@ import { createExtensionConfig } from "@djangocfg/ext-base";
|
|
|
4
4
|
// package.json
|
|
5
5
|
var package_default = {
|
|
6
6
|
name: "@djangocfg/ext-knowbase",
|
|
7
|
-
version: "1.0.
|
|
7
|
+
version: "1.0.23",
|
|
8
8
|
description: "Knowledge base and chat extension for DjangoCFG",
|
|
9
9
|
keywords: [
|
|
10
10
|
"django",
|
|
@@ -50,6 +50,11 @@ var package_default = {
|
|
|
50
50
|
types: "./dist/config.d.ts",
|
|
51
51
|
import: "./dist/config.js",
|
|
52
52
|
require: "./dist/config.cjs"
|
|
53
|
+
},
|
|
54
|
+
"./i18n": {
|
|
55
|
+
types: "./dist/i18n.d.ts",
|
|
56
|
+
import: "./dist/i18n.js",
|
|
57
|
+
require: "./dist/i18n.cjs"
|
|
53
58
|
}
|
|
54
59
|
},
|
|
55
60
|
files: [
|
|
@@ -65,27 +70,31 @@ var package_default = {
|
|
|
65
70
|
peerDependencies: {
|
|
66
71
|
"@djangocfg/api": "workspace:*",
|
|
67
72
|
"@djangocfg/ext-base": "workspace:*",
|
|
73
|
+
"@djangocfg/i18n": "workspace:*",
|
|
68
74
|
"@djangocfg/ui-core": "workspace:*",
|
|
69
75
|
"@djangocfg/ui-nextjs": "workspace:*",
|
|
70
76
|
consola: "^3.4.2",
|
|
71
77
|
"lucide-react": "^0.545.0",
|
|
78
|
+
moment: "^2.30.1",
|
|
72
79
|
next: "^16",
|
|
80
|
+
"next-intl": "^4",
|
|
73
81
|
"p-retry": "^7.0.0",
|
|
74
82
|
react: "^19",
|
|
75
83
|
"react-dom": "^19",
|
|
76
84
|
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
77
85
|
swr: "^2.3.7",
|
|
78
|
-
zod: "^4.3.4"
|
|
79
|
-
moment: "^2.30.1"
|
|
86
|
+
zod: "^4.3.4"
|
|
80
87
|
},
|
|
81
88
|
devDependencies: {
|
|
82
89
|
"@djangocfg/api": "workspace:*",
|
|
83
90
|
"@djangocfg/ext-base": "workspace:*",
|
|
91
|
+
"@djangocfg/i18n": "workspace:*",
|
|
84
92
|
"@djangocfg/ui-core": "workspace:*",
|
|
85
93
|
"@djangocfg/typescript-config": "workspace:*",
|
|
86
94
|
"@types/node": "^24.7.2",
|
|
87
95
|
"@types/react": "^19.0.0",
|
|
88
96
|
consola: "^3.4.2",
|
|
97
|
+
"next-intl": "^4.1.0",
|
|
89
98
|
"p-retry": "^7.0.0",
|
|
90
99
|
swr: "^2.3.7",
|
|
91
100
|
tsup: "^8.5.0",
|
package/dist/hooks.cjs
CHANGED
|
@@ -12,6 +12,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
12
12
|
var lucideReact = require('lucide-react');
|
|
13
13
|
var navigation = require('next/navigation');
|
|
14
14
|
var reactDom = require('react-dom');
|
|
15
|
+
var nextIntl = require('next-intl');
|
|
15
16
|
var uiNextjs = require('@djangocfg/ui-nextjs');
|
|
16
17
|
var hooks = require('@djangocfg/ui-core/hooks');
|
|
17
18
|
var moment = require('moment');
|
|
@@ -4797,7 +4798,7 @@ var apiKnowbase = api.createExtensionAPI(API);
|
|
|
4797
4798
|
// package.json
|
|
4798
4799
|
var package_default = {
|
|
4799
4800
|
name: "@djangocfg/ext-knowbase",
|
|
4800
|
-
version: "1.0.
|
|
4801
|
+
version: "1.0.23",
|
|
4801
4802
|
description: "Knowledge base and chat extension for DjangoCFG",
|
|
4802
4803
|
keywords: [
|
|
4803
4804
|
"django",
|
|
@@ -4843,6 +4844,11 @@ var package_default = {
|
|
|
4843
4844
|
types: "./dist/config.d.ts",
|
|
4844
4845
|
import: "./dist/config.js",
|
|
4845
4846
|
require: "./dist/config.cjs"
|
|
4847
|
+
},
|
|
4848
|
+
"./i18n": {
|
|
4849
|
+
types: "./dist/i18n.d.ts",
|
|
4850
|
+
import: "./dist/i18n.js",
|
|
4851
|
+
require: "./dist/i18n.cjs"
|
|
4846
4852
|
}
|
|
4847
4853
|
},
|
|
4848
4854
|
files: [
|
|
@@ -4858,27 +4864,31 @@ var package_default = {
|
|
|
4858
4864
|
peerDependencies: {
|
|
4859
4865
|
"@djangocfg/api": "workspace:*",
|
|
4860
4866
|
"@djangocfg/ext-base": "workspace:*",
|
|
4867
|
+
"@djangocfg/i18n": "workspace:*",
|
|
4861
4868
|
"@djangocfg/ui-core": "workspace:*",
|
|
4862
4869
|
"@djangocfg/ui-nextjs": "workspace:*",
|
|
4863
4870
|
consola: "^3.4.2",
|
|
4864
4871
|
"lucide-react": "^0.545.0",
|
|
4872
|
+
moment: "^2.30.1",
|
|
4865
4873
|
next: "^16",
|
|
4874
|
+
"next-intl": "^4",
|
|
4866
4875
|
"p-retry": "^7.0.0",
|
|
4867
4876
|
react: "^19",
|
|
4868
4877
|
"react-dom": "^19",
|
|
4869
4878
|
"react-markdown": "^9.0.0 || ^10.0.0",
|
|
4870
4879
|
swr: "^2.3.7",
|
|
4871
|
-
zod: "^4.3.4"
|
|
4872
|
-
moment: "^2.30.1"
|
|
4880
|
+
zod: "^4.3.4"
|
|
4873
4881
|
},
|
|
4874
4882
|
devDependencies: {
|
|
4875
4883
|
"@djangocfg/api": "workspace:*",
|
|
4876
4884
|
"@djangocfg/ext-base": "workspace:*",
|
|
4885
|
+
"@djangocfg/i18n": "workspace:*",
|
|
4877
4886
|
"@djangocfg/ui-core": "workspace:*",
|
|
4878
4887
|
"@djangocfg/typescript-config": "workspace:*",
|
|
4879
4888
|
"@types/node": "^24.7.2",
|
|
4880
4889
|
"@types/react": "^19.0.0",
|
|
4881
4890
|
consola: "^3.4.2",
|
|
4891
|
+
"next-intl": "^4.1.0",
|
|
4882
4892
|
"p-retry": "^7.0.0",
|
|
4883
4893
|
swr: "^2.3.7",
|
|
4884
4894
|
tsup: "^8.5.0",
|
|
@@ -5245,6 +5255,131 @@ function useChatUI() {
|
|
|
5245
5255
|
}
|
|
5246
5256
|
return context;
|
|
5247
5257
|
}
|
|
5258
|
+
|
|
5259
|
+
// src/i18n/locales/en.ts
|
|
5260
|
+
var en = {
|
|
5261
|
+
chat: {
|
|
5262
|
+
title: "Knowledge Assistant",
|
|
5263
|
+
titleShort: "Support",
|
|
5264
|
+
placeholder: "Ask me anything...",
|
|
5265
|
+
enterToSend: "Press Enter to send, Shift+Enter for new line",
|
|
5266
|
+
thinking: "Thinking...",
|
|
5267
|
+
source: "Source {index}",
|
|
5268
|
+
startConversation: "Start a Conversation",
|
|
5269
|
+
startConversationDescription: "Ask me anything about the documentation, features, or get help with your project.",
|
|
5270
|
+
openChat: "Open Support Chat"
|
|
5271
|
+
},
|
|
5272
|
+
sessions: {
|
|
5273
|
+
title: "Chat Sessions",
|
|
5274
|
+
description: "View and manage your chat history",
|
|
5275
|
+
noSessions: "No Sessions Yet",
|
|
5276
|
+
noSessionsDescription: "Start a new conversation to create your first session.",
|
|
5277
|
+
untitled: "Untitled Session",
|
|
5278
|
+
active: "Active",
|
|
5279
|
+
archive: "Archive",
|
|
5280
|
+
delete: "Delete",
|
|
5281
|
+
loadingMore: "Loading more...",
|
|
5282
|
+
noMore: "No more sessions",
|
|
5283
|
+
newChat: "New Chat"
|
|
5284
|
+
},
|
|
5285
|
+
actions: {
|
|
5286
|
+
sessions: "Sessions",
|
|
5287
|
+
collapse: "Collapse",
|
|
5288
|
+
expand: "Expand",
|
|
5289
|
+
close: "Close"
|
|
5290
|
+
}
|
|
5291
|
+
};
|
|
5292
|
+
|
|
5293
|
+
// src/i18n/locales/ru.ts
|
|
5294
|
+
var ru = {
|
|
5295
|
+
chat: {
|
|
5296
|
+
title: "\u0411\u0430\u0437\u0430 \u0437\u043D\u0430\u043D\u0438\u0439",
|
|
5297
|
+
titleShort: "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430",
|
|
5298
|
+
placeholder: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441...",
|
|
5299
|
+
enterToSend: "Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Shift+Enter \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",
|
|
5300
|
+
thinking: "\u0414\u0443\u043C\u0430\u044E...",
|
|
5301
|
+
source: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A {index}",
|
|
5302
|
+
startConversation: "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440",
|
|
5303
|
+
startConversationDescription: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438, \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 \u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u043C\u043E\u0449\u044C \u0441 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C.",
|
|
5304
|
+
openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438"
|
|
5305
|
+
},
|
|
5306
|
+
sessions: {
|
|
5307
|
+
title: "\u0421\u0435\u0441\u0441\u0438\u0438 \u0447\u0430\u0442\u0430",
|
|
5308
|
+
description: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430",
|
|
5309
|
+
noSessions: "\u041D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
|
|
5310
|
+
noSessionsDescription: "\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E.",
|
|
5311
|
+
untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
|
|
5312
|
+
active: "\u0410\u043A\u0442\u0438\u0432\u043D\u0430\u044F",
|
|
5313
|
+
archive: "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
|
|
5314
|
+
delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
|
|
5315
|
+
loadingMore: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
|
|
5316
|
+
noMore: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
|
|
5317
|
+
newChat: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"
|
|
5318
|
+
},
|
|
5319
|
+
actions: {
|
|
5320
|
+
sessions: "\u0421\u0435\u0441\u0441\u0438\u0438",
|
|
5321
|
+
collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
|
|
5322
|
+
expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
|
|
5323
|
+
close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
|
|
5324
|
+
}
|
|
5325
|
+
};
|
|
5326
|
+
|
|
5327
|
+
// src/i18n/locales/ko.ts
|
|
5328
|
+
var ko = {
|
|
5329
|
+
chat: {
|
|
5330
|
+
title: "\uC9C0\uC2DD \uB3C4\uC6B0\uBBF8",
|
|
5331
|
+
titleShort: "\uC9C0\uC6D0",
|
|
5332
|
+
placeholder: "\uBB34\uC5C7\uC774\uB4E0 \uBB3C\uC5B4\uBCF4\uC138\uC694...",
|
|
5333
|
+
enterToSend: "Enter\uB85C \uC804\uC1A1, Shift+Enter\uB85C \uC904\uBC14\uAFC8",
|
|
5334
|
+
thinking: "\uC0DD\uAC01 \uC911...",
|
|
5335
|
+
source: "\uCD9C\uCC98 {index}",
|
|
5336
|
+
startConversation: "\uB300\uD654 \uC2DC\uC791\uD558\uAE30",
|
|
5337
|
+
startConversationDescription: "\uBB38\uC11C, \uAE30\uB2A5\uC5D0 \uB300\uD574 \uC9C8\uBB38\uD558\uAC70\uB098 \uD504\uB85C\uC81D\uD2B8 \uB3C4\uC6C0\uC744 \uBC1B\uC73C\uC138\uC694.",
|
|
5338
|
+
openChat: "\uC9C0\uC6D0 \uCC44\uD305 \uC5F4\uAE30"
|
|
5339
|
+
},
|
|
5340
|
+
sessions: {
|
|
5341
|
+
title: "\uCC44\uD305 \uC138\uC158",
|
|
5342
|
+
description: "\uCC44\uD305 \uAE30\uB85D \uBCF4\uAE30 \uBC0F \uAD00\uB9AC",
|
|
5343
|
+
noSessions: "\uC138\uC158 \uC5C6\uC74C",
|
|
5344
|
+
noSessionsDescription: "\uC0C8 \uB300\uD654\uB97C \uC2DC\uC791\uD558\uC5EC \uCCAB \uBC88\uC9F8 \uC138\uC158\uC744 \uB9CC\uB4DC\uC138\uC694.",
|
|
5345
|
+
untitled: "\uC81C\uBAA9 \uC5C6\uC74C",
|
|
5346
|
+
active: "\uD65C\uC131",
|
|
5347
|
+
archive: "\uBCF4\uAD00",
|
|
5348
|
+
delete: "\uC0AD\uC81C",
|
|
5349
|
+
loadingMore: "\uBD88\uB7EC\uC624\uB294 \uC911...",
|
|
5350
|
+
noMore: "\uB354 \uC774\uC0C1 \uC138\uC158 \uC5C6\uC74C",
|
|
5351
|
+
newChat: "\uC0C8 \uCC44\uD305"
|
|
5352
|
+
},
|
|
5353
|
+
actions: {
|
|
5354
|
+
sessions: "\uC138\uC158",
|
|
5355
|
+
collapse: "\uCD95\uC18C",
|
|
5356
|
+
expand: "\uD655\uC7A5",
|
|
5357
|
+
close: "\uB2EB\uAE30"
|
|
5358
|
+
}
|
|
5359
|
+
};
|
|
5360
|
+
|
|
5361
|
+
// src/i18n/useKnowbaseT.ts
|
|
5362
|
+
var translations = { en, ru, ko };
|
|
5363
|
+
function getNestedValue(obj, path) {
|
|
5364
|
+
const keys = path.split(".");
|
|
5365
|
+
let result = obj;
|
|
5366
|
+
for (const key of keys) {
|
|
5367
|
+
if (result && typeof result === "object" && key in result) {
|
|
5368
|
+
result = result[key];
|
|
5369
|
+
} else {
|
|
5370
|
+
return path;
|
|
5371
|
+
}
|
|
5372
|
+
}
|
|
5373
|
+
return typeof result === "string" ? result : path;
|
|
5374
|
+
}
|
|
5375
|
+
function useKnowbaseT() {
|
|
5376
|
+
const locale = nextIntl.useLocale();
|
|
5377
|
+
const t = react.useMemo(() => translations[locale] || translations.en, [locale]);
|
|
5378
|
+
return react.useCallback(
|
|
5379
|
+
(key) => getNestedValue(t, key),
|
|
5380
|
+
[t]
|
|
5381
|
+
);
|
|
5382
|
+
}
|
|
5248
5383
|
var isDevelopment = process.env.NODE_ENV === "development";
|
|
5249
5384
|
var logger = consola.createConsola({
|
|
5250
5385
|
level: isDevelopment ? 4 : 1
|
|
@@ -5261,8 +5396,15 @@ var MessageList = ({
|
|
|
5261
5396
|
autoScroll = true,
|
|
5262
5397
|
className = ""
|
|
5263
5398
|
}) => {
|
|
5399
|
+
const kt = useKnowbaseT();
|
|
5264
5400
|
const scrollRef = react.useRef(null);
|
|
5265
5401
|
const { user } = auth.useAuth();
|
|
5402
|
+
const labels = react.useMemo(() => ({
|
|
5403
|
+
startConversation: kt("chat.startConversation"),
|
|
5404
|
+
startConversationDescription: kt("chat.startConversationDescription"),
|
|
5405
|
+
source: kt("chat.source"),
|
|
5406
|
+
thinking: kt("chat.thinking")
|
|
5407
|
+
}), [kt]);
|
|
5266
5408
|
react.useEffect(() => {
|
|
5267
5409
|
if (autoScroll && scrollRef.current) {
|
|
5268
5410
|
const scrollContainer = scrollRef.current.querySelector("[data-radix-scroll-area-viewport]");
|
|
@@ -5278,8 +5420,8 @@ var MessageList = ({
|
|
|
5278
5420
|
return /* @__PURE__ */ jsxRuntime.jsx(uiNextjs.ScrollArea, { className: `h-full bg-muted/50 ${className}`, viewportRef: scrollRef, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4", children: [
|
|
5279
5421
|
messages.length === 0 && !isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full text-center py-12", children: [
|
|
5280
5422
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bot, { className: "h-12 w-12 text-muted-foreground mb-4" }),
|
|
5281
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children:
|
|
5282
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground max-w-md", children:
|
|
5423
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children: labels.startConversation }),
|
|
5424
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground max-w-md", children: labels.startConversationDescription })
|
|
5283
5425
|
] }) : messages.map((message, index) => {
|
|
5284
5426
|
const isUser = message.role === Enums.ChatMessageRole.USER;
|
|
5285
5427
|
const isAssistant = message.role === Enums.ChatMessageRole.ASSISTANT;
|
|
@@ -5308,10 +5450,10 @@ var MessageList = ({
|
|
|
5308
5450
|
uiNextjs.Badge,
|
|
5309
5451
|
{
|
|
5310
5452
|
variant: "secondary",
|
|
5311
|
-
className: "text-xs flex items-center gap-1 cursor-pointer
|
|
5453
|
+
className: "text-xs flex items-center gap-1 cursor-pointer\n hover:bg-secondary/80 hover:scale-105 active:scale-95\n transition-all duration-200 animate-in fade-in zoom-in-95",
|
|
5312
5454
|
style: { animationDelay: `${(idx + 1) * 100}ms` },
|
|
5313
5455
|
children: [
|
|
5314
|
-
source.document_title ||
|
|
5456
|
+
source.document_title || labels.source.replace("{index}", String(idx + 1)),
|
|
5315
5457
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "h-3 w-3" })
|
|
5316
5458
|
]
|
|
5317
5459
|
}
|
|
@@ -5332,7 +5474,7 @@ var MessageList = ({
|
|
|
5332
5474
|
/* @__PURE__ */ jsxRuntime.jsx(uiNextjs.Avatar, { className: "h-8 w-8 shrink-0 animate-pulse", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center bg-primary text-primary-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bot, { className: "h-5 w-5 animate-bounce" }) }) }),
|
|
5333
5475
|
/* @__PURE__ */ jsxRuntime.jsx(uiNextjs.Card, { className: "bg-muted animate-pulse", children: /* @__PURE__ */ jsxRuntime.jsx(uiNextjs.CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
5334
5476
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
5335
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children:
|
|
5477
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: labels.thinking })
|
|
5336
5478
|
] }) }) })
|
|
5337
5479
|
] })
|
|
5338
5480
|
] }) });
|
|
@@ -5341,12 +5483,17 @@ var MessageInput = ({
|
|
|
5341
5483
|
onSend,
|
|
5342
5484
|
isLoading = false,
|
|
5343
5485
|
disabled = false,
|
|
5344
|
-
placeholder
|
|
5486
|
+
placeholder,
|
|
5345
5487
|
className = ""
|
|
5346
5488
|
}) => {
|
|
5489
|
+
const kt = useKnowbaseT();
|
|
5347
5490
|
const [message, setMessage] = react.useState("");
|
|
5348
5491
|
const [rows, setRows] = react.useState(1);
|
|
5349
5492
|
const textareaRef = react.useRef(null);
|
|
5493
|
+
const labels = react.useMemo(() => ({
|
|
5494
|
+
placeholder: placeholder || kt("chat.placeholder"),
|
|
5495
|
+
enterToSend: kt("chat.enterToSend")
|
|
5496
|
+
}), [kt, placeholder]);
|
|
5350
5497
|
react.useEffect(() => {
|
|
5351
5498
|
if (textareaRef.current) {
|
|
5352
5499
|
const lineHeight = 24;
|
|
@@ -5401,10 +5548,10 @@ var MessageInput = ({
|
|
|
5401
5548
|
value: message,
|
|
5402
5549
|
onChange: (e) => setMessage(e.target.value),
|
|
5403
5550
|
onKeyDown: handleKeyDown,
|
|
5404
|
-
placeholder,
|
|
5551
|
+
placeholder: labels.placeholder,
|
|
5405
5552
|
disabled: isDisabled,
|
|
5406
5553
|
rows,
|
|
5407
|
-
className: "resize-none min-h-[40px] max-h-[120px] transition-all duration-200
|
|
5554
|
+
className: "resize-none min-h-[40px] max-h-[120px] transition-all duration-200\n focus:ring-2 focus:ring-primary/20",
|
|
5408
5555
|
style: { resize: "none" }
|
|
5409
5556
|
}
|
|
5410
5557
|
),
|
|
@@ -5414,12 +5561,12 @@ var MessageInput = ({
|
|
|
5414
5561
|
type: "submit",
|
|
5415
5562
|
size: "icon",
|
|
5416
5563
|
disabled: !canSend,
|
|
5417
|
-
className: "shrink-0 h-10 w-10 transition-all duration-200
|
|
5564
|
+
className: "shrink-0 h-10 w-10 transition-all duration-200\n hover:scale-110 active:scale-95 disabled:scale-100",
|
|
5418
5565
|
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Send, { className: "h-4 w-4" })
|
|
5419
5566
|
}
|
|
5420
5567
|
)
|
|
5421
5568
|
] }),
|
|
5422
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-2", children:
|
|
5569
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-2", children: labels.enterToSend })
|
|
5423
5570
|
] });
|
|
5424
5571
|
};
|
|
5425
5572
|
var PAGE_SIZE = 20;
|
|
@@ -5476,6 +5623,7 @@ var SessionList = ({
|
|
|
5476
5623
|
onSelectSession,
|
|
5477
5624
|
className = ""
|
|
5478
5625
|
}) => {
|
|
5626
|
+
const kt = useKnowbaseT();
|
|
5479
5627
|
const { deleteSession, archiveSession } = useKnowbaseSessionsContext();
|
|
5480
5628
|
const {
|
|
5481
5629
|
sessions,
|
|
@@ -5484,6 +5632,18 @@ var SessionList = ({
|
|
|
5484
5632
|
hasMore,
|
|
5485
5633
|
loadMore
|
|
5486
5634
|
} = useInfiniteSessions();
|
|
5635
|
+
const labels = react.useMemo(() => ({
|
|
5636
|
+
title: kt("sessions.title"),
|
|
5637
|
+
description: kt("sessions.description"),
|
|
5638
|
+
noSessions: kt("sessions.noSessions"),
|
|
5639
|
+
noSessionsDescription: kt("sessions.noSessionsDescription"),
|
|
5640
|
+
untitled: kt("sessions.untitled"),
|
|
5641
|
+
active: kt("sessions.active"),
|
|
5642
|
+
archive: kt("sessions.archive"),
|
|
5643
|
+
delete: kt("sessions.delete"),
|
|
5644
|
+
loadingMore: kt("sessions.loadingMore"),
|
|
5645
|
+
noMore: kt("sessions.noMore")
|
|
5646
|
+
}), [kt]);
|
|
5487
5647
|
const scrollRef = react.useRef(null);
|
|
5488
5648
|
const handleScroll = react.useCallback(() => {
|
|
5489
5649
|
if (!scrollRef.current || isLoadingMore || !hasMore) return;
|
|
@@ -5506,13 +5666,13 @@ var SessionList = ({
|
|
|
5506
5666
|
};
|
|
5507
5667
|
return /* @__PURE__ */ jsxRuntime.jsx(uiNextjs.Sheet, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(uiNextjs.SheetContent, { side: "left", className: `w-[400px] sm:w-[540px] ${className}`, children: [
|
|
5508
5668
|
/* @__PURE__ */ jsxRuntime.jsxs(uiNextjs.SheetHeader, { children: [
|
|
5509
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiNextjs.SheetTitle, { children:
|
|
5510
|
-
/* @__PURE__ */ jsxRuntime.jsx(uiNextjs.SheetDescription, { children:
|
|
5669
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiNextjs.SheetTitle, { children: labels.title }),
|
|
5670
|
+
/* @__PURE__ */ jsxRuntime.jsx(uiNextjs.SheetDescription, { children: labels.description })
|
|
5511
5671
|
] }),
|
|
5512
5672
|
/* @__PURE__ */ jsxRuntime.jsx(uiNextjs.ScrollArea, { className: "h-[calc(100vh-120px)] mt-6", viewportRef: scrollRef, children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-6 w-6 animate-spin text-muted-foreground" }) }) : !sessions || sessions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [
|
|
5513
5673
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquare, { className: "h-12 w-12 text-muted-foreground mb-4" }),
|
|
5514
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children:
|
|
5515
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground max-w-md", children:
|
|
5674
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children: labels.noSessions }),
|
|
5675
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground max-w-md", children: labels.noSessionsDescription })
|
|
5516
5676
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
5517
5677
|
sessions.map((session, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5518
5678
|
"div",
|
|
@@ -5527,8 +5687,8 @@ var SessionList = ({
|
|
|
5527
5687
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 mt-1", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquare, { className: "h-5 w-5 text-muted-foreground" }) }),
|
|
5528
5688
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
5529
5689
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-2 mb-1", children: [
|
|
5530
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-medium text-sm truncate", children: session.title ||
|
|
5531
|
-
session.is_active && /* @__PURE__ */ jsxRuntime.jsx(uiNextjs.Badge, { variant: "default", className: "shrink-0 text-xs", children:
|
|
5690
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-medium text-sm truncate", children: session.title || labels.untitled }),
|
|
5691
|
+
session.is_active && /* @__PURE__ */ jsxRuntime.jsx(uiNextjs.Badge, { variant: "default", className: "shrink-0 text-xs", children: labels.active })
|
|
5532
5692
|
] }),
|
|
5533
5693
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
|
|
5534
5694
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "h-3 w-3" }),
|
|
@@ -5546,7 +5706,7 @@ var SessionList = ({
|
|
|
5546
5706
|
e.stopPropagation();
|
|
5547
5707
|
archiveSession(session.id, {});
|
|
5548
5708
|
},
|
|
5549
|
-
title:
|
|
5709
|
+
title: labels.archive,
|
|
5550
5710
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Archive, { className: "h-4 w-4" })
|
|
5551
5711
|
}
|
|
5552
5712
|
),
|
|
@@ -5555,12 +5715,12 @@ var SessionList = ({
|
|
|
5555
5715
|
{
|
|
5556
5716
|
variant: "ghost",
|
|
5557
5717
|
size: "sm",
|
|
5558
|
-
className: "h-8 w-8 p-0 text-destructive hover:text-destructive
|
|
5718
|
+
className: "h-8 w-8 p-0 text-destructive hover:text-destructive\n hover:scale-110 active:scale-95 transition-transform duration-200",
|
|
5559
5719
|
onClick: (e) => {
|
|
5560
5720
|
e.stopPropagation();
|
|
5561
5721
|
deleteSession(session.id);
|
|
5562
5722
|
},
|
|
5563
|
-
title:
|
|
5723
|
+
title: labels.delete,
|
|
5564
5724
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "h-4 w-4" })
|
|
5565
5725
|
}
|
|
5566
5726
|
)
|
|
@@ -5571,9 +5731,9 @@ var SessionList = ({
|
|
|
5571
5731
|
)),
|
|
5572
5732
|
isLoadingMore && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center py-6", children: [
|
|
5573
5733
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground mr-2" }),
|
|
5574
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children:
|
|
5734
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: labels.loadingMore })
|
|
5575
5735
|
] }),
|
|
5576
|
-
!hasMore && sessions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center py-4", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children:
|
|
5736
|
+
!hasMore && sessions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center py-4", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: labels.noMore }) })
|
|
5577
5737
|
] }) })
|
|
5578
5738
|
] }) });
|
|
5579
5739
|
};
|
|
@@ -5586,6 +5746,7 @@ var ChatWidget = ({
|
|
|
5586
5746
|
onToggle,
|
|
5587
5747
|
onMessage
|
|
5588
5748
|
}) => {
|
|
5749
|
+
const kt = useKnowbaseT();
|
|
5589
5750
|
const { sendQuery, getChatHistory } = useKnowbaseChatContext();
|
|
5590
5751
|
const { createSession, getSession } = useKnowbaseSessionsContext();
|
|
5591
5752
|
const {
|
|
@@ -5596,6 +5757,17 @@ var ChatWidget = ({
|
|
|
5596
5757
|
toggleSources,
|
|
5597
5758
|
toggleTimestamps
|
|
5598
5759
|
} = useChatUI();
|
|
5760
|
+
const labels = react.useMemo(() => ({
|
|
5761
|
+
title: kt("chat.title"),
|
|
5762
|
+
titleShort: kt("chat.titleShort"),
|
|
5763
|
+
placeholder: kt("chat.placeholder"),
|
|
5764
|
+
openChat: kt("chat.openChat"),
|
|
5765
|
+
sessions: kt("actions.sessions"),
|
|
5766
|
+
newChat: kt("sessions.newChat"),
|
|
5767
|
+
collapse: kt("actions.collapse"),
|
|
5768
|
+
expand: kt("actions.expand"),
|
|
5769
|
+
close: kt("actions.close")
|
|
5770
|
+
}), [kt]);
|
|
5599
5771
|
const pathname = navigation.usePathname();
|
|
5600
5772
|
const isMobile = hooks.useIsMobile();
|
|
5601
5773
|
const [isLoading, setIsLoading] = react.useState(false);
|
|
@@ -5736,7 +5908,7 @@ var ChatWidget = ({
|
|
|
5736
5908
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between p-4 border-b bg-background shadow-sm", children: [
|
|
5737
5909
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5738
5910
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquare, { className: "h-5 w-5 text-primary" }),
|
|
5739
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-semibold text-foreground", children:
|
|
5911
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-semibold text-foreground", children: labels.title })
|
|
5740
5912
|
] }),
|
|
5741
5913
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5742
5914
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5746,7 +5918,7 @@ var ChatWidget = ({
|
|
|
5746
5918
|
size: "sm",
|
|
5747
5919
|
onClick: () => setShowSessions(true),
|
|
5748
5920
|
className: "text-muted-foreground hover:text-foreground",
|
|
5749
|
-
title:
|
|
5921
|
+
title: labels.sessions,
|
|
5750
5922
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "h-5 w-5" })
|
|
5751
5923
|
}
|
|
5752
5924
|
),
|
|
@@ -5757,7 +5929,7 @@ var ChatWidget = ({
|
|
|
5757
5929
|
size: "sm",
|
|
5758
5930
|
onClick: handleNewChat,
|
|
5759
5931
|
className: "text-muted-foreground hover:text-foreground",
|
|
5760
|
-
title:
|
|
5932
|
+
title: labels.newChat,
|
|
5761
5933
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "h-5 w-5" })
|
|
5762
5934
|
}
|
|
5763
5935
|
),
|
|
@@ -5790,7 +5962,7 @@ var ChatWidget = ({
|
|
|
5790
5962
|
{
|
|
5791
5963
|
onSend: handleSendMessage,
|
|
5792
5964
|
isLoading,
|
|
5793
|
-
placeholder:
|
|
5965
|
+
placeholder: labels.placeholder
|
|
5794
5966
|
}
|
|
5795
5967
|
)
|
|
5796
5968
|
] })
|
|
@@ -5839,7 +6011,7 @@ var ChatWidget = ({
|
|
|
5839
6011
|
/* @__PURE__ */ jsxRuntime.jsxs(uiNextjs.CardHeader, { className: "flex-row items-center justify-between space-y-0 pb-3 border-b", children: [
|
|
5840
6012
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5841
6013
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquare, { className: "h-5 w-5 text-primary" }),
|
|
5842
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-foreground", children:
|
|
6014
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-foreground", children: labels.titleShort })
|
|
5843
6015
|
] }),
|
|
5844
6016
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
5845
6017
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5849,7 +6021,7 @@ var ChatWidget = ({
|
|
|
5849
6021
|
size: "sm",
|
|
5850
6022
|
onClick: () => setShowSessions(true),
|
|
5851
6023
|
className: "h-8 w-8 p-0",
|
|
5852
|
-
title:
|
|
6024
|
+
title: labels.sessions,
|
|
5853
6025
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "h-4 w-4" })
|
|
5854
6026
|
}
|
|
5855
6027
|
),
|
|
@@ -5860,7 +6032,7 @@ var ChatWidget = ({
|
|
|
5860
6032
|
size: "sm",
|
|
5861
6033
|
onClick: handleNewChat,
|
|
5862
6034
|
className: "h-8 w-8 p-0",
|
|
5863
|
-
title:
|
|
6035
|
+
title: labels.newChat,
|
|
5864
6036
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "h-4 w-4" })
|
|
5865
6037
|
}
|
|
5866
6038
|
),
|
|
@@ -5871,7 +6043,7 @@ var ChatWidget = ({
|
|
|
5871
6043
|
size: "sm",
|
|
5872
6044
|
onClick: uiState.isExpanded ? collapseChat : expandChat,
|
|
5873
6045
|
className: "h-8 w-8 p-0",
|
|
5874
|
-
title: uiState.isExpanded ?
|
|
6046
|
+
title: uiState.isExpanded ? labels.collapse : labels.expand,
|
|
5875
6047
|
children: uiState.isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minimize2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize2, { className: "h-4 w-4" })
|
|
5876
6048
|
}
|
|
5877
6049
|
),
|
|
@@ -5882,7 +6054,7 @@ var ChatWidget = ({
|
|
|
5882
6054
|
size: "sm",
|
|
5883
6055
|
onClick: toggleChat,
|
|
5884
6056
|
className: "h-8 w-8 p-0",
|
|
5885
|
-
title:
|
|
6057
|
+
title: labels.close,
|
|
5886
6058
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" })
|
|
5887
6059
|
}
|
|
5888
6060
|
)
|
|
@@ -5905,7 +6077,7 @@ var ChatWidget = ({
|
|
|
5905
6077
|
{
|
|
5906
6078
|
onSend: handleSendMessage,
|
|
5907
6079
|
isLoading,
|
|
5908
|
-
placeholder:
|
|
6080
|
+
placeholder: labels.placeholder
|
|
5909
6081
|
}
|
|
5910
6082
|
)
|
|
5911
6083
|
] })
|
|
@@ -5940,14 +6112,14 @@ var ChatWidget = ({
|
|
|
5940
6112
|
uiNextjs.Button,
|
|
5941
6113
|
{
|
|
5942
6114
|
onClick: toggleChat,
|
|
5943
|
-
className: "w-full h-full rounded-full shadow-2xl
|
|
6115
|
+
className: "w-full h-full rounded-full shadow-2xl\n hover:scale-110 hover:rotate-12 active:scale-95\n transition-all duration-300 ease-out\n flex items-center justify-center\n group",
|
|
5944
6116
|
style: {
|
|
5945
6117
|
backgroundColor: "hsl(var(--primary))",
|
|
5946
6118
|
borderRadius: "50%",
|
|
5947
6119
|
padding: 0
|
|
5948
6120
|
},
|
|
5949
|
-
title:
|
|
5950
|
-
"aria-label":
|
|
6121
|
+
title: labels.openChat,
|
|
6122
|
+
"aria-label": labels.openChat,
|
|
5951
6123
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5952
6124
|
lucideReact.MessageSquare,
|
|
5953
6125
|
{
|