@bikdotai/bik-component-library 0.0.838-beta.6 → 0.0.838
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/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js +23 -23
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/AiTextArea.js +1 -1
- package/dist/cjs/components/agent-builder/components/AiTextArea.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/ToolInstructionsField.js +2 -2
- package/dist/cjs/components/agent-builder/components/ToolInstructionsField.js.map +1 -1
- package/dist/cjs/components/bik-chatbot/components/ChatWindow.js +20 -20
- package/dist/cjs/components/bik-chatbot/components/ChatWindow.js.map +1 -1
- package/dist/cjs/components/input/ChipInput.js +1 -1
- package/dist/cjs/components/input/ChipInput.js.map +1 -1
- package/dist/cjs/components/input/Input-helper.js +1 -1
- package/dist/cjs/components/input/Input-helper.js.map +1 -1
- package/dist/cjs/components/input/Input.js +1 -1
- package/dist/cjs/components/input/Input.js.map +1 -1
- package/dist/cjs/components/plans/SubscriptionPlanSelector.js +5 -5
- package/dist/cjs/components/plans/SubscriptionPlanSelector.js.map +1 -1
- package/dist/cjs/editor/BikEditor.js +1 -1
- package/dist/cjs/editor/BikEditor.js.map +1 -1
- package/dist/cjs/editor/BikEditor.utils.js +3 -3
- package/dist/cjs/editor/BikEditor.utils.js.map +1 -1
- package/dist/cjs/editor/extensions/buildExtensions.js +2 -2
- package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
- package/dist/cjs/icons/Informational/General/HourglassFilled.js +2 -0
- package/dist/cjs/icons/Informational/General/HourglassFilled.js.map +1 -0
- package/dist/cjs/icons/index.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js +143 -144
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js.map +1 -1
- package/dist/esm/components/agent-builder/components/AiTextArea.js +23 -24
- package/dist/esm/components/agent-builder/components/AiTextArea.js.map +1 -1
- package/dist/esm/components/agent-builder/components/ToolInstructionsField.js +30 -31
- package/dist/esm/components/agent-builder/components/ToolInstructionsField.js.map +1 -1
- package/dist/esm/components/bik-chatbot/components/ChatWindow.js +53 -54
- package/dist/esm/components/bik-chatbot/components/ChatWindow.js.map +1 -1
- package/dist/esm/components/input/ChipInput.js +40 -41
- package/dist/esm/components/input/ChipInput.js.map +1 -1
- package/dist/esm/components/input/Input-helper.d.ts +0 -7
- package/dist/esm/components/input/Input-helper.js +25 -16
- package/dist/esm/components/input/Input-helper.js.map +1 -1
- package/dist/esm/components/input/Input.js +58 -60
- package/dist/esm/components/input/Input.js.map +1 -1
- package/dist/esm/components/input/Input.model.d.ts +0 -1
- package/dist/esm/components/plans/SubscriptionPlanSelector.js +40 -42
- package/dist/esm/components/plans/SubscriptionPlanSelector.js.map +1 -1
- package/dist/esm/editor/BikEditor.js +118 -122
- package/dist/esm/editor/BikEditor.js.map +1 -1
- package/dist/esm/editor/BikEditor.utils.d.ts +1 -1
- package/dist/esm/editor/BikEditor.utils.js +140 -141
- package/dist/esm/editor/BikEditor.utils.js.map +1 -1
- package/dist/esm/editor/extensions/buildExtensions.js +39 -49
- package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
- package/dist/esm/helpers/index.d.ts +0 -1
- package/dist/esm/icons/Informational/General/HourglassFilled.d.ts +7 -0
- package/dist/esm/icons/Informational/General/HourglassFilled.js +33 -0
- package/dist/esm/icons/Informational/General/HourglassFilled.js.map +1 -0
- package/dist/esm/icons/Informational/General/index.d.ts +1 -0
- package/dist/esm/icons/Media/Visual/index.d.ts +0 -2
- package/dist/esm/icons/index.d.ts +25 -25
- package/dist/esm/icons/index.js +416 -418
- package/dist/esm/icons/index.js.map +1 -1
- package/dist/esm/index.js +114 -124
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -2
- package/dist/cjs/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js +0 -2
- package/dist/cjs/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js.map +0 -1
- package/dist/cjs/helpers/sanitize.js +0 -2
- package/dist/cjs/helpers/sanitize.js.map +0 -1
- package/dist/cjs/icons/Media/Visual/FormkitNeutral.js +0 -2
- package/dist/cjs/icons/Media/Visual/FormkitNeutral.js.map +0 -1
- package/dist/cjs/icons/Media/Visual/FormkitSad.js +0 -2
- package/dist/cjs/icons/Media/Visual/FormkitSad.js.map +0 -1
- package/dist/esm/editor/extensions/htmlTagStrip/HtmlTagStripExtension.d.ts +0 -13
- package/dist/esm/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js +0 -64
- package/dist/esm/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js.map +0 -1
- package/dist/esm/helpers/sanitize.d.ts +0 -32
- package/dist/esm/helpers/sanitize.js +0 -204
- package/dist/esm/helpers/sanitize.js.map +0 -1
- package/dist/esm/icons/Media/Visual/FormkitNeutral.js +0 -58
- package/dist/esm/icons/Media/Visual/FormkitNeutral.js.map +0 -1
- package/dist/esm/icons/Media/Visual/FormkitSad.js +0 -61
- package/dist/esm/icons/Media/Visual/FormkitSad.js.map +0 -1
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsxs as o, jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import L from "../../../assets/icons/Ai_event_generating.svg.js";
|
|
3
|
-
import {
|
|
4
|
-
import { useState as f, useRef as S, useEffect as W } from "react";
|
|
3
|
+
import { useState as f, useRef as S, useEffect as V } from "react";
|
|
5
4
|
import n from "styled-components";
|
|
6
|
-
import { BodySecondary as
|
|
7
|
-
import { renderMarkdownLite as
|
|
8
|
-
import
|
|
9
|
-
const
|
|
5
|
+
import { BodySecondary as W, BodyCaption as E } from "../../TypographyStyle.js";
|
|
6
|
+
import { renderMarkdownLite as K } from "../utils/markdown.js";
|
|
7
|
+
import R from "./ThinkingIndicator.js";
|
|
8
|
+
const P = n.div`
|
|
10
9
|
display: flex;
|
|
11
10
|
flex-direction: column;
|
|
12
11
|
width: 100%;
|
|
@@ -35,7 +34,7 @@ const _ = n.div`
|
|
|
35
34
|
`;
|
|
36
35
|
}
|
|
37
36
|
}}
|
|
38
|
-
`,
|
|
37
|
+
`, _ = n.div`
|
|
39
38
|
padding: 16px;
|
|
40
39
|
border-bottom: 1px solid #e5e7eb;
|
|
41
40
|
display: flex;
|
|
@@ -49,13 +48,13 @@ const _ = n.div`
|
|
|
49
48
|
font-weight: 500;
|
|
50
49
|
color: #374151;
|
|
51
50
|
}
|
|
52
|
-
`,
|
|
51
|
+
`, N = n.div`
|
|
53
52
|
flex: 1;
|
|
54
53
|
display: flex;
|
|
55
54
|
flex-direction: column;
|
|
56
55
|
overflow: hidden;
|
|
57
56
|
min-height: 0;
|
|
58
|
-
`,
|
|
57
|
+
`, q = n.div`
|
|
59
58
|
flex: 1;
|
|
60
59
|
overflow-y: auto;
|
|
61
60
|
padding: 16px;
|
|
@@ -84,13 +83,13 @@ const _ = n.div`
|
|
|
84
83
|
&::-webkit-scrollbar-thumb:hover {
|
|
85
84
|
background: #a8a8a8;
|
|
86
85
|
}
|
|
87
|
-
`,
|
|
86
|
+
`, J = n.div`
|
|
88
87
|
background: white;
|
|
89
88
|
border-radius: 12px;
|
|
90
89
|
padding: 16px;
|
|
91
90
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
92
91
|
border: 1px solid #e5e7eb;
|
|
93
|
-
`,
|
|
92
|
+
`, O = n.div`
|
|
94
93
|
width: 100%;
|
|
95
94
|
height: 180px;
|
|
96
95
|
background: #f3f4f6;
|
|
@@ -100,7 +99,7 @@ const _ = n.div`
|
|
|
100
99
|
justify-content: center;
|
|
101
100
|
position: relative;
|
|
102
101
|
margin-bottom: 12px;
|
|
103
|
-
`,
|
|
102
|
+
`, Q = n.div`
|
|
104
103
|
width: 48px;
|
|
105
104
|
height: 48px;
|
|
106
105
|
background: rgba(0, 0, 0, 0.7);
|
|
@@ -122,11 +121,11 @@ const _ = n.div`
|
|
|
122
121
|
fill: white;
|
|
123
122
|
margin-left: 2px;
|
|
124
123
|
}
|
|
125
|
-
`,
|
|
124
|
+
`, U = n.div`
|
|
126
125
|
font-size: 14px;
|
|
127
126
|
color: #374151;
|
|
128
127
|
line-height: 1.5;
|
|
129
|
-
`,
|
|
128
|
+
`, X = n.div`
|
|
130
129
|
padding: 12px 16px;
|
|
131
130
|
border-radius: 16px;
|
|
132
131
|
font-size: 14px;
|
|
@@ -162,15 +161,15 @@ const _ = n.div`
|
|
|
162
161
|
border-bottom-left-radius: 4px;
|
|
163
162
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
164
163
|
`}
|
|
165
|
-
`,
|
|
164
|
+
`, Y = n.div`
|
|
166
165
|
padding: 16px;
|
|
167
166
|
flex-shrink: 0;
|
|
168
|
-
`,
|
|
167
|
+
`, Z = n.div`
|
|
169
168
|
display: flex;
|
|
170
169
|
flex-direction: column;
|
|
171
170
|
gap: 8px;
|
|
172
171
|
align-items: flex-end;
|
|
173
|
-
`,
|
|
172
|
+
`, ee = n.button`
|
|
174
173
|
border: 1px dotted #febad2;
|
|
175
174
|
background: linear-gradient(
|
|
176
175
|
92.69deg,
|
|
@@ -199,14 +198,14 @@ const _ = n.div`
|
|
|
199
198
|
&:active:not(:disabled) {
|
|
200
199
|
transform: scale(0.98);
|
|
201
200
|
}
|
|
202
|
-
`,
|
|
201
|
+
`, te = n.div`
|
|
203
202
|
padding: 16px;
|
|
204
203
|
background: white;
|
|
205
|
-
`,
|
|
204
|
+
`, ie = n.div`
|
|
206
205
|
display: flex;
|
|
207
206
|
flex-direction: column;
|
|
208
207
|
gap: 8px;
|
|
209
|
-
`,
|
|
208
|
+
`, ne = n.button`
|
|
210
209
|
background: #fef2f2;
|
|
211
210
|
color: #dc2626;
|
|
212
211
|
padding: 12px 16px;
|
|
@@ -226,14 +225,14 @@ const _ = n.div`
|
|
|
226
225
|
&:active:not(:disabled) {
|
|
227
226
|
transform: scale(0.98);
|
|
228
227
|
}
|
|
229
|
-
`,
|
|
228
|
+
`, re = n.div`
|
|
230
229
|
padding: 16px;
|
|
231
230
|
flex-shrink: 0;
|
|
232
|
-
`,
|
|
231
|
+
`, oe = n.div`
|
|
233
232
|
position: relative;
|
|
234
233
|
display: flex;
|
|
235
234
|
width: 100%;
|
|
236
|
-
`,
|
|
235
|
+
`, ae = n.textarea`
|
|
237
236
|
flex: 1;
|
|
238
237
|
border: 1px solid ${(e) => e.hasText ? "#3b82f6" : "#d1d5db"};
|
|
239
238
|
border-radius: 12px;
|
|
@@ -260,7 +259,7 @@ const _ = n.div`
|
|
|
260
259
|
&::placeholder {
|
|
261
260
|
color: #9ca3af;
|
|
262
261
|
}
|
|
263
|
-
`,
|
|
262
|
+
`, de = n.button`
|
|
264
263
|
position: absolute;
|
|
265
264
|
bottom: 10px;
|
|
266
265
|
right: 10px;
|
|
@@ -292,7 +291,7 @@ const _ = n.div`
|
|
|
292
291
|
fill: white;
|
|
293
292
|
font-weight: bold;
|
|
294
293
|
}
|
|
295
|
-
`,
|
|
294
|
+
`, le = n.span`
|
|
296
295
|
background: linear-gradient(
|
|
297
296
|
${(e) => e.angle || 92.69}deg,
|
|
298
297
|
${(e) => e.colors || "#ff166a 0.37%, #fb5f08 100%"}
|
|
@@ -301,11 +300,11 @@ const _ = n.div`
|
|
|
301
300
|
-webkit-text-fill-color: transparent;
|
|
302
301
|
background-clip: text;
|
|
303
302
|
display: inline-block;
|
|
304
|
-
`,
|
|
303
|
+
`, me = ({
|
|
305
304
|
messages: e,
|
|
306
305
|
onSend: p,
|
|
307
|
-
header:
|
|
308
|
-
placeholder:
|
|
306
|
+
header: I = "Create with AI",
|
|
307
|
+
placeholder: T = "Discover the right event & launch campaigns for better conversions...",
|
|
309
308
|
suggestions: u = [
|
|
310
309
|
"Top festivals for marketing",
|
|
311
310
|
"Top events this week?",
|
|
@@ -326,51 +325,51 @@ const _ = n.div`
|
|
|
326
325
|
r || i.key === "Enter" && !i.shiftKey && (i.preventDefault(), !b && a.trim() && F());
|
|
327
326
|
}, H = (i) => {
|
|
328
327
|
if (r) return;
|
|
329
|
-
const C =
|
|
328
|
+
const C = i.target.value;
|
|
330
329
|
w(C), j(C.trim().length > 0);
|
|
331
330
|
const h = y.current;
|
|
332
331
|
h && (h.style.height = "auto", h.style.height = `${Math.min(h.scrollHeight, 117)}px`);
|
|
333
332
|
}, x = a.trim().length > 0, G = r || b || !x;
|
|
334
|
-
return
|
|
333
|
+
return V(() => {
|
|
335
334
|
v.current?.scrollIntoView({ behavior: "smooth" });
|
|
336
|
-
}, [e, c, s]), /* @__PURE__ */ o(
|
|
337
|
-
/* @__PURE__ */ o(
|
|
335
|
+
}, [e, c, s]), /* @__PURE__ */ o(P, { chatState: d, style: { height: B || "100%" }, children: [
|
|
336
|
+
/* @__PURE__ */ o(_, { children: [
|
|
338
337
|
/* @__PURE__ */ t(L, { height: 24, width: 24 }),
|
|
339
|
-
/* @__PURE__ */ t("div", { className: "header-text", children:
|
|
338
|
+
/* @__PURE__ */ t("div", { className: "header-text", children: I })
|
|
340
339
|
] }),
|
|
341
|
-
/* @__PURE__ */ o(
|
|
342
|
-
/* @__PURE__ */ o(
|
|
343
|
-
d === "conversation-starter" && l && /* @__PURE__ */ o(
|
|
344
|
-
/* @__PURE__ */ t(
|
|
345
|
-
/* @__PURE__ */ o(
|
|
346
|
-
/* @__PURE__ */ t(
|
|
347
|
-
/* @__PURE__ */ t(
|
|
340
|
+
/* @__PURE__ */ o(N, { children: [
|
|
341
|
+
/* @__PURE__ */ o(q, { children: [
|
|
342
|
+
d === "conversation-starter" && l && /* @__PURE__ */ o(J, { children: [
|
|
343
|
+
/* @__PURE__ */ t(O, { children: /* @__PURE__ */ t(Q, { onClick: l.onPlay, children: /* @__PURE__ */ t("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ t("path", { d: "M8 5v14l11-7z" }) }) }) }),
|
|
344
|
+
/* @__PURE__ */ o(U, { children: [
|
|
345
|
+
/* @__PURE__ */ t(W, { style: { fontWeight: 500, marginBottom: "4px" }, children: l.title }),
|
|
346
|
+
/* @__PURE__ */ t(E, { children: l.description })
|
|
348
347
|
] })
|
|
349
348
|
] }),
|
|
350
|
-
e.map((i) => /* @__PURE__ */ t(
|
|
349
|
+
e.map((i) => /* @__PURE__ */ t(X, { role: i.role, children: i.role === "assistant" ? /* @__PURE__ */ t(
|
|
351
350
|
"div",
|
|
352
351
|
{
|
|
353
352
|
dangerouslySetInnerHTML: {
|
|
354
|
-
__html:
|
|
353
|
+
__html: K(i.content)
|
|
355
354
|
}
|
|
356
355
|
}
|
|
357
356
|
) : /* @__PURE__ */ t("div", { style: { whiteSpace: "pre-wrap" }, children: i.content }) }, i.id)),
|
|
358
|
-
(c || s) && /* @__PURE__ */ t(
|
|
357
|
+
(c || s) && /* @__PURE__ */ t(R, {}),
|
|
359
358
|
/* @__PURE__ */ t("div", { ref: v })
|
|
360
359
|
] }),
|
|
361
|
-
g && d === "conversation-starter" && /* @__PURE__ */ t(
|
|
362
|
-
|
|
360
|
+
g && d === "conversation-starter" && /* @__PURE__ */ t(Y, { children: /* @__PURE__ */ t(Z, { children: g.map((i) => /* @__PURE__ */ t(
|
|
361
|
+
ee,
|
|
363
362
|
{
|
|
364
363
|
disabled: r,
|
|
365
364
|
onClick: () => {
|
|
366
365
|
r || (z?.(i), p(i.text));
|
|
367
366
|
},
|
|
368
|
-
children: /* @__PURE__ */ t(
|
|
367
|
+
children: /* @__PURE__ */ t(le, { children: i.text })
|
|
369
368
|
},
|
|
370
369
|
i.id
|
|
371
370
|
)) }) }),
|
|
372
|
-
!g && u.length > 0 && d === "default" && /* @__PURE__ */ t(
|
|
373
|
-
|
|
371
|
+
!g && u.length > 0 && d === "default" && /* @__PURE__ */ t(te, { children: /* @__PURE__ */ t(ie, { children: u.map((i) => /* @__PURE__ */ t(
|
|
372
|
+
ne,
|
|
374
373
|
{
|
|
375
374
|
disabled: r,
|
|
376
375
|
onClick: () => !r && p(i),
|
|
@@ -378,14 +377,14 @@ const _ = n.div`
|
|
|
378
377
|
},
|
|
379
378
|
i
|
|
380
379
|
)) }) }),
|
|
381
|
-
/* @__PURE__ */ t(
|
|
380
|
+
/* @__PURE__ */ t(re, { children: /* @__PURE__ */ o(oe, { children: [
|
|
382
381
|
/* @__PURE__ */ t(
|
|
383
|
-
|
|
382
|
+
ae,
|
|
384
383
|
{
|
|
385
384
|
ref: y,
|
|
386
385
|
value: a,
|
|
387
386
|
onChange: H,
|
|
388
|
-
placeholder:
|
|
387
|
+
placeholder: T,
|
|
389
388
|
onKeyDown: D,
|
|
390
389
|
disabled: r,
|
|
391
390
|
hasText: x,
|
|
@@ -393,7 +392,7 @@ const _ = n.div`
|
|
|
393
392
|
}
|
|
394
393
|
),
|
|
395
394
|
/* @__PURE__ */ t(
|
|
396
|
-
|
|
395
|
+
de,
|
|
397
396
|
{
|
|
398
397
|
onClick: F,
|
|
399
398
|
disabled: G,
|
|
@@ -423,7 +422,7 @@ const _ = n.div`
|
|
|
423
422
|
] });
|
|
424
423
|
};
|
|
425
424
|
export {
|
|
426
|
-
|
|
427
|
-
|
|
425
|
+
le as CustomGradientText,
|
|
426
|
+
me as default
|
|
428
427
|
};
|
|
429
428
|
//# sourceMappingURL=ChatWindow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.js","sources":["../../../../../src/components/bik-chatbot/components/ChatWindow.tsx"],"sourcesContent":["import AiIcon from '@src/assets/icons/Ai_event_generating.svg';\nimport { stripHtmlTags } from '@src/helpers/sanitize';\nimport React, { useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { BodyCaption, BodySecondary } from '@src/components/TypographyStyle';\nimport { ChatState, ChatWindowProps } from '../types';\nimport { renderMarkdownLite } from '../utils/markdown';\nimport ThinkingIndicator from './ThinkingIndicator';\n\n// Single-column layout container\nconst ChatContainer = styled.div<{ chatState: ChatState }>`\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\tmax-height: 100%;\n\tbackground: white;\n\tborder-left: 1px solid #e5e7eb;\n\tposition: relative;\n\n\t/* State-based styling */\n\t${(props) => {\n\t\tswitch (props.chatState) {\n\t\t\tcase 'conversation-starter':\n\t\t\t\treturn `\n background: linear-gradient(180deg, #FFF6F9 0%, #FFFFFF 100%);\n `;\n\t\t\tcase 'thinking':\n\t\t\t\treturn `\n background: linear-gradient(180deg, #F8F9FA 0%, #FFFFFF 100%);\n `;\n\t\t\tdefault:\n\t\t\t\treturn `\n background: white;\n `;\n\t\t}\n\t}}\n`;\n\nconst Header = styled.div`\n\tpadding: 16px;\n\tborder-bottom: 1px solid #e5e7eb;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tbackground: white;\n\tflex-shrink: 0;\n\n\t.header-text {\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tcolor: #374151;\n\t}\n`;\n\n// Main content area - single column\nconst MainContent = styled.div`\n\tflex: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n\tmin-height: 0;\n`;\n\nconst MessagesWrapper = styled.div`\n\tflex: 1;\n\toverflow-y: auto;\n\tpadding: 16px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 16px;\n\tbackground: #fafafa;\n\tscroll-behavior: smooth;\n\tmin-height: 0;\n\n\t/* Custom scrollbar */\n\t&::-webkit-scrollbar {\n\t\twidth: 6px;\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tbackground: #f1f1f1;\n\t\tborder-radius: 3px;\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground: #c1c1c1;\n\t\tborder-radius: 3px;\n\t}\n\n\t&::-webkit-scrollbar-thumb:hover {\n\t\tbackground: #a8a8a8;\n\t}\n`;\n\nconst VideoCard = styled.div`\n\tbackground: white;\n\tborder-radius: 12px;\n\tpadding: 16px;\n\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n\tborder: 1px solid #e5e7eb;\n`;\n\nconst VideoContainer = styled.div`\n\twidth: 100%;\n\theight: 180px;\n\tbackground: #f3f4f6;\n\tborder-radius: 8px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tposition: relative;\n\tmargin-bottom: 12px;\n`;\n\nconst PlayButton = styled.div`\n\twidth: 48px;\n\theight: 48px;\n\tbackground: rgba(0, 0, 0, 0.7);\n\tborder-radius: 50%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\ttransition: all 0.2s ease;\n\n\t&:hover {\n\t\tbackground: rgba(0, 0, 0, 0.8);\n\t\ttransform: scale(1.05);\n\t}\n\n\tsvg {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t\tfill: white;\n\t\tmargin-left: 2px;\n\t}\n`;\n\nconst VideoText = styled.div`\n\tfont-size: 14px;\n\tcolor: #374151;\n\tline-height: 1.5;\n`;\n\nconst Bubble = styled.div<{ role: 'user' | 'assistant' | 'system' }>`\n\tpadding: 12px 16px;\n\tborder-radius: 16px;\n\tfont-size: 14px;\n\tmax-width: 80%;\n\twhite-space: pre-line;\n\tword-wrap: break-word;\n\n\t${(props) =>\n\t\tprops.role === 'user'\n\t\t\t? `\n background: linear-gradient(92.69deg, rgba(255, 230, 238, 0.5) 0.37%, rgba(255, 240, 231, 0.5) 100%);\n margin-left: auto;\n border-bottom-right-radius: 4px;\n \n & > div {\n background: linear-gradient(92.69deg, #FF166A 0.37%, #FB5F08 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n display: inline-block;\n }\n `\n\t\t\t: props.role === 'system'\n\t\t\t? `\n background: #f3f4f6;\n color: #6b7280;\n font-size: 12px;\n font-style: italic;\n text-align: center;\n margin: 0 auto;\n max-width: 90%;\n `\n\t\t\t: `\n background: white;\n color: #111827;\n border: 1px solid #e5e7eb;\n margin-right: auto;\n border-bottom-left-radius: 4px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n `}\n`;\n\n// Ice breakers section - at the bottom before input\nconst IceBreakersSection = styled.div`\n\tpadding: 16px;\n\tflex-shrink: 0;\n`;\n\nconst IceBreakersGrid = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\talign-items: flex-end;\n`;\n\nconst IceBreakerChip = styled.button<{ disabled?: boolean }>`\n\tborder: 1px dotted #febad2;\n\tbackground: linear-gradient(\n\t\t92.69deg,\n\t\trgba(255, 230, 238, 0.5) 0.37%,\n\t\trgba(255, 240, 231, 0.5) 100%\n\t);\n\tpadding: 8px 16px;\n\tborder-radius: 8px;\n\tfont-size: 13px;\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\ttext-align: left;\n\tmax-width: 280px;\n\talign-self: flex-end;\n\topacity: ${(props) => (props.disabled ? 0.5 : 1)};\n\n\t&:hover:not(:disabled) {\n\t\tbackground: linear-gradient(\n\t\t\t92.69deg,\n\t\t\trgba(255, 230, 238, 0.7) 0.37%,\n\t\t\trgba(255, 240, 231, 0.7) 100%\n\t\t);\n\t\tborder-color: #f472b6;\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: scale(0.98);\n\t}\n`;\n\n// Suggestions section - styled like ice breakers but for regular suggestions\nconst SuggestionsSection = styled.div`\n\tpadding: 16px;\n\tbackground: white;\n`;\n\nconst SuggestionsGrid = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n`;\n\nconst SuggestionChip = styled.button<{ disabled?: boolean }>`\n\tbackground: #fef2f2;\n\tcolor: #dc2626;\n\tpadding: 12px 16px;\n\tborder-radius: 8px;\n\tfont-size: 13px;\n\tborder: 1px solid #fecaca;\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\ttext-align: left;\n\topacity: ${(props) => (props.disabled ? 0.5 : 1)};\n\n\t&:hover:not(:disabled) {\n\t\tbackground: #fee2e2;\n\t\tborder-color: #fca5a5;\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: scale(0.98);\n\t}\n`;\n\nconst InputContainer = styled.div`\n\tpadding: 16px;\n\tflex-shrink: 0;\n`;\n\nconst InputBubble = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n\twidth: 100%;\n`;\n\nconst TextInput = styled.textarea<{ hasText: boolean; chatState: ChatState }>`\n\tflex: 1;\n\tborder: 1px solid ${(props) => (props.hasText ? '#3b82f6' : '#d1d5db')};\n\tborder-radius: 12px;\n\tpadding: 12px;\n\tpadding-right: 48px;\n\tfont-size: 14px;\n\toutline: none;\n\tcolor: #374151;\n\tbackground: white;\n\tbox-shadow: 0px 2px 8px 0px #0000001f;\n\ttransition: all 0.2s ease;\n\tresize: none;\n\tmin-height: 44px;\n\tmax-height: 120px;\n\tfont-family: inherit;\n\twidth: 100%;\n\n\t&:focus {\n\t\tborder-color: #3b82f6;\n\t\tbackground: white;\n\t\tbox-shadow: 0px 2px 8px 0px #0000001f, 0 0 0 3px rgba(59, 130, 246, 0.1);\n\t}\n\n\t&::placeholder {\n\t\tcolor: #9ca3af;\n\t}\n`;\n\nconst SendButton = styled.button<{ disabled?: boolean; hasText: boolean }>`\n\tposition: absolute;\n\tbottom: 10px;\n\tright: 10px;\n\twidth: 36px;\n\theight: 36px;\n\tborder-radius: 50%;\n\tbackground: ${(props) =>\n\t\tprops.hasText\n\t\t\t? 'linear-gradient(135deg, #FF166A 0%, #FB5F08 100%)'\n\t\t\t: '#e5e7eb'};\n\tborder: none;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\tbox-shadow: 0 2px 8px 0px #fa709a1c;\n\tz-index: 2;\n\n\t&:hover:not(:disabled) {\n\t\tbackground: ${(props) =>\n\t\t\tprops.hasText && !props.disabled\n\t\t\t\t? 'linear-gradient(135deg, #F857A6 0%, #FF5858 100%)'\n\t\t\t\t: '#e5e7eb'};\n\t\ttransform: scale(1.05);\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: scale(0.95);\n\t}\n\n\tsvg {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t\tfill: white;\n\t\tfont-weight: bold;\n\t}\n`;\n\n// Customizable gradient text component\nexport const CustomGradientText = styled.span<{\n\tcolors?: string;\n\tangle?: number;\n}>`\n\tbackground: linear-gradient(\n\t\t${(props) => props.angle || 92.69}deg,\n\t\t${(props) => props.colors || '#ff166a 0.37%, #fb5f08 100%'}\n\t);\n\t-webkit-background-clip: text;\n\t-webkit-text-fill-color: transparent;\n\tbackground-clip: text;\n\tdisplay: inline-block;\n`;\n\n// Export ChatState type for backward compatibility\nexport type { ChatState } from '../types';\n\ninterface ChatWindowWithHeightProps extends ChatWindowProps {\n\tchatWindowHeight?: string | number;\n}\n\nconst ChatWindow: React.FC<ChatWindowWithHeightProps> = ({\n\tmessages,\n\tonSend,\n\theader = 'Create with AI',\n\tplaceholder = 'Discover the right event & launch campaigns for better conversions...',\n\tsuggestions = [\n\t\t'Top festivals for marketing',\n\t\t'Top events this week?',\n\t\t'Top August festivals near you',\n\t],\n\ticeBreakers,\n\tvideoStarter,\n\tdisabled = false,\n\tisThinking = false,\n\tonIceBreakerClick,\n\tchatState,\n\tchatWindowHeight,\n\tinputDisabled = false,\n}) => {\n\tconst [input, setInput] = useState('');\n\tconst [thinking, setThinking] = useState(false);\n\tconst [isTyping, setIsTyping] = useState(false);\n\tconst bottomRef = useRef<HTMLDivElement>(null);\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst isThinkingState = thinking || isThinking;\n\tconst isInputDisabledState = disabled || inputDisabled;\n\n\t// Determine current chat state\n\tconst getCurrentChatState = (): ChatState => {\n\t\tif (chatState) return chatState; // Explicit state override\n\t\tif (thinking || isThinking) return 'thinking';\n\t\tif (isTyping && input.trim().length > 0) return 'typing';\n\t\tif (messages.length === 0) return 'conversation-starter';\n\t\tif (messages.length > 0) return 'conversation';\n\t\treturn 'default';\n\t};\n\n\tconst currentState = getCurrentChatState();\n\n\t// markdown renderer moved to ../utils/markdown\n\n\tconst handleSend = () => {\n\t\tif (!input.trim() || isInputDisabledState || isThinkingState) return;\n\t\tonSend(input);\n\t\tsetInput('');\n\t\tsetThinking(true);\n\t\tsetTimeout(() => setThinking(false), 1500);\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (isInputDisabledState) return;\n\t\tif (e.key === 'Enter' && !e.shiftKey) {\n\t\t\te.preventDefault();\n\t\t\tif (!isThinkingState && input.trim()) {\n\t\t\t\thandleSend();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\tif (isInputDisabledState) return;\n\t\tconst value = stripHtmlTags(e.target.value);\n\t\tsetInput(value);\n\t\tsetIsTyping(value.trim().length > 0);\n\n\t\t// Auto-resize textarea\n\t\tconst textarea = textareaRef.current;\n\t\tif (textarea) {\n\t\t\ttextarea.style.height = 'auto';\n\t\t\ttextarea.style.height = `${Math.min(textarea.scrollHeight, 117)}px`;\n\t\t}\n\t};\n\n\tconst hasText = input.trim().length > 0;\n\tconst isSendDisabled = isInputDisabledState || isThinkingState || !hasText;\n\n\tuseEffect(() => {\n\t\tbottomRef.current?.scrollIntoView({ behavior: 'smooth' });\n\t}, [messages, thinking, isThinking]);\n\n\t// Use chatWindowHeight if provided, otherwise use 100% if fullHeight is active\n\tconst containerHeight = chatWindowHeight || '100%';\n\n\treturn (\n\t\t<ChatContainer chatState={currentState} style={{ height: containerHeight }}>\n\t\t\t{/* Header */}\n\t\t\t<Header>\n\t\t\t\t<AiIcon height={24} width={24} />\n\t\t\t\t<div className=\"header-text\">{header}</div>\n\t\t\t</Header>\n\n\t\t\t{/* Main Content - Single Column Layout */}\n\t\t\t<MainContent>\n\t\t\t\t{/* Messages Section */}\n\t\t\t\t<MessagesWrapper>\n\t\t\t\t\t{/* Video starter card - only when no messages and videoStarter provided */}\n\t\t\t\t\t{currentState === 'conversation-starter' && videoStarter && (\n\t\t\t\t\t\t<VideoCard>\n\t\t\t\t\t\t\t<VideoContainer>\n\t\t\t\t\t\t\t\t<PlayButton onClick={videoStarter.onPlay}>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n\t\t\t\t\t\t\t\t\t\t<path d=\"M8 5v14l11-7z\" />\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</PlayButton>\n\t\t\t\t\t\t\t</VideoContainer>\n\t\t\t\t\t\t\t<VideoText>\n\t\t\t\t\t\t\t\t<BodySecondary style={{ fontWeight: 500, marginBottom: '4px' }}>\n\t\t\t\t\t\t\t\t\t{videoStarter.title}\n\t\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t\t\t<BodyCaption>{videoStarter.description}</BodyCaption>\n\t\t\t\t\t\t\t</VideoText>\n\t\t\t\t\t\t</VideoCard>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Render messages (assistant supports lite Markdown) */}\n\t\t\t\t\t{messages.map((m) => (\n\t\t\t\t\t\t<Bubble key={m.id} role={m.role}>\n\t\t\t\t\t\t\t{m.role === 'assistant' ? (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t\t\t__html: renderMarkdownLite(m.content),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div style={{ whiteSpace: 'pre-wrap' }}>{m.content}</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Bubble>\n\t\t\t\t\t))}\n\n\t\t\t\t\t{/* Thinking bubble */}\n\t\t\t\t\t{(thinking || isThinking) && <ThinkingIndicator />}\n\n\t\t\t\t\t<div ref={bottomRef} />\n\t\t\t\t</MessagesWrapper>\n\n\t\t\t\t{/* Ice Breakers Section - At bottom when no messages and ice breakers provided */}\n\t\t\t\t{iceBreakers && currentState === 'conversation-starter' && (\n\t\t\t\t\t<IceBreakersSection>\n\t\t\t\t\t\t<IceBreakersGrid>\n\t\t\t\t\t\t\t{iceBreakers.map((iceBreaker) => (\n\t\t\t\t\t\t\t\t<IceBreakerChip\n\t\t\t\t\t\t\t\t\tkey={iceBreaker.id}\n\t\t\t\t\t\t\t\t\tdisabled={isInputDisabledState}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tif (!isInputDisabledState) {\n\t\t\t\t\t\t\t\t\t\t\tonIceBreakerClick?.(iceBreaker);\n\t\t\t\t\t\t\t\t\t\t\tonSend(iceBreaker.text);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CustomGradientText>{iceBreaker.text}</CustomGradientText>\n\t\t\t\t\t\t\t\t</IceBreakerChip>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</IceBreakersGrid>\n\t\t\t\t\t</IceBreakersSection>\n\t\t\t\t)}\n\n\t\t\t\t{/* Regular Suggestions - Show when no ice breakers are provided */}\n\t\t\t\t{!iceBreakers &&\n\t\t\t\t\tsuggestions.length > 0 &&\n\t\t\t\t\tcurrentState === 'default' && (\n\t\t\t\t\t\t<SuggestionsSection>\n\t\t\t\t\t\t\t<SuggestionsGrid>\n\t\t\t\t\t\t\t\t{suggestions.map((s) => (\n\t\t\t\t\t\t\t\t\t<SuggestionChip\n\t\t\t\t\t\t\t\t\t\tkey={s}\n\t\t\t\t\t\t\t\t\t\tdisabled={isInputDisabledState}\n\t\t\t\t\t\t\t\t\t\tonClick={() => !isInputDisabledState && onSend(s)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{s}\n\t\t\t\t\t\t\t\t\t</SuggestionChip>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</SuggestionsGrid>\n\t\t\t\t\t\t</SuggestionsSection>\n\t\t\t\t\t)}\n\n\t\t\t\t{/* Input Container - Always at bottom */}\n\t\t\t\t<InputContainer>\n\t\t\t\t\t<InputBubble>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\tvalue={input}\n\t\t\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tdisabled={isInputDisabledState}\n\t\t\t\t\t\t\thasText={hasText}\n\t\t\t\t\t\t\tchatState={currentState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SendButton\n\t\t\t\t\t\t\tonClick={handleSend}\n\t\t\t\t\t\t\tdisabled={isSendDisabled}\n\t\t\t\t\t\t\thasText={hasText}\n\t\t\t\t\t\t\taria-label=\"Send\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\tstroke=\"white\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M6 12h12\" />\n\t\t\t\t\t\t\t\t<path d=\"M12 6l6 6-6 6\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</SendButton>\n\t\t\t\t\t</InputBubble>\n\t\t\t\t</InputContainer>\n\t\t\t</MainContent>\n\t\t</ChatContainer>\n\t);\n};\n\nexport default ChatWindow;\n"],"names":["ChatContainer","styled","props","Header","MainContent","MessagesWrapper","VideoCard","VideoContainer","PlayButton","VideoText","Bubble","IceBreakersSection","IceBreakersGrid","IceBreakerChip","SuggestionsSection","SuggestionsGrid","SuggestionChip","InputContainer","InputBubble","TextInput","SendButton","CustomGradientText","ChatWindow","messages","onSend","header","placeholder","suggestions","iceBreakers","videoStarter","disabled","isThinking","onIceBreakerClick","chatState","chatWindowHeight","inputDisabled","input","setInput","useState","thinking","setThinking","isTyping","setIsTyping","bottomRef","useRef","textareaRef","isThinkingState","isInputDisabledState","currentState","handleSend","handleKeyDown","e","handleInputChange","value","stripHtmlTags","textarea","hasText","isSendDisabled","useEffect","jsxs","jsx","AiIcon","BodySecondary","BodyCaption","m","renderMarkdownLite","ThinkingIndicator","iceBreaker","s"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatWindow.js","sources":["../../../../../src/components/bik-chatbot/components/ChatWindow.tsx"],"sourcesContent":["import AiIcon from '@src/assets/icons/Ai_event_generating.svg';\nimport React, { useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { BodyCaption, BodySecondary } from '@src/components/TypographyStyle';\nimport { ChatState, ChatWindowProps } from '../types';\nimport { renderMarkdownLite } from '../utils/markdown';\nimport ThinkingIndicator from './ThinkingIndicator';\n\n// Single-column layout container\nconst ChatContainer = styled.div<{ chatState: ChatState }>`\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\tmax-height: 100%;\n\tbackground: white;\n\tborder-left: 1px solid #e5e7eb;\n\tposition: relative;\n\n\t/* State-based styling */\n\t${(props) => {\n\t\tswitch (props.chatState) {\n\t\t\tcase 'conversation-starter':\n\t\t\t\treturn `\n background: linear-gradient(180deg, #FFF6F9 0%, #FFFFFF 100%);\n `;\n\t\t\tcase 'thinking':\n\t\t\t\treturn `\n background: linear-gradient(180deg, #F8F9FA 0%, #FFFFFF 100%);\n `;\n\t\t\tdefault:\n\t\t\t\treturn `\n background: white;\n `;\n\t\t}\n\t}}\n`;\n\nconst Header = styled.div`\n\tpadding: 16px;\n\tborder-bottom: 1px solid #e5e7eb;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tbackground: white;\n\tflex-shrink: 0;\n\n\t.header-text {\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tcolor: #374151;\n\t}\n`;\n\n// Main content area - single column\nconst MainContent = styled.div`\n\tflex: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n\tmin-height: 0;\n`;\n\nconst MessagesWrapper = styled.div`\n\tflex: 1;\n\toverflow-y: auto;\n\tpadding: 16px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 16px;\n\tbackground: #fafafa;\n\tscroll-behavior: smooth;\n\tmin-height: 0;\n\n\t/* Custom scrollbar */\n\t&::-webkit-scrollbar {\n\t\twidth: 6px;\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tbackground: #f1f1f1;\n\t\tborder-radius: 3px;\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground: #c1c1c1;\n\t\tborder-radius: 3px;\n\t}\n\n\t&::-webkit-scrollbar-thumb:hover {\n\t\tbackground: #a8a8a8;\n\t}\n`;\n\nconst VideoCard = styled.div`\n\tbackground: white;\n\tborder-radius: 12px;\n\tpadding: 16px;\n\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n\tborder: 1px solid #e5e7eb;\n`;\n\nconst VideoContainer = styled.div`\n\twidth: 100%;\n\theight: 180px;\n\tbackground: #f3f4f6;\n\tborder-radius: 8px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tposition: relative;\n\tmargin-bottom: 12px;\n`;\n\nconst PlayButton = styled.div`\n\twidth: 48px;\n\theight: 48px;\n\tbackground: rgba(0, 0, 0, 0.7);\n\tborder-radius: 50%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\ttransition: all 0.2s ease;\n\n\t&:hover {\n\t\tbackground: rgba(0, 0, 0, 0.8);\n\t\ttransform: scale(1.05);\n\t}\n\n\tsvg {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t\tfill: white;\n\t\tmargin-left: 2px;\n\t}\n`;\n\nconst VideoText = styled.div`\n\tfont-size: 14px;\n\tcolor: #374151;\n\tline-height: 1.5;\n`;\n\nconst Bubble = styled.div<{ role: 'user' | 'assistant' | 'system' }>`\n\tpadding: 12px 16px;\n\tborder-radius: 16px;\n\tfont-size: 14px;\n\tmax-width: 80%;\n\twhite-space: pre-line;\n\tword-wrap: break-word;\n\n\t${(props) =>\n\t\tprops.role === 'user'\n\t\t\t? `\n background: linear-gradient(92.69deg, rgba(255, 230, 238, 0.5) 0.37%, rgba(255, 240, 231, 0.5) 100%);\n margin-left: auto;\n border-bottom-right-radius: 4px;\n \n & > div {\n background: linear-gradient(92.69deg, #FF166A 0.37%, #FB5F08 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n display: inline-block;\n }\n `\n\t\t\t: props.role === 'system'\n\t\t\t? `\n background: #f3f4f6;\n color: #6b7280;\n font-size: 12px;\n font-style: italic;\n text-align: center;\n margin: 0 auto;\n max-width: 90%;\n `\n\t\t\t: `\n background: white;\n color: #111827;\n border: 1px solid #e5e7eb;\n margin-right: auto;\n border-bottom-left-radius: 4px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n `}\n`;\n\n// Ice breakers section - at the bottom before input\nconst IceBreakersSection = styled.div`\n\tpadding: 16px;\n\tflex-shrink: 0;\n`;\n\nconst IceBreakersGrid = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\talign-items: flex-end;\n`;\n\nconst IceBreakerChip = styled.button<{ disabled?: boolean }>`\n\tborder: 1px dotted #febad2;\n\tbackground: linear-gradient(\n\t\t92.69deg,\n\t\trgba(255, 230, 238, 0.5) 0.37%,\n\t\trgba(255, 240, 231, 0.5) 100%\n\t);\n\tpadding: 8px 16px;\n\tborder-radius: 8px;\n\tfont-size: 13px;\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\ttext-align: left;\n\tmax-width: 280px;\n\talign-self: flex-end;\n\topacity: ${(props) => (props.disabled ? 0.5 : 1)};\n\n\t&:hover:not(:disabled) {\n\t\tbackground: linear-gradient(\n\t\t\t92.69deg,\n\t\t\trgba(255, 230, 238, 0.7) 0.37%,\n\t\t\trgba(255, 240, 231, 0.7) 100%\n\t\t);\n\t\tborder-color: #f472b6;\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: scale(0.98);\n\t}\n`;\n\n// Suggestions section - styled like ice breakers but for regular suggestions\nconst SuggestionsSection = styled.div`\n\tpadding: 16px;\n\tbackground: white;\n`;\n\nconst SuggestionsGrid = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n`;\n\nconst SuggestionChip = styled.button<{ disabled?: boolean }>`\n\tbackground: #fef2f2;\n\tcolor: #dc2626;\n\tpadding: 12px 16px;\n\tborder-radius: 8px;\n\tfont-size: 13px;\n\tborder: 1px solid #fecaca;\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\ttext-align: left;\n\topacity: ${(props) => (props.disabled ? 0.5 : 1)};\n\n\t&:hover:not(:disabled) {\n\t\tbackground: #fee2e2;\n\t\tborder-color: #fca5a5;\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: scale(0.98);\n\t}\n`;\n\nconst InputContainer = styled.div`\n\tpadding: 16px;\n\tflex-shrink: 0;\n`;\n\nconst InputBubble = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n\twidth: 100%;\n`;\n\nconst TextInput = styled.textarea<{ hasText: boolean; chatState: ChatState }>`\n\tflex: 1;\n\tborder: 1px solid ${(props) => (props.hasText ? '#3b82f6' : '#d1d5db')};\n\tborder-radius: 12px;\n\tpadding: 12px;\n\tpadding-right: 48px;\n\tfont-size: 14px;\n\toutline: none;\n\tcolor: #374151;\n\tbackground: white;\n\tbox-shadow: 0px 2px 8px 0px #0000001f;\n\ttransition: all 0.2s ease;\n\tresize: none;\n\tmin-height: 44px;\n\tmax-height: 120px;\n\tfont-family: inherit;\n\twidth: 100%;\n\n\t&:focus {\n\t\tborder-color: #3b82f6;\n\t\tbackground: white;\n\t\tbox-shadow: 0px 2px 8px 0px #0000001f, 0 0 0 3px rgba(59, 130, 246, 0.1);\n\t}\n\n\t&::placeholder {\n\t\tcolor: #9ca3af;\n\t}\n`;\n\nconst SendButton = styled.button<{ disabled?: boolean; hasText: boolean }>`\n\tposition: absolute;\n\tbottom: 10px;\n\tright: 10px;\n\twidth: 36px;\n\theight: 36px;\n\tborder-radius: 50%;\n\tbackground: ${(props) =>\n\t\tprops.hasText\n\t\t\t? 'linear-gradient(135deg, #FF166A 0%, #FB5F08 100%)'\n\t\t\t: '#e5e7eb'};\n\tborder: none;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\tbox-shadow: 0 2px 8px 0px #fa709a1c;\n\tz-index: 2;\n\n\t&:hover:not(:disabled) {\n\t\tbackground: ${(props) =>\n\t\t\tprops.hasText && !props.disabled\n\t\t\t\t? 'linear-gradient(135deg, #F857A6 0%, #FF5858 100%)'\n\t\t\t\t: '#e5e7eb'};\n\t\ttransform: scale(1.05);\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: scale(0.95);\n\t}\n\n\tsvg {\n\t\twidth: 16px;\n\t\theight: 16px;\n\t\tfill: white;\n\t\tfont-weight: bold;\n\t}\n`;\n\n// Customizable gradient text component\nexport const CustomGradientText = styled.span<{\n\tcolors?: string;\n\tangle?: number;\n}>`\n\tbackground: linear-gradient(\n\t\t${(props) => props.angle || 92.69}deg,\n\t\t${(props) => props.colors || '#ff166a 0.37%, #fb5f08 100%'}\n\t);\n\t-webkit-background-clip: text;\n\t-webkit-text-fill-color: transparent;\n\tbackground-clip: text;\n\tdisplay: inline-block;\n`;\n\n// Export ChatState type for backward compatibility\nexport type { ChatState } from '../types';\n\ninterface ChatWindowWithHeightProps extends ChatWindowProps {\n\tchatWindowHeight?: string | number;\n}\n\nconst ChatWindow: React.FC<ChatWindowWithHeightProps> = ({\n\tmessages,\n\tonSend,\n\theader = 'Create with AI',\n\tplaceholder = 'Discover the right event & launch campaigns for better conversions...',\n\tsuggestions = [\n\t\t'Top festivals for marketing',\n\t\t'Top events this week?',\n\t\t'Top August festivals near you',\n\t],\n\ticeBreakers,\n\tvideoStarter,\n\tdisabled = false,\n\tisThinking = false,\n\tonIceBreakerClick,\n\tchatState,\n\tchatWindowHeight,\n\tinputDisabled = false,\n}) => {\n\tconst [input, setInput] = useState('');\n\tconst [thinking, setThinking] = useState(false);\n\tconst [isTyping, setIsTyping] = useState(false);\n\tconst bottomRef = useRef<HTMLDivElement>(null);\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst isThinkingState = thinking || isThinking;\n\tconst isInputDisabledState = disabled || inputDisabled;\n\n\t// Determine current chat state\n\tconst getCurrentChatState = (): ChatState => {\n\t\tif (chatState) return chatState; // Explicit state override\n\t\tif (thinking || isThinking) return 'thinking';\n\t\tif (isTyping && input.trim().length > 0) return 'typing';\n\t\tif (messages.length === 0) return 'conversation-starter';\n\t\tif (messages.length > 0) return 'conversation';\n\t\treturn 'default';\n\t};\n\n\tconst currentState = getCurrentChatState();\n\n\t// markdown renderer moved to ../utils/markdown\n\n\tconst handleSend = () => {\n\t\tif (!input.trim() || isInputDisabledState || isThinkingState) return;\n\t\tonSend(input);\n\t\tsetInput('');\n\t\tsetThinking(true);\n\t\tsetTimeout(() => setThinking(false), 1500);\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (isInputDisabledState) return;\n\t\tif (e.key === 'Enter' && !e.shiftKey) {\n\t\t\te.preventDefault();\n\t\t\tif (!isThinkingState && input.trim()) {\n\t\t\t\thandleSend();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\tif (isInputDisabledState) return;\n\t\tconst value = e.target.value;\n\t\tsetInput(value);\n\t\tsetIsTyping(value.trim().length > 0);\n\n\t\t// Auto-resize textarea\n\t\tconst textarea = textareaRef.current;\n\t\tif (textarea) {\n\t\t\ttextarea.style.height = 'auto';\n\t\t\ttextarea.style.height = `${Math.min(textarea.scrollHeight, 117)}px`;\n\t\t}\n\t};\n\n\tconst hasText = input.trim().length > 0;\n\tconst isSendDisabled = isInputDisabledState || isThinkingState || !hasText;\n\n\tuseEffect(() => {\n\t\tbottomRef.current?.scrollIntoView({ behavior: 'smooth' });\n\t}, [messages, thinking, isThinking]);\n\n\t// Use chatWindowHeight if provided, otherwise use 100% if fullHeight is active\n\tconst containerHeight = chatWindowHeight || '100%';\n\n\treturn (\n\t\t<ChatContainer chatState={currentState} style={{ height: containerHeight }}>\n\t\t\t{/* Header */}\n\t\t\t<Header>\n\t\t\t\t<AiIcon height={24} width={24} />\n\t\t\t\t<div className=\"header-text\">{header}</div>\n\t\t\t</Header>\n\n\t\t\t{/* Main Content - Single Column Layout */}\n\t\t\t<MainContent>\n\t\t\t\t{/* Messages Section */}\n\t\t\t\t<MessagesWrapper>\n\t\t\t\t\t{/* Video starter card - only when no messages and videoStarter provided */}\n\t\t\t\t\t{currentState === 'conversation-starter' && videoStarter && (\n\t\t\t\t\t\t<VideoCard>\n\t\t\t\t\t\t\t<VideoContainer>\n\t\t\t\t\t\t\t\t<PlayButton onClick={videoStarter.onPlay}>\n\t\t\t\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n\t\t\t\t\t\t\t\t\t\t<path d=\"M8 5v14l11-7z\" />\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</PlayButton>\n\t\t\t\t\t\t\t</VideoContainer>\n\t\t\t\t\t\t\t<VideoText>\n\t\t\t\t\t\t\t\t<BodySecondary style={{ fontWeight: 500, marginBottom: '4px' }}>\n\t\t\t\t\t\t\t\t\t{videoStarter.title}\n\t\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t\t\t<BodyCaption>{videoStarter.description}</BodyCaption>\n\t\t\t\t\t\t\t</VideoText>\n\t\t\t\t\t\t</VideoCard>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Render messages (assistant supports lite Markdown) */}\n\t\t\t\t\t{messages.map((m) => (\n\t\t\t\t\t\t<Bubble key={m.id} role={m.role}>\n\t\t\t\t\t\t\t{m.role === 'assistant' ? (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t\t\t__html: renderMarkdownLite(m.content),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div style={{ whiteSpace: 'pre-wrap' }}>{m.content}</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Bubble>\n\t\t\t\t\t))}\n\n\t\t\t\t\t{/* Thinking bubble */}\n\t\t\t\t\t{(thinking || isThinking) && <ThinkingIndicator />}\n\n\t\t\t\t\t<div ref={bottomRef} />\n\t\t\t\t</MessagesWrapper>\n\n\t\t\t\t{/* Ice Breakers Section - At bottom when no messages and ice breakers provided */}\n\t\t\t\t{iceBreakers && currentState === 'conversation-starter' && (\n\t\t\t\t\t<IceBreakersSection>\n\t\t\t\t\t\t<IceBreakersGrid>\n\t\t\t\t\t\t\t{iceBreakers.map((iceBreaker) => (\n\t\t\t\t\t\t\t\t<IceBreakerChip\n\t\t\t\t\t\t\t\t\tkey={iceBreaker.id}\n\t\t\t\t\t\t\t\t\tdisabled={isInputDisabledState}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tif (!isInputDisabledState) {\n\t\t\t\t\t\t\t\t\t\t\tonIceBreakerClick?.(iceBreaker);\n\t\t\t\t\t\t\t\t\t\t\tonSend(iceBreaker.text);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CustomGradientText>{iceBreaker.text}</CustomGradientText>\n\t\t\t\t\t\t\t\t</IceBreakerChip>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</IceBreakersGrid>\n\t\t\t\t\t</IceBreakersSection>\n\t\t\t\t)}\n\n\t\t\t\t{/* Regular Suggestions - Show when no ice breakers are provided */}\n\t\t\t\t{!iceBreakers &&\n\t\t\t\t\tsuggestions.length > 0 &&\n\t\t\t\t\tcurrentState === 'default' && (\n\t\t\t\t\t\t<SuggestionsSection>\n\t\t\t\t\t\t\t<SuggestionsGrid>\n\t\t\t\t\t\t\t\t{suggestions.map((s) => (\n\t\t\t\t\t\t\t\t\t<SuggestionChip\n\t\t\t\t\t\t\t\t\t\tkey={s}\n\t\t\t\t\t\t\t\t\t\tdisabled={isInputDisabledState}\n\t\t\t\t\t\t\t\t\t\tonClick={() => !isInputDisabledState && onSend(s)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{s}\n\t\t\t\t\t\t\t\t\t</SuggestionChip>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</SuggestionsGrid>\n\t\t\t\t\t\t</SuggestionsSection>\n\t\t\t\t\t)}\n\n\t\t\t\t{/* Input Container - Always at bottom */}\n\t\t\t\t<InputContainer>\n\t\t\t\t\t<InputBubble>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\tref={textareaRef}\n\t\t\t\t\t\t\tvalue={input}\n\t\t\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tdisabled={isInputDisabledState}\n\t\t\t\t\t\t\thasText={hasText}\n\t\t\t\t\t\t\tchatState={currentState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<SendButton\n\t\t\t\t\t\t\tonClick={handleSend}\n\t\t\t\t\t\t\tdisabled={isSendDisabled}\n\t\t\t\t\t\t\thasText={hasText}\n\t\t\t\t\t\t\taria-label=\"Send\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\tstroke=\"white\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M6 12h12\" />\n\t\t\t\t\t\t\t\t<path d=\"M12 6l6 6-6 6\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</SendButton>\n\t\t\t\t\t</InputBubble>\n\t\t\t\t</InputContainer>\n\t\t\t</MainContent>\n\t\t</ChatContainer>\n\t);\n};\n\nexport default ChatWindow;\n"],"names":["ChatContainer","styled","props","Header","MainContent","MessagesWrapper","VideoCard","VideoContainer","PlayButton","VideoText","Bubble","IceBreakersSection","IceBreakersGrid","IceBreakerChip","SuggestionsSection","SuggestionsGrid","SuggestionChip","InputContainer","InputBubble","TextInput","SendButton","CustomGradientText","ChatWindow","messages","onSend","header","placeholder","suggestions","iceBreakers","videoStarter","disabled","isThinking","onIceBreakerClick","chatState","chatWindowHeight","inputDisabled","input","setInput","useState","thinking","setThinking","isTyping","setIsTyping","bottomRef","useRef","textareaRef","isThinkingState","isInputDisabledState","currentState","handleSend","handleKeyDown","e","handleInputChange","value","textarea","hasText","isSendDisabled","useEffect","jsxs","jsx","AiIcon","BodySecondary","BodyCaption","m","renderMarkdownLite","ThinkingIndicator","iceBreaker","s"],"mappings":"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"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { jsxs as y, jsx as
|
|
2
|
-
import { useState as C, useRef as
|
|
1
|
+
import { jsxs as y, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { useState as C, useRef as L } from "react";
|
|
3
3
|
import { COLORS as o } from "../../constants/Theme.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
placeholder: m,
|
|
4
|
+
import { BodySecondary as O, BodyCaption as T } from "../TypographyStyle.js";
|
|
5
|
+
import { getContainerStyle as $, getContainerHoverStyle as H, getChipStyle as P, getChipRemoveStyle as _, getInputStyle as q } from "./ChipInput.styled.js";
|
|
6
|
+
const U = ({
|
|
7
|
+
onChipsChange: r,
|
|
8
|
+
placeholder: f,
|
|
10
9
|
chips: n,
|
|
11
|
-
label:
|
|
10
|
+
label: m,
|
|
12
11
|
labelColor: h,
|
|
13
12
|
hintText: p,
|
|
14
13
|
hintTextColor: k,
|
|
@@ -18,63 +17,63 @@ const X = ({
|
|
|
18
17
|
chipsContainerCustomStyle: b,
|
|
19
18
|
nativeID: x
|
|
20
19
|
}) => {
|
|
21
|
-
const [
|
|
20
|
+
const [a, u] = C(""), [c, g] = C(!1), S = L(null), d = R || [",", 188, "Enter", 13], B = (e) => {
|
|
22
21
|
if (d.includes(e.key) || d.includes(e.keyCode) || d.includes(e.which)) {
|
|
23
22
|
e.preventDefault();
|
|
24
|
-
const t =
|
|
25
|
-
t && !n.includes(t) && (
|
|
26
|
-
} else e.key === "Backspace" &&
|
|
23
|
+
const t = a.trim();
|
|
24
|
+
t && !n.includes(t) && (r([...n, t]), u(""));
|
|
25
|
+
} else e.key === "Backspace" && a === "" && n.length > 0 && r(n.slice(0, -1));
|
|
27
26
|
}, K = (e) => {
|
|
28
|
-
|
|
27
|
+
r(n.filter((i, t) => t !== e));
|
|
29
28
|
}, D = () => {
|
|
30
29
|
g(!0);
|
|
31
30
|
}, M = () => {
|
|
32
31
|
g(!1);
|
|
33
|
-
const e =
|
|
34
|
-
e && !n.includes(e) && (
|
|
35
|
-
},
|
|
32
|
+
const e = a.trim();
|
|
33
|
+
e && !n.includes(e) && (r([...n, e]), u(""));
|
|
34
|
+
}, V = () => {
|
|
36
35
|
S.current?.focus();
|
|
37
|
-
},
|
|
36
|
+
}, j = $(
|
|
38
37
|
!!l,
|
|
39
38
|
v,
|
|
40
39
|
b,
|
|
41
|
-
|
|
42
|
-
),
|
|
40
|
+
c
|
|
41
|
+
), w = c ? {} : H(), E = P(), F = _(), I = q(v);
|
|
43
42
|
return /* @__PURE__ */ y(
|
|
44
43
|
"div",
|
|
45
44
|
{
|
|
46
45
|
style: { display: "flex", flexDirection: "column", gap: 8 },
|
|
47
46
|
id: x,
|
|
48
47
|
children: [
|
|
49
|
-
|
|
48
|
+
m && /* @__PURE__ */ s(
|
|
50
49
|
O,
|
|
51
50
|
{
|
|
52
51
|
style: {
|
|
53
|
-
color:
|
|
52
|
+
color: c ? o.content.brand : l ? o.content.negative : h || o.content.primary
|
|
54
53
|
},
|
|
55
|
-
children:
|
|
54
|
+
children: m
|
|
56
55
|
}
|
|
57
56
|
),
|
|
58
57
|
/* @__PURE__ */ y(
|
|
59
58
|
"div",
|
|
60
59
|
{
|
|
61
|
-
style:
|
|
62
|
-
onClick:
|
|
60
|
+
style: j,
|
|
61
|
+
onClick: V,
|
|
63
62
|
onMouseEnter: (e) => {
|
|
64
|
-
|
|
63
|
+
c || Object.assign(e.currentTarget.style, w);
|
|
65
64
|
},
|
|
66
65
|
onMouseLeave: (e) => {
|
|
67
|
-
|
|
66
|
+
c || (e.currentTarget.style.border = `1px solid ${l ? o.stroke.negative.vibrant : o.stroke.primary}`);
|
|
68
67
|
},
|
|
69
68
|
children: [
|
|
70
|
-
n.map((e,
|
|
71
|
-
/* @__PURE__ */
|
|
72
|
-
/* @__PURE__ */
|
|
69
|
+
n.map((e, i) => /* @__PURE__ */ y("div", { style: E, children: [
|
|
70
|
+
/* @__PURE__ */ s("span", { children: e }),
|
|
71
|
+
/* @__PURE__ */ s(
|
|
73
72
|
"button",
|
|
74
73
|
{
|
|
75
|
-
style:
|
|
74
|
+
style: F,
|
|
76
75
|
onClick: (t) => {
|
|
77
|
-
t.stopPropagation(), K(
|
|
76
|
+
t.stopPropagation(), K(i);
|
|
78
77
|
},
|
|
79
78
|
onMouseEnter: (t) => {
|
|
80
79
|
t.currentTarget.style.color = o.content.secondary;
|
|
@@ -86,26 +85,26 @@ const X = ({
|
|
|
86
85
|
children: "×"
|
|
87
86
|
}
|
|
88
87
|
)
|
|
89
|
-
] },
|
|
90
|
-
/* @__PURE__ */
|
|
88
|
+
] }, i)),
|
|
89
|
+
/* @__PURE__ */ s(
|
|
91
90
|
"input",
|
|
92
91
|
{
|
|
93
92
|
ref: S,
|
|
94
93
|
type: "text",
|
|
95
|
-
value:
|
|
96
|
-
onChange: (e) => u(
|
|
94
|
+
value: a,
|
|
95
|
+
onChange: (e) => u(e.target.value),
|
|
97
96
|
onKeyDown: B,
|
|
98
97
|
onFocus: D,
|
|
99
98
|
onBlur: M,
|
|
100
|
-
placeholder: n.length === 0 &&
|
|
101
|
-
style:
|
|
99
|
+
placeholder: n.length === 0 && f && !c ? f : void 0,
|
|
100
|
+
style: I
|
|
102
101
|
}
|
|
103
102
|
)
|
|
104
103
|
]
|
|
105
104
|
}
|
|
106
105
|
),
|
|
107
|
-
(!!p || !!l) && /* @__PURE__ */
|
|
108
|
-
|
|
106
|
+
(!!p || !!l) && /* @__PURE__ */ s(
|
|
107
|
+
T,
|
|
109
108
|
{
|
|
110
109
|
style: {
|
|
111
110
|
color: l ? o.content.negative : k || o.content.secondary
|
|
@@ -118,6 +117,6 @@ const X = ({
|
|
|
118
117
|
);
|
|
119
118
|
};
|
|
120
119
|
export {
|
|
121
|
-
|
|
120
|
+
U as default
|
|
122
121
|
};
|
|
123
122
|
//# sourceMappingURL=ChipInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipInput.js","sources":["../../../../src/components/input/ChipInput.tsx"],"sourcesContent":["import React, { KeyboardEvent, useRef, useState } from 'react';\nimport { COLORS } from '@src/constants/Theme';\nimport {
|
|
1
|
+
{"version":3,"file":"ChipInput.js","sources":["../../../../src/components/input/ChipInput.tsx"],"sourcesContent":["import React, { KeyboardEvent, useRef, useState } from 'react';\nimport { COLORS } from '@src/constants/Theme';\nimport { BodyCaption, BodySecondary } from '../TypographyStyle';\nimport {\n\tgetChipRemoveStyle,\n\tgetChipStyle,\n\tgetContainerHoverStyle,\n\tgetContainerStyle,\n\tgetInputStyle,\n} from './ChipInput.styled';\n\nexport const extractSingleValueIfAny = (nativeID: string) =>\n\t(document?.querySelector(`#${nativeID} input`) as HTMLInputElement)?.value;\n\nexport const getInputNode = (nativeID: string) =>\n\tdocument?.querySelector(`#${nativeID} input`) as HTMLInputElement;\n\nexport interface ChipInputProps {\n\tonChipsChange: (chips: (string | number)[]) => void;\n\tplaceholder: string;\n\tlabel?: string;\n\tlabelColor?: string;\n\thintText?: string;\n\thintTextColor?: string;\n\tchipTheme?: () => void;\n\tchips: string[];\n\terror?: string;\n\tinputHeight?: number;\n\tcreateChipKeys?: (string | number)[];\n\tchipsContainerCustomStyle?: React.CSSProperties;\n\tnativeID?: string;\n}\n\nconst ChipInput: React.FC<ChipInputProps> = ({\n\tonChipsChange,\n\tplaceholder,\n\tchips,\n\tlabel,\n\tlabelColor,\n\thintText,\n\thintTextColor,\n\terror,\n\tinputHeight,\n\tcreateChipKeys,\n\tchipsContainerCustomStyle,\n\tnativeID,\n}) => {\n\tconst [inputValue, setInputValue] = useState('');\n\tconst [focused, setFocused] = useState(false);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\t// Default chip creation keys: comma (188), enter (13)\n\tconst defaultKeys = [',', 188, 'Enter', 13];\n\tconst chipKeys = createChipKeys || defaultKeys;\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n\t\tconst shouldCreateChip =\n\t\t\tchipKeys.includes(e.key) ||\n\t\t\tchipKeys.includes(e.keyCode) ||\n\t\t\tchipKeys.includes(e.which);\n\n\t\tif (shouldCreateChip) {\n\t\t\te.preventDefault();\n\t\t\tconst trimmedValue = inputValue.trim();\n\t\t\tif (trimmedValue && !chips.includes(trimmedValue)) {\n\t\t\t\tonChipsChange([...chips, trimmedValue]);\n\t\t\t\tsetInputValue('');\n\t\t\t}\n\t\t} else if (e.key === 'Backspace' && inputValue === '' && chips.length > 0) {\n\t\t\t// Remove last chip on backspace when input is empty\n\t\t\tonChipsChange(chips.slice(0, -1));\n\t\t}\n\t};\n\n\tconst handleRemoveChip = (indexToRemove: number) => {\n\t\tonChipsChange(chips.filter((_, index) => index !== indexToRemove));\n\t};\n\n\tconst handleFocus = () => {\n\t\tsetFocused(true);\n\t};\n\n\tconst handleBlur = () => {\n\t\tsetFocused(false);\n\t\t// Optionally create chip on blur if there's a value\n\t\tconst trimmedValue = inputValue.trim();\n\t\tif (trimmedValue && !chips.includes(trimmedValue)) {\n\t\t\tonChipsChange([...chips, trimmedValue]);\n\t\t\tsetInputValue('');\n\t\t}\n\t};\n\n\tconst handleContainerClick = () => {\n\t\tinputRef.current?.focus();\n\t};\n\n\tconst containerStyle = getContainerStyle(\n\t\t!!error,\n\t\tinputHeight,\n\t\tchipsContainerCustomStyle,\n\t\tfocused,\n\t);\n\tconst containerHoverStyle = focused ? {} : getContainerHoverStyle();\n\tconst chipStyle = getChipStyle();\n\tconst chipRemoveStyle = getChipRemoveStyle();\n\tconst inputStyle = getInputStyle(inputHeight);\n\n\treturn (\n\t\t<div\n\t\t\tstyle={{ display: 'flex', flexDirection: 'column', gap: 8 }}\n\t\t\tid={nativeID}\n\t\t>\n\t\t\t{label && (\n\t\t\t\t<BodySecondary\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: focused\n\t\t\t\t\t\t\t? COLORS.content.brand\n\t\t\t\t\t\t\t: error\n\t\t\t\t\t\t\t? COLORS.content.negative\n\t\t\t\t\t\t\t: labelColor || COLORS.content.primary,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</BodySecondary>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tstyle={containerStyle}\n\t\t\t\tonClick={handleContainerClick}\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\tif (!focused) {\n\t\t\t\t\t\tObject.assign(e.currentTarget.style, containerHoverStyle);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\tif (!focused) {\n\t\t\t\t\t\te.currentTarget.style.border = `1px solid ${\n\t\t\t\t\t\t\terror ? COLORS.stroke.negative.vibrant : COLORS.stroke.primary\n\t\t\t\t\t\t}`;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{chips.map((chip, index) => (\n\t\t\t\t\t<div key={index} style={chipStyle}>\n\t\t\t\t\t\t<span>{chip}</span>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tstyle={chipRemoveStyle}\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\thandleRemoveChip(index);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\te.currentTarget.style.color = COLORS.content.secondary;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\te.currentTarget.style.color = COLORS.content.secondary;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-label={`Remove ${chip}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t×\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={(e) => setInputValue(e.target.value)}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tplaceholder={\n\t\t\t\t\t\tchips.length === 0 && !!placeholder && !focused\n\t\t\t\t\t\t\t? placeholder\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tstyle={inputStyle}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{(!!hintText || !!error) && (\n\t\t\t\t<BodyCaption\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: error\n\t\t\t\t\t\t\t? COLORS.content.negative\n\t\t\t\t\t\t\t: hintTextColor || COLORS.content.secondary,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{error ? error : hintText}\n\t\t\t\t</BodyCaption>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default ChipInput;\n"],"names":["ChipInput","onChipsChange","placeholder","chips","label","labelColor","hintText","hintTextColor","error","inputHeight","createChipKeys","chipsContainerCustomStyle","nativeID","inputValue","setInputValue","useState","focused","setFocused","inputRef","useRef","chipKeys","handleKeyDown","trimmedValue","handleRemoveChip","indexToRemove","_","index","handleFocus","handleBlur","handleContainerClick","containerStyle","getContainerStyle","containerHoverStyle","getContainerHoverStyle","chipStyle","getChipStyle","chipRemoveStyle","getChipRemoveStyle","inputStyle","getInputStyle","jsxs","jsx","BodySecondary","COLORS","chip","e","BodyCaption"],"mappings":"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"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { InputTypeI } from './Input.model';
|
|
2
2
|
export declare const isFunction: (fn: any) => boolean;
|
|
3
|
-
/**
|
|
4
|
-
* Strip any HTML markup from a plain-text input value. Backed by DOMPurify
|
|
5
|
-
* (parser-based, immune to the malformed-tag bypasses a regex misses); on the
|
|
6
|
-
* server DOMPurify is unavailable so a regex tag-strip is used as a fallback.
|
|
7
|
-
* Text characters like `<` / `>` in ordinary content are preserved because
|
|
8
|
-
* DOMPurify keeps text content and only removes recognised tags.
|
|
9
|
-
*/
|
|
10
3
|
export declare const sanitizeUnsafeInput: (input: string) => string;
|
|
11
4
|
export declare const shouldSanitizeForType: (type: InputTypeI) => boolean;
|
|
12
5
|
export declare const validateInput: (inputText: string | number, type: InputTypeI, rangeValidation?: {
|