chatbotlite 0.5.0 → 0.5.1
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/embed.global.js +21 -21
- package/dist/embed.global.js.map +1 -1
- package/dist/react/index.cjs +221 -175
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +221 -175
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
package/dist/react/index.cjs
CHANGED
|
@@ -1015,12 +1015,15 @@ var BOLT = "\u26A1";
|
|
|
1015
1015
|
var DEFAULT_PRIMARY = "#0f172a";
|
|
1016
1016
|
var DEFAULT_ON_PRIMARY = "#ffffff";
|
|
1017
1017
|
var SURFACE = "#ffffff";
|
|
1018
|
-
var
|
|
1018
|
+
var CHAT_BG = "#f5f1eb";
|
|
1019
|
+
var BUBBLE_BOT = "#ffffff";
|
|
1020
|
+
var INPUT_BG = "#f1f3f5";
|
|
1019
1021
|
var BORDER = "#e5e7eb";
|
|
1022
|
+
var BORDER_LIGHT = "rgba(15,23,42,0.06)";
|
|
1020
1023
|
var TEXT_BODY = "#0f172a";
|
|
1021
1024
|
var TEXT_MUTED = "#64748b";
|
|
1022
1025
|
var TEXT_FAINT = "#94a3b8";
|
|
1023
|
-
var FONT_STACK =
|
|
1026
|
+
var FONT_STACK = `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif`;
|
|
1024
1027
|
var STYLE_TAG_ID = "chatbotlite-widget-styles";
|
|
1025
1028
|
var KEYFRAMES = `
|
|
1026
1029
|
@keyframes chatbotlite-pop { 0% { opacity: 0; transform: scale(0.6); } 100% { opacity: 1; transform: scale(1); } }
|
|
@@ -1032,8 +1035,8 @@ var KEYFRAMES = `
|
|
|
1032
1035
|
.chatbotlite-launcher { transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 180ms cubic-bezier(0.4, 0, 0.2, 1); animation: chatbotlite-pop 320ms cubic-bezier(0.34, 1.56, 0.64, 1), chatbotlite-pulse 3.6s ease-in-out 1.2s 2; }
|
|
1033
1036
|
.chatbotlite-launcher:hover { transform: translateY(-2px) scale(1.04); }
|
|
1034
1037
|
.chatbotlite-launcher:active { transform: translateY(0) scale(0.98); }
|
|
1035
|
-
.chatbotlite-close { transition: background 120ms ease; }
|
|
1036
|
-
.chatbotlite-close:hover { background: rgba(
|
|
1038
|
+
.chatbotlite-close { transition: background 120ms ease, color 120ms ease; }
|
|
1039
|
+
.chatbotlite-close:hover { background: rgba(15,23,42,0.06); color: ${TEXT_BODY}; }
|
|
1037
1040
|
.chatbotlite-send { transition: transform 120ms ease, opacity 120ms ease, box-shadow 120ms ease; }
|
|
1038
1041
|
.chatbotlite-send:not(:disabled):hover { transform: translateY(-1px); }
|
|
1039
1042
|
.chatbotlite-send:not(:disabled):active { transform: translateY(0); }
|
|
@@ -1041,8 +1044,8 @@ var KEYFRAMES = `
|
|
|
1041
1044
|
.chatbotlite-msg { animation: chatbotlite-fade-in 220ms cubic-bezier(0.4, 0, 0.2, 1); }
|
|
1042
1045
|
.chatbotlite-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: ${TEXT_FAINT}; margin-right: 4px; animation: chatbotlite-dot 1.2s ease-in-out infinite; }
|
|
1043
1046
|
.chatbotlite-cursor { display: inline-block; width: 2px; height: 1em; background: currentColor; vertical-align: text-bottom; margin-left: 1px; animation: chatbotlite-cursor 1s steps(1) infinite; }
|
|
1044
|
-
.chatbotlite-
|
|
1045
|
-
.chatbotlite-
|
|
1047
|
+
.chatbotlite-icon-btn:hover:not(:disabled) { background: rgba(15,23,42,0.06) !important; opacity: 1 !important; }
|
|
1048
|
+
.chatbotlite-icon-btn:active:not(:disabled) { transform: scale(0.92); }
|
|
1046
1049
|
.chatbotlite-dot:nth-child(2) { animation-delay: 0.15s; }
|
|
1047
1050
|
.chatbotlite-dot:nth-child(3) { animation-delay: 0.3s; margin-right: 0; }
|
|
1048
1051
|
.chatbotlite-brand:hover { color: ${TEXT_MUTED} !important; }
|
|
@@ -1358,17 +1361,34 @@ function ChatWidget(props) {
|
|
|
1358
1361
|
},
|
|
1359
1362
|
children: [
|
|
1360
1363
|
/* @__PURE__ */ jsxRuntime.jsxs("header", { style: {
|
|
1361
|
-
padding: "16px
|
|
1362
|
-
background:
|
|
1363
|
-
color:
|
|
1364
|
+
padding: "14px 16px",
|
|
1365
|
+
background: SURFACE,
|
|
1366
|
+
color: TEXT_BODY,
|
|
1364
1367
|
display: "flex",
|
|
1365
1368
|
justifyContent: "space-between",
|
|
1366
1369
|
alignItems: "center",
|
|
1367
|
-
gap: 12
|
|
1370
|
+
gap: 12,
|
|
1371
|
+
borderBottom: `1px solid ${BORDER_LIGHT}`
|
|
1368
1372
|
}, children: [
|
|
1369
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex",
|
|
1370
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1371
|
-
|
|
1373
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: 10, minWidth: 0 }, children: [
|
|
1374
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: {
|
|
1375
|
+
width: 36,
|
|
1376
|
+
height: 36,
|
|
1377
|
+
borderRadius: "50%",
|
|
1378
|
+
background: primary,
|
|
1379
|
+
color: onPrimary,
|
|
1380
|
+
display: "flex",
|
|
1381
|
+
alignItems: "center",
|
|
1382
|
+
justifyContent: "center",
|
|
1383
|
+
fontSize: 16,
|
|
1384
|
+
fontWeight: 600,
|
|
1385
|
+
flexShrink: 0,
|
|
1386
|
+
letterSpacing: "-0.02em"
|
|
1387
|
+
}, children: resolvedTitle.charAt(0).toUpperCase() }),
|
|
1388
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", lineHeight: 1.2, minWidth: 0 }, children: [
|
|
1389
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontWeight: 600, fontSize: 15, letterSpacing: "-0.01em", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: TEXT_BODY }, children: resolvedTitle }),
|
|
1390
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 12, color: TEXT_MUTED, marginTop: 2, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: subtitle ?? (sending ? "typing\u2026" : "online") })
|
|
1391
|
+
] })
|
|
1372
1392
|
] }),
|
|
1373
1393
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1374
1394
|
"button",
|
|
@@ -1379,7 +1399,7 @@ function ChatWidget(props) {
|
|
|
1379
1399
|
style: {
|
|
1380
1400
|
background: "transparent",
|
|
1381
1401
|
border: "none",
|
|
1382
|
-
color:
|
|
1402
|
+
color: TEXT_MUTED,
|
|
1383
1403
|
width: 32,
|
|
1384
1404
|
height: 32,
|
|
1385
1405
|
borderRadius: 10,
|
|
@@ -1406,7 +1426,7 @@ function ChatWidget(props) {
|
|
|
1406
1426
|
display: "flex",
|
|
1407
1427
|
flexDirection: "column",
|
|
1408
1428
|
gap: 8,
|
|
1409
|
-
background:
|
|
1429
|
+
background: CHAT_BG
|
|
1410
1430
|
},
|
|
1411
1431
|
children: [
|
|
1412
1432
|
messages.map((m) => /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 6, alignItems: m.role === "user" ? "flex-end" : "stretch" }, children: [
|
|
@@ -1416,18 +1436,18 @@ function ChatWidget(props) {
|
|
|
1416
1436
|
className: "chatbotlite-msg",
|
|
1417
1437
|
style: {
|
|
1418
1438
|
alignSelf: m.role === "user" ? "flex-end" : "flex-start",
|
|
1419
|
-
maxWidth: "
|
|
1420
|
-
padding: "
|
|
1421
|
-
borderRadius:
|
|
1422
|
-
background: m.role === "user" ? primary :
|
|
1439
|
+
maxWidth: "78%",
|
|
1440
|
+
padding: "8px 12px",
|
|
1441
|
+
borderRadius: 18,
|
|
1442
|
+
background: m.role === "user" ? primary : BUBBLE_BOT,
|
|
1423
1443
|
color: m.role === "user" ? onPrimary : TEXT_BODY,
|
|
1424
|
-
border:
|
|
1425
|
-
fontSize: 14,
|
|
1426
|
-
lineHeight: 1.
|
|
1444
|
+
border: "none",
|
|
1445
|
+
fontSize: 14.5,
|
|
1446
|
+
lineHeight: 1.4,
|
|
1427
1447
|
letterSpacing: "-0.005em",
|
|
1428
1448
|
whiteSpace: "pre-wrap",
|
|
1429
1449
|
wordBreak: "break-word",
|
|
1430
|
-
boxShadow: m.role === "user" ? "
|
|
1450
|
+
boxShadow: m.role === "user" ? "none" : "0 1px 0.5px rgba(15,23,42,0.05)"
|
|
1431
1451
|
},
|
|
1432
1452
|
children: [
|
|
1433
1453
|
m.content,
|
|
@@ -1442,7 +1462,7 @@ function ChatWidget(props) {
|
|
|
1442
1462
|
onPrimary,
|
|
1443
1463
|
border: BORDER,
|
|
1444
1464
|
surface: SURFACE,
|
|
1445
|
-
surfaceMuted:
|
|
1465
|
+
surfaceMuted: CHAT_BG,
|
|
1446
1466
|
textBody: TEXT_BODY,
|
|
1447
1467
|
textMuted: TEXT_MUTED
|
|
1448
1468
|
};
|
|
@@ -1525,17 +1545,16 @@ function ChatWidget(props) {
|
|
|
1525
1545
|
return null;
|
|
1526
1546
|
})
|
|
1527
1547
|
] }, m.id)),
|
|
1528
|
-
sending && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1548
|
+
sending && messages[messages.length - 1]?.content === "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1529
1549
|
"div",
|
|
1530
1550
|
{
|
|
1531
1551
|
className: "chatbotlite-msg",
|
|
1532
1552
|
style: {
|
|
1533
1553
|
alignSelf: "flex-start",
|
|
1534
|
-
padding: "
|
|
1535
|
-
borderRadius:
|
|
1536
|
-
background:
|
|
1537
|
-
|
|
1538
|
-
boxShadow: "0 1px 2px rgba(15,23,42,0.04)"
|
|
1554
|
+
padding: "10px 14px",
|
|
1555
|
+
borderRadius: 18,
|
|
1556
|
+
background: BUBBLE_BOT,
|
|
1557
|
+
boxShadow: "0 1px 0.5px rgba(15,23,42,0.05)"
|
|
1539
1558
|
},
|
|
1540
1559
|
children: [
|
|
1541
1560
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "chatbotlite-dot" }),
|
|
@@ -1547,172 +1566,199 @@ function ChatWidget(props) {
|
|
|
1547
1566
|
]
|
|
1548
1567
|
}
|
|
1549
1568
|
),
|
|
1550
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1551
|
-
|
|
1552
|
-
flexDirection: "column",
|
|
1553
|
-
padding: 12,
|
|
1554
|
-
gap: 8,
|
|
1569
|
+
files.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
|
|
1570
|
+
padding: "8px 12px 0",
|
|
1555
1571
|
background: SURFACE,
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
},
|
|
1573
|
-
children: [
|
|
1574
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: [
|
|
1575
|
-
"\u{1F4CE} ",
|
|
1576
|
-
f.name
|
|
1577
|
-
] }),
|
|
1578
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1579
|
-
"button",
|
|
1580
|
-
{
|
|
1581
|
-
onClick: () => removeFile(i),
|
|
1582
|
-
"aria-label": `Remove ${f.name}`,
|
|
1583
|
-
style: {
|
|
1584
|
-
background: "transparent",
|
|
1585
|
-
border: "none",
|
|
1586
|
-
cursor: "pointer",
|
|
1587
|
-
color: TEXT_MUTED,
|
|
1588
|
-
fontSize: 14,
|
|
1589
|
-
lineHeight: 1,
|
|
1590
|
-
padding: 0
|
|
1591
|
-
},
|
|
1592
|
-
children: "\xD7"
|
|
1593
|
-
}
|
|
1594
|
-
)
|
|
1595
|
-
]
|
|
1572
|
+
display: "flex",
|
|
1573
|
+
flexWrap: "wrap",
|
|
1574
|
+
gap: 6
|
|
1575
|
+
}, children: files.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1576
|
+
"span",
|
|
1577
|
+
{
|
|
1578
|
+
style: {
|
|
1579
|
+
display: "inline-flex",
|
|
1580
|
+
alignItems: "center",
|
|
1581
|
+
gap: 6,
|
|
1582
|
+
padding: "4px 8px 4px 10px",
|
|
1583
|
+
borderRadius: 999,
|
|
1584
|
+
background: INPUT_BG,
|
|
1585
|
+
fontSize: 12,
|
|
1586
|
+
color: TEXT_BODY,
|
|
1587
|
+
maxWidth: 200
|
|
1596
1588
|
},
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
"input",
|
|
1603
|
-
{
|
|
1604
|
-
ref: fileInputRef,
|
|
1605
|
-
type: "file",
|
|
1606
|
-
multiple: true,
|
|
1607
|
-
accept: acceptAttr,
|
|
1608
|
-
style: { display: "none" },
|
|
1609
|
-
onChange: (e) => {
|
|
1610
|
-
if (e.target.files) addFiles(e.target.files);
|
|
1611
|
-
e.target.value = "";
|
|
1612
|
-
}
|
|
1613
|
-
}
|
|
1614
|
-
),
|
|
1589
|
+
children: [
|
|
1590
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: [
|
|
1591
|
+
"\u{1F4CE} ",
|
|
1592
|
+
f.name
|
|
1593
|
+
] }),
|
|
1615
1594
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1616
1595
|
"button",
|
|
1617
1596
|
{
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
style: {
|
|
1623
|
-
width: 40,
|
|
1624
|
-
height: 40,
|
|
1625
|
-
borderRadius: 10,
|
|
1626
|
-
background: SURFACE_MUTED,
|
|
1627
|
-
border: `1px solid ${BORDER}`,
|
|
1628
|
-
cursor: sending || files.length >= maxFiles ? "default" : "pointer",
|
|
1629
|
-
opacity: sending || files.length >= maxFiles ? 0.4 : 1,
|
|
1630
|
-
fontSize: 16,
|
|
1631
|
-
transition: "background 120ms ease, transform 80ms ease"
|
|
1632
|
-
},
|
|
1633
|
-
children: "\u{1F4CE}"
|
|
1597
|
+
onClick: () => removeFile(i),
|
|
1598
|
+
"aria-label": `Remove ${f.name}`,
|
|
1599
|
+
style: { background: "transparent", border: "none", cursor: "pointer", color: TEXT_MUTED, fontSize: 14, lineHeight: 1, padding: 0 },
|
|
1600
|
+
children: "\xD7"
|
|
1634
1601
|
}
|
|
1635
1602
|
)
|
|
1636
|
-
]
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
fontSize: 16,
|
|
1654
|
-
transition: "background 120ms ease, color 120ms ease, border-color 120ms ease, transform 80ms ease"
|
|
1655
|
-
},
|
|
1656
|
-
children: "\u{1F399}\uFE0F"
|
|
1657
|
-
}
|
|
1658
|
-
),
|
|
1603
|
+
]
|
|
1604
|
+
},
|
|
1605
|
+
`${f.name}-${i}`
|
|
1606
|
+
)) }),
|
|
1607
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: {
|
|
1608
|
+
padding: "10px 12px 12px",
|
|
1609
|
+
background: SURFACE
|
|
1610
|
+
}, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
|
|
1611
|
+
display: "flex",
|
|
1612
|
+
alignItems: "flex-end",
|
|
1613
|
+
gap: 6,
|
|
1614
|
+
padding: "6px 6px 6px 10px",
|
|
1615
|
+
background: INPUT_BG,
|
|
1616
|
+
borderRadius: 22,
|
|
1617
|
+
transition: "background 120ms ease"
|
|
1618
|
+
}, children: [
|
|
1619
|
+
attachEnabled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1659
1620
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1660
1621
|
"input",
|
|
1661
1622
|
{
|
|
1662
|
-
ref:
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
if (e.
|
|
1669
|
-
|
|
1670
|
-
void send();
|
|
1671
|
-
}
|
|
1672
|
-
},
|
|
1673
|
-
placeholder: "Type a message\u2026",
|
|
1674
|
-
disabled: sending,
|
|
1675
|
-
style: {
|
|
1676
|
-
flex: 1,
|
|
1677
|
-
padding: "10px 14px",
|
|
1678
|
-
borderRadius: 12,
|
|
1679
|
-
border: `1px solid ${BORDER}`,
|
|
1680
|
-
background: SURFACE_MUTED,
|
|
1681
|
-
fontSize: 14,
|
|
1682
|
-
fontFamily: FONT_STACK,
|
|
1683
|
-
color: TEXT_BODY,
|
|
1684
|
-
outline: "none",
|
|
1685
|
-
transition: "box-shadow 120ms ease, border-color 120ms ease"
|
|
1623
|
+
ref: fileInputRef,
|
|
1624
|
+
type: "file",
|
|
1625
|
+
multiple: true,
|
|
1626
|
+
accept: acceptAttr,
|
|
1627
|
+
style: { display: "none" },
|
|
1628
|
+
onChange: (e) => {
|
|
1629
|
+
if (e.target.files) addFiles(e.target.files);
|
|
1630
|
+
e.target.value = "";
|
|
1686
1631
|
}
|
|
1687
1632
|
}
|
|
1688
1633
|
),
|
|
1689
1634
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1690
1635
|
"button",
|
|
1691
1636
|
{
|
|
1692
|
-
className: "chatbotlite-
|
|
1693
|
-
onClick: () =>
|
|
1694
|
-
disabled: sending ||
|
|
1695
|
-
"aria-label": "
|
|
1637
|
+
className: "chatbotlite-icon-btn",
|
|
1638
|
+
onClick: () => fileInputRef.current?.click(),
|
|
1639
|
+
disabled: sending || files.length >= maxFiles,
|
|
1640
|
+
"aria-label": "Attach file",
|
|
1696
1641
|
style: {
|
|
1697
|
-
|
|
1698
|
-
height:
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
background: primary,
|
|
1702
|
-
color: onPrimary,
|
|
1642
|
+
width: 32,
|
|
1643
|
+
height: 32,
|
|
1644
|
+
borderRadius: "50%",
|
|
1645
|
+
background: "transparent",
|
|
1703
1646
|
border: "none",
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1647
|
+
cursor: sending || files.length >= maxFiles ? "default" : "pointer",
|
|
1648
|
+
opacity: sending || files.length >= maxFiles ? 0.35 : 0.7,
|
|
1649
|
+
fontSize: 18,
|
|
1650
|
+
lineHeight: 1,
|
|
1651
|
+
padding: 0,
|
|
1652
|
+
display: "flex",
|
|
1653
|
+
alignItems: "center",
|
|
1654
|
+
justifyContent: "center",
|
|
1655
|
+
flexShrink: 0,
|
|
1656
|
+
alignSelf: "center",
|
|
1657
|
+
transition: "opacity 120ms ease, background 120ms ease"
|
|
1710
1658
|
},
|
|
1711
|
-
children: "
|
|
1659
|
+
children: "\u{1F4CE}"
|
|
1712
1660
|
}
|
|
1713
1661
|
)
|
|
1714
|
-
] })
|
|
1715
|
-
|
|
1662
|
+
] }),
|
|
1663
|
+
voiceEnabled && speechSupported && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1664
|
+
"button",
|
|
1665
|
+
{
|
|
1666
|
+
className: "chatbotlite-icon-btn",
|
|
1667
|
+
onClick: toggleVoice,
|
|
1668
|
+
disabled: sending,
|
|
1669
|
+
"aria-label": voiceListening ? "Stop recording" : "Start voice input",
|
|
1670
|
+
style: {
|
|
1671
|
+
width: 32,
|
|
1672
|
+
height: 32,
|
|
1673
|
+
borderRadius: "50%",
|
|
1674
|
+
background: voiceListening ? primary : "transparent",
|
|
1675
|
+
color: voiceListening ? onPrimary : "inherit",
|
|
1676
|
+
border: "none",
|
|
1677
|
+
cursor: sending ? "default" : "pointer",
|
|
1678
|
+
opacity: sending ? 0.35 : voiceListening ? 1 : 0.7,
|
|
1679
|
+
fontSize: 16,
|
|
1680
|
+
lineHeight: 1,
|
|
1681
|
+
padding: 0,
|
|
1682
|
+
display: "flex",
|
|
1683
|
+
alignItems: "center",
|
|
1684
|
+
justifyContent: "center",
|
|
1685
|
+
flexShrink: 0,
|
|
1686
|
+
alignSelf: "center",
|
|
1687
|
+
transition: "opacity 120ms ease, background 120ms ease, color 120ms ease"
|
|
1688
|
+
},
|
|
1689
|
+
children: "\u{1F399}\uFE0F"
|
|
1690
|
+
}
|
|
1691
|
+
),
|
|
1692
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1693
|
+
"textarea",
|
|
1694
|
+
{
|
|
1695
|
+
ref: inputRef,
|
|
1696
|
+
className: "chatbotlite-input",
|
|
1697
|
+
rows: 1,
|
|
1698
|
+
value: input,
|
|
1699
|
+
onChange: (e) => {
|
|
1700
|
+
setInput(e.target.value);
|
|
1701
|
+
const el = e.currentTarget;
|
|
1702
|
+
el.style.height = "auto";
|
|
1703
|
+
el.style.height = Math.min(el.scrollHeight, 100) + "px";
|
|
1704
|
+
},
|
|
1705
|
+
onKeyDown: (e) => {
|
|
1706
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
1707
|
+
e.preventDefault();
|
|
1708
|
+
void send();
|
|
1709
|
+
}
|
|
1710
|
+
},
|
|
1711
|
+
placeholder: "Message",
|
|
1712
|
+
disabled: sending,
|
|
1713
|
+
style: {
|
|
1714
|
+
flex: 1,
|
|
1715
|
+
padding: "7px 4px",
|
|
1716
|
+
border: "none",
|
|
1717
|
+
background: "transparent",
|
|
1718
|
+
fontSize: 14.5,
|
|
1719
|
+
fontFamily: FONT_STACK,
|
|
1720
|
+
color: TEXT_BODY,
|
|
1721
|
+
outline: "none",
|
|
1722
|
+
resize: "none",
|
|
1723
|
+
lineHeight: 1.35,
|
|
1724
|
+
maxHeight: 100,
|
|
1725
|
+
minHeight: 20
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
),
|
|
1729
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1730
|
+
"button",
|
|
1731
|
+
{
|
|
1732
|
+
className: "chatbotlite-send",
|
|
1733
|
+
onClick: () => void send(),
|
|
1734
|
+
disabled: sending || !input.trim() && files.length === 0,
|
|
1735
|
+
"aria-label": "Send message",
|
|
1736
|
+
style: {
|
|
1737
|
+
width: 34,
|
|
1738
|
+
height: 34,
|
|
1739
|
+
borderRadius: "50%",
|
|
1740
|
+
background: primary,
|
|
1741
|
+
color: onPrimary,
|
|
1742
|
+
border: "none",
|
|
1743
|
+
fontSize: 14,
|
|
1744
|
+
fontWeight: 600,
|
|
1745
|
+
fontFamily: FONT_STACK,
|
|
1746
|
+
cursor: sending || !input.trim() && files.length === 0 ? "default" : "pointer",
|
|
1747
|
+
opacity: sending || !input.trim() && files.length === 0 ? 0.35 : 1,
|
|
1748
|
+
display: "flex",
|
|
1749
|
+
alignItems: "center",
|
|
1750
|
+
justifyContent: "center",
|
|
1751
|
+
flexShrink: 0,
|
|
1752
|
+
padding: 0,
|
|
1753
|
+
transition: "opacity 120ms ease, transform 80ms ease"
|
|
1754
|
+
},
|
|
1755
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
1756
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "19", x2: "12", y2: "5" }),
|
|
1757
|
+
/* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "5 12 12 5 19 12" })
|
|
1758
|
+
] })
|
|
1759
|
+
}
|
|
1760
|
+
)
|
|
1761
|
+
] }) }),
|
|
1716
1762
|
showBranding && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1717
1763
|
"a",
|
|
1718
1764
|
{
|