@rpcbase/ui 0.216.0 → 0.218.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (562) hide show
  1. package/dist/components/FilesUploadField/index.d.ts.map +1 -1
  2. package/dist/components/HourPickerField/index.d.ts.map +1 -1
  3. package/dist/components/Notifications/NotificationsDrawer.d.ts.map +1 -1
  4. package/dist/index10.js +544 -489
  5. package/dist/index10.js.map +1 -1
  6. package/dist/index100.js +5 -24
  7. package/dist/index100.js.map +1 -1
  8. package/dist/index101.js +4 -6
  9. package/dist/index101.js.map +1 -1
  10. package/dist/index102.js +7 -3
  11. package/dist/index102.js.map +1 -1
  12. package/dist/index103.js +5 -6
  13. package/dist/index103.js.map +1 -1
  14. package/dist/index104.js +4 -5
  15. package/dist/index104.js.map +1 -1
  16. package/dist/index105.js +3 -3
  17. package/dist/index105.js.map +1 -1
  18. package/dist/index106.js +5 -4
  19. package/dist/index106.js.map +1 -1
  20. package/dist/index107.js +145 -4
  21. package/dist/index107.js.map +1 -1
  22. package/dist/index108.js +39 -8
  23. package/dist/index108.js.map +1 -1
  24. package/dist/index109.js +4 -5
  25. package/dist/index109.js.map +1 -1
  26. package/dist/index110.js +7 -4
  27. package/dist/index110.js.map +1 -1
  28. package/dist/index111.js +13 -4
  29. package/dist/index111.js.map +1 -1
  30. package/dist/index112.js +13 -6
  31. package/dist/index112.js.map +1 -1
  32. package/dist/index113.js +7 -145
  33. package/dist/index113.js.map +1 -1
  34. package/dist/index114.js +30 -38
  35. package/dist/index114.js.map +1 -1
  36. package/dist/index115.js +10 -4
  37. package/dist/index115.js.map +1 -1
  38. package/dist/index116.js +10 -7
  39. package/dist/index116.js.map +1 -1
  40. package/dist/index117.js +8 -13
  41. package/dist/index117.js.map +1 -1
  42. package/dist/index118.js +13 -13
  43. package/dist/index118.js.map +1 -1
  44. package/dist/index119.js +100 -6
  45. package/dist/index119.js.map +1 -1
  46. package/dist/index120.js +20 -32
  47. package/dist/index120.js.map +1 -1
  48. package/dist/index121.js +52 -9
  49. package/dist/index121.js.map +1 -1
  50. package/dist/index122.js +71 -9
  51. package/dist/index122.js.map +1 -1
  52. package/dist/index123.js +9 -8
  53. package/dist/index123.js.map +1 -1
  54. package/dist/index124.js +20 -13
  55. package/dist/index124.js.map +1 -1
  56. package/dist/index125.js +16 -101
  57. package/dist/index125.js.map +1 -1
  58. package/dist/index126.js +24 -20
  59. package/dist/index126.js.map +1 -1
  60. package/dist/index127.js +6 -53
  61. package/dist/index127.js.map +1 -1
  62. package/dist/index128.js +5 -72
  63. package/dist/index128.js.map +1 -1
  64. package/dist/index129.js +23 -9
  65. package/dist/index129.js.map +1 -1
  66. package/dist/index130.js +33 -19
  67. package/dist/index130.js.map +1 -1
  68. package/dist/index131.js +16 -17
  69. package/dist/index131.js.map +1 -1
  70. package/dist/index132.js +6 -23
  71. package/dist/index132.js.map +1 -1
  72. package/dist/index133.js +4 -6
  73. package/dist/index133.js.map +1 -1
  74. package/dist/index134.js +4 -5
  75. package/dist/index134.js.map +1 -1
  76. package/dist/index135.js +4 -23
  77. package/dist/index135.js.map +1 -1
  78. package/dist/index136.js +5 -35
  79. package/dist/index136.js.map +1 -1
  80. package/dist/index137.js +4 -16
  81. package/dist/index137.js.map +1 -1
  82. package/dist/index138.js +5 -5
  83. package/dist/index138.js.map +1 -1
  84. package/dist/index139.js +24 -5
  85. package/dist/index139.js.map +1 -1
  86. package/dist/index140.js +7 -4
  87. package/dist/index140.js.map +1 -1
  88. package/dist/index141.js +6 -4
  89. package/dist/index141.js.map +1 -1
  90. package/dist/index142.js +5 -4
  91. package/dist/index142.js.map +1 -1
  92. package/dist/index143.js +3 -3
  93. package/dist/index143.js.map +1 -1
  94. package/dist/index144.js +3 -6
  95. package/dist/index144.js.map +1 -1
  96. package/dist/index145.js +5 -24
  97. package/dist/index145.js.map +1 -1
  98. package/dist/index146.js +3 -7
  99. package/dist/index146.js.map +1 -1
  100. package/dist/index147.js +4 -6
  101. package/dist/index147.js.map +1 -1
  102. package/dist/index148.js +3 -5
  103. package/dist/index148.js.map +1 -1
  104. package/dist/index149.js +3 -3
  105. package/dist/index149.js.map +1 -1
  106. package/dist/index150.js +3 -3
  107. package/dist/index150.js.map +1 -1
  108. package/dist/index151.js +46 -4
  109. package/dist/index151.js.map +1 -1
  110. package/dist/index152.js +229 -3
  111. package/dist/index152.js.map +1 -1
  112. package/dist/index153.js +22 -5
  113. package/dist/index153.js.map +1 -1
  114. package/dist/index154.js +24 -3
  115. package/dist/index154.js.map +1 -1
  116. package/dist/index155.js +400 -3
  117. package/dist/index155.js.map +1 -1
  118. package/dist/index156.js +5 -3
  119. package/dist/index156.js.map +1 -1
  120. package/dist/index157.js +61 -598
  121. package/dist/index157.js.map +1 -1
  122. package/dist/index158.js +2 -6
  123. package/dist/index158.js.map +1 -1
  124. package/dist/index159.js +351 -56
  125. package/dist/index159.js.map +1 -1
  126. package/dist/index16.js +167 -149
  127. package/dist/index16.js.map +1 -1
  128. package/dist/index160.js +262 -2
  129. package/dist/index160.js.map +1 -1
  130. package/dist/index161.js +50 -353
  131. package/dist/index161.js.map +1 -1
  132. package/dist/index162.js +45 -260
  133. package/dist/index162.js.map +1 -1
  134. package/dist/index163.js +150 -41
  135. package/dist/index163.js.map +1 -1
  136. package/dist/index164.js +105 -42
  137. package/dist/index164.js.map +1 -1
  138. package/dist/index165.js +24 -169
  139. package/dist/index165.js.map +1 -1
  140. package/dist/index166.js +8 -110
  141. package/dist/index166.js.map +1 -1
  142. package/dist/index167.js +4 -24
  143. package/dist/index167.js.map +1 -1
  144. package/dist/index168.js +6 -8
  145. package/dist/index168.js.map +1 -1
  146. package/dist/index169.js +4 -4
  147. package/dist/index169.js.map +1 -1
  148. package/dist/index170.js +466 -5
  149. package/dist/index170.js.map +1 -1
  150. package/dist/index171.js +185 -4
  151. package/dist/index171.js.map +1 -1
  152. package/dist/index172.js +65 -424
  153. package/dist/index172.js.map +1 -1
  154. package/dist/index173.js +223 -146
  155. package/dist/index173.js.map +1 -1
  156. package/dist/index174.js +9 -107
  157. package/dist/index174.js.map +1 -1
  158. package/dist/index175.js +37 -257
  159. package/dist/index175.js.map +1 -1
  160. package/dist/index176.js +4 -9
  161. package/dist/index176.js.map +1 -1
  162. package/dist/index177.js +56 -40
  163. package/dist/index177.js.map +1 -1
  164. package/dist/index178.js +8 -4
  165. package/dist/index178.js.map +1 -1
  166. package/dist/index179.js +65 -23
  167. package/dist/index179.js.map +1 -1
  168. package/dist/index180.js +20 -29
  169. package/dist/index180.js.map +1 -1
  170. package/dist/index181.js +17 -5
  171. package/dist/index181.js.map +1 -1
  172. package/dist/index182.js +4 -15
  173. package/dist/index182.js.map +1 -1
  174. package/dist/index183.js +4 -4
  175. package/dist/index183.js.map +1 -1
  176. package/dist/index184.js +6 -5
  177. package/dist/index184.js.map +1 -1
  178. package/dist/index185.js +4 -58
  179. package/dist/index185.js.map +1 -1
  180. package/dist/index186.js +6 -66
  181. package/dist/index186.js.map +1 -1
  182. package/dist/index187.js +16 -6
  183. package/dist/index187.js.map +1 -1
  184. package/dist/index188.js +4 -4
  185. package/dist/index188.js.map +1 -1
  186. package/dist/index189.js +4 -6
  187. package/dist/index189.js.map +1 -1
  188. package/dist/index190.js +12 -16
  189. package/dist/index190.js.map +1 -1
  190. package/dist/index191.js +9 -4
  191. package/dist/index191.js.map +1 -1
  192. package/dist/index192.js +13 -4
  193. package/dist/index192.js.map +1 -1
  194. package/dist/index193.js +13 -12
  195. package/dist/index193.js.map +1 -1
  196. package/dist/index194.js +4 -9
  197. package/dist/index194.js.map +1 -1
  198. package/dist/index195.js +5 -13
  199. package/dist/index195.js.map +1 -1
  200. package/dist/index196.js +6 -13
  201. package/dist/index196.js.map +1 -1
  202. package/dist/index197.js +5 -4
  203. package/dist/index197.js.map +1 -1
  204. package/dist/index198.js +54 -5
  205. package/dist/index198.js.map +1 -1
  206. package/dist/index199.js +8 -6
  207. package/dist/index199.js.map +1 -1
  208. package/dist/index200.js +4 -5
  209. package/dist/index200.js.map +1 -1
  210. package/dist/index201.js +4 -54
  211. package/dist/index201.js.map +1 -1
  212. package/dist/index202.js +8 -8
  213. package/dist/index202.js.map +1 -1
  214. package/dist/index203.js +4 -4
  215. package/dist/index203.js.map +1 -1
  216. package/dist/index204.js +4 -4
  217. package/dist/index204.js.map +1 -1
  218. package/dist/index205.js +3 -8
  219. package/dist/index205.js.map +1 -1
  220. package/dist/index206.js +10 -4
  221. package/dist/index206.js.map +1 -1
  222. package/dist/index207.js +9 -4
  223. package/dist/index207.js.map +1 -1
  224. package/dist/index208.js +9 -3
  225. package/dist/index208.js.map +1 -1
  226. package/dist/index209.js +10 -10
  227. package/dist/index209.js.map +1 -1
  228. package/dist/index210.js +10 -9
  229. package/dist/index210.js.map +1 -1
  230. package/dist/index211.js +9 -9
  231. package/dist/index211.js.map +1 -1
  232. package/dist/index212.js +6 -10
  233. package/dist/index212.js.map +1 -1
  234. package/dist/index213.js +5 -10
  235. package/dist/index213.js.map +1 -1
  236. package/dist/index214.js +4 -9
  237. package/dist/index214.js.map +1 -1
  238. package/dist/index215.js +5 -6
  239. package/dist/index215.js.map +1 -1
  240. package/dist/index216.js +6 -5
  241. package/dist/index216.js.map +1 -1
  242. package/dist/index217.js +5 -4
  243. package/dist/index217.js.map +1 -1
  244. package/dist/index218.js +16 -5
  245. package/dist/index218.js.map +1 -1
  246. package/dist/index219.js +7 -6
  247. package/dist/index219.js.map +1 -1
  248. package/dist/index220.js +10 -5
  249. package/dist/index220.js.map +1 -1
  250. package/dist/index221.js +10 -8
  251. package/dist/index221.js.map +1 -1
  252. package/dist/index222.js +21 -19
  253. package/dist/index222.js.map +1 -1
  254. package/dist/index223.js +10 -16
  255. package/dist/index223.js.map +1 -1
  256. package/dist/index224.js +9 -7
  257. package/dist/index224.js.map +1 -1
  258. package/dist/index225.js +9 -10
  259. package/dist/index225.js.map +1 -1
  260. package/dist/index226.js +4 -10
  261. package/dist/index226.js.map +1 -1
  262. package/dist/index227.js +5 -21
  263. package/dist/index227.js.map +1 -1
  264. package/dist/index228.js +16 -10
  265. package/dist/index228.js.map +1 -1
  266. package/dist/index229.js +8 -8
  267. package/dist/index229.js.map +1 -1
  268. package/dist/index230.js +18 -9
  269. package/dist/index230.js.map +1 -1
  270. package/dist/index231.js +15 -4
  271. package/dist/index231.js.map +1 -1
  272. package/dist/index232.js +12 -5
  273. package/dist/index232.js.map +1 -1
  274. package/dist/index233.js +28 -15
  275. package/dist/index233.js.map +1 -1
  276. package/dist/index234.js +12 -9
  277. package/dist/index234.js.map +1 -1
  278. package/dist/index235.js +25 -18
  279. package/dist/index235.js.map +1 -1
  280. package/dist/index236.js +5 -15
  281. package/dist/index236.js.map +1 -1
  282. package/dist/index237.js +24 -12
  283. package/dist/index237.js.map +1 -1
  284. package/dist/index238.js +29 -30
  285. package/dist/index238.js.map +1 -1
  286. package/dist/index239.js +5 -13
  287. package/dist/index239.js.map +1 -1
  288. package/dist/index240.js +13 -25
  289. package/dist/index240.js.map +1 -1
  290. package/dist/index241.js +154 -5
  291. package/dist/index241.js.map +1 -1
  292. package/dist/index242.js +28 -65
  293. package/dist/index242.js.map +1 -1
  294. package/dist/index243.js +9 -180
  295. package/dist/index243.js.map +1 -1
  296. package/dist/index244.js +43 -41
  297. package/dist/index244.js.map +1 -1
  298. package/dist/index245.js +10 -12
  299. package/dist/index245.js.map +1 -1
  300. package/dist/index246.js +41 -151
  301. package/dist/index246.js.map +1 -1
  302. package/dist/index247.js +92 -27
  303. package/dist/index247.js.map +1 -1
  304. package/dist/index248.js +86 -9
  305. package/dist/index248.js.map +1 -1
  306. package/dist/index249.js +96 -39
  307. package/dist/index249.js.map +1 -1
  308. package/dist/index250.js +51 -10
  309. package/dist/index250.js.map +1 -1
  310. package/dist/index251.js +10 -43
  311. package/dist/index251.js.map +1 -1
  312. package/dist/index252.js +31 -89
  313. package/dist/index252.js.map +1 -1
  314. package/dist/index253.js +8 -86
  315. package/dist/index253.js.map +1 -1
  316. package/dist/index254.js +106 -95
  317. package/dist/index254.js.map +1 -1
  318. package/dist/index255.js +16 -51
  319. package/dist/index255.js.map +1 -1
  320. package/dist/index256.js +14 -10
  321. package/dist/index256.js.map +1 -1
  322. package/dist/index257.js +3 -37
  323. package/dist/index257.js.map +1 -1
  324. package/dist/index258.js +36 -8
  325. package/dist/index258.js.map +1 -1
  326. package/dist/index259.js +19 -115
  327. package/dist/index259.js.map +1 -1
  328. package/dist/index260.js +9 -17
  329. package/dist/index260.js.map +1 -1
  330. package/dist/index261.js +8 -15
  331. package/dist/index261.js.map +1 -1
  332. package/dist/index262.js +19 -3
  333. package/dist/index262.js.map +1 -1
  334. package/dist/index263.js +23 -31
  335. package/dist/index263.js.map +1 -1
  336. package/dist/index264.js +15 -19
  337. package/dist/index264.js.map +1 -1
  338. package/dist/index265.js +4 -9
  339. package/dist/index265.js.map +1 -1
  340. package/dist/index266.js +17 -8
  341. package/dist/index266.js.map +1 -1
  342. package/dist/index267.js +12 -19
  343. package/dist/index267.js.map +1 -1
  344. package/dist/index268.js +5 -29
  345. package/dist/index268.js.map +1 -1
  346. package/dist/index269.js +3 -17
  347. package/dist/index269.js.map +1 -1
  348. package/dist/index270.js +24 -5
  349. package/dist/index270.js.map +1 -1
  350. package/dist/index271.js +113 -3
  351. package/dist/index271.js.map +1 -1
  352. package/dist/index272.js +15 -23
  353. package/dist/index272.js.map +1 -1
  354. package/dist/index273.js +524 -107
  355. package/dist/index273.js.map +1 -1
  356. package/dist/index274.js +124 -14
  357. package/dist/index274.js.map +1 -1
  358. package/dist/index275.js +123 -519
  359. package/dist/index275.js.map +1 -1
  360. package/dist/index276.js +20 -125
  361. package/dist/index276.js.map +1 -1
  362. package/dist/index277.js +4 -133
  363. package/dist/index277.js.map +1 -1
  364. package/dist/index278.js +4 -4
  365. package/dist/index278.js.map +1 -1
  366. package/dist/index279.js +4 -18
  367. package/dist/index279.js.map +1 -1
  368. package/dist/index280.js +15 -12
  369. package/dist/index280.js.map +1 -1
  370. package/dist/index281.js +8 -20
  371. package/dist/index281.js.map +1 -1
  372. package/dist/index282.js +5 -64
  373. package/dist/index282.js.map +1 -1
  374. package/dist/index283.js +5 -69
  375. package/dist/index283.js.map +1 -1
  376. package/dist/index284.js +545 -8
  377. package/dist/index284.js.map +1 -1
  378. package/dist/index285.js +46 -13
  379. package/dist/index285.js.map +1 -1
  380. package/dist/index286.js +18 -66
  381. package/dist/index286.js.map +1 -1
  382. package/dist/index287.js +5 -4
  383. package/dist/index287.js.map +1 -1
  384. package/dist/index288.js +7 -4
  385. package/dist/index288.js.map +1 -1
  386. package/dist/index289.js +7 -4
  387. package/dist/index289.js.map +1 -1
  388. package/dist/index290.js +7 -15
  389. package/dist/index290.js.map +1 -1
  390. package/dist/index291.js +11 -8
  391. package/dist/index291.js.map +1 -1
  392. package/dist/index292.js +8 -5
  393. package/dist/index292.js.map +1 -1
  394. package/dist/index293.js +12 -4
  395. package/dist/index293.js.map +1 -1
  396. package/dist/index294.js +62 -543
  397. package/dist/index294.js.map +1 -1
  398. package/dist/index295.js +65 -43
  399. package/dist/index295.js.map +1 -1
  400. package/dist/index296.js +9 -18
  401. package/dist/index296.js.map +1 -1
  402. package/dist/index297.js +14 -6
  403. package/dist/index297.js.map +1 -1
  404. package/dist/index298.js +66 -8
  405. package/dist/index298.js.map +1 -1
  406. package/dist/index299.js +4 -6
  407. package/dist/index299.js.map +1 -1
  408. package/dist/index300.js +56 -8
  409. package/dist/index300.js.map +1 -1
  410. package/dist/index301.js +68 -12
  411. package/dist/index301.js.map +1 -1
  412. package/dist/index302.js +31 -9
  413. package/dist/index302.js.map +1 -1
  414. package/dist/index303.js +9 -13
  415. package/dist/index303.js.map +1 -1
  416. package/dist/index304.js +153 -4
  417. package/dist/index304.js.map +1 -1
  418. package/dist/index305.js +108 -23
  419. package/dist/index305.js.map +1 -1
  420. package/dist/index306.js +3 -4
  421. package/dist/index306.js.map +1 -1
  422. package/dist/index307.js +23 -56
  423. package/dist/index307.js.map +1 -1
  424. package/dist/index308.js +16 -68
  425. package/dist/index308.js.map +1 -1
  426. package/dist/index309.js +29 -31
  427. package/dist/index309.js.map +1 -1
  428. package/dist/index31.js +5 -5
  429. package/dist/index310.js +13 -9
  430. package/dist/index310.js.map +1 -1
  431. package/dist/index311.js +7 -153
  432. package/dist/index311.js.map +1 -1
  433. package/dist/index312.js +22 -107
  434. package/dist/index312.js.map +1 -1
  435. package/dist/index313.js +11 -21
  436. package/dist/index313.js.map +1 -1
  437. package/dist/index314.js +26 -11
  438. package/dist/index314.js.map +1 -1
  439. package/dist/index315.js +4 -27
  440. package/dist/index315.js.map +1 -1
  441. package/dist/index32.js +24 -24
  442. package/dist/index33.js +3 -3
  443. package/dist/index36.js +1 -1
  444. package/dist/index37.js +2 -2
  445. package/dist/index40.js +2 -2
  446. package/dist/index41.js +242 -270
  447. package/dist/index41.js.map +1 -1
  448. package/dist/index45.js +1 -1
  449. package/dist/index46.js +1 -1
  450. package/dist/index49.js +1 -1
  451. package/dist/index50.js +1 -1
  452. package/dist/index51.js +2 -205
  453. package/dist/index51.js.map +1 -1
  454. package/dist/index52.js +2 -4
  455. package/dist/index52.js.map +1 -1
  456. package/dist/index53.js +2 -7
  457. package/dist/index53.js.map +1 -1
  458. package/dist/index54.js +2 -48
  459. package/dist/index54.js.map +1 -1
  460. package/dist/index55.js +5 -47
  461. package/dist/index55.js.map +1 -1
  462. package/dist/index56.js +33 -50
  463. package/dist/index56.js.map +1 -1
  464. package/dist/index57.js +48 -7
  465. package/dist/index57.js.map +1 -1
  466. package/dist/index58.js +7 -14
  467. package/dist/index58.js.map +1 -1
  468. package/dist/index59.js +11 -133
  469. package/dist/index59.js.map +1 -1
  470. package/dist/index60.js +3 -10
  471. package/dist/index60.js.map +1 -1
  472. package/dist/index61.js +45 -214
  473. package/dist/index61.js.map +1 -1
  474. package/dist/index62.js +51 -13
  475. package/dist/index62.js.map +1 -1
  476. package/dist/index63.js +7 -33
  477. package/dist/index63.js.map +1 -1
  478. package/dist/index64.js +13 -45
  479. package/dist/index64.js.map +1 -1
  480. package/dist/index65.js +133 -7
  481. package/dist/index65.js.map +1 -1
  482. package/dist/index66.js +9 -48
  483. package/dist/index66.js.map +1 -1
  484. package/dist/index67.js +216 -3
  485. package/dist/index67.js.map +1 -1
  486. package/dist/index68.js +13 -6
  487. package/dist/index68.js.map +1 -1
  488. package/dist/index69.js +46 -27
  489. package/dist/index69.js.map +1 -1
  490. package/dist/index70.js +50 -50
  491. package/dist/index70.js.map +1 -1
  492. package/dist/index71.js +4 -9
  493. package/dist/index71.js.map +1 -1
  494. package/dist/index72.js +5 -11
  495. package/dist/index72.js.map +1 -1
  496. package/dist/index73.js +28 -2
  497. package/dist/index73.js.map +1 -1
  498. package/dist/index74.js +50 -2
  499. package/dist/index74.js.map +1 -1
  500. package/dist/index75.js +9 -2
  501. package/dist/index75.js.map +1 -1
  502. package/dist/index76.js +6 -2
  503. package/dist/index76.js.map +1 -1
  504. package/dist/index77.js +7 -5
  505. package/dist/index77.js.map +1 -1
  506. package/dist/index78.js +5 -7
  507. package/dist/index78.js.map +1 -1
  508. package/dist/index79.js +46 -5
  509. package/dist/index79.js.map +1 -1
  510. package/dist/index8.js +535 -543
  511. package/dist/index8.js.map +1 -1
  512. package/dist/index80.js +52 -47
  513. package/dist/index80.js.map +1 -1
  514. package/dist/index81.js +4 -229
  515. package/dist/index81.js.map +1 -1
  516. package/dist/index82.js +5 -22
  517. package/dist/index82.js.map +1 -1
  518. package/dist/index83.js +15 -24
  519. package/dist/index83.js.map +1 -1
  520. package/dist/index84.js +5 -400
  521. package/dist/index84.js.map +1 -1
  522. package/dist/index85.js +7 -46
  523. package/dist/index85.js.map +1 -1
  524. package/dist/index86.js +17 -52
  525. package/dist/index86.js.map +1 -1
  526. package/dist/index87.js +4 -4
  527. package/dist/index87.js.map +1 -1
  528. package/dist/index88.js +3 -3
  529. package/dist/index88.js.map +1 -1
  530. package/dist/index89.js +5 -15
  531. package/dist/index89.js.map +1 -1
  532. package/dist/index90.js +5 -5
  533. package/dist/index90.js.map +1 -1
  534. package/dist/index91.js +3 -6
  535. package/dist/index91.js.map +1 -1
  536. package/dist/index92.js +3 -15
  537. package/dist/index92.js.map +1 -1
  538. package/dist/index93.js +6 -4
  539. package/dist/index93.js.map +1 -1
  540. package/dist/index94.js +24 -4
  541. package/dist/index94.js.map +1 -1
  542. package/dist/index95.js +6 -5
  543. package/dist/index95.js.map +1 -1
  544. package/dist/index96.js +4 -5
  545. package/dist/index96.js.map +1 -1
  546. package/dist/index97.js +5 -3
  547. package/dist/index97.js.map +1 -1
  548. package/dist/index98.js +4 -3
  549. package/dist/index98.js.map +1 -1
  550. package/dist/index99.js +4 -6
  551. package/dist/index99.js.map +1 -1
  552. package/package.json +3 -2
  553. package/dist/index316.js +0 -8
  554. package/dist/index316.js.map +0 -1
  555. package/dist/index317.js +0 -19
  556. package/dist/index317.js.map +0 -1
  557. package/dist/index318.js +0 -32
  558. package/dist/index318.js.map +0 -1
  559. package/dist/index319.js +0 -16
  560. package/dist/index319.js.map +0 -1
  561. package/dist/index320.js +0 -10
  562. package/dist/index320.js.map +0 -1
