@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":"index153.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index153.mjs","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/index154.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o="_backdrop_35vfn_8",_="_fadeIn_35vfn_1",e="_modal_35vfn_32",n="_slideUp_35vfn_1",l="_sm_35vfn_67",t="_md_35vfn_71",d="_lg_35vfn_75",s="_xl_35vfn_79",f="_full_35vfn_83",c="_header_35vfn_93",a="_closeButton_35vfn_105",r="_body_35vfn_145",u="_footer_35vfn_153",v={backdrop:o,fadeIn:_,modal:e,slideUp:n,sm:l,md:t,lg:d,xl:s,full:f,header:c,closeButton:a,body:r,footer:u};exports.backdrop=o;exports.body=r;exports.closeButton=a;exports.default=v;exports.fadeIn=_;exports.footer=u;exports.full=f;exports.header=c;exports.lg=d;exports.md=t;exports.modal=e;exports.slideUp=n;exports.sm=l;exports.xl=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("lucide-react"),p=require("./index150.cjs"),P=require("./index151.cjs"),b=require("./index148.cjs"),C=require("./index184.cjs"),t=require("./index142.cjs"),w=d=>{switch(d){case"image":return e.jsx(a.Image,{size:18});case"audio":return e.jsx(a.Music,{size:18});case"code":return e.jsx(a.Code,{size:18});default:return e.jsx(a.FileText,{size:18})}},v=({attachment:d,removable:h=!1,onRemove:i,onClick:n,className:c,...o})=>{const{type:m,name:s,url:l,content:j,language:f,size:x,duration:u,thumbnail:g}=d;switch(m){case"image":if(l)return e.jsxs("div",{className:c,style:{position:"relative"},...o,children:[e.jsx(p.ChatImagePreview,{src:l,alt:s,thumbnail:g,onClick:n}),h&&i&&e.jsx("button",{className:t.default.attachmentPreviewRemove,onClick:r=>{r.stopPropagation(),i()},"aria-label":`Remove ${s}`,style:{position:"absolute",top:4,right:4,background:"var(--surface-base)"},children:e.jsx(a.X,{size:14})})]});break;case"audio":if(l)return e.jsxs("div",{className:c,style:{position:"relative"},...o,children:[e.jsx(P.ChatAudioPlayer,{src:l,duration:u,title:s}),h&&i&&e.jsx("button",{className:t.default.attachmentPreviewRemove,onClick:r=>{r.stopPropagation(),i()},"aria-label":`Remove ${s}`,children:e.jsx(a.X,{size:14})})]});break;case"code":if(j)return e.jsx(b.ChatCodeBlock,{code:j,language:f,className:c,...o});break}return e.jsxs("div",{className:[t.default.attachmentPreview,c].filter(Boolean).join(" "),onClick:n,role:n?"button":void 0,tabIndex:n?0:void 0,...o,children:[e.jsx("div",{className:t.default.attachmentPreviewIcon,children:w(m)}),e.jsxs("div",{className:t.default.attachmentPreviewInfo,children:[e.jsx("span",{className:t.default.attachmentPreviewName,children:s}),x&&e.jsxs("span",{className:t.default.attachmentPreviewMeta,children:[C.formatFileSize(x),u&&` · ${Math.floor(u/60)}:${(u%60).toString().padStart(2,"0")}`]})]}),h&&i&&e.jsx("button",{className:t.default.attachmentPreviewRemove,onClick:r=>{r.stopPropagation(),i()},"aria-label":`Remove ${s}`,children:e.jsx(a.X,{size:14})})]})};v.displayName="ChatAttachment";exports.ChatAttachment=v;
2
2
  //# sourceMappingURL=index154.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index154.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index154.cjs","sources":["../src/components/Chat/components/ChatAttachment.tsx"],"sourcesContent":["/**\n * ChatAttachment Component\n *\n * Unified attachment preview component that renders the appropriate\n * display based on attachment type (image, audio, file, code).\n */\n\nimport React from \"react\";\nimport { FileText, Code, X, Image as ImageIcon, Music } from \"lucide-react\";\nimport type { ChatAttachmentPreviewProps, AttachmentType } from \"../Chat.types\";\nimport { ChatImagePreview } from \"./ChatImagePreview\";\nimport { ChatAudioPlayer } from \"./ChatAudioPlayer\";\nimport { ChatCodeBlock } from \"./ChatCodeBlock\";\nimport { formatFileSize } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\n// Get icon for attachment type\nconst getAttachmentIcon = (type: AttachmentType) => {\n switch (type) {\n case \"image\":\n return <ImageIcon size={18} />;\n case \"audio\":\n return <Music size={18} />;\n case \"code\":\n return <Code size={18} />;\n default:\n return <FileText size={18} />;\n }\n};\n\nexport const ChatAttachment: React.FC<ChatAttachmentPreviewProps> = ({\n attachment,\n removable = false,\n onRemove,\n onClick,\n className,\n ...rest\n}) => {\n const { type, name, url, content, language, size, duration, thumbnail } =\n attachment;\n\n // Render based on type\n switch (type) {\n case \"image\":\n if (url) {\n return (\n <div className={className} style={{ position: \"relative\" }} {...rest}>\n <ChatImagePreview\n src={url}\n alt={name}\n thumbnail={thumbnail}\n onClick={onClick}\n />\n {removable && onRemove && (\n <button\n className={styles.attachmentPreviewRemove}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label={`Remove ${name}`}\n style={{\n position: \"absolute\",\n top: 4,\n right: 4,\n background: \"var(--surface-base)\",\n }}\n >\n <X size={14} />\n </button>\n )}\n </div>\n );\n }\n break;\n\n case \"audio\":\n if (url) {\n return (\n <div className={className} style={{ position: \"relative\" }} {...rest}>\n <ChatAudioPlayer src={url} duration={duration} title={name} />\n {removable && onRemove && (\n <button\n className={styles.attachmentPreviewRemove}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label={`Remove ${name}`}\n >\n <X size={14} />\n </button>\n )}\n </div>\n );\n }\n break;\n\n case \"code\":\n if (content) {\n return (\n <ChatCodeBlock\n code={content}\n language={language}\n className={className}\n {...rest}\n />\n );\n }\n break;\n }\n\n // Default file preview for unhandled types or missing data\n return (\n <div\n className={[styles.attachmentPreview, className]\n .filter(Boolean)\n .join(\" \")}\n onClick={onClick}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n {...rest}\n >\n <div className={styles.attachmentPreviewIcon}>\n {getAttachmentIcon(type)}\n </div>\n\n <div className={styles.attachmentPreviewInfo}>\n <span className={styles.attachmentPreviewName}>{name}</span>\n {size && (\n <span className={styles.attachmentPreviewMeta}>\n {formatFileSize(size)}\n {duration &&\n ` · ${Math.floor(duration / 60)}:${(duration % 60).toString().padStart(2, \"0\")}`}\n </span>\n )}\n </div>\n\n {removable && onRemove && (\n <button\n className={styles.attachmentPreviewRemove}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label={`Remove ${name}`}\n >\n <X size={14} />\n </button>\n )}\n </div>\n );\n};\n\nChatAttachment.displayName = \"ChatAttachment\";\n"],"names":["getAttachmentIcon","type","jsx","ImageIcon","Music","Code","FileText","ChatAttachment","attachment","removable","onRemove","onClick","className","rest","name","url","content","language","size","duration","thumbnail","jsxs","ChatImagePreview","styles","e","X","ChatAudioPlayer","ChatCodeBlock","formatFileSize"],"mappings":"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"}
