@orion-ds/react 4.0.0 → 4.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/dist/index10.cjs +1 -1
  2. package/dist/index10.mjs +1 -1
  3. package/dist/index101.cjs +1 -1
  4. package/dist/index101.mjs +39 -13
  5. package/dist/index101.mjs.map +1 -1
  6. package/dist/index102.cjs +1 -1
  7. package/dist/index102.mjs +33 -30
  8. package/dist/index102.mjs.map +1 -1
  9. package/dist/index103.cjs +1 -1
  10. package/dist/index103.mjs +27 -30
  11. package/dist/index103.mjs.map +1 -1
  12. package/dist/index104.cjs +1 -1
  13. package/dist/index104.mjs +30 -36
  14. package/dist/index104.mjs.map +1 -1
  15. package/dist/index105.cjs +1 -1
  16. package/dist/index105.mjs +16 -30
  17. package/dist/index105.mjs.map +1 -1
  18. package/dist/index107.cjs +1 -1
  19. package/dist/index107.mjs +20 -42
  20. package/dist/index107.mjs.map +1 -1
  21. package/dist/index108.cjs +1 -1
  22. package/dist/index108.mjs +36 -32
  23. package/dist/index108.mjs.map +1 -1
  24. package/dist/index109.cjs +1 -1
  25. package/dist/index109.mjs +42 -50
  26. package/dist/index109.mjs.map +1 -1
  27. package/dist/index11.cjs +1 -1
  28. package/dist/index11.mjs +1 -1
  29. package/dist/index110.cjs +1 -1
  30. package/dist/index110.mjs +18 -12
  31. package/dist/index110.mjs.map +1 -1
  32. package/dist/index111.cjs +1 -1
  33. package/dist/index111.mjs +28 -33
  34. package/dist/index111.mjs.map +1 -1
  35. package/dist/index112.cjs +1 -1
  36. package/dist/index112.mjs +12 -28
  37. package/dist/index112.mjs.map +1 -1
  38. package/dist/index113.cjs +1 -1
  39. package/dist/index113.mjs +36 -20
  40. package/dist/index113.mjs.map +1 -1
  41. package/dist/index114.cjs +1 -1
  42. package/dist/index114.mjs +28 -24
  43. package/dist/index114.mjs.map +1 -1
  44. package/dist/index115.cjs +1 -1
  45. package/dist/index115.mjs +45 -33
  46. package/dist/index115.mjs.map +1 -1
  47. package/dist/index116.cjs +1 -1
  48. package/dist/index116.mjs +18 -18
  49. package/dist/index116.mjs.map +1 -1
  50. package/dist/index117.cjs +1 -1
  51. package/dist/index117.mjs +28 -30
  52. package/dist/index117.mjs.map +1 -1
  53. package/dist/index118.cjs +1 -1
  54. package/dist/index118.mjs +28 -26
  55. package/dist/index118.mjs.map +1 -1
  56. package/dist/index119.cjs +1 -1
  57. package/dist/index119.mjs +22 -234
  58. package/dist/index119.mjs.map +1 -1
  59. package/dist/index12.cjs +1 -1
  60. package/dist/index12.mjs +1 -1
  61. package/dist/index120.cjs +1 -1
  62. package/dist/index120.cjs.map +1 -1
  63. package/dist/index120.mjs +39 -34
  64. package/dist/index120.mjs.map +1 -1
  65. package/dist/index121.cjs +1 -1
  66. package/dist/index121.cjs.map +1 -1
  67. package/dist/index121.mjs +66 -44
  68. package/dist/index121.mjs.map +1 -1
  69. package/dist/index122.cjs +1 -1
  70. package/dist/index122.cjs.map +1 -1
  71. package/dist/index122.mjs +18 -170
  72. package/dist/index122.mjs.map +1 -1
  73. package/dist/index123.cjs +1 -1
  74. package/dist/index123.cjs.map +1 -1
  75. package/dist/index123.mjs +54 -186
  76. package/dist/index123.mjs.map +1 -1
  77. package/dist/index124.cjs +1 -1
  78. package/dist/index124.cjs.map +1 -1
  79. package/dist/index124.mjs +31 -29
  80. package/dist/index124.mjs.map +1 -1
  81. package/dist/index125.cjs +1 -1
  82. package/dist/index125.cjs.map +1 -1
  83. package/dist/index125.mjs +62 -90
  84. package/dist/index125.mjs.map +1 -1
  85. package/dist/index126.cjs +1 -1
  86. package/dist/index126.cjs.map +1 -1
  87. package/dist/index126.mjs +56 -53
  88. package/dist/index126.mjs.map +1 -1
  89. package/dist/index127.cjs +1 -1
  90. package/dist/index127.cjs.map +1 -1
  91. package/dist/index127.mjs +44 -66
  92. package/dist/index127.mjs.map +1 -1
  93. package/dist/index128.cjs +1 -1
  94. package/dist/index128.cjs.map +1 -1
  95. package/dist/index128.mjs +14 -124
  96. package/dist/index128.mjs.map +1 -1
  97. package/dist/index129.cjs +1 -1
  98. package/dist/index129.cjs.map +1 -1
  99. package/dist/index129.mjs +33 -108
  100. package/dist/index129.mjs.map +1 -1
  101. package/dist/index13.cjs +1 -1
  102. package/dist/index13.mjs +1 -1
  103. package/dist/index130.cjs +1 -1
  104. package/dist/index130.cjs.map +1 -1
  105. package/dist/index130.mjs +30 -111
  106. package/dist/index130.mjs.map +1 -1
  107. package/dist/index131.cjs +1 -1
  108. package/dist/index131.cjs.map +1 -1
  109. package/dist/index131.mjs +22 -122
  110. package/dist/index131.mjs.map +1 -1
  111. package/dist/index132.cjs +1 -1
  112. package/dist/index132.cjs.map +1 -1
  113. package/dist/index132.mjs +64 -214
  114. package/dist/index132.mjs.map +1 -1
  115. package/dist/index133.cjs +1 -1
  116. package/dist/index133.mjs +46 -42
  117. package/dist/index133.mjs.map +1 -1
  118. package/dist/index134.cjs +1 -1
  119. package/dist/index134.mjs +57 -44
  120. package/dist/index134.mjs.map +1 -1
  121. package/dist/index135.cjs +1 -1
  122. package/dist/index135.mjs +44 -28
  123. package/dist/index135.mjs.map +1 -1
  124. package/dist/index136.cjs +1 -1
  125. package/dist/index136.mjs +38 -76
  126. package/dist/index136.mjs.map +1 -1
  127. package/dist/index137.cjs +1 -1
  128. package/dist/index137.mjs +28 -38
  129. package/dist/index137.mjs.map +1 -1
  130. package/dist/index138.cjs +1 -1
  131. package/dist/index138.mjs +24 -38
  132. package/dist/index138.mjs.map +1 -1
  133. package/dist/index139.cjs +1 -1
  134. package/dist/index139.mjs +67 -65
  135. package/dist/index139.mjs.map +1 -1
  136. package/dist/index140.cjs +1 -1
  137. package/dist/index140.mjs +76 -28
  138. package/dist/index140.mjs.map +1 -1
  139. package/dist/index141.cjs +1 -1
  140. package/dist/index141.mjs +46 -16
  141. package/dist/index141.mjs.map +1 -1
  142. package/dist/index142.cjs +1 -1
  143. package/dist/index142.mjs +234 -22
  144. package/dist/index142.mjs.map +1 -1
  145. package/dist/index143.cjs +1 -1
  146. package/dist/index143.cjs.map +1 -1
  147. package/dist/index143.mjs +34 -63
  148. package/dist/index143.mjs.map +1 -1
  149. package/dist/index144.cjs +1 -1
  150. package/dist/index144.cjs.map +1 -1
  151. package/dist/index144.mjs +44 -21
  152. package/dist/index144.mjs.map +1 -1
  153. package/dist/index145.cjs +1 -1
  154. package/dist/index145.cjs.map +1 -1
  155. package/dist/index145.mjs +170 -20
  156. package/dist/index145.mjs.map +1 -1
  157. package/dist/index146.cjs +1 -1
  158. package/dist/index146.cjs.map +1 -1
  159. package/dist/index146.mjs +186 -27
  160. package/dist/index146.mjs.map +1 -1
  161. package/dist/index147.cjs +1 -1
  162. package/dist/index147.cjs.map +1 -1
  163. package/dist/index147.mjs +29 -43
  164. package/dist/index147.mjs.map +1 -1
  165. package/dist/index148.cjs +1 -1
  166. package/dist/index148.cjs.map +1 -1
  167. package/dist/index148.mjs +90 -45
  168. package/dist/index148.mjs.map +1 -1
  169. package/dist/index149.cjs +1 -1
  170. package/dist/index149.cjs.map +1 -1
  171. package/dist/index149.mjs +53 -28
  172. package/dist/index149.mjs.map +1 -1
  173. package/dist/index15.cjs +1 -1
  174. package/dist/index15.mjs +1 -1
  175. package/dist/index150.cjs +1 -1
  176. package/dist/index150.cjs.map +1 -1
  177. package/dist/index150.mjs +66 -28
  178. package/dist/index150.mjs.map +1 -1
  179. package/dist/index151.cjs +1 -1
  180. package/dist/index151.cjs.map +1 -1
  181. package/dist/index151.mjs +124 -32
  182. package/dist/index151.mjs.map +1 -1
  183. package/dist/index152.cjs +1 -1
  184. package/dist/index152.cjs.map +1 -1
  185. package/dist/index152.mjs +108 -30
  186. package/dist/index152.mjs.map +1 -1
  187. package/dist/index153.cjs +1 -1
  188. package/dist/index153.cjs.map +1 -1
  189. package/dist/index153.mjs +111 -24
  190. package/dist/index153.mjs.map +1 -1
  191. package/dist/index154.cjs +1 -1
  192. package/dist/index154.cjs.map +1 -1
  193. package/dist/index154.mjs +122 -28
  194. package/dist/index154.mjs.map +1 -1
  195. package/dist/index155.cjs +1 -1
  196. package/dist/index155.cjs.map +1 -1
  197. package/dist/index155.mjs +214 -30
  198. package/dist/index155.mjs.map +1 -1
  199. package/dist/index156.cjs +1 -1
  200. package/dist/index156.mjs +50 -33
  201. package/dist/index156.mjs.map +1 -1
  202. package/dist/index157.cjs +1 -1
  203. package/dist/index157.mjs +24 -46
  204. package/dist/index157.mjs.map +1 -1
  205. package/dist/index158.cjs +1 -1
  206. package/dist/index158.mjs +32 -46
  207. package/dist/index158.mjs.map +1 -1
  208. package/dist/index159.cjs +1 -1
  209. package/dist/index159.mjs +18 -46
  210. package/dist/index159.mjs.map +1 -1
  211. package/dist/index16.cjs +1 -1
  212. package/dist/index16.mjs +1 -1
  213. package/dist/index160.cjs +1 -1
  214. package/dist/index160.mjs +26 -40
  215. package/dist/index160.mjs.map +1 -1
  216. package/dist/index161.cjs +1 -1
  217. package/dist/index161.mjs +46 -22
  218. package/dist/index161.mjs.map +1 -1
  219. package/dist/index162.cjs +1 -1
  220. package/dist/index162.mjs +24 -18
  221. package/dist/index162.mjs.map +1 -1
  222. package/dist/index163.cjs +1 -1
  223. package/dist/index163.mjs +56 -40
  224. package/dist/index163.mjs.map +1 -1
  225. package/dist/index164.cjs +1 -1
  226. package/dist/index164.mjs +42 -18
  227. package/dist/index164.mjs.map +1 -1
  228. package/dist/index165.cjs +1 -1
  229. package/dist/index165.mjs +62 -24
  230. package/dist/index165.mjs.map +1 -1
  231. package/dist/index166.cjs +1 -1
  232. package/dist/index166.mjs +20 -64
  233. package/dist/index166.mjs.map +1 -1
  234. package/dist/index167.cjs +1 -1
  235. package/dist/index167.mjs +106 -53
  236. package/dist/index167.mjs.map +1 -1
  237. package/dist/index168.cjs +1 -1
  238. package/dist/index168.mjs +20 -12
  239. package/dist/index168.mjs.map +1 -1
  240. package/dist/index169.cjs +1 -1
  241. package/dist/index169.mjs +30 -56
  242. package/dist/index169.mjs.map +1 -1
  243. package/dist/index17.cjs +1 -1
  244. package/dist/index17.mjs +1 -1
  245. package/dist/index170.cjs +1 -1
  246. package/dist/index170.mjs +12 -106
  247. package/dist/index170.mjs.map +1 -1
  248. package/dist/index171.cjs +1 -1
  249. package/dist/index171.mjs +32 -18
  250. package/dist/index171.mjs.map +1 -1
  251. package/dist/index172.cjs +1 -1
  252. package/dist/index172.mjs +38 -60
  253. package/dist/index172.mjs.map +1 -1
  254. package/dist/index173.cjs +1 -1
  255. package/dist/index173.cjs.map +1 -1
  256. package/dist/index173.mjs +37 -56
  257. package/dist/index173.mjs.map +1 -1
  258. package/dist/index174.cjs +1 -1
  259. package/dist/index174.mjs +28 -18
  260. package/dist/index174.mjs.map +1 -1
  261. package/dist/index175.cjs +1 -1
  262. package/dist/index175.mjs +33 -52
  263. package/dist/index175.mjs.map +1 -1
  264. package/dist/index176.cjs +1 -1
  265. package/dist/index176.mjs +52 -64
  266. package/dist/index176.mjs.map +1 -1
  267. package/dist/index177.cjs +1 -1
  268. package/dist/index177.cjs.map +1 -1
  269. package/dist/index177.mjs +19 -37
  270. package/dist/index177.mjs.map +1 -1
  271. package/dist/index178.cjs +1 -1
  272. package/dist/index178.mjs +42 -28
  273. package/dist/index178.mjs.map +1 -1
  274. package/dist/index179.cjs +1 -1
  275. package/dist/index179.mjs +28 -67
  276. package/dist/index179.mjs.map +1 -1
  277. package/dist/index18.cjs +1 -1
  278. package/dist/index18.mjs +1 -1
  279. package/dist/index180.cjs +1 -1
  280. package/dist/index180.mjs +28 -57
  281. package/dist/index180.mjs.map +1 -1
  282. package/dist/index181.cjs +1 -1
  283. package/dist/index181.mjs +64 -44
  284. package/dist/index181.mjs.map +1 -1
  285. package/dist/index182.cjs +1 -1
  286. package/dist/index182.mjs +17 -17
  287. package/dist/index182.mjs.map +1 -1
  288. package/dist/index183.cjs +1 -1
  289. package/dist/index183.mjs +17 -17
  290. package/dist/index183.mjs.map +1 -1
  291. package/dist/index185.cjs +1 -1
  292. package/dist/index185.mjs +1 -1
  293. package/dist/index19.cjs +1 -1
  294. package/dist/index19.mjs +2 -2
  295. package/dist/index20.cjs +1 -1
  296. package/dist/index20.mjs +14 -14
  297. package/dist/index21.cjs +1 -1
  298. package/dist/index21.cjs.map +1 -1
  299. package/dist/index21.mjs +1 -1
  300. package/dist/index22.cjs +1 -1
  301. package/dist/index22.mjs +1 -1
  302. package/dist/index23.cjs +1 -1
  303. package/dist/index23.mjs +1 -1
  304. package/dist/index24.cjs +1 -1
  305. package/dist/index24.mjs +1 -1
  306. package/dist/index25.cjs +1 -1
  307. package/dist/index25.mjs +1 -1
  308. package/dist/index26.cjs +1 -1
  309. package/dist/index26.mjs +1 -1
  310. package/dist/index27.cjs +1 -1
  311. package/dist/index27.mjs +1 -1
  312. package/dist/index28.cjs +1 -1
  313. package/dist/index28.mjs +1 -1
  314. package/dist/index29.cjs +1 -1
  315. package/dist/index29.mjs +1 -1
  316. package/dist/index30.cjs +1 -1
  317. package/dist/index30.mjs +1 -1
  318. package/dist/index31.cjs +1 -1
  319. package/dist/index31.mjs +1 -1
  320. package/dist/index32.cjs +1 -1
  321. package/dist/index32.mjs +1 -1
  322. package/dist/index33.cjs +1 -1
  323. package/dist/index33.mjs +1 -1
  324. package/dist/index34.cjs +1 -1
  325. package/dist/index34.mjs +1 -1
  326. package/dist/index35.cjs +1 -1
  327. package/dist/index35.mjs +1 -1
  328. package/dist/index36.cjs +1 -1
  329. package/dist/index36.mjs +1 -1
  330. package/dist/index37.cjs +1 -1
  331. package/dist/index37.mjs +1 -1
  332. package/dist/index38.cjs +1 -1
  333. package/dist/index38.mjs +1 -1
  334. package/dist/index39.cjs +1 -1
  335. package/dist/index39.mjs +1 -1
  336. package/dist/index40.cjs +1 -1
  337. package/dist/index40.mjs +1 -1
  338. package/dist/index42.cjs +1 -1
  339. package/dist/index42.mjs +1 -1
  340. package/dist/index43.cjs +1 -1
  341. package/dist/index43.cjs.map +1 -1
  342. package/dist/index43.mjs +1 -1
  343. package/dist/index44.cjs +1 -1
  344. package/dist/index44.mjs +1 -1
  345. package/dist/index46.cjs +1 -1
  346. package/dist/index46.mjs +1 -1
  347. package/dist/index47.cjs +1 -1
  348. package/dist/index47.mjs +1 -1
  349. package/dist/index49.cjs +1 -1
  350. package/dist/index49.mjs +1 -1
  351. package/dist/index5.cjs +1 -1
  352. package/dist/index5.mjs +1 -1
  353. package/dist/index50.cjs +1 -1
  354. package/dist/index50.mjs +1 -1
  355. package/dist/index51.cjs +1 -1
  356. package/dist/index51.mjs +1 -1
  357. package/dist/index52.cjs +1 -1
  358. package/dist/index52.mjs +1 -1
  359. package/dist/index53.cjs +1 -1
  360. package/dist/index53.mjs +1 -1
  361. package/dist/index54.cjs +1 -1
  362. package/dist/index54.mjs +1 -1
  363. package/dist/index55.cjs +1 -1
  364. package/dist/index55.mjs +1 -1
  365. package/dist/index56.cjs +1 -1
  366. package/dist/index56.mjs +1 -1
  367. package/dist/index57.cjs +1 -1
  368. package/dist/index57.mjs +1 -1
  369. package/dist/index58.cjs +1 -1
  370. package/dist/index58.mjs +1 -1
  371. package/dist/index59.cjs +1 -1
  372. package/dist/index59.mjs +1 -1
  373. package/dist/index6.cjs +1 -1
  374. package/dist/index6.mjs +1 -1
  375. package/dist/index60.cjs +1 -1
  376. package/dist/index60.mjs +1 -1
  377. package/dist/index61.cjs +1 -1
  378. package/dist/index61.mjs +1 -1
  379. package/dist/index62.cjs +1 -1
  380. package/dist/index62.mjs +1 -1
  381. package/dist/index63.cjs +1 -1
  382. package/dist/index63.mjs +1 -1
  383. package/dist/index64.cjs +1 -1
  384. package/dist/index64.mjs +1 -1
  385. package/dist/index65.cjs +1 -1
  386. package/dist/index65.mjs +1 -1
  387. package/dist/index66.cjs +1 -1
  388. package/dist/index66.mjs +1 -1
  389. package/dist/index67.cjs +1 -1
  390. package/dist/index67.mjs +1 -1
  391. package/dist/index68.cjs +1 -1
  392. package/dist/index68.mjs +1 -1
  393. package/dist/index7.cjs +1 -1
  394. package/dist/index7.mjs +1 -1
  395. package/dist/index70.cjs +1 -1
  396. package/dist/index70.mjs +1 -1
  397. package/dist/index71.cjs +1 -1
  398. package/dist/index71.mjs +1 -1
  399. package/dist/index72.cjs +1 -1
  400. package/dist/index72.mjs +1 -1
  401. package/dist/index73.cjs +1 -1
  402. package/dist/index73.mjs +1 -1
  403. package/dist/index76.cjs +1 -1
  404. package/dist/index76.mjs +1 -1
  405. package/dist/index77.cjs +1 -1
  406. package/dist/index77.mjs +1 -1
  407. package/dist/index78.cjs +1 -1
  408. package/dist/index78.mjs +1 -1
  409. package/dist/index79.cjs +1 -1
  410. package/dist/index79.mjs +1 -1
  411. package/dist/index8.cjs +1 -1
  412. package/dist/index8.mjs +1 -1
  413. package/dist/index80.cjs +1 -1
  414. package/dist/index80.mjs +1 -1
  415. package/dist/index81.cjs +1 -1
  416. package/dist/index81.mjs +1 -1
  417. package/dist/index9.cjs +1 -1
  418. package/dist/index9.mjs +1 -1
  419. package/dist/index99.cjs +1 -1
  420. package/dist/index99.mjs +28 -34
  421. package/dist/index99.mjs.map +1 -1
  422. package/dist/react.css +1 -1
  423. package/dist/styles.css +8 -1
  424. package/dist/theme.css +7 -0
  425. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index146.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index146.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/index147.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const x="_avatar_zbymr_8",_="_image_zbymr_30",t="_initials_zbymr_38",n="_icon_zbymr_48",s="_xs_zbymr_64",i="_sm_zbymr_75",l="_md_zbymr_86",o="_lg_zbymr_97",a="_xl_zbymr_108",r="_xxl_zbymr_119",e="_profile_zbymr_130",c="_xxxl_zbymr_141",m="_xxxxl_zbymr_152",y="_xxxxxl_zbymr_163",b="_interactive_zbymr_178",z="_statusIndicator_zbymr_200",u="_online_zbymr_212",f="_offline_zbymr_216",d="_away_zbymr_220",g="_busy_zbymr_224",v={avatar:x,image:_,initials:t,icon:n,xs:s,sm:i,md:l,lg:o,xl:a,xxl:r,profile:e,xxxl:c,xxxxl:m,xxxxxl:y,interactive:b,statusIndicator:z,online:u,offline:f,away:d,busy:g};exports.avatar=x;exports.away=d;exports.busy=g;exports.default=v;exports.icon=n;exports.image=_;exports.initials=t;exports.interactive=b;exports.lg=o;exports.md=l;exports.offline=f;exports.online=u;exports.profile=e;exports.sm=i;exports.statusIndicator=z;exports.xl=a;exports.xs=s;exports.xxl=r;exports.xxxl=c;exports.xxxxl=m;exports.xxxxxl=y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),e=require("./index142.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=index147.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index147.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index147.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/index147.mjs CHANGED
@@ -1,46 +1,32 @@
1
- const _ = "_avatar_zbymr_8", x = "_image_zbymr_30", t = "_initials_zbymr_38", n = "_icon_zbymr_48", s = "_xs_zbymr_64", o = "_sm_zbymr_75", i = "_md_zbymr_86", r = "_lg_zbymr_97", a = "_xl_zbymr_108", l = "_xxl_zbymr_119", c = "_profile_zbymr_130", m = "_xxxl_zbymr_141", y = "_xxxxl_zbymr_152", b = "_xxxxxl_zbymr_163", e = "_interactive_zbymr_178", z = "_statusIndicator_zbymr_200", f = "_online_zbymr_212", d = "_offline_zbymr_216", u = "_away_zbymr_220", g = "_busy_zbymr_224", v = {
2
- avatar: _,
3
- image: x,
4
- initials: t,
5
- icon: n,
6
- xs: s,
7
- sm: o,
8
- md: i,
9
- lg: r,
10
- xl: a,
11
- xxl: l,
12
- profile: c,
13
- xxxl: m,
14
- xxxxl: y,
15
- xxxxxl: b,
16
- interactive: e,
17
- statusIndicator: z,
18
- online: f,
19
- offline: d,
20
- away: u,
21
- busy: g
22
- };
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import e from "./index142.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";
23
29
  export {
24
- _ as avatar,
25
- u as away,
26
- g as busy,
27
- v as default,
28
- n as icon,
29
- x as image,
30
- t as initials,
31
- e as interactive,
32
- r as lg,
33
- i as md,
34
- d as offline,
35
- f as online,
36
- c as profile,
37
- o as sm,
38
- z as statusIndicator,
39
- a as xl,
40
- s as xs,
41
- l as xxl,
42
- m as xxxl,
43
- y as xxxxl,
44
- b as xxxxxl
30
+ t as ChatTypingIndicator
45
31
  };
46
32
  //# sourceMappingURL=index147.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index147.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index147.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/index148.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_sidebar_1nnc7_8",t="_collapsed_1nnc7_20",n="_header_1nnc7_28",c="_content_1nnc7_45",i="_section_1nnc7_56",o="_sectionTitle_1nnc7_64",s="_sectionItems_1nnc7_75",_="_itemWrapper_1nnc7_85",a="_item_1nnc7_85",m="_itemActive_1nnc7_115",d="_itemDisabled_1nnc7_126",l="_itemNested_1nnc7_132",r="_itemIcon_1nnc7_136",p="_itemLabel_1nnc7_146",v="_itemBadge_1nnc7_154",b="_itemChevron_1nnc7_169",g="_chevronExpanded_1nnc7_175",h="_subItems_1nnc7_183",I="_footer_1nnc7_214",u="_divider_1nnc7_227",T="_collapseToggle_1nnc7_237",f={sidebar:e,collapsed:t,header:n,content:c,section:i,sectionTitle:o,sectionItems:s,itemWrapper:_,item:a,itemActive:m,itemDisabled:d,itemNested:l,itemIcon:r,itemLabel:p,itemBadge:v,itemChevron:b,chevronExpanded:g,subItems:h,footer:I,divider:u,collapseToggle:T,"variant-floating":"_variant-floating_1nnc7_267"};exports.chevronExpanded=g;exports.collapseToggle=T;exports.collapsed=t;exports.content=c;exports.default=f;exports.divider=u;exports.footer=I;exports.header=n;exports.item=a;exports.itemActive=m;exports.itemBadge=v;exports.itemChevron=b;exports.itemDisabled=d;exports.itemIcon=r;exports.itemLabel=p;exports.itemNested=l;exports.itemWrapper=_;exports.section=i;exports.sectionItems=s;exports.sectionTitle=o;exports.sidebar=e;exports.subItems=h;
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("./index142.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=index148.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index148.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index148.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/index148.mjs CHANGED
@@ -1,49 +1,94 @@
1
- const e = "_sidebar_1nnc7_8", n = "_collapsed_1nnc7_20", t = "_header_1nnc7_28", c = "_content_1nnc7_45", _ = "_section_1nnc7_56", o = "_sectionTitle_1nnc7_64", i = "_sectionItems_1nnc7_75", s = "_itemWrapper_1nnc7_85", a = "_item_1nnc7_85", m = "_itemActive_1nnc7_115", d = "_itemDisabled_1nnc7_126", l = "_itemNested_1nnc7_132", r = "_itemIcon_1nnc7_136", p = "_itemLabel_1nnc7_146", v = "_itemBadge_1nnc7_154", b = "_itemChevron_1nnc7_169", g = "_chevronExpanded_1nnc7_175", h = "_subItems_1nnc7_183", I = "_footer_1nnc7_214", f = "_divider_1nnc7_227", T = "_collapseToggle_1nnc7_237", u = {
2
- sidebar: e,
3
- collapsed: n,
4
- header: t,
5
- content: c,
6
- section: _,
7
- sectionTitle: o,
8
- sectionItems: i,
9
- itemWrapper: s,
10
- item: a,
11
- itemActive: m,
12
- itemDisabled: d,
13
- itemNested: l,
14
- itemIcon: r,
15
- itemLabel: p,
16
- itemBadge: v,
17
- itemChevron: b,
18
- chevronExpanded: g,
19
- subItems: h,
20
- footer: I,
21
- divider: f,
22
- collapseToggle: T,
23
- "variant-floating": "_variant-floating_1nnc7_267"
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 "./index142.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
+ );
24
89
  };
90
+ w.displayName = "ChatCodeBlock";
25
91
  export {
26
- g as chevronExpanded,
27
- T as collapseToggle,
28
- n as collapsed,
29
- c as content,
30
- u as default,
31
- f as divider,
32
- I as footer,
33
- t as header,
34
- a as item,
35
- m as itemActive,
36
- v as itemBadge,
37
- b as itemChevron,
38
- d as itemDisabled,
39
- r as itemIcon,
40
- p as itemLabel,
41
- l as itemNested,
42
- s as itemWrapper,
43
- _ as section,
44
- i as sectionItems,
45
- o as sectionTitle,
46
- e as sidebar,
47
- h as subItems
92
+ w as ChatCodeBlock
48
93
  };
49
94
  //# sourceMappingURL=index148.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index148.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index148.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/index149.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n="_link_1ch8i_9",i="_subtle_1ch8i_38",c="_brand_1ch8i_46",o="_sm_1ch8i_58",_="_md_1ch8i_63",t="_lg_1ch8i_68",e="_underline_1ch8i_77",r="_icon_1ch8i_92",l="_iconRight_1ch8i_124",s="_iconExternal_1ch8i_129",d="_iconArrow_1ch8i_134",h="_iconArrowLeft_1ch8i_139",u={link:n,default:"_default_1ch8i_30",subtle:i,brand:c,sm:o,md:_,lg:t,underline:e,icon:r,iconRight:l,iconExternal:s,iconArrow:d,iconArrowLeft:h};exports.brand=c;exports.default=u;exports.icon=r;exports.iconArrow=d;exports.iconArrowLeft=h;exports.iconExternal=s;exports.iconRight=l;exports.lg=t;exports.link=n;exports.md=_;exports.sm=o;exports.subtle=i;exports.underline=e;
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("./index148.cjs"),g=require("./index142.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=index149.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index149.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index149.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"}
package/dist/index149.mjs CHANGED
@@ -1,31 +1,56 @@
1
- const n = "_link_1ch8i_9", c = "_subtle_1ch8i_38", _ = "_brand_1ch8i_46", i = "_sm_1ch8i_58", o = "_md_1ch8i_63", t = "_lg_1ch8i_68", r = "_underline_1ch8i_77", s = "_icon_1ch8i_92", e = "_iconRight_1ch8i_124", l = "_iconExternal_1ch8i_129", h = "_iconArrow_1ch8i_134", d = "_iconArrowLeft_1ch8i_139", a = {
2
- link: n,
3
- default: "_default_1ch8i_30",
4
- subtle: c,
5
- brand: _,
6
- sm: i,
7
- md: o,
8
- lg: t,
9
- underline: r,
10
- icon: s,
11
- iconRight: e,
12
- iconExternal: l,
13
- iconArrow: h,
14
- iconArrowLeft: d
15
- };
1
+ import { jsx as e, Fragment as c } from "react/jsx-runtime";
2
+ import l from "react-markdown";
3
+ import d from "remark-gfm";
4
+ import { ChatCodeBlock as p } from "./index148.mjs";
5
+ import g from "./index142.mjs";
6
+ const f = ({
7
+ content: a,
8
+ className: i,
9
+ ...m
10
+ }) => /* @__PURE__ */ e(
11
+ "div",
12
+ {
13
+ className: [g.markdown, i].filter(Boolean).join(" "),
14
+ ...m,
15
+ children: /* @__PURE__ */ e(
16
+ l,
17
+ {
18
+ remarkPlugins: [d],
19
+ components: {
20
+ // Custom code block rendering
21
+ code({ className: r, children: o, ...t }) {
22
+ const n = /language-(\w+)/.exec(r || "");
23
+ if (!n)
24
+ return /* @__PURE__ */ e("code", { className: r, ...t, children: o });
25
+ const s = String(o).replace(/\n$/, "");
26
+ return /* @__PURE__ */ e(p, { code: s, language: n[1] });
27
+ },
28
+ // Custom pre rendering (remove wrapper for code blocks)
29
+ pre({ children: r }) {
30
+ return /* @__PURE__ */ e(c, { children: r });
31
+ },
32
+ // Custom link rendering (open in new tab)
33
+ a({ href: r, children: o, ...t }) {
34
+ const n = r?.startsWith("http");
35
+ return /* @__PURE__ */ e(
36
+ "a",
37
+ {
38
+ href: r,
39
+ target: n ? "_blank" : void 0,
40
+ rel: n ? "noopener noreferrer" : void 0,
41
+ ...t,
42
+ children: o
43
+ }
44
+ );
45
+ }
46
+ },
47
+ children: a
48
+ }
49
+ )
50
+ }
51
+ );
52
+ f.displayName = "ChatMarkdown";
16
53
  export {
17
- _ as brand,
18
- a as default,
19
- s as icon,
20
- h as iconArrow,
21
- d as iconArrowLeft,
22
- l as iconExternal,
23
- e as iconRight,
24
- t as lg,
25
- n as link,
26
- o as md,
27
- i as sm,
28
- c as subtle,
29
- r as underline
54
+ f as ChatMarkdown
30
55
  };
31
56
  //# sourceMappingURL=index149.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index149.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index149.mjs","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":";;;;;AAcO,MAAMA,IAA4C,CAAC;AAAA,EACxD,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW,CAACC,EAAO,UAAUH,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAC/D,GAAGC;AAAA,IAEJ,UAAA,gBAAAC;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,eAAe,CAACC,CAAS;AAAA,QACzB,YAAY;AAAA;AAAA,UAEV,KAAK,EAAE,WAAWC,GAAe,UAAAC,GAAU,GAAGC,KAAS;AACrD,kBAAMC,IAAQ,iBAAiB,KAAKH,KAAiB,EAAE;AAGvD,gBAFiB,CAACG;AAIhB,uCACG,QAAA,EAAK,WAAWH,GAAgB,GAAGE,GACjC,UAAAD,GACH;AAKJ,kBAAMG,IAAa,OAAOH,CAAQ,EAAE,QAAQ,OAAO,EAAE;AACrD,qCAAQI,GAAA,EAAc,MAAMD,GAAY,UAAUD,EAAM,CAAC,GAAG;AAAA,UAC9D;AAAA;AAAA,UAGA,IAAI,EAAE,UAAAF,KAAY;AAChB,0CAAU,UAAAA,GAAS;AAAA,UACrB;AAAA;AAAA,UAGA,EAAE,EAAE,MAAAK,GAAM,UAAAL,GAAU,GAAGC,KAAS;AAC9B,kBAAMK,IAAaD,GAAM,WAAW,MAAM;AAC1C,mBACE,gBAAAV;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAAU;AAAA,gBACA,QAAQC,IAAa,WAAW;AAAA,gBAChC,KAAKA,IAAa,wBAAwB;AAAA,gBACzC,GAAGL;AAAA,gBAEH,UAAAD;AAAA,cAAA;AAAA,YAAA;AAAA,UAGP;AAAA,QAAA;AAAA,QAGD,UAAAR;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAAA;AAKND,EAAa,cAAc;"}
package/dist/index15.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),u=require("react"),n=require("date-fns"),x=require("lucide-react"),a=require("./index112.cjs"),O=require("./index14.cjs"),R=["Su","Mo","Tu","We","Th","Fr","Sa"];function _(t,r){const c=t.length,d=(r%c+c)%c;return[...t.slice(d),...t.slice(0,d)]}const C=t=>{const{mode:r="single",min:c,max:d,disabled:m,weekStartsOn:h=0,showOutsideDays:j=!0,className:v,...k}=t,{selected:W,onSelect:F,...E}=k,[f,S]=u.useState(()=>r==="single"&&t.mode!=="range"&&t.mode!=="multiple"&&t.selected?n.startOfMonth(t.selected):r==="range"&&t.mode==="range"&&t.selected?.from?n.startOfMonth(t.selected.from):n.startOfMonth(new Date)),N=u.useMemo(()=>{const e=n.startOfMonth(f),s=n.endOfMonth(f),l=n.startOfWeek(e,{weekStartsOn:h}),o=n.endOfWeek(s,{weekStartsOn:h});return n.eachDayOfInterval({start:l,end:o})},[f,h]),B=u.useMemo(()=>_(R,h),[h]),g=u.useCallback(e=>c&&n.isBefore(e,z(c))||d&&n.isAfter(e,P(d))?!0:m?Array.isArray(m)?m.some(s=>n.isSameDay(s,e)):m(e):!1,[c,d,m]),y=u.useCallback(e=>r==="single"&&t.mode!=="range"&&t.mode!=="multiple"?t.selected?n.isSameDay(t.selected,e):!1:r==="multiple"&&t.mode==="multiple"?t.selected?.some(s=>n.isSameDay(s,e))??!1:!1,[r,t]),M=u.useCallback(e=>{if(r!=="range"||t.mode!=="range"||!t.selected)return null;const{from:s,to:l}=t.selected;return s?l?n.isSameDay(e,s)&&n.isSameDay(e,l)||n.isSameDay(e,s)?"start":n.isSameDay(e,l)?"end":n.isAfter(e,s)&&n.isBefore(e,l)?"middle":null:n.isSameDay(e,s)?"start":null:null},[r,t]),w=u.useCallback(e=>{if(!g(e)){if(r==="single"&&t.mode!=="range"&&t.mode!=="multiple"){const s=t.onSelect;s?.(e)}else if(r==="range"&&t.mode==="range"){const s=t.onSelect,l=t.selected;!l?.from||l.from&&l.to?s?.({from:e,to:void 0}):n.isBefore(e,l.from)?s?.({from:e,to:l.from}):s?.({from:l.from,to:e})}else if(r==="multiple"&&t.mode==="multiple"){const s=t.onSelect,l=t.selected??[],o=l.findIndex(D=>n.isSameDay(D,e));o>=0?s?.(l.filter((D,L)=>L!==o)):s?.([...l,e])}}},[r,t,g]),A=()=>S(e=>n.subMonths(e,1)),I=()=>S(e=>n.addMonths(e,1)),T=e=>{const s=[a.default.day];if(!n.isSameMonth(e,f)&&s.push(a.default.outside),n.isToday(e)&&s.push(a.default.today),g(e)&&s.push(a.default.disabled),r==="range"){const o=M(e);o==="start"&&(s.push(a.default.rangeStart),t.mode==="range"&&t.selected?.from&&t.selected?.to&&n.isSameDay(t.selected.from,t.selected.to)&&s.push(a.default.rangeEnd)),o==="middle"&&s.push(a.default.rangeMiddle),o==="end"&&s.push(a.default.rangeEnd)}else y(e)&&s.push(a.default.selected);return s.join(" ")},q=[a.default.calendar,v].filter(Boolean).join(" "),b=u.useId();return i.jsxs("div",{className:q,...E,children:[i.jsxs("div",{className:a.default.header,children:[i.jsx(O.Button,{variant:"ghost",iconOnly:!0,size:"sm",icon:i.jsx(x.ChevronLeft,{size:16}),onClick:A,"aria-label":"Previous month"}),i.jsx("span",{id:b,className:a.default.monthLabel,children:n.format(f,"MMMM yyyy")}),i.jsx(O.Button,{variant:"ghost",iconOnly:!0,size:"sm",icon:i.jsx(x.ChevronRight,{size:16}),onClick:I,"aria-label":"Next month"})]}),i.jsxs("div",{className:a.default.grid,role:"grid","aria-labelledby":b,children:[B.map(e=>i.jsx("div",{className:a.default.weekday,role:"columnheader","aria-label":e,children:e},e)),N.map(e=>!n.isSameMonth(e,f)&&!j?i.jsx("div",{},e.toISOString()):i.jsx("button",{type:"button",className:T(e),onClick:()=>w(e),disabled:g(e),tabIndex:n.isToday(e)?0:-1,"aria-label":n.format(e,"EEEE, MMMM d, yyyy"),"aria-selected":y(e)||M(e)!==null,children:n.format(e,"d")},e.toISOString()))]})]})};C.displayName="Calendar";function z(t){const r=new Date(t);return r.setHours(0,0,0,0),r}function P(t){const r=new Date(t);return r.setHours(23,59,59,999),r}exports.Calendar=C;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),u=require("react"),n=require("date-fns"),x=require("lucide-react"),a=require("./index179.cjs"),O=require("./index14.cjs"),R=["Su","Mo","Tu","We","Th","Fr","Sa"];function _(t,r){const c=t.length,d=(r%c+c)%c;return[...t.slice(d),...t.slice(0,d)]}const C=t=>{const{mode:r="single",min:c,max:d,disabled:m,weekStartsOn:h=0,showOutsideDays:j=!0,className:v,...k}=t,{selected:W,onSelect:F,...E}=k,[f,S]=u.useState(()=>r==="single"&&t.mode!=="range"&&t.mode!=="multiple"&&t.selected?n.startOfMonth(t.selected):r==="range"&&t.mode==="range"&&t.selected?.from?n.startOfMonth(t.selected.from):n.startOfMonth(new Date)),N=u.useMemo(()=>{const e=n.startOfMonth(f),s=n.endOfMonth(f),l=n.startOfWeek(e,{weekStartsOn:h}),o=n.endOfWeek(s,{weekStartsOn:h});return n.eachDayOfInterval({start:l,end:o})},[f,h]),B=u.useMemo(()=>_(R,h),[h]),g=u.useCallback(e=>c&&n.isBefore(e,z(c))||d&&n.isAfter(e,P(d))?!0:m?Array.isArray(m)?m.some(s=>n.isSameDay(s,e)):m(e):!1,[c,d,m]),y=u.useCallback(e=>r==="single"&&t.mode!=="range"&&t.mode!=="multiple"?t.selected?n.isSameDay(t.selected,e):!1:r==="multiple"&&t.mode==="multiple"?t.selected?.some(s=>n.isSameDay(s,e))??!1:!1,[r,t]),M=u.useCallback(e=>{if(r!=="range"||t.mode!=="range"||!t.selected)return null;const{from:s,to:l}=t.selected;return s?l?n.isSameDay(e,s)&&n.isSameDay(e,l)||n.isSameDay(e,s)?"start":n.isSameDay(e,l)?"end":n.isAfter(e,s)&&n.isBefore(e,l)?"middle":null:n.isSameDay(e,s)?"start":null:null},[r,t]),w=u.useCallback(e=>{if(!g(e)){if(r==="single"&&t.mode!=="range"&&t.mode!=="multiple"){const s=t.onSelect;s?.(e)}else if(r==="range"&&t.mode==="range"){const s=t.onSelect,l=t.selected;!l?.from||l.from&&l.to?s?.({from:e,to:void 0}):n.isBefore(e,l.from)?s?.({from:e,to:l.from}):s?.({from:l.from,to:e})}else if(r==="multiple"&&t.mode==="multiple"){const s=t.onSelect,l=t.selected??[],o=l.findIndex(D=>n.isSameDay(D,e));o>=0?s?.(l.filter((D,L)=>L!==o)):s?.([...l,e])}}},[r,t,g]),A=()=>S(e=>n.subMonths(e,1)),I=()=>S(e=>n.addMonths(e,1)),T=e=>{const s=[a.default.day];if(!n.isSameMonth(e,f)&&s.push(a.default.outside),n.isToday(e)&&s.push(a.default.today),g(e)&&s.push(a.default.disabled),r==="range"){const o=M(e);o==="start"&&(s.push(a.default.rangeStart),t.mode==="range"&&t.selected?.from&&t.selected?.to&&n.isSameDay(t.selected.from,t.selected.to)&&s.push(a.default.rangeEnd)),o==="middle"&&s.push(a.default.rangeMiddle),o==="end"&&s.push(a.default.rangeEnd)}else y(e)&&s.push(a.default.selected);return s.join(" ")},q=[a.default.calendar,v].filter(Boolean).join(" "),b=u.useId();return i.jsxs("div",{className:q,...E,children:[i.jsxs("div",{className:a.default.header,children:[i.jsx(O.Button,{variant:"ghost",iconOnly:!0,size:"sm",icon:i.jsx(x.ChevronLeft,{size:16}),onClick:A,"aria-label":"Previous month"}),i.jsx("span",{id:b,className:a.default.monthLabel,children:n.format(f,"MMMM yyyy")}),i.jsx(O.Button,{variant:"ghost",iconOnly:!0,size:"sm",icon:i.jsx(x.ChevronRight,{size:16}),onClick:I,"aria-label":"Next month"})]}),i.jsxs("div",{className:a.default.grid,role:"grid","aria-labelledby":b,children:[B.map(e=>i.jsx("div",{className:a.default.weekday,role:"columnheader","aria-label":e,children:e},e)),N.map(e=>!n.isSameMonth(e,f)&&!j?i.jsx("div",{},e.toISOString()):i.jsx("button",{type:"button",className:T(e),onClick:()=>w(e),disabled:g(e),tabIndex:n.isToday(e)?0:-1,"aria-label":n.format(e,"EEEE, MMMM d, yyyy"),"aria-selected":y(e)||M(e)!==null,children:n.format(e,"d")},e.toISOString()))]})]})};C.displayName="Calendar";function z(t){const r=new Date(t);return r.setHours(0,0,0,0),r}function P(t){const r=new Date(t);return r.setHours(23,59,59,999),r}exports.Calendar=C;
2
2
  //# sourceMappingURL=index15.cjs.map