package/dist/index16.js CHANGED
@@ -1,26 +1,25 @@
1
1
  import { j as t } from "./index30.js";
2
2
  import { c as H } from "./index28.js";
3
- import { useContext as Q, useState as T, useMemo as $, useCallback as W, useEffect as J, createContext as Z } from "react";
4
- import * as F from "@radix-ui/react-dialog";
5
- import { Trigger as _, Item as K, Root as ee, Portal as te, Content as ne } from "./index51.js";
6
- import { X as se, Loader2 as oe, MoreVertical as re } from "lucide-react";
7
- import { cn as P } from "./index2.js";
8
- const q = (i) => {
9
- const e = Date.parse(i);
3
+ import { useContext as Q, useState as T, useMemo as K, useCallback as W, useEffect as G, createContext as Z, useRef as J } from "react";
4
+ import * as P from "@radix-ui/react-dialog";
5
+ import { X as _, Loader2 as ee, MoreVertical as te } from "lucide-react";
6
+ import { cn as Y } from "./index2.js";
7
+ const q = (s) => {
8
+ const e = Date.parse(s);
10
9
  return Number.isFinite(e) ? e : 0;
11
- }, ie = (i) => {
12
- const e = new Date(q(i));
10
+ }, ne = (s) => {
11
+ const e = new Date(q(s));
13
12
  if (!Number.isFinite(e.getTime())) return "unknown";
14
- const n = e.getFullYear(), r = String(e.getMonth() + 1).padStart(2, "0"), a = String(e.getDate()).padStart(2, "0");
15
- return `${n}-${r}-${a}`;
16
- }, ae = (i) => {
17
- if (i === "unknown") return "Unknown date";
18
- const [e, n, r] = i.split("-"), a = Number(e), f = Number(n), s = Number(r);
19
- if (!Number.isFinite(a) || !Number.isFinite(f) || !Number.isFinite(s)) return "Unknown date";
20
- const y = new Date(a, f - 1, s);
21
- if (!Number.isFinite(y.getTime())) return "Unknown date";
22
- const x = (/* @__PURE__ */ new Date()).getFullYear() !== a;
23
- return y.toLocaleDateString(void 0, x ? {
13
+ const n = e.getFullYear(), i = String(e.getMonth() + 1).padStart(2, "0"), a = String(e.getDate()).padStart(2, "0");
14
+ return `${n}-${i}-${a}`;
15
+ }, re = (s) => {
16
+ if (s === "unknown") return "Unknown date";
17
+ const [e, n, i] = s.split("-"), a = Number(e), c = Number(n), o = Number(i);
18
+ if (!Number.isFinite(a) || !Number.isFinite(c) || !Number.isFinite(o)) return "Unknown date";
19
+ const U = new Date(a, c - 1, o);
20
+ if (!Number.isFinite(U.getTime())) return "Unknown date";
21
+ const f = (/* @__PURE__ */ new Date()).getFullYear() !== a;
22
+ return U.toLocaleDateString(void 0, f ? {
24
23
  weekday: "short",
25
24
  month: "short",
26
25
  day: "numeric",
@@ -30,60 +29,60 @@ const q = (i) => {
30
29
  month: "short",
31
30
  day: "numeric"
32
31
  });
33
- }, V = (i) => {
32
+ }, V = (s) => {
34
33
  const e = [];
35
34
  let n = null;
36
- for (const r of i) {
37
- const a = ie(r.createdAt);
35
+ for (const i of s) {
36
+ const a = ne(i.createdAt);
38
37
  a !== n && (n = a, e.push({
39
38
  key: a,
40
- label: ae(a),
39
+ label: re(a),
41
40
  items: []
42
- })), e[e.length - 1].items.push(r);
41
+ })), e[e.length - 1].items.push(i);
43
42
  }
44
43
  return e;
45
- }, le = Z(null);
46
- function he({
47
- open: i,
44
+ }, oe = Z(null);
45
+ function ue({
46
+ open: s,
48
47
  onOpenChange: e,
49
48
  className: n,
50
- limit: r = 50,
49
+ limit: i = 50,
51
50
  defaultUnreadOnly: a = !1,
52
- realtimeContext: f
51
+ realtimeContext: c
53
52
  }) {
54
- const s = Q(f ?? le), [y, C] = T([]), [x, h] = T(0), [A, p] = T(0), [S, j] = T(!1), [M, b] = T(null), [c, U] = T(a), v = s?.notifications ?? y, D = s?.unreadCount ?? x, N = s?.unseenCount ?? A, R = s?.loading ?? S, w = s?.error ? s.error instanceof Error ? s.error.message : String(s.error) : M, g = $(() => v.slice(0, r), [r, v]), I = $(() => g.filter((o) => !o.readAt), [g]), E = $(() => g.filter((o) => !!o.readAt), [g]), L = $(() => V(I), [I]), Y = $(() => V(E), [E]), z = W(async ({
55
- unreadOnly: o,
56
- markSeen: d
53
+ const o = Q(c ?? oe), [U, A] = T([]), [f, g] = T(0), [F, S] = T(0), [L, $] = T(!1), [M, h] = T(null), [l, R] = T(a), y = o?.notifications ?? U, v = o?.unreadCount ?? f, j = o?.unseenCount ?? F, D = o?.loading ?? L, O = o?.error ? o.error instanceof Error ? o.error.message : String(o.error) : M, p = K(() => y.slice(0, i), [i, y]), N = K(() => p.filter((r) => !r.readAt), [p]), w = K(() => p.filter((r) => !!r.readAt), [p]), k = K(() => V(N), [N]), E = K(() => V(w), [w]), b = W(async ({
54
+ unreadOnly: r,
55
+ markSeen: u
57
56
  }) => {
58
- j(!0), b(null);
57
+ $(!0), h(null);
59
58
  try {
60
- const O = await fetch("/api/rb/notifications", {
59
+ const I = await fetch("/api/rb/notifications", {
61
60
  method: "POST",
62
61
  headers: {
63
62
  "Content-Type": "application/json"
64
63
  },
65
64
  credentials: "include",
66
65
  body: JSON.stringify({
67
- limit: r,
68
- unreadOnly: o,
69
- markSeen: d
66
+ limit: i,
67
+ unreadOnly: r,
68
+ markSeen: u
70
69
  })
71
- }), l = await O.json().catch(() => null);
72
- if (!O.ok || !l?.ok) {
73
- b(l?.error || "Unable to load notifications.");
70
+ }), d = await I.json().catch(() => null);
71
+ if (!I.ok || !d?.ok) {
72
+ h(d?.error || "Unable to load notifications.");
74
73
  return;
75
74
  }
76
- const k = Array.isArray(l.notifications) ? l.notifications : [];
77
- C(k), h(Number.isFinite(l.unreadCount) ? Math.max(0, Math.floor(l.unreadCount ?? 0)) : 0), p(Number.isFinite(l.unseenCount) ? Math.max(0, Math.floor(l.unseenCount ?? 0)) : 0);
75
+ const C = Array.isArray(d.notifications) ? d.notifications : [];
76
+ A(C), g(Number.isFinite(d.unreadCount) ? Math.max(0, Math.floor(d.unreadCount ?? 0)) : 0), S(Number.isFinite(d.unseenCount) ? Math.max(0, Math.floor(d.unseenCount ?? 0)) : 0);
78
77
  } catch {
79
- b("Unable to load notifications.");
78
+ h("Unable to load notifications.");
80
79
  } finally {
81
- j(!1);
80
+ $(!1);
82
81
  }
83
- }, [r]);
84
- J(() => {
85
- if (i) {
86
- if (s) {
82
+ }, [i]);
83
+ G(() => {
84
+ if (s) {
85
+ if (o) {
87
86
  (async () => {
88
87
  try {
89
88
  await fetch("/api/rb/notifications", {
@@ -104,20 +103,20 @@ function he({
104
103
  })();
105
104
  return;
106
105
  }
107
- z({
108
- unreadOnly: c,
106
+ b({
107
+ unreadOnly: l,
109
108
  markSeen: !0
110
109
  });
111
110
  }
112
- }, [i, s, z, c]), J(() => {
113
- i && (s || z({
114
- unreadOnly: c,
111
+ }, [s, o, b, l]), G(() => {
112
+ s && (o || b({
113
+ unreadOnly: l,
115
114
  markSeen: !1
116
115
  }));
117
- }, [i, s, z, c]);
118
- const B = async (o) => {
116
+ }, [s, o, b, l]);
117
+ const B = async (r) => {
119
118
  try {
120
- const d = await fetch(`/api/rb/notifications/${encodeURIComponent(o)}/read`, {
119
+ const u = await fetch(`/api/rb/notifications/${encodeURIComponent(r)}/read`, {
121
120
  method: "POST",
122
121
  headers: {
123
122
  "Content-Type": "application/json"
@@ -125,145 +124,164 @@ function he({
125
124
  credentials: "include",
126
125
  keepalive: !0,
127
126
  body: "{}"
128
- }), O = await d.json().catch(() => null);
129
- if (!d.ok || !O?.ok) return;
130
- const l = (/* @__PURE__ */ new Date()).toISOString();
131
- if (s) return;
132
- C((k) => {
133
- const m = k.find((u) => u.id === o);
134
- return m && !m.readAt && h((u) => Math.max(0, u - 1)), m && !m.seenAt && p((u) => Math.max(0, u - 1)), k.map((u) => u.id === o && !u.readAt ? {
135
- ...u,
136
- readAt: l,
137
- ...u.seenAt ? {} : {
138
- seenAt: l
127
+ }), I = await u.json().catch(() => null);
128
+ if (!u.ok || !I?.ok) return;
129
+ const d = (/* @__PURE__ */ new Date()).toISOString();
130
+ if (o) return;
131
+ A((C) => {
132
+ const m = C.find((x) => x.id === r);
133
+ return m && !m.readAt && g((x) => Math.max(0, x - 1)), m && !m.seenAt && S((x) => Math.max(0, x - 1)), C.map((x) => x.id === r && !x.readAt ? {
134
+ ...x,
135
+ readAt: d,
136
+ ...x.seenAt ? {} : {
137
+ seenAt: d
139
138
  }
140
- } : u);
139
+ } : x);
141
140
  });
142
141
  } catch {
143
142
  return;
144
143
  }
145
- }, G = async (o) => {
144
+ }, z = async (r) => {
146
145
  try {
147
- const d = await fetch(`/api/rb/notifications/${encodeURIComponent(o)}/archive`, {
146
+ const u = await fetch(`/api/rb/notifications/${encodeURIComponent(r)}/archive`, {
148
147
  method: "POST",
149
148
  headers: {
150
149
  "Content-Type": "application/json"
151
150
  },
152
151
  credentials: "include",
153
152
  body: "{}"
154
- }), O = await d.json().catch(() => null);
155
- if (!d.ok || !O?.ok || s) return;
156
- C((l) => {
157
- const k = l.find((m) => m.id === o);
158
- return k && !k.readAt && h((m) => Math.max(0, m - 1)), k && !k.seenAt && p((m) => Math.max(0, m - 1)), l.filter((m) => m.id !== o);
153
+ }), I = await u.json().catch(() => null);
154
+ if (!u.ok || !I?.ok || o) return;
155
+ A((d) => {
156
+ const C = d.find((m) => m.id === r);
157
+ return C && !C.readAt && g((m) => Math.max(0, m - 1)), C && !C.seenAt && S((m) => Math.max(0, m - 1)), d.filter((m) => m.id !== r);
159
158
  });
160
159
  } catch {
161
160
  return;
162
161
  }
163
162
  };
164
- return /* @__PURE__ */ t.jsx(F.Root, { open: i, onOpenChange: e, children: /* @__PURE__ */ t.jsxs(F.Portal, { children: [
165
- /* @__PURE__ */ t.jsx(F.Overlay, { className: "fixed inset-0 z-50 bg-black/50" }),
166
- /* @__PURE__ */ t.jsxs(F.Content, { className: P("fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none", n), children: [
163
+ return /* @__PURE__ */ t.jsx(P.Root, { open: s, onOpenChange: e, children: /* @__PURE__ */ t.jsxs(P.Portal, { children: [
164
+ /* @__PURE__ */ t.jsx(P.Overlay, { className: "fixed inset-0 z-50 bg-black/50" }),
165
+ /* @__PURE__ */ t.jsxs(P.Content, { className: Y("fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none", n), children: [
167
166
  /* @__PURE__ */ t.jsxs("header", { className: "flex items-center justify-between gap-2 border-b px-4 py-3", children: [
168
167
  /* @__PURE__ */ t.jsxs("div", { className: "flex min-w-0 flex-col", children: [
169
- /* @__PURE__ */ t.jsx(F.Title, { className: "text-sm font-semibold", children: "Notifications" }),
170
- /* @__PURE__ */ t.jsx("span", { className: "text-xs text-muted-foreground", children: D > 0 ? `${D} unread` : N > 0 ? `${N} new` : "All caught up" })
168
+ /* @__PURE__ */ t.jsx(P.Title, { className: "text-sm font-semibold", children: "Notifications" }),
169
+ /* @__PURE__ */ t.jsx("span", { className: "text-xs text-muted-foreground", children: v > 0 ? `${v} unread` : j > 0 ? `${j} new` : "All caught up" })
171
170
  ] }),
172
171
  /* @__PURE__ */ t.jsxs("div", { className: "flex items-center gap-2", children: [
173
- /* @__PURE__ */ t.jsx("button", { type: "button", onClick: () => U((o) => !o), className: P("rounded-md border px-2 py-1 text-xs", c ? "bg-accent text-foreground" : "bg-background text-muted-foreground hover:bg-accent"), children: c ? "Unread" : "All" }),
174
- /* @__PURE__ */ t.jsx(F.Close, { asChild: !0, children: /* @__PURE__ */ t.jsx("button", { type: "button", className: "inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent", children: /* @__PURE__ */ t.jsx(se, { className: "h-4 w-4" }) }) })
172
+ /* @__PURE__ */ t.jsx("button", { type: "button", onClick: () => R((r) => !r), className: Y("rounded-md border px-2 py-1 text-xs", l ? "bg-accent text-foreground" : "bg-background text-muted-foreground hover:bg-accent"), children: l ? "Unread" : "All" }),
173
+ /* @__PURE__ */ t.jsx(P.Close, { asChild: !0, children: /* @__PURE__ */ t.jsx("button", { type: "button", className: "inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent", children: /* @__PURE__ */ t.jsx(_, { className: "h-4 w-4" }) }) })
175
174
  ] })
176
175
  ] }),
177
- /* @__PURE__ */ t.jsx("div", { className: "flex-1 overflow-y-auto px-4 pb-3", children: R ? /* @__PURE__ */ t.jsx("div", { className: "flex items-center justify-center py-10 text-muted-foreground", children: /* @__PURE__ */ t.jsx(oe, { className: "h-4 w-4 animate-spin" }) }) : w ? /* @__PURE__ */ t.jsx("div", { className: "py-10 text-center text-sm text-muted-foreground", children: w }) : g.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-10 text-center text-sm text-muted-foreground", children: "No notifications." }) : /* @__PURE__ */ t.jsxs("div", { className: "flex flex-col gap-4", children: [
176
+ /* @__PURE__ */ t.jsx("div", { className: "flex-1 overflow-y-auto px-4 pb-3", children: D ? /* @__PURE__ */ t.jsx("div", { className: "flex items-center justify-center py-10 text-muted-foreground", children: /* @__PURE__ */ t.jsx(ee, { className: "h-4 w-4 animate-spin" }) }) : O ? /* @__PURE__ */ t.jsx("div", { className: "py-10 text-center text-sm text-muted-foreground", children: O }) : p.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-10 text-center text-sm text-muted-foreground", children: "No notifications." }) : /* @__PURE__ */ t.jsxs("div", { className: "flex flex-col gap-4", children: [
178
177
  /* @__PURE__ */ t.jsxs("div", { children: [
179
178
  /* @__PURE__ */ t.jsx("div", { className: "sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground", children: "Unread notifications" }),
180
- L.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No unread notifications." }) : L.map((o) => /* @__PURE__ */ t.jsxs("div", { children: [
181
- /* @__PURE__ */ t.jsx("div", { className: "sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground", children: o.label }),
182
- /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: o.items.map((d) => /* @__PURE__ */ t.jsx(X, { notification: d, onMarkRead: B, onArchive: G }, d.id)) })
183
- ] }, `unread:${o.key}`))
179
+ k.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No unread notifications." }) : k.map((r) => /* @__PURE__ */ t.jsxs("div", { children: [
180
+ /* @__PURE__ */ t.jsx("div", { className: "sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground", children: r.label }),
181
+ /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: r.items.map((u) => /* @__PURE__ */ t.jsx(X, { notification: u, onMarkRead: B, onArchive: z }, u.id)) })
182
+ ] }, `unread:${r.key}`))
184
183
  ] }),
185
- c ? null : /* @__PURE__ */ t.jsxs("div", { children: [
184
+ l ? null : /* @__PURE__ */ t.jsxs("div", { children: [
186
185
  /* @__PURE__ */ t.jsx("div", { className: "sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground", children: "Previous notifications" }),
187
- Y.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No previous notifications." }) : Y.map((o) => /* @__PURE__ */ t.jsxs("div", { children: [
188
- /* @__PURE__ */ t.jsx("div", { className: "sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground", children: o.label }),
189
- /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: o.items.map((d) => /* @__PURE__ */ t.jsx(X, { notification: d, onMarkRead: B, onArchive: G }, d.id)) })
190
- ] }, `previous:${o.key}`))
186
+ E.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No previous notifications." }) : E.map((r) => /* @__PURE__ */ t.jsxs("div", { children: [
187
+ /* @__PURE__ */ t.jsx("div", { className: "sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground", children: r.label }),
188
+ /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: r.items.map((u) => /* @__PURE__ */ t.jsx(X, { notification: u, onMarkRead: B, onArchive: z }, u.id)) })
189
+ ] }, `previous:${r.key}`))
191
190
  ] })
192
191
  ] }) })
193
192
  ] })
194
193
  ] }) });
195
194
  }
196
- function X(i) {
197
- const e = H.c(43), {
195
+ function X(s) {
196
+ const e = H.c(45), {
198
197
  notification: n,
199
- onMarkRead: r,
198
+ onMarkRead: i,
200
199
  onArchive: a
201
- } = i, f = !n.readAt;
202
- let s;
200
+ } = s, [c, o] = T(!1), U = J(null), A = J(null), f = !n.readAt;
201
+ let g;
203
202
  if (e[0] !== n.createdAt) {
204
203
  e: {
205
- const I = new Date(q(n.createdAt));
206
- if (!Number.isFinite(I.getTime())) {
207
- s = "";
204
+ const b = new Date(q(n.createdAt));
205
+ if (!Number.isFinite(b.getTime())) {
206
+ g = "";
208
207
  break e;
209
208
  }
210
- s = I.toLocaleString();
209
+ g = b.toLocaleString();
211
210
  }
212
- e[0] = n.createdAt, e[1] = s;
211
+ e[0] = n.createdAt, e[1] = g;
213
212
  } else
214
- s = e[1];
215
- const y = s, C = f ? "bg-primary/5" : "bg-background";
216
- let x;
217
- e[2] !== C ? (x = P("group flex w-full gap-3 px-4 py-3 hover:bg-accent/40", C), e[2] = C, e[3] = x) : x = e[3];
218
- let h;
219
- e[4] !== f || e[5] !== n.id || e[6] !== n.url || e[7] !== r ? (h = () => {
220
- f && r(n.id), n.url && (window.location.href = n.url);
221
- }, e[4] = f, e[5] = n.id, e[6] = n.url, e[7] = r, e[8] = h) : h = e[8];
222
- let A;
223
- e[9] !== n.title ? (A = /* @__PURE__ */ t.jsx("div", { className: "truncate text-sm font-semibold", children: n.title }), e[9] = n.title, e[10] = A) : A = e[10];
224
- let p;
225
- e[11] !== n.body ? (p = n.body ? /* @__PURE__ */ t.jsx("div", { className: "mt-0.5 line-clamp-2 text-xs text-muted-foreground", children: n.body }) : null, e[11] = n.body, e[12] = p) : p = e[12];
226
- let S;
227
- e[13] !== A || e[14] !== p ? (S = /* @__PURE__ */ t.jsxs("div", { className: "min-w-0", children: [
228
- A,
229
- p
230
- ] }), e[13] = A, e[14] = p, e[15] = S) : S = e[15];
231
- let j;
232
- e[16] !== n.url ? (j = n.url ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 truncate text-xs text-primary", children: n.url }) : null, e[16] = n.url, e[17] = j) : j = e[17];
213
+ g = e[1];
214
+ const F = g;
215
+ let S, L;
216
+ e[2] !== c ? (S = () => {
217
+ if (!c)
218
+ return;
219
+ const b = (z) => {
220
+ const r = z.target;
221
+ r instanceof Node && (U.current?.contains(r) || A.current?.contains(r) || o(!1));
222
+ }, B = (z) => {
223
+ z.key === "Escape" && (o(!1), A.current?.focus());
224
+ };
225
+ return document.addEventListener("pointerdown", b), document.addEventListener("keydown", B), () => {
226
+ document.removeEventListener("pointerdown", b), document.removeEventListener("keydown", B);
227
+ };
228
+ }, L = [c], e[2] = c, e[3] = S, e[4] = L) : (S = e[3], L = e[4]), G(S, L);
229
+ const $ = f ? "bg-primary/5" : "bg-background";
233
230
  let M;
234
- e[18] !== y ? (M = y ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 text-[11px] text-muted-foreground", children: y }) : null, e[18] = y, e[19] = M) : M = e[19];
235
- let b;
236
- e[20] !== h || e[21] !== S || e[22] !== j || e[23] !== M ? (b = /* @__PURE__ */ t.jsxs("button", { type: "button", className: "min-w-0 flex-1 text-left", onClick: h, children: [
237
- S,
238
- j,
239
- M
240
- ] }), e[20] = h, e[21] = S, e[22] = j, e[23] = M, e[24] = b) : b = e[24];
241
- let c;
242
- e[25] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (c = /* @__PURE__ */ t.jsx(_, { asChild: !0, children: /* @__PURE__ */ t.jsx("button", { type: "button", className: "inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent", "aria-label": "Notification options", children: /* @__PURE__ */ t.jsx(re, { className: "h-4 w-4" }) }) }), e[25] = c) : c = e[25];
243
- let U;
244
- e[26] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (U = P("z-50 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md", "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"), e[26] = U) : U = e[26];
231
+ e[5] !== $ ? (M = Y("group flex w-full gap-3 px-4 py-3 hover:bg-accent/40", $), e[5] = $, e[6] = M) : M = e[6];
232
+ let h;
233
+ e[7] !== f || e[8] !== n.id || e[9] !== n.url || e[10] !== i ? (h = () => {
234
+ f && i(n.id), n.url && (window.location.href = n.url);
235
+ }, e[7] = f, e[8] = n.id, e[9] = n.url, e[10] = i, e[11] = h) : h = e[11];
236
+ let l;
237
+ e[12] !== n.title ? (l = /* @__PURE__ */ t.jsx("div", { className: "truncate text-sm font-semibold", children: n.title }), e[12] = n.title, e[13] = l) : l = e[13];
238
+ let R;
239
+ e[14] !== n.body ? (R = n.body ? /* @__PURE__ */ t.jsx("div", { className: "mt-0.5 line-clamp-2 text-xs text-muted-foreground", children: n.body }) : null, e[14] = n.body, e[15] = R) : R = e[15];
240
+ let y;
241
+ e[16] !== l || e[17] !== R ? (y = /* @__PURE__ */ t.jsxs("div", { className: "min-w-0", children: [
242
+ l,
243
+ R
244
+ ] }), e[16] = l, e[17] = R, e[18] = y) : y = e[18];
245
245
  let v;
246
- e[27] !== n.id || e[28] !== a ? (v = /* @__PURE__ */ t.jsx(K, { className: "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", onSelect: () => a(n.id), children: "Archive" }), e[27] = n.id, e[28] = a, e[29] = v) : v = e[29];
247
- const D = !f;
246
+ e[19] !== n.url ? (v = n.url ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 truncate text-xs text-primary", children: n.url }) : null, e[19] = n.url, e[20] = v) : v = e[20];
247
+ let j;
248
+ e[21] !== F ? (j = F ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 text-[11px] text-muted-foreground", children: F }) : null, e[21] = F, e[22] = j) : j = e[22];
249
+ let D;
250
+ e[23] !== v || e[24] !== j || e[25] !== h || e[26] !== y ? (D = /* @__PURE__ */ t.jsxs("button", { type: "button", className: "min-w-0 flex-1 text-left", onClick: h, children: [
251
+ y,
252
+ v,
253
+ j
254
+ ] }), e[23] = v, e[24] = j, e[25] = h, e[26] = y, e[27] = D) : D = e[27];
255
+ let O, p;
256
+ e[28] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (O = () => {
257
+ o(se);
258
+ }, p = /* @__PURE__ */ t.jsx(te, { className: "h-4 w-4" }), e[28] = O, e[29] = p) : (O = e[28], p = e[29]);
248
259
  let N;
249
- e[30] !== n.id || e[31] !== r ? (N = () => r(n.id), e[30] = n.id, e[31] = r, e[32] = N) : N = e[32];
250
- let R;
251
- e[33] !== D || e[34] !== N ? (R = /* @__PURE__ */ t.jsx(K, { className: "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", disabled: D, onSelect: N, children: "Mark as read" }), e[33] = D, e[34] = N, e[35] = R) : R = e[35];
260
+ e[30] !== c ? (N = /* @__PURE__ */ t.jsx("button", { ref: A, type: "button", className: "inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent", "aria-label": "Notification options", "aria-haspopup": "menu", "aria-expanded": c, onClick: O, children: p }), e[30] = c, e[31] = N) : N = e[31];
252
261
  let w;
253
- e[36] !== v || e[37] !== R ? (w = /* @__PURE__ */ t.jsx("div", { className: "flex items-start", children: /* @__PURE__ */ t.jsxs(ee, { children: [
254
- c,
255
- /* @__PURE__ */ t.jsx(te, { children: /* @__PURE__ */ t.jsxs(ne, { align: "end", sideOffset: 6, className: U, children: [
256
- v,
257
- R
258
- ] }) })
259
- ] }) }), e[36] = v, e[37] = R, e[38] = w) : w = e[38];
260
- let g;
261
- return e[39] !== b || e[40] !== w || e[41] !== x ? (g = /* @__PURE__ */ t.jsxs("div", { className: x, children: [
262
- b,
262
+ e[32] !== f || e[33] !== c || e[34] !== n.id || e[35] !== a || e[36] !== i ? (w = c ? /* @__PURE__ */ t.jsxs("div", { ref: U, role: "menu", className: Y("absolute right-0 top-full z-50 mt-1 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md", "animate-in fade-in-0 zoom-in-95"), children: [
263
+ /* @__PURE__ */ t.jsx("button", { type: "button", role: "menuitem", className: "relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground", onClick: () => {
264
+ o(!1), a(n.id);
265
+ }, children: "Archive" }),
266
+ /* @__PURE__ */ t.jsx("button", { type: "button", role: "menuitem", className: "relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50", disabled: !f, onClick: () => {
267
+ o(!1), i(n.id);
268
+ }, children: "Mark as read" })
269
+ ] }) : null, e[32] = f, e[33] = c, e[34] = n.id, e[35] = a, e[36] = i, e[37] = w) : w = e[37];
270
+ let k;
271
+ e[38] !== N || e[39] !== w ? (k = /* @__PURE__ */ t.jsxs("div", { className: "relative flex items-start", children: [
272
+ N,
263
273
  w
264
- ] }), e[39] = b, e[40] = w, e[41] = x, e[42] = g) : g = e[42], g;
274
+ ] }), e[38] = N, e[39] = w, e[40] = k) : k = e[40];
275
+ let E;
276
+ return e[41] !== D || e[42] !== k || e[43] !== M ? (E = /* @__PURE__ */ t.jsxs("div", { className: M, children: [
277
+ D,
278
+ k
279
+ ] }), e[41] = D, e[42] = k, e[43] = M, e[44] = E) : E = e[44], E;
280
+ }
281
+ function se(s) {
282
+ return !s;
265
283
  }
266
284
  export {
267
- he as NotificationsDrawer
285
+ ue as NotificationsDrawer
268
286
  };
269
287
  //# sourceMappingURL=index16.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index16.js","sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useState, type Context } from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\nconst toMs = (iso: string): number => {\n const ms = Date.parse(iso)\n return Number.isFinite(ms) ? ms : 0\n}\n\nconst getDayKey = (iso: string): string => {\n const date = new Date(toMs(iso))\n if (!Number.isFinite(date.getTime())) return \"unknown\"\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, \"0\")\n const day = String(date.getDate()).padStart(2, \"0\")\n\n return `${year}-${month}-${day}`\n}\n\nconst formatDayLabel = (key: string): string => {\n if (key === \"unknown\") return \"Unknown date\"\n const [yearRaw, monthRaw, dayRaw] = key.split(\"-\")\n const year = Number(yearRaw)\n const month = Number(monthRaw)\n const day = Number(dayRaw)\n\n if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return \"Unknown date\"\n\n const date = new Date(year, month - 1, day)\n if (!Number.isFinite(date.getTime())) return \"Unknown date\"\n\n const now = new Date()\n const includeYear = now.getFullYear() !== year\n return date.toLocaleDateString(undefined, includeYear\n ? { weekday: \"short\", month: \"short\", day: \"numeric\", year: \"numeric\" }\n : { weekday: \"short\", month: \"short\", day: \"numeric\" })\n}\n\nconst groupByDay = (items: NotificationItem[]): DayGroup[] => {\n const groups: DayGroup[] = []\n let currentKey: string | null = null\n\n for (const item of items) {\n const key = getDayKey(item.createdAt)\n if (key !== currentKey) {\n currentKey = key\n groups.push({ key, label: formatDayLabel(key), items: [] })\n }\n groups[groups.length - 1]!.items.push(item)\n }\n\n return groups\n}\n\nconst EmptyRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nexport function NotificationsDrawer({\n open,\n onOpenChange,\n className,\n limit = 50,\n defaultUnreadOnly = false,\n realtimeContext,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n className?: string\n limit?: number\n defaultUnreadOnly?: boolean\n realtimeContext?: Context<NotificationsRealtimeState | null>\n}) {\n const realtime = useContext(realtimeContext ?? EmptyRealtimeContext)\n\n const [items, setItems] = useState<NotificationItem[]>([])\n const [unreadCount, setUnreadCount] = useState<number>(0)\n const [unseenCount, setUnseenCount] = useState<number>(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [unreadOnly, setUnreadOnly] = useState<boolean>(defaultUnreadOnly)\n\n const mergedItems = realtime?.notifications ?? items\n const mergedUnreadCount = realtime?.unreadCount ?? unreadCount\n const mergedUnseenCount = realtime?.unseenCount ?? unseenCount\n const mergedLoading = realtime?.loading ?? loading\n const mergedError = realtime?.error\n ? (realtime.error instanceof Error ? realtime.error.message : String(realtime.error))\n : error\n\n const visibleItems = useMemo(() => mergedItems.slice(0, limit), [limit, mergedItems])\n\n const unread = useMemo(() => visibleItems.filter((n) => !n.readAt), [visibleItems])\n const read = useMemo(() => visibleItems.filter((n) => Boolean(n.readAt)), [visibleItems])\n const unreadGroups = useMemo(() => groupByDay(unread), [unread])\n const readGroups = useMemo(() => groupByDay(read), [read])\n\n const refresh = useCallback(async ({ unreadOnly, markSeen }: { unreadOnly: boolean; markSeen: boolean }) => {\n setLoading(true)\n setError(null)\n\n try {\n const res = await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({ limit, unreadOnly, markSeen }),\n })\n\n const json = (await res.json().catch(() => null)) as ListResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notifications.\")\n return\n }\n\n const nextItems = Array.isArray(json.notifications) ? json.notifications : []\n setItems(nextItems)\n setUnreadCount(Number.isFinite(json.unreadCount) ? Math.max(0, Math.floor(json.unreadCount ?? 0)) : 0)\n setUnseenCount(Number.isFinite(json.unseenCount) ? Math.max(0, Math.floor(json.unseenCount ?? 0)) : 0)\n } catch {\n setError(\"Unable to load notifications.\")\n } finally {\n setLoading(false)\n }\n }, [limit])\n\n useEffect(() => {\n if (!open) return\n if (realtime) {\n void (async () => {\n try {\n await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: JSON.stringify({ limit: 1, markSeen: true }),\n })\n } catch {\n return\n }\n })()\n return\n }\n void refresh({ unreadOnly, markSeen: true })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n if (realtime) return\n void refresh({ unreadOnly, markSeen: false })\n }, [open, realtime, refresh, unreadOnly])\n\n const markAsRead = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/read`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n const nowIso = new Date().toISOString()\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.map((n) => (n.id === id && !n.readAt ? { ...n, readAt: nowIso, ...(n.seenAt ? {} : { seenAt: nowIso }) } : n))\n })\n } catch {\n return\n }\n }\n\n const archive = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/archive`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.filter((n) => n.id !== id)\n })\n } catch {\n return\n }\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-50 bg-black/50\" />\n <DialogPrimitive.Content\n className={cn(\n \"fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none\",\n className,\n )}\n >\n <header className=\"flex items-center justify-between gap-2 border-b px-4 py-3\">\n <div className=\"flex min-w-0 flex-col\">\n <DialogPrimitive.Title className=\"text-sm font-semibold\">Notifications</DialogPrimitive.Title>\n <span className=\"text-xs text-muted-foreground\">\n {mergedUnreadCount > 0 ? `${mergedUnreadCount} unread` : mergedUnseenCount > 0 ? `${mergedUnseenCount} new` : \"All caught up\"}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setUnreadOnly((v) => !v)}\n className={cn(\n \"rounded-md border px-2 py-1 text-xs\",\n unreadOnly ? \"bg-accent text-foreground\" : \"bg-background text-muted-foreground hover:bg-accent\",\n )}\n >\n {unreadOnly ? \"Unread\" : \"All\"}\n </button>\n <DialogPrimitive.Close asChild>\n <button type=\"button\" className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\">\n <X className=\"h-4 w-4\" />\n </button>\n </DialogPrimitive.Close>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto px-4 pb-3\">\n {mergedLoading ? (\n <div className=\"flex items-center justify-center py-10 text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n ) : mergedError ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">{mergedError}</div>\n ) : visibleItems.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">No notifications.</div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Unread notifications\n </div>\n {unreadGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No unread notifications.</div>\n ) : (\n unreadGroups.map((group) => (\n <div key={`unread:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n\n {unreadOnly ? null : (\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Previous notifications\n </div>\n {readGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No previous notifications.</div>\n ) : (\n readGroups.map((group) => (\n <div key={`previous:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n}) {\n const isUnread = !notification.readAt\n const createdAtLabel = (() => {\n const date = new Date(toMs(notification.createdAt))\n if (!Number.isFinite(date.getTime())) return \"\"\n return date.toLocaleString()\n })()\n\n return (\n <div\n className={cn(\n \"group flex w-full gap-3 px-4 py-3 hover:bg-accent/40\",\n isUnread ? \"bg-primary/5\" : \"bg-background\",\n )}\n >\n <button\n type=\"button\"\n className=\"min-w-0 flex-1 text-left\"\n onClick={() => {\n if (isUnread) {\n void onMarkRead(notification.id)\n }\n if (notification.url) {\n window.location.href = notification.url\n }\n }}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">{notification.title}</div>\n {notification.body ? (\n <div className=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">{notification.body}</div>\n ) : null}\n </div>\n {notification.url ? <div className=\"mt-2 truncate text-xs text-primary\">{notification.url}</div> : null}\n {createdAtLabel ? (\n <div className=\"mt-2 text-[11px] text-muted-foreground\">{createdAtLabel}</div>\n ) : null}\n </button>\n <div className=\"flex items-start\">\n <DropdownMenuPrimitive.Root>\n <DropdownMenuPrimitive.Trigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n aria-label=\"Notification options\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </button>\n </DropdownMenuPrimitive.Trigger>\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n align=\"end\"\n sideOffset={6}\n className={cn(\n \"z-50 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n )}\n >\n <DropdownMenuPrimitive.Item\n className=\"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\"\n onSelect={() => onArchive(notification.id)}\n >\n Archive\n </DropdownMenuPrimitive.Item>\n <DropdownMenuPrimitive.Item\n className=\"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\"\n disabled={!isUnread}\n onSelect={() => onMarkRead(notification.id)}\n >\n Mark as read\n </DropdownMenuPrimitive.Item>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n </DropdownMenuPrimitive.Root>\n </div>\n </div>\n )\n}\n"],"names":["toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","key","yearRaw","monthRaw","dayRaw","split","includeYear","toLocaleDateString","undefined","weekday","groupByDay","items","groups","currentKey","item","createdAt","push","label","length","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","mergedItems","notifications","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","useMemo","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","useCallback","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","ok","nextItems","Array","isArray","Math","max","floor","useEffect","keepalive","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","jsx","DialogPrimitive","jsxs","cn","v","X","Loader2","group","NotificationRow","t0","$","_c","notification","onMarkRead","onArchive","isUnread","t1","bb0","toLocaleString","createdAtLabel","t2","t3","t4","url","window","location","href","t5","title","t6","t7","t8","t9","t10","t11","Symbol","for","DropdownMenuPrimitive.Trigger","MoreVertical","t12","t13","t14","t15","t16","t17","DropdownMenuPrimitive.Root","DropdownMenuPrimitive.Content","t18"],"mappings":"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"}
1
+ {"version":3,"file":"index16.js","sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\nconst toMs = (iso: string): number => {\n const ms = Date.parse(iso)\n return Number.isFinite(ms) ? ms : 0\n}\n\nconst getDayKey = (iso: string): string => {\n const date = new Date(toMs(iso))\n if (!Number.isFinite(date.getTime())) return \"unknown\"\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, \"0\")\n const day = String(date.getDate()).padStart(2, \"0\")\n\n return `${year}-${month}-${day}`\n}\n\nconst formatDayLabel = (key: string): string => {\n if (key === \"unknown\") return \"Unknown date\"\n const [yearRaw, monthRaw, dayRaw] = key.split(\"-\")\n const year = Number(yearRaw)\n const month = Number(monthRaw)\n const day = Number(dayRaw)\n\n if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return \"Unknown date\"\n\n const date = new Date(year, month - 1, day)\n if (!Number.isFinite(date.getTime())) return \"Unknown date\"\n\n const now = new Date()\n const includeYear = now.getFullYear() !== year\n return date.toLocaleDateString(undefined, includeYear\n ? { weekday: \"short\", month: \"short\", day: \"numeric\", year: \"numeric\" }\n : { weekday: \"short\", month: \"short\", day: \"numeric\" })\n}\n\nconst groupByDay = (items: NotificationItem[]): DayGroup[] => {\n const groups: DayGroup[] = []\n let currentKey: string | null = null\n\n for (const item of items) {\n const key = getDayKey(item.createdAt)\n if (key !== currentKey) {\n currentKey = key\n groups.push({ key, label: formatDayLabel(key), items: [] })\n }\n groups[groups.length - 1]!.items.push(item)\n }\n\n return groups\n}\n\nconst EmptyRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nexport function NotificationsDrawer({\n open,\n onOpenChange,\n className,\n limit = 50,\n defaultUnreadOnly = false,\n realtimeContext,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n className?: string\n limit?: number\n defaultUnreadOnly?: boolean\n realtimeContext?: Context<NotificationsRealtimeState | null>\n}) {\n const realtime = useContext(realtimeContext ?? EmptyRealtimeContext)\n\n const [items, setItems] = useState<NotificationItem[]>([])\n const [unreadCount, setUnreadCount] = useState<number>(0)\n const [unseenCount, setUnseenCount] = useState<number>(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [unreadOnly, setUnreadOnly] = useState<boolean>(defaultUnreadOnly)\n\n const mergedItems = realtime?.notifications ?? items\n const mergedUnreadCount = realtime?.unreadCount ?? unreadCount\n const mergedUnseenCount = realtime?.unseenCount ?? unseenCount\n const mergedLoading = realtime?.loading ?? loading\n const mergedError = realtime?.error\n ? (realtime.error instanceof Error ? realtime.error.message : String(realtime.error))\n : error\n\n const visibleItems = useMemo(() => mergedItems.slice(0, limit), [limit, mergedItems])\n\n const unread = useMemo(() => visibleItems.filter((n) => !n.readAt), [visibleItems])\n const read = useMemo(() => visibleItems.filter((n) => Boolean(n.readAt)), [visibleItems])\n const unreadGroups = useMemo(() => groupByDay(unread), [unread])\n const readGroups = useMemo(() => groupByDay(read), [read])\n\n const refresh = useCallback(async ({ unreadOnly, markSeen }: { unreadOnly: boolean; markSeen: boolean }) => {\n setLoading(true)\n setError(null)\n\n try {\n const res = await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({ limit, unreadOnly, markSeen }),\n })\n\n const json = (await res.json().catch(() => null)) as ListResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notifications.\")\n return\n }\n\n const nextItems = Array.isArray(json.notifications) ? json.notifications : []\n setItems(nextItems)\n setUnreadCount(Number.isFinite(json.unreadCount) ? Math.max(0, Math.floor(json.unreadCount ?? 0)) : 0)\n setUnseenCount(Number.isFinite(json.unseenCount) ? Math.max(0, Math.floor(json.unseenCount ?? 0)) : 0)\n } catch {\n setError(\"Unable to load notifications.\")\n } finally {\n setLoading(false)\n }\n }, [limit])\n\n useEffect(() => {\n if (!open) return\n if (realtime) {\n void (async () => {\n try {\n await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: JSON.stringify({ limit: 1, markSeen: true }),\n })\n } catch {\n return\n }\n })()\n return\n }\n void refresh({ unreadOnly, markSeen: true })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n if (realtime) return\n void refresh({ unreadOnly, markSeen: false })\n }, [open, realtime, refresh, unreadOnly])\n\n const markAsRead = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/read`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n const nowIso = new Date().toISOString()\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.map((n) => (n.id === id && !n.readAt ? { ...n, readAt: nowIso, ...(n.seenAt ? {} : { seenAt: nowIso }) } : n))\n })\n } catch {\n return\n }\n }\n\n const archive = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/archive`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.filter((n) => n.id !== id)\n })\n } catch {\n return\n }\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-50 bg-black/50\" />\n <DialogPrimitive.Content\n className={cn(\n \"fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none\",\n className,\n )}\n >\n <header className=\"flex items-center justify-between gap-2 border-b px-4 py-3\">\n <div className=\"flex min-w-0 flex-col\">\n <DialogPrimitive.Title className=\"text-sm font-semibold\">Notifications</DialogPrimitive.Title>\n <span className=\"text-xs text-muted-foreground\">\n {mergedUnreadCount > 0 ? `${mergedUnreadCount} unread` : mergedUnseenCount > 0 ? `${mergedUnseenCount} new` : \"All caught up\"}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setUnreadOnly((v) => !v)}\n className={cn(\n \"rounded-md border px-2 py-1 text-xs\",\n unreadOnly ? \"bg-accent text-foreground\" : \"bg-background text-muted-foreground hover:bg-accent\",\n )}\n >\n {unreadOnly ? \"Unread\" : \"All\"}\n </button>\n <DialogPrimitive.Close asChild>\n <button type=\"button\" className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\">\n <X className=\"h-4 w-4\" />\n </button>\n </DialogPrimitive.Close>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto px-4 pb-3\">\n {mergedLoading ? (\n <div className=\"flex items-center justify-center py-10 text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n ) : mergedError ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">{mergedError}</div>\n ) : visibleItems.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">No notifications.</div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Unread notifications\n </div>\n {unreadGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No unread notifications.</div>\n ) : (\n unreadGroups.map((group) => (\n <div key={`unread:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n\n {unreadOnly ? null : (\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Previous notifications\n </div>\n {readGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No previous notifications.</div>\n ) : (\n readGroups.map((group) => (\n <div key={`previous:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n}) {\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef<HTMLDivElement | null>(null)\n const menuButtonRef = useRef<HTMLButtonElement | null>(null)\n const isUnread = !notification.readAt\n const createdAtLabel = (() => {\n const date = new Date(toMs(notification.createdAt))\n if (!Number.isFinite(date.getTime())) return \"\"\n return date.toLocaleString()\n })()\n\n useEffect(() => {\n if (!menuOpen) return\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) return\n if (menuRef.current?.contains(target) || menuButtonRef.current?.contains(target)) return\n setMenuOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return\n setMenuOpen(false)\n menuButtonRef.current?.focus()\n }\n\n document.addEventListener(\"pointerdown\", handlePointerDown)\n document.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown)\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [menuOpen])\n\n return (\n <div\n className={cn(\n \"group flex w-full gap-3 px-4 py-3 hover:bg-accent/40\",\n isUnread ? \"bg-primary/5\" : \"bg-background\",\n )}\n >\n <button\n type=\"button\"\n className=\"min-w-0 flex-1 text-left\"\n onClick={() => {\n if (isUnread) {\n void onMarkRead(notification.id)\n }\n if (notification.url) {\n window.location.href = notification.url\n }\n }}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">{notification.title}</div>\n {notification.body ? (\n <div className=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">{notification.body}</div>\n ) : null}\n </div>\n {notification.url ? <div className=\"mt-2 truncate text-xs text-primary\">{notification.url}</div> : null}\n {createdAtLabel ? (\n <div className=\"mt-2 text-[11px] text-muted-foreground\">{createdAtLabel}</div>\n ) : null}\n </button>\n <div className=\"relative flex items-start\">\n <button\n ref={menuButtonRef}\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n aria-label=\"Notification options\"\n aria-haspopup=\"menu\"\n aria-expanded={menuOpen}\n onClick={() => {\n setMenuOpen((open) => !open)\n }}\n >\n <MoreVertical className=\"h-4 w-4\" />\n </button>\n {menuOpen ? (\n <div\n ref={menuRef}\n role=\"menu\"\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground\"\n onClick={() => {\n setMenuOpen(false)\n onArchive(notification.id)\n }}\n >\n Archive\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n disabled={!isUnread}\n onClick={() => {\n setMenuOpen(false)\n onMarkRead(notification.id)\n }}\n >\n Mark as read\n </button>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"names":["toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","key","yearRaw","monthRaw","dayRaw","split","includeYear","toLocaleDateString","undefined","weekday","groupByDay","items","groups","currentKey","item","createdAt","push","label","length","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","mergedItems","notifications","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","useMemo","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","useCallback","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","ok","nextItems","Array","isArray","Math","max","floor","useEffect","keepalive","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","jsx","DialogPrimitive","jsxs","cn","v","X","Loader2","group","NotificationRow","t0","$","_c","notification","onMarkRead","onArchive","menuOpen","setMenuOpen","menuRef","useRef","menuButtonRef","isUnread","t1","bb0","toLocaleString","createdAtLabel","t2","t3","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","addEventListener","removeEventListener","t4","t5","t6","url","window","location","href","t7","title","t8","t9","t10","t11","t12","t13","t14","Symbol","for","_temp","MoreVertical","t15","t16","t17","t18"],"mappings":"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"}