@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":"index150.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index150.mjs","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":";;;;;AAYO,MAAMA,IAAoD,CAAC;AAAA,EAChE,KAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,WAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAAgBC,CAAiB,IAAIC,EAAS,EAAK,GACpD,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAK,GAE5CG,IAAc,MAAM;AACxB,IAAIT,IACFA,EAAA,IACSC,KACTI,EAAkB,EAAI;AAAA,EAE1B,GAEMK,IAAgB,CAACC,MAA2B;AAChD,KAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACFF,EAAA;AAAA,EAEJ,GAEMG,IAAmB,MAAM;AAC7B,IAAAJ,EAAc,EAAI;AAAA,EACpB;AAEA,SAAID,IAEA,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,CAACC,EAAO,cAAcA,EAAO,mBAAmBZ,CAAS,EACjE,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGC;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAY,EAAC,OAAA,EAAI,WAAWD,EAAO,uBACrB,4BAACE,GAAA,EAAS,MAAM,IAAI,EAAA,CACtB;AAAA,QACA,gBAAAD,EAAC,QAAA,EAAK,WAAWD,EAAO,uBAAuB,UAAA,uBAAA,CAE/C;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAMJ,gBAAAD,EAAAI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,CAACD,EAAO,cAAcZ,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,QACpE,SAASO;AAAA,QACT,WAAWC;AAAA,QACX,MAAK;AAAA,QACL,UAAU;AAAA,QACV,cAAYZ;AAAA,QACX,GAAGK;AAAA,QAEJ,UAAA,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKhB,KAAaF;AAAA,YAClB,KAAAC;AAAA,YACA,WAAWgB,EAAO;AAAA,YAClB,SAASF;AAAA,YACT,SAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACV;AAAA,IAAA;AAAA,IAGDX,KACC,gBAAAc;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,KAAArB;AAAA,QACA,KAAAC;AAAA,QACA,QAAQM;AAAA,QACR,SAAS,MAAMC,EAAkB,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACxC,GAEJ;AAEJ;AAEAT,EAAiB,cAAc;"}
package/dist/index151.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_trigger_anhvb_2",t="_triggerName_anhvb_25",o="_chevron_anhvb_33",r="_chevronOpen_anhvb_39",n="_content_anhvb_44",a="_activeWorkspace_anhvb_52",_="_orgName_anhvb_62",c="_orgMeta_anhvb_67",g="_actionButtons_anhvb_73",s="_dividerWrapper_anhvb_79",i="_sectionLabel_anhvb_84",v="_orgList_anhvb_93",m="_orgItem_anhvb_101",h="_orgItemName_anhvb_115",b="_orgItemRole_anhvb_120",p={trigger:e,triggerName:t,chevron:o,chevronOpen:r,content:n,activeWorkspace:a,orgName:_,orgMeta:c,actionButtons:g,dividerWrapper:s,sectionLabel:i,orgList:v,orgItem:m,orgItemName:h,orgItemRole:b};exports.actionButtons=g;exports.activeWorkspace=a;exports.chevron=o;exports.chevronOpen=r;exports.content=n;exports.default=p;exports.dividerWrapper=s;exports.orgItem=m;exports.orgItemName=h;exports.orgItemRole=b;exports.orgList=v;exports.orgMeta=c;exports.orgName=_;exports.sectionLabel=i;exports.trigger=e;exports.triggerName=t;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),P=require("lucide-react"),m=require("./index184.cjs"),l=require("./index142.cjs"),p=({src:k,duration:T,title:h,className:b,...x})=>{const[o,f]=r.useState(!1),[s,d]=r.useState(0),[a,g]=r.useState(T||0),n=r.useRef(null),j=r.useCallback(()=>{const e=n.current;e&&!isNaN(e.duration)&&isFinite(e.duration)&&g(e.duration)},[]),v=r.useCallback(()=>{const e=n.current;e&&d(e.currentTime)},[]),C=r.useCallback(()=>{f(!1),d(0)},[]),w=r.useCallback(()=>{const e=n.current;e&&(o?e.pause():e.play().catch(()=>{f(!1)}),f(!o))},[o]),N=r.useCallback(e=>{const c=n.current;if(!c||!a)return;const u=e.currentTarget.getBoundingClientRect(),y=(e.clientX-u.left)/u.width*a;c.currentTime=y,d(y)},[a]),A=r.useCallback(e=>{const c=n.current;if(!c||!a)return;const u=5;let i=s;switch(e.key){case"ArrowRight":case"ArrowUp":e.preventDefault(),i=Math.min(s+u,a);break;case"ArrowLeft":case"ArrowDown":e.preventDefault(),i=Math.max(s-u,0);break;case"Home":e.preventDefault(),i=0;break;case"End":e.preventDefault(),i=a;break;default:return}c.currentTime=i,d(i)},[s,a]),D=a>0?s/a*100:0;return r.useEffect(()=>()=>{const e=n.current;e&&e.pause()},[]),t.jsxs("div",{className:[l.default.audioPlayer,b].filter(Boolean).join(" "),...x,children:[t.jsx("audio",{ref:n,src:k,onLoadedMetadata:j,onTimeUpdate:v,onEnded:C,preload:"metadata"}),t.jsx("button",{className:l.default.audioPlayerButton,onClick:w,"aria-label":o?"Pause":"Play",children:o?t.jsx(P.Pause,{size:16}):t.jsx(P.Play,{size:16})}),t.jsxs("div",{className:l.default.audioPlayerProgress,children:[h&&t.jsx("span",{className:l.default.attachmentPreviewName,children:h}),t.jsx("div",{className:l.default.audioPlayerTrack,onClick:N,onKeyDown:A,role:"slider","aria-label":"Audio progress","aria-valuemin":0,"aria-valuemax":a,"aria-valuenow":s,"aria-valuetext":`${m.formatTime(s)} of ${m.formatTime(a)}`,tabIndex:0,children:t.jsx("div",{className:l.default.audioPlayerFill,style:{width:`${D}%`}})}),t.jsxs("div",{className:l.default.audioPlayerTime,children:[t.jsx("span",{children:m.formatTime(s)}),t.jsx("span",{children:m.formatTime(a)})]})]})]})};p.displayName="ChatAudioPlayer";exports.ChatAudioPlayer=p;
2
2
  //# sourceMappingURL=index151.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index151.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index151.cjs","sources":["../src/components/Chat/components/ChatAudioPlayer.tsx"],"sourcesContent":["/**\n * ChatAudioPlayer Component\n *\n * Audio playback controls with progress tracking and keyboard navigation.\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { Play, Pause } from \"lucide-react\";\nimport type { ChatAudioPlayerProps } from \"../Chat.types\";\nimport { formatTime } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatAudioPlayer: React.FC<ChatAudioPlayerProps> = ({\n src,\n duration: initialDuration,\n title,\n className,\n ...rest\n}) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(initialDuration || 0);\n const audioRef = useRef<HTMLAudioElement>(null);\n\n // Update duration when audio metadata loads\n const handleLoadedMetadata = useCallback(() => {\n const audio = audioRef.current;\n if (audio && !isNaN(audio.duration) && isFinite(audio.duration)) {\n setDuration(audio.duration);\n }\n }, []);\n\n // Update current time during playback\n const handleTimeUpdate = useCallback(() => {\n const audio = audioRef.current;\n if (audio) {\n setCurrentTime(audio.currentTime);\n }\n }, []);\n\n // Handle playback end\n const handleEnded = useCallback(() => {\n setIsPlaying(false);\n setCurrentTime(0);\n }, []);\n\n // Toggle play/pause\n const togglePlayback = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n if (isPlaying) {\n audio.pause();\n } else {\n audio.play().catch(() => {\n // Handle autoplay restrictions\n setIsPlaying(false);\n });\n }\n setIsPlaying(!isPlaying);\n }, [isPlaying]);\n\n // Handle progress bar click\n const handleProgressClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const audio = audioRef.current;\n if (!audio || !duration) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const percentage = clickX / rect.width;\n const newTime = percentage * duration;\n\n audio.currentTime = newTime;\n setCurrentTime(newTime);\n },\n [duration],\n );\n\n // Handle keyboard navigation on slider\n const handleSliderKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const audio = audioRef.current;\n if (!audio || !duration) return;\n\n const STEP = 5; // 5 seconds\n let newTime = currentTime;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n e.preventDefault();\n newTime = Math.min(currentTime + STEP, duration);\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n e.preventDefault();\n newTime = Math.max(currentTime - STEP, 0);\n break;\n case \"Home\":\n e.preventDefault();\n newTime = 0;\n break;\n case \"End\":\n e.preventDefault();\n newTime = duration;\n break;\n default:\n return;\n }\n\n audio.currentTime = newTime;\n setCurrentTime(newTime);\n },\n [currentTime, duration],\n );\n\n // Calculate progress percentage\n const progress = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n const audio = audioRef.current;\n if (audio) {\n audio.pause();\n }\n };\n }, []);\n\n return (\n <div\n className={[styles.audioPlayer, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <audio\n ref={audioRef}\n src={src}\n onLoadedMetadata={handleLoadedMetadata}\n onTimeUpdate={handleTimeUpdate}\n onEnded={handleEnded}\n preload=\"metadata\"\n />\n\n <button\n className={styles.audioPlayerButton}\n onClick={togglePlayback}\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? <Pause size={16} /> : <Play size={16} />}\n </button>\n\n <div className={styles.audioPlayerProgress}>\n {title && <span className={styles.attachmentPreviewName}>{title}</span>}\n <div\n className={styles.audioPlayerTrack}\n onClick={handleProgressClick}\n onKeyDown={handleSliderKeyDown}\n role=\"slider\"\n aria-label=\"Audio progress\"\n aria-valuemin={0}\n aria-valuemax={duration}\n aria-valuenow={currentTime}\n aria-valuetext={`${formatTime(currentTime)} of ${formatTime(duration)}`}\n tabIndex={0}\n >\n <div\n className={styles.audioPlayerFill}\n style={{ width: `${progress}%` }}\n />\n </div>\n <div className={styles.audioPlayerTime}>\n <span>{formatTime(currentTime)}</span>\n <span>{formatTime(duration)}</span>\n </div>\n </div>\n </div>\n );\n};\n\nChatAudioPlayer.displayName = \"ChatAudioPlayer\";\n"],"names":["ChatAudioPlayer","src","initialDuration","title","className","rest","isPlaying","setIsPlaying","useState","currentTime","setCurrentTime","duration","setDuration","audioRef","useRef","handleLoadedMetadata","useCallback","audio","handleTimeUpdate","handleEnded","togglePlayback","handleProgressClick","rect","newTime","handleSliderKeyDown","STEP","progress","useEffect","jsxs","styles","jsx","Pause","Play","formatTime"],"mappings":"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"}