package/dist/index15.mjs CHANGED
@@ -2,7 +2,7 @@ import { jsxs as M, jsx as c } from "react/jsx-runtime";
2
2
  import { useState as K, useMemo as N, useCallback as g, useId as Y } from "react";
3
3
  import { startOfMonth as S, endOfMonth as q, startOfWeek as G, endOfWeek as J, eachDayOfInterval as Q, isBefore as y, isAfter as k, isSameDay as i, format as b, isSameMonth as x, isToday as w, subMonths as U, addMonths as V } from "date-fns";
4
4
  import { ChevronLeft as X, ChevronRight as Z } from "lucide-react";
5
- import o from "./index112.mjs";
5
+ import o from "./index179.mjs";
6
6
  import { Button as I } from "./index14.mjs";
7
7
  const $ = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
8
8
  function p(t, r) {
package/dist/index150.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s="_breadcrumb_12bqk_8",e="_item_12bqk_20",_="_link_12bqk_26",o="_current_12bqk_49",c="_separator_12bqk_59",n="_chevron_12bqk_69",t="_slash_12bqk_86",r="_icon_12bqk_94",l="_homeIcon_12bqk_112",i="_ellipsis_12bqk_120",b="_sm_12bqk_135",m="_md_12bqk_158",a="_lg_12bqk_175",k={breadcrumb:s,item:e,link:_,current:o,separator:c,chevron:n,slash:t,icon:r,homeIcon:l,ellipsis:i,sm:b,md:m,lg:a};exports.breadcrumb=s;exports.chevron=n;exports.current=o;exports.default=k;exports.ellipsis=i;exports.homeIcon=l;exports.icon=r;exports.item=e;exports.lg=a;exports.link=_;exports.md=m;exports.separator=c;exports.slash=t;exports.sm=b;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),I=require("lucide-react"),a=require("./index142.cjs"),w=require("./index185.cjs"),u=({src:i,alt:t="Image attachment",thumbnail:g,onClick:n,enableLightbox:s=!0,className:o,...l})=>{const[h,c]=d.useState(!1),[f,v]=d.useState(!1),m=()=>{n?n():s&&c(!0)},x=r=>{(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),m())},j=()=>{v(!0)};return f?e.jsxs("div",{className:[a.default.imagePreview,a.default.attachmentPreview,o].filter(Boolean).join(" "),...l,children:[e.jsx("div",{className:a.default.attachmentPreviewIcon,children:e.jsx(I.ImageOff,{size:20})}),e.jsx("span",{className:a.default.attachmentPreviewName,children:"Image failed to load"})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:[a.default.imagePreview,o].filter(Boolean).join(" "),onClick:m,onKeyDown:x,role:"button",tabIndex:0,"aria-label":t,...l,children:e.jsx("img",{src:g||i,alt:t,className:a.default.imagePreviewImg,onError:j,loading:"lazy"})}),s&&e.jsx(w.ChatLightbox,{src:i,alt:t,isOpen:h,onClose:()=>c(!1)})]})};u.displayName="ChatImagePreview";exports.ChatImagePreview=u;
2
2
  //# sourceMappingURL=index150.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index150.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index150.cjs","sources":["../src/components/Chat/components/ChatImagePreview.tsx"],"sourcesContent":["/**\n * ChatImagePreview Component\n *\n * Displays image attachments with thumbnail and lightbox support.\n */\n\nimport React, { useState } from \"react\";\nimport { ImageOff } from \"lucide-react\";\nimport type { ChatImagePreviewProps } from \"../Chat.types\";\nimport styles from \"../Chat.module.css\";\nimport { ChatLightbox } from \"./ChatLightbox\";\n\nexport const ChatImagePreview: React.FC<ChatImagePreviewProps> = ({\n src,\n alt = \"Image attachment\",\n thumbnail,\n onClick,\n enableLightbox = true,\n className,\n ...rest\n}) => {\n const [isLightboxOpen, setIsLightboxOpen] = useState(false);\n const [imageError, setImageError] = useState(false);\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else if (enableLightbox) {\n setIsLightboxOpen(true);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n };\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n if (imageError) {\n return (\n <div\n className={[styles.imagePreview, styles.attachmentPreview, className]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n <div className={styles.attachmentPreviewIcon}>\n <ImageOff size={20} />\n </div>\n <span className={styles.attachmentPreviewName}>\n Image failed to load\n </span>\n </div>\n );\n }\n\n return (\n <>\n <div\n className={[styles.imagePreview, className].filter(Boolean).join(\" \")}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={alt}\n {...rest}\n >\n <img\n src={thumbnail || src}\n alt={alt}\n className={styles.imagePreviewImg}\n onError={handleImageError}\n loading=\"lazy\"\n />\n </div>\n\n {enableLightbox && (\n <ChatLightbox\n src={src}\n alt={alt}\n isOpen={isLightboxOpen}\n onClose={() => setIsLightboxOpen(false)}\n />\n )}\n </>\n );\n};\n\nChatImagePreview.displayName = \"ChatImagePreview\";\n"],"names":["ChatImagePreview","src","alt","thumbnail","onClick","enableLightbox","className","rest","isLightboxOpen","setIsLightboxOpen","useState","imageError","setImageError","handleClick","handleKeyDown","e","handleImageError","jsxs","styles","jsx","ImageOff","Fragment","ChatLightbox"],"mappings":"0NAYaA,EAAoD,CAAC,CAChE,IAAAC,EACA,IAAAC,EAAM,mBACN,UAAAC,EACA,QAAAC,EACA,eAAAC,EAAiB,GACjB,UAAAC,EACA,GAAGC,CACL,IAAM,CACJ,KAAM,CAACC,EAAgBC,CAAiB,EAAIC,EAAAA,SAAS,EAAK,EACpD,CAACC,EAAYC,CAAa,EAAIF,EAAAA,SAAS,EAAK,EAE5CG,EAAc,IAAM,CACpBT,EACFA,EAAA,EACSC,GACTI,EAAkB,EAAI,CAE1B,EAEMK,EAAiBC,GAA2B,EAC5CA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,OACjCA,EAAE,eAAA,EACFF,EAAA,EAEJ,EAEMG,EAAmB,IAAM,CAC7BJ,EAAc,EAAI,CACpB,EAEA,OAAID,EAEAM,EAAAA,KAAC,MAAA,CACC,UAAW,CAACC,EAAAA,QAAO,aAAcA,EAAAA,QAAO,kBAAmBZ,CAAS,EACjE,OAAO,OAAO,EACd,KAAK,GAAG,EACV,GAAGC,EAEJ,SAAA,CAAAY,EAAAA,IAAC,MAAA,CAAI,UAAWD,EAAAA,QAAO,sBACrB,eAACE,EAAAA,SAAA,CAAS,KAAM,GAAI,CAAA,CACtB,EACAD,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,sBAAuB,SAAA,sBAAA,CAE/C,CAAA,CAAA,CAAA,EAMJD,EAAAA,KAAAI,WAAA,CACE,SAAA,CAAAF,EAAAA,IAAC,MAAA,CACC,UAAW,CAACD,UAAO,aAAcZ,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EACpE,QAASO,EACT,UAAWC,EACX,KAAK,SACL,SAAU,EACV,aAAYZ,EACX,GAAGK,EAEJ,SAAAY,EAAAA,IAAC,MAAA,CACC,IAAKhB,GAAaF,EAClB,IAAAC,EACA,UAAWgB,EAAAA,QAAO,gBAClB,QAASF,EACT,QAAQ,MAAA,CAAA,CACV,CAAA,EAGDX,GACCc,EAAAA,IAACG,EAAAA,aAAA,CACC,IAAArB,EACA,IAAAC,EACA,OAAQM,EACR,QAAS,IAAMC,EAAkB,EAAK,CAAA,CAAA,CACxC,EAEJ,CAEJ,EAEAT,EAAiB,YAAc"}