package/dist/index154.mjs CHANGED
@@ -1,32 +1,126 @@
1
- const _ = "_backdrop_35vfn_8", o = "_fadeIn_35vfn_1", n = "_modal_35vfn_32", s = "_slideUp_35vfn_1", t = "_sm_35vfn_67", f = "_md_35vfn_71", l = "_lg_35vfn_75", d = "_xl_35vfn_79", e = "_full_35vfn_83", c = "_header_35vfn_93", a = "_closeButton_35vfn_105", v = "_body_35vfn_145", r = "_footer_35vfn_153", m = {
2
- backdrop: _,
3
- fadeIn: o,
4
- modal: n,
5
- slideUp: s,
6
- sm: t,
7
- md: f,
8
- lg: l,
9
- xl: d,
10
- full: e,
11
- header: c,
12
- closeButton: a,
13
- body: v,
14
- footer: r
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import { X as u, FileText as P, Code as w, Music as z, Image as y } from "lucide-react";
3
+ import { ChatImagePreview as C } from "./index150.mjs";
4
+ import { ChatAudioPlayer as N } from "./index151.mjs";
5
+ import { ChatCodeBlock as I } from "./index148.mjs";
6
+ import { formatFileSize as k } from "./index184.mjs";
7
+ import t from "./index142.mjs";
8
+ const x = (d) => {
9
+ switch (d) {
10
+ case "image":
11
+ return /* @__PURE__ */ e(y, { size: 18 });
12
+ case "audio":
13
+ return /* @__PURE__ */ e(z, { size: 18 });
14
+ case "code":
15
+ return /* @__PURE__ */ e(w, { size: 18 });
16
+ default:
17
+ return /* @__PURE__ */ e(P, { size: 18 });
18
+ }
19
+ }, $ = ({
20
+ attachment: d,
21
+ removable: h = !1,
22
+ onRemove: a,
23
+ onClick: n,
24
+ className: s,
25
+ ...c
26
+ }) => {
27
+ const { type: p, name: i, url: l, content: v, language: b, size: f, duration: m, thumbnail: g } = d;
28
+ switch (p) {
29
+ case "image":
30
+ if (l)
31
+ return /* @__PURE__ */ o("div", { className: s, style: { position: "relative" }, ...c, children: [
32
+ /* @__PURE__ */ e(
33
+ C,
34
+ {
35
+ src: l,
36
+ alt: i,
37
+ thumbnail: g,
38
+ onClick: n
39
+ }
40
+ ),
41
+ h && a && /* @__PURE__ */ e(
42
+ "button",
43
+ {
44
+ className: t.attachmentPreviewRemove,
45
+ onClick: (r) => {
46
+ r.stopPropagation(), a();
47
+ },
48
+ "aria-label": `Remove ${i}`,
49
+ style: {
50
+ position: "absolute",
51
+ top: 4,
52
+ right: 4,
53
+ background: "var(--surface-base)"
54
+ },
55
+ children: /* @__PURE__ */ e(u, { size: 14 })
56
+ }
57
+ )
58
+ ] });
59
+ break;
60
+ case "audio":
61
+ if (l)
62
+ return /* @__PURE__ */ o("div", { className: s, style: { position: "relative" }, ...c, children: [
63
+ /* @__PURE__ */ e(N, { src: l, duration: m, title: i }),
64
+ h && a && /* @__PURE__ */ e(
65
+ "button",
66
+ {
67
+ className: t.attachmentPreviewRemove,
68
+ onClick: (r) => {
69
+ r.stopPropagation(), a();
70
+ },
71
+ "aria-label": `Remove ${i}`,
72
+ children: /* @__PURE__ */ e(u, { size: 14 })
73
+ }
74
+ )
75
+ ] });
76
+ break;
77
+ case "code":
78
+ if (v)
79
+ return /* @__PURE__ */ e(
80
+ I,
81
+ {
82
+ code: v,
83
+ language: b,
84
+ className: s,
85
+ ...c
86
+ }
87
+ );
88
+ break;
89
+ }
90
+ return /* @__PURE__ */ o(
91
+ "div",
92
+ {
93
+ className: [t.attachmentPreview, s].filter(Boolean).join(" "),
94
+ onClick: n,
95
+ role: n ? "button" : void 0,
96
+ tabIndex: n ? 0 : void 0,
97
+ ...c,
98
+ children: [
99
+ /* @__PURE__ */ e("div", { className: t.attachmentPreviewIcon, children: x(p) }),
100
+ /* @__PURE__ */ o("div", { className: t.attachmentPreviewInfo, children: [
101
+ /* @__PURE__ */ e("span", { className: t.attachmentPreviewName, children: i }),
102
+ f && /* @__PURE__ */ o("span", { className: t.attachmentPreviewMeta, children: [
103
+ k(f),
104
+ m && ` · ${Math.floor(m / 60)}:${(m % 60).toString().padStart(2, "0")}`
105
+ ] })
106
+ ] }),
107
+ h && a && /* @__PURE__ */ e(
108
+ "button",
109
+ {
110
+ className: t.attachmentPreviewRemove,
111
+ onClick: (r) => {
112
+ r.stopPropagation(), a();
113
+ },
114
+ "aria-label": `Remove ${i}`,
115
+ children: /* @__PURE__ */ e(u, { size: 14 })
116
+ }
117
+ )
118
+ ]
119
+ }
120
+ );
15
121
  };
122
+ $.displayName = "ChatAttachment";
16
123
  export {
17
- _ as backdrop,
18
- v as body,
19
- a as closeButton,
20
- m as default,
21
- o as fadeIn,
22
- r as footer,
23
- e as full,
24
- c as header,
25
- l as lg,
26
- f as md,
27
- n as modal,
28
- s as slideUp,
29
- t as sm,
30
- d as xl
124
+ $ as ChatAttachment
31
125
  };
32
126
  //# sourceMappingURL=index154.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index154.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index154.mjs","sources":["../src/components/Chat/components/ChatAttachment.tsx"],"sourcesContent":["/**\n * ChatAttachment Component\n *\n * Unified attachment preview component that renders the appropriate\n * display based on attachment type (image, audio, file, code).\n */\n\nimport React from \"react\";\nimport { FileText, Code, X, Image as ImageIcon, Music } from \"lucide-react\";\nimport type { ChatAttachmentPreviewProps, AttachmentType } from \"../Chat.types\";\nimport { ChatImagePreview } from \"./ChatImagePreview\";\nimport { ChatAudioPlayer } from \"./ChatAudioPlayer\";\nimport { ChatCodeBlock } from \"./ChatCodeBlock\";\nimport { formatFileSize } from \"../utils\";\nimport styles from \"../Chat.module.css\";\n\n// Get icon for attachment type\nconst getAttachmentIcon = (type: AttachmentType) => {\n switch (type) {\n case \"image\":\n return <ImageIcon size={18} />;\n case \"audio\":\n return <Music size={18} />;\n case \"code\":\n return <Code size={18} />;\n default:\n return <FileText size={18} />;\n }\n};\n\nexport const ChatAttachment: React.FC<ChatAttachmentPreviewProps> = ({\n attachment,\n removable = false,\n onRemove,\n onClick,\n className,\n ...rest\n}) => {\n const { type, name, url, content, language, size, duration, thumbnail } =\n attachment;\n\n // Render based on type\n switch (type) {\n case \"image\":\n if (url) {\n return (\n <div className={className} style={{ position: \"relative\" }} {...rest}>\n <ChatImagePreview\n src={url}\n alt={name}\n thumbnail={thumbnail}\n onClick={onClick}\n />\n {removable && onRemove && (\n <button\n className={styles.attachmentPreviewRemove}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label={`Remove ${name}`}\n style={{\n position: \"absolute\",\n top: 4,\n right: 4,\n background: \"var(--surface-base)\",\n }}\n >\n <X size={14} />\n </button>\n )}\n </div>\n );\n }\n break;\n\n case \"audio\":\n if (url) {\n return (\n <div className={className} style={{ position: \"relative\" }} {...rest}>\n <ChatAudioPlayer src={url} duration={duration} title={name} />\n {removable && onRemove && (\n <button\n className={styles.attachmentPreviewRemove}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label={`Remove ${name}`}\n >\n <X size={14} />\n </button>\n )}\n </div>\n );\n }\n break;\n\n case \"code\":\n if (content) {\n return (\n <ChatCodeBlock\n code={content}\n language={language}\n className={className}\n {...rest}\n />\n );\n }\n break;\n }\n\n // Default file preview for unhandled types or missing data\n return (\n <div\n className={[styles.attachmentPreview, className]\n .filter(Boolean)\n .join(\" \")}\n onClick={onClick}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n {...rest}\n >\n <div className={styles.attachmentPreviewIcon}>\n {getAttachmentIcon(type)}\n </div>\n\n <div className={styles.attachmentPreviewInfo}>\n <span className={styles.attachmentPreviewName}>{name}</span>\n {size && (\n <span className={styles.attachmentPreviewMeta}>\n {formatFileSize(size)}\n {duration &&\n ` · ${Math.floor(duration / 60)}:${(duration % 60).toString().padStart(2, \"0\")}`}\n </span>\n )}\n </div>\n\n {removable && onRemove && (\n <button\n className={styles.attachmentPreviewRemove}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label={`Remove ${name}`}\n >\n <X size={14} />\n </button>\n )}\n </div>\n );\n};\n\nChatAttachment.displayName = \"ChatAttachment\";\n"],"names":["getAttachmentIcon","type","jsx","ImageIcon","Music","Code","FileText","ChatAttachment","attachment","removable","onRemove","onClick","className","rest","name","url","content","language","size","duration","thumbnail","jsxs","ChatImagePreview","styles","e","X","ChatAudioPlayer","ChatCodeBlock","formatFileSize"],"mappings":"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"}
package/dist/index155.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_container_1ggcm_12",r="_disabled_1ggcm_18",c="_labelWrapper_1ggcm_26",_="_input_1ggcm_43",g="_checkbox_1ggcm_55",s="_checkmark_1ggcm_76",o="_sm_1ggcm_92",t="_md_1ggcm_102",l="_lg_1ggcm_112",a="_error_1ggcm_199",n="_label_1ggcm_26",m="_required_1ggcm_232",d="_helperText_1ggcm_238",i="_errorMessage_1ggcm_256",b={container:e,disabled:r,labelWrapper:c,input:_,checkbox:g,checkmark:s,sm:o,md:t,lg:l,error:a,label:n,required:m,helperText:d,errorMessage:i};exports.checkbox=g;exports.checkmark=s;exports.container=e;exports.default=b;exports.disabled=r;exports.error=a;exports.errorMessage=i;exports.helperText=d;exports.input=_;exports.label=n;exports.labelWrapper=c;exports.lg=l;exports.md=t;exports.required=m;exports.sm=o;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),c=require("lucide-react"),t=require("./index142.cjs"),O={today:"Today",yesterday:"Yesterday",previous7:"Previous 7 days",previous30:"Previous 30 days",older:"Older"},y=["today","yesterday","previous7","previous30","older"],C=a=>{const r=new Date,u=(new Date(r.getFullYear(),r.getMonth(),r.getDate()).getTime()-new Date(a.getFullYear(),a.getMonth(),a.getDate()).getTime())/(1e3*60*60*24);return u<1?"today":u<2?"yesterday":u<7?"previous7":u<30?"previous30":"older"},P=a=>{const r=C(a);return r==="today"?new Intl.DateTimeFormat("en-US",{hour:"numeric",minute:"2-digit"}).format(a):r==="yesterday"?"Yesterday":r==="previous7"?new Intl.DateTimeFormat("en-US",{weekday:"short"}).format(a):new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(a)},z=a=>{const r=new Map;return y.forEach(n=>r.set(n,[])),a.forEach(n=>{const b=C(n.updatedAt);r.get(b)?.push(n)}),r},S=({conversations:a=[],activeConversationId:r,onSelectConversation:n,onNewConversation:b,onDeleteConversation:u,onSearch:x,header:w,footer:N,collapsed:m=!1,onCollapsedChange:f,className:I,...D})=>{const[h,T]=d.useState(""),[p,j]=d.useState(null),o=d.useRef(void 0);d.useEffect(()=>()=>{o.current&&clearTimeout(o.current)},[]);const g=d.useMemo(()=>{if(!h.trim())return a;const s=h.toLowerCase();return a.filter(l=>l.title.toLowerCase().includes(s)||l.preview?.toLowerCase().includes(s))},[a,h]),v=d.useMemo(()=>z(g),[g]),B=d.useCallback(s=>{const l=s.target.value;T(l),x?.(l)},[x]),k=d.useCallback(s=>{n?.(s),m&&f&&f(!0)},[n,m,f]),F=d.useCallback((s,l)=>{s.stopPropagation(),p===l?(u?.(l),j(null),o.current&&clearTimeout(o.current)):(j(l),o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{j(null)},3e3))},[p,u]),M=y.some(s=>(v.get(s)?.length??0)>0);return e.jsxs(e.Fragment,{children:[!m&&e.jsx("div",{className:t.default.sidebarOverlay,onClick:()=>f?.(!0),"aria-hidden":"true"}),e.jsxs("aside",{className:[t.default.sidebar,m&&t.default.sidebarCollapsed,!m&&t.default.sidebarOpen,I].filter(Boolean).join(" "),...D,children:[e.jsx("div",{className:t.default.sidebarHeader,children:w||e.jsxs(e.Fragment,{children:[e.jsx("button",{className:[t.default.inputButton,t.default.inputButtonPrimary,t.default.sidebarNewButton].filter(Boolean).join(" "),onClick:b,"aria-label":"New conversation",children:e.jsxs("span",{className:t.default.sidebarNewButtonInner,children:[e.jsx(c.Plus,{size:18}),e.jsx("span",{children:"New Chat"})]})}),e.jsx("button",{className:[t.default.inputButton,t.default.sidebarCloseButton].join(" "),onClick:()=>f?.(!0),"aria-label":"Close sidebar",children:e.jsx(c.X,{size:20})})]})}),e.jsx("div",{className:t.default.sidebarSearch,children:e.jsxs("div",{className:t.default.sidebarSearchWrapper,children:[e.jsx(c.Search,{size:16,className:t.default.sidebarSearchIcon}),e.jsx("input",{type:"search",className:[t.default.sidebarSearchInput,t.default.sidebarSearchInputWithIcon].join(" "),placeholder:"Search conversations...",value:h,onChange:B,"aria-label":"Search conversations"})]})}),e.jsx("div",{className:t.default.sidebarList,role:"list","aria-label":"Conversations",children:M?y.map(s=>{const l=v.get(s)??[];return l.length===0?null:e.jsxs("div",{children:[e.jsx("div",{className:t.default.sidebarGroupHeader,children:O[s]}),l.map(i=>e.jsxs("button",{className:[t.default.sidebarItem,i.id===r&&t.default.sidebarItemActive].filter(Boolean).join(" "),onClick:()=>k(i.id),role:"listitem","aria-selected":i.id===r,"aria-label":`Conversation: ${i.title}`,children:[e.jsx(c.MessageSquare,{size:18,className:t.default.sidebarItemIcon}),e.jsxs("div",{className:t.default.sidebarItemContent,children:[e.jsx("span",{className:t.default.sidebarItemTitle,children:i.title}),i.preview&&e.jsx("span",{className:t.default.sidebarItemPreview,children:i.preview})]}),e.jsx("span",{className:t.default.sidebarItemDate,children:P(i.updatedAt)}),u&&e.jsx("button",{className:t.default.sidebarItemDelete,onClick:q=>F(q,i.id),"aria-label":p===i.id?`Confirm delete ${i.title}`:`Delete ${i.title}`,children:p===i.id?e.jsx("span",{className:t.default.sidebarItemDeleteConfirm,children:"Delete?"}):e.jsx(c.Trash2,{size:16})})]},i.id))]},s)}):e.jsxs("div",{className:t.default.sidebarEmpty,children:[e.jsx(c.MessageSquare,{size:32,className:t.default.sidebarEmptyIcon}),e.jsx("p",{children:h?"No conversations found":"No conversations yet"})]})}),N&&e.jsx("div",{className:t.default.sidebarFooter,children:N})]})]})};S.displayName="ChatSidebar";exports.ChatSidebar=S;
2
2
  //# sourceMappingURL=index155.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index155.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index155.cjs","sources":["../src/components/Chat/components/ChatSidebar.tsx"],"sourcesContent":["/**\n * ChatSidebar Component\n *\n * Sidebar with conversation history, search, and management actions.\n * Conversations are grouped by date (Today, Yesterday, Previous 7 days, etc.)\n */\n\nimport React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from \"react\";\nimport { Plus, Search, Trash2, MessageSquare, X } from \"lucide-react\";\nimport type { ChatSidebarProps, ChatConversation } from \"../Chat.types\";\nimport styles from \"../Chat.module.css\";\n\n// Date grouping types\ntype DateGroup = \"today\" | \"yesterday\" | \"previous7\" | \"previous30\" | \"older\";\n\nconst groupLabels: Record<DateGroup, string> = {\n today: \"Today\",\n yesterday: \"Yesterday\",\n previous7: \"Previous 7 days\",\n previous30: \"Previous 30 days\",\n older: \"Older\",\n};\n\n// Order of date groups for rendering\nconst groupOrder: DateGroup[] = [\n \"today\",\n \"yesterday\",\n \"previous7\",\n \"previous30\",\n \"older\",\n];\n\n// Get the date group for a given date\nconst getDateGroup = (date: Date): DateGroup => {\n const now = new Date();\n const startOfToday = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n );\n const diff =\n startOfToday.getTime() -\n new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n const days = diff / (1000 * 60 * 60 * 24);\n\n if (days < 1) return \"today\";\n if (days < 2) return \"yesterday\";\n if (days < 7) return \"previous7\";\n if (days < 30) return \"previous30\";\n return \"older\";\n};\n\n// Format date for display (shown on individual items)\nconst formatDate = (date: Date): string => {\n const group = getDateGroup(date);\n\n if (group === \"today\") {\n return new Intl.DateTimeFormat(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n }).format(date);\n } else if (group === \"yesterday\") {\n return \"Yesterday\";\n } else if (group === \"previous7\") {\n return new Intl.DateTimeFormat(\"en-US\", {\n weekday: \"short\",\n }).format(date);\n } else {\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n }).format(date);\n }\n};\n\n// Group conversations by date\nconst groupConversationsByDate = (\n conversations: ChatConversation[],\n): Map<DateGroup, ChatConversation[]> => {\n const groups = new Map<DateGroup, ChatConversation[]>();\n\n // Initialize all groups\n groupOrder.forEach((group) => groups.set(group, []));\n\n // Sort and group conversations\n conversations.forEach((conv) => {\n const group = getDateGroup(conv.updatedAt);\n groups.get(group)?.push(conv);\n });\n\n return groups;\n};\n\nexport const ChatSidebar: React.FC<ChatSidebarProps> = ({\n conversations = [],\n activeConversationId,\n onSelectConversation,\n onNewConversation,\n onDeleteConversation,\n onSearch,\n header,\n footer,\n collapsed = false,\n onCollapsedChange,\n className,\n ...rest\n}) => {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null);\n const confirmTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n\n // Clear confirm timer on unmount\n useEffect(() => {\n return () => {\n if (confirmTimerRef.current) {\n clearTimeout(confirmTimerRef.current);\n }\n };\n }, []);\n\n // Filter conversations based on search\n const filteredConversations = useMemo(() => {\n if (!searchQuery.trim()) return conversations;\n\n const query = searchQuery.toLowerCase();\n return conversations.filter(\n (conv) =>\n conv.title.toLowerCase().includes(query) ||\n conv.preview?.toLowerCase().includes(query),\n );\n }, [conversations, searchQuery]);\n\n // Group filtered conversations by date\n const groupedConversations = useMemo(() => {\n return groupConversationsByDate(filteredConversations);\n }, [filteredConversations]);\n\n // Handle search input\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setSearchQuery(value);\n onSearch?.(value);\n },\n [onSearch],\n );\n\n // Handle conversation selection\n const handleSelectConversation = useCallback(\n (id: string) => {\n onSelectConversation?.(id);\n // Close sidebar on mobile after selection\n if (collapsed && onCollapsedChange) {\n onCollapsedChange(true);\n }\n },\n [onSelectConversation, collapsed, onCollapsedChange],\n );\n\n // Handle delete with inline confirmation\n const handleDelete = useCallback(\n (e: React.MouseEvent, id: string) => {\n e.stopPropagation();\n\n if (confirmDeleteId === id) {\n // Second click: actually delete\n onDeleteConversation?.(id);\n setConfirmDeleteId(null);\n if (confirmTimerRef.current) {\n clearTimeout(confirmTimerRef.current);\n }\n } else {\n // First click: show confirmation\n setConfirmDeleteId(id);\n // Auto-reset after 3 seconds\n if (confirmTimerRef.current) {\n clearTimeout(confirmTimerRef.current);\n }\n confirmTimerRef.current = setTimeout(() => {\n setConfirmDeleteId(null);\n }, 3000);\n }\n },\n [confirmDeleteId, onDeleteConversation],\n );\n\n // Check if there are any conversations to show\n const hasConversations = groupOrder.some(\n (group) => (groupedConversations.get(group)?.length ?? 0) > 0,\n );\n\n return (\n <>\n {/* Mobile overlay */}\n {!collapsed && (\n <div\n className={styles.sidebarOverlay}\n onClick={() => onCollapsedChange?.(true)}\n aria-hidden=\"true\"\n />\n )}\n\n <aside\n className={[\n styles.sidebar,\n collapsed && styles.sidebarCollapsed,\n !collapsed && styles.sidebarOpen,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {/* Header */}\n <div className={styles.sidebarHeader}>\n {header || (\n <>\n <button\n className={[\n styles.inputButton,\n styles.inputButtonPrimary,\n styles.sidebarNewButton,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={onNewConversation}\n aria-label=\"New conversation\"\n >\n <span className={styles.sidebarNewButtonInner}>\n <Plus size={18} />\n <span>New Chat</span>\n </span>\n </button>\n\n {/* Mobile close button */}\n <button\n className={[styles.inputButton, styles.sidebarCloseButton].join(\n \" \",\n )}\n onClick={() => onCollapsedChange?.(true)}\n aria-label=\"Close sidebar\"\n >\n <X size={20} />\n </button>\n </>\n )}\n </div>\n\n {/* Search */}\n <div className={styles.sidebarSearch}>\n <div className={styles.sidebarSearchWrapper}>\n <Search size={16} className={styles.sidebarSearchIcon} />\n <input\n type=\"search\"\n className={[\n styles.sidebarSearchInput,\n styles.sidebarSearchInputWithIcon,\n ].join(\" \")}\n placeholder=\"Search conversations...\"\n value={searchQuery}\n onChange={handleSearchChange}\n aria-label=\"Search conversations\"\n />\n </div>\n </div>\n\n {/* Conversation list with date grouping */}\n <div\n className={styles.sidebarList}\n role=\"list\"\n aria-label=\"Conversations\"\n >\n {!hasConversations ? (\n <div className={styles.sidebarEmpty}>\n <MessageSquare size={32} className={styles.sidebarEmptyIcon} />\n <p>\n {searchQuery\n ? \"No conversations found\"\n : \"No conversations yet\"}\n </p>\n </div>\n ) : (\n groupOrder.map((group) => {\n const groupConvs = groupedConversations.get(group) ?? [];\n if (groupConvs.length === 0) return null;\n\n return (\n <div key={group}>\n <div className={styles.sidebarGroupHeader}>\n {groupLabels[group]}\n </div>\n {groupConvs.map((conversation) => (\n <button\n key={conversation.id}\n className={[\n styles.sidebarItem,\n conversation.id === activeConversationId &&\n styles.sidebarItemActive,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => handleSelectConversation(conversation.id)}\n role=\"listitem\"\n aria-selected={conversation.id === activeConversationId}\n aria-label={`Conversation: ${conversation.title}`}\n >\n <MessageSquare\n size={18}\n className={styles.sidebarItemIcon}\n />\n\n <div className={styles.sidebarItemContent}>\n <span className={styles.sidebarItemTitle}>\n {conversation.title}\n </span>\n {conversation.preview && (\n <span className={styles.sidebarItemPreview}>\n {conversation.preview}\n </span>\n )}\n </div>\n\n <span className={styles.sidebarItemDate}>\n {formatDate(conversation.updatedAt)}\n </span>\n\n {onDeleteConversation && (\n <button\n className={styles.sidebarItemDelete}\n onClick={(e) => handleDelete(e, conversation.id)}\n aria-label={\n confirmDeleteId === conversation.id\n ? `Confirm delete ${conversation.title}`\n : `Delete ${conversation.title}`\n }\n >\n {confirmDeleteId === conversation.id ? (\n <span className={styles.sidebarItemDeleteConfirm}>\n Delete?\n </span>\n ) : (\n <Trash2 size={16} />\n )}\n </button>\n )}\n </button>\n ))}\n </div>\n );\n })\n )}\n </div>\n\n {/* Footer */}\n {footer && <div className={styles.sidebarFooter}>{footer}</div>}\n </aside>\n </>\n );\n};\n\nChatSidebar.displayName = \"ChatSidebar\";\n"],"names":["groupLabels","groupOrder","getDateGroup","date","now","days","formatDate","group","groupConversationsByDate","conversations","groups","conv","ChatSidebar","activeConversationId","onSelectConversation","onNewConversation","onDeleteConversation","onSearch","header","footer","collapsed","onCollapsedChange","className","rest","searchQuery","setSearchQuery","useState","confirmDeleteId","setConfirmDeleteId","confirmTimerRef","useRef","useEffect","filteredConversations","useMemo","query","groupedConversations","handleSearchChange","useCallback","e","value","handleSelectConversation","id","handleDelete","hasConversations","jsxs","Fragment","jsx","styles","Plus","X","Search","groupConvs","conversation","MessageSquare","Trash2"],"mappings":"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"}
package/dist/index155.mjs CHANGED
@@ -1,34 +1,218 @@
1
- const e = "_container_1ggcm_12", c = "_disabled_1ggcm_18", _ = "_labelWrapper_1ggcm_26", r = "_input_1ggcm_43", g = "_checkbox_1ggcm_55", s = "_checkmark_1ggcm_76", o = "_sm_1ggcm_92", t = "_md_1ggcm_102", n = "_lg_1ggcm_112", a = "_error_1ggcm_199", l = "_label_1ggcm_26", m = "_required_1ggcm_232", d = "_helperText_1ggcm_238", p = "_errorMessage_1ggcm_256", b = {
2
- container: e,
3
- disabled: c,
4
- labelWrapper: _,
5
- input: r,
6
- checkbox: g,
7
- checkmark: s,
8
- sm: o,
9
- md: t,
10
- lg: n,
11
- error: a,
12
- label: l,
13
- required: m,
14
- helperText: d,
15
- errorMessage: p
1
+ import { jsxs as l, Fragment as C, jsx as r } from "react/jsx-runtime";
2
+ import { useState as D, useRef as Y, useEffect as x, useMemo as S, useCallback as y } from "react";
3
+ import { Plus as A, X as U, Search as $, MessageSquare as T, Trash2 as q } from "lucide-react";
4
+ import e from "./index142.mjs";
5
+ const G = {
6
+ today: "Today",
7
+ yesterday: "Yesterday",
8
+ previous7: "Previous 7 days",
9
+ previous30: "Previous 30 days",
10
+ older: "Older"
11
+ }, N = [
12
+ "today",
13
+ "yesterday",
14
+ "previous7",
15
+ "previous30",
16
+ "older"
17
+ ], B = (t) => {
18
+ const a = /* @__PURE__ */ new Date(), d = (new Date(
19
+ a.getFullYear(),
20
+ a.getMonth(),
21
+ a.getDate()
22
+ ).getTime() - new Date(t.getFullYear(), t.getMonth(), t.getDate()).getTime()) / (1e3 * 60 * 60 * 24);
23
+ return d < 1 ? "today" : d < 2 ? "yesterday" : d < 7 ? "previous7" : d < 30 ? "previous30" : "older";
24
+ }, H = (t) => {
25
+ const a = B(t);
26
+ return a === "today" ? new Intl.DateTimeFormat("en-US", {
27
+ hour: "numeric",
28
+ minute: "2-digit"
29
+ }).format(t) : a === "yesterday" ? "Yesterday" : a === "previous7" ? new Intl.DateTimeFormat("en-US", {
30
+ weekday: "short"
31
+ }).format(t) : new Intl.DateTimeFormat("en-US", {
32
+ month: "short",
33
+ day: "numeric"
34
+ }).format(t);
35
+ }, Q = (t) => {
36
+ const a = /* @__PURE__ */ new Map();
37
+ return N.forEach((o) => a.set(o, [])), t.forEach((o) => {
38
+ const f = B(o.updatedAt);
39
+ a.get(f)?.push(o);
40
+ }), a;
41
+ }, R = ({
42
+ conversations: t = [],
43
+ activeConversationId: a,
44
+ onSelectConversation: o,
45
+ onNewConversation: f,
46
+ onDeleteConversation: d,
47
+ onSearch: g,
48
+ header: j,
49
+ footer: v,
50
+ collapsed: u = !1,
51
+ onCollapsedChange: m,
52
+ className: k,
53
+ ...F
54
+ }) => {
55
+ const [h, z] = D(""), [p, b] = D(null), c = Y(
56
+ void 0
57
+ );
58
+ x(() => () => {
59
+ c.current && clearTimeout(c.current);
60
+ }, []);
61
+ const w = S(() => {
62
+ if (!h.trim()) return t;
63
+ const s = h.toLowerCase();
64
+ return t.filter(
65
+ (n) => n.title.toLowerCase().includes(s) || n.preview?.toLowerCase().includes(s)
66
+ );
67
+ }, [t, h]), I = S(() => Q(w), [w]), O = y(
68
+ (s) => {
69
+ const n = s.target.value;
70
+ z(n), g?.(n);
71
+ },
72
+ [g]
73
+ ), P = y(
74
+ (s) => {
75
+ o?.(s), u && m && m(!0);
76
+ },
77
+ [o, u, m]
78
+ ), E = y(
79
+ (s, n) => {
80
+ s.stopPropagation(), p === n ? (d?.(n), b(null), c.current && clearTimeout(c.current)) : (b(n), c.current && clearTimeout(c.current), c.current = setTimeout(() => {
81
+ b(null);
82
+ }, 3e3));
83
+ },
84
+ [p, d]
85
+ ), L = N.some(
86
+ (s) => (I.get(s)?.length ?? 0) > 0
87
+ );
88
+ return /* @__PURE__ */ l(C, { children: [
89
+ !u && /* @__PURE__ */ r(
90
+ "div",
91
+ {
92
+ className: e.sidebarOverlay,
93
+ onClick: () => m?.(!0),
94
+ "aria-hidden": "true"
95
+ }
96
+ ),
97
+ /* @__PURE__ */ l(
98
+ "aside",
99
+ {
100
+ className: [
101
+ e.sidebar,
102
+ u && e.sidebarCollapsed,
103
+ !u && e.sidebarOpen,
104
+ k
105
+ ].filter(Boolean).join(" "),
106
+ ...F,
107
+ children: [
108
+ /* @__PURE__ */ r("div", { className: e.sidebarHeader, children: j || /* @__PURE__ */ l(C, { children: [
109
+ /* @__PURE__ */ r(
110
+ "button",
111
+ {
112
+ className: [
113
+ e.inputButton,
114
+ e.inputButtonPrimary,
115
+ e.sidebarNewButton
116
+ ].filter(Boolean).join(" "),
117
+ onClick: f,
118
+ "aria-label": "New conversation",
119
+ children: /* @__PURE__ */ l("span", { className: e.sidebarNewButtonInner, children: [
120
+ /* @__PURE__ */ r(A, { size: 18 }),
121
+ /* @__PURE__ */ r("span", { children: "New Chat" })
122
+ ] })
123
+ }
124
+ ),
125
+ /* @__PURE__ */ r(
126
+ "button",
127
+ {
128
+ className: [e.inputButton, e.sidebarCloseButton].join(
129
+ " "
130
+ ),
131
+ onClick: () => m?.(!0),
132
+ "aria-label": "Close sidebar",
133
+ children: /* @__PURE__ */ r(U, { size: 20 })
134
+ }
135
+ )
136
+ ] }) }),
137
+ /* @__PURE__ */ r("div", { className: e.sidebarSearch, children: /* @__PURE__ */ l("div", { className: e.sidebarSearchWrapper, children: [
138
+ /* @__PURE__ */ r($, { size: 16, className: e.sidebarSearchIcon }),
139
+ /* @__PURE__ */ r(
140
+ "input",
141
+ {
142
+ type: "search",
143
+ className: [
144
+ e.sidebarSearchInput,
145
+ e.sidebarSearchInputWithIcon
146
+ ].join(" "),
147
+ placeholder: "Search conversations...",
148
+ value: h,
149
+ onChange: O,
150
+ "aria-label": "Search conversations"
151
+ }
152
+ )
153
+ ] }) }),
154
+ /* @__PURE__ */ r(
155
+ "div",
156
+ {
157
+ className: e.sidebarList,
158
+ role: "list",
159
+ "aria-label": "Conversations",
160
+ children: L ? N.map((s) => {
161
+ const n = I.get(s) ?? [];
162
+ return n.length === 0 ? null : /* @__PURE__ */ l("div", { children: [
163
+ /* @__PURE__ */ r("div", { className: e.sidebarGroupHeader, children: G[s] }),
164
+ n.map((i) => /* @__PURE__ */ l(
165
+ "button",
166
+ {
167
+ className: [
168
+ e.sidebarItem,
169
+ i.id === a && e.sidebarItemActive
170
+ ].filter(Boolean).join(" "),
171
+ onClick: () => P(i.id),
172
+ role: "listitem",
173
+ "aria-selected": i.id === a,
174
+ "aria-label": `Conversation: ${i.title}`,
175
+ children: [
176
+ /* @__PURE__ */ r(
177
+ T,
178
+ {
179
+ size: 18,
180
+ className: e.sidebarItemIcon
181
+ }
182
+ ),
183
+ /* @__PURE__ */ l("div", { className: e.sidebarItemContent, children: [
184
+ /* @__PURE__ */ r("span", { className: e.sidebarItemTitle, children: i.title }),
185
+ i.preview && /* @__PURE__ */ r("span", { className: e.sidebarItemPreview, children: i.preview })
186
+ ] }),
187
+ /* @__PURE__ */ r("span", { className: e.sidebarItemDate, children: H(i.updatedAt) }),
188
+ d && /* @__PURE__ */ r(
189
+ "button",
190
+ {
191
+ className: e.sidebarItemDelete,
192
+ onClick: (M) => E(M, i.id),
193
+ "aria-label": p === i.id ? `Confirm delete ${i.title}` : `Delete ${i.title}`,
194
+ children: p === i.id ? /* @__PURE__ */ r("span", { className: e.sidebarItemDeleteConfirm, children: "Delete?" }) : /* @__PURE__ */ r(q, { size: 16 })
195
+ }
196
+ )
197
+ ]
198
+ },
199
+ i.id
200
+ ))
201
+ ] }, s);
202
+ }) : /* @__PURE__ */ l("div", { className: e.sidebarEmpty, children: [
203
+ /* @__PURE__ */ r(T, { size: 32, className: e.sidebarEmptyIcon }),
204
+ /* @__PURE__ */ r("p", { children: h ? "No conversations found" : "No conversations yet" })
205
+ ] })
206
+ }
207
+ ),
208
+ v && /* @__PURE__ */ r("div", { className: e.sidebarFooter, children: v })
209
+ ]
210
+ }
211
+ )
212
+ ] });
16
213
  };
214
+ R.displayName = "ChatSidebar";
17
215
  export {
18
- g as checkbox,
19
- s as checkmark,
20
- e as container,
21
- b as default,
22
- c as disabled,
23
- a as error,
24
- p as errorMessage,
25
- d as helperText,
26
- r as input,
27
- l as label,
28
- _ as labelWrapper,
29
- n as lg,
30
- t as md,
31
- m as required,
32
- o as sm
216
+ R as ChatSidebar
33
217
  };
34
218
  //# sourceMappingURL=index155.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index155.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index155.mjs","sources":["../src/components/Chat/components/ChatSidebar.tsx"],"sourcesContent":["/**\n * ChatSidebar Component\n *\n * Sidebar with conversation history, search, and management actions.\n * Conversations are grouped by date (Today, Yesterday, Previous 7 days, etc.)\n */\n\nimport React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from \"react\";\nimport { Plus, Search, Trash2, MessageSquare, X } from \"lucide-react\";\nimport type { ChatSidebarProps, ChatConversation } from \"../Chat.types\";\nimport styles from \"../Chat.module.css\";\n\n// Date grouping types\ntype DateGroup = \"today\" | \"yesterday\" | \"previous7\" | \"previous30\" | \"older\";\n\nconst groupLabels: Record<DateGroup, string> = {\n today: \"Today\",\n yesterday: \"Yesterday\",\n previous7: \"Previous 7 days\",\n previous30: \"Previous 30 days\",\n older: \"Older\",\n};\n\n// Order of date groups for rendering\nconst groupOrder: DateGroup[] = [\n \"today\",\n \"yesterday\",\n \"previous7\",\n \"previous30\",\n \"older\",\n];\n\n// Get the date group for a given date\nconst getDateGroup = (date: Date): DateGroup => {\n const now = new Date();\n const startOfToday = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n );\n const diff =\n startOfToday.getTime() -\n new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n const days = diff / (1000 * 60 * 60 * 24);\n\n if (days < 1) return \"today\";\n if (days < 2) return \"yesterday\";\n if (days < 7) return \"previous7\";\n if (days < 30) return \"previous30\";\n return \"older\";\n};\n\n// Format date for display (shown on individual items)\nconst formatDate = (date: Date): string => {\n const group = getDateGroup(date);\n\n if (group === \"today\") {\n return new Intl.DateTimeFormat(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n }).format(date);\n } else if (group === \"yesterday\") {\n return \"Yesterday\";\n } else if (group === \"previous7\") {\n return new Intl.DateTimeFormat(\"en-US\", {\n weekday: \"short\",\n }).format(date);\n } else {\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n }).format(date);\n }\n};\n\n// Group conversations by date\nconst groupConversationsByDate = (\n conversations: ChatConversation[],\n): Map<DateGroup, ChatConversation[]> => {\n const groups = new Map<DateGroup, ChatConversation[]>();\n\n // Initialize all groups\n groupOrder.forEach((group) => groups.set(group, []));\n\n // Sort and group conversations\n conversations.forEach((conv) => {\n const group = getDateGroup(conv.updatedAt);\n groups.get(group)?.push(conv);\n });\n\n return groups;\n};\n\nexport const ChatSidebar: React.FC<ChatSidebarProps> = ({\n conversations = [],\n activeConversationId,\n onSelectConversation,\n onNewConversation,\n onDeleteConversation,\n onSearch,\n header,\n footer,\n collapsed = false,\n onCollapsedChange,\n className,\n ...rest\n}) => {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null);\n const confirmTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n\n // Clear confirm timer on unmount\n useEffect(() => {\n return () => {\n if (confirmTimerRef.current) {\n clearTimeout(confirmTimerRef.current);\n }\n };\n }, []);\n\n // Filter conversations based on search\n const filteredConversations = useMemo(() => {\n if (!searchQuery.trim()) return conversations;\n\n const query = searchQuery.toLowerCase();\n return conversations.filter(\n (conv) =>\n conv.title.toLowerCase().includes(query) ||\n conv.preview?.toLowerCase().includes(query),\n );\n }, [conversations, searchQuery]);\n\n // Group filtered conversations by date\n const groupedConversations = useMemo(() => {\n return groupConversationsByDate(filteredConversations);\n }, [filteredConversations]);\n\n // Handle search input\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setSearchQuery(value);\n onSearch?.(value);\n },\n [onSearch],\n );\n\n // Handle conversation selection\n const handleSelectConversation = useCallback(\n (id: string) => {\n onSelectConversation?.(id);\n // Close sidebar on mobile after selection\n if (collapsed && onCollapsedChange) {\n onCollapsedChange(true);\n }\n },\n [onSelectConversation, collapsed, onCollapsedChange],\n );\n\n // Handle delete with inline confirmation\n const handleDelete = useCallback(\n (e: React.MouseEvent, id: string) => {\n e.stopPropagation();\n\n if (confirmDeleteId === id) {\n // Second click: actually delete\n onDeleteConversation?.(id);\n setConfirmDeleteId(null);\n if (confirmTimerRef.current) {\n clearTimeout(confirmTimerRef.current);\n }\n } else {\n // First click: show confirmation\n setConfirmDeleteId(id);\n // Auto-reset after 3 seconds\n if (confirmTimerRef.current) {\n clearTimeout(confirmTimerRef.current);\n }\n confirmTimerRef.current = setTimeout(() => {\n setConfirmDeleteId(null);\n }, 3000);\n }\n },\n [confirmDeleteId, onDeleteConversation],\n );\n\n // Check if there are any conversations to show\n const hasConversations = groupOrder.some(\n (group) => (groupedConversations.get(group)?.length ?? 0) > 0,\n );\n\n return (\n <>\n {/* Mobile overlay */}\n {!collapsed && (\n <div\n className={styles.sidebarOverlay}\n onClick={() => onCollapsedChange?.(true)}\n aria-hidden=\"true\"\n />\n )}\n\n <aside\n className={[\n styles.sidebar,\n collapsed && styles.sidebarCollapsed,\n !collapsed && styles.sidebarOpen,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {/* Header */}\n <div className={styles.sidebarHeader}>\n {header || (\n <>\n <button\n className={[\n styles.inputButton,\n styles.inputButtonPrimary,\n styles.sidebarNewButton,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={onNewConversation}\n aria-label=\"New conversation\"\n >\n <span className={styles.sidebarNewButtonInner}>\n <Plus size={18} />\n <span>New Chat</span>\n </span>\n </button>\n\n {/* Mobile close button */}\n <button\n className={[styles.inputButton, styles.sidebarCloseButton].join(\n \" \",\n )}\n onClick={() => onCollapsedChange?.(true)}\n aria-label=\"Close sidebar\"\n >\n <X size={20} />\n </button>\n </>\n )}\n </div>\n\n {/* Search */}\n <div className={styles.sidebarSearch}>\n <div className={styles.sidebarSearchWrapper}>\n <Search size={16} className={styles.sidebarSearchIcon} />\n <input\n type=\"search\"\n className={[\n styles.sidebarSearchInput,\n styles.sidebarSearchInputWithIcon,\n ].join(\" \")}\n placeholder=\"Search conversations...\"\n value={searchQuery}\n onChange={handleSearchChange}\n aria-label=\"Search conversations\"\n />\n </div>\n </div>\n\n {/* Conversation list with date grouping */}\n <div\n className={styles.sidebarList}\n role=\"list\"\n aria-label=\"Conversations\"\n >\n {!hasConversations ? (\n <div className={styles.sidebarEmpty}>\n <MessageSquare size={32} className={styles.sidebarEmptyIcon} />\n <p>\n {searchQuery\n ? \"No conversations found\"\n : \"No conversations yet\"}\n </p>\n </div>\n ) : (\n groupOrder.map((group) => {\n const groupConvs = groupedConversations.get(group) ?? [];\n if (groupConvs.length === 0) return null;\n\n return (\n <div key={group}>\n <div className={styles.sidebarGroupHeader}>\n {groupLabels[group]}\n </div>\n {groupConvs.map((conversation) => (\n <button\n key={conversation.id}\n className={[\n styles.sidebarItem,\n conversation.id === activeConversationId &&\n styles.sidebarItemActive,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => handleSelectConversation(conversation.id)}\n role=\"listitem\"\n aria-selected={conversation.id === activeConversationId}\n aria-label={`Conversation: ${conversation.title}`}\n >\n <MessageSquare\n size={18}\n className={styles.sidebarItemIcon}\n />\n\n <div className={styles.sidebarItemContent}>\n <span className={styles.sidebarItemTitle}>\n {conversation.title}\n </span>\n {conversation.preview && (\n <span className={styles.sidebarItemPreview}>\n {conversation.preview}\n </span>\n )}\n </div>\n\n <span className={styles.sidebarItemDate}>\n {formatDate(conversation.updatedAt)}\n </span>\n\n {onDeleteConversation && (\n <button\n className={styles.sidebarItemDelete}\n onClick={(e) => handleDelete(e, conversation.id)}\n aria-label={\n confirmDeleteId === conversation.id\n ? `Confirm delete ${conversation.title}`\n : `Delete ${conversation.title}`\n }\n >\n {confirmDeleteId === conversation.id ? (\n <span className={styles.sidebarItemDeleteConfirm}>\n Delete?\n </span>\n ) : (\n <Trash2 size={16} />\n )}\n </button>\n )}\n </button>\n ))}\n </div>\n );\n })\n )}\n </div>\n\n {/* Footer */}\n {footer && <div className={styles.sidebarFooter}>{footer}</div>}\n </aside>\n </>\n );\n};\n\nChatSidebar.displayName = \"ChatSidebar\";\n"],"names":["groupLabels","groupOrder","getDateGroup","date","now","days","formatDate","group","groupConversationsByDate","conversations","groups","conv","ChatSidebar","activeConversationId","onSelectConversation","onNewConversation","onDeleteConversation","onSearch","header","footer","collapsed","onCollapsedChange","className","rest","searchQuery","setSearchQuery","useState","confirmDeleteId","setConfirmDeleteId","confirmTimerRef","useRef","useEffect","filteredConversations","useMemo","query","groupedConversations","handleSearchChange","useCallback","e","value","handleSelectConversation","id","handleDelete","hasConversations","jsxs","Fragment","jsx","styles","Plus","X","Search","groupConvs","conversation","MessageSquare","Trash2"],"mappings":"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"}
package/dist/index156.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_overlay_13db5_9",o="_overlayVisible_13db5_21",_="_backdrop_13db5_30",t="_drawer_13db5_37",r="_left_13db5_51",d="_drawerVisible_13db5_58",s="_right_13db5_62",b="_top_13db5_73",l="_bottom_13db5_84",i="_closeButton_13db5_154",a="_header_13db5_188",c="_body_13db5_199",n="_footer_13db5_208",y={overlay:e,overlayVisible:o,backdrop:_,drawer:t,left:r,drawerVisible:d,right:s,top:b,bottom:l,"size-sm":"_size-sm_13db5_99","size-md":"_size-md_13db5_104","size-lg":"_size-lg_13db5_109","size-xl":"_size-xl_13db5_114","size-full":"_size-full_13db5_119",closeButton:i,header:a,body:c,footer:n};exports.backdrop=_;exports.body=c;exports.bottom=l;exports.closeButton=i;exports.default=y;exports.drawer=t;exports.drawerVisible=d;exports.footer=n;exports.header=a;exports.left=r;exports.overlay=e;exports.overlayVisible=o;exports.right=s;exports.top=b;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o="_navbar_8ho3g_8",e="_solid_8ho3g_23",s="_transparent_8ho3g_27",n="_glass_8ho3g_31",t="_schemeLight_8ho3g_40",_="_schemeDark_8ho3g_46",g="_brand_8ho3g_56",c="_link_8ho3g_60",l="_active_8ho3g_69",a="_toggleLine_8ho3g_74",i="_bordered_8ho3g_101",h="_sticky_8ho3g_109",r="_sm_8ho3g_118",d="_md_8ho3g_122",p="_lg_8ho3g_126",m="_nav_8ho3g_8",b="_actions_8ho3g_207",v="_toggle_8ho3g_74",k="_toggleIcon_8ho3g_241",O="_toggleOpen_8ho3g_260",D="_collapse_8ho3g_277",L="_collapseOpen_8ho3g_281",u="_slideDown_8ho3g_1",y="_collapseActions_8ho3g_317",w={navbar:o,solid:e,transparent:s,glass:n,schemeLight:t,schemeDark:_,brand:g,link:c,active:l,toggleLine:a,bordered:i,sticky:h,sm:r,md:d,lg:p,nav:m,actions:b,toggle:v,toggleIcon:k,toggleOpen:O,collapse:D,collapseOpen:L,slideDown:u,collapseActions:y};exports.actions=b;exports.active=l;exports.bordered=i;exports.brand=g;exports.collapse=D;exports.collapseActions=y;exports.collapseOpen=L;exports.default=w;exports.glass=n;exports.lg=p;exports.link=c;exports.md=d;exports.nav=m;exports.navbar=o;exports.schemeDark=_;exports.schemeLight=t;exports.slideDown=u;exports.sm=r;exports.solid=e;exports.sticky=h;exports.toggle=v;exports.toggleIcon=k;exports.toggleLine=a;exports.toggleOpen=O;exports.transparent=s;
2
2
  //# sourceMappingURL=index156.cjs.map