package/dist/index151.mjs CHANGED
@@ -1,36 +1,128 @@
1
- const e = "_trigger_anhvb_2", t = "_triggerName_anhvb_25", o = "_chevron_anhvb_33", n = "_chevronOpen_anhvb_39", r = "_content_anhvb_44", _ = "_activeWorkspace_anhvb_52", a = "_orgName_anhvb_62", c = "_orgMeta_anhvb_67", s = "_actionButtons_anhvb_73", g = "_dividerWrapper_anhvb_79", v = "_sectionLabel_anhvb_84", i = "_orgList_anhvb_93", h = "_orgItem_anhvb_101", b = "_orgItemName_anhvb_115", m = "_orgItemRole_anhvb_120", p = {
2
- trigger: e,
3
- triggerName: t,
4
- chevron: o,
5
- chevronOpen: n,
6
- content: r,
7
- activeWorkspace: _,
8
- orgName: a,
9
- orgMeta: c,
10
- actionButtons: s,
11
- dividerWrapper: g,
12
- sectionLabel: v,
13
- orgList: i,
14
- orgItem: h,
15
- orgItemName: b,
16
- orgItemRole: m
1
+ import { jsxs as p, jsx as r } from "react/jsx-runtime";
2
+ import { useState as h, useRef as M, useCallback as s, useEffect as R } from "react";
3
+ import { Pause as j, Play as B } from "lucide-react";
4
+ import { formatTime as m } from "./index184.mjs";
5
+ import o from "./index142.mjs";
6
+ const L = ({
7
+ src: g,
8
+ duration: v,
9
+ title: y,
10
+ className: w,
11
+ ...T
12
+ }) => {
13
+ const [c, f] = h(!1), [t, u] = h(0), [a, k] = h(v || 0), n = M(null), N = s(() => {
14
+ const e = n.current;
15
+ e && !isNaN(e.duration) && isFinite(e.duration) && k(e.duration);
16
+ }, []), b = s(() => {
17
+ const e = n.current;
18
+ e && u(e.currentTime);
19
+ }, []), C = s(() => {
20
+ f(!1), u(0);
21
+ }, []), D = s(() => {
22
+ const e = n.current;
23
+ e && (c ? e.pause() : e.play().catch(() => {
24
+ f(!1);
25
+ }), f(!c));
26
+ }, [c]), x = s(
27
+ (e) => {
28
+ const l = n.current;
29
+ if (!l || !a) return;
30
+ const d = e.currentTarget.getBoundingClientRect(), P = (e.clientX - d.left) / d.width * a;
31
+ l.currentTime = P, u(P);
32
+ },
33
+ [a]
34
+ ), A = s(
35
+ (e) => {
36
+ const l = n.current;
37
+ if (!l || !a) return;
38
+ const d = 5;
39
+ let i = t;
40
+ switch (e.key) {
41
+ case "ArrowRight":
42
+ case "ArrowUp":
43
+ e.preventDefault(), i = Math.min(t + d, a);
44
+ break;
45
+ case "ArrowLeft":
46
+ case "ArrowDown":
47
+ e.preventDefault(), i = Math.max(t - d, 0);
48
+ break;
49
+ case "Home":
50
+ e.preventDefault(), i = 0;
51
+ break;
52
+ case "End":
53
+ e.preventDefault(), i = a;
54
+ break;
55
+ default:
56
+ return;
57
+ }
58
+ l.currentTime = i, u(i);
59
+ },
60
+ [t, a]
61
+ ), E = a > 0 ? t / a * 100 : 0;
62
+ return R(() => () => {
63
+ const e = n.current;
64
+ e && e.pause();
65
+ }, []), /* @__PURE__ */ p(
66
+ "div",
67
+ {
68
+ className: [o.audioPlayer, w].filter(Boolean).join(" "),
69
+ ...T,
70
+ children: [
71
+ /* @__PURE__ */ r(
72
+ "audio",
73
+ {
74
+ ref: n,
75
+ src: g,
76
+ onLoadedMetadata: N,
77
+ onTimeUpdate: b,
78
+ onEnded: C,
79
+ preload: "metadata"
80
+ }
81
+ ),
82
+ /* @__PURE__ */ r(
83
+ "button",
84
+ {
85
+ className: o.audioPlayerButton,
86
+ onClick: D,
87
+ "aria-label": c ? "Pause" : "Play",
88
+ children: c ? /* @__PURE__ */ r(j, { size: 16 }) : /* @__PURE__ */ r(B, { size: 16 })
89
+ }
90
+ ),
91
+ /* @__PURE__ */ p("div", { className: o.audioPlayerProgress, children: [
92
+ y && /* @__PURE__ */ r("span", { className: o.attachmentPreviewName, children: y }),
93
+ /* @__PURE__ */ r(
94
+ "div",
95
+ {
96
+ className: o.audioPlayerTrack,
97
+ onClick: x,
98
+ onKeyDown: A,
99
+ role: "slider",
100
+ "aria-label": "Audio progress",
101
+ "aria-valuemin": 0,
102
+ "aria-valuemax": a,
103
+ "aria-valuenow": t,
104
+ "aria-valuetext": `${m(t)} of ${m(a)}`,
105
+ tabIndex: 0,
106
+ children: /* @__PURE__ */ r(
107
+ "div",
108
+ {
109
+ className: o.audioPlayerFill,
110
+ style: { width: `${E}%` }
111
+ }
112
+ )
113
+ }
114
+ ),
115
+ /* @__PURE__ */ p("div", { className: o.audioPlayerTime, children: [
116
+ /* @__PURE__ */ r("span", { children: m(t) }),
117
+ /* @__PURE__ */ r("span", { children: m(a) })
118
+ ] })
119
+ ] })
120
+ ]
121
+ }
122
+ );
17
123
  };
124
+ L.displayName = "ChatAudioPlayer";
18
125
  export {
19
- s as actionButtons,
20
- _ as activeWorkspace,
21
- o as chevron,
22
- n as chevronOpen,
23
- r as content,
24
- p as default,
25
- g as dividerWrapper,
26
- h as orgItem,
27
- b as orgItemName,
28
- m as orgItemRole,
29
- i as orgList,
30
- c as orgMeta,
31
- a as orgName,
32
- v as sectionLabel,
33
- e as trigger,
34
- t as triggerName
126
+ L as ChatAudioPlayer
35
127
  };
36
128
  //# sourceMappingURL=index151.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index151.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index151.mjs","sources":["../src/components/Chat/components/ChatAudioPlayer.tsx"],"sourcesContent":["/**\n * ChatAudioPlayer Component\n *\n * Audio playback controls with progress tracking and keyboard navigation.\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { Play, Pause } from \"lucide-react\";\nimport type { ChatAudioPlayerProps } from \"../Chat.types\";\nimport { formatTime } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatAudioPlayer: React.FC<ChatAudioPlayerProps> = ({\n src,\n duration: initialDuration,\n title,\n className,\n ...rest\n}) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(initialDuration || 0);\n const audioRef = useRef<HTMLAudioElement>(null);\n\n // Update duration when audio metadata loads\n const handleLoadedMetadata = useCallback(() => {\n const audio = audioRef.current;\n if (audio && !isNaN(audio.duration) && isFinite(audio.duration)) {\n setDuration(audio.duration);\n }\n }, []);\n\n // Update current time during playback\n const handleTimeUpdate = useCallback(() => {\n const audio = audioRef.current;\n if (audio) {\n setCurrentTime(audio.currentTime);\n }\n }, []);\n\n // Handle playback end\n const handleEnded = useCallback(() => {\n setIsPlaying(false);\n setCurrentTime(0);\n }, []);\n\n // Toggle play/pause\n const togglePlayback = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n if (isPlaying) {\n audio.pause();\n } else {\n audio.play().catch(() => {\n // Handle autoplay restrictions\n setIsPlaying(false);\n });\n }\n setIsPlaying(!isPlaying);\n }, [isPlaying]);\n\n // Handle progress bar click\n const handleProgressClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const audio = audioRef.current;\n if (!audio || !duration) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const percentage = clickX / rect.width;\n const newTime = percentage * duration;\n\n audio.currentTime = newTime;\n setCurrentTime(newTime);\n },\n [duration],\n );\n\n // Handle keyboard navigation on slider\n const handleSliderKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const audio = audioRef.current;\n if (!audio || !duration) return;\n\n const STEP = 5; // 5 seconds\n let newTime = currentTime;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n e.preventDefault();\n newTime = Math.min(currentTime + STEP, duration);\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n e.preventDefault();\n newTime = Math.max(currentTime - STEP, 0);\n break;\n case \"Home\":\n e.preventDefault();\n newTime = 0;\n break;\n case \"End\":\n e.preventDefault();\n newTime = duration;\n break;\n default:\n return;\n }\n\n audio.currentTime = newTime;\n setCurrentTime(newTime);\n },\n [currentTime, duration],\n );\n\n // Calculate progress percentage\n const progress = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n const audio = audioRef.current;\n if (audio) {\n audio.pause();\n }\n };\n }, []);\n\n return (\n <div\n className={[styles.audioPlayer, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <audio\n ref={audioRef}\n src={src}\n onLoadedMetadata={handleLoadedMetadata}\n onTimeUpdate={handleTimeUpdate}\n onEnded={handleEnded}\n preload=\"metadata\"\n />\n\n <button\n className={styles.audioPlayerButton}\n onClick={togglePlayback}\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? <Pause size={16} /> : <Play size={16} />}\n </button>\n\n <div className={styles.audioPlayerProgress}>\n {title && <span className={styles.attachmentPreviewName}>{title}</span>}\n <div\n className={styles.audioPlayerTrack}\n onClick={handleProgressClick}\n onKeyDown={handleSliderKeyDown}\n role=\"slider\"\n aria-label=\"Audio progress\"\n aria-valuemin={0}\n aria-valuemax={duration}\n aria-valuenow={currentTime}\n aria-valuetext={`${formatTime(currentTime)} of ${formatTime(duration)}`}\n tabIndex={0}\n >\n <div\n className={styles.audioPlayerFill}\n style={{ width: `${progress}%` }}\n />\n </div>\n <div className={styles.audioPlayerTime}>\n <span>{formatTime(currentTime)}</span>\n <span>{formatTime(duration)}</span>\n </div>\n </div>\n </div>\n );\n};\n\nChatAudioPlayer.displayName = \"ChatAudioPlayer\";\n"],"names":["ChatAudioPlayer","src","initialDuration","title","className","rest","isPlaying","setIsPlaying","useState","currentTime","setCurrentTime","duration","setDuration","audioRef","useRef","handleLoadedMetadata","useCallback","audio","handleTimeUpdate","handleEnded","togglePlayback","handleProgressClick","rect","newTime","handleSliderKeyDown","STEP","progress","useEffect","jsxs","styles","jsx","Pause","Play","formatTime"],"mappings":"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"}
package/dist/index152.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_selectContainer_uomk2_10",o="_fullWidth_uomk2_16",r="_label_uomk2_21",l="_optional_uomk2_31",t="_selectWrapper_uomk2_38",s="_select_uomk2_10",_="_error_uomk2_115",c="_placeholder_uomk2_132",n="_sm_uomk2_137",a="_md_uomk2_143",u="_lg_uomk2_149",m="_helperText_uomk2_156",p="_errorMessage_uomk2_163",d="_errorIcon_uomk2_172",i={selectContainer:e,fullWidth:o,label:r,optional:l,selectWrapper:t,select:s,error:_,placeholder:c,sm:n,md:a,lg:u,helperText:m,errorMessage:p,errorIcon:d};exports.default=i;exports.error=_;exports.errorIcon=d;exports.errorMessage=p;exports.fullWidth=o;exports.helperText=m;exports.label=r;exports.lg=u;exports.md=a;exports.optional=l;exports.placeholder=c;exports.select=s;exports.selectContainer=e;exports.selectWrapper=t;exports.sm=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("lucide-react"),g=require("./index95.cjs"),b=require("./index184.cjs"),r=require("./index142.cjs"),t=({onRecordingComplete:s,onCancel:u,maxDuration:f=300,className:a,...d})=>{const{isRecording:o,duration:v,audioBlob:c,error:l,startRecording:R,stopRecording:j,cancelRecording:x,reset:n,isSupported:m}=g.useVoiceRecorder({maxDuration:f,onRecordingComplete:s,onError:B=>console.error("Recording error:",B)}),h=()=>{o?j():c?(s?.(c),n()):R()},N=()=>{x(),u?.()};return m?l?e.jsxs("div",{className:[r.default.voiceRecorder,a].filter(Boolean).join(" "),...d,children:[e.jsx("div",{className:r.default.voiceRecorderInfo,children:e.jsx("span",{className:[r.default.voiceRecorderLabel,r.default.voiceRecorderError].join(" "),children:l})}),e.jsx("button",{className:r.default.inputButton,onClick:n,"aria-label":"Try again",children:e.jsx(i.X,{size:20})})]}):e.jsxs("div",{className:[r.default.voiceRecorder,a].filter(Boolean).join(" "),...d,children:[e.jsx("button",{className:[r.default.voiceRecorderButton,!o&&!c&&r.default.voiceRecorderButtonIdle].filter(Boolean).join(" "),onClick:h,"aria-label":o?"Stop recording":c?"Send recording":"Start recording",children:o?e.jsx(i.Square,{size:20}):c?e.jsx(i.Send,{size:20}):e.jsx(i.Mic,{size:20})}),e.jsxs("div",{className:r.default.voiceRecorderInfo,children:[e.jsx("span",{className:r.default.voiceRecorderDuration,children:b.formatTime(v)}),e.jsx("span",{className:r.default.voiceRecorderLabel,children:o?"Recording...":c?"Recording ready":"Click to record"})]}),o&&e.jsxs("div",{className:r.default.voiceRecorderWaveform,children:[e.jsx("div",{className:r.default.voiceRecorderBar}),e.jsx("div",{className:r.default.voiceRecorderBar}),e.jsx("div",{className:r.default.voiceRecorderBar}),e.jsx("div",{className:r.default.voiceRecorderBar}),e.jsx("div",{className:r.default.voiceRecorderBar})]}),(o||c)&&e.jsx("div",{className:r.default.voiceRecorderActions,children:e.jsx("button",{className:r.default.inputButton,onClick:N,"aria-label":"Cancel recording",children:e.jsx(i.X,{size:20})})})]}):e.jsx("div",{className:[r.default.voiceRecorder,a].filter(Boolean).join(" "),...d,children:e.jsx("div",{className:r.default.voiceRecorderInfo,children:e.jsx("span",{className:r.default.voiceRecorderLabel,children:"Voice recording is not supported in this browser"})})})};t.displayName="ChatVoiceRecorder";exports.ChatVoiceRecorder=t;
2
2
  //# sourceMappingURL=index152.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index152.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index152.cjs","sources":["../src/components/Chat/components/ChatVoiceRecorder.tsx"],"sourcesContent":["/**\n * ChatVoiceRecorder Component\n *\n * Voice recording UI with waveform visualization.\n */\n\nimport React from \"react\";\nimport { Mic, Square, X, Send } from \"lucide-react\";\nimport type { ChatVoiceRecorderProps } from \"../Chat.types\";\nimport { useVoiceRecorder } from \"../hooks/useVoiceRecorder\";\nimport { formatTime } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatVoiceRecorder: React.FC<ChatVoiceRecorderProps> = ({\n onRecordingComplete,\n onCancel,\n maxDuration = 300,\n className,\n ...rest\n}) => {\n const {\n isRecording,\n duration,\n audioBlob,\n error,\n startRecording,\n stopRecording,\n cancelRecording,\n reset,\n isSupported,\n } = useVoiceRecorder({\n maxDuration,\n onRecordingComplete,\n onError: (err) => console.error(\"Recording error:\", err),\n });\n\n const handleMainButtonClick = () => {\n if (isRecording) {\n stopRecording();\n } else if (audioBlob) {\n // Send the recorded audio\n onRecordingComplete?.(audioBlob);\n reset();\n } else {\n startRecording();\n }\n };\n\n const handleCancel = () => {\n cancelRecording();\n onCancel?.();\n };\n\n if (!isSupported) {\n return (\n <div\n className={[styles.voiceRecorder, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <div className={styles.voiceRecorderInfo}>\n <span className={styles.voiceRecorderLabel}>\n Voice recording is not supported in this browser\n </span>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div\n className={[styles.voiceRecorder, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <div className={styles.voiceRecorderInfo}>\n <span\n className={[\n styles.voiceRecorderLabel,\n styles.voiceRecorderError,\n ].join(\" \")}\n >\n {error}\n </span>\n </div>\n <button\n className={styles.inputButton}\n onClick={reset}\n aria-label=\"Try again\"\n >\n <X size={20} />\n </button>\n </div>\n );\n }\n\n return (\n <div\n className={[styles.voiceRecorder, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {/* Main record/stop/send button */}\n <button\n className={[\n styles.voiceRecorderButton,\n !isRecording && !audioBlob && styles.voiceRecorderButtonIdle,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={handleMainButtonClick}\n aria-label={\n isRecording\n ? \"Stop recording\"\n : audioBlob\n ? \"Send recording\"\n : \"Start recording\"\n }\n >\n {isRecording ? (\n <Square size={20} />\n ) : audioBlob ? (\n <Send size={20} />\n ) : (\n <Mic size={20} />\n )}\n </button>\n\n {/* Info section */}\n <div className={styles.voiceRecorderInfo}>\n <span className={styles.voiceRecorderDuration}>\n {formatTime(duration)}\n </span>\n <span className={styles.voiceRecorderLabel}>\n {isRecording\n ? \"Recording...\"\n : audioBlob\n ? \"Recording ready\"\n : \"Click to record\"}\n </span>\n </div>\n\n {/* Waveform visualization (only when recording) */}\n {isRecording && (\n <div className={styles.voiceRecorderWaveform}>\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n </div>\n )}\n\n {/* Cancel button */}\n {(isRecording || audioBlob) && (\n <div className={styles.voiceRecorderActions}>\n <button\n className={styles.inputButton}\n onClick={handleCancel}\n aria-label=\"Cancel recording\"\n >\n <X size={20} />\n </button>\n </div>\n )}\n </div>\n );\n};\n\nChatVoiceRecorder.displayName = \"ChatVoiceRecorder\";\n"],"names":["ChatVoiceRecorder","onRecordingComplete","onCancel","maxDuration","className","rest","isRecording","duration","audioBlob","error","startRecording","stopRecording","cancelRecording","reset","isSupported","useVoiceRecorder","err","handleMainButtonClick","handleCancel","jsxs","styles","jsx","X","Square","Send","Mic","formatTime"],"mappings":"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"}
package/dist/index152.mjs CHANGED
@@ -1,34 +1,112 @@
1
- const e = "_selectContainer_uomk2_10", o = "_fullWidth_uomk2_16", r = "_label_uomk2_21", _ = "_optional_uomk2_31", t = "_selectWrapper_uomk2_38", l = "_select_uomk2_10", s = "_error_uomk2_115", c = "_placeholder_uomk2_132", n = "_sm_uomk2_137", a = "_md_uomk2_143", m = "_lg_uomk2_149", u = "_helperText_uomk2_156", p = "_errorMessage_uomk2_163", k = "_errorIcon_uomk2_172", d = {
2
- selectContainer: e,
3
- fullWidth: o,
4
- label: r,
5
- optional: _,
6
- selectWrapper: t,
7
- select: l,
8
- error: s,
9
- placeholder: c,
10
- sm: n,
11
- md: a,
12
- lg: m,
13
- helperText: u,
14
- errorMessage: p,
15
- errorIcon: k
1
+ import { jsx as r, jsxs as c } from "react/jsx-runtime";
2
+ import { X as t, Square as b, Send as C, Mic as j } from "lucide-react";
3
+ import { useVoiceRecorder as S } from "./index95.mjs";
4
+ import { formatTime as k } from "./index184.mjs";
5
+ import e from "./index142.mjs";
6
+ const z = ({
7
+ onRecordingComplete: d,
8
+ onCancel: v,
9
+ maxDuration: m = 300,
10
+ className: a,
11
+ ...n
12
+ }) => {
13
+ const {
14
+ isRecording: o,
15
+ duration: R,
16
+ audioBlob: i,
17
+ error: s,
18
+ startRecording: h,
19
+ stopRecording: u,
20
+ cancelRecording: N,
21
+ reset: l,
22
+ isSupported: f
23
+ } = S({
24
+ maxDuration: m,
25
+ onRecordingComplete: d,
26
+ onError: (g) => console.error("Recording error:", g)
27
+ }), p = () => {
28
+ o ? u() : i ? (d?.(i), l()) : h();
29
+ }, B = () => {
30
+ N(), v?.();
31
+ };
32
+ return f ? s ? /* @__PURE__ */ c(
33
+ "div",
34
+ {
35
+ className: [e.voiceRecorder, a].filter(Boolean).join(" "),
36
+ ...n,
37
+ children: [
38
+ /* @__PURE__ */ r("div", { className: e.voiceRecorderInfo, children: /* @__PURE__ */ r(
39
+ "span",
40
+ {
41
+ className: [
42
+ e.voiceRecorderLabel,
43
+ e.voiceRecorderError
44
+ ].join(" "),
45
+ children: s
46
+ }
47
+ ) }),
48
+ /* @__PURE__ */ r(
49
+ "button",
50
+ {
51
+ className: e.inputButton,
52
+ onClick: l,
53
+ "aria-label": "Try again",
54
+ children: /* @__PURE__ */ r(t, { size: 20 })
55
+ }
56
+ )
57
+ ]
58
+ }
59
+ ) : /* @__PURE__ */ c(
60
+ "div",
61
+ {
62
+ className: [e.voiceRecorder, a].filter(Boolean).join(" "),
63
+ ...n,
64
+ children: [
65
+ /* @__PURE__ */ r(
66
+ "button",
67
+ {
68
+ className: [
69
+ e.voiceRecorderButton,
70
+ !o && !i && e.voiceRecorderButtonIdle
71
+ ].filter(Boolean).join(" "),
72
+ onClick: p,
73
+ "aria-label": o ? "Stop recording" : i ? "Send recording" : "Start recording",
74
+ children: o ? /* @__PURE__ */ r(b, { size: 20 }) : i ? /* @__PURE__ */ r(C, { size: 20 }) : /* @__PURE__ */ r(j, { size: 20 })
75
+ }
76
+ ),
77
+ /* @__PURE__ */ c("div", { className: e.voiceRecorderInfo, children: [
78
+ /* @__PURE__ */ r("span", { className: e.voiceRecorderDuration, children: k(R) }),
79
+ /* @__PURE__ */ r("span", { className: e.voiceRecorderLabel, children: o ? "Recording..." : i ? "Recording ready" : "Click to record" })
80
+ ] }),
81
+ o && /* @__PURE__ */ c("div", { className: e.voiceRecorderWaveform, children: [
82
+ /* @__PURE__ */ r("div", { className: e.voiceRecorderBar }),
83
+ /* @__PURE__ */ r("div", { className: e.voiceRecorderBar }),
84
+ /* @__PURE__ */ r("div", { className: e.voiceRecorderBar }),
85
+ /* @__PURE__ */ r("div", { className: e.voiceRecorderBar }),
86
+ /* @__PURE__ */ r("div", { className: e.voiceRecorderBar })
87
+ ] }),
88
+ (o || i) && /* @__PURE__ */ r("div", { className: e.voiceRecorderActions, children: /* @__PURE__ */ r(
89
+ "button",
90
+ {
91
+ className: e.inputButton,
92
+ onClick: B,
93
+ "aria-label": "Cancel recording",
94
+ children: /* @__PURE__ */ r(t, { size: 20 })
95
+ }
96
+ ) })
97
+ ]
98
+ }
99
+ ) : /* @__PURE__ */ r(
100
+ "div",
101
+ {
102
+ className: [e.voiceRecorder, a].filter(Boolean).join(" "),
103
+ ...n,
104
+ children: /* @__PURE__ */ r("div", { className: e.voiceRecorderInfo, children: /* @__PURE__ */ r("span", { className: e.voiceRecorderLabel, children: "Voice recording is not supported in this browser" }) })
105
+ }
106
+ );
16
107
  };
108
+ z.displayName = "ChatVoiceRecorder";
17
109
  export {
18
- d as default,
19
- s as error,
20
- k as errorIcon,
21
- p as errorMessage,
22
- o as fullWidth,
23
- u as helperText,
24
- r as label,
25
- m as lg,
26
- a as md,
27
- _ as optional,
28
- c as placeholder,
29
- l as select,
30
- e as selectContainer,
31
- t as selectWrapper,
32
- n as sm
110
+ z as ChatVoiceRecorder
33
111
  };
34
112
  //# sourceMappingURL=index152.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index152.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index152.mjs","sources":["../src/components/Chat/components/ChatVoiceRecorder.tsx"],"sourcesContent":["/**\n * ChatVoiceRecorder Component\n *\n * Voice recording UI with waveform visualization.\n */\n\nimport React from \"react\";\nimport { Mic, Square, X, Send } from \"lucide-react\";\nimport type { ChatVoiceRecorderProps } from \"../Chat.types\";\nimport { useVoiceRecorder } from \"../hooks/useVoiceRecorder\";\nimport { formatTime } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatVoiceRecorder: React.FC<ChatVoiceRecorderProps> = ({\n onRecordingComplete,\n onCancel,\n maxDuration = 300,\n className,\n ...rest\n}) => {\n const {\n isRecording,\n duration,\n audioBlob,\n error,\n startRecording,\n stopRecording,\n cancelRecording,\n reset,\n isSupported,\n } = useVoiceRecorder({\n maxDuration,\n onRecordingComplete,\n onError: (err) => console.error(\"Recording error:\", err),\n });\n\n const handleMainButtonClick = () => {\n if (isRecording) {\n stopRecording();\n } else if (audioBlob) {\n // Send the recorded audio\n onRecordingComplete?.(audioBlob);\n reset();\n } else {\n startRecording();\n }\n };\n\n const handleCancel = () => {\n cancelRecording();\n onCancel?.();\n };\n\n if (!isSupported) {\n return (\n <div\n className={[styles.voiceRecorder, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <div className={styles.voiceRecorderInfo}>\n <span className={styles.voiceRecorderLabel}>\n Voice recording is not supported in this browser\n </span>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div\n className={[styles.voiceRecorder, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <div className={styles.voiceRecorderInfo}>\n <span\n className={[\n styles.voiceRecorderLabel,\n styles.voiceRecorderError,\n ].join(\" \")}\n >\n {error}\n </span>\n </div>\n <button\n className={styles.inputButton}\n onClick={reset}\n aria-label=\"Try again\"\n >\n <X size={20} />\n </button>\n </div>\n );\n }\n\n return (\n <div\n className={[styles.voiceRecorder, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {/* Main record/stop/send button */}\n <button\n className={[\n styles.voiceRecorderButton,\n !isRecording && !audioBlob && styles.voiceRecorderButtonIdle,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={handleMainButtonClick}\n aria-label={\n isRecording\n ? \"Stop recording\"\n : audioBlob\n ? \"Send recording\"\n : \"Start recording\"\n }\n >\n {isRecording ? (\n <Square size={20} />\n ) : audioBlob ? (\n <Send size={20} />\n ) : (\n <Mic size={20} />\n )}\n </button>\n\n {/* Info section */}\n <div className={styles.voiceRecorderInfo}>\n <span className={styles.voiceRecorderDuration}>\n {formatTime(duration)}\n </span>\n <span className={styles.voiceRecorderLabel}>\n {isRecording\n ? \"Recording...\"\n : audioBlob\n ? \"Recording ready\"\n : \"Click to record\"}\n </span>\n </div>\n\n {/* Waveform visualization (only when recording) */}\n {isRecording && (\n <div className={styles.voiceRecorderWaveform}>\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n <div className={styles.voiceRecorderBar} />\n </div>\n )}\n\n {/* Cancel button */}\n {(isRecording || audioBlob) && (\n <div className={styles.voiceRecorderActions}>\n <button\n className={styles.inputButton}\n onClick={handleCancel}\n aria-label=\"Cancel recording\"\n >\n <X size={20} />\n </button>\n </div>\n )}\n </div>\n );\n};\n\nChatVoiceRecorder.displayName = \"ChatVoiceRecorder\";\n"],"names":["ChatVoiceRecorder","onRecordingComplete","onCancel","maxDuration","className","rest","isRecording","duration","audioBlob","error","startRecording","stopRecording","cancelRecording","reset","isSupported","useVoiceRecorder","err","handleMainButtonClick","handleCancel","jsxs","styles","jsx","X","Square","Send","Mic","formatTime"],"mappings":"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"}
package/dist/index153.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_agentCard_1evy3_8",t="_clickable_1evy3_17",a="_draggable_1evy3_21",i="_dragging_1evy3_33",n="_headerContent_1evy3_53",_="_iconAvatar_1evy3_62",g="_headerRight_1evy3_75",r="_multiBadge_1evy3_82",d="_title_1evy3_98",c="_description_1evy3_109",o="_timestamp_1evy3_128",l={agentCard:e,clickable:t,draggable:a,dragging:i,headerContent:n,iconAvatar:_,headerRight:g,multiBadge:r,title:d,description:c,timestamp:o};exports.agentCard=e;exports.clickable=t;exports.default=l;exports.description=c;exports.draggable=a;exports.dragging=i;exports.headerContent=n;exports.headerRight=g;exports.iconAvatar=_;exports.multiBadge=r;exports.timestamp=o;exports.title=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),t=require("react"),R=require("lucide-react"),h=require("./index184.cjs"),o=require("./index142.cjs"),g=({onFilesSelected:f,accept:i=["*/*"],multiple:C=!0,maxSize:s=10*1024*1024,children:v,className:D,...k})=>{const[m,u]=t.useState(!1),c=t.useRef(null),d=t.useCallback(e=>{if(!e||e.length===0)return;const r=[];Array.from(e).forEach(l=>{if(s&&l.size>s){console.warn(`File ${l.name} exceeds max size of ${h.formatFileSize(s)}`);return}const F=i.includes("*/*"),q=i.flatMap(n=>(n.endsWith("/*"),n));if(!(F||q.some(n=>{if(n.endsWith("/*")){const N=n.split("/")[0];return l.type.startsWith(`${N}/`)}return l.type===n||l.name.endsWith(n)}))){console.warn(`File ${l.name} type not accepted`);return}r.push(l)}),r.length>0&&f?.(r)},[i,s,f]),b=t.useCallback(e=>{e.preventDefault(),e.stopPropagation(),u(!0)},[]),j=t.useCallback(e=>{e.preventDefault(),e.stopPropagation(),u(!1)},[]),y=t.useCallback(e=>{e.preventDefault(),e.stopPropagation(),u(!1);const{files:r}=e.dataTransfer;d(r)},[d]),x=t.useCallback(e=>{d(e.target.files),c.current&&(c.current.value="")},[d]),p=t.useCallback(()=>{c.current?.click()},[]),U=t.useCallback(e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),p())},[p]);return a.jsxs("div",{className:[o.default.fileUpload,m&&o.default.fileUploadDragging,D].filter(Boolean).join(" "),onDragOver:b,onDragLeave:j,onDrop:y,onClick:p,onKeyDown:U,role:"button",tabIndex:0,"aria-label":"Upload files",...k,children:[a.jsx("input",{ref:c,type:"file",accept:i.join(","),multiple:C,onChange:x,style:{display:"none"},"aria-hidden":"true"}),v||a.jsxs(a.Fragment,{children:[a.jsx("div",{className:o.default.fileUploadIcon,children:a.jsx(R.Upload,{size:32})}),a.jsxs("div",{className:o.default.fileUploadText,children:[a.jsx("strong",{children:"Click to upload"})," or drag and drop"]}),a.jsxs("div",{className:o.default.fileUploadHint,children:["Max file size: ",h.formatFileSize(s)]})]})]})};g.displayName="ChatFileUpload";exports.ChatFileUpload=g;
2
2
  //# sourceMappingURL=index153.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index153.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index153.cjs","sources":["../src/components/Chat/components/ChatFileUpload.tsx"],"sourcesContent":["/**\n * ChatFileUpload Component\n *\n * File upload zone with drag-and-drop support.\n */\n\nimport React, { useState, useRef, useCallback } from \"react\";\nimport { Upload } from \"lucide-react\";\nimport type { ChatFileUploadProps } from \"../Chat.types\";\nimport { formatFileSize } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\nexport const ChatFileUpload: React.FC<ChatFileUploadProps> = ({\n onFilesSelected,\n accept = [\"*/*\"],\n multiple = true,\n maxSize = 10 * 1024 * 1024, // 10MB default\n children,\n className,\n ...rest\n}) => {\n const [isDragging, setIsDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Handle file selection\n const handleFiles = useCallback(\n (files: FileList | null) => {\n if (!files || files.length === 0) return;\n\n const validFiles: File[] = [];\n\n Array.from(files).forEach((file) => {\n // Check file size\n if (maxSize && file.size > maxSize) {\n console.warn(\n `File ${file.name} exceeds max size of ${formatFileSize(maxSize)}`,\n );\n return;\n }\n\n // Check file type (basic check)\n const acceptAll = accept.includes(\"*/*\");\n const acceptedTypes = accept.flatMap((type) => {\n if (type.endsWith(\"/*\")) {\n return type; // e.g., 'image/*'\n }\n return type;\n });\n\n const isAccepted =\n acceptAll ||\n acceptedTypes.some((type) => {\n if (type.endsWith(\"/*\")) {\n const category = type.split(\"/\")[0];\n return file.type.startsWith(`${category}/`);\n }\n return file.type === type || file.name.endsWith(type);\n });\n\n if (!isAccepted) {\n console.warn(`File ${file.name} type not accepted`);\n return;\n }\n\n validFiles.push(file);\n });\n\n if (validFiles.length > 0) {\n onFilesSelected?.(validFiles);\n }\n },\n [accept, maxSize, onFilesSelected],\n );\n\n // Handle drag events\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n const { files } = e.dataTransfer;\n handleFiles(files);\n },\n [handleFiles],\n );\n\n // Handle input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files);\n // Reset input so same file can be selected again\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n },\n [handleFiles],\n );\n\n // Handle click to open file dialog\n const handleClick = useCallback(() => {\n inputRef.current?.click();\n }, []);\n\n // Handle keyboard interaction\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n },\n [handleClick],\n );\n\n return (\n <div\n className={[\n styles.fileUpload,\n isDragging && styles.fileUploadDragging,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Upload files\"\n {...rest}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept.join(\",\")}\n multiple={multiple}\n onChange={handleInputChange}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n\n {children || (\n <>\n <div className={styles.fileUploadIcon}>\n <Upload size={32} />\n </div>\n <div className={styles.fileUploadText}>\n <strong>Click to upload</strong> or drag and drop\n </div>\n <div className={styles.fileUploadHint}>\n Max file size: {formatFileSize(maxSize)}\n </div>\n </>\n )}\n </div>\n );\n};\n\nChatFileUpload.displayName = \"ChatFileUpload\";\n"],"names":["ChatFileUpload","onFilesSelected","accept","multiple","maxSize","children","className","rest","isDragging","setIsDragging","useState","inputRef","useRef","handleFiles","useCallback","files","validFiles","file","formatFileSize","acceptAll","acceptedTypes","type","category","handleDragOver","handleDragLeave","handleDrop","handleInputChange","handleClick","handleKeyDown","jsxs","styles","jsx","Fragment","Upload"],"mappings":"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"}