package/dist/index150.mjs CHANGED
@@ -1,32 +1,70 @@
1
- const _ = "_breadcrumb_12bqk_8", s = "_item_12bqk_20", o = "_link_12bqk_26", c = "_current_12bqk_49", n = "_separator_12bqk_59", t = "_chevron_12bqk_69", e = "_slash_12bqk_86", r = "_icon_12bqk_94", b = "_homeIcon_12bqk_112", l = "_ellipsis_12bqk_120", k = "_sm_12bqk_135", i = "_md_12bqk_158", m = "_lg_12bqk_175", a = {
2
- breadcrumb: _,
3
- item: s,
4
- link: o,
5
- current: c,
6
- separator: n,
7
- chevron: t,
8
- slash: e,
9
- icon: r,
10
- homeIcon: b,
11
- ellipsis: l,
12
- sm: k,
13
- md: i,
14
- lg: m
1
+ import { jsxs as f, jsx as e, Fragment as u } from "react/jsx-runtime";
2
+ import { useState as g } from "react";
3
+ import { ImageOff as P } from "lucide-react";
4
+ import a from "./index142.mjs";
5
+ import { ChatLightbox as y } from "./index185.mjs";
6
+ const x = ({
7
+ src: i,
8
+ alt: r = "Image attachment",
9
+ thumbnail: h,
10
+ onClick: o,
11
+ enableLightbox: n = !0,
12
+ className: m,
13
+ ...s
14
+ }) => {
15
+ const [d, l] = g(!1), [p, v] = g(!1), c = () => {
16
+ o ? o() : n && l(!0);
17
+ }, I = (t) => {
18
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), c());
19
+ }, w = () => {
20
+ v(!0);
21
+ };
22
+ return p ? /* @__PURE__ */ f(
23
+ "div",
24
+ {
25
+ className: [a.imagePreview, a.attachmentPreview, m].filter(Boolean).join(" "),
26
+ ...s,
27
+ children: [
28
+ /* @__PURE__ */ e("div", { className: a.attachmentPreviewIcon, children: /* @__PURE__ */ e(P, { size: 20 }) }),
29
+ /* @__PURE__ */ e("span", { className: a.attachmentPreviewName, children: "Image failed to load" })
30
+ ]
31
+ }
32
+ ) : /* @__PURE__ */ f(u, { children: [
33
+ /* @__PURE__ */ e(
34
+ "div",
35
+ {
36
+ className: [a.imagePreview, m].filter(Boolean).join(" "),
37
+ onClick: c,
38
+ onKeyDown: I,
39
+ role: "button",
40
+ tabIndex: 0,
41
+ "aria-label": r,
42
+ ...s,
43
+ children: /* @__PURE__ */ e(
44
+ "img",
45
+ {
46
+ src: h || i,
47
+ alt: r,
48
+ className: a.imagePreviewImg,
49
+ onError: w,
50
+ loading: "lazy"
51
+ }
52
+ )
53
+ }
54
+ ),
55
+ n && /* @__PURE__ */ e(
56
+ y,
57
+ {
58
+ src: i,
59
+ alt: r,
60
+ isOpen: d,
61
+ onClose: () => l(!1)
62
+ }
63
+ )
64
+ ] });
15
65
  };
66
+ x.displayName = "ChatImagePreview";
16
67
  export {
17
- _ as breadcrumb,
18
- t as chevron,
19
- c as current,
20
- a as default,
21
- l as ellipsis,
22
- b as homeIcon,
23
- r as icon,
24
- s as item,
25
- m as lg,
26
- o as link,
27
- i as md,
28
- n as separator,
29
- e as slash,
30
- k as sm
68
+ x as ChatImagePreview
31
69
  };
32
70
  //# sourceMappingURL=index150.mjs.map