@orion-ds/react 4.0.5 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index10.cjs +1 -1
- package/dist/index10.mjs +1 -1
- package/dist/index100.cjs +1 -1
- package/dist/index100.mjs +20 -40
- package/dist/index100.mjs.map +1 -1
- package/dist/index101.cjs +1 -1
- package/dist/index101.mjs +28 -40
- package/dist/index101.mjs.map +1 -1
- package/dist/index102.cjs +1 -1
- package/dist/index102.mjs +46 -33
- package/dist/index102.mjs.map +1 -1
- package/dist/index103.cjs +1 -1
- package/dist/index103.mjs +42 -27
- package/dist/index103.mjs.map +1 -1
- package/dist/index104.cjs +1 -1
- package/dist/index104.mjs +56 -30
- package/dist/index104.mjs.map +1 -1
- package/dist/index105.cjs +1 -1
- package/dist/index105.mjs +25 -15
- package/dist/index105.mjs.map +1 -1
- package/dist/index106.cjs +1 -1
- package/dist/index106.mjs +64 -52
- package/dist/index106.mjs.map +1 -1
- package/dist/index107.cjs +1 -1
- package/dist/index107.mjs +20 -20
- package/dist/index108.cjs +1 -1
- package/dist/index108.mjs +45 -36
- package/dist/index108.mjs.map +1 -1
- package/dist/index109.cjs +1 -1
- package/dist/index109.mjs +24 -42
- package/dist/index109.mjs.map +1 -1
- package/dist/index11.cjs +1 -1
- package/dist/index11.mjs +1 -1
- package/dist/index110.cjs +1 -1
- package/dist/index110.mjs +40 -18
- package/dist/index110.mjs.map +1 -1
- package/dist/index111.cjs +1 -1
- package/dist/index111.mjs +18 -28
- package/dist/index111.mjs.map +1 -1
- package/dist/index112.cjs +1 -1
- package/dist/index112.mjs +55 -12
- package/dist/index112.mjs.map +1 -1
- package/dist/index114.cjs +1 -1
- package/dist/index114.mjs +62 -28
- package/dist/index114.mjs.map +1 -1
- package/dist/index115.cjs +1 -1
- package/dist/index115.mjs +65 -45
- package/dist/index115.mjs.map +1 -1
- package/dist/index116.cjs +1 -1
- package/dist/index116.mjs +234 -18
- package/dist/index116.mjs.map +1 -1
- package/dist/index117.cjs +1 -1
- package/dist/index117.cjs.map +1 -1
- package/dist/index117.mjs +34 -29
- package/dist/index117.mjs.map +1 -1
- package/dist/index118.cjs +1 -1
- package/dist/index118.cjs.map +1 -1
- package/dist/index118.mjs +44 -31
- package/dist/index118.mjs.map +1 -1
- package/dist/index119.cjs +1 -1
- package/dist/index119.cjs.map +1 -1
- package/dist/index119.mjs +170 -22
- package/dist/index119.mjs.map +1 -1
- package/dist/index12.cjs +1 -1
- package/dist/index12.mjs +1 -1
- package/dist/index120.cjs +1 -1
- package/dist/index120.cjs.map +1 -1
- package/dist/index120.mjs +186 -39
- package/dist/index120.mjs.map +1 -1
- package/dist/index121.cjs +1 -1
- package/dist/index121.cjs.map +1 -1
- package/dist/index121.mjs +29 -66
- package/dist/index121.mjs.map +1 -1
- package/dist/index122.cjs +1 -1
- package/dist/index122.cjs.map +1 -1
- package/dist/index122.mjs +90 -18
- package/dist/index122.mjs.map +1 -1
- package/dist/index123.cjs +1 -1
- package/dist/index123.cjs.map +1 -1
- package/dist/index123.mjs +53 -54
- package/dist/index123.mjs.map +1 -1
- package/dist/index124.cjs +1 -1
- package/dist/index124.cjs.map +1 -1
- package/dist/index124.mjs +66 -30
- package/dist/index124.mjs.map +1 -1
- package/dist/index125.cjs +1 -1
- package/dist/index125.cjs.map +1 -1
- package/dist/index125.mjs +124 -62
- package/dist/index125.mjs.map +1 -1
- package/dist/index126.cjs +1 -1
- package/dist/index126.cjs.map +1 -1
- package/dist/index126.mjs +108 -55
- package/dist/index126.mjs.map +1 -1
- package/dist/index127.cjs +1 -1
- package/dist/index127.cjs.map +1 -1
- package/dist/index127.mjs +111 -44
- package/dist/index127.mjs.map +1 -1
- package/dist/index128.cjs +1 -1
- package/dist/index128.cjs.map +1 -1
- package/dist/index128.mjs +122 -14
- package/dist/index128.mjs.map +1 -1
- package/dist/index129.cjs +1 -1
- package/dist/index129.cjs.map +1 -1
- package/dist/index129.mjs +214 -33
- package/dist/index129.mjs.map +1 -1
- package/dist/index13.cjs +1 -1
- package/dist/index13.mjs +1 -1
- package/dist/index130.cjs +1 -1
- package/dist/index130.mjs +42 -28
- package/dist/index130.mjs.map +1 -1
- package/dist/index131.cjs +1 -1
- package/dist/index131.mjs +40 -22
- package/dist/index131.mjs.map +1 -1
- package/dist/index132.cjs +1 -1
- package/dist/index132.mjs +106 -64
- package/dist/index132.mjs.map +1 -1
- package/dist/index133.cjs +1 -1
- package/dist/index133.mjs +20 -44
- package/dist/index133.mjs.map +1 -1
- package/dist/index134.cjs +1 -1
- package/dist/index134.mjs +30 -57
- package/dist/index134.mjs.map +1 -1
- package/dist/index135.cjs +1 -1
- package/dist/index135.mjs +46 -44
- package/dist/index135.mjs.map +1 -1
- package/dist/index136.cjs +1 -1
- package/dist/index136.mjs +12 -38
- package/dist/index136.mjs.map +1 -1
- package/dist/index137.cjs +1 -1
- package/dist/index137.mjs +32 -28
- package/dist/index137.mjs.map +1 -1
- package/dist/index138.cjs +1 -1
- package/dist/index138.mjs +27 -24
- package/dist/index138.mjs.map +1 -1
- package/dist/index139.cjs +1 -1
- package/dist/index139.mjs +33 -67
- package/dist/index139.mjs.map +1 -1
- package/dist/index14.cjs +1 -1
- package/dist/index14.mjs +1 -1
- package/dist/index140.cjs +1 -1
- package/dist/index140.mjs +57 -76
- package/dist/index140.mjs.map +1 -1
- package/dist/index141.cjs +1 -1
- package/dist/index141.mjs +30 -46
- package/dist/index141.mjs.map +1 -1
- package/dist/index142.cjs +1 -1
- package/dist/index142.mjs +32 -234
- package/dist/index142.mjs.map +1 -1
- package/dist/index143.cjs +1 -1
- package/dist/index143.cjs.map +1 -1
- package/dist/index143.mjs +51 -34
- package/dist/index143.mjs.map +1 -1
- package/dist/index144.cjs +1 -1
- package/dist/index144.cjs.map +1 -1
- package/dist/index144.mjs +17 -44
- package/dist/index144.mjs.map +1 -1
- package/dist/index145.cjs +1 -1
- package/dist/index145.cjs.map +1 -1
- package/dist/index145.mjs +30 -170
- package/dist/index145.mjs.map +1 -1
- package/dist/index146.cjs +1 -1
- package/dist/index146.cjs.map +1 -1
- package/dist/index146.mjs +47 -186
- package/dist/index146.mjs.map +1 -1
- package/dist/index147.cjs +1 -1
- package/dist/index147.cjs.map +1 -1
- package/dist/index147.mjs +43 -29
- package/dist/index147.mjs.map +1 -1
- package/dist/index148.cjs +1 -1
- package/dist/index148.cjs.map +1 -1
- package/dist/index148.mjs +28 -90
- package/dist/index148.mjs.map +1 -1
- package/dist/index149.cjs +1 -1
- package/dist/index149.cjs.map +1 -1
- package/dist/index149.mjs +29 -53
- package/dist/index149.mjs.map +1 -1
- package/dist/index15.cjs +1 -1
- package/dist/index15.mjs +1 -1
- package/dist/index150.cjs +1 -1
- package/dist/index150.cjs.map +1 -1
- package/dist/index150.mjs +30 -66
- package/dist/index150.mjs.map +1 -1
- package/dist/index151.cjs +1 -1
- package/dist/index151.cjs.map +1 -1
- package/dist/index151.mjs +24 -124
- package/dist/index151.mjs.map +1 -1
- package/dist/index152.cjs +1 -1
- package/dist/index152.cjs.map +1 -1
- package/dist/index152.mjs +22 -108
- package/dist/index152.mjs.map +1 -1
- package/dist/index153.cjs +1 -1
- package/dist/index153.cjs.map +1 -1
- package/dist/index153.mjs +36 -111
- package/dist/index153.mjs.map +1 -1
- package/dist/index154.cjs +1 -1
- package/dist/index154.cjs.map +1 -1
- package/dist/index154.mjs +38 -122
- package/dist/index154.mjs.map +1 -1
- package/dist/index155.cjs +1 -1
- package/dist/index155.cjs.map +1 -1
- package/dist/index155.mjs +12 -214
- package/dist/index155.mjs.map +1 -1
- package/dist/index156.cjs +1 -1
- package/dist/index156.mjs +27 -49
- package/dist/index156.mjs.map +1 -1
- package/dist/index157.cjs +1 -1
- package/dist/index157.mjs +38 -24
- package/dist/index157.mjs.map +1 -1
- package/dist/index158.cjs +1 -1
- package/dist/index158.mjs +33 -32
- package/dist/index158.mjs.map +1 -1
- package/dist/index159.cjs +1 -1
- package/dist/index159.mjs +30 -18
- package/dist/index159.mjs.map +1 -1
- package/dist/index16.cjs +1 -1
- package/dist/index16.mjs +1 -1
- package/dist/index160.cjs +1 -1
- package/dist/index160.mjs +14 -26
- package/dist/index160.mjs.map +1 -1
- package/dist/index161.cjs +1 -1
- package/dist/index161.mjs +18 -46
- package/dist/index161.mjs.map +1 -1
- package/dist/index162.cjs +1 -1
- package/dist/index162.mjs +28 -24
- package/dist/index162.mjs.map +1 -1
- package/dist/index163.cjs +1 -1
- package/dist/index163.mjs +18 -56
- package/dist/index163.mjs.map +1 -1
- package/dist/index164.cjs +1 -1
- package/dist/index164.mjs +65 -40
- package/dist/index164.mjs.map +1 -1
- package/dist/index165.cjs +1 -1
- package/dist/index165.mjs +30 -62
- package/dist/index165.mjs.map +1 -1
- package/dist/index166.cjs +1 -1
- package/dist/index166.mjs +44 -20
- package/dist/index166.mjs.map +1 -1
- package/dist/index167.cjs +1 -1
- package/dist/index167.mjs +52 -106
- package/dist/index167.mjs.map +1 -1
- package/dist/index168.cjs +1 -1
- package/dist/index168.cjs.map +1 -1
- package/dist/index168.mjs +37 -21
- package/dist/index168.mjs.map +1 -1
- package/dist/index169.cjs +1 -1
- package/dist/index169.mjs +28 -30
- package/dist/index169.mjs.map +1 -1
- package/dist/index17.cjs +1 -1
- package/dist/index17.mjs +1 -1
- package/dist/index170.cjs +1 -1
- package/dist/index170.mjs +18 -12
- package/dist/index170.mjs.map +1 -1
- package/dist/index171.cjs +1 -1
- package/dist/index171.mjs +33 -32
- package/dist/index171.mjs.map +1 -1
- package/dist/index172.cjs +1 -1
- package/dist/index172.mjs +20 -40
- package/dist/index172.mjs.map +1 -1
- package/dist/index173.cjs +1 -1
- package/dist/index173.cjs.map +1 -1
- package/dist/index173.mjs +25 -37
- package/dist/index173.mjs.map +1 -1
- package/dist/index174.cjs +1 -1
- package/dist/index174.mjs +64 -28
- package/dist/index174.mjs.map +1 -1
- package/dist/index175.cjs +1 -1
- package/dist/index175.mjs +76 -33
- package/dist/index175.mjs.map +1 -1
- package/dist/index176.cjs +1 -1
- package/dist/index176.mjs +40 -52
- package/dist/index176.mjs.map +1 -1
- package/dist/index177.cjs +1 -1
- package/dist/index177.mjs +52 -18
- package/dist/index177.mjs.map +1 -1
- package/dist/index178.cjs +1 -1
- package/dist/index178.mjs +53 -42
- package/dist/index178.mjs.map +1 -1
- package/dist/index179.cjs +1 -1
- package/dist/index179.mjs +18 -28
- package/dist/index179.mjs.map +1 -1
- package/dist/index18.cjs +1 -1
- package/dist/index18.mjs +1 -1
- package/dist/index180.cjs +1 -1
- package/dist/index180.mjs +42 -28
- package/dist/index180.mjs.map +1 -1
- package/dist/index181.cjs +1 -1
- package/dist/index181.mjs +28 -64
- package/dist/index181.mjs.map +1 -1
- package/dist/index182.cjs +1 -1
- package/dist/index182.mjs +17 -17
- package/dist/index182.mjs.map +1 -1
- package/dist/index183.cjs +1 -1
- package/dist/index183.mjs +17 -17
- package/dist/index183.mjs.map +1 -1
- package/dist/index185.cjs +1 -1
- package/dist/index185.mjs +1 -1
- package/dist/index19.cjs +1 -1
- package/dist/index19.mjs +2 -2
- package/dist/index20.cjs +1 -1
- package/dist/index20.mjs +14 -14
- package/dist/index21.cjs +1 -1
- package/dist/index21.cjs.map +1 -1
- package/dist/index21.mjs +1 -1
- package/dist/index22.cjs +1 -1
- package/dist/index22.mjs +1 -1
- package/dist/index23.cjs +1 -1
- package/dist/index23.mjs +1 -1
- package/dist/index24.cjs +1 -1
- package/dist/index24.mjs +1 -1
- package/dist/index25.cjs +1 -1
- package/dist/index25.mjs +1 -1
- package/dist/index26.cjs +1 -1
- package/dist/index26.cjs.map +1 -1
- package/dist/index26.mjs +1 -1
- package/dist/index27.cjs +1 -1
- package/dist/index27.mjs +1 -1
- package/dist/index28.cjs +1 -1
- package/dist/index28.mjs +1 -1
- package/dist/index29.cjs +1 -1
- package/dist/index29.mjs +1 -1
- package/dist/index30.cjs +1 -1
- package/dist/index30.mjs +1 -1
- package/dist/index31.cjs +1 -1
- package/dist/index31.mjs +1 -1
- package/dist/index32.cjs +1 -1
- package/dist/index32.mjs +1 -1
- package/dist/index33.cjs +1 -1
- package/dist/index33.mjs +1 -1
- package/dist/index34.cjs +1 -1
- package/dist/index34.mjs +1 -1
- package/dist/index35.cjs +1 -1
- package/dist/index35.mjs +1 -1
- package/dist/index36.cjs +1 -1
- package/dist/index36.mjs +1 -1
- package/dist/index37.cjs +1 -1
- package/dist/index37.mjs +1 -1
- package/dist/index38.cjs +1 -1
- package/dist/index38.mjs +1 -1
- package/dist/index39.cjs +1 -1
- package/dist/index39.mjs +1 -1
- package/dist/index40.cjs +1 -1
- package/dist/index40.mjs +1 -1
- package/dist/index42.cjs +1 -1
- package/dist/index42.mjs +1 -1
- package/dist/index43.cjs +1 -1
- package/dist/index43.mjs +1 -1
- package/dist/index46.cjs +1 -1
- package/dist/index46.mjs +1 -1
- package/dist/index47.cjs +1 -1
- package/dist/index47.mjs +1 -1
- package/dist/index49.cjs +1 -1
- package/dist/index49.mjs +1 -1
- package/dist/index5.cjs +1 -1
- package/dist/index5.mjs +1 -1
- package/dist/index50.cjs +1 -1
- package/dist/index50.mjs +1 -1
- package/dist/index51.cjs +1 -1
- package/dist/index51.mjs +1 -1
- package/dist/index52.cjs +1 -1
- package/dist/index52.mjs +1 -1
- package/dist/index53.cjs +1 -1
- package/dist/index53.mjs +1 -1
- package/dist/index54.cjs +1 -1
- package/dist/index54.mjs +1 -1
- package/dist/index55.cjs +1 -1
- package/dist/index55.mjs +1 -1
- package/dist/index56.cjs +1 -1
- package/dist/index56.mjs +1 -1
- package/dist/index57.cjs +1 -1
- package/dist/index57.mjs +1 -1
- package/dist/index58.cjs +1 -1
- package/dist/index58.mjs +1 -1
- package/dist/index59.cjs +1 -1
- package/dist/index59.mjs +1 -1
- package/dist/index6.cjs +1 -1
- package/dist/index6.mjs +1 -1
- package/dist/index60.cjs +1 -1
- package/dist/index60.mjs +1 -1
- package/dist/index61.cjs +1 -1
- package/dist/index61.mjs +1 -1
- package/dist/index62.cjs +1 -1
- package/dist/index62.mjs +1 -1
- package/dist/index63.cjs +1 -1
- package/dist/index63.mjs +1 -1
- package/dist/index64.cjs +1 -1
- package/dist/index64.mjs +1 -1
- package/dist/index65.cjs +1 -1
- package/dist/index65.mjs +1 -1
- package/dist/index66.cjs +1 -1
- package/dist/index66.mjs +1 -1
- package/dist/index67.cjs +1 -1
- package/dist/index67.mjs +1 -1
- package/dist/index68.cjs +1 -1
- package/dist/index68.mjs +1 -1
- package/dist/index69.cjs +1 -1
- package/dist/index69.mjs +1 -1
- package/dist/index7.cjs +1 -1
- package/dist/index7.mjs +1 -1
- package/dist/index70.cjs +1 -1
- package/dist/index70.mjs +1 -1
- package/dist/index71.cjs +1 -1
- package/dist/index71.mjs +1 -1
- package/dist/index72.cjs +1 -1
- package/dist/index72.mjs +1 -1
- package/dist/index73.cjs +1 -1
- package/dist/index73.mjs +1 -1
- package/dist/index75.cjs +7 -10
- package/dist/index75.cjs.map +1 -1
- package/dist/index75.mjs +18 -21
- package/dist/index75.mjs.map +1 -1
- package/dist/index76.cjs +1 -1
- package/dist/index76.mjs +1 -1
- package/dist/index77.cjs +1 -1
- package/dist/index77.mjs +1 -1
- package/dist/index78.cjs +1 -1
- package/dist/index78.mjs +1 -1
- package/dist/index79.cjs +1 -1
- package/dist/index79.mjs +1 -1
- package/dist/index8.cjs +1 -1
- package/dist/index8.mjs +1 -1
- package/dist/index80.cjs +1 -1
- package/dist/index80.mjs +1 -1
- package/dist/index81.cjs +1 -1
- package/dist/index81.mjs +1 -1
- package/dist/index82.cjs +1 -1
- package/dist/index82.mjs +2 -2
- package/dist/index9.cjs +1 -1
- package/dist/index9.mjs +1 -1
- package/dist/index97.cjs +1 -1
- package/dist/index97.cjs.map +1 -1
- package/dist/index97.mjs +62 -154
- package/dist/index97.mjs.map +1 -1
- package/dist/index98.cjs +1 -1
- package/dist/index98.cjs.map +1 -1
- package/dist/index98.mjs +138 -202
- package/dist/index98.mjs.map +1 -1
- package/dist/index99.cjs +1 -1
- package/dist/index99.cjs.map +1 -1
- package/dist/index99.mjs +218 -30
- package/dist/index99.mjs.map +1 -1
- package/package.json +1 -5
package/dist/index120.mjs
CHANGED
|
@@ -1,42 +1,189 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import { jsx as t, jsxs as c } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as E, useState as O, useRef as X, useCallback as r } from "react";
|
|
3
|
+
import { X as _, Paperclip as q, Mic as G, Send as H, Image as J, File as Q } from "lucide-react";
|
|
4
|
+
import { useChatInput as Y } from "./index85.mjs";
|
|
5
|
+
import { ChatVoiceRecorder as Z } from "./index126.mjs";
|
|
6
|
+
import { formatFileSize as L } from "./index184.mjs";
|
|
7
|
+
import n from "./index116.mjs";
|
|
8
|
+
const ee = (p) => p.type.startsWith("image/") ? /* @__PURE__ */ t(J, { size: 14 }) : /* @__PURE__ */ t(Q, { size: 14 }), te = E(
|
|
9
|
+
({
|
|
10
|
+
onSend: p,
|
|
11
|
+
placeholder: S = "Type a message...",
|
|
12
|
+
allowAttachments: R = !0,
|
|
13
|
+
allowVoiceRecording: z = !0,
|
|
14
|
+
allowAudioUpload: ne = !0,
|
|
15
|
+
disabled: s = !1,
|
|
16
|
+
maxLength: f,
|
|
17
|
+
acceptedFileTypes: w = [
|
|
18
|
+
"image/*",
|
|
19
|
+
"audio/*",
|
|
20
|
+
".pdf",
|
|
21
|
+
".doc",
|
|
22
|
+
".docx",
|
|
23
|
+
".txt"
|
|
24
|
+
],
|
|
25
|
+
isLoading: i = !1,
|
|
26
|
+
pendingAttachments: x,
|
|
27
|
+
onRemoveAttachment: B,
|
|
28
|
+
className: j,
|
|
29
|
+
...k
|
|
30
|
+
}, o) => {
|
|
31
|
+
const [g, h] = O(!1), m = X(null), {
|
|
32
|
+
value: v,
|
|
33
|
+
setValue: D,
|
|
34
|
+
attachments: F,
|
|
35
|
+
addAttachments: l,
|
|
36
|
+
removeAttachment: I,
|
|
37
|
+
handleSubmit: A,
|
|
38
|
+
handleKeyDown: V,
|
|
39
|
+
textareaRef: b,
|
|
40
|
+
isEmpty: P
|
|
41
|
+
} = Y({
|
|
42
|
+
maxLength: f,
|
|
43
|
+
onSend: p,
|
|
44
|
+
disabled: s || i
|
|
45
|
+
}), u = x || F, M = B || I, W = r(
|
|
46
|
+
(e) => {
|
|
47
|
+
b.current = e, typeof o == "function" ? o(e) : o && (o.current = e);
|
|
48
|
+
},
|
|
49
|
+
[o, b]
|
|
50
|
+
), K = r(
|
|
51
|
+
(e) => {
|
|
52
|
+
const a = e.target.files;
|
|
53
|
+
a && a.length > 0 && l(Array.from(a)), m.current && (m.current.value = "");
|
|
54
|
+
},
|
|
55
|
+
[l]
|
|
56
|
+
), T = r(
|
|
57
|
+
(e) => {
|
|
58
|
+
const a = e.clipboardData.items, d = [];
|
|
59
|
+
for (const C of a)
|
|
60
|
+
if (C.type.startsWith("image/")) {
|
|
61
|
+
const N = C.getAsFile();
|
|
62
|
+
N && d.push(N);
|
|
63
|
+
}
|
|
64
|
+
d.length > 0 && (e.preventDefault(), l(d));
|
|
65
|
+
},
|
|
66
|
+
[l]
|
|
67
|
+
), U = r(
|
|
68
|
+
(e) => {
|
|
69
|
+
const a = Object.assign(e, {
|
|
70
|
+
name: `voice-${Date.now()}.webm`,
|
|
71
|
+
lastModified: Date.now()
|
|
72
|
+
});
|
|
73
|
+
l([a]), h(!1);
|
|
74
|
+
},
|
|
75
|
+
[l]
|
|
76
|
+
), $ = r(() => {
|
|
77
|
+
s || i || A();
|
|
78
|
+
}, [s, i, A]), y = !P || u.length > 0;
|
|
79
|
+
return /* @__PURE__ */ t(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
className: [n.inputContainer, j].filter(Boolean).join(" "),
|
|
83
|
+
children: /* @__PURE__ */ c("div", { className: n.inputWrapper, children: [
|
|
84
|
+
u.length > 0 && /* @__PURE__ */ t("div", { className: n.pendingAttachments, children: u.map((e, a) => /* @__PURE__ */ c("div", { className: n.pendingAttachment, children: [
|
|
85
|
+
ee(e),
|
|
86
|
+
/* @__PURE__ */ t("span", { children: e.name }),
|
|
87
|
+
/* @__PURE__ */ c("span", { className: n.pendingAttachmentSize, children: [
|
|
88
|
+
"(",
|
|
89
|
+
L(e.size),
|
|
90
|
+
")"
|
|
91
|
+
] }),
|
|
92
|
+
/* @__PURE__ */ t(
|
|
93
|
+
"button",
|
|
94
|
+
{
|
|
95
|
+
className: n.pendingAttachmentRemove,
|
|
96
|
+
onClick: () => M(a),
|
|
97
|
+
"aria-label": `Remove ${e.name}`,
|
|
98
|
+
children: /* @__PURE__ */ t(_, { size: 14 })
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
] }, a)) }),
|
|
102
|
+
g && /* @__PURE__ */ t(
|
|
103
|
+
Z,
|
|
104
|
+
{
|
|
105
|
+
onRecordingComplete: U,
|
|
106
|
+
onCancel: () => h(!1)
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
!g && /* @__PURE__ */ c("div", { className: n.inputBox, children: [
|
|
110
|
+
R && /* @__PURE__ */ c("div", { className: n.inputActions, children: [
|
|
111
|
+
/* @__PURE__ */ t(
|
|
112
|
+
"input",
|
|
113
|
+
{
|
|
114
|
+
ref: m,
|
|
115
|
+
type: "file",
|
|
116
|
+
accept: w.join(","),
|
|
117
|
+
multiple: !0,
|
|
118
|
+
onChange: K,
|
|
119
|
+
style: { display: "none" },
|
|
120
|
+
"aria-hidden": "true"
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ t(
|
|
124
|
+
"button",
|
|
125
|
+
{
|
|
126
|
+
className: n.inputButton,
|
|
127
|
+
onClick: () => m.current?.click(),
|
|
128
|
+
disabled: s || i,
|
|
129
|
+
"aria-label": "Attach file",
|
|
130
|
+
title: "Attach file",
|
|
131
|
+
children: /* @__PURE__ */ t(q, { size: 20 })
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
] }),
|
|
135
|
+
/* @__PURE__ */ t(
|
|
136
|
+
"textarea",
|
|
137
|
+
{
|
|
138
|
+
ref: W,
|
|
139
|
+
className: n.inputTextarea,
|
|
140
|
+
value: v,
|
|
141
|
+
onChange: (e) => D(e.target.value),
|
|
142
|
+
onKeyDown: V,
|
|
143
|
+
onPaste: T,
|
|
144
|
+
placeholder: S,
|
|
145
|
+
disabled: s || i,
|
|
146
|
+
maxLength: f,
|
|
147
|
+
rows: 1,
|
|
148
|
+
"aria-label": "Message input",
|
|
149
|
+
...k
|
|
150
|
+
}
|
|
151
|
+
),
|
|
152
|
+
/* @__PURE__ */ c("div", { className: n.inputActions, children: [
|
|
153
|
+
z && !v && u.length === 0 && /* @__PURE__ */ t(
|
|
154
|
+
"button",
|
|
155
|
+
{
|
|
156
|
+
className: n.inputButton,
|
|
157
|
+
onClick: () => h(!0),
|
|
158
|
+
disabled: s || i,
|
|
159
|
+
"aria-label": "Record voice message",
|
|
160
|
+
title: "Record voice message",
|
|
161
|
+
children: /* @__PURE__ */ t(G, { size: 20 })
|
|
162
|
+
}
|
|
163
|
+
),
|
|
164
|
+
/* @__PURE__ */ t(
|
|
165
|
+
"button",
|
|
166
|
+
{
|
|
167
|
+
className: [
|
|
168
|
+
n.inputButton,
|
|
169
|
+
y && n.inputButtonPrimary
|
|
170
|
+
].filter(Boolean).join(" "),
|
|
171
|
+
onClick: $,
|
|
172
|
+
disabled: s || i || !y,
|
|
173
|
+
"aria-label": "Send message",
|
|
174
|
+
title: "Send message",
|
|
175
|
+
children: i ? /* @__PURE__ */ t("span", { className: n.inputSpinner }) : /* @__PURE__ */ t(H, { size: 20 })
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
] })
|
|
179
|
+
] })
|
|
180
|
+
] })
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
);
|
|
185
|
+
te.displayName = "ChatInput";
|
|
21
186
|
export {
|
|
22
|
-
|
|
23
|
-
d as badge,
|
|
24
|
-
a as badgeLabel,
|
|
25
|
-
s as chevron,
|
|
26
|
-
p as content,
|
|
27
|
-
h as default,
|
|
28
|
-
o as dropCompleted,
|
|
29
|
-
t as dropTarget,
|
|
30
|
-
x as emptyDropZone,
|
|
31
|
-
l as emptyState,
|
|
32
|
-
m as emptyText,
|
|
33
|
-
r as expanded,
|
|
34
|
-
e as folder,
|
|
35
|
-
y as grid,
|
|
36
|
-
_ as header,
|
|
37
|
-
b as insertionLine,
|
|
38
|
-
g as sortDropdown,
|
|
39
|
-
i as title,
|
|
40
|
-
n as trigger
|
|
187
|
+
te as ChatInput
|
|
41
188
|
};
|
|
42
189
|
//# sourceMappingURL=index120.mjs.map
|
package/dist/index120.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index120.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index120.mjs","sources":["../src/components/Chat/components/ChatInput.tsx"],"sourcesContent":["/**\n * ChatInput Component\n *\n * Multi-line input with attachment support, voice recording,\n * and send functionality.\n */\n\nimport React, { forwardRef, useCallback, useState, useRef } from \"react\";\nimport { Send, Paperclip, Mic, X, Image, File } from \"lucide-react\";\nimport type { ChatInputProps } from \"../Chat.types\";\nimport { useChatInput } from \"../hooks/useChatInput\";\nimport { ChatVoiceRecorder } from \"./ChatVoiceRecorder\";\nimport { formatFileSize } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\n// Get file icon\nconst getFileIcon = (file: File) => {\n if (file.type.startsWith(\"image/\")) {\n return <Image size={14} />;\n }\n return <File size={14} />;\n};\n\nexport const ChatInput = forwardRef<HTMLTextAreaElement, ChatInputProps>(\n (\n {\n onSend,\n placeholder = \"Type a message...\",\n allowAttachments = true,\n allowVoiceRecording = true,\n allowAudioUpload: _allowAudioUpload = true,\n disabled = false,\n maxLength,\n acceptedFileTypes = [\n \"image/*\",\n \"audio/*\",\n \".pdf\",\n \".doc\",\n \".docx\",\n \".txt\",\n ],\n isLoading = false,\n pendingAttachments: externalAttachments,\n onRemoveAttachment: externalOnRemove,\n className,\n ...rest\n },\n forwardedRef,\n ) => {\n const [showVoiceRecorder, setShowVoiceRecorder] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const {\n value,\n setValue,\n attachments,\n addAttachments,\n removeAttachment,\n handleSubmit: internalSubmit,\n handleKeyDown,\n textareaRef,\n isEmpty,\n } = useChatInput({\n maxLength,\n onSend,\n disabled: disabled || isLoading,\n });\n\n // Use external attachments if provided, otherwise internal\n const displayAttachments = externalAttachments || attachments;\n const handleRemoveAttachment = externalOnRemove || removeAttachment;\n\n // Combine refs via callback ref\n const combinedRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n // Set internal ref\n (\n textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n // Forward ref\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef, textareaRef],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n addAttachments(Array.from(files));\n }\n // Reset input\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [addAttachments],\n );\n\n // Handle paste for images\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n const items = e.clipboardData.items;\n const imageFiles: File[] = [];\n\n for (const item of items) {\n if (item.type.startsWith(\"image/\")) {\n const file = item.getAsFile();\n if (file) {\n imageFiles.push(file);\n }\n }\n }\n\n if (imageFiles.length > 0) {\n e.preventDefault();\n addAttachments(imageFiles);\n }\n },\n [addAttachments],\n );\n\n // Handle voice recording complete\n const handleVoiceRecordingComplete = useCallback(\n (blob: Blob) => {\n // Create a file-like object from the blob\n const file = Object.assign(blob, {\n name: `voice-${Date.now()}.webm`,\n lastModified: Date.now(),\n }) as File;\n addAttachments([file]);\n setShowVoiceRecorder(false);\n },\n [addAttachments],\n );\n\n // Handle submit\n const handleSubmit = useCallback(() => {\n if (disabled || isLoading) return;\n internalSubmit();\n }, [disabled, isLoading, internalSubmit]);\n\n const canSend = !isEmpty || displayAttachments.length > 0;\n\n return (\n <div\n className={[styles.inputContainer, className].filter(Boolean).join(\" \")}\n >\n <div className={styles.inputWrapper}>\n {/* Pending attachments */}\n {displayAttachments.length > 0 && (\n <div className={styles.pendingAttachments}>\n {displayAttachments.map((file, index) => (\n <div key={index} className={styles.pendingAttachment}>\n {getFileIcon(file)}\n <span>{file.name}</span>\n <span className={styles.pendingAttachmentSize}>\n ({formatFileSize(file.size)})\n </span>\n <button\n className={styles.pendingAttachmentRemove}\n onClick={() => handleRemoveAttachment(index)}\n aria-label={`Remove ${file.name}`}\n >\n <X size={14} />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Voice recorder overlay */}\n {showVoiceRecorder && (\n <ChatVoiceRecorder\n onRecordingComplete={handleVoiceRecordingComplete}\n onCancel={() => setShowVoiceRecorder(false)}\n />\n )}\n\n {/* Main input box */}\n {!showVoiceRecorder && (\n <div className={styles.inputBox}>\n {/* Left actions (attachments) */}\n {allowAttachments && (\n <div className={styles.inputActions}>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={acceptedFileTypes.join(\",\")}\n multiple\n onChange={handleFileSelect}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n <button\n className={styles.inputButton}\n onClick={() => fileInputRef.current?.click()}\n disabled={disabled || isLoading}\n aria-label=\"Attach file\"\n title=\"Attach file\"\n >\n <Paperclip size={20} />\n </button>\n </div>\n )}\n\n {/* Textarea */}\n <textarea\n ref={combinedRef}\n className={styles.inputTextarea}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n disabled={disabled || isLoading}\n maxLength={maxLength}\n rows={1}\n aria-label=\"Message input\"\n {...rest}\n />\n\n {/* Right actions (voice, send) */}\n <div className={styles.inputActions}>\n {/* Voice recording button */}\n {allowVoiceRecording &&\n !value &&\n displayAttachments.length === 0 && (\n <button\n className={styles.inputButton}\n onClick={() => setShowVoiceRecorder(true)}\n disabled={disabled || isLoading}\n aria-label=\"Record voice message\"\n title=\"Record voice message\"\n >\n <Mic size={20} />\n </button>\n )}\n\n {/* Send button */}\n <button\n className={[\n styles.inputButton,\n canSend && styles.inputButtonPrimary,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={handleSubmit}\n disabled={disabled || isLoading || !canSend}\n aria-label=\"Send message\"\n title=\"Send message\"\n >\n {isLoading ? (\n <span className={styles.inputSpinner} />\n ) : (\n <Send size={20} />\n )}\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nChatInput.displayName = \"ChatInput\";\n"],"names":["getFileIcon","file","jsx","Image","File","ChatInput","forwardRef","onSend","placeholder","allowAttachments","allowVoiceRecording","_allowAudioUpload","disabled","maxLength","acceptedFileTypes","isLoading","externalAttachments","externalOnRemove","className","rest","forwardedRef","showVoiceRecorder","setShowVoiceRecorder","useState","fileInputRef","useRef","value","setValue","attachments","addAttachments","removeAttachment","internalSubmit","handleKeyDown","textareaRef","isEmpty","useChatInput","displayAttachments","handleRemoveAttachment","combinedRef","useCallback","node","handleFileSelect","files","handlePaste","items","imageFiles","item","handleVoiceRecordingComplete","blob","handleSubmit","canSend","styles","jsxs","index","formatFileSize","X","ChatVoiceRecorder","Paperclip","Mic","Send"],"mappings":"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"}
|
package/dist/index121.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),e=require("./index116.cjs"),s=({label:t="Generating response",className:i,...n})=>a.jsx("div",{className:[e.default.message,e.default.messageAssistant,i].filter(Boolean).join(" "),role:"status","aria-live":"polite","aria-label":t,...n,children:a.jsx("div",{className:e.default.messageContent,children:a.jsx("div",{className:[e.default.messageBubble,e.default.messageBubbleAssistant,e.default.thinkingBubble].join(" "),children:a.jsx("span",{className:e.default.thinkingSpinner})})})});s.displayName="ChatTypingIndicator";exports.ChatTypingIndicator=s;
|
|
2
2
|
//# sourceMappingURL=index121.cjs.map
|
package/dist/index121.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index121.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index121.cjs","sources":["../src/components/Chat/components/ChatTypingIndicator.tsx"],"sourcesContent":["/**\n * ChatTypingIndicator Component\n *\n * Circular processing indicator shown before content generation begins.\n * Intentionally abstract — communicates activity without representing\n * specific progress, reducing temporal expectations.\n *\n * Renders in assistant-message layout so the transition to streaming\n * content feels seamless. Avatar hidden by default, matching ChatMessage.\n */\n\nimport React from \"react\";\nimport type { ChatTypingIndicatorProps } from \"../Chat.types\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatTypingIndicator: React.FC<ChatTypingIndicatorProps> = ({\n label = \"Generating response\",\n className,\n ...rest\n}) => {\n return (\n <div\n className={[styles.message, styles.messageAssistant, className]\n .filter(Boolean)\n .join(\" \")}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={label}\n {...rest}\n >\n <div className={styles.messageContent}>\n <div\n className={[\n styles.messageBubble,\n styles.messageBubbleAssistant,\n styles.thinkingBubble,\n ].join(\" \")}\n >\n <span className={styles.thinkingSpinner} />\n </div>\n </div>\n </div>\n );\n};\n\nChatTypingIndicator.displayName = \"ChatTypingIndicator\";\n"],"names":["ChatTypingIndicator","label","className","rest","jsx","styles"],"mappings":"iJAeaA,EAA0D,CAAC,CACtE,MAAAC,EAAQ,sBACR,UAAAC,EACA,GAAGC,CACL,IAEIC,EAAAA,IAAC,MAAA,CACC,UAAW,CAACC,EAAAA,QAAO,QAASA,EAAAA,QAAO,iBAAkBH,CAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG,EACX,KAAK,SACL,YAAU,SACV,aAAYD,EACX,GAAGE,EAEJ,SAAAC,EAAAA,IAAC,MAAA,CAAI,UAAWC,UAAO,eACrB,SAAAD,EAAAA,IAAC,MAAA,CACC,UAAW,CACTC,EAAAA,QAAO,cACPA,EAAAA,QAAO,uBACPA,UAAO,cAAA,EACP,KAAK,GAAG,EAEV,SAAAD,EAAAA,IAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,eAAA,CAAiB,CAAA,CAAA,CAC3C,CACF,CAAA,CAAA,EAKNL,EAAoB,YAAc"}
|
package/dist/index121.mjs
CHANGED
|
@@ -1,69 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
compact: I,
|
|
30
|
-
skeleton: h,
|
|
31
|
-
skeletonIcon: D,
|
|
32
|
-
pulse: F,
|
|
33
|
-
skeletonContent: K,
|
|
34
|
-
skeletonTitle: N,
|
|
35
|
-
skeletonDesc: T
|
|
36
|
-
};
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import e from "./index116.mjs";
|
|
3
|
+
const t = ({
|
|
4
|
+
label: a = "Generating response",
|
|
5
|
+
className: i,
|
|
6
|
+
...n
|
|
7
|
+
}) => /* @__PURE__ */ s(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
className: [e.message, e.messageAssistant, i].filter(Boolean).join(" "),
|
|
11
|
+
role: "status",
|
|
12
|
+
"aria-live": "polite",
|
|
13
|
+
"aria-label": a,
|
|
14
|
+
...n,
|
|
15
|
+
children: /* @__PURE__ */ s("div", { className: e.messageContent, children: /* @__PURE__ */ s(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
className: [
|
|
19
|
+
e.messageBubble,
|
|
20
|
+
e.messageBubbleAssistant,
|
|
21
|
+
e.thinkingBubble
|
|
22
|
+
].join(" "),
|
|
23
|
+
children: /* @__PURE__ */ s("span", { className: e.thinkingSpinner })
|
|
24
|
+
}
|
|
25
|
+
) })
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
t.displayName = "ChatTypingIndicator";
|
|
37
29
|
export {
|
|
38
|
-
|
|
39
|
-
t as activityFeed,
|
|
40
|
-
r as actor,
|
|
41
|
-
m as actorName,
|
|
42
|
-
u as avatar,
|
|
43
|
-
I as compact,
|
|
44
|
-
j as connector,
|
|
45
|
-
i as content,
|
|
46
|
-
W as default,
|
|
47
|
-
k as description,
|
|
48
|
-
o as empty,
|
|
49
|
-
n as filters,
|
|
50
|
-
p as header,
|
|
51
|
-
c as iconColumn,
|
|
52
|
-
s as iconWrapper,
|
|
53
|
-
_ as item,
|
|
54
|
-
a as itemCompact,
|
|
55
|
-
e as list,
|
|
56
|
-
V as metadata,
|
|
57
|
-
y as metadataItem,
|
|
58
|
-
C as metadataKey,
|
|
59
|
-
f as metadataValue,
|
|
60
|
-
F as pulse,
|
|
61
|
-
h as skeleton,
|
|
62
|
-
K as skeletonContent,
|
|
63
|
-
T as skeletonDesc,
|
|
64
|
-
D as skeletonIcon,
|
|
65
|
-
N as skeletonTitle,
|
|
66
|
-
d as time,
|
|
67
|
-
l as title
|
|
30
|
+
t as ChatTypingIndicator
|
|
68
31
|
};
|
|
69
32
|
//# sourceMappingURL=index121.mjs.map
|
package/dist/index121.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index121.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index121.mjs","sources":["../src/components/Chat/components/ChatTypingIndicator.tsx"],"sourcesContent":["/**\n * ChatTypingIndicator Component\n *\n * Circular processing indicator shown before content generation begins.\n * Intentionally abstract — communicates activity without representing\n * specific progress, reducing temporal expectations.\n *\n * Renders in assistant-message layout so the transition to streaming\n * content feels seamless. Avatar hidden by default, matching ChatMessage.\n */\n\nimport React from \"react\";\nimport type { ChatTypingIndicatorProps } from \"../Chat.types\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatTypingIndicator: React.FC<ChatTypingIndicatorProps> = ({\n label = \"Generating response\",\n className,\n ...rest\n}) => {\n return (\n <div\n className={[styles.message, styles.messageAssistant, className]\n .filter(Boolean)\n .join(\" \")}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={label}\n {...rest}\n >\n <div className={styles.messageContent}>\n <div\n className={[\n styles.messageBubble,\n styles.messageBubbleAssistant,\n styles.thinkingBubble,\n ].join(\" \")}\n >\n <span className={styles.thinkingSpinner} />\n </div>\n </div>\n </div>\n );\n};\n\nChatTypingIndicator.displayName = \"ChatTypingIndicator\";\n"],"names":["ChatTypingIndicator","label","className","rest","jsx","styles"],"mappings":";;AAeO,MAAMA,IAA0D,CAAC;AAAA,EACtE,OAAAC,IAAQ;AAAA,EACR,WAAAC;AAAA,EACA,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW,CAACC,EAAO,SAASA,EAAO,kBAAkBH,CAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACX,MAAK;AAAA,IACL,aAAU;AAAA,IACV,cAAYD;AAAA,IACX,GAAGE;AAAA,IAEJ,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAWC,EAAO,gBACrB,UAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACTC,EAAO;AAAA,UACPA,EAAO;AAAA,UACPA,EAAO;AAAA,QAAA,EACP,KAAK,GAAG;AAAA,QAEV,UAAA,gBAAAD,EAAC,QAAA,EAAK,WAAWC,EAAO,gBAAA,CAAiB;AAAA,MAAA;AAAA,IAAA,EAC3C,CACF;AAAA,EAAA;AAAA;AAKNL,EAAoB,cAAc;"}
|
package/dist/index122.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),f=require("react-syntax-highlighter"),d=require("react-syntax-highlighter/dist/esm/styles/prism"),u=require("lucide-react"),o=require("./index116.cjs"),k=require("./index75.cjs"),b=t=>t?{js:"javascript",ts:"typescript",jsx:"jsx",tsx:"tsx",py:"python",rb:"ruby",sh:"bash",shell:"bash",yml:"yaml",md:"markdown"}[t.toLowerCase()]||t.toLowerCase():"text",h=({code:t,language:s,showLineNumbers:m=!1,showCopyButton:p=!0,maxHeight:y="400px",className:C,...x})=>{const[a,r]=n.useState(!1);let c="dark";try{c=k.useThemeContext().theme}catch{}const g=n.useCallback(async()=>{try{await navigator.clipboard.writeText(t),r(!0),setTimeout(()=>r(!1),2e3)}catch(l){console.error("Failed to copy code:",l)}},[t]),i=b(s),j=c==="light"?d.oneLight:d.oneDark;return e.jsxs("div",{className:[o.default.codeBlock,C].filter(Boolean).join(" "),...x,children:[e.jsxs("div",{className:o.default.codeBlockHeader,children:[e.jsx("span",{className:o.default.codeBlockLanguage,children:i}),p&&e.jsx("button",{className:[o.default.codeBlockCopy,a&&o.default.codeBlockCopied].filter(Boolean).join(" "),onClick:g,"aria-label":a?"Copied!":"Copy code",children:a?e.jsxs(e.Fragment,{children:[e.jsx(u.Check,{size:14}),"Copied!"]}):e.jsxs(e.Fragment,{children:[e.jsx(u.Copy,{size:14}),"Copy"]})})]}),e.jsx("div",{className:o.default.codeBlockContent,style:{maxHeight:y},children:e.jsx(f.Prism,{language:i,style:j,showLineNumbers:m,customStyle:{margin:0,padding:0,background:"transparent",fontSize:"inherit",lineHeight:"inherit"},codeTagProps:{style:{fontFamily:"var(--font-mono)"}},children:t})})]})};h.displayName="ChatCodeBlock";exports.ChatCodeBlock=h;
|
|
2
2
|
//# sourceMappingURL=index122.cjs.map
|
package/dist/index122.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index122.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index122.cjs","sources":["../src/components/Chat/components/ChatCodeBlock.tsx"],"sourcesContent":["/**\n * ChatCodeBlock Component\n *\n * Syntax-highlighted code block with copy functionality\n * and theme-aware highlighting.\n */\n\nimport React, { useState, useCallback } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport {\n oneDark,\n oneLight,\n} from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { Copy, Check } from \"lucide-react\";\nimport type { ChatCodeBlockProps } from \"../Chat.types\";\nimport { useThemeContext } from \"../../../contexts\";\nimport styles from \"../Chat.module.css\";\n\n// Map common language aliases\nconst normalizeLanguage = (lang?: string): string => {\n if (!lang) return \"text\";\n\n const aliases: Record<string, string> = {\n js: \"javascript\",\n ts: \"typescript\",\n jsx: \"jsx\",\n tsx: \"tsx\",\n py: \"python\",\n rb: \"ruby\",\n sh: \"bash\",\n shell: \"bash\",\n yml: \"yaml\",\n md: \"markdown\",\n };\n\n return aliases[lang.toLowerCase()] || lang.toLowerCase();\n};\n\nexport const ChatCodeBlock: React.FC<ChatCodeBlockProps> = ({\n code,\n language,\n showLineNumbers = false,\n showCopyButton = true,\n maxHeight = \"400px\",\n className,\n ...rest\n}) => {\n const [copied, setCopied] = useState(false);\n\n // Get current theme for syntax highlighting\n let currentTheme: \"light\" | \"dark\" = \"dark\";\n try {\n const ctx = useThemeContext();\n currentTheme = ctx.theme;\n } catch {\n // ThemeProvider not available, default to dark\n }\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy code:\", err);\n }\n }, [code]);\n\n const normalizedLang = normalizeLanguage(language);\n const highlightStyle = currentTheme === \"light\" ? oneLight : oneDark;\n\n return (\n <div\n className={[styles.codeBlock, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {/* Header with language and copy button */}\n <div className={styles.codeBlockHeader}>\n <span className={styles.codeBlockLanguage}>{normalizedLang}</span>\n {showCopyButton && (\n <button\n className={[styles.codeBlockCopy, copied && styles.codeBlockCopied]\n .filter(Boolean)\n .join(\" \")}\n onClick={handleCopy}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? (\n <>\n <Check size={14} />\n Copied!\n </>\n ) : (\n <>\n <Copy size={14} />\n Copy\n </>\n )}\n </button>\n )}\n </div>\n\n {/* Code content */}\n <div className={styles.codeBlockContent} style={{ maxHeight }}>\n <SyntaxHighlighter\n language={normalizedLang}\n style={highlightStyle}\n showLineNumbers={showLineNumbers}\n customStyle={{\n margin: 0,\n padding: 0,\n background: \"transparent\",\n fontSize: \"inherit\",\n lineHeight: \"inherit\",\n }}\n codeTagProps={{\n style: {\n fontFamily: \"var(--font-mono)\",\n },\n }}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n </div>\n );\n};\n\nChatCodeBlock.displayName = \"ChatCodeBlock\";\n"],"names":["normalizeLanguage","lang","ChatCodeBlock","code","language","showLineNumbers","showCopyButton","maxHeight","className","rest","copied","setCopied","useState","currentTheme","useThemeContext","handleCopy","useCallback","err","normalizedLang","highlightStyle","oneLight","oneDark","jsxs","styles","jsx","Fragment","Check","Copy","SyntaxHighlighter"],"mappings":"2TAmBMA,EAAqBC,GACpBA,EAEmC,CACtC,GAAI,aACJ,GAAI,aACJ,IAAK,MACL,IAAK,MACL,GAAI,SACJ,GAAI,OACJ,GAAI,OACJ,MAAO,OACP,IAAK,OACL,GAAI,UAAA,EAGSA,EAAK,YAAA,CAAa,GAAKA,EAAK,YAAA,EAfzB,OAkBPC,EAA8C,CAAC,CAC1D,KAAAC,EACA,SAAAC,EACA,gBAAAC,EAAkB,GAClB,eAAAC,EAAiB,GACjB,UAAAC,EAAY,QACZ,UAAAC,EACA,GAAGC,CACL,IAAM,CACJ,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EAG1C,IAAIC,EAAiC,OACrC,GAAI,CAEFA,EADYC,EAAAA,gBAAA,EACO,KACrB,MAAQ,CAER,CAEA,MAAMC,EAAaC,EAAAA,YAAY,SAAY,CACzC,GAAI,CACF,MAAM,UAAU,UAAU,UAAUb,CAAI,EACxCQ,EAAU,EAAI,EACd,WAAW,IAAMA,EAAU,EAAK,EAAG,GAAI,CACzC,OAASM,EAAK,CACZ,QAAQ,MAAM,uBAAwBA,CAAG,CAC3C,CACF,EAAG,CAACd,CAAI,CAAC,EAEHe,EAAiBlB,EAAkBI,CAAQ,EAC3Ce,EAAiBN,IAAiB,QAAUO,EAAAA,SAAWC,EAAAA,QAE7D,OACEC,EAAAA,KAAC,MAAA,CACC,UAAW,CAACC,UAAO,UAAWf,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAChE,GAAGC,EAGJ,SAAA,CAAAa,EAAAA,KAAC,MAAA,CAAI,UAAWC,EAAAA,QAAO,gBACrB,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,kBAAoB,SAAAL,EAAe,EAC1DZ,GACCkB,EAAAA,IAAC,SAAA,CACC,UAAW,CAACD,EAAAA,QAAO,cAAeb,GAAUa,EAAAA,QAAO,eAAe,EAC/D,OAAO,OAAO,EACd,KAAK,GAAG,EACX,QAASR,EACT,aAAYL,EAAS,UAAY,YAEhC,WACCY,EAAAA,KAAAG,EAAAA,SAAA,CACE,SAAA,CAAAD,EAAAA,IAACE,EAAAA,MAAA,CAAM,KAAM,EAAA,CAAI,EAAE,SAAA,CAAA,CAErB,EAEAJ,EAAAA,KAAAG,EAAAA,SAAA,CACE,SAAA,CAAAD,EAAAA,IAACG,EAAAA,KAAA,CAAK,KAAM,EAAA,CAAI,EAAE,MAAA,CAAA,CAEpB,CAAA,CAAA,CAEJ,EAEJ,EAGAH,MAAC,OAAI,UAAWD,EAAAA,QAAO,iBAAkB,MAAO,CAAE,UAAAhB,GAChD,SAAAiB,EAAAA,IAACI,EAAAA,MAAA,CACC,SAAUV,EACV,MAAOC,EACP,gBAAAd,EACA,YAAa,CACX,OAAQ,EACR,QAAS,EACT,WAAY,cACZ,SAAU,UACV,WAAY,SAAA,EAEd,aAAc,CACZ,MAAO,CACL,WAAY,kBAAA,CACd,EAGD,SAAAF,CAAA,CAAA,CACH,CACF,CAAA,CAAA,CAAA,CAGN,EAEAD,EAAc,YAAc"}
|
package/dist/index122.mjs
CHANGED
|
@@ -1,22 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { jsxs as r, jsx as o, Fragment as d } from "react/jsx-runtime";
|
|
2
|
+
import { useState as g, useCallback as k } from "react";
|
|
3
|
+
import { Prism as x } from "react-syntax-highlighter";
|
|
4
|
+
import { oneLight as B, oneDark as b } from "react-syntax-highlighter/dist/esm/styles/prism";
|
|
5
|
+
import { Check as j, Copy as v } from "lucide-react";
|
|
6
|
+
import t from "./index116.mjs";
|
|
7
|
+
import { useThemeContext as L } from "./index75.mjs";
|
|
8
|
+
const N = (e) => e ? {
|
|
9
|
+
js: "javascript",
|
|
10
|
+
ts: "typescript",
|
|
11
|
+
jsx: "jsx",
|
|
12
|
+
tsx: "tsx",
|
|
13
|
+
py: "python",
|
|
14
|
+
rb: "ruby",
|
|
15
|
+
sh: "bash",
|
|
16
|
+
shell: "bash",
|
|
17
|
+
yml: "yaml",
|
|
18
|
+
md: "markdown"
|
|
19
|
+
}[e.toLowerCase()] || e.toLowerCase() : "text", w = ({
|
|
20
|
+
code: e,
|
|
21
|
+
language: s,
|
|
22
|
+
showLineNumbers: m = !1,
|
|
23
|
+
showCopyButton: p = !0,
|
|
24
|
+
maxHeight: h = "400px",
|
|
25
|
+
className: y,
|
|
26
|
+
...C
|
|
27
|
+
}) => {
|
|
28
|
+
const [a, i] = g(!1);
|
|
29
|
+
let l = "dark";
|
|
30
|
+
try {
|
|
31
|
+
l = L().theme;
|
|
32
|
+
} catch {
|
|
33
|
+
}
|
|
34
|
+
const u = k(async () => {
|
|
35
|
+
try {
|
|
36
|
+
await navigator.clipboard.writeText(e), i(!0), setTimeout(() => i(!1), 2e3);
|
|
37
|
+
} catch (n) {
|
|
38
|
+
console.error("Failed to copy code:", n);
|
|
39
|
+
}
|
|
40
|
+
}, [e]), c = N(s), f = l === "light" ? B : b;
|
|
41
|
+
return /* @__PURE__ */ r(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
className: [t.codeBlock, y].filter(Boolean).join(" "),
|
|
45
|
+
...C,
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ r("div", { className: t.codeBlockHeader, children: [
|
|
48
|
+
/* @__PURE__ */ o("span", { className: t.codeBlockLanguage, children: c }),
|
|
49
|
+
p && /* @__PURE__ */ o(
|
|
50
|
+
"button",
|
|
51
|
+
{
|
|
52
|
+
className: [t.codeBlockCopy, a && t.codeBlockCopied].filter(Boolean).join(" "),
|
|
53
|
+
onClick: u,
|
|
54
|
+
"aria-label": a ? "Copied!" : "Copy code",
|
|
55
|
+
children: a ? /* @__PURE__ */ r(d, { children: [
|
|
56
|
+
/* @__PURE__ */ o(j, { size: 14 }),
|
|
57
|
+
"Copied!"
|
|
58
|
+
] }) : /* @__PURE__ */ r(d, { children: [
|
|
59
|
+
/* @__PURE__ */ o(v, { size: 14 }),
|
|
60
|
+
"Copy"
|
|
61
|
+
] })
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
] }),
|
|
65
|
+
/* @__PURE__ */ o("div", { className: t.codeBlockContent, style: { maxHeight: h }, children: /* @__PURE__ */ o(
|
|
66
|
+
x,
|
|
67
|
+
{
|
|
68
|
+
language: c,
|
|
69
|
+
style: f,
|
|
70
|
+
showLineNumbers: m,
|
|
71
|
+
customStyle: {
|
|
72
|
+
margin: 0,
|
|
73
|
+
padding: 0,
|
|
74
|
+
background: "transparent",
|
|
75
|
+
fontSize: "inherit",
|
|
76
|
+
lineHeight: "inherit"
|
|
77
|
+
},
|
|
78
|
+
codeTagProps: {
|
|
79
|
+
style: {
|
|
80
|
+
fontFamily: "var(--font-mono)"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
children: e
|
|
84
|
+
}
|
|
85
|
+
) })
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
);
|
|
10
89
|
};
|
|
90
|
+
w.displayName = "ChatCodeBlock";
|
|
11
91
|
export {
|
|
12
|
-
|
|
13
|
-
e as default,
|
|
14
|
-
c as description,
|
|
15
|
-
t as emptyState,
|
|
16
|
-
s as icon,
|
|
17
|
-
l as lg,
|
|
18
|
-
m as md,
|
|
19
|
-
_ as sm,
|
|
20
|
-
o as title
|
|
92
|
+
w as ChatCodeBlock
|
|
21
93
|
};
|
|
22
94
|
//# sourceMappingURL=index122.mjs.map
|
package/dist/index122.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index122.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index122.mjs","sources":["../src/components/Chat/components/ChatCodeBlock.tsx"],"sourcesContent":["/**\n * ChatCodeBlock Component\n *\n * Syntax-highlighted code block with copy functionality\n * and theme-aware highlighting.\n */\n\nimport React, { useState, useCallback } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport {\n oneDark,\n oneLight,\n} from \"react-syntax-highlighter/dist/esm/styles/prism\";\nimport { Copy, Check } from \"lucide-react\";\nimport type { ChatCodeBlockProps } from \"../Chat.types\";\nimport { useThemeContext } from \"../../../contexts\";\nimport styles from \"../Chat.module.css\";\n\n// Map common language aliases\nconst normalizeLanguage = (lang?: string): string => {\n if (!lang) return \"text\";\n\n const aliases: Record<string, string> = {\n js: \"javascript\",\n ts: \"typescript\",\n jsx: \"jsx\",\n tsx: \"tsx\",\n py: \"python\",\n rb: \"ruby\",\n sh: \"bash\",\n shell: \"bash\",\n yml: \"yaml\",\n md: \"markdown\",\n };\n\n return aliases[lang.toLowerCase()] || lang.toLowerCase();\n};\n\nexport const ChatCodeBlock: React.FC<ChatCodeBlockProps> = ({\n code,\n language,\n showLineNumbers = false,\n showCopyButton = true,\n maxHeight = \"400px\",\n className,\n ...rest\n}) => {\n const [copied, setCopied] = useState(false);\n\n // Get current theme for syntax highlighting\n let currentTheme: \"light\" | \"dark\" = \"dark\";\n try {\n const ctx = useThemeContext();\n currentTheme = ctx.theme;\n } catch {\n // ThemeProvider not available, default to dark\n }\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy code:\", err);\n }\n }, [code]);\n\n const normalizedLang = normalizeLanguage(language);\n const highlightStyle = currentTheme === \"light\" ? oneLight : oneDark;\n\n return (\n <div\n className={[styles.codeBlock, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {/* Header with language and copy button */}\n <div className={styles.codeBlockHeader}>\n <span className={styles.codeBlockLanguage}>{normalizedLang}</span>\n {showCopyButton && (\n <button\n className={[styles.codeBlockCopy, copied && styles.codeBlockCopied]\n .filter(Boolean)\n .join(\" \")}\n onClick={handleCopy}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? (\n <>\n <Check size={14} />\n Copied!\n </>\n ) : (\n <>\n <Copy size={14} />\n Copy\n </>\n )}\n </button>\n )}\n </div>\n\n {/* Code content */}\n <div className={styles.codeBlockContent} style={{ maxHeight }}>\n <SyntaxHighlighter\n language={normalizedLang}\n style={highlightStyle}\n showLineNumbers={showLineNumbers}\n customStyle={{\n margin: 0,\n padding: 0,\n background: \"transparent\",\n fontSize: \"inherit\",\n lineHeight: \"inherit\",\n }}\n codeTagProps={{\n style: {\n fontFamily: \"var(--font-mono)\",\n },\n }}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n </div>\n );\n};\n\nChatCodeBlock.displayName = \"ChatCodeBlock\";\n"],"names":["normalizeLanguage","lang","ChatCodeBlock","code","language","showLineNumbers","showCopyButton","maxHeight","className","rest","copied","setCopied","useState","currentTheme","useThemeContext","handleCopy","useCallback","err","normalizedLang","highlightStyle","oneLight","oneDark","jsxs","styles","jsx","Fragment","Check","Copy","SyntaxHighlighter"],"mappings":";;;;;;;AAmBA,MAAMA,IAAoB,CAACC,MACpBA,IAEmC;AAAA,EACtC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK;AAAA,EACL,IAAI;AAAA,EAGSA,EAAK,YAAA,CAAa,KAAKA,EAAK,YAAA,IAfzB,QAkBPC,IAA8C,CAAC;AAAA,EAC1D,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,gBAAAC,IAAiB;AAAA,EACjB,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK;AAG1C,MAAIC,IAAiC;AACrC,MAAI;AAEF,IAAAA,IADYC,EAAA,EACO;AAAA,EACrB,QAAQ;AAAA,EAER;AAEA,QAAMC,IAAaC,EAAY,YAAY;AACzC,QAAI;AACF,YAAM,UAAU,UAAU,UAAUb,CAAI,GACxCQ,EAAU,EAAI,GACd,WAAW,MAAMA,EAAU,EAAK,GAAG,GAAI;AAAA,IACzC,SAASM,GAAK;AACZ,cAAQ,MAAM,wBAAwBA,CAAG;AAAA,IAC3C;AAAA,EACF,GAAG,CAACd,CAAI,CAAC,GAEHe,IAAiBlB,EAAkBI,CAAQ,GAC3Ce,IAAiBN,MAAiB,UAAUO,IAAWC;AAE7D,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,CAACC,EAAO,WAAWf,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAChE,GAAGC;AAAA,MAGJ,UAAA;AAAA,QAAA,gBAAAa,EAAC,OAAA,EAAI,WAAWC,EAAO,iBACrB,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWD,EAAO,mBAAoB,UAAAL,GAAe;AAAA,UAC1DZ,KACC,gBAAAkB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,CAACD,EAAO,eAAeb,KAAUa,EAAO,eAAe,EAC/D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,cACX,SAASR;AAAA,cACT,cAAYL,IAAS,YAAY;AAAA,cAEhC,cACC,gBAAAY,EAAAG,GAAA,EACE,UAAA;AAAA,gBAAA,gBAAAD,EAACE,GAAA,EAAM,MAAM,GAAA,CAAI;AAAA,gBAAE;AAAA,cAAA,EAAA,CAErB,IAEA,gBAAAJ,EAAAG,GAAA,EACE,UAAA;AAAA,gBAAA,gBAAAD,EAACG,GAAA,EAAK,MAAM,GAAA,CAAI;AAAA,gBAAE;AAAA,cAAA,EAAA,CAEpB;AAAA,YAAA;AAAA,UAAA;AAAA,QAEJ,GAEJ;AAAA,QAGA,gBAAAH,EAAC,SAAI,WAAWD,EAAO,kBAAkB,OAAO,EAAE,WAAAhB,KAChD,UAAA,gBAAAiB;AAAA,UAACI;AAAAA,UAAA;AAAA,YACC,UAAUV;AAAA,YACV,OAAOC;AAAA,YACP,iBAAAd;AAAA,YACA,aAAa;AAAA,cACX,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,YAAY;AAAA,YAAA;AAAA,YAEd,cAAc;AAAA,cACZ,OAAO;AAAA,gBACL,YAAY;AAAA,cAAA;AAAA,YACd;AAAA,YAGD,UAAAF;AAAA,UAAA;AAAA,QAAA,EACH,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAD,EAAc,cAAc;"}
|
package/dist/index123.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),d=require("react-markdown"),u=require("remark-gfm"),m=require("./index122.cjs"),g=require("./index116.cjs"),o=({content:s,className:c,...i})=>r.jsx("div",{className:[g.default.markdown,c].filter(Boolean).join(" "),...i,children:r.jsx(d,{remarkPlugins:[u],components:{code({className:e,children:t,...a}){const n=/language-(\w+)/.exec(e||"");if(!n)return r.jsx("code",{className:e,...a,children:t});const l=String(t).replace(/\n$/,"");return r.jsx(m.ChatCodeBlock,{code:l,language:n[1]})},pre({children:e}){return r.jsx(r.Fragment,{children:e})},a({href:e,children:t,...a}){const n=e?.startsWith("http");return r.jsx("a",{href:e,target:n?"_blank":void 0,rel:n?"noopener noreferrer":void 0,...a,children:t})}},children:s})});o.displayName="ChatMarkdown";exports.ChatMarkdown=o;
|
|
2
2
|
//# sourceMappingURL=index123.cjs.map
|
package/dist/index123.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index123.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index123.cjs","sources":["../src/components/Chat/components/ChatMarkdown.tsx"],"sourcesContent":["/**\n * ChatMarkdown Component\n *\n * Markdown renderer with support for GFM (tables, strikethrough, etc.)\n * and custom code block rendering.\n */\n\nimport React from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { ChatMarkdownProps } from \"../Chat.types\";\nimport { ChatCodeBlock } from \"./ChatCodeBlock\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatMarkdown: React.FC<ChatMarkdownProps> = ({\n content,\n className,\n ...rest\n}) => {\n return (\n <div\n className={[styles.markdown, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n // Custom code block rendering\n code({ className: codeClassName, children, ...props }) {\n const match = /language-(\\w+)/.exec(codeClassName || \"\");\n const isInline = !match;\n\n if (isInline) {\n // Inline code\n return (\n <code className={codeClassName} {...props}>\n {children}\n </code>\n );\n }\n\n // Code block with syntax highlighting\n const codeString = String(children).replace(/\\n$/, \"\");\n return <ChatCodeBlock code={codeString} language={match[1]} />;\n },\n\n // Custom pre rendering (remove wrapper for code blocks)\n pre({ children }) {\n return <>{children}</>;\n },\n\n // Custom link rendering (open in new tab)\n a({ href, children, ...props }) {\n const isExternal = href?.startsWith(\"http\");\n return (\n <a\n href={href}\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n {...props}\n >\n {children}\n </a>\n );\n },\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n};\n\nChatMarkdown.displayName = \"ChatMarkdown\";\n"],"names":["ChatMarkdown","content","className","rest","jsx","styles","ReactMarkdown","remarkGfm","codeClassName","children","props","match","codeString","ChatCodeBlock","href","isExternal"],"mappings":"iOAcaA,EAA4C,CAAC,CACxD,QAAAC,EACA,UAAAC,EACA,GAAGC,CACL,IAEIC,EAAAA,IAAC,MAAA,CACC,UAAW,CAACC,UAAO,SAAUH,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC/D,GAAGC,EAEJ,SAAAC,EAAAA,IAACE,EAAA,CACC,cAAe,CAACC,CAAS,EACzB,WAAY,CAEV,KAAK,CAAE,UAAWC,EAAe,SAAAC,EAAU,GAAGC,GAAS,CACrD,MAAMC,EAAQ,iBAAiB,KAAKH,GAAiB,EAAE,EAGvD,GAFiB,CAACG,EAIhB,aACG,OAAA,CAAK,UAAWH,EAAgB,GAAGE,EACjC,SAAAD,EACH,EAKJ,MAAMG,EAAa,OAAOH,CAAQ,EAAE,QAAQ,MAAO,EAAE,EACrD,aAAQI,EAAAA,cAAA,CAAc,KAAMD,EAAY,SAAUD,EAAM,CAAC,EAAG,CAC9D,EAGA,IAAI,CAAE,SAAAF,GAAY,CAChB,yBAAU,SAAAA,EAAS,CACrB,EAGA,EAAE,CAAE,KAAAK,EAAM,SAAAL,EAAU,GAAGC,GAAS,CAC9B,MAAMK,EAAaD,GAAM,WAAW,MAAM,EAC1C,OACEV,EAAAA,IAAC,IAAA,CACC,KAAAU,EACA,OAAQC,EAAa,SAAW,OAChC,IAAKA,EAAa,sBAAwB,OACzC,GAAGL,EAEH,SAAAD,CAAA,CAAA,CAGP,CAAA,EAGD,SAAAR,CAAA,CAAA,CACH,CAAA,EAKND,EAAa,YAAc"}
|