package/dist/index153.mjs CHANGED
@@ -1,28 +1,115 @@
1
- const e = "_agentCard_1evy3_8", t = "_clickable_1evy3_17", a = "_draggable_1evy3_21", _ = "_dragging_1evy3_33", n = "_headerContent_1evy3_53", i = "_iconAvatar_1evy3_62", c = "_headerRight_1evy3_75", g = "_multiBadge_1evy3_82", d = "_title_1evy3_98", o = "_description_1evy3_109", r = "_timestamp_1evy3_128", s = {
2
- agentCard: e,
3
- clickable: t,
4
- draggable: a,
5
- dragging: _,
6
- headerContent: n,
7
- iconAvatar: i,
8
- headerRight: c,
9
- multiBadge: g,
10
- title: d,
11
- description: o,
12
- timestamp: r
1
+ import { jsxs as d, jsx as p, Fragment as A } from "react/jsx-runtime";
2
+ import { useState as I, useRef as W, useCallback as a } from "react";
3
+ import { Upload as $ } from "lucide-react";
4
+ import { formatFileSize as g } from "./index184.mjs";
5
+ import l from "./index142.mjs";
6
+ const P = ({
7
+ onFilesSelected: h,
8
+ accept: s = ["*/*"],
9
+ multiple: m = !0,
10
+ maxSize: r = 10 * 1024 * 1024,
11
+ // 10MB default
12
+ children: D,
13
+ className: v,
14
+ ...y
15
+ }) => {
16
+ const [U, f] = I(!1), i = W(null), c = a(
17
+ (e) => {
18
+ if (!e || e.length === 0) return;
19
+ const o = [];
20
+ Array.from(e).forEach((t) => {
21
+ if (r && t.size > r) {
22
+ console.warn(
23
+ `File ${t.name} exceeds max size of ${g(r)}`
24
+ );
25
+ return;
26
+ }
27
+ const j = s.includes("*/*"), w = s.flatMap((n) => (n.endsWith("/*"), n));
28
+ if (!(j || w.some((n) => {
29
+ if (n.endsWith("/*")) {
30
+ const x = n.split("/")[0];
31
+ return t.type.startsWith(`${x}/`);
32
+ }
33
+ return t.type === n || t.name.endsWith(n);
34
+ }))) {
35
+ console.warn(`File ${t.name} type not accepted`);
36
+ return;
37
+ }
38
+ o.push(t);
39
+ }), o.length > 0 && h?.(o);
40
+ },
41
+ [s, r, h]
42
+ ), C = a((e) => {
43
+ e.preventDefault(), e.stopPropagation(), f(!0);
44
+ }, []), k = a((e) => {
45
+ e.preventDefault(), e.stopPropagation(), f(!1);
46
+ }, []), F = a(
47
+ (e) => {
48
+ e.preventDefault(), e.stopPropagation(), f(!1);
49
+ const { files: o } = e.dataTransfer;
50
+ c(o);
51
+ },
52
+ [c]
53
+ ), N = a(
54
+ (e) => {
55
+ c(e.target.files), i.current && (i.current.value = "");
56
+ },
57
+ [c]
58
+ ), u = a(() => {
59
+ i.current?.click();
60
+ }, []), b = a(
61
+ (e) => {
62
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), u());
63
+ },
64
+ [u]
65
+ );
66
+ return /* @__PURE__ */ d(
67
+ "div",
68
+ {
69
+ className: [
70
+ l.fileUpload,
71
+ U && l.fileUploadDragging,
72
+ v
73
+ ].filter(Boolean).join(" "),
74
+ onDragOver: C,
75
+ onDragLeave: k,
76
+ onDrop: F,
77
+ onClick: u,
78
+ onKeyDown: b,
79
+ role: "button",
80
+ tabIndex: 0,
81
+ "aria-label": "Upload files",
82
+ ...y,
83
+ children: [
84
+ /* @__PURE__ */ p(
85
+ "input",
86
+ {
87
+ ref: i,
88
+ type: "file",
89
+ accept: s.join(","),
90
+ multiple: m,
91
+ onChange: N,
92
+ style: { display: "none" },
93
+ "aria-hidden": "true"
94
+ }
95
+ ),
96
+ D || /* @__PURE__ */ d(A, { children: [
97
+ /* @__PURE__ */ p("div", { className: l.fileUploadIcon, children: /* @__PURE__ */ p($, { size: 32 }) }),
98
+ /* @__PURE__ */ d("div", { className: l.fileUploadText, children: [
99
+ /* @__PURE__ */ p("strong", { children: "Click to upload" }),
100
+ " or drag and drop"
101
+ ] }),
102
+ /* @__PURE__ */ d("div", { className: l.fileUploadHint, children: [
103
+ "Max file size: ",
104
+ g(r)
105
+ ] })
106
+ ] })
107
+ ]
108
+ }
109
+ );
13
110
  };
111
+ P.displayName = "ChatFileUpload";
14
112
  export {
15
- e as agentCard,
16
- t as clickable,
17
- s as default,
18
- o as description,
19
- a as draggable,
20
- _ as dragging,
21
- n as headerContent,
22
- c as headerRight,
23
- i as iconAvatar,
24
- g as multiBadge,
25
- r as timestamp,
26
- d as title
113
+ P as ChatFileUpload
27
114
  };
28
115
  //# sourceMappingURL=index153.mjs.map